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
+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 type { User } from '@/models/login'
import { useWalletStore } from '@/store/walletStore'
import { useSettingsStore } from '@/store/settingsStore'
import { setFingerPrint } from '@/utils'
import type { PWallet } from '@/models/wallet'
@@ -17,6 +18,7 @@ export const useUserStore = defineStore('user', () => {
async function getMyInfo() {
try {
userInfo.value = await getMe()
useSettingsStore().mergeSettings(userInfo.value.settings)
setFingerPrint(userInfo.value.finger_print.toString())
productWallet.value = userInfo.value.pwallet
// return userInfo.value