u
BIN
assets/images/404.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/images/after-price.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
assets/images/background-bst-mb-news.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
assets/images/background-bst-mb.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
assets/images/background-bst-news.png
Normal file
|
After Width: | Height: | Size: 486 KiB |
BIN
assets/images/background-bst.png
Normal file
|
After Width: | Height: | Size: 744 KiB |
BIN
assets/images/bct.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
assets/images/bct_news.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
assets/images/bg-dealvang.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
assets/images/bg-title-category-mb.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
assets/images/bg-title-category.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
assets/images/bg-top-image.png
Normal file
|
After Width: | Height: | Size: 971 B |
BIN
assets/images/cart-home.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
assets/images/dangky.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
assets/images/error-shopping.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
assets/images/error-shoppings.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
assets/images/favicon-news.png
Normal file
|
After Width: | Height: | Size: 873 B |
BIN
assets/images/favicon-newss.png
Normal file
|
After Width: | Height: | Size: 473 B |
BIN
assets/images/favicon.png
Normal file
|
After Width: | Height: | Size: 619 B |
BIN
assets/images/forget-passs.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
assets/images/icon-spec-news.png
Normal file
|
After Width: | Height: | Size: 589 B |
BIN
assets/images/icon-spec.png
Normal file
|
After Width: | Height: | Size: 589 B |
BIN
assets/images/icon-zalo.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
assets/images/icon_2026.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
assets/images/icon_2026_1200_chot.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/icon_2026_1200_chot_2.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/icon_2026_1200_ok.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/icon_2026_1600.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
assets/images/icon_2026_1600_2.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
assets/images/icon_2026_1600_3.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
assets/images/icon_2026_1600_chot.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
assets/images/icon_2026_1600_news.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
assets/images/icon_2026_1600_newss.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
assets/images/icon_2026_1600_ok_2.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
assets/images/icon_2026_1600_ok_3.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
assets/images/icon_2026_2.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
assets/images/icon_2026_4.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/images/icon_2026_border.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
assets/images/icon_2026_border_news.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/icon_2026_border_newss.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/icon_2026_mbile.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/images/icon_2026_mobile.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/images/icon_2026_news-1.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/images/icon_2026_news.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
assets/images/icon_2026_newss.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
assets/images/icon_2026_ok.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
assets/images/icon_addCart.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
assets/images/icon_addCart_news.png
Normal file
|
After Width: | Height: | Size: 972 B |
BIN
assets/images/icon_facebook.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
assets/images/icon_flash.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
assets/images/icon_gift.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/images/icon_gift_2.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
assets/images/icon_sale.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
assets/images/icon_star.png
Normal file
|
After Width: | Height: | Size: 475 B |
BIN
assets/images/icon_youtube.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
assets/images/icon_zalo.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
BIN
assets/images/image-search-news.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
assets/images/lienhe-bg.png
Normal file
|
After Width: | Height: | Size: 430 KiB |
BIN
assets/images/lienhe-bgs.png
Normal file
|
After Width: | Height: | Size: 430 KiB |
BIN
assets/images/login-news.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
assets/images/login-newss.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/images/login.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
assets/images/logo.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
assets/images/miq_pink.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
assets/images/no-image.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
assets/images/not-search.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
assets/images/not-searchs.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
assets/images/qr_code.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
assets/images/sale-pro-detail-1.png
Normal file
|
After Width: | Height: | Size: 337 KiB |
BIN
assets/images/sale-pro-detail-2.png
Normal file
|
After Width: | Height: | Size: 231 KiB |
BIN
assets/images/star-rating.png
Normal file
|
After Width: | Height: | Size: 760 B |
BIN
assets/images/success-news.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
assets/images/success.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
assets/images/title-bst-mb.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
assets/images/title-bst.png
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
assets/images/title-sale-product-mb.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
assets/images/title-sale-product-mbb.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
assets/images/title-sale-product-mbbb.png
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
assets/images/title-sale-product.png
Normal file
|
After Width: | Height: | Size: 189 KiB |
BIN
assets/images/update.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
assets/images/updates.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
7308
assets/script/hura-lib.css
Normal file
252
assets/script/hura.global.css
Normal file
@@ -0,0 +1,252 @@
|
||||
/* ===========================
|
||||
FONT IMPORT (Dùng chung)
|
||||
=========================== */
|
||||
@import "https://fonts.googleapis.com/css2?family=DM+Sans:wght@100;200;300;400;500;600;700;800;900;1000&display=swap";
|
||||
@import "https://fonts.googleapis.com/css2?family=Wix+Madefor+Text:wght@400;500;600;700;800;1000&display=swap";
|
||||
@import "https://fonts.googleapis.com/css2?family=Inclusive+Sans:wght@400;500;600;700;800;900;1000&display=swap";
|
||||
@import "https://fonts.googleapis.com/css2?family=AR+One+Sans:wght@400;500;600;700;800;1000&display=swap";
|
||||
|
||||
@layer properties {
|
||||
:root {
|
||||
--font-sans: "Inclusive Sans", sans-serif;
|
||||
--text-base: 16px;
|
||||
--bg-body: #fafbfd;
|
||||
--color-hura: #0041e8;
|
||||
--color-header: #002bb5;
|
||||
--text-base--line-height: 1.5;
|
||||
--color-black: #000;
|
||||
--color-white: #fff;
|
||||
--spacing: 0.25rem;
|
||||
--layout-topbar-background: #fff;
|
||||
--menu-active: #e9f2ff;
|
||||
--menu-text: #177bff;
|
||||
--menu-sub-bg: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
html,
|
||||
body {
|
||||
font-family: var(--font-sans);
|
||||
font-size: var(--text-base);
|
||||
line-height: var(--text-base--line-height);
|
||||
}
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
|
||||
@layer components {
|
||||
#layout-topbar {
|
||||
background: var(--layout-topbar-background);
|
||||
top: calc(var(--spacing) * 0);
|
||||
z-index: 10;
|
||||
transition-property: top, margin, border-radius;
|
||||
transition-timing-function: var(
|
||||
--tw-ease,
|
||||
var(--default-transition-timing-function)
|
||||
);
|
||||
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
||||
--tw-duration: 0.3s;
|
||||
transition-duration: 0.3s;
|
||||
position: sticky;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 1px;
|
||||
border-color: var(--color-base-300);
|
||||
}
|
||||
#layout-content {
|
||||
padding: calc(var(--spacing) * 6);
|
||||
transition-property: all;
|
||||
transition-timing-function: var(
|
||||
--tw-ease,
|
||||
var(--default-transition-timing-function)
|
||||
);
|
||||
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
||||
flex-grow: 1;
|
||||
background: var(--bg-body);
|
||||
}
|
||||
.bg-menu {
|
||||
background-color: var(--color-header);
|
||||
}
|
||||
/* menu */
|
||||
.menu {
|
||||
& {
|
||||
--menu-active-bg: #e9f2ff;
|
||||
}
|
||||
}
|
||||
.menu-horizontal {
|
||||
display: inline-flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
.menu-horizontal li {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* ACTIVE STATE (LEVEL 1) */
|
||||
.menu-horizontal li.active {
|
||||
background: var(--menu-active);
|
||||
}
|
||||
|
||||
.menu-horizontal li.active .grow,
|
||||
.menu-horizontal li.active svg {
|
||||
color: var(--menu-text);
|
||||
}
|
||||
|
||||
/* ACTIVE STATE (LEVEL 2) */
|
||||
.menu-horizontal li.active ul li.active {
|
||||
background: var(--color-hura);
|
||||
}
|
||||
|
||||
.menu-horizontal li.active ul li.active a {
|
||||
color: #fff;
|
||||
}
|
||||
/* HOVER LEVEL 1 */
|
||||
|
||||
.menu-horizontal li:hover {
|
||||
background: var(--menu-active);
|
||||
}
|
||||
|
||||
.menu-horizontal li:hover .grow,
|
||||
.menu-horizontal li:hover svg {
|
||||
color: var(--color-hura);
|
||||
}
|
||||
|
||||
/* Dải hover giữ submenu không bị mất */
|
||||
.menu-horizontal li::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: -18px;
|
||||
width: 100%;
|
||||
height: 30px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-horizontal li:hover::before {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* ==========================
|
||||
SUBMENU (UL)
|
||||
========================== */
|
||||
.menu-horizontal li .submenu {
|
||||
position: absolute !important;
|
||||
top: 125%;
|
||||
left: 0;
|
||||
background: var(--menu-sub-bg);
|
||||
margin-left: 0 !important;
|
||||
padding: 0.5rem;
|
||||
z-index: 999;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
max-height: 500px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
display: none;
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
/* DaisyUI details submenu spacing */
|
||||
.menu-horizontal > li:not(.menu-title) > details > ul {
|
||||
margin-top: 1rem;
|
||||
padding-inline-end: 0.5rem;
|
||||
}
|
||||
|
||||
/* SHOW SUBMENU ON HOVER */
|
||||
.menu-horizontal li:hover .submenu,
|
||||
.menu-horizontal li:hover > details > ul {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Remove extra before from DaisyUI */
|
||||
.menu-horizontal > li > details > ul:before {
|
||||
content: none;
|
||||
}
|
||||
/* ==========================
|
||||
SUBMENU HOVER ITEMS
|
||||
========================== */
|
||||
.menu-horizontal li ul li:hover {
|
||||
background: var(--color-hura);
|
||||
}
|
||||
|
||||
.menu-horizontal li ul li:hover a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.menu-horizontal li ul li:hover::before {
|
||||
display: none;
|
||||
}
|
||||
/* Font weight chung */
|
||||
.menu-horizontal .grow {
|
||||
font-weight: 500;
|
||||
}
|
||||
.menu-icon-color {
|
||||
color: #838383;
|
||||
}
|
||||
.card-body {
|
||||
padding: calc(var(--spacing) * 4);
|
||||
}
|
||||
.choices {
|
||||
margin-top: calc(var(--spacing) * 2);
|
||||
--tw-shadow:
|
||||
0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)),
|
||||
0 1px 2px -1px var(--tw-shadow-color, #0000001a);
|
||||
box-shadow:
|
||||
var(--tw-inset-shadow), var(--tw-inset-ring-shadow),
|
||||
var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
||||
border-radius: var(--radius-sm);
|
||||
}
|
||||
.choices__inner {
|
||||
background: #fff !important;
|
||||
min-height: 38px !important;
|
||||
padding: 5px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@layer hura {
|
||||
.hura-btn-active {
|
||||
--btn-bg: var(--color-hura);
|
||||
--btn-fg: #ffffff;
|
||||
--btn-border: var(--color-hura);
|
||||
color: var(--color-white);
|
||||
}
|
||||
.hura-btn-active:hover {
|
||||
--btn-bg: #002bb5;
|
||||
--btn-border: #002bb5;
|
||||
}
|
||||
.hura-btn-outline {
|
||||
background: #f5f7ff;
|
||||
color: var(--color-hura);
|
||||
border: 1px solid var(--color-hura);
|
||||
}
|
||||
.hura-btn-outline:hover {
|
||||
background: var(--color-hura);
|
||||
color: #fff;
|
||||
}
|
||||
.hura-checkbox:checked,
|
||||
.hura-checkbox[aria-checked="true"] {
|
||||
background: var(--color-hura);
|
||||
color: #fff;
|
||||
}
|
||||
.hura-radio:checked,
|
||||
.hura-radio[aria-checked="true"] {
|
||||
border-color: var(--color-hura);
|
||||
}
|
||||
.hura-radio:checked::before,
|
||||
.hura-radio[aria-checked="true"]::before {
|
||||
background-color: var(--color-hura);
|
||||
}
|
||||
.hura-text-blue {
|
||||
color: var(--color-hura);
|
||||
}
|
||||
.hura-bg-blue {
|
||||
background: var(--color-hura);
|
||||
}
|
||||
.hura-shadow-blue {
|
||||
box-shadow:
|
||||
0 10px 15px -3px rgb(var(--color-hura) / 0.35),
|
||||
0 4px 6px -4px rgb(var(--color-hura) / 0.25);
|
||||
}
|
||||
}
|
||||
2
assets/script/jquery.js
vendored
Normal file
2
assets/script/tailwind-daisyui.css
Normal file
@@ -0,0 +1,2 @@
|
||||
@import "tailwindcss";
|
||||
@plugin "daisyui";
|
||||
32
assets/typescript/main.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
"use strict";
|
||||
|
||||
interface AdminFunctions {
|
||||
addProductToCategory(productId: string): void;
|
||||
markProductAsHot(productId: string): void;
|
||||
}
|
||||
|
||||
const AdminFunctions: AdminFunctions = (() => {
|
||||
|
||||
function addProductToCategory(productId: string): void {
|
||||
const statusElement = $('#status_' + productId);
|
||||
statusElement.html('<span class="loading loading-bars loading-sm"></span><span class="ml-[3px]">Processing...</span>');
|
||||
setTimeout(() => {
|
||||
statusElement.html('');
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
function markProductAsHot(productId: string): void {
|
||||
const statusElement = $('#js-status-hottype-' + productId);
|
||||
statusElement.html('<span class="loading loading-bars loading-sm"></span><span class="ml-[3px]">Processing...</span>');
|
||||
setTimeout(() => {
|
||||
statusElement.html('');
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
return {
|
||||
addProductToCategory,
|
||||
markProductAsHot
|
||||
};
|
||||
})();
|
||||
|
||||
export default AdminFunctions;
|
||||