diff --git a/frontend/src/api/dingtalk.ts b/frontend/src/api/dingtalk.ts index d968839..4bd53a7 100644 --- a/frontend/src/api/dingtalk.ts +++ b/frontend/src/api/dingtalk.ts @@ -12,7 +12,8 @@ export interface DingTalkConfig { robotWebhook?: string robotSecret?: string enabled: number - enabledFeatures?: { + // enabledFeatures在数据库中存储为JSON字符串,但在前端使用时会解析为对象 + enabledFeatures?: string | { notification?: boolean login?: boolean attendance?: boolean diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index 474827d..c170e6f 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -2307,10 +2307,27 @@ const loadDingTalkConfig = async () => { if (config) { Object.assign(dingTalkConfig, config) // 解析启用的功能 + // enabledFeatures在数据库中存储为JSON字符串,需要解析 if (config.enabledFeatures) { - enabledFeaturesList.value = Object.entries(config.enabledFeatures) + let featuresObj: Record = {} + if (typeof config.enabledFeatures === 'string') { + // 如果是字符串,需要解析为对象 + try { + featuresObj = JSON.parse(config.enabledFeatures) + } catch (e) { + console.error('解析enabledFeatures JSON失败:', e) + featuresObj = {} + } + } else { + // 如果已经是对象,直接使用 + featuresObj = config.enabledFeatures as Record + } + + enabledFeaturesList.value = Object.entries(featuresObj) .filter(([, v]) => v) .map(([k]) => k) + } else { + enabledFeaturesList.value = [] } } } catch (error) {