Trim third party sync settings
This commit is contained in:
@@ -37,9 +37,7 @@ const businessModules = import.meta.glob([
|
||||
'./langs/zh-CN/application.json',
|
||||
'./langs/zh-CN/chat.json',
|
||||
'./langs/zh-CN/dept.json',
|
||||
'./langs/zh-CN/dingtalk-sync.json',
|
||||
'./langs/zh-CN/dict.json',
|
||||
'./langs/zh-CN/feishu-sync.json',
|
||||
'./langs/zh-CN/file-manager.json',
|
||||
'./langs/zh-CN/loginLog.json',
|
||||
'./langs/zh-CN/menu.json',
|
||||
@@ -54,7 +52,6 @@ const businessModules = import.meta.glob([
|
||||
'./langs/zh-CN/ui-config.json',
|
||||
'./langs/zh-CN/user-avatar.json',
|
||||
'./langs/zh-CN/user.json',
|
||||
'./langs/zh-CN/wecom-sync.json',
|
||||
]);
|
||||
|
||||
const baseLocalesMap = loadLocalesMapFromDir(
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
"ssoConfig": "SSO配置",
|
||||
"notifyConfig": "通知配置",
|
||||
"modelConfig": "模型配置",
|
||||
"syncConfig": "同步配置",
|
||||
"save": "保存",
|
||||
"reset": "恢复默认",
|
||||
"resetConfirm": "确定要恢复该分组为默认配置吗?这将删除数据库中的自定义配置,恢复为环境变量的默认值。",
|
||||
@@ -29,10 +28,7 @@
|
||||
"notify_feishu": "飞书通知",
|
||||
"notify_wecom": "企业微信通知",
|
||||
"notify_sms": "短信通知",
|
||||
"notify_wechat_mp": "微信公众号",
|
||||
"sync_dingtalk": "钉钉",
|
||||
"sync_wecom": "企业微信",
|
||||
"sync_feishu": "飞书"
|
||||
"notify_wechat_mp": "微信公众号"
|
||||
},
|
||||
"fields": {
|
||||
"client_id": "Client ID",
|
||||
|
||||
@@ -8,9 +8,7 @@ import { Page } from '@vben/common-ui';
|
||||
import {
|
||||
BellRing,
|
||||
Bot,
|
||||
CircleHelp,
|
||||
IconifyIcon,
|
||||
RefreshCw,
|
||||
Shield,
|
||||
} from '@vben/icons';
|
||||
import { $t } from '@vben/locales';
|
||||
@@ -28,14 +26,10 @@ import {
|
||||
getAllConfigsApi,
|
||||
} from '#/api/core/system-config';
|
||||
import { CardList } from '#/components/card-list';
|
||||
import { ZqDialog } from '#/components/zq-dialog';
|
||||
import { ZqTabs } from '#/components/zq-tabs';
|
||||
|
||||
import ConfigForm from './modules/config-form.vue';
|
||||
import DingtalkSyncForm from './modules/dingtalk-sync-form.vue';
|
||||
import ModelConfigForm from './modules/model-config-form.vue';
|
||||
import FeishuSyncForm from './modules/feishu-sync-form.vue';
|
||||
import WecomSyncForm from './modules/wecom-sync-form.vue';
|
||||
|
||||
defineOptions({ name: 'SystemConfigManager' });
|
||||
|
||||
@@ -44,7 +38,7 @@ interface ConfigMenuItem extends CardListItem {
|
||||
name: string;
|
||||
group: string;
|
||||
icon: string;
|
||||
category: 'notify' | 'oauth' | 'sync';
|
||||
category: 'notify' | 'oauth';
|
||||
}
|
||||
|
||||
const SSO_GROUPS = [
|
||||
@@ -68,12 +62,6 @@ const NOTIFY_GROUPS = [
|
||||
'notify_wechat_mp',
|
||||
];
|
||||
|
||||
const SYNC_GROUPS = [
|
||||
'sync_dingtalk',
|
||||
'sync_wecom',
|
||||
'sync_feishu',
|
||||
];
|
||||
|
||||
const GROUP_ICONS: Record<string, string> = {
|
||||
oauth_gitee: 'simple-icons:gitee',
|
||||
oauth_github: 'simple-icons:github',
|
||||
@@ -90,9 +78,6 @@ const GROUP_ICONS: Record<string, string> = {
|
||||
notify_feishu: 'simple-icons:bytedance',
|
||||
notify_wecom: 'simple-icons:wechat',
|
||||
notify_wechat_mp: 'simple-icons:wechat',
|
||||
sync_dingtalk: 'ri:dingding-line',
|
||||
sync_wecom: 'simple-icons:wechat',
|
||||
sync_feishu: 'simple-icons:bytedance',
|
||||
};
|
||||
|
||||
const activeTab = ref<string>('oauth');
|
||||
@@ -101,11 +86,6 @@ const selectedMenuId = ref<string>('oauth_gitee');
|
||||
const loading = ref(false);
|
||||
const saving = ref(false);
|
||||
const configFormRef = ref<InstanceType<typeof ConfigForm>>();
|
||||
const syncFormRef = ref<InstanceType<typeof DingtalkSyncForm>>();
|
||||
const wecomSyncFormRef = ref<InstanceType<typeof WecomSyncForm>>();
|
||||
const feishuSyncFormRef = ref<InstanceType<typeof FeishuSyncForm>>();
|
||||
const syncSaving = ref(false);
|
||||
const showGuideDialog = ref(false);
|
||||
|
||||
const menuItems = computed<ConfigMenuItem[]>(() => {
|
||||
const items: ConfigMenuItem[] = [];
|
||||
@@ -130,16 +110,6 @@ const menuItems = computed<ConfigMenuItem[]>(() => {
|
||||
});
|
||||
}
|
||||
|
||||
for (const group of SYNC_GROUPS) {
|
||||
items.push({
|
||||
id: group,
|
||||
name: $t(`system-config.groups.${group}`),
|
||||
group,
|
||||
icon: GROUP_ICONS[group] || 'mdi:sync',
|
||||
category: 'sync',
|
||||
});
|
||||
}
|
||||
|
||||
return items;
|
||||
});
|
||||
|
||||
@@ -157,7 +127,6 @@ const tabItems = computed<ZqTabItem[]>(() => [
|
||||
{ key: 'oauth', label: $t('system-config.ssoConfig'), icon: Shield },
|
||||
{ key: 'notify', label: $t('system-config.notifyConfig'), icon: BellRing },
|
||||
{ key: 'model', label: $t('system-config.modelConfig'), icon: Bot },
|
||||
{ key: 'sync', label: $t('system-config.syncConfig'), icon: RefreshCw },
|
||||
]);
|
||||
|
||||
const cardListOptions: CardListOptions<ConfigMenuItem> = {
|
||||
@@ -219,21 +188,6 @@ function handleSaved() {
|
||||
loadAllConfigs();
|
||||
}
|
||||
|
||||
async function handleSyncSave() {
|
||||
syncSaving.value = true;
|
||||
try {
|
||||
if (selectedMenuId.value === 'sync_wecom') {
|
||||
await wecomSyncFormRef.value?.save();
|
||||
} else if (selectedMenuId.value === 'sync_feishu') {
|
||||
await feishuSyncFormRef.value?.save();
|
||||
} else {
|
||||
await syncFormRef.value?.save();
|
||||
}
|
||||
} finally {
|
||||
syncSaving.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadAllConfigs();
|
||||
});
|
||||
@@ -278,136 +232,43 @@ onMounted(() => {
|
||||
|
||||
<!-- 右侧内容 -->
|
||||
<div class="flex-1 overflow-hidden">
|
||||
<!-- 同步配置 -->
|
||||
<template v-if="activeTab === 'sync'">
|
||||
<ElCard
|
||||
shadow="never"
|
||||
class="config-card flex h-full flex-col !border-none"
|
||||
>
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<IconifyIcon
|
||||
:icon="selectedItem?.icon || ''"
|
||||
class="mr-2 size-5 opacity-60"
|
||||
/>
|
||||
<span>{{ selectedItem?.name }}</span>
|
||||
<div class="ml-auto flex items-center gap-2">
|
||||
<CircleHelp
|
||||
class="size-5 cursor-pointer opacity-50 transition-opacity hover:opacity-100"
|
||||
@click="showGuideDialog = true"
|
||||
/>
|
||||
<ElButton
|
||||
type="primary"
|
||||
:loading="syncSaving"
|
||||
@click="handleSyncSave"
|
||||
>
|
||||
{{ $t('system-config.save') }}
|
||||
</ElButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<DingtalkSyncForm
|
||||
v-if="selectedMenuId === 'sync_dingtalk'"
|
||||
ref="syncFormRef"
|
||||
/>
|
||||
<WecomSyncForm
|
||||
v-else-if="selectedMenuId === 'sync_wecom'"
|
||||
ref="wecomSyncFormRef"
|
||||
/>
|
||||
<FeishuSyncForm
|
||||
v-else-if="selectedMenuId === 'sync_feishu'"
|
||||
ref="feishuSyncFormRef"
|
||||
/>
|
||||
</ElCard>
|
||||
|
||||
<!-- 配置步骤弹窗 -->
|
||||
<ZqDialog
|
||||
v-model="showGuideDialog"
|
||||
:title="selectedMenuId === 'sync_wecom' ? $t('wecom-sync.guideTitle') : selectedMenuId === 'sync_feishu' ? $t('feishu-sync.guideTitle') : $t('dingtalk-sync.guideTitle')"
|
||||
width="680px"
|
||||
:show-footer="false"
|
||||
max-height="70vh"
|
||||
>
|
||||
<div class="space-y-5 px-2 py-1">
|
||||
<div
|
||||
v-for="(step, idx) in (selectedMenuId === 'sync_wecom' ? 5 : selectedMenuId === 'sync_feishu' ? 5 : 6)"
|
||||
:key="`${selectedMenuId}-${idx}`"
|
||||
class="flex gap-3"
|
||||
>
|
||||
<div
|
||||
class="flex size-7 flex-shrink-0 items-center justify-center rounded-full text-sm font-semibold text-white"
|
||||
style="background-color: var(--el-color-primary)"
|
||||
<!-- SSO/通知配置:通用表单 -->
|
||||
<ElCard
|
||||
shadow="never"
|
||||
class="config-card flex h-full flex-col !border-none"
|
||||
>
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<IconifyIcon
|
||||
:icon="selectedItem?.icon || ''"
|
||||
class="mr-2 size-5 opacity-60"
|
||||
/>
|
||||
<span>{{ selectedItem?.name }}</span>
|
||||
<div class="ml-auto flex gap-2">
|
||||
<ElButton @click="handleReset">
|
||||
{{ $t('system-config.reset') }}
|
||||
</ElButton>
|
||||
<ElButton
|
||||
type="primary"
|
||||
:loading="saving"
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ idx + 1 }}
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<div
|
||||
class="mb-1 text-sm font-semibold"
|
||||
style="color: var(--el-text-color-primary)"
|
||||
>
|
||||
{{ selectedMenuId === 'sync_wecom'
|
||||
? $t(`wecom-sync.guideStep${idx + 1}Title`)
|
||||
: selectedMenuId === 'sync_feishu'
|
||||
? $t(`feishu-sync.guideStep${idx + 1}Title`)
|
||||
: $t(`dingtalk-sync.guideStep${idx + 1}Title`)
|
||||
}}
|
||||
</div>
|
||||
<div
|
||||
class="text-sm leading-relaxed"
|
||||
style="color: var(--el-text-color-secondary)"
|
||||
>
|
||||
{{ selectedMenuId === 'sync_wecom'
|
||||
? $t(`wecom-sync.guideStep${idx + 1}Desc`)
|
||||
: selectedMenuId === 'sync_feishu'
|
||||
? $t(`feishu-sync.guideStep${idx + 1}Desc`)
|
||||
: $t(`dingtalk-sync.guideStep${idx + 1}Desc`)
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
{{ $t('system-config.save') }}
|
||||
</ElButton>
|
||||
</div>
|
||||
</div>
|
||||
</ZqDialog>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<!-- SSO/通知配置:通用表单 -->
|
||||
<template v-else>
|
||||
<ElCard
|
||||
shadow="never"
|
||||
class="config-card flex h-full flex-col !border-none"
|
||||
>
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<IconifyIcon
|
||||
:icon="selectedItem?.icon || ''"
|
||||
class="mr-2 size-5 opacity-60"
|
||||
/>
|
||||
<span>{{ selectedItem?.name }}</span>
|
||||
<div class="ml-auto flex gap-2">
|
||||
<ElButton @click="handleReset">
|
||||
{{ $t('system-config.reset') }}
|
||||
</ElButton>
|
||||
<ElButton
|
||||
type="primary"
|
||||
:loading="saving"
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ $t('system-config.save') }}
|
||||
</ElButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<ElScrollbar class="flex-1">
|
||||
<ConfigForm
|
||||
ref="configFormRef"
|
||||
:group="selectedMenuId"
|
||||
:config-data="allConfigs[selectedMenuId] || {}"
|
||||
:loading="loading"
|
||||
@saved="handleSaved"
|
||||
/>
|
||||
</ElScrollbar>
|
||||
</ElCard>
|
||||
</template>
|
||||
<ElScrollbar class="flex-1">
|
||||
<ConfigForm
|
||||
ref="configFormRef"
|
||||
:group="selectedMenuId"
|
||||
:config-data="allConfigs[selectedMenuId] || {}"
|
||||
:loading="loading"
|
||||
@saved="handleSaved"
|
||||
/>
|
||||
</ElScrollbar>
|
||||
</ElCard>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user