From 0eae1954925b7bab723db62edadb000bc5f198b7 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 29 Jan 2026 10:15:06 +0530 Subject: [PATCH] Turbo add style and combo sales page Design --- src/Components/Forms/main.scss | 19 +- src/Components/Menu/SideMenuPozo.jsx | 292 +++++++++++------- .../ComboSalesBillTable.scss | 9 +- .../Components/BSCombo/BSC1Payment.jsx | 31 +- .../UtillComponents/BSNavBarEst.jsx | 2 +- .../Template/BSLayout7/BSCombo1.jsx | 18 +- .../Template/ComboLayout3/ComboLayout3.scss | 64 ++-- src/Pages/DashBoard/RetailDashboard.jsx | 123 +++++--- src/Pages/Dining/DiningList.jsx | 10 +- src/Pages/Reports/MenuQRCode/MenuQRCode.jsx | 4 +- src/Pages/Reports/PublicQrCode.jsx | 95 ++++-- src/Pages/StockinHand/stockinhand.scss | 7 - .../Template/BSLayout7/BSC1Payment.scss | 48 ++- .../Template/BSLayout7/Combo1.scss | 77 +---- src/Styles/DashBoard/RetailDashBoard.scss | 105 +++---- src/Styles/Product/TurboAddForm.scss | 40 ++- src/routesConfig.jsx | 5 +- vite.config.js | 2 +- 18 files changed, 543 insertions(+), 408 deletions(-) diff --git a/src/Components/Forms/main.scss b/src/Components/Forms/main.scss index aa09cc8..c75a1ce 100644 --- a/src/Components/Forms/main.scss +++ b/src/Components/Forms/main.scss @@ -565,6 +565,7 @@ Button[disabled] { background: #fafafa7a; //vicky padding: 1px 8px !important; + border: 0.5px solid rgb(235, 235, 235); } .ant-input-affix-wrapper > input.ant-input { @@ -967,17 +968,21 @@ Button[disabled] { } } - -// writed by sree lowStock animated +// writed by sree lowStock animated .stock-alert-animation { // position: relative; - animation: blink 1s infinite; + animation: blink 1s infinite; cursor: pointer; } @keyframes blink { - 0% { opacity: 1; } - 50% { opacity: 0; } - 100% { opacity: 1; } + 0% { + opacity: 1; + } + 50% { + opacity: 0; + } + 100% { + opacity: 1; + } } - diff --git a/src/Components/Menu/SideMenuPozo.jsx b/src/Components/Menu/SideMenuPozo.jsx index 05c1ce4..c60cd0c 100644 --- a/src/Components/Menu/SideMenuPozo.jsx +++ b/src/Components/Menu/SideMenuPozo.jsx @@ -2,16 +2,35 @@ import React, { useState, useEffect, useRef } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { useSelector } from 'react-redux'; import { - FaBars, FaThLarge, FaHome, FaCog, FaChartBar, FaFileAlt, - FaMobileAlt, FaSignOutAlt, FaSignInAlt, FaArrowRight, - FaCaretRight + FaBars, + FaThLarge, + FaHome, + FaCog, + FaChartBar, + FaFileAlt, + FaMobileAlt, + FaSignOutAlt, + FaSignInAlt, + FaArrowRight, + FaCaretRight, } from 'react-icons/fa'; -import { MdSettings, MdOutlineReport, MdOutlineHome, MdOutlineKeyboardArrowDown, MdOutlineKeyboardArrowRight, } from 'react-icons/md'; +import { + MdSettings, + MdOutlineReport, + MdOutlineHome, + MdOutlineKeyboardArrowDown, + MdOutlineKeyboardArrowRight, +} from 'react-icons/md'; import { BiLogOut, BiLogIn } from 'react-icons/bi'; -import { AiOutlineAppstore, AiOutlineSetting, AiOutlineBarChart, AiOutlineFileText } from 'react-icons/ai'; +import { + AiOutlineAppstore, + AiOutlineSetting, + AiOutlineBarChart, + AiOutlineFileText, +} from 'react-icons/ai'; import { GiHamburgerMenu } from 'react-icons/gi'; import './SideMenuPozo.scss'; -import { FaCaretDown } from "react-icons/fa"; +import { FaCaretDown } from 'react-icons/fa'; import { useDispatch } from 'react-redux'; import { useContext } from 'react'; import { AuthContext } from '../../AuthContext'; @@ -45,68 +64,97 @@ import { import { ChangeTotalAmount } from '../../Features/ExteraCharges/ExtraCharges'; import * as Offer from '../../Features/Offer/Offer'; import { FiMenu } from 'react-icons/fi'; -import POZOMIND from "../../Images/PozomindWLogo.png"; -import { ChangeFullFreeProductList, changeFullOfferAppliedProducts, changeLoyaltyConsumedQuantities } from '../../Features/Offer/Offernew/BookingOffernew'; +import POZOMIND from '../../Images/PozomindWLogo.png'; +import { + ChangeFullFreeProductList, + changeFullOfferAppliedProducts, + changeLoyaltyConsumedQuantities, +} from '../../Features/Offer/Offernew/BookingOffernew'; const subDirectory = import.meta.env.BASE_URL; // Filter functions (copied from AppPage.jsx) function filterMenuItems(menu, configList) { if (!Array.isArray(menu)) return []; - return menu.filter((item) => { - if (!item) return false; - if (item.label === "Sign Out") return true; - // For nested children, filter recursively - let filteredChildren = item.children ? filterMenuItems(item.children, configList) : undefined; - // Employee access: ConfigName - const config = configList?.find( - (config) => config.ConfigName === item.label && config.ReadAccess === 'Y' - ); - // If this item or any of its children are accessible, include it - return (config || (filteredChildren && filteredChildren.length > 0)); - }).map(item => ({ - ...item, - children: item.children ? filterMenuItems(item.children, configList) : undefined - })); + return menu + .filter((item) => { + if (!item) return false; + if (item.label === 'Sign Out') return true; + // For nested children, filter recursively + let filteredChildren = item.children + ? filterMenuItems(item.children, configList) + : undefined; + // Employee access: ConfigName + const config = configList?.find( + (config) => + config.ConfigName === item.label && config.ReadAccess === 'Y' + ); + // If this item or any of its children are accessible, include it + return config || (filteredChildren && filteredChildren.length > 0); + }) + .map((item) => ({ + ...item, + children: item.children + ? filterMenuItems(item.children, configList) + : undefined, + })); } function filterSadminUserMenuItems(menu, configList) { if (!Array.isArray(menu)) return []; - return menu.filter((item) => { - if (!item) return false; - if (item.label === "Sign Out") return true; + return menu + .filter((item) => { + if (!item) return false; + if (item.label === 'Sign Out') return true; - let filteredChildren = item.children ? filterSadminUserMenuItems(item.children, configList) : undefined; - // Super admin user access: MenuName - const config = configList?.find( - (config) => config.MenuName === item.label && config.ReadAccess === 'Y' - ); - return (config || (filteredChildren && filteredChildren.length > 0)); - }).map(item => ({ - ...item, - children: item.children ? filterSadminUserMenuItems(item.children, configList) : undefined - })); + let filteredChildren = item.children + ? filterSadminUserMenuItems(item.children, configList) + : undefined; + // Super admin user access: MenuName + const config = configList?.find( + (config) => config.MenuName === item.label && config.ReadAccess === 'Y' + ); + return config || (filteredChildren && filteredChildren.length > 0); + }) + .map((item) => ({ + ...item, + children: item.children + ? filterSadminUserMenuItems(item.children, configList) + : undefined, + })); } // Capitalize helper function capitalizeWords(str) { if (typeof str !== 'string') return ''; - return str.replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()); + return str.replace( + /\w\S*/g, + (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase() + ); } // Recursively capitalize all menu item labels, filtering out falsy items and items without a label function capitalizeMenuLabels(items) { return (items || []) - .filter(item => item && typeof item.label === 'string' && item.label.trim() !== '') - .map(item => ({ + .filter( + (item) => + item && typeof item.label === 'string' && item.label.trim() !== '' + ) + .map((item) => ({ ...item, label: capitalizeWords(item.label), - children: item.children ? capitalizeMenuLabels(item.children) : undefined + children: item.children ? capitalizeMenuLabels(item.children) : undefined, })); } const SideMenuPozo = ({ items = [] }) => { - const { freeProductsCount, setFreeProductsCount, UserType, Access, SadminuserAccess } = useContext(AuthContext); + const { + freeProductsCount, + setFreeProductsCount, + UserType, + Access, + SadminuserAccess, + } = useContext(AuthContext); const dispatch = useDispatch(); const navigate = useNavigate(); const location = useLocation(); @@ -120,7 +168,6 @@ const SideMenuPozo = ({ items = [] }) => { const DineinDefault = useSelector(GlobalDineinDefault); const [collapse, setCollapse] = useState(false); - useEffect(() => { const handleResize = () => { setCollapse(window.innerWidth < 768); @@ -147,7 +194,6 @@ const SideMenuPozo = ({ items = [] }) => { return () => document.removeEventListener('mousedown', handleClickOutside); }, []); - useEffect(() => { const handleClickOutside = (event) => { if (window.innerWidth < 768) { @@ -157,8 +203,8 @@ const SideMenuPozo = ({ items = [] }) => { } }; - document.addEventListener("mousedown", handleClickOutside); - return () => document.removeEventListener("mousedown", handleClickOutside); + document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); }, []); // Debug current pathname @@ -172,7 +218,7 @@ const SideMenuPozo = ({ items = [] }) => { // Check if any child of this item is selected (for parent menu highlighting) const hasSelectedChild = (item) => { if (!item.children) return false; - return item.children.some(child => { + return item.children.some((child) => { if (child.children) { return hasSelectedChild(child); } @@ -216,7 +262,7 @@ const SideMenuPozo = ({ items = [] }) => { dispatch(ChangeTotalAmount([])); dispatch(ChangeFullFreeProductList([])); dispatch(changeFullOfferAppliedProducts([])); - dispatch(changeLoyaltyConsumedQuantities({})) + dispatch(changeLoyaltyConsumedQuantities({})); } if (e == `${subDirectory}sales`) { dispatch(changeTipAmount(0)); @@ -240,7 +286,7 @@ const SideMenuPozo = ({ items = [] }) => { dispatch(ChangeFullFreeProductList([])); dispatch(changeFullOfferAppliedProducts([])); dispatch(ChangeTotalAmount([])); - dispatch(changeLoyaltyConsumedQuantities({})) + dispatch(changeLoyaltyConsumedQuantities({})); } if (e == `${subDirectory}saleslayouts/print-selection`) { dispatch(changeSelectedPrintdummyData(true)); @@ -251,7 +297,7 @@ const SideMenuPozo = ({ items = [] }) => { const handleMenuClick = (item, parentKeys = [], event, level = 0) => { if (item.children) { if (openKeys.includes(item.key)) { - setOpenKeys(openKeys.filter(k => k !== item.key)); + setOpenKeys(openKeys.filter((k) => k !== item.key)); const newPositions = { ...dropdownPosition }; delete newPositions[item.key]; setDropdownPosition(newPositions); @@ -264,7 +310,7 @@ const SideMenuPozo = ({ items = [] }) => { newOpenKeys = []; } else { // Keep only the parent chain, remove siblings - newOpenKeys = openKeys.filter(key => { + newOpenKeys = openKeys.filter((key) => { // Keep if it's in the parent chain return parentKeys.includes(key); }); @@ -277,50 +323,53 @@ const SideMenuPozo = ({ items = [] }) => { if (level === 0) { position = { top: rect.top, - left: collapsed ? rect.right + 1 : 10 + left: collapsed ? rect.right + 1 : 10, }; } else { position = { top: rect.top, - left: rect.right + 1 + left: rect.right + 1, }; } - setDropdownPosition(prev => ({ ...prev, [item.key]: position })); + setDropdownPosition((prev) => ({ ...prev, [item.key]: position })); setOpenKeys([...newOpenKeys, item.key]); } } else { if (DineinDefault && item.key == `${subDirectory}sales`) { navigatefun(`${subDirectory}sales/dine-in`); setOpenKeys([]); - } - else { + } else { navigatefun(item.key); setOpenKeys([]); - } - - - } }; - console.log(items, Access, "Employee items") + console.log(items, Access, 'Employee items'); // Filter menu items based on access let filteredMenuItems = (items || []).filter(Boolean); if (UserType === 'Employee' && Array.isArray(Access) && Access.length > 0) { filteredMenuItems = filterMenuItems(filteredMenuItems, Access); - } else if (UserType === 'Super Admin User' && Array.isArray(SadminuserAccess) && SadminuserAccess.length > 0) { - filteredMenuItems = filterSadminUserMenuItems(filteredMenuItems, SadminuserAccess); + } else if ( + UserType === 'Super Admin User' && + Array.isArray(SadminuserAccess) && + SadminuserAccess.length > 0 + ) { + filteredMenuItems = filterSadminUserMenuItems( + filteredMenuItems, + SadminuserAccess + ); } // Capitalize all labels, filter out items without a label - const menuItemsWithCapitalizedLabels = capitalizeMenuLabels(filteredMenuItems); + const menuItemsWithCapitalizedLabels = + capitalizeMenuLabels(filteredMenuItems); const bottomKeys = ['Support', 'Settings', 'Download', 'Sign Out']; - const bottomMenuItems = menuItemsWithCapitalizedLabels.filter(item => + const bottomMenuItems = menuItemsWithCapitalizedLabels.filter((item) => bottomKeys.includes(item.label) ); - const mainMenuItems = menuItemsWithCapitalizedLabels.filter(item => - !bottomKeys.includes(item.label) + const mainMenuItems = menuItemsWithCapitalizedLabels.filter( + (item) => !bottomKeys.includes(item.label) ); // Recursive render for menu and submenus const renderMenuItems = (items, parentKeys = [], level = 0) => ( @@ -329,26 +378,45 @@ const SideMenuPozo = ({ items = [] }) => {
0 ? 'dropdown-submenu-item' : 'menu-item'}${isSelected(item.key) || (level === 0 && hasSelectedChild(item)) ? ' selecteded' : ''}${isOpen(item.key) ? ' open' : ''}${item.children ? ' has-children' : ''}`} - onClick={(e) => { e.stopPropagation(); handleMenuClick(item, parentKeys, e, level); }} - // style={{ paddingLeft: `${level * 10 + 1}px` }} + onClick={(e) => { + e.stopPropagation(); + handleMenuClick(item, parentKeys, e, level); + }} + // style={{ paddingLeft: `${level * 10 + 1}px` }} > - {item.icon && level === 0 && {item.icon}} - {!collapse && {item.label}} - {!collapse && {isDropdownItemSelected(item) ? '●' : ''}} + {item.icon && level === 0 && ( + + {item.icon} + + )} + {!collapse && {item.label}} + {!collapse && ( + + {isDropdownItemSelected(item) ? '●' : ''} + + )} {item.children && !collapse && ( - - {level === 0 ? : } + + {level === 0 ? ( + + ) : ( + + )} )}
{item.children && isOpen(item.key) && !collapse && ( -
0 ? ' nested' : ''}`} - - > - {renderMenuItems(item.children, [...parentKeys, item.key], level + 1)} +
0 ? ' nested' : ''}`}> + {renderMenuItems( + item.children, + [...parentKeys, item.key], + level + 1 + )}
)}
@@ -370,32 +438,45 @@ const SideMenuPozo = ({ items = [] }) => { const isMobile = /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent); const isAndroid = /Android/i.test(navigator.userAgent); - return ( -
-
+
-
-
+
+
setCollapse((prev) => !prev)} style={{ cursor: 'pointer' }} /> - {collapse ? "" : + {collapse ? ( + '' + ) : ( // PozoMindLogo -
- PozoApp -
- } +
PozoApp
+ )}
{/*
*/} {/*
{branchName}
*/} @@ -404,7 +485,7 @@ const SideMenuPozo = ({ items = [] }) => {
{/* Top Menu using PozoMenu */} -
+
{ style={{ width: collapse ? '60px' : '200px', background: 'transparent', - boxShadow: 'none' + boxShadow: 'none', }} onClick={handlePozoMenuClick} />
{/* Bottom Menu using PozoMenu */} -
+
{ style={{ width: collapse ? '60px' : '200px', background: 'transparent', - boxShadow: 'none' + boxShadow: 'none', }} onClick={handlePozoMenuClick} /> @@ -441,4 +525,4 @@ const SideMenuPozo = ({ items = [] }) => { ); }; -export default SideMenuPozo; \ No newline at end of file +export default SideMenuPozo; diff --git a/src/Pages/BookingScreen/Components/BSBillingTables/ComboSalesBillTable/ComboSalesBillTable.scss b/src/Pages/BookingScreen/Components/BSBillingTables/ComboSalesBillTable/ComboSalesBillTable.scss index 4489ca2..eae06b9 100644 --- a/src/Pages/BookingScreen/Components/BSBillingTables/ComboSalesBillTable/ComboSalesBillTable.scss +++ b/src/Pages/BookingScreen/Components/BSBillingTables/ComboSalesBillTable/ComboSalesBillTable.scss @@ -16,12 +16,13 @@ background-color: #bdd4ff; th { - padding: 5px 8px; + padding: 4px 8px; font-weight: 600; color: #000; border: 1px solid #9c9c9c; - font-size: 13.5px; + font-size: 13px; white-space: nowrap; + font-family: 'Poppins', sans-serif !important; } } } @@ -30,7 +31,7 @@ > tr:last-child { background-color: #e5d434 !important; position: sticky; - // bottom: 0; + bottom: 0; } tr { background-color: #fff; @@ -44,7 +45,7 @@ border: 1px solid #9c9c9c; color: #000; font-weight: 600; - font-size: 14px; + font-size: 13px; } } } diff --git a/src/Pages/BookingScreen/Components/BSCombo/BSC1Payment.jsx b/src/Pages/BookingScreen/Components/BSCombo/BSC1Payment.jsx index 71e37c0..341575d 100644 --- a/src/Pages/BookingScreen/Components/BSCombo/BSC1Payment.jsx +++ b/src/Pages/BookingScreen/Components/BSCombo/BSC1Payment.jsx @@ -3387,14 +3387,22 @@ const BSC1Payment = (props) => { justifyContent: 'center', }} > -
+
Re-Print + + (Alt + R) +
- - - (Alt + R) -
)} @@ -3854,7 +3862,7 @@ const BSC1Payment = (props) => { // color: '' ? '#52c41a' : '#1292EE', }} />{' '} -

Hold

+ {/*

Hold

*/}
) @@ -3912,13 +3920,13 @@ const BSC1Payment = (props) => { style={{ backgroundColor: unpaidFlow ? '#52c41a' : '#1292EE', color: unpaidFlow ? '#ffffffff' : '#ffffffff', - height: '45px', - width: '45px', + height: '40px', + width: '40px', borderRadius: '6px', display: 'flex', alignItems: 'center', justifyContent: 'center', - padding: '4px 8px 14px 8px', + padding: '4px 4px 16px 4px', }} > { display: 'flex', alignItems: 'center', justifyContent: 'center', - padding: '4px 8px 14px 8px', + padding: '4px 6px 4px 6px', }} onClick={() => { (setUnpaidOpen(true), getUnpaiddatas()); @@ -3984,6 +3992,7 @@ const BSC1Payment = (props) => { justifyContent: 'center', padding: '8px 8px 12px 8px', }} + className="AsAmtCombo" > {' '} { }} footer={false} children={ -
+
{ } isMobile={isMobile} > -
+
{EstBooking === 'Sales' && } {EstBooking === 'OvrAllEst' && } diff --git a/src/Pages/BookingScreen/Template/BSLayout7/BSCombo1.jsx b/src/Pages/BookingScreen/Template/BSLayout7/BSCombo1.jsx index 515d3b9..cec8145 100644 --- a/src/Pages/BookingScreen/Template/BSLayout7/BSCombo1.jsx +++ b/src/Pages/BookingScreen/Template/BSLayout7/BSCombo1.jsx @@ -358,7 +358,7 @@ export default function BSCombo1() { /> )} {Comboglobal === true && ( -
+
@@ -525,16 +525,22 @@ export default function BSCombo1() { // className="BSC1-Master" comment by sree here this class name issues className="ComboScreenPageTable" style={{ - height: isMobile ? '40vh' : '80vh', - overflow: 'auto', - // paddingBottom: '10rem', + height: isMobile ? '56vh' : '70vh', + overflow: 'hidden', }} > -
+ {/*
*/} +
{action ? ( - // ) : ( + // <> {BookingBilling == 'Billing1' && } {BookingBilling == 'Billing2' && } diff --git a/src/Pages/BookingScreen/Template/ComboLayout3/ComboLayout3.scss b/src/Pages/BookingScreen/Template/ComboLayout3/ComboLayout3.scss index 8fc9e69..b362f2f 100644 --- a/src/Pages/BookingScreen/Template/ComboLayout3/ComboLayout3.scss +++ b/src/Pages/BookingScreen/Template/ComboLayout3/ComboLayout3.scss @@ -1,35 +1,41 @@ .ComboScanLayoutMaster { - width: 100vw; - height: 100vh; - background-color: #d0d7bd; - overflow: hidden; - font-family: "Inter"; - letter-spacing: -0.3px; - display: flex; - flex-direction: column; - gap: 0; - position: relative; - .combo-sales-bill-table { - max-height: calc(85vh - 250px); - scrollbar-width: thin; - overflow: auto; - padding: 0 8px; - background-color: #ffffff; - } - .highlighted-row { - position: sticky; - bottom: -1px; - } + width: 100vw; + height: 100vh; + background-color: #d0d7bd; + overflow: hidden; + font-family: 'Inter'; + letter-spacing: -0.3px; + display: flex; + flex-direction: column; + gap: 0; + position: relative; + .combo-sales-bill-table { + max-height: calc(85vh - 250px); + scrollbar-width: thin; + overflow: auto; + padding: 0 8px; + background-color: #ffffff; + } + .highlighted-row { + position: sticky; + bottom: -1px; + } } @media (max-width: 768px) { - .combo-sales-bill-table { - max-height: calc(90vh - 150px) !important; - overflow: auto; - } + .combo-sales-bill-table { + max-height: calc(90vh - 150px) !important; + overflow: auto; + } } @media (max-width: 992px) { - .combo-sales-bill-table { - max-height: calc(100vh - 10px) !important; - overflow: auto; - } + .combo-sales-bill-table { + max-height: calc(100vh - 10px) !important; + overflow: auto; + } +} +@media (max-width: 500px) { + .combo-sales-bill-table { + max-height: calc(57vh - 10px) !important; + overflow: auto; + } } diff --git a/src/Pages/DashBoard/RetailDashboard.jsx b/src/Pages/DashBoard/RetailDashboard.jsx index b26eade..750e020 100644 --- a/src/Pages/DashBoard/RetailDashboard.jsx +++ b/src/Pages/DashBoard/RetailDashboard.jsx @@ -1,4 +1,4 @@ -import React, {useCallback, useEffect, useRef, useState } from 'react'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; import '../../Styles/DashBoard/RetailDashBoard.scss'; import GraphChart from './Chart/GraphChart'; import { DatePicker, Space, Tooltip } from 'antd'; @@ -423,8 +423,10 @@ const RetailDashboard = () => { EmpId: UserId, }; let response = await dispatch(getEmpAccess(data)).unwrap(); - let datas = response?.data?.data?.[0]?.EmpAccessDetails?.filter( - (item) => ['Add Product', 'Product Receipt', 'Daily Sales', 'Sales'].includes(item.ConfigName) + let datas = response?.data?.data?.[0]?.EmpAccessDetails?.filter((item) => + ['Add Product', 'Product Receipt', 'Daily Sales', 'Sales'].includes( + item.ConfigName + ) ); console.log(datas, 'ffsasasf'); setEmpData(datas); @@ -1557,12 +1559,19 @@ const RetailDashboard = () => {
-

- Today's Snapshot -

+

+ Today's Snapshot +

{selectedBranchForFilter === 'all' ? ( - <> +
{
)} - +
) : ( - <> +
{ApiData?.[0]?.DineInOrderCount + ApiData?.[0]?.TakeAwayOrderCount + @@ -1690,27 +1699,29 @@ const RetailDashboard = () => {
Pending Bills
)} - +
)}
{ const hasEmpAccess = EmpData?.find( - item => item.ConfigName === "Add Product" && item.ReadAccess === "Y" + (item) => + item.ConfigName === 'Add Product' && + item.ReadAccess === 'Y' ); - if (!hasEmpAccess && UserType === "Employee") { - setMessageData("Please contact your admin to get access"); + if (!hasEmpAccess && UserType === 'Employee') { + setMessageData('Please contact your admin to get access'); setMessageType('error'); } if (isCheckSportsApp) { navigate(`${subDirectory}setting/products-master/new`); } if ( - (UserType === "Employee" && hasEmpAccess) || - UserType === "Admin" || - UserType === "Super Admin" || - UserType === "Super Admin User" + (UserType === 'Employee' && hasEmpAccess) || + UserType === 'Admin' || + UserType === 'Super Admin' || + UserType === 'Super Admin User' ) { navigate(`${subDirectory}setting/product-master/new`); } @@ -1730,21 +1741,24 @@ const RetailDashboard = () => {
{ const hasEmpAccess = EmpData?.find( - item => item.ConfigName === "Product Receipt" && item.ReadAccess === "Y" + (item) => + item.ConfigName === 'Product Receipt' && + item.ReadAccess === 'Y' ); - if (!hasEmpAccess && UserType === "Employee") { - setMessageData("Please contact your admin to get access"); + if (!hasEmpAccess && UserType === 'Employee') { + setMessageData( + 'Please contact your admin to get access' + ); setMessageType('error'); } if ( - (UserType === "Employee" && hasEmpAccess) || - UserType === "Admin" || - UserType === "Super Admin" || - UserType === "Super Admin User" + (UserType === 'Employee' && hasEmpAccess) || + UserType === 'Admin' || + UserType === 'Super Admin' || + UserType === 'Super Admin User' ) { navigate(`${subDirectory}setting/purchase-entry/new`); } - }} className="quickActionBox" > @@ -1755,17 +1769,19 @@ const RetailDashboard = () => {
{ const hasEmpAccess = EmpData?.find( - item => item.ConfigName === "Daily Sales" && item.ReadAccess === "Y" + (item) => + item.ConfigName === 'Daily Sales' && + item.ReadAccess === 'Y' ); - if (!hasEmpAccess && UserType === "Employee") { - setMessageData("Please contact your admin to get access"); + if (!hasEmpAccess && UserType === 'Employee') { + setMessageData('Please contact your admin to get access'); setMessageType('error'); } if ( - (UserType === "Employee" && hasEmpAccess) || - UserType === "Admin" || - UserType === "Super Admin" || - UserType === "Super Admin User" + (UserType === 'Employee' && hasEmpAccess) || + UserType === 'Admin' || + UserType === 'Super Admin' || + UserType === 'Super Admin User' ) { navigate(`${subDirectory}report/datewisereport`); } @@ -1779,17 +1795,18 @@ const RetailDashboard = () => { className="quickActionBox" onClick={() => { const hasEmpAccess = EmpData?.find( - item => item.ConfigName === "Sales" && item.ReadAccess === "Y" + (item) => + item.ConfigName === 'Sales' && item.ReadAccess === 'Y' ); - if (!hasEmpAccess && UserType === "Employee") { - setMessageData("Please contact your admin to get access"); + if (!hasEmpAccess && UserType === 'Employee') { + setMessageData('Please contact your admin to get access'); setMessageType('error'); } if ( - (UserType === "Employee" && hasEmpAccess) || - UserType === "Admin" || - UserType === "Super Admin" || - UserType === "Super Admin User" + (UserType === 'Employee' && hasEmpAccess) || + UserType === 'Admin' || + UserType === 'Super Admin' || + UserType === 'Super Admin User' ) { navigate(`${subDirectory}sales`); } @@ -2026,14 +2043,16 @@ const RetailDashboard = () => { placement="bottom" >
-

{AllProdIds?.[0]?.TotalProductCount}

+

{AllProdIds?.[0]?.TotalProductCount}

TOTAL PRODUCTS
) : (
-

{AllProdIds?.[0]?.TotalProductCount || - AllProdIds?.length}

+

+ {AllProdIds?.[0]?.TotalProductCount || + AllProdIds?.length} +

TOTAL PRODUCTS
)} @@ -2176,15 +2195,27 @@ const RetailDashboard = () => {
{expiredList?.length > 0 && (
- {expiredList?.length} Products expiry today! + {expiredList.length} Products expiry today!
)} + {lowStockList?.length > 0 && (
- Low Stock count {lowStockList?.length} + Low Stock count {lowStockList.length} +
+ )} + + {!expiredList?.length && !lowStockList?.length && ( +
+ Notification Empty
)} - {/*
View All
*/}
)} @@ -2384,7 +2415,7 @@ const RetailDashboard = () => {
)) ) : ( -
+
No Low Stock Product
)} diff --git a/src/Pages/Dining/DiningList.jsx b/src/Pages/Dining/DiningList.jsx index e209e19..a96f038 100644 --- a/src/Pages/Dining/DiningList.jsx +++ b/src/Pages/Dining/DiningList.jsx @@ -183,7 +183,7 @@ const DiningList = () => { title: 'Table Name', dataIndex: 'TableName', key: 'TableName', - width: '150px', + width: '120px', render: (text) => {text}, filteredValue: [searchedText], onFilter: (value, record) => { @@ -213,7 +213,7 @@ const DiningList = () => { title: 'Chair Count', dataIndex: 'ChairCount', key: 'ChairCount', - width: '100px', + width: 120, align: 'right', render: (text) => {text}, filteredValue: filteredInfo.ChairCount || null, @@ -234,7 +234,8 @@ const DiningList = () => { sortOrder: sortedInfo.columnKey === 'DineInTypeName' ? sortedInfo.order : null, ellipsis: true, - align: "center" + align: 'center', + width: 120, }, { title: 'Chair Level Serve', @@ -247,7 +248,8 @@ const DiningList = () => { sortOrder: sortedInfo.columnKey === 'ChairLevelSer' ? sortedInfo.order : null, ellipsis: true, - align: "center", + align: 'center', + width: 160, }, { title: 'Chair Name', diff --git a/src/Pages/Reports/MenuQRCode/MenuQRCode.jsx b/src/Pages/Reports/MenuQRCode/MenuQRCode.jsx index 8abd73c..060f019 100644 --- a/src/Pages/Reports/MenuQRCode/MenuQRCode.jsx +++ b/src/Pages/Reports/MenuQRCode/MenuQRCode.jsx @@ -380,7 +380,7 @@ const MenuQRCode = () => { style={{ width: 420, margin: '0 auto', - padding: 24, + padding: 16, background: '#fff', borderRadius: 12, boxShadow: '0 6px 18px rgba(0,0,0,0.08)', @@ -392,7 +392,7 @@ const MenuQRCode = () => {

{ // Add content to the temporary div tempDiv.innerHTML = ` -
- ${companyLogo ? `
` : ''} -

${branchName ? branchName : ''}

-

${branchAddress ? branchAddress : ''}

-

Mobile: ${branchMobile ? branchMobile : ''}

-
-
-

Self Booking QR Code

-
-
-
-
-
-
-
-

URL: ${encrypted}

-
- `; +
+ + ${ + companyLogo + ? ` +
+ +
` + : '' + } + +

+ ${branchName || ''} +

+ +

+ ${branchAddress || ''} +

+ +

+ ${branchMobile || ''} +

+ +
+ +

+ Scan & Book Easily +

+ +
+
+
+ +

+ 🔗 ${encrypted} +

+
+`; // Add the temporary div to the document document.body.appendChild(tempDiv); @@ -710,7 +762,7 @@ const PublicQrCode = () => { {qrCodeUrl && ( <> {!sportsAppPreference && ( -
+
{ setPdfPreviewUrl(''); setIsPreviewModalOpen(false); }} + icon={} > CLEAR @@ -742,7 +795,7 @@ const PublicQrCode = () => { display: 'flex', flexDirection: 'column', alignItems: 'center', - padding: '20px', + padding: '10px', backgroundColor: '#f9f9f9', borderRadius: '8px', margin: '8px 0', @@ -750,7 +803,7 @@ const PublicQrCode = () => { >

div:nth-child(1) { + margin-right: 10px; } div { - width: 100px !important; - font-family: "Poppins"; + width: 50px !important; + font-family: 'Poppins'; font-size: 11px; font-weight: 600; gap: 3px; @@ -601,6 +588,9 @@ width: 50px !important; } } + .AsAmtCombo { + width: 100px !important; + } } .payOptionDecition { diff --git a/src/Styles/BookingScreen/Template/BSLayout7/Combo1.scss b/src/Styles/BookingScreen/Template/BSLayout7/Combo1.scss index 0a454cc..5444a46 100644 --- a/src/Styles/BookingScreen/Template/BSLayout7/Combo1.scss +++ b/src/Styles/BookingScreen/Template/BSLayout7/Combo1.scss @@ -96,34 +96,27 @@ } .BS1ComboTable { - // height: clamp(56vh,80vh,100vh); height: 80vh; overflow: auto; - // overflow: auto; padding-bottom: 10rem !important; padding: 0 3px; } +.BS1ComboTableComboSalesBillTable { + height: 100%; + overflow: auto; + padding-bottom: 1.5rem !important; + padding: 0 3px; +} -// .BS1ComboTable .BillingTable6-table-th { -// padding: 2vh 0vh 2vh 0vh; -// font-size: 14px; -// border: 0.1px solid rgba(168, 168, 168, 0.5019607843); -// border-style: ridge; -// } -// .overall-bscombo-container.BSBilling7-tablediv { -// height: 52vh; -// } .BS1ComboTable { &.BillingTable1-table-th { padding: 2vh 0vh 2vh 0vh; font-size: 14px; - // border: 0.01px rgb(218, 218, 218); } & .BillingTable1-table-td { padding: 2vh 0vh 2vh 0vh; font-size: 16px; - // border: 0.01px rgb(218, 218, 218); } } @@ -245,9 +238,6 @@ gap: 1 !important; } - // .BSC1Payment-div4-payment { - // flex-wrap: wrap; - // } .BSC1Payment-div4-button-disable { width: 100% !important; } @@ -389,13 +379,6 @@ .Combo-BSNavbar1-timer { display: none !important; } - - // .BSC1Payment-div4-payment{ - // gap: 1.5rem !important; - // } - // .BSC1Payment-div2-1 { - // gap: 1.5rem !important; - // } } @media screen and (min-width: 768px) and (max-width: 1220px) { @@ -409,20 +392,12 @@ } .BSC1-Master { - // position: fixed; - // top: 55px; right: 0; left: 0; } -// .BSC1Payment-Container{ -// position: absolute; -// bottom: 0; -// } - .overall-bscombo-container { overflow: hidden; - // height: 100vh; .BSC1Search-div1 { height: 45px !important; } @@ -431,27 +406,12 @@ } } -// .BSC1-Master .BillingTable1-Structure { -// overflow: unset !important; -// height: unset !important; -// } - -// .BSC1-Master .BillingTable1-table-div { -// overflow: unset !important; -// } - -// .BSC1Payment-div4{ -// padding-bottom: 5rem; -// } - .BSC1-Master .for-combo { text-align: left !important; } .BSC1-Master .BSC1Payment-Container { height: 8rem; - // padding-bottom: 1.5rem; - // column-gap: 1rem; } .overall-bscombo-container .BSC1NavBar-manu-icon { @@ -478,12 +438,6 @@ width: 100vw !important; } -// .BSC1NavBar-name-ellipsis { -// white-space: nowrap; -// overflow: hidden; -// text-overflow: ellipsis; -// // max-width: 90px; -// } .BSC1-Master .BSC1Payment-div4-button-disable { height: 50px; } @@ -505,18 +459,6 @@ padding: 4px 8px; } -// .overall-bscombo-container .BSC1Search-div1 .M{ -// display: flex; -// flex-direction: row; -// border: 1px solid var(--DEFAULT_SELECTED_COLOR); -// background-color: #fff; -// border-radius: 15px; -// width: 100%; -// height: 57px; -// gap: 1.2rem; -// padding-right: 1.5rem; -// align-items: center; -// } .overall-bscombo-container .Combosearch { // width: 99vw; height: 10px; @@ -536,13 +478,6 @@ width: 100%; } -// .BSC1-Master .BillingTable1-table-div { -// width: 100%; -// // height: 69vh !important; -// overflow: auto; -// height: 73% !important; -// } - .ComboSubNavbar { flex-wrap: nowrap !important; @media (max-width: 1024px) { diff --git a/src/Styles/DashBoard/RetailDashBoard.scss b/src/Styles/DashBoard/RetailDashBoard.scss index 22a3713..ed107ea 100644 --- a/src/Styles/DashBoard/RetailDashBoard.scss +++ b/src/Styles/DashBoard/RetailDashBoard.scss @@ -1061,7 +1061,7 @@ flex-direction: column; align-items: center; background-color: #fff; - border-radius: 12px; + border-radius: 8px; padding: 6px; border: 2px solid #eeeeee; } @@ -1124,7 +1124,7 @@ } @media (max-width: 768px) { - width: 100%; + width: 100% !important; } } @@ -1600,6 +1600,9 @@ .dashboardMainRight { flex: 0.8; min-width: 260px; + background-color: #fff; + padding: 12px; + border-radius: 8px; } .chartCard { @@ -1689,12 +1692,19 @@ gap: 0; margin-bottom: 1rem; background-color: #ffffff; - border-radius: 10px; + border-radius: 8px; + flex-direction: column; + padding: 12px; } +.todaySnapFlex { + display: flex; + align-items: center; + justify-content: space-between; +} .todaySnapshotBox { flex: 1; - padding: 16px 2px; + padding: 10px 2px; text-align: center; font-weight: 600; -webkit-text-stroke-width: 0.2px; @@ -1735,13 +1745,13 @@ gap: 10px; margin-bottom: 1rem; background-color: #fff; - border-radius: 10px; + border-radius: 8px; padding: 10px; } .quickActionBox { flex: 1; - border-radius: 12px; + border-radius: 8px; border: 1px solid #e0e6ed; padding: 0.5; text-align: center; @@ -1800,9 +1810,9 @@ .salesBreakdownBox { flex: 1; background: #fff; - border-radius: 12px; - box-shadow: 0 2px 8px #e0e6ed; - padding: 0.9rem; + border-radius: 8px; + box-shadow: 0 1px 2px #e0e6ed; + padding: 12px; text-align: center; color: #686868; font-size: 0.85rem; @@ -1823,9 +1833,6 @@ .productSummaryCard { background: #fff; - border-radius: 12px; - box-shadow: 0 2px 8px #e0e6ed; - padding: 0px; margin-bottom: 0.5rem; } @@ -1833,7 +1840,7 @@ color: #000000; font-weight: 600; margin-bottom: 0.3rem; - font-size: 12px; + font-size: 13px; font-weight: 500; } @@ -1843,7 +1850,7 @@ gap: 0.5rem; flex-wrap: wrap; border-radius: 6px; - padding: 7px; + padding-top: 7px; } .productSummaryBox { @@ -1871,23 +1878,6 @@ } } -// .productSummaryBox.live { -// background: linear-gradient(90deg, #e3fcec, #e3fcec); -// } - -// .productSummaryBox.low { -// background: linear-gradient(90deg, #fffbe3, #fffbe3); -// } - -// .productSummaryBox.nostock { -// background: linear-gradient(90deg, #ffe3e3, #ffe3e3); - -// div { -// color: #e53935; -// font-weight: 600; -// } -// } - .lastbillcount { width: 99%; background-color: #fff; @@ -1902,19 +1892,20 @@ .notificationCenterCard { background: #fff; border-radius: 12px; - box-shadow: 0 2px 8px #e0e6ed; padding: 1rem; position: relative; - height: 14vh; + height: max-content; + max-height: 14vh; overflow: scroll; border: 1px solid #eeeeee; } .notificationCenterTitle { - color: #2a2a2a; - font-weight: 600; + color: #333; + font-weight: 500; + font-family: 'Poppins'; margin-bottom: 0.5rem; - font-size: 12px; + font-size: 13px; } .notificationStock { @@ -1941,7 +1932,7 @@ .preOrderSummaryCardMain { display: flex; align-items: flex-start; - gap: 3px; + gap: 8px; width: 60%; flex-wrap: wrap; @@ -1969,7 +1960,7 @@ // flex: 1; width: 38%; background: #fff; - border-radius: 12px; + border-radius: 8px; box-shadow: 0 2px 8px #e0e6ed; padding: 0 1rem 1rem 1rem; position: relative; @@ -1987,15 +1978,6 @@ } .topSellingHeader { - // display: flex; - // justify-content: space-between; - // align-items: center; - // margin: 0.5rem 0; - // font-weight: 600; - // position: sticky; - // top:10px; - // background-color: #fff; - // z-index: 100; display: flex; justify-content: space-between; align-items: center; @@ -2059,28 +2041,26 @@ .preOrderSummaryCard { flex: 0.7; min-width: 220px; - border-radius: 12px; + border-radius: 8px; + background-color: #fff; + padding: 12px; } .preOrderSummaryTitle { font-weight: 500; margin-bottom: 0.2rem; - font-size: 12px; + font-size: 13px; color: #2a2a2a; } .preOrderSummaryRow { - padding: 10px; height: 16vh; display: flex; gap: 0.5rem; - box-shadow: 0 2px 8px #e0e6ed; - background: #fff; margin-bottom: 0.5rem; align-items: center; justify-content: center; border-radius: 10px; - border: 1px solid #eeeeee; } .preOrderSummaryBox { @@ -2115,9 +2095,12 @@ .creditListCardMain { min-width: 220px; - height: 23vh; + height: 25.5vh; flex: 0.7; overflow: scroll; + border-radius: 8px; + background-color: #fff; + padding: 8px; @media (max-width: 768px) { width: 100%; @@ -2125,8 +2108,6 @@ } .creditListCard { - padding: 1rem; - box-shadow: 0 2px 8px #e0e6ed; position: relative; background: #fff; min-width: 220px; @@ -2134,14 +2115,12 @@ height: 16vh; overflow: auto; scrollbar-width: thin; - padding-top: 0px; - border: 1px solid #eeeeee; } .creditListTitle { font-weight: 500; margin-bottom: 0.2rem; - font-size: 12px; + font-size: 13px; color: #2a2a2a; } @@ -2181,9 +2160,9 @@ .stockAlertsCard { background: #ffffff; - border-radius: 10px; + border-radius: 8px; box-shadow: none; - padding: 1rem 1rem 0.5rem 1rem; + padding: 12px; min-width: 320px; position: relative; flex: 1; @@ -2197,6 +2176,8 @@ position: sticky; top: -15px; background-color: #fff; + font-size: 13px; + font-weight: 500; } .stockAlertsHeaderRow { @@ -2217,7 +2198,7 @@ color: #222; border-bottom: 1px solid #e0e0e0; padding-bottom: 4px; - margin-bottom: 2px; + margin-bottom: 6px; } .stockAlertsRow { diff --git a/src/Styles/Product/TurboAddForm.scss b/src/Styles/Product/TurboAddForm.scss index 6609109..1991dae 100644 --- a/src/Styles/Product/TurboAddForm.scss +++ b/src/Styles/Product/TurboAddForm.scss @@ -20,7 +20,7 @@ overflow: auto; max-height: 72vh; height: max-content; - padding: 10px; + padding: 0; // width: 80vw; white-space: nowrap; scrollbar-width: thin; @@ -178,6 +178,44 @@ background: #fafafa; } + // Sticky columns + .sticky-left-1 { + position: sticky; + left: 0; + background: #f3f4f6; + z-index: 10; + border-right: 2px solid #d1d5db; + } + + .sticky-left-2 { + position: sticky; + left: 20px; + background: #f3f4f6; + z-index: 10; + border-right: 2px solid #d1d5db; + } + .sticky-left-3 { + position: sticky; + left: 119px; + background: #f3f4f6; + z-index: 10; + border-right: 2px solid #d1d5db; + } + + tbody { + .sticky-left-1, + .sticky-left-2 { + background: #ffffff; + } + + tr:nth-child(even) { + .sticky-left-1, + .sticky-left-2 { + background: #fafafa; + } + } + } + .row-number { text-align: center; cursor: pointer; diff --git a/src/routesConfig.jsx b/src/routesConfig.jsx index 91f0ab9..687b99c 100644 --- a/src/routesConfig.jsx +++ b/src/routesConfig.jsx @@ -267,7 +267,7 @@ const fetchComponent = async () => { sessionStore('userName', 'Karthiga'); sessionStorage.setItem( 'auth', - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NTQwNDg2LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.dk6WOA7_jjKUv94Ni9RjMxHGgZRdpGj2QqXyyQMcFpo' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NzEzMTk3LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.rm3XOIBsczxaSWg5WWwm0a5xvYOszDzXvL2oJLd1ZYo' ); const AppId = getSession('AppId'); @@ -372,8 +372,9 @@ const fetchHomeComponent = async () => { sessionStore('userName', 'Karthiga'); sessionStorage.setItem( 'auth', - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NTQwNDg2LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.dk6WOA7_jjKUv94Ni9RjMxHGgZRdpGj2QqXyyQMcFpo' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiOTM2MDY0MjI0NCIsIlBhc3N3b3JkIjoiWkB6MTIzNCIsImF1ZCI6WyJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTIiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTQiLCJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMTMiXSwiZXhwIjoxNzY5NzEzMTk3LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4xLjM3OjgwMDEifQ.rm3XOIBsczxaSWg5WWwm0a5xvYOszDzXvL2oJLd1ZYo' ); + const AppId = getSession('AppId'); if (AppId) { const response = await axios.get( diff --git a/vite.config.js b/vite.config.js index 02707d5..665fa0b 100644 --- a/vite.config.js +++ b/vite.config.js @@ -23,7 +23,7 @@ export default defineConfig(({ command, mode }) => { envDir: "src", envPrefix: "ENV_", server: { - host: "192.168.1.22", + host: "192.168.1.50", port: process.env.PORT || 3015, }, optimizeDeps: {