diff --git a/package-lock.json b/package-lock.json index 24385b8..05ecc0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1909,7 +1909,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -1925,7 +1924,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -1941,7 +1939,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -1957,7 +1954,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -1973,7 +1969,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -1989,7 +1984,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -2005,7 +1999,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -2021,7 +2014,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2037,7 +2029,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2053,7 +2044,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2069,7 +2059,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2085,7 +2074,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2101,7 +2089,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2117,7 +2104,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2133,7 +2119,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2149,7 +2134,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -2165,7 +2149,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -2181,7 +2164,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -2197,7 +2179,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -2213,7 +2194,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -2229,7 +2209,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -2245,7 +2224,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -2409,7 +2387,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, + "devOptional": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -2586,7 +2564,7 @@ "version": "18.17.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.5.tgz", "integrity": "sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==", - "dev": true + "devOptional": true }, "node_modules/@types/resolve": { "version": "1.17.1", @@ -4060,7 +4038,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "devOptional": true }, "node_modules/builtin-modules": { "version": "3.3.0", @@ -4275,7 +4253,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "devOptional": true }, "node_modules/common-tags": { "version": "1.8.2", @@ -4354,7 +4332,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, + "devOptional": true, "dependencies": { "is-what": "^3.14.1" }, @@ -4710,7 +4688,6 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, "optional": true, "dependencies": { "prr": "~1.0.1" @@ -4846,7 +4823,6 @@ "version": "0.18.20", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -5845,7 +5821,7 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "devOptional": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -6019,7 +5995,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -6047,7 +6022,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, "optional": true, "bin": { "image-size": "bin/image-size.js" @@ -6455,7 +6429,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true + "devOptional": true }, "node_modules/is-wsl": { "version": "2.2.0", @@ -6737,7 +6711,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", - "dev": true, + "devOptional": true, "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -6884,7 +6858,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, "optional": true, "dependencies": { "pify": "^4.0.1", @@ -6898,7 +6871,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, "optional": true, "engines": { "node": ">=6" @@ -6908,7 +6880,6 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, "optional": true, "bin": { "semver": "bin/semver" @@ -6987,7 +6958,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, "optional": true, "bin": { "mime": "cli.js" @@ -7137,7 +7107,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", - "dev": true, "optional": true, "dependencies": { "debug": "^3.2.6", @@ -7155,7 +7124,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "optional": true, "dependencies": { "ms": "^2.1.1" @@ -7528,7 +7496,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 0.10" } @@ -7813,7 +7781,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, "optional": true }, "node_modules/punycode": { @@ -8093,7 +8060,6 @@ "version": "3.29.5", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", - "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -8324,7 +8290,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, "optional": true }, "node_modules/scroll-into-view-if-needed": { @@ -8579,7 +8544,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -8596,7 +8561,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, + "devOptional": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9001,7 +8966,7 @@ "version": "5.24.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", - "dev": true, + "devOptional": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -9074,7 +9039,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true + "devOptional": true }, "node_modules/tsutils": { "version": "3.21.0", @@ -9246,7 +9211,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9573,7 +9538,6 @@ "version": "4.5.14", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", - "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.18.10", diff --git a/src/store/cartStore.ts b/src/store/cartStore.ts index 1197394..fb2e463 100644 --- a/src/store/cartStore.ts +++ b/src/store/cartStore.ts @@ -2,6 +2,8 @@ import { computed, ref } from 'vue' import { defineStore } from 'pinia' import type { CartItem } from '@/models/cart' import type { Product } from '@/models/products' +import type { Price } from '@/models/home' +import { getProducts } from '@/api/products' const CART_STORAGE_KEY = 'ghatre_cart' @@ -93,6 +95,58 @@ export const useCartStore = defineStore('cart', () => { return cartItems.value.length }) + function syncProductsFromServer(serverProducts: Product[]): number { + const productMap = new Map(serverProducts.map(p => [p.id, p])) + const beforeCount = cartItems.value.length + + cartItems.value = cartItems.value + .filter(item => productMap.has(item.product.id)) + .map(item => ({ + ...item, + product: { ...productMap.get(item.product.id)! } + })) + + if (cartItems.value.length > 0 || beforeCount > 0) { + saveCartToStorage() + } + + return beforeCount - cartItems.value.length + } + + function recalculateCartPrices(lastPrice: Price) { + if (!lastPrice || cartItems.value.length === 0) return + + cartItems.value.forEach((item) => { + const product = item.product + let newPrice = 0 + + if (product.group_type == 'آبشده') { + newPrice = lastPrice.price_last ?? 0 + } else { + newPrice = product.amount * (lastPrice.price_last ?? 0) + } + + product.price = newPrice + product.sellPrice = product.amount * (lastPrice.sell ?? 0) + item.price = newPrice + (product.cash_fee_buy ?? 0) + item.totalPrice = parseInt(String(item.price * item.quantity)) + }) + + saveCartToStorage() + } + + async function refreshCartFromServer(): Promise { + if (cartItems.value.length === 0) return 0 + + try { + const serverProducts: Product[] = await getProducts() + return syncProductsFromServer(serverProducts) + } catch (e) { + console.error('Error refreshing cart from server:', e) + return 0 + } + } + return { cartItems, addToCart, @@ -102,7 +156,10 @@ export const useCartStore = defineStore('cart', () => { totalPrice, itemCount, loadCartFromStorage, - saveCartToStorage + saveCartToStorage, + syncProductsFromServer, + recalculateCartPrices, + refreshCartFromServer } }) diff --git a/src/views/base/cart/index.vue b/src/views/base/cart/index.vue index d292e87..04277c0 100644 --- a/src/views/base/cart/index.vue +++ b/src/views/base/cart/index.vue @@ -15,7 +15,11 @@ -
+
+ +
lastPrice.value ?? 0) // Watch for price updates and update cart items watch(lastPrice, () => { - if (lastPrice.value && cartStore.cartItems.length > 0) { - cartStore.cartItems.forEach((item) => { - const product = item.product - let newPrice = 0 - - if (product.group_type == 'آبشده') { - newPrice = lastPrice.value?.price_last ?? 0 - } else { - newPrice = product.amount * (lastPrice.value?.price_last ?? 0) - } - - // Update product price - product.price = newPrice - product.sellPrice = product.amount * (lastPrice.value?.sell ?? 0) - - // Update item price and total price - item.price = newPrice + (product.cash_fee_buy ?? 0) - item.totalPrice = parseInt(item.price * item.quantity) - }) - - // Save updated prices to storage - cartStore.saveCartToStorage() + if (lastPrice.value) { + cartStore.recalculateCartPrices(lastPrice.value) } }, {deep: true, immediate: false}) @@ -313,8 +299,8 @@ async function handleCheckout() { if (cashItemsTotal > 0) { // Ensure wallet info is loaded - if (discountInfo.value?.amount>0){ - cashItemsTotal=cashItemsTotal-cashItemsTotal*discountInfo.value.amount + if (discountInfo.value?.amount && discountInfo.value?.amount>0){ + cashItemsTotal=cashItemsTotal-cashItemsTotal*discountInfo.value?.amount } if (!walletStore.walletInfo) { await walletStore.getMyWallet() @@ -348,10 +334,8 @@ async function handleCheckout() { } try { - loading.value = true infoVisible.value = true - // console.log(cartStore.cartItems) // Prepare orders array with same structure as createOrder for each product const orders: Order[] = cartStore.cartItems.map(item => { console.log(item) @@ -415,40 +399,33 @@ async function initPrice() { try { await getLastPrices() await setIntervalGetLastPrice() - - // Update prices for all cart items - if (lastPrice.value && cartStore.cartItems.length > 0) { - cartStore.cartItems.forEach((item) => { - const product = item.product - let newPrice = 0 - - if (product.group_type == 'آبشده') { - newPrice = lastPrice.value?.price_last ?? 0 - } else { - newPrice = product.amount * (lastPrice.value?.price_last ?? 0) - } - - // Update product price - product.price = newPrice - product.sellPrice = product.amount * (lastPrice.value?.sell ?? 0) - - // Update item price and total price - item.price = newPrice + (product.cash_fee_buy ?? 0) - item.totalPrice = parseInt(item.price * item.quantity) - }) - - // Save updated prices to storage - cartStore.saveCartToStorage() + if (lastPrice.value) { + cartStore.recalculateCartPrices(lastPrice.value) } } catch (e: any) { console.log(e) } } +async function refreshCart() { + const removedCount = await cartStore.refreshCartFromServer() + if (removedCount > 0) { + message.warning(`${removedCount} محصول از سبد خرید حذف شد (دیگر در دسترس نیست)`) + } + if (lastPrice.value) { + cartStore.recalculateCartPrices(lastPrice.value) + } +} + onMounted(async () => { - // Load cart from storage if needed cartStore.loadCartFromStorage() - await initPrice() + loading.value = true + try { + await initPrice() + await refreshCart() + } finally { + loading.value = false + } }) onUnmounted(() => { diff --git a/src/views/base/transactions/components/Item.vue b/src/views/base/transactions/components/Item.vue index 404d965..f53cfd8 100644 --- a/src/views/base/transactions/components/Item.vue +++ b/src/views/base/transactions/components/Item.vue @@ -16,7 +16,7 @@ class="text-gray-500 text-xs number-ltr">{{ item.gold }}
{{item.unit}}
-
+
{{ usePriceWithoutType(item.cash?? 0) }}
@@ -25,7 +25,27 @@
-
+ +
قیمت معامله:
@@ -60,20 +80,44 @@ ریال
-
-
قیمت هر گرم طلا حین معامله:
-
-
{{ usePriceWithoutType(item.order?.price?? 0) }}
- ریال + +
موجودی کیف پول:
@@ -156,6 +200,7 @@ interface Prop { const props = withDefaults(defineProps(), {}) const isUp = computed(() => props.item.type === 3 || props.item.type === 1 || props.item.type === 8 || props.item.type === 9) const isGold = computed(() => props.item.type === 1 || props.item.type === 2 || props.item.type === 10) +const isShopProduct = computed(() => !!props.item?.product_id) /*const title = computed(() => { if (isUp.value) { if (isGold.value) { diff --git a/yarn.lock b/yarn.lock index 8bc847a..6eb1b02 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,7 +71,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz" integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== -"@babel/core@^7.11.1", "@babel/core@^7.22.10": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.22.10", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": version "7.22.10" resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz" integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== @@ -291,7 +291,7 @@ "@babel/template" "^7.27.1" "@babel/types" "^7.27.1" -"@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.25.3", "@babel/parser@^7.26.5", "@babel/parser@^7.27.2": +"@babel/parser@^7.15.8", "@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.22.10", "@babel/parser@^7.25.3", "@babel/parser@^7.26.5", "@babel/parser@^7.27.2": version "7.27.2" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz" integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== @@ -1006,10 +1006,10 @@ resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz" integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== -"@esbuild/linux-x64@0.18.20": +"@esbuild/win32-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -1263,7 +1263,7 @@ resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz" integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== -"@types/node@*", "@types/node@^18.17.0": +"@types/node@*", "@types/node@^18.17.0", "@types/node@>= 14": version "18.17.5" resolved "https://registry.npmjs.org/@types/node/-/node-18.17.5.tgz" integrity sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA== @@ -1306,7 +1306,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.59.1": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.59.1": version "5.62.0" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -1836,7 +1836,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.8.2, acorn@^8.9.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.8.2, acorn@^8.9.0: version "8.10.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== @@ -1851,7 +1851,7 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.6.0: +ajv@^8.6.0, ajv@>=8: version "8.12.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -1916,7 +1916,7 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -apexcharts@^3.44.0: +apexcharts@^3.44.0, "apexcharts@> 3.0.0": version "3.44.0" resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-3.44.0.tgz" integrity sha512-u7Xzrbcxc2yWznN78Jh5NMCYVAsWDfBjRl5ea++rVzFAqjU2hLz4RgKIFwYOBDRQtW1e/Qz8azJTqIJ1+Vu9Qg== @@ -2086,7 +2086,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.21.9, browserslist@^4.22.1: +browserslist@^4.21.9, browserslist@^4.22.1, "browserslist@>= 4.21.0": version "4.22.1" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== @@ -2684,7 +2684,7 @@ eslint-plugin-prettier@^5.0.0: prettier-linter-helpers "^1.0.0" synckit "^0.8.5" -eslint-plugin-vue@^9.15.1: +eslint-plugin-vue@^9.0.0, eslint-plugin-vue@^9.15.1: version "9.17.0" resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz" integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ== @@ -2726,7 +2726,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.45.0: +eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0", eslint@^8.45.0, "eslint@>= 8.0.0", eslint@>=6.0.0, eslint@>=7.0.0, eslint@>=8.0.0: version "8.47.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz" integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q== @@ -3683,7 +3683,7 @@ kolorist@^1.8.0: resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz" integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== -less@^4.2.0: +less@*, less@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz" integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA== @@ -4094,7 +4094,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -odometer@^0.4.8: +odometer@^0.4.8, odometer@latest: version "0.4.8" resolved "https://registry.npmjs.org/odometer/-/odometer-0.4.8.tgz" integrity sha512-bfKuAhWE/qMCiX9bwX90c5bTpt7MDVeq1e6YsOHQrYokNhv9jhS5JbR9kg6i+FeWmDgalf3VUtwNx1aVaZ8cgg== @@ -4330,7 +4330,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.0.0: +prettier@^3.0.0, "prettier@>= 3.0.0", prettier@>=3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz" integrity sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ== @@ -4511,14 +4511,14 @@ rollup-plugin-terser@^7.0.0: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup@^2.43.1: +"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: version "2.79.2" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz" integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== optionalDependencies: fsevents "~2.3.2" -rollup@^3.27.1: +rollup@^1.20.0||^2.0.0||^3.0.0, rollup@^3.27.1: version "3.29.5" resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz" integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w== @@ -4579,7 +4579,7 @@ safe-regex-test@^1.0.0: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@^1.69.4: +sass@*, sass@^1.69.4: version "1.69.5" resolved "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz" integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== @@ -5049,7 +5049,7 @@ tempy@^0.6.0: type-fest "^0.16.0" unique-string "^2.0.0" -terser@^5.0.0: +terser@^5.0.0, terser@^5.4.0: version "5.24.0" resolved "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz" integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== @@ -5180,7 +5180,7 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@~5.1.6: +typescript@*, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=4.4.4, typescript@>=5.0.0, typescript@~5.1.6: version "5.1.6" resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz" integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== @@ -5365,7 +5365,7 @@ vite-plugin-pwa@^0.16.7: workbox-build "^7.0.0" workbox-window "^7.0.0" -vite@^4.4.6: +"vite@^2.9.0 || ^3.0.0-0 || ^4.0.0", "vite@^3.1.0 || ^4.0.0 || ^5.0.0-0", vite@^4.0.0, vite@^4.4.6: version "4.5.14" resolved "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz" integrity sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g== @@ -5448,7 +5448,7 @@ vue-types@^3.0.0: dependencies: is-plain-object "3.0.1" -vue@^3.2.25, vue@^3.3.4: +"vue@^2.0.0 || >=3.0.0", "vue@^2.6.14 || ^3.3.0", vue@^3, vue@^3.0.*, vue@^3.0.0, "vue@^3.0.0-0 || ^2.6.0", vue@^3.2.0, vue@^3.2.25, vue@^3.3.4, "vue@> 3.0.0", "vue@>= 2.0.0", vue@>=3.0.3, vue@>=3.2.0, "vue@2 || 3", vue@3.3.4, vue@latest: version "3.3.4" resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz" integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==