setting pushed

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-24 10:23:33 +03:30
co-authored by Cursor
parent 6123a7327b
commit 349031d3bc
+59 -2
View File
@@ -1,7 +1,7 @@
<script setup lang="ts">
import { computed, onMounted, reactive, ref, watch, type Component } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { message } from 'ant-design-vue'
import { message, Modal } from 'ant-design-vue'
import {
AccountBookOutlined,
ArrowRightOutlined,
@@ -9,6 +9,7 @@ import {
CalculatorOutlined,
ClusterOutlined,
CreditCardOutlined,
DeleteOutlined,
DollarOutlined,
EllipsisOutlined,
FileTextOutlined,
@@ -60,6 +61,7 @@ const auth = useAuthStore()
const canWrite = computed(() => auth.can('khanegi:write'))
const loading = ref(true)
const importing = ref(false)
const purging = ref(false)
const search = ref('')
const filterType = ref<string | undefined>()
const tenant = ref<TenantMeta | null>(null)
@@ -399,6 +401,47 @@ async function applyImport() {
}
}
/**
* بعد از restore لوکال روی سرور همان پروژه: بقیهٔ کلیدها (غیر دسترسی مشتری)
* را از جدول settings همین tenant در سوپرادمین حذف می‌کند.
*/
function confirmPurgeNonOwned() {
if (!canWrite.value) {
message.warning('دسترسی نوشتن ندارید')
return
}
Modal.confirm({
title: 'حذف تنظیمات غیر دسترسی مشتری؟',
content:
'فقط ۱۳ کلید «دسترسی مشتری به قابلیت‌ها» روی این پروژه در سوپرادمین می‌ماند. ' +
'بقیه از جدول settings همین پروژه در سوپرادمین پاک می‌شود. ' +
'قبل از این کار باید روی سرور همان نصب، settings:restore-from-backup را اجرا کرده باشی.',
okText: 'حذف کن',
okType: 'danger',
cancelText: 'انصراف',
onOk: () => purgeNonOwned(),
})
}
async function purgeNonOwned() {
purging.value = true
try {
const { data } = await api.post(`/tenants/${route.params.id}/program-settings/purge-non-owned`)
tenant.value = data.tenant
applyItems(Array.isArray(data.items) ? data.items : [])
const removed = Number(data.removed || 0)
message.success(
removed > 0
? `${removed} کلید غیر دسترسی از این پروژه حذف شد.`
: 'چیزی برای حذف نبود؛ همین حالا فقط کلیدهای دسترسی مشتری روی این پروژه است.',
)
} catch (e: any) {
message.error(errText(e) || 'حذف ناموفق بود')
} finally {
purging.value = false
}
}
const defaultOpenGroupId = computed(() => {
const visibleIds = visibleSettingGroups.value.map((g) => g.id)
const preferred = ['customer_features', 'chart', 'pricing', 'payping', 'store', 'general']
@@ -433,7 +476,7 @@ onMounted(load)
<p class="page-sub">
{{ tenant?.nameFa || 'نسخه خانگی' }}
<template v-if="tenant?.domain"> · {{ tenant.domain }}</template>
· کنترل کامل از سوپرادمین (جایگزین تنظیمات پیشرفته ادمین خانگی)
· فقط کلیدهای «دسترسی مشتری به قابلیت‌ها»؛ بقیه مالک دیتابیس هر نصب است
</p>
</div>
<div class="head-aside">
@@ -449,6 +492,20 @@ onMounted(load)
</div>
</div>
<section v-if="canWrite" class="form-section purge-section">
<h3>مهاجرت مالکیت به دیتابیس نصب</h3>
<p class="field-hint">
ترتیب: ۱) روی سرور همان پروژه
<code dir="ltr">php artisan settings:restore-from-backup --fill-from-superadmin</code>
۲) همین دکمه را بزن تا همهٔ کلیدها غیر از «دسترسی مشتری به قابلیت‌ها»
از جدول settings این پروژه در سوپرادمین حذف شوند.
</p>
<a-button danger type="primary" html-type="button" size="large" :loading="purging" @click="confirmPurgeNonOwned">
<DeleteOutlined />
حذف تنظیمات غیر دسترسی از این پروژه
</a-button>
</section>
<section class="form-section">
<h3>انتقال از اپ خانگی</h3>
<p class="field-hint">