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" >