diff --git a/src/pages/KhanegiModularUiConfigPage.vue b/src/pages/KhanegiModularUiConfigPage.vue new file mode 100644 index 0000000..3a0c2ed --- /dev/null +++ b/src/pages/KhanegiModularUiConfigPage.vue @@ -0,0 +1,371 @@ + + + + + diff --git a/src/pages/ProductVersionsPage.vue b/src/pages/ProductVersionsPage.vue index a2eea62..9a049dc 100644 --- a/src/pages/ProductVersionsPage.vue +++ b/src/pages/ProductVersionsPage.vue @@ -18,6 +18,7 @@ type Tenant = { nodeServer: string notes?: string | null hasAppUiConfig?: boolean + uiVariant?: 'modular' | 'newTheme' } const route = useRoute() @@ -144,6 +145,9 @@ onMounted(load) بررسی محصول ظاهر اپ + + {{ item.uiVariant === 'newTheme' ? 'New theme' : 'Modular' }} + @@ -157,7 +161,12 @@ onMounted(load) style="flex: 1" @click=" router.push({ - name: product === 'hamkar' ? 'version-ui-hamkar' : 'version-ui', + name: + product === 'hamkar' + ? 'version-ui-hamkar' + : item.uiVariant === 'newTheme' + ? 'version-ui' + : 'version-ui-modular', params: { id: item.id }, }) " diff --git a/src/pages/TenantFormPage.vue b/src/pages/TenantFormPage.vue index cee66d8..8658d89 100644 --- a/src/pages/TenantFormPage.vue +++ b/src/pages/TenantFormPage.vue @@ -21,6 +21,7 @@ const form = reactive({ domain: '', avatarUrl: '', appVersion: '1', + uiVariant: 'modular' as 'modular' | 'newTheme', nodeServer: '', nodeWs: '', appUrl: '', @@ -57,6 +58,7 @@ async function load() { domain: data.domain, avatarUrl: data.avatarUrl || '', appVersion: data.appVersion || '1', + uiVariant: data.uiVariant === 'newTheme' ? 'newTheme' : 'modular', nodeServer: data.nodeServer, nodeWs: data.nodeWs || '', appUrl: data.appUrl || '', @@ -142,7 +144,12 @@ onMounted(load) v-if="isEdit && form.product === 'khanegi'" type="primary" ghost - @click="router.push({ name: 'version-ui', params: { id: route.params.id } })" + @click=" + router.push({ + name: form.uiVariant === 'newTheme' ? 'version-ui' : 'version-ui-modular', + params: { id: route.params.id }, + }) + " > ظاهر اپ @@ -175,7 +182,10 @@ onMounted(load)

لوگو

از طریق /get_user به‌عنوان avatar به نسخه‌ها فرستاده می‌شود. - +

diff --git a/src/pages/UiConfigPage.vue b/src/pages/UiConfigPage.vue index 13171d9..7be76b6 100644 --- a/src/pages/UiConfigPage.vue +++ b/src/pages/UiConfigPage.vue @@ -23,8 +23,10 @@ const router = useRouter() const loading = ref(true) const saving = ref(false) const resetting = ref(false) +const switching = ref(false) const tenantName = ref('') const product = ref<'hamkar' | 'khanegi'>('khanegi') +const uiVariant = ref<'modular' | 'newTheme'>('newTheme') const activeTab = ref('theme') const advancedJson = ref('') const jsonError = ref('') @@ -158,6 +160,14 @@ async function load() { router.replace({ name: 'version-edit', params: { id: String(route.params.id) } }) return } + + const variant = data.uiVariant === 'newTheme' ? 'newTheme' : 'modular' + uiVariant.value = variant + if (variant === 'modular') { + router.replace({ name: 'version-ui-modular', params: { id: String(route.params.id) } }) + return + } + const hadSnapshot = Boolean(data.appUiConfig?.defaultSnapshot) if (data.appUiConfig && typeof data.appUiConfig === 'object') { Object.assign(config, createDefaultKhanegiUiConfig(), data.appUiConfig) @@ -204,6 +214,7 @@ async function persistConfig() { const colors = payload.app.theme.colors await api.patch(`/tenants/${route.params.id}`, { appUiConfig: payload, + uiVariant: 'newTheme', primaryColor: colors.primary, secondaryColor: colors.secondary, backgroundColor: colors.background, @@ -214,6 +225,26 @@ async function persistConfig() { syncAdvancedJson() } +async function switchToModular() { + switching.value = true + try { + const colors = config.app.theme.colors + await api.patch(`/tenants/${route.params.id}`, { + uiVariant: 'modular', + primaryColor: colors.primary, + secondaryColor: colors.secondary, + backgroundColor: colors.background, + }) + message.success('حالت ظاهر به ماژولار تغییر کرد') + router.replace({ name: 'version-ui-modular', params: { id: String(route.params.id) } }) + } catch (e: any) { + const msg = e?.response?.data?.message + message.error(Array.isArray(msg) ? msg.join('، ') : msg || 'تغییر حالت ناموفق') + } finally { + switching.value = false + } +} + async function save() { saving.value = true try { @@ -277,10 +308,22 @@ onMounted(load)
-

ظاهر اپ خانگی

+

ظاهر اپ خانگی — تم جدید

{{ tenantName }} · ۳ تم آماده + سفارشی

- ذخیره ظاهر + + + ذخیره ظاهر +
diff --git a/src/router/index.ts b/src/router/index.ts index 6bf483a..b85c576 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -84,6 +84,11 @@ const router = createRouter({ name: 'version-ui', component: () => import('@/pages/UiConfigPage.vue'), }, + { + path: 'versions/:id/ui-modular', + name: 'version-ui-modular', + component: () => import('@/pages/KhanegiModularUiConfigPage.vue'), + }, { path: 'versions/:id/ui-hamkar', name: 'version-ui-hamkar',