This commit is contained in:
2025-12-12 11:01:29 +07:00
parent 123853df5c
commit 04f6e919f0
3 changed files with 205 additions and 222 deletions

View File

@@ -124,7 +124,6 @@
<div class="card bg-base-100 shadow"> <div class="card bg-base-100 shadow">
<div class="card-body px-0 pb-0"> <div class="card-body px-0 pb-0">
<div class="px-6">
<div class="flex items-start justify-between"> <div class="flex items-start justify-between">
<span class="font-medium"> <span class="font-medium">
Doanh thu Doanh thu
@@ -148,7 +147,6 @@
Tổng doanh thu trong năm nay Tổng doanh thu trong năm nay
</span> </span>
</div> </div>
</div>
<div id="revenue-statics-chart"></div> <div id="revenue-statics-chart"></div>
</div> </div>
</div> </div>
@@ -160,7 +158,7 @@
<div class="card bg-base-100 shadow"> <div class="card bg-base-100 shadow">
<div class="card-body p-0"> <div class="card-body p-0">
<div class="flex items-center justify-between px-5 pt-5"> <div class="flex items-center justify-between">
<span class="font-medium"> <span class="font-medium">
Truy cập khách hàng Truy cập khách hàng
</span> </span>
@@ -171,8 +169,8 @@
</span> </span>
</div> </div>
</div> </div>
<div class="mt-4 py-3"> <div class="mt-4">
<div class="divide-base-300 grid grid-cols-2 gap-5 px-5 sm:grid-cols-3 sm:divide-x"> <div class="divide-base-300 grid grid-cols-2 gap-5 sm:grid-cols-3 sm:divide-x">
<div class="text-center"> <div class="text-center">
<p>Advertise</p> <p>Advertise</p>
<p class="mt-0.5 text-xl font-medium"> <p class="mt-0.5 text-xl font-medium">
@@ -195,7 +193,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="-mt-25 sm:mx-5"> <div class="-mt-25">
<div id="customer-acquisition-chart"></div> <div id="customer-acquisition-chart"></div>
</div> </div>
</div> </div>

View File

@@ -16,10 +16,17 @@
<i data-lucide="search"></i> <i data-lucide="search"></i>
</button> </button>
<dialog id="topbar-search-modal" class="modal p-0"> <dialog id="topbar-search-modal" class="modal p-0">
<div class="modal-box bg-transparent p-0 shadow-none"> <div class="modal-box bg-transparent p-0 shadow-none max-w-xl">
<div class="bg-base-100 rounded-box"> <div class="bg-base-100 rounded-box">
<div class="input w-full border-0 !outline-none"> <div class="input w-full border-0 !outline-none pl-0">
<i data-lucide="search" class="text-base-content/60 size-4.5"></i> <select name="search-category" id="search-category"
class="select !outline-none border-0 border-r-1 border-base-300 font-bold">
<option value="">Chọn nội dung tìm</option>
<option value="">Bán hàng</option>
<option value="">Sản phẩm</option>
<option value="">Khách hàng</option>
</select>
<i data-lucide="search" class="text-base-content/60 size-8"></i>
<input type="search" class="grow" placeholder="Tìm kiếm" aria-label="Search" /> <input type="search" class="grow" placeholder="Tìm kiếm" aria-label="Search" />
<form method="dialog"> <form method="dialog">
<button class="btn btn-xs btn-circle btn-ghost" aria-label="Close"> <button class="btn btn-xs btn-circle btn-ghost" aria-label="Close">
@@ -27,199 +34,50 @@
</button> </button>
</form> </form>
</div> </div>
<div class="border-base-300 flex items-center gap-3 border-t px-2 py-2">
<div class="flex items-center gap-0.5">
<div
class="border-base-300 bg-base-200 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<i data-lucide="arrow-up" class="size-3.5"></i>
</div>
<div
class="border-base-300 bg-base-200 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<i data-lucide="arrow-down" class="size-3.5"></i>
</div>
<p class="text-base-content/80 ms-1 text-sm">Điều hướng</p>
</div>
<div class="flex items-center gap-0.5 max-sm:hidden">
<div
class="border-base-300 bg-base-200 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<i data-lucide="undo-2" class="size-3.5"></i>
</div>
<p class="text-base-content/80 ms-1 text-sm">Quay lại</p>
</div>
<div class="flex items-center gap-0.5">
<div
class="border-base-300 bg-base-200 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<i data-lucide="corner-down-left" class="size-3.5"></i>
</div>
<p class="text-base-content/80 ms-1 text-sm">Mở</p>
</div>
<div class="ms-auto flex items-center gap-0.5">
<div
class="border-base-300 bg-base-200 flex h-5 items-center justify-center rounded-sm border px-1 text-sm/none shadow-xs">
esc
</div>
<p class="text-base-content/80 ms-1 text-sm">Đóng</p>
</div>
</div>
</div> </div>
<div class="bg-base-100 rounded-box mt-4"> <div class="bg-base-100 rounded-box mt-4">
<div class="px-5 py-3"> <div class="px-5 py-3">
<p class="text-base-content/80 text-sm font-medium">I'm looking for...</p> <p class="text-base-content/80 text-sm font-medium">Từ khóa tìm kiếm gần đây...</p>
<div class="mt-2 flex flex-wrap gap-1.5"> <div class="mt-2 flex flex-wrap gap-1.5">
<div <div
class="border-base-300 hover:bg-base-200 rounded-box cursor-pointer border px-2.5 py-1 text-sm/none"> class="border-base-300 hover:bg-base-200 rounded-box cursor-pointer border px-2.5 py-1 text-sm/none">
Writer Đơn hàng
</div> </div>
<div <div
class="border-base-300 hover:bg-base-200 rounded-box cursor-pointer border px-2.5 py-1 text-sm/none"> class="border-base-300 hover:bg-base-200 rounded-box cursor-pointer border px-2.5 py-1 text-sm/none">
Editor Sản phẩm
</div> </div>
<div <div
class="border-base-300 hover:bg-base-200 rounded-box cursor-pointer border px-2.5 py-1 text-sm/none"> class="border-base-300 hover:bg-base-200 rounded-box cursor-pointer border px-2.5 py-1 text-sm/none">
Explainer Bài viết
</div> </div>
<div <div
class="border-base-300 hover:bg-base-200 rounded-box flex cursor-pointer items-center gap-1 border border-dashed px-2.5 py-1 text-sm/none"> class="border-base-300 hover:bg-base-200 rounded-box flex cursor-pointer items-center gap-1 border border-dashed px-2.5 py-1 text-sm/none">
<span class="iconify lucide--plus size-3.5"></span> Khách hàng
Action
</div> </div>
</div> </div>
</div> </div>
<hr class="border-base-300 h-px border-dashed" /> <hr class="border-base-300 h-px border-dashed" />
<ul class="menu w-full pt-1"> <ul class="menu w-full pt-1">
<li class="menu-title">Talk to assistant</li> <li class="menu-title">Tác vụ nhanh</li>
<li> <li>
<div class="group"> <a href="/admin/order" class="group">
<div <i data-lucide="store" class="size-3"></i>
class="from-primary to-primary/80 mask mask-squircle text-primary-content flex size-5 items-center justify-center bg-linear-to-b leading-none font-medium"> <p class="grow text-sm">Danh sách đơn hàng</p>
R </a>
</div>
<p class="grow text-sm">Research Buddy</p>
<div
class="flex translate-x-2 items-center gap-2.5 opacity-0 transition-all duration-300 group-hover:translate-x-0 group-hover:opacity-100">
<span class="iconify lucide--star text-orange-500"></span>
<div class="flex items-center gap-0.5">
<div
class="border-base-300 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<span class="iconify lucide--corner-down-left size-3.5"></span>
</div>
<p class="ms-1 text-sm opacity-80">Select</p>
</div>
<span class="iconify lucide--ellipsis-vertical opacity-80"></span>
</div>
</div>
</li>
<li>
<div class="group">
<div
class="from-secondary to-secondary/80 mask mask-squircle text-secondary-content flex size-5 items-center justify-center bg-linear-to-b leading-none font-medium">
T
</div>
<p class="grow text-sm">Task Planner</p>
<div
class="flex translate-x-2 items-center gap-2.5 opacity-0 transition-all duration-300 group-hover:translate-x-0 group-hover:opacity-100">
<span class="iconify lucide--star text-orange-500"></span>
<div class="flex items-center gap-0.5">
<div
class="border-base-300 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<span class="iconify lucide--corner-down-left size-3.5"></span>
</div>
<p class="ms-1 text-sm opacity-80">Select</p>
</div>
<span class="iconify lucide--ellipsis-vertical opacity-80"></span>
</div>
</div>
</li> </li>
<li> <li>
<div class="group"> <a href="/admin/product" class="group">
<div <i data-lucide="package" class="size-3"></i>
class="from-success to-success/80 mask mask-squircle text-success-content flex size-5 items-center justify-center bg-linear-to-b leading-none font-medium"> <p class="grow text-sm">Danh sách sản phẩm</p>
S </a>
</div>
<p class="grow text-sm">Sparking Ideas</p>
<div
class="flex translate-x-2 items-center gap-2.5 opacity-0 transition-all duration-300 group-hover:translate-x-0 group-hover:opacity-100">
<span class="iconify lucide--star text-orange-500"></span>
<div class="flex items-center gap-0.5">
<div
class="border-base-300 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<span class="iconify lucide--corner-down-left size-3.5"></span>
</div>
<p class="ms-1 text-sm opacity-80">Select</p>
</div>
<span class="iconify lucide--ellipsis-vertical opacity-80"></span>
</div>
</div>
</li> </li>
<li> <li>
<div class="group"> <a href="/admin/customer" class="group">
<div <i data-lucide="user" class="size-3"></i>
class="from-warning to-warning/80 mask mask-squircle text-warning-content flex size-5 items-center justify-center bg-linear-to-b leading-none font-medium"> <p class="grow text-sm">Danh sách khách hàng</p>
D </a>
</div>
<p class="grow text-sm">Docs Assistant</p>
<div
class="flex translate-x-2 items-center gap-2.5 opacity-0 transition-all duration-300 group-hover:translate-x-0 group-hover:opacity-100">
<span class="iconify lucide--star text-orange-500"></span>
<div class="flex items-center gap-0.5">
<div
class="border-base-300 flex size-5 items-center justify-center rounded-sm border shadow-xs">
<span class="iconify lucide--corner-down-left size-3.5"></span>
</div>
<p class="ms-1 text-sm opacity-80">Select</p>
</div>
<span class="iconify lucide--ellipsis-vertical opacity-80"></span>
</div>
</div>
</li>
</ul>
<hr class="border-base-300 h-px border-dashed" />
<ul class="menu w-full pt-1">
<li class="menu-title flex flex-row items-center justify-between gap-2">
<span>Tasks Manager</span>
<span>Progress</span>
</li>
<li>
<div>
<span class="iconify lucide--notebook size-4"></span>
<p class="grow text-sm">Creating an essay</p>
<progress class="progress progress-primary h-1 w-30" value="60"
max="100"></progress>
</div>
</li>
<li>
<div>
<span class="iconify lucide--message-circle size-4"></span>
<p class="grow text-sm">Summarizing chat</p>
<progress class="progress progress-secondary h-1 w-30" value="80"
max="100"></progress>
</div>
</li>
<li>
<div>
<span class="iconify lucide--code size-4"></span>
<p class="grow text-sm">Fixing syntax</p>
<progress class="progress progress-accent h-1 w-30" value="35" max="100"></progress>
</div>
</li>
<li>
<div>
<span class="iconify lucide--book-open size-4"></span>
<p class="grow text-sm">Reading docs</p>
<progress class="progress progress-info h-1 w-30" value="90" max="100"></progress>
</div>
</li>
<li>
<div>
<span class="iconify lucide--lightbulb size-4"></span>
<p class="grow text-sm">Generating ideas</p>
<progress class="progress progress-warning h-1 w-30" value="50"
max="100"></progress>
</div>
</li> </li>
</ul> </ul>
</div> </div>
@@ -240,21 +98,18 @@
class="dropdown-content bg-base-100 rounded-box mt-1 w-80 shadow-md duration-1000 hover:shadow-lg"> class="dropdown-content bg-base-100 rounded-box mt-1 w-80 shadow-md duration-1000 hover:shadow-lg">
<div class="bg-base-200/30 rounded-t-box border-base-200 border-b ps-4 pe-2 pt-3"> <div class="bg-base-200/30 rounded-t-box border-base-200 border-b ps-4 pe-2 pt-3">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<p class="font-medium">Notification</p> <p class="font-medium">Thông báo</p>
<button class="btn btn-xs btn-circle btn-ghost" aria-label="Close" <button class="btn btn-xs btn-circle btn-ghost" aria-label="Close"
onclick="document.activeElement.blur()"> onclick="document.activeElement.blur()">
<span class="iconify lucide--x size-4"></span> <span data-lucide="x" class="size-4"></span>
</button> </button>
</div> </div>
<div class="-ms-2 mt-2 -mb-px flex items-center justify-between"> <div class="-ms-2 mt-2 -mb-px flex items-center justify-between">
<div role="tablist" class="tabs tabs-sm tabs-border"> <div role="tablist" class="tabs tabs-sm tabs-border">
<div role="tab" class="tab tab-active gap-2 px-3 font-medium"> <div role="tab" class="tab tab-active gap-2 px-3 font-medium">
<span>All</span> <span>Tất cả</span>
<div class="badge badge-sm">4</div> <div class="badge badge-sm">4</div>
</div> </div>
<div role="tab" class="tab gap-2 px-3"><span>Team</span></div>
<div role="tab" class="tab gap-2 px-3"><span>AI</span></div>
<div role="tab" class="tab gap-2 px-3"><span>@mention</span></div>
</div> </div>
</div> </div>
</div> </div>
@@ -327,21 +182,116 @@
</div> </div>
<hr class="border-base-200" /> <hr class="border-base-200" />
<div class="flex items-center justify-between px-2 py-2"> <div class="flex items-center justify-between px-2 py-2">
<button class="btn btn-sm btn-soft btn-primary">View All</button> <button class="btn btn-sm btn-soft btn-primary"
<div class="flex items-center gap-1"> onclick="document.getElementById('topbar-notifications')?.showModal()">Xem tất cả</button>
<button class="btn btn-sm btn-square btn-ghost"> </div>
<span class="iconify lucide--check-check size-4"></span> </div>
</div>
<!-- hiển thị popup thông báo -->
<dialog id="topbar-notifications" class="modal p-0">
<div class="modal-box bg-transparent p-0 shadow-none max-w-xl">
<div class="bg-base-100 rounded-box p-3">
<div class="flex items-center justify-between">
<p class="font-medium">Thông báo</p>
<form method="dialog">
<button class="btn btn-xs btn-circle btn-ghost" aria-label="Close">
<i data-lucide="x" class="text-base-content/80 size-4"></i>
</button> </button>
<button class="btn btn-sm btn-square btn-ghost"> </form>
<span class="iconify lucide--bell-ring size-4"></span> </div>
<div class="-ms-2 mt-2 -mb-px flex items-center justify-between">
<div role="tablist" class="tabs tabs-sm tabs-border">
<div role="tab" class="tab tab-active gap-2 px-3 font-medium">
<span>Tất cả</span>
<div class="badge badge-sm">8</div>
</div>
<div role="tab" class="tab gap-2 px-3 font-medium">
<span>Đã đọc</span>
<div class="badge badge-sm">4</div>
</div>
<div role="tab" class="tab gap-2 px-3 font-medium">
<span>Chưa đọc</span>
<div class="badge badge-sm">4</div>
</div>
</div>
</div>
<div class="overflow-auto max-h-[450px]">
<div class="hover:bg-base-200/20 relative flex items-start gap-3 p-4 transition-all">
<div class="avatar avatar-online size-12">
<img src="../../assets/images//avatars/2.png"
class="from-primary/80 to-primary/60 mask mask-squircle bg-linear-to-b px-1 pt-1"
alt="" />
</div>
<div class="grow">
<p class="text-sm leading-tight">Lena submitted a draft for review.</p>
<p class="text-base-content/60 text-xs">15 min ago</p>
<div class="mt-2 flex items-center gap-2">
<button class="btn btn-sm btn-primary">Approve</button>
<button class="btn btn-sm btn-outline border-base-300">Decline</button>
</div>
</div>
<div class="status status-primary absolute end-4 top-4 size-1.5"></div>
</div>
<hr class="border-base-300 border-dashed" />
<div class="hover:bg-base-200/20 flex items-start gap-3 p-4 transition-all">
<div class="avatar avatar-offline size-12">
<img src="/images/avatars/4.png"
class="from-secondary/80 to-secondary/60 mask mask-squircle bg-linear-to-b px-1 pt-1"
alt="" />
</div>
<div class="grow">
<p class="text-sm leading-tight">Kai mentioned you in a project.</p>
<p class="text-base-content/60 text-xs">22 min ago</p>
<div
class="from-base-200 via-base-200/80 rounded-box mt-2 flex items-center justify-between gap-2 bg-linear-to-r to-transparent py-1 ps-2.5">
<p class="text-sm">Check model inputs?</p>
<button class="btn btn-xs btn-ghost text-xs">
<span class="iconify lucide--reply size-3.5"></span>
Reply
</button> </button>
<button class="btn btn-sm btn-square btn-ghost"> </div>
<span class="iconify lucide--settings size-4"></span> </div>
</div>
<hr class="border-base-300 border-dashed" />
<div class="hover:bg-base-200/20 flex items-start gap-3 p-4 transition-all">
<div class="avatar size-12">
<img src="/images/avatars/5.png"
class="mask mask-squircle bg-linear-to-b from-orange-500/80 to-orange-500/60 px-1 pt-1"
alt="" />
</div>
<div class="grow">
<p class="text-sm leading-tight">Your latest results are ready</p>
<div
class="border-base-200 rounded-box mt-2 flex items-center justify-between gap-2 border px-2.5 py-1.5">
<p class="text-sm">
Forecast Report
<span class="text-base-content/60 text-xs">(12 MB)</span>
</p>
<button class="btn btn-xs btn-square btn-ghost text-xs">
<span class="iconify lucide--arrow-down-to-line size-4"></span>
</button>
</div>
<div
class="border-base-200 rounded-box mt-2 flex items-center justify-between gap-2 border px-2.5 py-1.5">
<p class="text-sm">
Generated Summary
<span class="text-base-content/60 text-xs">(354 KB)</span>
</p>
<button class="btn btn-xs btn-square btn-ghost text-xs">
<span class="iconify lucide--arrow-down-to-line size-4"></span>
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
</div>
<form method="dialog" class="modal-backdrop">
<button>close</button>
</form>
</dialog>
<!-- tài khoản người dùng -->
<div class="dropdown dropdown-bottom dropdown-end w-full"> <div class="dropdown dropdown-bottom dropdown-end w-full">
<div tabindex="0" role="button" <div tabindex="0" role="button"
class="hover:bg-base-300 rounded-box mx-2 mt-0 flex cursor-pointer items-center gap-2.5 transition-all group"> class="hover:bg-base-300 rounded-box mx-2 mt-0 flex cursor-pointer items-center gap-2.5 transition-all group">
@@ -351,27 +301,58 @@
</div> </div>
</div> </div>
<div class="grow -space-y-0.5"> <div class="grow -space-y-0.5">
<p class="text-sm font-medium text-white group-hover:text-black">Denish N</p> <p class="text-sm font-medium text-white group-hover:text-black">Admin</p>
<p class="text-base-content/60 text-xs text-white group-hover:text-black">@withden</p> <p class="text-base-content/60 text-xs text-white group-hover:text-black">@hura</p>
</div> </div>
<i data-lucide="chevrons-up-down" class="size-4 text-white group-hover:text-black"></i>
</div> </div>
<ul role="menu" tabindex="0" <ul role="menu" tabindex="0"
class="dropdown-content menu bg-base-100 rounded-box shadow-base-content/4 mb-1 w-48 p-1 shadow-[0px_-10px_40px_0px]"> class="dropdown-content menu bg-base-100 rounded-box shadow-base-content/4 mb-1 w-48 p-1 shadow-[0px_-10px_40px_0px]">
<li> <li>
<a href="./pages/settings.html"> <a href="">
<i data-lucide="user" class="size-4"></i> <i data-lucide="user" class="size-4"></i>
<span>Tài khoản</span> <span>Hồ sơ cá nhân</span>
</a> </a>
</li> </li>
<li> <li>
<a href="/admin/system/settings"> <a href="">
<i data-lucide="Settings" class="size-4"></i> <i data-lucide="settings" class="size-4"></i>
<span>Cài đặt hệ thống</span> <span>Cài đặt tài khoản</span>
</a>
</li>
<li>
<a href="/logout.php">
<i data-lucide="logout" class="size-4"></i>
<span>Đăng xuất</span>
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<!-- cài đặt hệ thống -->
<div class="dropdown dropdown-bottom dropdown-end w-full">
<div tabindex="0" role="button" class="btn btn-sm relative" aria-label="settings">
<i data-lucide="settings" class="motion-preset-seesaw size-4.5"></i>
<span>Cài đặt</span>
</div>
<ul role="setting" tabindex="0"
class="dropdown-content menu bg-base-100 rounded-box shadow-base-content/4 mb-1 w-48 p-1 shadow-[0px_-10px_40px_0px]">
<div class="max-h-[400px] overflow-auto">
{% for _menu_item in global.main_menu %}
{% assign _menu_children = _menu_item.menu %}
{% if _menu_item.id == 'system' %}
{% for _item in _menu_children | limit: 10 %}
<li>
<a href="{{ _item.url }}">
<span>{{ _item.name }}</span>
</a>
</li>
{% endfor %}
{% endif %}
{% endfor %}
</div>
</ul>
</div>
</div> </div>
</div> </div>
<div class="flex items-center justify-between gap-3 relative"> <div class="flex items-center justify-between gap-3 relative">

View File

@@ -8,7 +8,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- library tailwindcss + daisyui css --> <!-- library tailwindcss + daisyui css -->
<link rel="stylesheet" href="{{ 'hura-lib.css' | asset_url }}" /> <link href="https://cdn.jsdelivr.net/npm/daisyui@5" rel="stylesheet" type="text/css" />
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<!-- file build tailwindcss + daisyui -->
<!-- <link rel="stylesheet" href="{{ 'hura-lib.css' | asset_url }}" /> -->
<!-- hura global css --> <!-- hura global css -->
<link rel="stylesheet" href="{{ 'hura.global.css' | asset_url }}" /> <link rel="stylesheet" href="{{ 'hura.global.css' | asset_url }}" />