refactor(dialogs): unify button styles and layout in dialog components

- Updated VCardActions in multiple dialog components to use a consistent class `app-dialog-actions` for styling.
- Changed button variants to `flat` for primary actions and `tonal` for secondary actions across various dialogs.
- Adjusted padding and spacing for buttons to improve layout consistency.
- Enhanced responsiveness for dialog actions in mobile views.
This commit is contained in:
jxxghp
2026-06-14 14:47:06 +08:00
parent 889a4b744a
commit 891274cc0e
41 changed files with 310 additions and 177 deletions
+2 -2
View File
@@ -163,9 +163,9 @@ const instructions = computed(() => {
</VAlert> </VAlert>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn color="primary" variant="text" @click="showInstructions = false"> <VBtn color="primary" variant="flat" class="px-5" @click="showInstructions = false">
{{ t('pwa.gotIt') }} {{ t('pwa.gotIt') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+3 -3
View File
@@ -133,12 +133,12 @@ async function savaAlistConfig() {
</VCol> </VCol>
</VRow> </VRow>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VBtn color="error" @click="handleReset" prepend-icon="mdi-restore" class="px-5 me-3"> <VBtn color="error" variant="tonal" @click="handleReset" prepend-icon="mdi-restore">
{{ t('dialog.alistConfig.reset') }} {{ t('dialog.alistConfig.reset') }}
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn @click="handleDone" prepend-icon="mdi-check" class="px-5 me-3"> <VBtn color="primary" variant="flat" @click="handleDone" prepend-icon="mdi-check" class="px-5">
{{ t('dialog.alistConfig.complete') }} {{ t('dialog.alistConfig.complete') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+3 -3
View File
@@ -138,12 +138,12 @@ onUnmounted(() => {
</VAlert> </VAlert>
</div> </div>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VBtn color="error" @click="handleReset" prepend-icon="mdi-restore" class="px-5 me-3"> <VBtn color="error" variant="tonal" @click="handleReset" prepend-icon="mdi-restore">
{{ t('dialog.aliyunAuth.reset') }} {{ t('dialog.aliyunAuth.reset') }}
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn @click="handleDone" prepend-icon="mdi-check" class="px-5 me-3"> <VBtn color="primary" variant="flat" @click="handleDone" prepend-icon="mdi-check" class="px-5">
{{ t('dialog.aliyunAuth.complete') }} {{ t('dialog.aliyunAuth.complete') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -84,9 +84,16 @@ function submitReidentify() {
</VAlert> </VAlert>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn color="primary" :loading="props.loading" prepend-icon="mdi-check" @click="submitReidentify"> <VBtn
color="primary"
variant="flat"
:loading="props.loading"
prepend-icon="mdi-check"
class="px-5"
@click="submitReidentify"
>
{{ t('setting.cache.reidentifyDialog.confirm') }} {{ t('setting.cache.reidentifyDialog.confirm') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+10 -6
View File
@@ -383,7 +383,7 @@ onMounted(() => {
</VTab> </VTab>
</VTabs> </VTabs>
<div v-if="loading" class="d-flex justify-center align-center" style="min-height: 300px"> <div v-if="loading" class="d-flex justify-center align-center" style="min-block-size: 300px">
<VProgressCircular indeterminate color="primary" size="64" /> <VProgressCircular indeterminate color="primary" size="64" />
</div> </div>
@@ -610,12 +610,16 @@ onMounted(() => {
</VWindow> </VWindow>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn variant="text" @click="emit('close')"> <VBtn
{{ t('common.cancel') }} color="primary"
</VBtn> variant="flat"
<VBtn color="primary" :loading="saving" prepend-icon="mdi-content-save" class="px-5" @click="saveConfig"> :loading="saving"
prepend-icon="mdi-content-save"
class="px-5"
@click="saveConfig"
>
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -153,15 +153,15 @@ function submitSettings() {
<VSwitch v-model="elevatedValue" :label="props.switchLabel" /> <VSwitch v-model="elevatedValue" :label="props.switchLabel" />
</p> </p>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn v-if="props.showBulkActions" variant="text" @click="setAllItems(true)"> <VBtn v-if="props.showBulkActions" color="success" variant="tonal" @click="setAllItems(true)">
{{ props.selectAllText }} {{ props.selectAllText }}
</VBtn> </VBtn>
<VBtn v-if="props.showBulkActions" variant="text" @click="setAllItems(false)"> <VBtn v-if="props.showBulkActions" color="warning" variant="tonal" @click="setAllItems(false)">
{{ props.selectNoneText }} {{ props.selectNoneText }}
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn color="primary" class="px-5" @click="submitSettings"> <VBtn color="primary" variant="flat" class="px-5" @click="submitSettings">
<template #prepend> <template #prepend>
<VIcon icon="mdi-content-save" /> <VIcon icon="mdi-content-save" />
</template> </template>
+3 -2
View File
@@ -86,8 +86,9 @@ function submitCustomCSS() {
class="custom-css-editor" class="custom-css-editor"
/> />
</div> </div>
<VCardActions class="custom-css-actions"> <VCardActions class="app-dialog-actions custom-css-actions">
<VBtn color="primary" prepend-icon="mdi-content-save" class="px-5" @click="submitCustomCSS"> <VSpacer />
<VBtn color="primary" variant="flat" prepend-icon="mdi-content-save" class="px-5" @click="submitCustomCSS">
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -199,8 +199,9 @@ onMounted(() => {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn @click="saveRuleInfo" prepend-icon="mdi-content-save" class="px-5"> <VSpacer />
<VBtn color="primary" variant="flat" @click="saveRuleInfo" prepend-icon="mdi-content-save" class="px-5">
{{ t('customRule.action.confirm') }} {{ t('customRule.action.confirm') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -88,9 +88,9 @@ function submitOrder() {
</template> </template>
</draggable> </draggable>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn @click="submitOrder"> <VBtn color="primary" variant="flat" class="px-5" @click="submitOrder">
<template #prepend> <template #prepend>
<VIcon icon="mdi-content-save" /> <VIcon icon="mdi-content-save" />
</template> </template>
@@ -536,8 +536,9 @@ onMounted(() => {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn @click="saveDownloaderInfo" prepend-icon="mdi-content-save" class="px-5"> <VSpacer />
<VBtn color="primary" variant="flat" @click="saveDownloaderInfo" prepend-icon="mdi-content-save" class="px-5">
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+10 -3
View File
@@ -52,9 +52,16 @@ function closeDialog() {
<VCardText> <VCardText>
<VTextField v-model="folderName" :label="t('common.name')" prepend-inner-icon="mdi-format-text" /> <VTextField v-model="folderName" :label="t('common.name')" prepend-inner-icon="mdi-format-text" />
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<div class="flex-grow-1" /> <VSpacer />
<VBtn :disabled="!folderName" prepend-icon="mdi-folder-plus" class="px-5 me-3" @click="emit('create')"> <VBtn
color="primary"
variant="flat"
:disabled="!folderName"
prepend-icon="mdi-folder-plus"
class="px-5"
@click="emit('create')"
>
{{ t('common.create') }} {{ t('common.create') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+11 -3
View File
@@ -81,11 +81,19 @@ function closeDialog() {
</VCol> </VCol>
</VRow> </VRow>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VBtn color="success" prepend-icon="mdi-magic" class="px-5 me-3" @click="emit('auto-name')"> <VBtn color="success" variant="tonal" prepend-icon="mdi-magic" @click="emit('auto-name')">
{{ t('file.autoRecognizeName') }} {{ t('file.autoRecognizeName') }}
</VBtn> </VBtn>
<VBtn :disabled="!renameName" prepend-icon="mdi-check" class="px-5 me-3" @click="emit('rename')"> <VSpacer />
<VBtn
color="primary"
variant="flat"
:disabled="!renameName"
prepend-icon="mdi-check"
class="px-5"
@click="emit('rename')"
>
{{ t('common.confirm') }} {{ t('common.confirm') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -294,18 +294,23 @@ onMounted(() => {
</Draggable> </Draggable>
<div class="text-center" v-if="filterRuleCards.length == 0">{{ t('filterRule.add') }}</div> <div class="text-center" v-if="filterRuleCards.length == 0">{{ t('filterRule.add') }}</div>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn color="primary" @click="addFilterCard"> <VBtn color="primary" variant="tonal" class="app-dialog-actions__icon-btn" @click="addFilterCard">
<VIcon icon="mdi-plus" /> <VIcon icon="mdi-plus" />
</VBtn> </VBtn>
<VBtn color="success" @click="importRules('priority')"> <VBtn
color="success"
variant="tonal"
class="app-dialog-actions__icon-btn"
@click="importRules('priority')"
>
<VIcon icon="mdi-import" /> <VIcon icon="mdi-import" />
</VBtn> </VBtn>
<VBtn color="info" @click="shareRules"> <VBtn color="info" variant="tonal" class="app-dialog-actions__icon-btn" @click="shareRules">
<VIcon icon="mdi-share" /> <VIcon icon="mdi-share" />
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn @click="saveGroupInfo" prepend-icon="mdi-content-save" class="px-5"> <VBtn color="primary" variant="flat" @click="saveGroupInfo" prepend-icon="mdi-content-save" class="px-5">
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+2 -2
View File
@@ -36,9 +36,9 @@ function handleImport() {
<VCardText class="pt-2"> <VCardText class="pt-2">
<VTextarea v-model="codeString" prepend-inner-icon="mdi-code-json" /> <VTextarea v-model="codeString" prepend-inner-icon="mdi-code-json" />
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn @click="handleImport" prepend-icon="mdi-import" class="px-5 me-3"> <VBtn color="primary" variant="flat" @click="handleImport" prepend-icon="mdi-import" class="px-5">
{{ t('dialog.importCode.import') }} {{ t('dialog.importCode.import') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -43,7 +43,10 @@ function closeDialog() {
<template> <template>
<VDialog v-if="visible" v-model="visible" max-width="560"> <VDialog v-if="visible" v-model="visible" max-width="560">
<VCard> <VCard>
<VCardItem>
<VCardTitle>{{ t('setting.system.llmProviderAuthDialogTitle') }}</VCardTitle> <VCardTitle>{{ t('setting.system.llmProviderAuthDialogTitle') }}</VCardTitle>
</VCardItem>
<VDivider />
<VCardText class="d-flex flex-column ga-4"> <VCardText class="d-flex flex-column ga-4">
<VAlert v-if="props.authSession?.instructions" type="info" variant="tonal"> <VAlert v-if="props.authSession?.instructions" type="info" variant="tonal">
{{ props.authSession.instructions }} {{ props.authSession.instructions }}
@@ -71,9 +74,9 @@ function closeDialog() {
</VBtn> </VBtn>
</div> </div>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn variant="text" @click="closeDialog"> <VBtn color="primary" variant="flat" class="px-5" @click="closeDialog">
{{ t('common.close') }} {{ t('common.close') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -591,8 +591,15 @@ onMounted(() => {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn @click="saveMediaServerInfo" prepend-icon="mdi-content-save" class="px-5"> <VSpacer />
<VBtn
color="primary"
variant="flat"
@click="saveMediaServerInfo"
prepend-icon="mdi-content-save"
class="px-5"
>
{{ t('common.confirm') }} {{ t('common.confirm') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -1171,8 +1171,15 @@ onMounted(() => {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn @click="saveNotificationInfo" prepend-icon="mdi-content-save" class="px-5"> <VSpacer />
<VBtn
color="primary"
variant="flat"
@click="saveNotificationInfo"
prepend-icon="mdi-content-save"
class="px-5"
>
{{ t('common.confirm') }} {{ t('common.confirm') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -92,8 +92,9 @@ function submitTemplate() {
class="template-ace-editor" class="template-ace-editor"
/> />
</div> </div>
<VCardActions class="template-editor-actions"> <VCardActions class="app-dialog-actions template-editor-actions">
<VBtn color="primary" prepend-icon="mdi-content-save" class="px-5" @click="submitTemplate"> <VSpacer />
<VBtn color="primary" variant="flat" prepend-icon="mdi-content-save" class="px-5" @click="submitTemplate">
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+3 -2
View File
@@ -299,8 +299,9 @@ watch(
</VAlert> </VAlert>
</VCardText> </VCardText>
<VCardActions class="justify-end px-6 pb-4"> <VCardActions class="app-dialog-actions">
<VBtn variant="outlined" @click="show = false">{{ t('common.close') }}</VBtn> <VSpacer />
<VBtn color="primary" variant="flat" class="px-5" @click="show = false">{{ t('common.close') }}</VBtn>
</VCardActions> </VCardActions>
</VCard> </VCard>
</VDialog> </VDialog>
+2 -1
View File
@@ -154,10 +154,11 @@ onMounted(() => {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn <VBtn
color="primary" color="primary"
variant="flat"
@click="submitClone" @click="submitClone"
prepend-icon="mdi-content-copy" prepend-icon="mdi-content-copy"
class="px-5" class="px-5"
+16 -3
View File
@@ -160,13 +160,26 @@ onBeforeMount(async () => {
<div v-if="!pluginFormItems || pluginFormItems.length === 0">此插件没有可配置项</div> <div v-if="!pluginFormItems || pluginFormItems.length === 0">此插件没有可配置项</div>
</div> </div>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn v-if="props.plugin?.has_page" @click="emit('switch')" color="info"> <VBtn
v-if="props.plugin?.has_page"
color="info"
variant="tonal"
prepend-icon="mdi-database-eye-outline"
@click="emit('switch')"
>
{{ t('dialog.pluginConfig.viewData') }} {{ t('dialog.pluginConfig.viewData') }}
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<!-- 只有Vuetify模式显示默认保存按钮Vue模式由组件内部控制 --> <!-- 只有Vuetify模式显示默认保存按钮Vue模式由组件内部控制 -->
<VBtn v-if="renderMode === 'vuetify'" @click="savePluginConf" prepend-icon="mdi-content-save" class="px-5"> <VBtn
v-if="renderMode === 'vuetify'"
color="primary"
variant="flat"
@click="savePluginConf"
prepend-icon="mdi-content-save"
class="px-5"
>
保存 保存
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -54,9 +54,9 @@ function closeDialog() {
@keyup.enter="emit('create')" @keyup.enter="emit('create')"
/> />
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn color="primary" prepend-icon="mdi-folder-plus" class="px-5" @click="emit('create')"> <VBtn color="primary" variant="flat" prepend-icon="mdi-folder-plus" class="px-5" @click="emit('create')">
{{ t('plugin.create') }} {{ t('plugin.create') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -57,9 +57,9 @@ function confirmRename() {
@keyup.enter="confirmRename" @keyup.enter="confirmRename"
/> />
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn color="primary" prepend-icon="mdi-check" class="px-5" @click="confirmRename">确认</VBtn> <VBtn color="primary" variant="flat" prepend-icon="mdi-check" class="px-5" @click="confirmRename">确认</VBtn>
</VCardActions> </VCardActions>
</VCard> </VCard>
</VDialog> </VDialog>
@@ -201,9 +201,11 @@ onMounted(() => {
</VCol> </VCol>
</VRow> </VRow>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn color="primary" prepend-icon="mdi-content-save" class="px-5" @click="saveSettings">保存</VBtn> <VBtn color="primary" variant="flat" prepend-icon="mdi-content-save" class="px-5" @click="saveSettings">
保存
</VBtn>
</VCardActions> </VCardActions>
</VCard> </VCard>
</VDialog> </VDialog>
@@ -290,7 +290,7 @@ onMounted(() => {
</div> </div>
<VDialogCloseBtn @click="emit('close')" /> <VDialogCloseBtn @click="emit('close')" />
</VCardItem> </VCardItem>
<VDivider />
<VCardText class="plugin-market-dialog-body pt-4"> <VCardText class="plugin-market-dialog-body pt-4">
<div class="plugin-market-toolbar"> <div class="plugin-market-toolbar">
<div class="plugin-market-toolbar-hint"> <div class="plugin-market-toolbar-hint">
@@ -478,9 +478,9 @@ onMounted(() => {
</div> </div>
</VCardText> </VCardText>
<VCardActions class="plugin-market-actions"> <VCardActions class="app-dialog-actions">
<VBtn <VBtn
color="primary" color="success"
variant="tonal" variant="tonal"
prepend-icon="mdi-cloud-sync-outline" prepend-icon="mdi-cloud-sync-outline"
:loading="syncingWiki" :loading="syncingWiki"
@@ -735,17 +735,6 @@ onMounted(() => {
} }
} }
.plugin-market-actions {
flex: 0 0 auto;
gap: 0.5rem;
padding-block: 0.75rem 1rem;
padding-inline: 1.5rem;
:deep(.v-btn) {
flex: 0 0 auto;
}
}
@media (width <= 600px) { @media (width <= 600px) {
.plugin-market-dialog-card { .plugin-market-dialog-card {
block-size: 100dvh; block-size: 100dvh;
@@ -799,20 +788,5 @@ onMounted(() => {
.plugin-market-empty { .plugin-market-empty {
min-block-size: 10rem; min-block-size: 10rem;
} }
.plugin-market-actions {
flex-wrap: wrap;
padding-block: 0.75rem calc(0.75rem + env(safe-area-inset-bottom));
padding-inline: 1rem;
:deep(.v-btn) {
flex: 1 1 9rem;
min-inline-size: 0;
}
:deep(.v-spacer) {
display: none;
}
}
} }
</style> </style>
+3 -3
View File
@@ -89,12 +89,12 @@ async function handleReset() {
</VCol> </VCol>
</VRow> </VRow>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VBtn color="error" @click="handleReset" prepend-icon="mdi-restore" class="px-5 me-3"> <VBtn color="error" variant="tonal" @click="handleReset" prepend-icon="mdi-restore">
{{ t('dialog.rcloneConfig.reset') }} {{ t('dialog.rcloneConfig.reset') }}
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn @click="handleDone" prepend-icon="mdi-check" class="px-5 me-3"> <VBtn color="primary" variant="flat" @click="handleDone" prepend-icon="mdi-check" class="px-5">
{{ t('dialog.rcloneConfig.complete') }} {{ t('dialog.rcloneConfig.complete') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+10 -24
View File
@@ -294,7 +294,7 @@ const initialTargetPath = normalizeTargetPath(props.target_path)
const transferForm = reactive<TransferForm>({ const transferForm = reactive<TransferForm>({
fileitem: {} as FileItem, fileitem: {} as FileItem,
logid: 0, logid: 0,
target_storage: initialTargetPath ? props.target_storage ?? 'local' : null, target_storage: initialTargetPath ? (props.target_storage ?? 'local') : null,
target_path: initialTargetPath, target_path: initialTargetPath,
transfer_type: null, transfer_type: null,
min_filesize: 0, min_filesize: 0,
@@ -1550,10 +1550,11 @@ onUnmounted(() => {
</VCol> </VCol>
</VRow> </VRow>
</VForm> </VForm>
<VCardActions class="reorganize-form-pane__actions pt-3 px-0 pb-0"> </div>
<VCardActions class="app-dialog-actions reorganize-form-pane__actions">
<VBtn <VBtn
color="info" color="info"
:variant="previewVisible ? 'tonal' : 'text'" variant="tonal"
@click="togglePreview" @click="togglePreview"
:prepend-icon="previewToggleIcon" :prepend-icon="previewToggleIcon"
class="reorganize-action-btn reorganize-action-btn--preview" class="reorganize-action-btn reorganize-action-btn--preview"
@@ -1564,13 +1565,17 @@ onUnmounted(() => {
</VBtn> </VBtn>
<VBtn <VBtn
color="success" color="success"
variant="tonal"
@click="transfer(true)" @click="transfer(true)"
prepend-icon="mdi-plus" prepend-icon="mdi-plus"
class="reorganize-action-btn reorganize-action-btn--queue" class="reorganize-action-btn reorganize-action-btn--queue"
> >
{{ t('dialog.reorganize.addToQueue') }} {{ t('dialog.reorganize.addToQueue') }}
</VBtn> </VBtn>
<VSpacer />
<VBtn <VBtn
color="primary"
variant="flat"
@click="transfer(false)" @click="transfer(false)"
prepend-icon="mdi-arrow-right-bold" prepend-icon="mdi-arrow-right-bold"
class="reorganize-action-btn reorganize-action-btn--primary" class="reorganize-action-btn reorganize-action-btn--primary"
@@ -1579,7 +1584,6 @@ onUnmounted(() => {
</VBtn> </VBtn>
</VCardActions> </VCardActions>
</div> </div>
</div>
<div v-show="previewVisible" class="reorganize-preview-pane"> <div v-show="previewVisible" class="reorganize-preview-pane">
<div class="reorganize-preview-pane__header"> <div class="reorganize-preview-pane__header">
<div class="reorganize-preview-pane__title-block"> <div class="reorganize-preview-pane__title-block">
@@ -1811,17 +1815,9 @@ onUnmounted(() => {
} }
.reorganize-form-pane__actions { .reorganize-form-pane__actions {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 0.75rem;
margin-block-start: auto; margin-block-start: auto;
} }
.reorganize-action-btn {
min-inline-size: 0;
}
.reorganize-action-btn--active { .reorganize-action-btn--active {
background: rgba(var(--v-theme-info), 0.12); background: rgba(var(--v-theme-info), 0.12);
} }
@@ -2161,15 +2157,9 @@ onUnmounted(() => {
border-inline-end: none; border-inline-end: none;
} }
.reorganize-form-pane__actions {
display: grid;
justify-content: stretch;
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.reorganize-action-btn { .reorganize-action-btn {
inline-size: 100%;
min-block-size: 2.75rem; min-block-size: 2.75rem;
padding-inline: 1rem;
} }
.reorganize-preview-pane__summary { .reorganize-preview-pane__summary {
@@ -2184,14 +2174,10 @@ onUnmounted(() => {
@media (width <= 640px) { @media (width <= 640px) {
.reorganize-form-pane__actions { .reorganize-form-pane__actions {
justify-content: stretch; display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
} }
.reorganize-action-btn {
min-inline-size: 0;
}
.reorganize-action-btn--primary { .reorganize-action-btn--primary {
grid-column: 1 / -1; grid-column: 1 / -1;
} }
+2 -1
View File
@@ -175,10 +175,11 @@ const filteredSites = computed(() => {
</div> </div>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn <VBtn
color="primary" color="primary"
variant="flat"
:disabled="selectedSites.length === 0" :disabled="selectedSites.length === 0"
@click="confirmSearch" @click="confirmSearch"
prepend-icon="mdi-magnify" prepend-icon="mdi-magnify"
+17 -3
View File
@@ -340,12 +340,26 @@ onMounted(async () => {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn v-if="props.oper === 'add'" color="primary" @click="addSite" prepend-icon="mdi-plus" class="px-5"> <VBtn
v-if="props.oper === 'add'"
color="primary"
variant="flat"
@click="addSite"
prepend-icon="mdi-plus"
class="px-5"
>
{{ t('site.actions.add') }} {{ t('site.actions.add') }}
</VBtn> </VBtn>
<VBtn v-else color="primary" @click="updateSiteInfo" prepend-icon="mdi-content-save" class="px-5"> <VBtn
v-else
color="primary"
variant="flat"
@click="updateSiteInfo"
prepend-icon="mdi-content-save"
class="px-5"
>
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -110,9 +110,11 @@ async function updateSiteCookie() {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="mx-auto"> <VCardActions class="app-dialog-actions">
<VSpacer />
<VBtn <VBtn
size="large" color="primary"
variant="flat"
@click="updateSiteCookie" @click="updateSiteCookie"
:disabled="updateButtonDisable" :disabled="updateButtonDisable"
:loading="updateButtonDisable" :loading="updateButtonDisable"
+3 -3
View File
@@ -117,12 +117,12 @@ async function saveSmbConfig() {
</VCol> </VCol>
</VRow> </VRow>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VBtn color="error" @click="handleReset" prepend-icon="mdi-restore" class="px-5 me-3"> <VBtn color="error" variant="tonal" @click="handleReset" prepend-icon="mdi-restore">
{{ t('dialog.smbConfig.reset') }} {{ t('dialog.smbConfig.reset') }}
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn @click="handleDone" prepend-icon="mdi-check" class="px-5 me-3"> <VBtn color="primary" variant="flat" @click="handleDone" prepend-icon="mdi-check" class="px-5">
{{ t('dialog.smbConfig.complete') }} {{ t('dialog.smbConfig.complete') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -89,8 +89,9 @@ function handleDone() {
</VCol> </VCol>
</VRow> </VRow>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn @click="handleDone" prepend-icon="mdi-content-save" class="px-5"> <VSpacer />
<VBtn color="primary" variant="flat" @click="handleDone" prepend-icon="mdi-content-save" class="px-5">
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -559,12 +559,14 @@ onMounted(() => {
</VWindow> </VWindow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VBtn v-if="!props.default" color="error" @click="removeSubscribe" class="me-3"> <VBtn v-if="!props.default" color="error" variant="tonal" @click="removeSubscribe">
{{ t('dialog.subscribeEdit.cancelSubscribe') }} {{ t('dialog.subscribeEdit.cancelSubscribe') }}
</VBtn> </VBtn>
<VSpacer /> <VSpacer />
<VBtn <VBtn
color="primary"
variant="flat"
@click=";`${props.default ? saveDefaultSubscribeConfig() : updateSubscribeInfo()}`" @click=";`${props.default ? saveDefaultSubscribeConfig() : updateSubscribeInfo()}`"
prepend-icon="mdi-content-save" prepend-icon="mdi-content-save"
class="px-5" class="px-5"
+10 -2
View File
@@ -105,9 +105,17 @@ const $toast = useToast()
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn :disabled="shareDoing" @click="doShare" prepend-icon="mdi-share" class="px-5" :loading="shareDoing"> <VBtn
color="primary"
variant="flat"
:disabled="shareDoing"
@click="doShare"
prepend-icon="mdi-share"
class="px-5"
:loading="shareDoing"
>
{{ t('dialog.subscribeShare.confirmShare') }} {{ t('dialog.subscribeShare.confirmShare') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
@@ -97,9 +97,9 @@ function updateFilter(values: string[]) {
</VChip> </VChip>
</VChipGroup> </VChipGroup>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn color="primary" prepend-icon="mdi-check" class="px-5" @click="visible = false"> <VBtn color="primary" variant="flat" prepend-icon="mdi-check" class="px-5" @click="visible = false">
{{ t('torrent.confirm') }} {{ t('torrent.confirm') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+5 -3
View File
@@ -225,11 +225,11 @@ onUnmounted(() => {
</div> </div>
</VCardText> </VCardText>
<VCardActions> <VCardActions class="app-dialog-actions">
<VBtn <VBtn
color="error" color="error"
variant="tonal"
prepend-icon="mdi-restore" prepend-icon="mdi-restore"
class="px-5 me-3"
@click="handleReset" @click="handleReset"
> >
{{ t('dialog.u115Auth.reset') }} {{ t('dialog.u115Auth.reset') }}
@@ -238,8 +238,10 @@ onUnmounted(() => {
<VSpacer /> <VSpacer />
<VBtn <VBtn
color="primary"
variant="flat"
prepend-icon="mdi-check" prepend-icon="mdi-check"
class="px-5 me-3" class="px-5"
@click="handleDone" @click="handleDone"
> >
{{ t('dialog.u115Auth.complete') }} {{ t('dialog.u115Auth.complete') }}
+3 -1
View File
@@ -612,12 +612,13 @@ onMounted(() => {
</div> </div>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn <VBtn
v-if="props.oper === 'add'" v-if="props.oper === 'add'"
:disabled="isAdding" :disabled="isAdding"
color="primary" color="primary"
variant="flat"
@click="addUser" @click="addUser"
prepend-icon="mdi-plus" prepend-icon="mdi-plus"
class="px-5" class="px-5"
@@ -629,6 +630,7 @@ onMounted(() => {
v-else v-else
:disabled="isUpdating" :disabled="isUpdating"
color="primary" color="primary"
variant="flat"
@click="updateUser" @click="updateUser"
prepend-icon="mdi-content-save" prepend-icon="mdi-content-save"
class="px-5" class="px-5"
@@ -312,12 +312,19 @@ onMounted(() => {
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn v-if="workflow" color="primary" @click="editWorkflow" prepend-icon="mdi-content-save" class="px-5"> <VBtn
v-if="workflow"
color="primary"
variant="flat"
@click="editWorkflow"
prepend-icon="mdi-content-save"
class="px-5"
>
{{ t('dialog.workflowAddEdit.confirm') }} {{ t('dialog.workflowAddEdit.confirm') }}
</VBtn> </VBtn>
<VBtn v-else color="primary" @click="addWorkflow" prepend-icon="mdi-plus" class="px-5"> <VBtn v-else color="primary" variant="flat" @click="addWorkflow" prepend-icon="mdi-plus" class="px-5">
{{ t('dialog.workflowAddEdit.confirm') }} {{ t('dialog.workflowAddEdit.confirm') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+10 -2
View File
@@ -125,9 +125,17 @@ const $toast = useToast()
</VRow> </VRow>
</VForm> </VForm>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VSpacer /> <VSpacer />
<VBtn :disabled="shareDoing" @click="doShare" prepend-icon="mdi-share" class="px-5" :loading="shareDoing"> <VBtn
color="primary"
variant="flat"
:disabled="shareDoing"
@click="doShare"
prepend-icon="mdi-share"
class="px-5"
:loading="shareDoing"
>
{{ t('dialog.workflowShare.confirmShare') }} {{ t('dialog.workflowShare.confirmShare') }}
</VBtn> </VBtn>
</VCardActions> </VCardActions>
+60
View File
@@ -706,6 +706,53 @@ html[data-theme="transparent"] .app-card-colorful,
padding: 16px; padding: 16px;
} }
// 弹窗底部左右动作区:对齐插件仓库设置弹窗的按钮间距、主次样式和移动端铺排。
.app-dialog-actions {
flex: 0 0 auto;
gap: 0.5rem;
padding-block: 0.75rem 1rem !important;
padding-inline: 1.5rem !important;
> .v-btn {
flex: 0 0 auto;
}
> .app-dialog-actions__icon-btn {
inline-size: 2.5rem;
min-inline-size: 2.5rem;
padding-inline: 0;
}
}
@media (width <= 960px) {
.app-dialog-actions {
padding-block-end: calc(0.75rem + env(safe-area-inset-bottom)) !important;
}
}
@media (width <= 600px) {
.app-dialog-actions {
flex-wrap: wrap;
padding-block: 0.75rem calc(0.75rem + env(safe-area-inset-bottom)) !important;
padding-inline: 1rem !important;
> .v-btn:not(.app-dialog-actions__icon-btn) {
flex: 1 1 9rem;
min-inline-size: 0;
}
> .app-dialog-actions__icon-btn {
flex: 0 0 2.75rem;
inline-size: 2.75rem;
min-inline-size: 2.75rem;
}
> .v-spacer {
display: none;
}
}
}
// 路由过渡动画 // 路由过渡动画
.fade-slide-leave-active, .fade-slide-leave-active,
.fade-slide-enter-active { .fade-slide-enter-active {
@@ -1077,6 +1124,19 @@ html[data-theme="transparent"] .app-card-colorful,
.v-dialog--fullscreen > .v-overlay__content { .v-dialog--fullscreen > .v-overlay__content {
border-radius: 0 !important; border-radius: 0 !important;
box-shadow: none !important; box-shadow: none !important;
display: flex;
inline-size: 100%;
inset-inline: 0 !important;
justify-content: center;
margin-inline: auto;
}
// 全屏弹窗触发后,未横向铺满的卡片仍保持居中。
.v-dialog--fullscreen > .v-overlay__content > .v-card,
.v-dialog--fullscreen > .v-overlay__content > .v-sheet,
.v-dialog--fullscreen > .v-overlay__content > form {
margin-inline: auto;
max-inline-size: 100%;
} }
.v-dialog > .v-overlay__content { .v-dialog > .v-overlay__content {
+3 -6
View File
@@ -2410,14 +2410,11 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
</VWindowItem> </VWindowItem>
</VWindow> </VWindow>
</VCardText> </VCardText>
<VCardActions class="pt-3"> <VCardActions class="app-dialog-actions">
<VForm @submit.prevent="() => {}"> <VSpacer />
<div class="d-flex flex-wrap gap-4 mt-4"> <VBtn color="primary" variant="flat" prepend-icon="mdi-content-save" @click="saveAdvancedSettings" class="px-5">
<VBtn color="primary" prepend-icon="mdi-content-save" @click="saveAdvancedSettings" class="px-5">
{{ t('common.save') }} {{ t('common.save') }}
</VBtn> </VBtn>
</div>
</VForm>
</VCardActions> </VCardActions>
</VCard> </VCard>
</VDialog> </VDialog>