diff --git a/frontend/src/views/admin/system-settings.vue b/frontend/src/views/admin/system-settings.vue
index 6f7f595..04d7976 100644
--- a/frontend/src/views/admin/system-settings.vue
+++ b/frontend/src/views/admin/system-settings.vue
@@ -140,6 +140,14 @@
测试连接
+
+ 立即同步
+
@@ -164,6 +172,7 @@ const dingtalkFormRef = ref()
const syncLoading = ref(false)
const syncSaving = ref(false)
const syncTesting = ref(false)
+const syncing = ref(false)
const syncFormRef = ref()
// 钉钉配置表单
@@ -327,6 +336,31 @@ const testSyncConnection = async () => {
}
}
+/**
+ * 立即执行员工同步
+ */
+const triggerSync = async () => {
+ syncing.value = true
+ try {
+ const response = await request.post('/api/v1/employee-sync/sync')
+ if (response.success) {
+ const data = response.data
+ ElMessage.success(
+ `同步完成!共处理 ${data.total_employees || 0} 名员工,` +
+ `创建 ${data.users_created || 0} 个账号,` +
+ `跳过 ${data.users_skipped || 0} 个`
+ )
+ } else {
+ ElMessage.error(response.message || '同步失败')
+ }
+ } catch (error: any) {
+ console.error('员工同步失败:', error)
+ ElMessage.error(error?.response?.data?.detail || '员工同步失败')
+ } finally {
+ syncing.value = false
+ }
+}
+
// 页面加载时获取配置
onMounted(() => {
loadDingtalkConfig()