handle huge things!

This commit is contained in:
2026-06-03 22:04:45 +03:30
parent 198f0a164b
commit f82a0c3873
29 changed files with 778 additions and 445 deletions
+1
View File
@@ -3,6 +3,7 @@ import type {Price} from "@/models/home";
export const getChart = async () => await useAxios.get<Array<Array<any>>>(`/api/candle`) export const getChart = async () => await useAxios.get<Array<Array<any>>>(`/api/candle`)
/** @deprecated قیمت up داخل /api/price/last در فیلد up برمی‌گردد */
export const getPrice = async () => await useAxios.get<Price>(`/api/price/up`) export const getPrice = async () => await useAxios.get<Price>(`/api/price/up`)
export const getLastPrice = async () => await useAxios.get<Price>(`/api/price/last`) export const getLastPrice = async () => await useAxios.get<Price>(`/api/price/last`)
+3
View File
@@ -16,6 +16,7 @@ import { getMe } from '@/api/me'
import type { NavigationGuardNext, RouteLocationNormalized } from 'vue-router' import type { NavigationGuardNext, RouteLocationNormalized } from 'vue-router'
import { useAuthStore } from '@/store/useAuthStore' import { useAuthStore } from '@/store/useAuthStore'
import {applyProjectTheme, getConfigApp} from "@/utils/config"; import {applyProjectTheme, getConfigApp} from "@/utils/config";
import { useSettingsStore } from '@/store/settingsStore'
const app = createApp(App) const app = createApp(App)
@@ -30,6 +31,8 @@ const userStore = useUserStore()
const walletStore = useWalletStore() const walletStore = useWalletStore()
const fundStore = useFundUserStore() const fundStore = useFundUserStore()
const authStore = useAuthStore() const authStore = useAuthStore()
const settingsStore = useSettingsStore()
void settingsStore.fetchSettings()
const isApple: boolean = isIphone() const isApple: boolean = isIphone()
let isFirst: boolean = true let isFirst: boolean = true
let fingerPosition: boolean = false let fingerPosition: boolean = false
+12 -1
View File
@@ -12,10 +12,21 @@ export interface Series {
} }
*/ */
export interface PriceUp {
buy: number
sell: number
}
export interface Price { export interface Price {
sell: number sell: number
buy: number buy: number
price: number price: number
price_last: number price_last: number
goldir:number goldir?: number
up?: PriceUp
closed?: boolean
time?: string
main_product?: number
taban_gohar?: number
montzar?: number
} }
+1
View File
@@ -53,6 +53,7 @@ export interface PInventory {
deleted_at: any deleted_at: any
price?:number price?:number
unit?: string unit?: string
direct_price?: number
wallet:Wallet wallet:Wallet
} }
+74
View File
@@ -0,0 +1,74 @@
import { computed, ref } from 'vue'
import { defineStore } from 'pinia'
import { getSettings } from '@/api/configuration'
import { resolveMeltedGoldLabel, resolveMetalTypeLabel } from '@/utils/metalLabels'
export interface AppSetting {
id?: number
key?: string | number
title_fa?: string
value?: string | number
description?: string
is_active?: boolean
type?: string
}
export const useSettingsStore = defineStore('settings', () => {
const settings = ref<AppSetting[]>([])
const loaded = ref(false)
function getSettingByKey(key: string) {
const item = settings.value.find((setting) => setting?.key === key)
return item?.value ?? null
}
function mergeSettings(items?: AppSetting[] | null) {
if (!items?.length) {
return
}
const merged = [...settings.value]
items.forEach((item) => {
if (!item?.key) {
return
}
const index = merged.findIndex((setting) => setting.key === item.key)
if (index >= 0) {
merged[index] = { ...merged[index], ...item }
} else {
merged.push(item)
}
})
settings.value = merged
}
async function fetchSettings() {
try {
const data = await getSettings()
if (Array.isArray(data)) {
mergeSettings(data)
}
} catch (e) {
console.log(e)
} finally {
loaded.value = true
}
}
const metalTypeSettingValue = computed(() => getSettingByKey('metal_type'))
const metalTypeLabel = computed(() => resolveMetalTypeLabel(metalTypeSettingValue.value))
const meltedGoldLabel = computed(() => resolveMeltedGoldLabel(metalTypeSettingValue.value))
return {
settings,
loaded,
fetchSettings,
mergeSettings,
getSettingByKey,
metalTypeSettingValue,
metalTypeLabel,
meltedGoldLabel,
}
})
+2
View File
@@ -4,6 +4,7 @@ import { defineStore } from 'pinia'
import { getMe } from '@/api/me' import { getMe } from '@/api/me'
import type { User } from '@/models/login' import type { User } from '@/models/login'
import { useWalletStore } from '@/store/walletStore' import { useWalletStore } from '@/store/walletStore'
import { useSettingsStore } from '@/store/settingsStore'
import { setFingerPrint } from '@/utils' import { setFingerPrint } from '@/utils'
import type { PWallet } from '@/models/wallet' import type { PWallet } from '@/models/wallet'
@@ -17,6 +18,7 @@ export const useUserStore = defineStore('user', () => {
async function getMyInfo() { async function getMyInfo() {
try { try {
userInfo.value = await getMe() userInfo.value = await getMe()
useSettingsStore().mergeSettings(userInfo.value.settings)
setFingerPrint(userInfo.value.finger_print.toString()) setFingerPrint(userInfo.value.finger_print.toString())
productWallet.value = userInfo.value.pwallet productWallet.value = userInfo.value.pwallet
// return userInfo.value // return userInfo.value
+3 -3
View File
@@ -31,7 +31,7 @@ export function inputLenRules(len: number, title?: string) {
import {computed, ref} from 'vue' import {computed, ref} from 'vue'
import type {Rule} from 'ant-design-vue/es/form' import type {Rule} from 'ant-design-vue/es/form'
import {useWalletStore} from "@/store/walletStore"; import {useWalletStore} from "@/store/walletStore";
import { isCashLikeDealMethod, getInsufficientCashWalletMessage, getInsufficientGoldWalletMessage } from '@/utils/productDealMethod' import { isCashLikeDealMethod, isMainMetalWalletDealMethod, getInsufficientCashWalletMessage, getInsufficientGoldWalletMessage } from '@/utils/productDealMethod'
export const mobileValidation = (title?: string) => { export const mobileValidation = (title?: string) => {
return {len: 11, message: `شماره همراه باید 11 رقم باشد`} return {len: 11, message: `شماره همراه باید 11 رقم باشد`}
@@ -150,12 +150,12 @@ if (isBuyP){
if (!walletCash?.walletInfo?.cash && isCashLikeDealMethod(methodP)){ if (!walletCash?.walletInfo?.cash && isCashLikeDealMethod(methodP)){
return Promise.reject(getInsufficientCashWalletMessage(groupTypeP)) return Promise.reject(getInsufficientCashWalletMessage(groupTypeP))
} }
if (!walletCash?.walletInfo?.gold && methodP == 'gold'){ if (!walletCash?.walletInfo?.gold && isMainMetalWalletDealMethod(methodP)){
return Promise.reject(getInsufficientGoldWalletMessage(groupTypeP)) return Promise.reject(getInsufficientGoldWalletMessage(groupTypeP))
} }
if (priceP * value > walletCash?.walletInfo?.cash && isCashLikeDealMethod(methodP)) if (priceP * value > walletCash?.walletInfo?.cash && isCashLikeDealMethod(methodP))
return Promise.reject(getInsufficientCashWalletMessage(groupTypeP)) return Promise.reject(getInsufficientCashWalletMessage(groupTypeP))
if (amountP * value > walletCash?.walletInfo?.gold && methodP == 'gold') if (amountP * value > walletCash?.walletInfo?.gold && isMainMetalWalletDealMethod(methodP))
return Promise.reject(getInsufficientGoldWalletMessage(groupTypeP)) return Promise.reject(getInsufficientGoldWalletMessage(groupTypeP))
else else
return Promise.resolve(); return Promise.resolve();
+9
View File
@@ -0,0 +1,9 @@
export function resolveMetalTypeLabel(settingValue?: string | number | null): string {
const value = settingValue?.toString().trim()
return value ? value : 'طلا'
}
export function resolveMeltedGoldLabel(settingValue?: string | number | null): string {
const value = settingValue?.toString().trim()
return value ? value : 'آبشده'
}
+60 -45
View File
@@ -1,87 +1,102 @@
import {loading} from '@/utils/index'
import { getLastPrice, getPrice } from '@/api/home' import { getLastPrice, getPrice } from '@/api/home'
import type { Price, PriceUp } from '@/models/home'
import { ref } from 'vue' import { ref } from 'vue'
import type {Price} from '@/models/home'
let interval: any let interval: ReturnType<typeof setInterval> | undefined
/** @deprecated از lastPrice استفاده کنید — برای سازگاری با کد قدیمی sync می‌شود */
export const price = ref<Price>() export const price = ref<Price>()
export const lastPrice = ref<Price>() export const lastPrice = ref<Price>()
export const olderPrice = ref<number | undefined>(0) export const olderPrice = ref<number | undefined>(0)
/** buy/sell معامله: اول up (مثل endpoint قدیمی /price/up) سپس fallback */
export function getTradeBuyPrice(p?: Price | null) {
return p?.up?.buy ?? p?.buy ?? 0
}
export function getTradeSellPrice(p?: Price | null) {
return p?.up?.sell ?? p?.sell ?? 0
}
/** یکسان‌سازی پاسخ last با رفتار قدیمی price/up */
export function normalizePriceResponse(data: Price): Price {
if (!data?.up) {
return data
}
return {
...data,
buy: data.up.buy,
sell: data.up.sell,
}
}
export async function setIntervalGetAllPrice() { export async function setIntervalGetAllPrice() {
// console.log('salam')
try { try {
interval = setInterval(async () => { interval = setInterval(async () => {
await getLastPrices() await getLastPrices()
await getUpPrice()
}, 10000) }, 10000)
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} finally {
loading.value = false
} }
} }
export async function setIntervalGetLastPrice() { export async function setIntervalGetLastPrice() {
// console.log('salam') return setIntervalGetAllPrice()
try {
interval = setInterval(async () => {
await getLastPrices()
// await getUpPrice()
}, 10000)
} catch (e) {
console.log(e)
} finally {
loading.value = false
}
} }
/** @deprecated فقط getLastPrices را صدا بزنید */
export async function getUpPrice() { export async function getUpPrice() {
await getLastPrices()
}
async function fetchUpPrices(): Promise<PriceUp | undefined> {
try { try {
// loading.value = true const up = await getPrice()
const data = await getPrice() if (up?.buy != null && up?.sell != null) {
// const dataLast = await getLastPrice() return { buy: up.buy, sell: up.sell }
// if (lastPrice.value?.price_last != dataLast.price_last) { }
// olderPrice.value = lastPrice.value?.price_last
// }
price.value = data
// lastPrice.value = dataLast
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} finally {
// loading.value = false
} }
} }
export async function getLastPrices() { export async function getLastPrices() {
try { try {
// loading.value = true let dataLast = await getLastPrice()
// const data = await getPrice()
const dataLast = await getLastPrice() if (!dataLast?.up) {
if (lastPrice.value?.price_last != dataLast.price_last) { const up = await fetchUpPrices()
if (up) {
dataLast = { ...dataLast, up }
}
}
const normalized = normalizePriceResponse(dataLast)
if (lastPrice.value?.price_last != normalized.price_last) {
olderPrice.value = lastPrice.value?.price_last olderPrice.value = lastPrice.value?.price_last
} }
// price.value = data lastPrice.value = normalized
lastPrice.value = dataLast price.value = {
...normalized,
buy: getTradeBuyPrice(normalized),
sell: getTradeSellPrice(normalized),
}
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} finally {
// loading.value = false
} }
} }
export function stopPriceInterval() { export function stopPriceInterval() {
// console.log('stop') if (interval) {
clearInterval(interval); clearInterval(interval)
interval = undefined
}
} }
export function percentPriceChanged() { export function percentPriceChanged() {
// console.log(olderPrice.value) if (!olderPrice.value) {
// console.log(lastPrice.value?.price_last)
if (!olderPrice.value)
return 0 return 0
return ((lastPrice.value?.price_last-olderPrice.value) *100)/olderPrice.value }
return ((lastPrice.value?.price_last! - olderPrice.value) * 100) / olderPrice.value
} }
+200 -36
View File
@@ -1,31 +1,13 @@
import type { SelectItem } from '@/models/SelectItem' import type { SelectItem } from '@/models/SelectItem'
import { isBoursecuProject } from '@/utils/config' import { isBoursecuProject } from '@/utils/config'
import { useSettingsStore } from '@/store/settingsStore'
/** شناسه group_type محصول در دیتابیس — نه برچسب نمایشی */
export const BOURSECU_GROUP_MAFTOL = 'مفتول مس' export const BOURSECU_GROUP_MAFTOL = 'مفتول مس'
export const BOURSECU_GROUP_KATOD = 'کاتد مس' export const BOURSECU_GROUP_KATOD = 'کاتد مس'
export const BOURSECU_GROUP_ABSHODE = 'آبشده' export const BOURSECU_GROUP_ABSHODE = 'آبشده'
export const BOURSECU_ASSET_LABEL_KATOD = 'دارایی کاتد مس' export const BOURSECU_WALLET_LABEL_GENERIC = 'موجودی کیف'
export const BOURSECU_ASSET_LABEL_MAFTOL = 'دارایی مفتول مس'
export const BOURSECU_ASSET_LABEL_GOLD = 'دارایی طلایی'
const DEFAULT_TYPE_DEAL: SelectItem[] = [
{ value: 'نقدی', key: 'cash' },
{ value: 'طلایی', key: 'gold' },
]
const MAFTOL_TYPE_DEAL: SelectItem[] = [
{ value: BOURSECU_GROUP_KATOD, key: 'katod' },
{ value: 'نقدی', key: 'cash' },
]
const CASH_ONLY_TYPE_DEAL: SelectItem[] = [
{ value: 'نقدی', key: 'cash' },
]
const GOLD_ONLY_TYPE_DEAL: SelectItem[] = [
{ value: 'طلایی', key: 'gold' },
]
export function normalizeProductGroupType(groupType?: string | null) { export function normalizeProductGroupType(groupType?: string | null) {
return (groupType ?? '').trim() return (groupType ?? '').trim()
@@ -54,24 +36,150 @@ export function isGoldOnlyDealGroup(groupType?: string | null) {
return normalizeProductGroupType(groupType) === BOURSECU_GROUP_ABSHODE return normalizeProductGroupType(groupType) === BOURSECU_GROUP_ABSHODE
} }
export interface ProductUnitSource {
unit?: string | null
direct_price?: number | null
group_type?: string | null
amount?: number | null
}
const COUNT_BASED_GROUP_TYPES = ['سکه', 'گوی', 'مکعب', 'شمش', 'سکه پارسیان']
/** مطابق ادمین: وزن «دارد» یعنی amount مقدار واقعی است؛ «ندارد» یعنی amount = 1 */
export function hasProductUnitWeight(product?: ProductUnitSource | null) {
const amount = Number(product?.amount ?? 0)
return amount > 0 && amount !== 1
}
export function getProductWeightUnit(product?: ProductUnitSource | null) {
if (isBoursecuProject()) {
const group = normalizeProductGroupType(product?.group_type)
if (group === BOURSECU_GROUP_MAFTOL || group === BOURSECU_GROUP_KATOD || group === BOURSECU_GROUP_ABSHODE) {
return getWeightUnit()
}
}
if (!isCountBasedProduct(product) || isGoldOnlyDealGroup(product?.group_type)) {
return getWeightUnit()
}
return 'گرم'
}
export function formatProductWeightAmount(amount?: number | null, product?: ProductUnitSource | null) {
const value = Number(amount ?? 0)
const weightUnit = getProductWeightUnit(product)
if (weightUnit === 'گرم' && value > 0 && value < 1) {
return `${value * 1000} سوت`
}
return `${value} ${weightUnit}`
}
export function getProductUnitWeightLabel(product?: ProductUnitSource | null) {
if (!hasProductUnitWeight(product)) {
return null
}
return formatProductWeightAmount(product?.amount, product)
}
export function getProductTotalWeightLabel(count?: number | null, product?: ProductUnitSource | null) {
if (!hasProductUnitWeight(product)) {
return null
}
const quantity = Number(count ?? 0)
return formatProductWeightAmount(quantity * Number(product?.amount ?? 0), product)
}
export function shouldShowProductTotalWeight(product?: ProductUnitSource | null) {
if (!product) {
return false
}
if (!isCountBasedProduct(product)) {
return true
}
return hasProductUnitWeight(product)
}
export function formatProductInventoryBalance(product?: (ProductUnitSource & { wallet?: { gold?: number | null } }) | null) {
const count = product?.wallet?.gold ?? 0
const quantityPart = `${count} ${getProductQuantityUnit(product)}`
const unitWeight = getProductUnitWeightLabel(product)
if (!unitWeight) {
return quantityPart
}
return `${quantityPart} · هر عدد ${unitWeight}`
}
/** محصول تعدادی: موجودی wallet.gold = تعداد قلم، نه وزن */
export function isCountBasedProduct(product?: ProductUnitSource | null) {
if (!product) {
return false
}
if (product.direct_price != null && product.direct_price !== 0) {
return true
}
const group = normalizeProductGroupType(product.group_type)
if (group === BOURSECU_GROUP_MAFTOL || group === BOURSECU_GROUP_KATOD) {
return true
}
return COUNT_BASED_GROUP_TYPES.includes(group)
}
export function getProductQuantityUnit(product?: ProductUnitSource | null) {
if (isCountBasedProduct(product)) {
return 'عدد'
}
const unit = product?.unit?.trim()
if (unit) {
return unit
}
return getWeightUnit()
}
function getDefaultTypeDealOptions(): SelectItem[] {
const settingsStore = useSettingsStore()
return [
{ value: 'نقدی', key: 'cash' },
{ value: settingsStore.metalTypeLabel, key: 'gold' },
]
}
export function getProductDealMethodOptions(groupType?: string | null): SelectItem[] { export function getProductDealMethodOptions(groupType?: string | null): SelectItem[] {
const settingsStore = useSettingsStore()
if (!isBoursecuProject()) { if (!isBoursecuProject()) {
return DEFAULT_TYPE_DEAL return getDefaultTypeDealOptions()
} }
if (isMaftolMesGroup(groupType)) { if (isMaftolMesGroup(groupType)) {
return MAFTOL_TYPE_DEAL return [
{ value: settingsStore.metalTypeLabel, key: 'katod' },
{ value: 'نقدی', key: 'cash' },
]
} }
if (isKatodMesGroup(groupType)) { if (isKatodMesGroup(groupType)) {
return CASH_ONLY_TYPE_DEAL return [{ value: 'نقدی', key: 'cash' }]
} }
if (isGoldOnlyDealGroup(groupType)) { if (isGoldOnlyDealGroup(groupType)) {
return GOLD_ONLY_TYPE_DEAL return [{ value: settingsStore.meltedGoldLabel, key: 'gold' }]
} }
return DEFAULT_TYPE_DEAL return getDefaultTypeDealOptions()
} }
export function getDefaultProductDealMethod(groupType?: string | null) { export function getDefaultProductDealMethod(groupType?: string | null) {
@@ -79,30 +187,66 @@ export function getDefaultProductDealMethod(groupType?: string | null) {
} }
export function isCashLikeDealMethod(method?: string | null) { export function isCashLikeDealMethod(method?: string | null) {
return method === 'cash' || method === 'katod' return method === 'cash'
} }
export const BOURSECU_WALLET_LABEL_GENERIC = 'موجودی کیف' export function isMainMetalWalletDealMethod(method?: string | null) {
return method === 'gold' || method === 'katod'
}
/** برچسب کیف فلز اصلی (main wallet gold) — از setting metal_type */
export function getMainMetalWalletLabel() {
return `موجودی کیف ${useSettingsStore().metalTypeLabel}`
}
/** برچسب کیف آبشده — از setting metal_type */
export function getMeltedGoldWalletLabel() {
return `موجودی کیف ${useSettingsStore().meltedGoldLabel}`
}
export function getGoldWalletLabel(groupType?: string | null) { export function getGoldWalletLabel(groupType?: string | null) {
if (!isBoursecuProject()) return 'موجودی کیف طلا' const settingsStore = useSettingsStore()
if (!isBoursecuProject()) {
return getMainMetalWalletLabel()
}
const group = normalizeProductGroupType(groupType) const group = normalizeProductGroupType(groupType)
if (group === BOURSECU_GROUP_KATOD) return `موجودی کیف ${BOURSECU_GROUP_KATOD}` if (group === BOURSECU_GROUP_MAFTOL) {
if (group === BOURSECU_GROUP_MAFTOL) return `موجودی کیف ${BOURSECU_GROUP_MAFTOL}` return `موجودی کیف ${BOURSECU_GROUP_MAFTOL}`
if (group === BOURSECU_GROUP_ABSHODE) return 'موجودی کیف طلا' }
if (group === BOURSECU_GROUP_KATOD || group === BOURSECU_GROUP_ABSHODE || !group) {
return group === BOURSECU_GROUP_ABSHODE
? getMeltedGoldWalletLabel()
: getMainMetalWalletLabel()
}
return BOURSECU_WALLET_LABEL_GENERIC return BOURSECU_WALLET_LABEL_GENERIC
} }
export function getCashWalletLabel(groupType?: string | null) { export function getCashWalletLabel(groupType?: string | null) {
if (!isBoursecuProject()) return 'موجودی کیف پول' if (!isBoursecuProject()) {
return 'موجودی کیف پول'
}
const group = normalizeProductGroupType(groupType) const group = normalizeProductGroupType(groupType)
if (group === BOURSECU_GROUP_KATOD) return `موجودی کیف ${BOURSECU_GROUP_KATOD}` if (group === BOURSECU_GROUP_MAFTOL) {
if (group === BOURSECU_GROUP_MAFTOL) return `موجودی کیف ${BOURSECU_GROUP_MAFTOL}` return `موجودی کیف ${BOURSECU_GROUP_MAFTOL}`
}
return BOURSECU_WALLET_LABEL_GENERIC return 'موجودی کیف پول'
}
export function getMetalAssetLabel() {
return `دارایی ${useSettingsStore().metalTypeLabel}`
}
export function getMeltedGoldAssetLabel() {
return `دارایی ${useSettingsStore().meltedGoldLabel}`
}
export function getMaftolAssetLabel() {
return `دارایی ${BOURSECU_GROUP_MAFTOL}`
} }
export function getWeightUnit() { export function getWeightUnit() {
@@ -113,6 +257,10 @@ export function formatBoursecuAssetAmount(amount?: number | null) {
return `${amount ?? 0}${getWeightUnit()}` return `${amount ?? 0}${getWeightUnit()}`
} }
export function formatMainMetalWalletBalanceText(gold: number) {
return `${getMainMetalWalletLabel()}: ${gold} ${getWeightUnit()}`
}
export function formatGoldWalletBalanceText(gold: number, groupType?: string | null) { export function formatGoldWalletBalanceText(gold: number, groupType?: string | null) {
return `${getGoldWalletLabel(groupType)}: ${gold} ${getWeightUnit()}` return `${getGoldWalletLabel(groupType)}: ${gold} ${getWeightUnit()}`
} }
@@ -128,3 +276,19 @@ export function getInsufficientGoldWalletMessage(groupType?: string | null) {
export function getInsufficientCashWalletMessage(groupType?: string | null) { export function getInsufficientCashWalletMessage(groupType?: string | null) {
return `${getCashWalletLabel(groupType)} ناکافی است` return `${getCashWalletLabel(groupType)} ناکافی است`
} }
export function getInsufficientMainMetalWalletMessage() {
return `${getMainMetalWalletLabel()} ناکافی است`
}
export function getMeltedGoldTradeLabel() {
return useSettingsStore().meltedGoldLabel
}
export function getMetalTypeTradeLabel() {
return useSettingsStore().metalTypeLabel
}
export function getTradePriceUnitLabel() {
return useSettingsStore().metalTypeLabel
}
+2 -2
View File
@@ -1,10 +1,10 @@
import type { Product } from '@/models/products' import type { Product } from '@/models/products'
import { lastPrice } from '@/utils/price' import { getTradeBuyPrice, lastPrice } from '@/utils/price'
/** قیمت خرید نمایشی محصول (همان مقداری که در لیست و اکشن‌شیت نشان داده می‌شود) */ /** قیمت خرید نمایشی محصول (همان مقداری که در لیست و اکشن‌شیت نشان داده می‌شود) */
export function getProductBuyPrice(product: Product): number { export function getProductBuyPrice(product: Product): number {
if (product.group_type === 'آبشده') { if (product.group_type === 'آبشده') {
return lastPrice.value?.buy ?? 0 return getTradeBuyPrice(lastPrice.value)
} }
if (['مس', 'نقره'].includes(product.group_type)) { if (['مس', 'نقره'].includes(product.group_type)) {
+19 -25
View File
@@ -232,7 +232,7 @@ import type { Transaction } from '@/models/transaction'
import type { TableEngineInput, TableOutput } from '@/models/table' import type { TableEngineInput, TableOutput } from '@/models/table'
import { useInfiniteScroll } from '@vueuse/core' import { useInfiniteScroll } from '@vueuse/core'
import { getTransactionTable } from '@/api/transaction' import { getTransactionTable } from '@/api/transaction'
import { getLastPrices, getUpPrice, lastPrice, setIntervalGetAllPrice, stopPriceInterval } from '@/utils/price' import { getLastPrices, getTradeBuyPrice, getTradeSellPrice, lastPrice, setIntervalGetAllPrice, stopPriceInterval } from '@/utils/price'
import type { Product } from '@/models/products' import type { Product } from '@/models/products'
import { useFundUserStore } from '@/store/fundStore' import { useFundUserStore } from '@/store/fundStore'
import {useConfigStore} from "@/store/configStore"; import {useConfigStore} from "@/store/configStore";
@@ -327,7 +327,8 @@ const disableTransaction = computed(() =>
form.value?.goldCash === undefined || form.value?.goldCash === undefined ||
(isBuy.value ? (form.value?.goldCash ?? 0) < 500000 : (form.value?.goldValue ?? 0) < 0.001) || (isBuy.value ? (form.value?.goldCash ?? 0) < 500000 : (form.value?.goldValue ?? 0) < 0.001) ||
(!isBuy.value && form.value.goldValue > walletStore?.walletInfo?.gold) || (!isBuy.value && form.value.goldValue > walletStore?.walletInfo?.gold) ||
price.value?.buy === undefined) !lastPrice.value ||
(isBuy.value ? getTradeBuyPrice(lastPrice.value) <= 0 : getTradeSellPrice(lastPrice.value) <= 0))
function refreshTable() { function refreshTable() {
sellItems.value = [] sellItems.value = []
@@ -515,7 +516,7 @@ const limitedPrice = computed(() => {
} }
}*/ }*/
function syncFormWithLatestPrice() { function syncFormWithLatestPrice() {
if (!price.value) return if (!lastPrice.value) return
const goldValue = form.value.goldValue const goldValue = form.value.goldValue
if (goldValue !== undefined && goldValue !== null && goldValue !== '' && !isNaN(Number(goldValue))) { if (goldValue !== undefined && goldValue !== null && goldValue !== '' && !isNaN(Number(goldValue))) {
@@ -538,26 +539,20 @@ watch(
function calculateCash(val: number) { function calculateCash(val: number) {
priceErrorVisible.value = false priceErrorVisible.value = false
if (price.value) { if (!lastPrice.value) return
form.value.goldVazn = parseFloat((val * (( props?.ProductItem?.price) + (props?.ProductItem?.cash_fee_buy)))/lastPrice.value?.buy).toFixed(1)
const tradeBuy = getTradeBuyPrice(lastPrice.value)
form.value.goldVazn = parseFloat((val * ((props?.ProductItem?.price) + (props?.ProductItem?.cash_fee_buy))) / tradeBuy).toFixed(1)
if (isBuy.value) { if (isBuy.value) {
if (val) { form.value.goldCash = val
form.value.goldCash = parseFloat(val * (( props?.ProductItem?.price) + (props?.ProductItem?.cash_fee_buy))).toFixed(0) ? parseFloat(String(val * ((props?.ProductItem?.price) + (props?.ProductItem?.cash_fee_buy))))
} : 0
else { if (!val) form.value.goldVazn = 0
form.value.goldCash = 0 } else {
form.value.goldVazn = 0 form.value.goldCash = val
} ? parseFloat(String((val * props?.ProductItem?.price) - (props?.ProductItem?.cash_fee_sell)))
} : 0
else { if (!val) form.value.goldVazn = 0
if (val)
form.value.goldCash = parseFloat((val * props?.ProductItem?.price) - (props?.ProductItem?.cash_fee_sell)).toFixed(0)
else{
form.value.goldCash = 0
form.value.goldVazn = 0
}
}
console.log(form.value.goldVazn)
} }
} }
@@ -629,15 +624,14 @@ const price = computed((): Price => <Price>lastPrice.value ?? 0)
const goldPriceValue = computed(() => { const goldPriceValue = computed(() => {
if (!lastPrice.value?.price) return 0 if (!lastPrice.value?.price) return 0
return isBuy.value return isBuy.value
? (lastPrice.value.buy ?? 0) ? getTradeBuyPrice(lastPrice.value)
: (lastPrice.value.sell ?? 0) : getTradeSellPrice(lastPrice.value)
}) })
async function initPrice() { async function initPrice() {
try { try {
// chartLoading.value = true // chartLoading.value = true
await getLastPrices() await getLastPrices()
await getUpPrice()
await setIntervalGetAllPrice() await setIntervalGetAllPrice()
loading.value = true loading.value = true
} catch (e) { } catch (e) {
+10 -1
View File
@@ -9,7 +9,15 @@
<!-- <img :src="props.item.img" alt="image">--> <!-- <img :src="props.item.img" alt="image">-->
<img v-if="props.item.group_type=='طلا'|| props.item.group_type=='آبشده'|| props.item.group_type== null" :src="defaultImg"> <img v-if="props.item.group_type=='طلا'|| props.item.group_type=='آبشده'|| props.item.group_type== null" :src="defaultImg">
<div class="mt-3">{{props.item?.title?? '-'}}</div> <div class="mt-3">{{props.item?.title?? '-'}}</div>
<div class="mt-1 flex gap-1"> <div class="font-bold"> {{props.item?.wallet?.gold?? '-'}} </div> {{props.item?.unit}} </div> <div class="mt-1 flex flex-col items-center gap-0.5 text-center">
<div class="flex gap-1">
<div class="font-bold">{{ props.item?.wallet?.gold ?? '-' }}</div>
{{ getProductQuantityUnit(props.item) }}
</div>
<div v-if="getProductUnitWeightLabel(props.item)" class="text-xs text-gray-500">
هر عدد {{ getProductUnitWeightLabel(props.item) }}
</div>
</div>
<!-- {{props.item?.wallet[0]?.cash}}--> <!-- {{props.item?.wallet[0]?.cash}}-->
</div> </div>
</template> </template>
@@ -30,6 +38,7 @@ import sekkeImg from "@/assets/img/sekkeImg.svg"
import type { Product } from '@/models/products' import type { Product } from '@/models/products'
import mesImg from "@/assets/img/mesImg.jpg"; import mesImg from "@/assets/img/mesImg.jpg";
import noghrehImg from "@/assets/img/noghrehImg.webp"; import noghrehImg from "@/assets/img/noghrehImg.webp";
import { getProductQuantityUnit, getProductUnitWeightLabel } from '@/utils/productDealMethod'
/*function itemImg() { /*function itemImg() {
}*/ }*/
+6 -38
View File
@@ -10,33 +10,6 @@
<img :src="img" alt="" class="w-full absolute bottom-0 left-0 opacity-5 pointer-events-none z-0" /> <img :src="img" alt="" class="w-full absolute bottom-0 left-0 opacity-5 pointer-events-none z-0" />
<div class="pt-15 flex flex-col relative z-10"> <div class="pt-15 flex flex-col relative z-10">
<div class="text-tertiary font-bold mr-5 z-20">موجودی دارایی ها</div> <div class="text-tertiary font-bold mr-5 z-20">موجودی دارایی ها</div>
<template v-if="isBoursecuProject()">
<div class="flex justify-center mt-2 w-full z-20">
{{ BOURSECU_ASSET_LABEL_KATOD }}:
<div class="text-l mr-4 font-bold">
{{ formatBoursecuAssetAmount(walletStore.walletInfo?.count_katod_mes) }}
</div>
</div>
<div class="flex justify-center mt-2 w-full z-20">
{{ BOURSECU_ASSET_LABEL_MAFTOL }}:
<div class="text-l mr-4 font-bold">
{{ formatBoursecuAssetAmount(walletStore.walletInfo?.count_maftol_mes) }}
</div>
</div>
<div class="flex justify-center mt-2 w-full z-20">
{{ BOURSECU_ASSET_LABEL_GOLD }}:
<div class="text-l mr-4 font-bold">
{{ formatBoursecuAssetAmount(walletStore.walletInfo?.count_gold) }}
</div>
</div>
<div class="flex justify-center mt-2 w-full z-20">
دارایی ریالی:
<div class="text-l mr-4 font-bold">
{{ usePriceWithoutType(walletStore.walletInfo?.count_cash ?? 0) }}ریال
</div>
</div>
</template>
<template v-else>
<div class="flex mt-4 justify-center mt-2 w-full z-20"> <div class="flex mt-4 justify-center mt-2 w-full z-20">
محصولات: محصولات:
<div class="text-l mr-4 font-bold">{{ walletStore.walletInfo?.count_product ?? 0}}عدد</div> <div class="text-l mr-4 font-bold">{{ walletStore.walletInfo?.count_product ?? 0}}عدد</div>
@@ -49,9 +22,9 @@
دارایی مس: دارایی مس:
<div class="text-l mr-4 font-bold">{{ walletStore.walletInfo?.count_copper ?? 0}}گرم</div> <div class="text-l mr-4 font-bold">{{ walletStore.walletInfo?.count_copper ?? 0}}گرم</div>
</div> </div>
<div class="flex justify-center mt-2 w-full z-20"> <div v-if="!isBoursecuProject" class="flex justify-center mt-2 w-full z-20">
دارایی طلایی: {{ metalAssetLabel }}:
<div class="text-l mr-4 font-bold">{{ walletStore.walletInfo?.count_gold ?? 0}}گرم</div> <div class="text-l mr-4 font-bold">{{ walletStore.walletInfo?.count_gold ?? 0 }}{{ getWeightUnit() }}</div>
</div> </div>
<div class="flex justify-center mt-2 w-full z-20"> <div class="flex justify-center mt-2 w-full z-20">
دارایی ریالی: دارایی ریالی:
@@ -61,7 +34,6 @@
معادل ریالی مجموع دارایی ها: معادل ریالی مجموع دارایی ها:
<div class="text-l mr-4 font-bold">{{ usePriceWithoutType(walletStore.walletInfo?.count_cash_total ?? 0) }}ریال</div> <div class="text-l mr-4 font-bold">{{ usePriceWithoutType(walletStore.walletInfo?.count_cash_total ?? 0) }}ریال</div>
</div> </div>
</template>
</div> </div>
</div> </div>
<div class="pt-[20rem] "> <div class="pt-[20rem] ">
@@ -99,7 +71,7 @@ import BasicModal from "@/components/BasicPacks/BasicModal.vue";
import img from '@/assets/img/user_ly1.svg' import img from '@/assets/img/user_ly1.svg'
import empty from '@/assets/img/cash_empty.svg' import empty from '@/assets/img/cash_empty.svg'
import Item from './components/Item.vue' import Item from './components/Item.vue'
import {onMounted, ref} from "vue"; import {onMounted, ref, computed} from "vue";
import {loading} from "@/utils"; import {loading} from "@/utils";
import type {TableOutput} from "@/models/table"; import type {TableOutput} from "@/models/table";
import type {Fund} from "@/models/fund"; import type {Fund} from "@/models/fund";
@@ -110,13 +82,9 @@ import {usePriceWithoutType} from "../../../utils/usePrice";
import {useWalletStore} from "@/store/walletStore"; import {useWalletStore} from "@/store/walletStore";
import {useConfigStore} from "@/store/configStore"; import {useConfigStore} from "@/store/configStore";
import { isBoursecuProject } from '@/utils/config' import { isBoursecuProject } from '@/utils/config'
import { import { formatBoursecuAssetAmount, getMetalAssetLabel, getWeightUnit } from '@/utils/productDealMethod'
BOURSECU_ASSET_LABEL_GOLD,
BOURSECU_ASSET_LABEL_KATOD,
BOURSECU_ASSET_LABEL_MAFTOL,
formatBoursecuAssetAmount,
} from '@/utils/productDealMethod'
const nameProject = useConfigStore().config.name const nameProject = useConfigStore().config.name
const metalAssetLabel = computed(() => getMetalAssetLabel())
const items = ref<Fund[]>([]) const items = ref<Fund[]>([])
const tableOutput = ref<TableOutput<Fund> | null>(null) const tableOutput = ref<TableOutput<Fund> | null>(null)
+28 -37
View File
@@ -6,11 +6,11 @@
<div class="flex justify-evenly w-full px-2 h-11 items-center bg-gray-50 relative rounded "> <div class="flex justify-evenly w-full px-2 h-11 items-center bg-gray-50 relative rounded ">
<div :class="isBuy?'text-tertiary':'text-gray-400'" class="w-full text-center z-2" <div :class="isBuy?'text-tertiary':'text-gray-400'" class="w-full text-center z-2"
@click.stop="setIsBuy(true) "> @click.stop="setIsBuy(true) ">
خرید طلا {{ props?.ProductItem?.title }} خرید {{ meltedGoldLabel }} {{ props?.ProductItem?.title }}
</div> </div>
<div :class="!isBuy?'text-tertiary':'text-gray-400'" class="w-full text-center z-2" <div :class="!isBuy?'text-tertiary':'text-gray-400'" class="w-full text-center z-2"
@click.stop="setIsBuy(false) "> @click.stop="setIsBuy(false) ">
فروش طلا {{ props?.ProductItem?.title }} فروش {{ meltedGoldLabel }} {{ props?.ProductItem?.title }}
</div> </div>
<!-- <div ref="bganim" class="absolute bg-white h-8 w-1/2 rounded-lg " :style="`transform: translateX(${isbuy? '0':'-100%'}); left: ${isbuy? '0':'100%'}`"></div>--> <!-- <div ref="bganim" class="absolute bg-white h-8 w-1/2 rounded-lg " :style="`transform: translateX(${isbuy? '0':'-100%'}); left: ${isbuy? '0':'100%'}`"></div>-->
<div ref="bganim" :style="useStyle()" <div ref="bganim" :style="useStyle()"
@@ -160,7 +160,7 @@
<div class="flex justify-between mt-3"> <div class="flex justify-between mt-3">
<div>مظنه:</div> <div>مظنه:</div>
<div class="flex items-center"> <div class="flex items-center">
<div class="font-bold">{{ usePriceWithoutType(isBuy ? price.buy ?? 0 : price.sell ?? 0) }}</div> <div class="font-bold">{{ usePriceWithoutType(isBuy ? getTradeBuyPrice(lastPrice) : getTradeSellPrice(lastPrice)) }}</div>
<div class="text-xs mr-1">ریال</div> <div class="text-xs mr-1">ریال</div>
</div> </div>
</div> </div>
@@ -227,16 +227,20 @@ import type { Transaction } from '@/models/transaction'
import type { TableEngineInput, TableOutput } from '@/models/table' import type { TableEngineInput, TableOutput } from '@/models/table'
import { useInfiniteScroll } from '@vueuse/core' import { useInfiniteScroll } from '@vueuse/core'
import { getTransactionTable } from '@/api/transaction' import { getTransactionTable } from '@/api/transaction'
import { getLastPrices, getUpPrice, lastPrice, setIntervalGetAllPrice, stopPriceInterval } from '@/utils/price' import { getLastPrices, getTradeBuyPrice, getTradeSellPrice, lastPrice, setIntervalGetAllPrice, stopPriceInterval } from '@/utils/price'
import type { Product } from '@/models/products' import type { Product } from '@/models/products'
import { useFundUserStore } from '@/store/fundStore' import { useFundUserStore } from '@/store/fundStore'
import {useConfigStore} from "@/store/configStore"; import {useConfigStore} from "@/store/configStore";
import { calcFeeInGrams, loadServiceFeeFromSettings } from '@/utils/serviceFee' import { calcFeeInGrams, loadServiceFeeFromSettings } from '@/utils/serviceFee'
import { formatCashWalletBalanceText, formatGoldWalletBalanceText } from '@/utils/productDealMethod' import { formatCashWalletBalanceText, formatGoldWalletBalanceText } from '@/utils/productDealMethod'
import { useSettingsStore } from '@/store/settingsStore'
import { storeToRefs } from 'pinia'
const infoVisible = ref(false) const infoVisible = ref(false)
const walletStore = useWalletStore() const walletStore = useWalletStore()
const userStore = useUserStore() const userStore = useUserStore()
const settingsStore = useSettingsStore()
const { meltedGoldLabel } = storeToRefs(settingsStore)
const fundStore = useFundUserStore() const fundStore = useFundUserStore()
const confirmAction = ref<boolean>(false) const confirmAction = ref<boolean>(false)
const noCompleteVisible = ref<boolean>(false) const noCompleteVisible = ref<boolean>(false)
@@ -274,7 +278,7 @@ const sellPagination = ref<TableEngineInput>({
}) })
const unitPrice = computed(() => const unitPrice = computed(() =>
isBuy.value ? price.value?.buy ?? 0 : price.value?.sell ?? 0 isBuy.value ? getTradeBuyPrice(lastPrice.value) : getTradeSellPrice(lastPrice.value)
) )
const feeInGrams = computed(() => calcFeeInGrams(form.value?.goldValue)) const feeInGrams = computed(() => calcFeeInGrams(form.value?.goldValue))
const finalPrice = computed(() => (form.value?.goldValue ?? 0) * unitPrice.value) const finalPrice = computed(() => (form.value?.goldValue ?? 0) * unitPrice.value)
@@ -292,7 +296,8 @@ const disableTransaction = computed(() =>
form.value?.goldCash === undefined || form.value?.goldCash === undefined ||
(isBuy.value ? (form.value?.goldCash ?? 0) < 500000 : (form.value?.goldValue ?? 0) < 0.001) || (isBuy.value ? (form.value?.goldCash ?? 0) < 500000 : (form.value?.goldValue ?? 0) < 0.001) ||
(!isBuy.value && form.value.goldValue > walletStore?.walletInfo?.gold) || (!isBuy.value && form.value.goldValue > walletStore?.walletInfo?.gold) ||
price.value?.buy === undefined) !lastPrice.value ||
(isBuy.value ? getTradeBuyPrice(lastPrice.value) <= 0 : getTradeSellPrice(lastPrice.value) <= 0))
function refreshTable() { function refreshTable() {
sellItems.value = [] sellItems.value = []
@@ -468,7 +473,7 @@ const limitedPrice = computed(() => {
}) })
function syncFormWithLatestPrice() { function syncFormWithLatestPrice() {
if (!price.value) return if (!lastPrice.value) return
const goldValue = form.value.goldValue const goldValue = form.value.goldValue
if (goldValue !== undefined && goldValue !== null && goldValue !== '' && !isNaN(Number(goldValue))) { if (goldValue !== undefined && goldValue !== null && goldValue !== '' && !isNaN(Number(goldValue))) {
@@ -483,7 +488,7 @@ function syncFormWithLatestPrice() {
} }
watch( watch(
() => [lastPrice.value?.buy, lastPrice.value?.sell, isBuy.value], () => [getTradeBuyPrice(lastPrice.value), getTradeSellPrice(lastPrice.value), isBuy.value],
() => { () => {
syncFormWithLatestPrice() syncFormWithLatestPrice()
} }
@@ -491,27 +496,20 @@ watch(
function calculateCash(val: number) { function calculateCash(val: number) {
priceErrorVisible.value = false priceErrorVisible.value = false
// console.log(val) if (!lastPrice.value) return
if (price.value) {
if (isBuy.value) { const unit = isBuy.value ? getTradeBuyPrice(lastPrice.value) : getTradeSellPrice(lastPrice.value)
if (val) form.value.goldCash = parseFloat((val * price?.value?.buy).toFixed(0)) form.value.goldCash = val ? parseFloat((val * unit).toFixed(0)) : undefined
else form.value.goldCash = undefined
} else {
if (val) form.value.goldCash = parseFloat((val * price?.value?.sell).toFixed(0))
else form.value.goldCash = undefined
}
}
} }
function calculateGold(val: number) { function calculateGold(val: number) {
// console.log(val) if (!lastPrice.value) return
// form.value.goldCash = usePriceWithoutType(form.value.goldCash)
if (price.value) { const unit = isBuy.value ? getTradeBuyPrice(lastPrice.value) : getTradeSellPrice(lastPrice.value)
if (isBuy.value) { if (isBuy.value) {
if (val) { if (val) {
form.value.goldValue = toFixedDownThreeChar(parseFloat(val / price?.value?.buy)) form.value.goldValue = toFixedDownThreeChar(parseFloat(String(val / unit)))
if (parseInt(finalPrice.value) > 0) priceErrorVisible.value = true priceErrorVisible.value = parseInt(finalPrice.value) > 0
if (parseInt(finalPrice.value) === 0) priceErrorVisible.value = false
} else if (val.toString() === '') { } else if (val.toString() === '') {
form.value.goldValue = undefined form.value.goldValue = undefined
priceErrorVisible.value = false priceErrorVisible.value = false
@@ -519,13 +517,10 @@ function calculateGold(val: number) {
form.value.goldValue = 0 form.value.goldValue = 0
priceErrorVisible.value = false priceErrorVisible.value = false
} }
} else { } else if (val) {
if (val) { form.value.goldValue = toFixedDownThreeChar(parseFloat(String(val / unit)))
form.value.goldValue = toFixedDownThreeChar(parseFloat((val / price?.value?.sell))) priceErrorVisible.value = parseInt(finalPrice.value) > 0
if (parseInt(finalPrice.value) > 0) priceErrorVisible.value = true
if (parseInt(finalPrice.value) === 0) priceErrorVisible.value = false
} else if (val.toString() === '') { } else if (val.toString() === '') {
// console.log('sasasasasasa')
form.value.goldValue = undefined form.value.goldValue = undefined
priceErrorVisible.value = false priceErrorVisible.value = false
} else { } else {
@@ -533,8 +528,6 @@ function calculateGold(val: number) {
priceErrorVisible.value = false priceErrorVisible.value = false
} }
} }
}
}
/*watch(form.value?.goldValue, (n)=>{ /*watch(form.value?.goldValue, (n)=>{
console.log('salammmm', n) console.log('salammmm', n)
@@ -573,18 +566,16 @@ const formatter = (value: number) => {
const price = computed((): Price => <Price>lastPrice.value ?? 0) const price = computed((): Price => <Price>lastPrice.value ?? 0)
const goldPriceValue = computed(() => { const goldPriceValue = computed(() => {
// if (!price.value) return 0
if (!lastPrice.value?.price) return 0 if (!lastPrice.value?.price) return 0
return isBuy.value return isBuy.value
? (price.value.buy ?? 0) ? getTradeBuyPrice(lastPrice.value)
: (price.value.sell ?? 0) : getTradeSellPrice(lastPrice.value)
}) })
async function initPrice() { async function initPrice() {
try { try {
// chartLoading.value = true // chartLoading.value = true
await getLastPrices() await getLastPrices()
await getUpPrice()
await setIntervalGetAllPrice() await setIntervalGetAllPrice()
loading.value = true loading.value = true
} catch (e) { } catch (e) {
@@ -605,7 +596,7 @@ async function ok() {
infoVisible.value = true infoVisible.value = true
await createOrder({ await createOrder({
direction: isBuy.value ? 1 : 2, direction: isBuy.value ? 1 : 2,
price: isBuy.value ? price.value?.buy : price.value?.sell, price: isBuy.value ? getTradeBuyPrice(lastPrice.value) : getTradeSellPrice(lastPrice.value),
amount: form.value.goldValue ?? 0 amount: form.value.goldValue ?? 0
}) })
await walletStore.getMyWallet() await walletStore.getMyWallet()
@@ -4,8 +4,8 @@
محصولات: محصولات:
<div class="text-l mr-2 font-bold">{{ userStore?.userInfo?.wallet?.count_product ?? 0 }} عدد</div> <div class="text-l mr-2 font-bold">{{ userStore?.userInfo?.wallet?.count_product ?? 0 }} عدد</div>
</div> </div>
<div class="flex mt-2 justify-center text-tertiary w-full z-20"> <div v-if="!isBoursecuProject()" class="flex mt-2 justify-center text-tertiary w-full z-20">
دارایی طلایی: {{ metalAssetLabel }}:
<div class="text-l mr-2 font-bold">{{ (userStore?.userInfo?.wallet?.count_gold ?? 0).toFixed(3) }} گرم</div> <div class="text-l mr-2 font-bold">{{ (userStore?.userInfo?.wallet?.count_gold ?? 0).toFixed(3) }} گرم</div>
<BasicIcon @click="$emit('openGoldModal')" icon="vuesax-linear:info-circle" size="18" color="tertiary" /> <BasicIcon @click="$emit('openGoldModal')" icon="vuesax-linear:info-circle" size="18" color="tertiary" />
</div> </div>
@@ -18,11 +18,15 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue'
import { useUserStore } from '@/store/userStore' import { useUserStore } from '@/store/userStore'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue' import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
import {usePriceWithoutType} from "../../../../utils/usePrice"; import {usePriceWithoutType} from "../../../../utils/usePrice";
import { isBoursecuProject } from '@/utils/config'
import { getMetalAssetLabel } from '@/utils/productDealMethod'
const userStore = useUserStore() const userStore = useUserStore()
const metalAssetLabel = computed(() => getMetalAssetLabel())
defineEmits<{ defineEmits<{
openGoldModal: [] openGoldModal: []
@@ -4,7 +4,7 @@
<div>بالاترین قیمت امروز</div> <div>بالاترین قیمت امروز</div>
<div v-if="price" class="flex flex-col items-center mt-3"> <div v-if="price" class="flex flex-col items-center mt-3">
<div class="text-green-600 flex gap-1 text-xs items-center"> <div class="text-green-600 flex gap-1 text-xs items-center">
<div class="text-base">{{ usePriceWithoutType(price?.buy ?? 0) }}</div> <div class="text-base">{{ usePriceWithoutType(highPrice) }}</div>
ریال ریال
</div> </div>
</div> </div>
@@ -15,7 +15,7 @@
<div class="flex w-full mt-3 justify-evenly"> <div class="flex w-full mt-3 justify-evenly">
<div v-if="price" class="flex flex-col items-center"> <div v-if="price" class="flex flex-col items-center">
<div class="text-red-600 flex gap-1 text-xs items-center"> <div class="text-red-600 flex gap-1 text-xs items-center">
<div class="text-base">{{ usePriceWithoutType(price?.sell ?? 0) }}</div> <div class="text-base">{{ usePriceWithoutType(lowPrice) }}</div>
ریال ریال
</div> </div>
</div> </div>
@@ -25,10 +25,14 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue'
import { getTradeBuyPrice, getTradeSellPrice } from '@/utils/price'
import { usePriceWithoutType } from '../../../../utils/usePrice'
import {usePriceWithoutType} from "../../../../utils/usePrice"; const props = defineProps<{
defineProps<{
price: any price: any
}>() }>()
const highPrice = computed(() => getTradeBuyPrice(props.price))
const lowPrice = computed(() => getTradeSellPrice(props.price))
</script> </script>
@@ -10,15 +10,24 @@
<BasicIcon v-else-if="['آبشده','طلا'].includes(props.ProductItem.group_type)" stroke-width="1" size="50" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/> <BasicIcon v-else-if="['آبشده','طلا'].includes(props.ProductItem.group_type)" stroke-width="1" size="50" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/>
<BasicIcon v-else stroke-width="1" size="50" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/> <BasicIcon v-else stroke-width="1" size="50" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/>
</div> </div>
<div class="flex justify-between px-2 items-center "> <div class="px-2">
<div class="flex justify-between items-center">
<BasicIcon v-if="props.ProductItem.group_type=='گوی'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:grammerly"/> <BasicIcon v-if="props.ProductItem.group_type=='گوی'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:grammerly"/>
<BasicIcon v-else-if="props.ProductItem.group_type=='سکه'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:coin"/> <BasicIcon v-else-if="props.ProductItem.group_type=='سکه'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:coin"/>
<BasicIcon v-else-if="props.ProductItem.group_type=='شمش'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/> <BasicIcon v-else-if="props.ProductItem.group_type=='شمش'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/>
<BasicIcon v-else-if="props.ProductItem.group_type=='مکعب'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:keyboard"/> <BasicIcon v-else-if="props.ProductItem.group_type=='مکعب'" stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:keyboard"/>
<BasicIcon v-else stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/> <div class="flex justify-between gap-2 items-center"> <BasicIcon v-else stroke-width="1" size="26" color="#0A1B37" class="rotate-310" icon="vuesax-linear:slider-vertical"/>
<div class="flex justify-between gap-2 items-center">
<span v-if="['آبشده','طلا'].includes(props.ProductItem.group_type)" class="font-bold text-secondary">{{userWallet.walletInfo?.gold??0}}</span> <span v-if="['آبشده','طلا'].includes(props.ProductItem.group_type)" class="font-bold text-secondary">{{userWallet.walletInfo?.gold??0}}</span>
<span v-else class="font-bold text-secondary">{{ props?.ProductItem.wallet?.gold ?? 0 }}</span> <span v-else class="font-bold text-secondary">{{ props?.ProductItem.wallet?.gold ?? 0 }}</span>
<span class="text-gray-400">{{props?.ProductItem?.unit}}</span> <span class="text-gray-400">{{ getProductQuantityUnit(props.ProductItem) }}</span>
</div>
</div>
<div
v-if="getProductUnitWeightLabel(props.ProductItem)"
class="mt-1 text-left text-xs text-gray-400"
>
هر عدد {{ getProductUnitWeightLabel(props.ProductItem) }}
</div> </div>
</div> </div>
</div> </div>
@@ -30,6 +39,7 @@
import BasicIcon from "@/components/BasicPacks/BasicIcon.vue"; import BasicIcon from "@/components/BasicPacks/BasicIcon.vue";
import type {PInventory} from "@/models/products"; import type {PInventory} from "@/models/products";
import {useWalletStore} from "../../../../store/walletStore"; import {useWalletStore} from "../../../../store/walletStore";
import { getProductQuantityUnit, getProductUnitWeightLabel } from '@/utils/productDealMethod'
interface Prop { interface Prop {
ProductItem: PInventory ProductItem: PInventory
} }
+1 -2
View File
@@ -85,7 +85,7 @@ import {useWalletStore} from '@/store/walletStore'
import {useConfigStore} from '@/store/configStore' import {useConfigStore} from '@/store/configStore'
import {useFundUserStore} from '@/store/fundStore' import {useFundUserStore} from '@/store/fundStore'
import {usePrice, usePriceWithoutType} from '../../../utils/usePrice' import {usePrice, usePriceWithoutType} from '../../../utils/usePrice'
import {getLastPrices, getUpPrice, lastPrice, price, setIntervalGetAllPrice, stopPriceInterval} from '@/utils/price' import {getLastPrices, lastPrice, price, setIntervalGetAllPrice, stopPriceInterval} from '@/utils/price'
import {getConstByKey} from '@/api/const' import {getConstByKey} from '@/api/const'
import {message, Modal} from 'ant-design-vue' import {message, Modal} from 'ant-design-vue'
@@ -260,7 +260,6 @@ onMounted(async () => {
await Promise.all([ await Promise.all([
loadFunds(), loadFunds(),
getLastPrices(), getLastPrices(),
getUpPrice(),
fetchPrices(), fetchPrices(),
setIntervalGetAllPrice(), setIntervalGetAllPrice(),
loadBanners() loadBanners()
@@ -32,15 +32,20 @@
</div> </div>
<div class="flex mt-3 justify-between items-center"> <div class="flex mt-3 justify-between items-center">
<div>تعداد موجودی:</div> <div>تعداد موجودی:</div>
<div class="flex flex-col items-end gap-0.5">
<div class="flex gap-1 items-center"> <div class="flex gap-1 items-center">
<div class="font-bold">{{ val.product.wallet.gold }}</div> <div class="font-bold">{{ val.product.wallet.gold }}</div>
<div>{{ val.product.unit }}</div> <div>{{ getProductQuantityUnit(val.product) }}</div>
</div>
<div v-if="getProductUnitWeightLabel(val.product)" class="text-xs text-gray-500">
هر عدد {{ getProductUnitWeightLabel(val.product) }}
</div>
</div> </div>
</div> </div>
<div class="flex justify-between items-center mt-2"> <div class="flex justify-between items-center mt-2">
<div>تعداد درخواستی:</div> <div>تعداد درخواستی:</div>
<div class="flex gap-1 items-center w-40%"> <div class="flex gap-1 items-center w-40%">
<BasicInput v-model:value="val.count" addon-before="عدد"/> <BasicInput v-model:value="val.count" :addon-before="getProductQuantityUnit(val.product)"/>
</div> </div>
</div> </div>
</div> </div>
@@ -104,6 +109,7 @@ import {message} from "ant-design-vue"
import New_EditAddress from "@/views/base/address/components/New_EditAddress.vue" import New_EditAddress from "@/views/base/address/components/New_EditAddress.vue"
import mesImg from "@/assets/img/mesImg.jpg"; import mesImg from "@/assets/img/mesImg.jpg";
import noghrehImg from "@/assets/img/noghrehImg.webp"; import noghrehImg from "@/assets/img/noghrehImg.webp";
import { getProductQuantityUnit, getProductUnitWeightLabel } from '@/utils/productDealMethod'
const items = ref<PInventory[]>() const items = ref<PInventory[]>()
const baseItems = ref<PInventory[]>() const baseItems = ref<PInventory[]>()
+2 -2
View File
@@ -5,8 +5,8 @@
<div @click="router.back()"> <div @click="router.back()">
<BasicIcon icon="vuesax-linear:arrow-right-1"/> <BasicIcon icon="vuesax-linear:arrow-right-1"/>
</div> </div>
<div v-if="route.name=='list'" class="mr-2">دریافت طلای فیزیکی</div> <div v-if="route.name=='list'" class="mr-2">دریافت فیزیکی</div>
<div v-else class="mr-2">دریافت طلای فیزیکی-درخواست جدید</div> <div v-else class="mr-2">دریافت فیزیکی-درخواست جدید</div>
</div> </div>
</div> </div>
<div> <div>
@@ -79,20 +79,27 @@
<div>{{ usePrice(form.goldCash ?? 0) }}</div> <div>{{ usePrice(form.goldCash ?? 0) }}</div>
</div> </div>
<div v-if="props?.ProductItem?.group_type !== 'سکه'" class="flex justify-between"> <div v-if="shouldShowProductTotalWeight(props?.ProductItem)" class="flex justify-between">
<div>وزن کل</div> <div>وزن کل</div>
<div>{{ form.goldVazn ?? 0 }} {{ getWeightUnit() }}</div> <div>{{ totalWeightDisplay }}</div>
</div>
<div
v-if="isCountBasedProductItem && hasProductUnitWeight(props?.ProductItem)"
class="flex justify-between text-xs text-gray-500"
>
<div>وزن هر عدد</div>
<div>{{ getProductUnitWeightLabel(props?.ProductItem) }}</div>
</div> </div>
<!-- {{walletStore?.walletInfo?.gold}}--> <!-- {{walletStore?.walletInfo?.gold}}-->
<Transition mode="out-in" name="fade" class="mt-2"> <Transition mode="out-in" name="fade" class="mt-2">
<div v-if="isBuy && form.method === 'gold'" class="font-bold text-xs"> <div v-if="isBuy && (form.method === 'gold' || form.method === 'katod')" class="font-bold text-xs">
<div>{{ goldWalletBalanceText }}</div> <div>{{ buyMetalWalletBalanceText }}</div>
</div> </div>
<div v-else-if="isBuy" class="font-bold text-xs"> <div v-else-if="isBuy && form.method === 'cash'" class="font-bold text-xs">
{{ cashWalletBalanceText }} {{ cashWalletBalanceText }}
</div> </div>
<div class="font-bold text-xs" v-else>{{ `موجودی محصول: ${getInventoryById(props?.ProductItem?.id)}` }} <div class="font-bold text-xs" v-else>{{ `موجودی محصول: ${getInventoryById(props?.ProductItem?.id)} ${getProductQuantityUnit(props?.ProductItem)}` }}
</div> </div>
</Transition> </Transition>
<Transition mode="out-in" name="fade"> <Transition mode="out-in" name="fade">
@@ -184,7 +191,7 @@
<div class="flex items-center"> <div class="flex items-center">
<div class="font-bold">{{ form.goldValue }}</div> <div class="font-bold">{{ form.goldValue }}</div>
<div class="text-xs mr-1"> عدد</div> <div class="text-xs mr-1"> عدد</div>
<div class="text-base font-bold mr-1"> عدد {{ props?.ProductItem?.title }}</div> <div class="text-base font-bold mr-1"> {{ props?.ProductItem?.title }}</div>
</div> </div>
</div> </div>
<div class="flex justify-between mt-3"> <div class="flex justify-between mt-3">
@@ -250,7 +257,7 @@ import BasicIcon from '@/components/BasicPacks/BasicIcon.vue'
import type { Transaction } from '@/models/transaction' import type { Transaction } from '@/models/transaction'
import type { TableEngineInput, TableOutput } from '@/models/table' import type { TableEngineInput, TableOutput } from '@/models/table'
import { getTransactionTable } from '@/api/transaction' import { getTransactionTable } from '@/api/transaction'
import { getLastPrices, lastPrice} from '@/utils/price' import { getLastPrices, getTradeBuyPrice, getTradeSellPrice, lastPrice, setIntervalGetAllPrice, stopPriceInterval } from '@/utils/price'
import { Product } from '@/models/products' import { Product } from '@/models/products'
import BasicSelect from '@/components/BasicPacks/BasicSelect.vue' import BasicSelect from '@/components/BasicPacks/BasicSelect.vue'
import Bg_main from '@/components/bg_main.vue' import Bg_main from '@/components/bg_main.vue'
@@ -258,20 +265,46 @@ import { useFundUserStore } from '@/store/fundStore'
import { import {
getDefaultProductDealMethod, getDefaultProductDealMethod,
getProductDealMethodOptions, getProductDealMethodOptions,
isCashLikeDealMethod,
formatCashWalletBalanceText, formatCashWalletBalanceText,
formatGoldWalletBalanceText, formatGoldWalletBalanceText,
getWeightUnit, formatMainMetalWalletBalanceText,
formatProductWeightAmount,
getProductQuantityUnit,
getProductTotalWeightLabel,
getProductUnitWeightLabel,
hasProductUnitWeight,
isCountBasedProduct,
shouldShowProductTotalWeight,
} from '@/utils/productDealMethod' } from '@/utils/productDealMethod'
const typeDeal = computed(() => getProductDealMethodOptions(props?.ProductItem?.group_type)) const typeDeal = computed(() => getProductDealMethodOptions(props?.ProductItem?.group_type))
const productGroupType = computed(() => props?.ProductItem?.group_type) const productGroupType = computed(() => props?.ProductItem?.group_type)
const isCountBasedProductItem = computed(() => isCountBasedProduct(props?.ProductItem))
const totalWeightDisplay = computed(() => {
const product = props?.ProductItem
if (!product) {
return formatProductWeightAmount(0, product)
}
if (isCountBasedProductItem.value) {
return getProductTotalWeightLabel(form.value.goldValue, product)
?? formatProductWeightAmount(0, product)
}
return formatProductWeightAmount(form.value.goldVazn ?? 0, product)
})
const goldWalletBalanceText = computed(() => const goldWalletBalanceText = computed(() =>
formatGoldWalletBalanceText(walletStore?.walletInfo?.gold ?? 0, productGroupType.value) formatGoldWalletBalanceText(walletStore?.walletInfo?.gold ?? 0, productGroupType.value)
) )
const buyMetalWalletBalanceText = computed(() =>
form.value.method === 'katod'
? formatMainMetalWalletBalanceText(walletStore?.walletInfo?.gold ?? 0)
: goldWalletBalanceText.value
)
const cashWalletBalanceText = computed(() => const cashWalletBalanceText = computed(() =>
formatCashWalletBalanceText( formatCashWalletBalanceText(
usePriceWithoutType(walletStore?.walletInfo?.cash ?? 0), usePriceWithoutType(walletStore?.walletInfo?.cash ?? 0),
@@ -352,7 +385,8 @@ const disableTransaction = computed(() =>
form.value?.goldCash === undefined || form.value?.goldCash === undefined ||
(isBuy.value ? (form.value?.goldCash ?? 0) < 500000 : (form.value?.goldValue ?? 0) < 0.001) || (isBuy.value ? (form.value?.goldCash ?? 0) < 500000 : (form.value?.goldValue ?? 0) < 0.001) ||
// (!isBuy.value && form.value.goldValue > walletStore?.walletInfo?.gold) || // (!isBuy.value && form.value.goldValue > walletStore?.walletInfo?.gold) ||
price.value?.buy === undefined) !lastPrice.value ||
(isBuy.value ? getTradeBuyPrice(lastPrice.value) <= 0 : getTradeSellPrice(lastPrice.value) <= 0))
function refreshTable() { function refreshTable() {
sellItems.value = [] sellItems.value = []
@@ -557,8 +591,9 @@ function handleGoldValueChange(val: string | number | undefined) {
function calculateCash(val: number) { function calculateCash(val: number) {
priceErrorVisible.value = false priceErrorVisible.value = false
if (price.value) { if (!lastPrice.value) return
form.value.goldVazn = parseFloat(val * props?.ProductItem?.amount)
form.value.goldVazn = parseFloat(String(val * props?.ProductItem?.amount))
// form.value.goldVazn = parseFloat((val * (( props?.ProductItem?.price) + (props?.ProductItem?.cash_fee_buy)))/lastPrice.value?.buy).toFixed(2) // form.value.goldVazn = parseFloat((val * (( props?.ProductItem?.price) + (props?.ProductItem?.cash_fee_buy)))/lastPrice.value?.buy).toFixed(2)
if (isBuy.value) { if (isBuy.value) {
if (val){ if (val){
@@ -590,7 +625,6 @@ function calculateCash(val: number) {
} }
} }
} }
}
/*function calculateGold(val: number) { /*function calculateGold(val: number) {
// console.log(val) // console.log(val)
@@ -673,9 +707,6 @@ async function initPrice() {
await getLastPrices() await getLastPrices()
// await setIntervalGetPrice() // await setIntervalGetPrice()
loading.value = true loading.value = true
price.value = lastPrice.value
/*props.ProductItem.price = lastPrice.value?.buy * props.ProductItem?.amount
props.ProductItem.sellPrice = lastPrice.value?.sell * props.ProductItem?.amount*/
props.ProductItem.price = lastPrice?.value?.price? (lastPrice?.value?.price + props.ProductItem?.cash_fee_buy) * props.ProductItem?.amount: 0 props.ProductItem.price = lastPrice?.value?.price? (lastPrice?.value?.price + props.ProductItem?.cash_fee_buy) * props.ProductItem?.amount: 0
props.ProductItem.sellPrice = lastPrice?.value?.price? (lastPrice?.value?.price - props.ProductItem?.percent_fee_sell) * props.ProductItem?.amount:0 props.ProductItem.sellPrice = lastPrice?.value?.price? (lastPrice?.value?.price - props.ProductItem?.percent_fee_sell) * props.ProductItem?.amount:0
} catch (e) { } catch (e) {
@@ -184,7 +184,7 @@
<div class="flex items-center"> <div class="flex items-center">
<div class="font-bold">{{ form.goldValue }}</div> <div class="font-bold">{{ form.goldValue }}</div>
<div class="text-xs mr-1"> عدد</div> <div class="text-xs mr-1"> عدد</div>
<div class="text-base font-bold mr-1"> عدد {{ props?.ProductItem?.title }}</div> <div class="text-base font-bold mr-1"> {{ props?.ProductItem?.title }}</div>
</div> </div>
</div> </div>
<div class="flex justify-between mt-3"> <div class="flex justify-between mt-3">
@@ -32,7 +32,7 @@ import type {Product} from "@/models/products";
import {usePrice} from '@/utils/usePrice'; import {usePrice} from '@/utils/usePrice';
import {getFileUrl} from '@/utils/file'; import {getFileUrl} from '@/utils/file';
import {computed, ref} from "vue"; import {computed, ref} from "vue";
import { lastPrice } from '@/utils/price' import { getTradeBuyPrice, lastPrice } from '@/utils/price'
import type { Price } from '@/models/home' import type { Price } from '@/models/home'
interface Prop { interface Prop {
@@ -90,10 +90,7 @@ const price = computed(()=>{
const priceLast = computed((): Price => <Price>lastPrice.value ?? 0) const priceLast = computed((): Price => <Price>lastPrice.value ?? 0)
const goldPriceValue = computed(() => { const goldPriceValue = computed(() => getTradeBuyPrice(priceLast.value))
if (!priceLast.value) return 0
return priceLast.value.buy
})
</script> </script>
-2
View File
@@ -219,9 +219,7 @@ async function initPrice() {
try { try {
// chartLoading.value = true // chartLoading.value = true
await getLastPrices() await getLastPrices()
// await setIntervalGetPrice()
loading.value = true loading.value = true
price.value = lastPrice.value
} catch (e) { } catch (e) {
console.log(e) console.log(e)
} finally { } finally {
@@ -54,18 +54,26 @@
</div> </div>
</div> </div>
<div v-if="item.order" class="flex justify-between mb-3"> <div v-if="item.order" class="flex justify-between mb-3">
<div class="text-primary">قیمت هر گرم طلا حین معامله:</div> <div class="text-primary">قیمت هر گرم {{ getTradePriceUnitLabel() }} حین معامله:</div>
<div class="flex text-xs items-center number-ltr"> <div class="flex text-xs items-center number-ltr">
<div class="text-base ml-1">{{ usePriceWithoutType(item.order?.price?? 0) }}</div> <div class="text-base ml-1">{{ usePriceWithoutType(item.order?.price?? 0) }}</div>
ریال ریال
</div> </div>
</div> </div>
<div class="flex justify-between mb-3"> <div class="flex justify-between mb-3">
<div class="text-primary">مقدار {{item.wallet?.product? item.wallet.product.title: 'آبشده' }} مبادله شده:</div> <div class="text-primary">مقدار {{ item.wallet?.product ? item.wallet.product.title : getMeltedGoldTradeLabel() }} مبادله شده:</div>
<div :class="item.gold >= 0? 'text-green-600' : 'text-red-600'" class="flex text-xs items-center number-ltr"> <div :class="item.gold >= 0? 'text-green-600' : 'text-red-600'" class="flex flex-col items-end text-xs number-ltr">
<div class="flex items-center">
<div class="text-base ml-1">{{ item.gold }}</div> <div class="text-base ml-1">{{ item.gold }}</div>
{{ item.unit }} {{ item.unit }}
</div> </div>
<div
v-if="item.wallet?.product && getProductTotalWeightLabel(Math.abs(item.gold ?? 0), item.wallet.product)"
class="text-gray-500"
>
{{ getProductTotalWeightLabel(Math.abs(item.gold ?? 0), item.wallet.product) }}
</div>
</div>
</div> </div>
<div class="flex justify-between mb-3"> <div class="flex justify-between mb-3">
<div class="text-primary">{{ getCashWalletLabel(item.wallet?.product?.group_type) }}:</div> <div class="text-primary">{{ getCashWalletLabel(item.wallet?.product?.group_type) }}:</div>
@@ -76,9 +84,14 @@
</div> </div>
<div class="flex justify-between mb-3" v-if="item.wallet?.product"> <div class="flex justify-between mb-3" v-if="item.wallet?.product">
<div class="text-primary">موجودی {{item.wallet.product.title}}:</div> <div class="text-primary">موجودی {{item.wallet.product.title}}:</div>
<div class="flex text-xs text-yellow-700 items-center"> <div class="flex flex-col items-end text-xs text-yellow-700">
<div class="flex items-center">
<div class="text-base ml-1">{{ item.balance_gold }}</div> <div class="text-base ml-1">{{ item.balance_gold }}</div>
{{item.wallet.product.unit}} {{ getProductQuantityUnit(item.wallet.product) }}
</div>
<div v-if="getProductUnitWeightLabel(item.wallet.product)" class="text-gray-500">
هر عدد {{ getProductUnitWeightLabel(item.wallet.product) }}
</div>
</div> </div>
</div> </div>
<div class="flex justify-between mb-3" v-else> <div class="flex justify-between mb-3" v-else>
@@ -138,7 +151,7 @@ import BasicActionSheet from '@/components/BasicPacks/BasicActionSheet.vue'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
import BasicButton from '@/components/BasicPacks/BasicButton.vue' import BasicButton from '@/components/BasicPacks/BasicButton.vue'
import type { Transaction } from '@/models/transaction' import type { Transaction } from '@/models/transaction'
import { getCashWalletLabel, getGoldWalletLabel, getWeightUnit } from '@/utils/productDealMethod' import { getCashWalletLabel, getGoldWalletLabel, getMeltedGoldTradeLabel, getProductQuantityUnit, getProductTotalWeightLabel, getProductUnitWeightLabel, getTradePriceUnitLabel, getWeightUnit } from '@/utils/productDealMethod'
import { toJalaliNotime, toJalaliOutOfUTC, toTime } from '../../../../utils/useDateTime' import { toJalaliNotime, toJalaliOutOfUTC, toTime } from '../../../../utils/useDateTime'
const infoVisible = ref<boolean>(false) const infoVisible = ref<boolean>(false)
+3 -3
View File
@@ -65,14 +65,14 @@
</div> </div>
</div> </div>
<div class="flex justify-between mb-3"> <div class="flex justify-between mb-3">
<div class="text-black">مقدار طلا مبادله شده:</div> <div class="text-black">مقدار {{ getMetalTypeTradeLabel() }} مبادله شده:</div>
<div :class="item.gold >= 0? 'text-green-600' : 'text-red-600'" class="flex text-xs items-center"> <div :class="item.gold >= 0? 'text-green-600' : 'text-red-600'" class="flex text-xs items-center">
<div class="text-base ml-1 number-ltr">{{ item.gold }}</div> <div class="text-base ml-1 number-ltr">{{ item.gold }}</div>
گرم گرم
</div> </div>
</div> </div>
<div v-if="item.order" class="flex justify-between mb-3"> <div v-if="item.order" class="flex justify-between mb-3">
<div class="text-black">قیمت هر گرم طلا حین معامله:</div> <div class="text-black">قیمت هر گرم {{ getTradePriceUnitLabel() }} حین معامله:</div>
<div class="flex text-xs items-center number-ltr"> <div class="flex text-xs items-center number-ltr">
<div class="text-base ml-1">{{ usePriceWithoutType(item.order?.price?? 0) }}</div> <div class="text-base ml-1">{{ usePriceWithoutType(item.order?.price?? 0) }}</div>
ریال ریال
@@ -143,7 +143,7 @@ import BasicActionSheet from "@/components/BasicPacks/BasicActionSheet.vue";
import {computed, ref} from "vue"; import {computed, ref} from "vue";
import BasicButton from "@/components/BasicPacks/BasicButton.vue"; import BasicButton from "@/components/BasicPacks/BasicButton.vue";
import type {Transaction} from "@/models/transaction"; import type {Transaction} from "@/models/transaction";
import {getCashWalletLabel, getGoldWalletLabel, getWeightUnit} from '@/utils/productDealMethod' import {getCashWalletLabel, getGoldWalletLabel, getMetalTypeTradeLabel, getTradePriceUnitLabel, getWeightUnit} from '@/utils/productDealMethod'
import {toJalaliNotime, toJalaliOutOfUTC, toTime} from "../../../../utils/useDateTime"; import {toJalaliNotime, toJalaliOutOfUTC, toTime} from "../../../../utils/useDateTime";
const infoVisible = ref<boolean>(false) const infoVisible = ref<boolean>(false)
+4 -4
View File
@@ -255,6 +255,7 @@ import { loginCustomer, verifyToken } from '@/api/login'
import router from '@/router' import router from '@/router'
import { useUserStore } from '@/store/userStore' import { useUserStore } from '@/store/userStore'
import { useWalletStore } from '@/store/walletStore' import { useWalletStore } from '@/store/walletStore'
import { useSettingsStore } from '@/store/settingsStore'
import { fingerPosition, setTruth } from '@/main' import { fingerPosition, setTruth } from '@/main'
import {useConfigStore} from "@/store/configStore"; import {useConfigStore} from "@/store/configStore";
import {getConfigApp, getProjectLoginLogo, getProjectLoginTaglineLines, isBoursecuProject} from "@/utils/config"; import {getConfigApp, getProjectLoginLogo, getProjectLoginTaglineLines, isBoursecuProject} from "@/utils/config";
@@ -420,10 +421,9 @@ async function installWebApp() {
} }
const isRegister = ref() const isRegister = ref()
async function isOpenRegister() { async function isOpenRegister() {
const settings = await getSettings() const settingsStore = useSettingsStore()
if (settings && Array.isArray(settings)) { await settingsStore.fetchSettings()
isRegister.value = settings.find(s => s?.key === 'open_register' && s?.is_active === true) isRegister.value = settingsStore.settings.find(s => s?.key === 'open_register' && s?.is_active === true)
}
} }
async function proceedWithInstall() { async function proceedWithInstall() {
+186 -157
View File
@@ -71,7 +71,7 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz"
integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==
"@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": "@babel/core@^7.11.1", "@babel/core@^7.22.10":
version "7.22.10" version "7.22.10"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz" resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz"
integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==
@@ -291,7 +291,7 @@
"@babel/template" "^7.27.1" "@babel/template" "^7.27.1"
"@babel/types" "^7.27.1" "@babel/types" "^7.27.1"
"@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": "@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" version "7.27.2"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz"
integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw== integrity sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==
@@ -1006,6 +1006,111 @@
resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz" resolved "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz"
integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
"@esbuild/android-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622"
integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==
"@esbuild/android-arm@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682"
integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==
"@esbuild/android-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2"
integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==
"@esbuild/darwin-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1"
integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==
"@esbuild/darwin-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d"
integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==
"@esbuild/freebsd-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54"
integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==
"@esbuild/freebsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e"
integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==
"@esbuild/linux-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0"
integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==
"@esbuild/linux-arm@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0"
integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==
"@esbuild/linux-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7"
integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==
"@esbuild/linux-loong64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d"
integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==
"@esbuild/linux-mips64el@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231"
integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==
"@esbuild/linux-ppc64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb"
integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==
"@esbuild/linux-riscv64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6"
integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==
"@esbuild/linux-s390x@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071"
integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==
"@esbuild/linux-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338"
integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==
"@esbuild/netbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1"
integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==
"@esbuild/openbsd-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae"
integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==
"@esbuild/sunos-x64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d"
integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==
"@esbuild/win32-arm64@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9"
integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==
"@esbuild/win32-ia32@0.18.20":
version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102"
integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==
"@esbuild/win32-x64@0.18.20": "@esbuild/win32-x64@0.18.20":
version "0.18.20" version "0.18.20"
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz"
@@ -1139,7 +1244,7 @@
"@nodelib/fs.stat" "2.0.5" "@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9" run-parallel "^1.1.9"
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
version "2.0.5" version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@@ -1243,16 +1348,16 @@
resolved "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.0.tgz" resolved "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.0.tgz"
integrity sha512-yhxwIlFVSVcMym3O31HoMnRXpoenmpIxcj4Yoes2DUpe+xCJnA7ECQP1Vw889V0jTt/2nzvpLQ/UuMYCd3JPIg== integrity sha512-yhxwIlFVSVcMym3O31HoMnRXpoenmpIxcj4Yoes2DUpe+xCJnA7ECQP1Vw889V0jTt/2nzvpLQ/UuMYCd3JPIg==
"@types/estree@^1.0.0":
version "1.0.1"
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz"
integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
"@types/estree@0.0.39": "@types/estree@0.0.39":
version "0.0.39" version "0.0.39"
resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
"@types/estree@^1.0.0":
version "1.0.1"
resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz"
integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
"@types/json-schema@^7.0.9": "@types/json-schema@^7.0.9":
version "7.0.12" version "7.0.12"
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz"
@@ -1263,7 +1368,7 @@
resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz" resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz"
integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==
"@types/node@*", "@types/node@^18.17.0", "@types/node@>= 14": "@types/node@*", "@types/node@^18.17.0":
version "18.17.5" version "18.17.5"
resolved "https://registry.npmjs.org/@types/node/-/node-18.17.5.tgz" resolved "https://registry.npmjs.org/@types/node/-/node-18.17.5.tgz"
integrity sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA== integrity sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==
@@ -1306,7 +1411,7 @@
semver "^7.3.7" semver "^7.3.7"
tsutils "^3.21.0" tsutils "^3.21.0"
"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.59.1": "@typescript-eslint/parser@^5.59.1":
version "5.62.0" version "5.62.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz"
integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==
@@ -1592,7 +1697,7 @@
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.1.tgz" resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.1.tgz"
integrity sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ== integrity sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==
"@volar/language-core@~2.4.11", "@volar/language-core@2.4.11": "@volar/language-core@2.4.11", "@volar/language-core@~2.4.11":
version "2.4.11" version "2.4.11"
resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz" resolved "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz"
integrity sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg== integrity sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==
@@ -1654,14 +1759,6 @@
estree-walker "^2.0.2" estree-walker "^2.0.2"
source-map-js "^1.2.0" source-map-js "^1.2.0"
"@vue/compiler-dom@^3.5.0":
version "3.5.13"
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz"
integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==
dependencies:
"@vue/compiler-core" "3.5.13"
"@vue/shared" "3.5.13"
"@vue/compiler-dom@3.3.4": "@vue/compiler-dom@3.3.4":
version "3.3.4" version "3.3.4"
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz" resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz"
@@ -1670,6 +1767,14 @@
"@vue/compiler-core" "3.3.4" "@vue/compiler-core" "3.3.4"
"@vue/shared" "3.3.4" "@vue/shared" "3.3.4"
"@vue/compiler-dom@^3.5.0":
version "3.5.13"
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz"
integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==
dependencies:
"@vue/compiler-core" "3.5.13"
"@vue/shared" "3.5.13"
"@vue/compiler-sfc@3.3.4": "@vue/compiler-sfc@3.3.4":
version "3.3.4" version "3.3.4"
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz" resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz"
@@ -1781,12 +1886,12 @@
"@vue/compiler-ssr" "3.3.4" "@vue/compiler-ssr" "3.3.4"
"@vue/shared" "3.3.4" "@vue/shared" "3.3.4"
"@vue/shared@^3.0.0", "@vue/shared@3.3.4": "@vue/shared@3.3.4", "@vue/shared@^3.0.0":
version "3.3.4" version "3.3.4"
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz" resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz"
integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ== integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
"@vue/shared@^3.5.0", "@vue/shared@3.5.13": "@vue/shared@3.5.13", "@vue/shared@^3.5.0":
version "3.5.13" version "3.5.13"
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz" resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz"
integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==
@@ -1828,7 +1933,7 @@ acorn-jsx@^5.3.2:
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.8.2, acorn@^8.9.0: acorn@^8.8.2, acorn@^8.9.0:
version "8.10.0" version "8.10.0"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz"
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
@@ -1843,7 +1948,7 @@ ajv@^6.12.4:
json-schema-traverse "^0.4.1" json-schema-traverse "^0.4.1"
uri-js "^4.2.2" uri-js "^4.2.2"
ajv@^8.6.0, ajv@>=8: ajv@^8.6.0:
version "8.12.0" version "8.12.0"
resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz"
integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
@@ -1908,7 +2013,7 @@ anymatch@~3.1.2:
normalize-path "^3.0.0" normalize-path "^3.0.0"
picomatch "^2.0.4" picomatch "^2.0.4"
apexcharts@^3.44.0, "apexcharts@> 3.0.0": apexcharts@^3.44.0:
version "3.44.0" version "3.44.0"
resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-3.44.0.tgz" resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-3.44.0.tgz"
integrity sha512-u7Xzrbcxc2yWznN78Jh5NMCYVAsWDfBjRl5ea++rVzFAqjU2hLz4RgKIFwYOBDRQtW1e/Qz8azJTqIJ1+Vu9Qg== integrity sha512-u7Xzrbcxc2yWznN78Jh5NMCYVAsWDfBjRl5ea++rVzFAqjU2hLz4RgKIFwYOBDRQtW1e/Qz8azJTqIJ1+Vu9Qg==
@@ -2063,7 +2168,7 @@ braces@^3.0.3, braces@~3.0.2:
dependencies: dependencies:
fill-range "^7.1.1" fill-range "^7.1.1"
browserslist@^4.21.9, browserslist@^4.22.1, "browserslist@>= 4.21.0": browserslist@^4.21.9, browserslist@^4.22.1:
version "4.22.1" version "4.22.1"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz"
integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
@@ -2127,7 +2232,7 @@ chalk@^2.4.1:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^5.3.0" supports-color "^5.3.0"
chalk@^4.0.0: chalk@^4.0.0, chalk@^4.0.2:
version "4.1.2" version "4.1.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -2135,15 +2240,7 @@ chalk@^4.0.0:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
chalk@^4.0.2: "chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
version "4.1.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0":
version "3.5.3" version "3.5.3"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -2172,16 +2269,16 @@ color-convert@^2.0.1:
dependencies: dependencies:
color-name "~1.1.4" color-name "~1.1.4"
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-name@1.1.3: color-name@1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
colorette@^2.0.20: colorette@^2.0.20:
version "2.0.20" version "2.0.20"
resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz"
@@ -2569,7 +2666,7 @@ eslint-plugin-prettier@^5.0.0:
prettier-linter-helpers "^1.0.0" prettier-linter-helpers "^1.0.0"
synckit "^0.8.5" synckit "^0.8.5"
eslint-plugin-vue@^9.0.0, eslint-plugin-vue@^9.15.1: eslint-plugin-vue@^9.15.1:
version "9.17.0" version "9.17.0"
resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz" resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz"
integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ== integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==
@@ -2590,15 +2687,7 @@ eslint-scope@^5.1.1:
esrecurse "^4.3.0" esrecurse "^4.3.0"
estraverse "^4.1.1" estraverse "^4.1.1"
eslint-scope@^7.1.1: eslint-scope@^7.1.1, eslint-scope@^7.2.2:
version "7.2.2"
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
dependencies:
esrecurse "^4.3.0"
estraverse "^5.2.0"
eslint-scope@^7.2.2:
version "7.2.2" version "7.2.2"
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
@@ -2611,7 +2700,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" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
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: eslint@^8.45.0:
version "8.47.0" version "8.47.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz" resolved "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz"
integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q== integrity sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==
@@ -2682,12 +2771,7 @@ estraverse@^4.1.1:
resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
estraverse@^5.1.0: estraverse@^5.1.0, estraverse@^5.2.0:
version "5.3.0"
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
estraverse@^5.2.0:
version "5.3.0" version "5.3.0"
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
@@ -2712,22 +2796,7 @@ eventemitter3@^5.0.1:
resolved "https://mirror-npm.runflare.com/eventemitter3/-/eventemitter3-5.0.4.tgz" resolved "https://mirror-npm.runflare.com/eventemitter3/-/eventemitter3-5.0.4.tgz"
integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==
execa@^5.0.0: execa@^5.0.0, execa@^5.1.1:
version "5.1.1"
resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
dependencies:
cross-spawn "^7.0.3"
get-stream "^6.0.0"
human-signals "^2.1.0"
is-stream "^2.0.0"
merge-stream "^2.0.0"
npm-run-path "^4.0.1"
onetime "^5.1.2"
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
execa@^5.1.1:
version "5.1.1" version "5.1.1"
resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
@@ -2873,6 +2942,11 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.1: function-bind@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
@@ -2926,7 +3000,7 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2" call-bind "^1.0.2"
get-intrinsic "^1.1.1" get-intrinsic "^1.1.1"
glob-parent@^5.1.2: glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2" version "5.1.2"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -2940,13 +3014,6 @@ glob-parent@^6.0.2:
dependencies: dependencies:
is-glob "^4.0.3" is-glob "^4.0.3"
glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
glob@^7.1.3, glob@^7.1.6: glob@^7.1.3, glob@^7.1.6:
version "7.2.3" version "7.2.3"
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
@@ -3458,7 +3525,7 @@ kolorist@^1.8.0:
resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz" resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz"
integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==
less@*, less@^4.2.0: less@^4.2.0:
version "4.2.0" version "4.2.0"
resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz" resolved "https://registry.npmjs.org/less/-/less-4.2.0.tgz"
integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA== integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==
@@ -3566,14 +3633,7 @@ lru-cache@^6.0.0:
dependencies: dependencies:
yallist "^4.0.0" yallist "^4.0.0"
magic-string@^0.25.0: magic-string@^0.25.0, magic-string@^0.25.7:
version "0.25.9"
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz"
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
dependencies:
sourcemap-codec "^1.4.8"
magic-string@^0.25.7:
version "0.25.9" version "0.25.9"
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz"
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
@@ -3715,7 +3775,7 @@ mrmime@^1.0.0:
resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz" resolved "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz"
integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==
ms@^2.1.1, ms@2.1.2: ms@2.1.2, ms@^2.1.1:
version "2.1.2" version "2.1.2"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
@@ -3840,7 +3900,7 @@ object.assign@^4.1.4:
has-symbols "^1.0.3" has-symbols "^1.0.3"
object-keys "^1.1.1" object-keys "^1.1.1"
odometer@^0.4.8, odometer@latest: odometer@^0.4.8:
version "0.4.8" version "0.4.8"
resolved "https://registry.npmjs.org/odometer/-/odometer-0.4.8.tgz" resolved "https://registry.npmjs.org/odometer/-/odometer-0.4.8.tgz"
integrity sha512-bfKuAhWE/qMCiX9bwX90c5bTpt7MDVeq1e6YsOHQrYokNhv9jhS5JbR9kg6i+FeWmDgalf3VUtwNx1aVaZ8cgg== integrity sha512-bfKuAhWE/qMCiX9bwX90c5bTpt7MDVeq1e6YsOHQrYokNhv9jhS5JbR9kg6i+FeWmDgalf3VUtwNx1aVaZ8cgg==
@@ -4064,7 +4124,7 @@ prettier-linter-helpers@^1.0.0:
dependencies: dependencies:
fast-diff "^1.1.2" 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" version "3.0.2"
resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz" resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz"
integrity sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ== integrity sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==
@@ -4234,14 +4294,14 @@ rollup-plugin-terser@^7.0.0:
serialize-javascript "^4.0.0" serialize-javascript "^4.0.0"
terser "^5.0.0" terser "^5.0.0"
"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1: rollup@^2.43.1:
version "2.79.2" version "2.79.2"
resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz" resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz"
integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ== integrity sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==
optionalDependencies: optionalDependencies:
fsevents "~2.3.2" fsevents "~2.3.2"
rollup@^1.20.0||^2.0.0||^3.0.0, rollup@^3.27.1: rollup@^3.27.1:
version "3.29.5" version "3.29.5"
resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz" resolved "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz"
integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w== integrity sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==
@@ -4291,7 +4351,7 @@ safe-regex-test@^1.0.0:
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sass@*, sass@^1.69.4: sass@^1.69.4:
version "1.69.5" version "1.69.5"
resolved "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz" resolved "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz"
integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==
@@ -4312,12 +4372,7 @@ scroll-into-view-if-needed@^2.2.25:
dependencies: dependencies:
compute-scroll-into-view "^1.0.20" compute-scroll-into-view "^1.0.20"
semver@^5.5.0: "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
version "5.7.2"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
semver@^5.6.0:
version "5.7.2" version "5.7.2"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
@@ -4327,32 +4382,13 @@ semver@^6.3.1:
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.3.6: semver@^7.3.6, semver@^7.3.7, semver@^7.5.4:
version "7.5.4" version "7.5.4"
resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies: dependencies:
lru-cache "^6.0.0" lru-cache "^6.0.0"
semver@^7.3.7:
version "7.5.4"
resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
semver@^7.5.4:
version "7.5.4"
resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
"semver@2 || 3 || 4 || 5":
version "5.7.2"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
serialize-javascript@^4.0.0: serialize-javascript@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz"
@@ -4431,7 +4467,7 @@ slash@^3.0.0:
resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1, "source-map-js@>=0.6.2 <2.0.0": "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2, source-map-js@^1.2.0, source-map-js@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -4586,14 +4622,7 @@ supports-color@^5.3.0:
dependencies: dependencies:
has-flag "^3.0.0" has-flag "^3.0.0"
supports-color@^7.0.0: supports-color@^7.0.0, supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
dependencies:
has-flag "^4.0.0"
supports-color@^7.1.0:
version "7.2.0" version "7.2.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
@@ -4631,7 +4660,7 @@ svg.filter.js@^2.0.2:
dependencies: dependencies:
svg.js "^2.2.5" svg.js "^2.2.5"
svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5, svg.js@>=2.3.x: svg.js@>=2.3.x, svg.js@^2.0.1, svg.js@^2.2.5, svg.js@^2.4.0, svg.js@^2.6.5:
version "2.7.1" version "2.7.1"
resolved "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz" resolved "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz"
integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA== integrity sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==
@@ -4693,7 +4722,7 @@ tempy@^0.6.0:
type-fest "^0.16.0" type-fest "^0.16.0"
unique-string "^2.0.0" unique-string "^2.0.0"
terser@^5.0.0, terser@^5.4.0: terser@^5.0.0:
version "5.24.0" version "5.24.0"
resolved "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz" resolved "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz"
integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==
@@ -4732,6 +4761,11 @@ tr46@^1.0.1:
dependencies: dependencies:
punycode "^2.1.0" punycode "^2.1.0"
tslib@2.3.0:
version "2.3.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
tslib@^1.8.1: tslib@^1.8.1:
version "1.14.1" version "1.14.1"
resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
@@ -4742,11 +4776,6 @@ tslib@^2.3.0, tslib@^2.5.0, tslib@^2.6.0:
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz"
integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
tslib@2.3.0:
version "2.3.0"
resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
tsutils@^3.21.0: tsutils@^3.21.0:
version "3.21.0" version "3.21.0"
resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
@@ -4810,7 +4839,7 @@ typed-array-length@^1.0.4:
for-each "^0.3.3" for-each "^0.3.3"
is-typed-array "^1.1.9" is-typed-array "^1.1.9"
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: typescript@~5.1.6:
version "5.1.6" version "5.1.6"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz" resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz"
integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
@@ -4985,7 +5014,7 @@ vite-plugin-pwa@^0.16.7:
workbox-build "^7.0.0" workbox-build "^7.0.0"
workbox-window "^7.0.0" workbox-window "^7.0.0"
"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: vite@^4.4.6:
version "4.5.14" version "4.5.14"
resolved "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz" resolved "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz"
integrity sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g== integrity sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==
@@ -5006,11 +5035,6 @@ vue-content-loader@^2.0.1:
resolved "https://registry.npmjs.org/vue-content-loader/-/vue-content-loader-2.0.1.tgz" resolved "https://registry.npmjs.org/vue-content-loader/-/vue-content-loader-2.0.1.tgz"
integrity sha512-pkof4+q2xmzNEdhqelxtJejeP/vQUJtLle4/v2ueG+HURqM9Q/GIGC8GJ2bVVWeLfTDET51jqimwQdmxJTlu0g== integrity sha512-pkof4+q2xmzNEdhqelxtJejeP/vQUJtLle4/v2ueG+HURqM9Q/GIGC8GJ2bVVWeLfTDET51jqimwQdmxJTlu0g==
vue-demi@^0.12.5:
version "0.12.5"
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz"
integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==
vue-demi@>=0.14.5: vue-demi@>=0.14.5:
version "0.14.5" version "0.14.5"
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz" resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz"
@@ -5021,6 +5045,11 @@ vue-demi@>=0.14.6:
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz" resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz"
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
vue-demi@^0.12.5:
version "0.12.5"
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.12.5.tgz"
integrity sha512-BREuTgTYlUr0zw0EZn3hnhC3I6gPWv+Kwh4MCih6QcAeaTlaIX0DwOVN0wHej7hSvDPecz4jygy/idsgKfW58Q==
vue-eslint-parser@^9.1.1, vue-eslint-parser@^9.3.1: vue-eslint-parser@^9.1.1, vue-eslint-parser@^9.3.1:
version "9.3.1" version "9.3.1"
resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz" resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz"
@@ -5068,17 +5097,6 @@ vue-types@^3.0.0:
dependencies: dependencies:
is-plain-object "3.0.1" is-plain-object "3.0.1"
"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==
dependencies:
"@vue/compiler-dom" "3.3.4"
"@vue/compiler-sfc" "3.3.4"
"@vue/runtime-dom" "3.3.4"
"@vue/server-renderer" "3.3.4"
"@vue/shared" "3.3.4"
vue3-apexcharts@^1.4.4: vue3-apexcharts@^1.4.4:
version "1.4.4" version "1.4.4"
resolved "https://registry.npmjs.org/vue3-apexcharts/-/vue3-apexcharts-1.4.4.tgz" resolved "https://registry.npmjs.org/vue3-apexcharts/-/vue3-apexcharts-1.4.4.tgz"
@@ -5104,6 +5122,17 @@ vue3-otp-input@^0.4.1:
resolved "https://registry.npmjs.org/vue3-otp-input/-/vue3-otp-input-0.4.1.tgz" resolved "https://registry.npmjs.org/vue3-otp-input/-/vue3-otp-input-0.4.1.tgz"
integrity sha512-wVl9i3DcWlO0C7fBI9V+RIP3crm/1tY72fuhvb3YM2JfbLoYofB96aPl5AgFhA0Cse5bQEMYtIvOeiqW3rfbAw== integrity sha512-wVl9i3DcWlO0C7fBI9V+RIP3crm/1tY72fuhvb3YM2JfbLoYofB96aPl5AgFhA0Cse5bQEMYtIvOeiqW3rfbAw==
vue@^3.2.25, vue@^3.3.4:
version "3.3.4"
resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz"
integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
dependencies:
"@vue/compiler-dom" "3.3.4"
"@vue/compiler-sfc" "3.3.4"
"@vue/runtime-dom" "3.3.4"
"@vue/server-renderer" "3.3.4"
"@vue/shared" "3.3.4"
warning@^4.0.0: warning@^4.0.0:
version "4.0.3" version "4.0.3"
resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz"
@@ -5321,7 +5350,7 @@ workbox-sw@7.0.0:
resolved "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz" resolved "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz"
integrity sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA== integrity sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==
workbox-window@^7.0.0, workbox-window@7.0.0: workbox-window@7.0.0, workbox-window@^7.0.0:
version "7.0.0" version "7.0.0"
resolved "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz" resolved "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz"
integrity sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA== integrity sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==