From 4833053a5c26248f84cc05b25e0187b5319a2aae Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 4 Sep 2026 12:06:42 +0800 Subject: [PATCH] fix(email): complete mail settings and templates --- .gitignore | 1 + assets/admin/src/api/modules/global.js | 2 - assets/admin/src/components/form/AksField.vue | 13 +- .../src/components/form/AksFormRenderer.vue | 4 +- assets/admin/src/pages/SchemaPage.vue | 29 ++- .../admin/src/schema/sections/global/email.js | 109 --------- .../admin/src/schema/sections/global/index.js | 4 +- functions.php | 3 + inc/core-hooks/part-2.php | 56 ++--- inc/modules/user-notifications.php | 9 +- inc/modules/user-parts/account-ajax.php | 30 +-- src/Admin/GlobalController.php | 35 +-- src/Admin/Schema/GlobalSchema.php | 59 +---- src/Admin/SchemaProvider.php | 16 +- src/Admin/UserController.php | 41 ---- .../UserControllerAuthPhoneOperations.php | 24 +- src/Auth/ServicePart1a.php | 16 +- src/Auth/ServicePart1b.php | 6 +- src/Identity/ApplicationService.php | 10 +- src/Messages/Message.php | 4 +- src/Messages/ReportCenter.php | 17 +- src/Payment/Withdrawal.php | 22 +- src/Settings/FacadeBulk.php | 18 +- src/Settings/Mail.php | 193 +++++++++------ src/Settings/MailNotifications.php | 223 ++++++++++++++++++ src/Settings/MailTemplates.php | 124 ++++++++++ src/Settings/Settings.php | 5 +- src/User/Restriction.php | 2 + .../email-system-contract.test.cjs | 67 ++++++ 29 files changed, 716 insertions(+), 426 deletions(-) delete mode 100644 assets/admin/src/schema/sections/global/email.js create mode 100644 src/Settings/MailNotifications.php create mode 100644 src/Settings/MailTemplates.php create mode 100644 tests/widget-system/email-system-contract.test.cjs diff --git a/.gitignore b/.gitignore index 4d8dd9b7..c7066355 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ !/tests/widget-system/icon-card-contract.test.cjs !/tests/widget-system/page-display-save-harness.php !/tests/widget-system/admin-ui-contract.test.cjs +!/tests/widget-system/email-system-contract.test.cjs !/tests/widget-system/auth-source-contract.test.cjs !/tests/widget-system/captcha-business-contract.test.cjs !/tests/widget-system/captcha-security-harness.php diff --git a/assets/admin/src/api/modules/global.js b/assets/admin/src/api/modules/global.js index a3f26a98..5bbbbecc 100644 --- a/assets/admin/src/api/modules/global.js +++ b/assets/admin/src/api/modules/global.js @@ -3,8 +3,6 @@ export const globalApiMethods = { * 全局&功能 (Global & Functions) * ================================================================ */ - getMailSettings() { return this.request('/settings/mail') }, - saveMailSettings(data) { return this.request('/settings/mail', { method: 'POST', body: JSON.stringify(data) }) }, testMail(to) { return this.request('/mail/test', { method: 'POST', body: JSON.stringify({ to }) }) }, getFooterTabbarSettings() { return this.request('/settings/footer-tabbar') }, diff --git a/assets/admin/src/components/form/AksField.vue b/assets/admin/src/components/form/AksField.vue index de53f7b3..0169deb4 100644 --- a/assets/admin/src/components/form/AksField.vue +++ b/assets/admin/src/components/form/AksField.vue @@ -273,6 +273,17 @@ v-html="schema.content || modelValue || ''" /> + + + {{ schema.buttonText || schema.label || '执行' }} + + props.schema.secret && props.modelValue === '__AKSRT_CLEAR_SECRET__') const secretDisplayValue = computed(() => secretMarkedForClear.value ? '' : props.modelValue) diff --git a/assets/admin/src/components/form/AksFormRenderer.vue b/assets/admin/src/components/form/AksFormRenderer.vue index cba3e045..94eda249 100644 --- a/assets/admin/src/components/form/AksFormRenderer.vue +++ b/assets/admin/src/components/form/AksFormRenderer.vue @@ -66,6 +66,7 @@ :model-value="getFieldValue(field.key)" :error-message="errors?.[field.key]" @update:model-value="setFieldValue(field.key, $event)" + @action="emit('field-action', $event)" /> @@ -161,7 +163,7 @@ const props = defineProps({ errors: { type: Object, default: () => ({}) }, }) -const emit = defineEmits(['update:formData', 'save', 'reload']) +const emit = defineEmits(['update:formData', 'save', 'reload', 'field-action']) const slots = useSlots() const searchQuery = ref('') diff --git a/assets/admin/src/pages/SchemaPage.vue b/assets/admin/src/pages/SchemaPage.vue index a0eff33a..13415f55 100644 --- a/assets/admin/src/pages/SchemaPage.vue +++ b/assets/admin/src/pages/SchemaPage.vue @@ -14,6 +14,7 @@ @update:form-data="formData = $event" @save="handleSave" @reload="handleReload" + @field-action="handleFieldAction" >