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 @@
+
+
+
+
+
+
+
+
+
+
ظاهر اپ خانگی — ماژولار
+
+ {{ tenantName || 'نسخه' }}
+ · {{ domain }}
+
+
+
+ v === 'newTheme' && switchToNewTheme()"
+ />
+ ذخیره
+
+
+
+
+
+ لوگو را از صفحه مدیریت نسخه تغییر دهید. اینجا فقط سه رنگ اصلی مثل همکار تنظیم میشود.
+
+
+
+
+
+
+
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 به نسخهها فرستاده میشود.
- رنگ و تم از صفحه «ظاهر اپ» تنظیم میشود.
+
+ رنگ و تم از صفحه «ظاهر اپ» تنظیم میشود
+ ({{ form.uiVariant === 'newTheme' ? 'New theme' : 'Modular' }}).
+
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 }} · ۳ تم آماده + سفارشی
-
ذخیره ظاهر
+
+ v === 'modular' && switchToModular()"
+ />
+ ذخیره ظاهر
+