big refactor
This commit is contained in:
@@ -1,26 +1,60 @@
|
||||
<script setup lang="ts">
|
||||
import { MAX_LOGO_FILE_BYTES } from '~/types/branding'
|
||||
import type { BrokerageBrandingState } from '~/types/branding'
|
||||
|
||||
definePageMeta({ ssr: false })
|
||||
|
||||
usePageTitle('Organization · Settings')
|
||||
|
||||
const { isSuperAdmin } = useSuperAdmin()
|
||||
const toast = useToast()
|
||||
const { saved, defaultBrokerageBranding } = useBrokerageBranding()
|
||||
const draft = ref<BrokerageBrandingState>(defaultBrokerageBranding())
|
||||
|
||||
const MAX_LOGO_FILE_BYTES = 512 * 1024
|
||||
|
||||
interface BrokerageBrandingState {
|
||||
companyName: string
|
||||
logoDataUrl: string | null
|
||||
logoFileName: string
|
||||
reportPageHeader: string
|
||||
reportPageFooter: string
|
||||
}
|
||||
|
||||
const isSuperAdmin = computed(() => {
|
||||
if (import.meta.client) {
|
||||
const stored = localStorage.getItem('policy-ui.superadmin')
|
||||
return stored !== '0'
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
const STORAGE_KEY = 'policy-ui.branding'
|
||||
|
||||
function loadBranding(): BrokerageBrandingState {
|
||||
if (import.meta.client) {
|
||||
const stored = localStorage.getItem(STORAGE_KEY)
|
||||
if (stored) {
|
||||
try {
|
||||
return JSON.parse(stored)
|
||||
} catch {
|
||||
return defaultBranding()
|
||||
}
|
||||
}
|
||||
}
|
||||
return defaultBranding()
|
||||
}
|
||||
|
||||
function defaultBranding(): BrokerageBrandingState {
|
||||
return {
|
||||
companyName: '',
|
||||
logoDataUrl: null,
|
||||
logoFileName: '',
|
||||
reportPageHeader: '',
|
||||
reportPageFooter: ''
|
||||
}
|
||||
}
|
||||
|
||||
const saved = ref<BrokerageBrandingState>(loadBranding())
|
||||
const draft = ref<BrokerageBrandingState>({ ...saved.value })
|
||||
const fileInputRef = ref<HTMLInputElement | null>(null)
|
||||
|
||||
function syncDraftFromSaved() {
|
||||
const s = saved.value
|
||||
draft.value = {
|
||||
companyName: s.companyName,
|
||||
logoDataUrl: s.logoDataUrl,
|
||||
logoFileName: s.logoFileName,
|
||||
reportPageHeader: s.reportPageHeader,
|
||||
reportPageFooter: s.reportPageFooter
|
||||
}
|
||||
draft.value = { ...saved.value }
|
||||
}
|
||||
|
||||
onMounted(() => syncDraftFromSaved())
|
||||
@@ -65,6 +99,9 @@ function clearLogo() {
|
||||
|
||||
function save() {
|
||||
saved.value = { ...draft.value }
|
||||
if (import.meta.client) {
|
||||
localStorage.setItem(STORAGE_KEY, JSON.stringify(saved.value))
|
||||
}
|
||||
toast.add({
|
||||
title: 'Organization saved',
|
||||
description: 'Sidebar and home use this brokerage identity for all users.',
|
||||
|
||||
Reference in New Issue
Block a user