From 47bf9c8f0b477f8716efee35b9dadb1eefefb63d Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 26 Sep 2026 21:43:24 +0800 Subject: [PATCH] fix(float): use shared sticky save bar and place panel warnings after device tags --- .../components/floating/FloatBtnItemPanel.vue | 6 +- .../src/components/form/AksFormRenderer.vue | 83 +------------- .../admin/src/components/form/AksSaveBar.vue | 101 ++++++++++++++++++ .../pages/content/FloatingButtonsSettings.vue | 25 +++-- .../widget-system/admin-ui-contract.test.cjs | 5 +- tools/admin-contract-report.json | 12 +-- 6 files changed, 131 insertions(+), 101 deletions(-) create mode 100644 assets/admin/src/components/form/AksSaveBar.vue diff --git a/assets/admin/src/components/floating/FloatBtnItemPanel.vue b/assets/admin/src/components/floating/FloatBtnItemPanel.vue index 2ace262d..e845450a 100644 --- a/assets/admin/src/components/floating/FloatBtnItemPanel.vue +++ b/assets/admin/src/components/floating/FloatBtnItemPanel.vue @@ -5,15 +5,15 @@ {{ meta.title }} - - {{ meta.warn }} - {{ modelValue.buttons.length }} 个 + + {{ meta.warn }} + diff --git a/assets/admin/src/components/form/AksFormRenderer.vue b/assets/admin/src/components/form/AksFormRenderer.vue index b87a79b5..9cf48e2c 100644 --- a/assets/admin/src/components/form/AksFormRenderer.vue +++ b/assets/admin/src/components/form/AksFormRenderer.vue @@ -122,26 +122,7 @@ -
-
-
- - 您有未保存的更改 -
-
- 放弃更改 - - - 保存设置 - -
-
-
+ @@ -159,6 +140,7 @@ */ import { ref, computed, useSlots } from 'vue' import FaIcon from './FaIcon.vue' +import AksSaveBar from './AksSaveBar.vue' import AksFieldGroup from './AksFieldGroup.vue' import AksField from './AksField.vue' @@ -388,53 +370,6 @@ const filteredSchema = computed(() => { font-size: 14px; } -/* Sticky save bar */ -.aksrt-form-renderer__save-bar { - position: fixed; - bottom: 0; - left: 0; - right: 0; - z-index: 1000; - background: var(--aksrt-color-surface); - border-top: 1px solid var(--aksrt-color-border); - box-shadow: var(--aksrt-shadow-floating); - animation: slideUp 0.2s ease; -} - -.aksrt-form-renderer__save-bar__inner { - display: flex; - align-items: center; - justify-content: space-between; - max-width: 1100px; - margin: 0 auto; - padding: 12px 28px; - gap: 16px; -} - -.aksrt-form-renderer__save-bar__info { - display: flex; - align-items: center; - gap: 8px; - color: #d48806; - font-size: 13px; -} - -.aksrt-form-renderer__save-bar__actions { - display: flex; - gap: 8px; -} - -@keyframes slideUp { - from { - transform: translateY(100%); - opacity: 0; - } - to { - transform: translateY(0); - opacity: 1; - } -} - /* Mobile */ @media (max-width: 768px) { .aksrt-form-renderer__header { @@ -446,19 +381,5 @@ const filteredSchema = computed(() => { max-width: 100%; width: 100%; } - - .aksrt-form-renderer__save-bar__inner { - flex-direction: column; - padding: 10px 14px; - gap: 8px; - } - - .aksrt-form-renderer__save-bar__actions { - width: 100%; - } - - .aksrt-form-renderer__save-bar__actions .n-button { - flex: 1; - } } diff --git a/assets/admin/src/components/form/AksSaveBar.vue b/assets/admin/src/components/form/AksSaveBar.vue new file mode 100644 index 00000000..ab63ca5b --- /dev/null +++ b/assets/admin/src/components/form/AksSaveBar.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/assets/admin/src/pages/content/FloatingButtonsSettings.vue b/assets/admin/src/pages/content/FloatingButtonsSettings.vue index ed7a36a8..d07597e3 100644 --- a/assets/admin/src/pages/content/FloatingButtonsSettings.vue +++ b/assets/admin/src/pages/content/FloatingButtonsSettings.vue @@ -1,10 +1,6 @@