| <template> | 
|   <div v-if="!appStore.navbar" class="fixed-settings" @click="setVisible"> | 
|     <a-button type="primary"> | 
|       <template #icon> | 
|         <icon-settings /> | 
|       </template> | 
|     </a-button> | 
|   </div> | 
|   <a-drawer | 
|     :width="300" | 
|     unmount-on-close | 
|     :visible="visible" | 
|     :cancel-text="$t('settings.close')" | 
|     :ok-text="$t('settings.copySettings')" | 
|     @ok="copySettings" | 
|     @cancel="cancel" | 
|   > | 
|     <template #title> {{ $t('settings.title') }} </template> | 
|     <Block :options="contentOpts" :title="$t('settings.content')" /> | 
|     <Block :options="othersOpts" :title="$t('settings.otherSettings')" /> | 
|     <a-alert>{{ $t('settings.alertContent') }}</a-alert> | 
|   </a-drawer> | 
| </template> | 
|   | 
| <script lang="ts" setup> | 
|   import { computed } from 'vue'; | 
|   import { Message } from '@arco-design/web-vue'; | 
|   import { useI18n } from 'vue-i18n'; | 
|   import { useClipboard } from '@vueuse/core'; | 
|   import { useAppStore } from '@/store'; | 
|   import Block from './block.vue'; | 
|   | 
|   const emit = defineEmits(['cancel']); | 
|   | 
|   const appStore = useAppStore(); | 
|   const { t } = useI18n(); | 
|   const { copy } = useClipboard(); | 
|   const visible = computed(() => appStore.globalSettings); | 
|   const contentOpts = computed(() => [ | 
|     { name: 'settings.navbar', key: 'navbar', defaultVal: appStore.navbar }, | 
|     { | 
|       name: 'settings.menu', | 
|       key: 'menu', | 
|       defaultVal: appStore.menu, | 
|     }, | 
|     { | 
|       name: 'settings.topMenu', | 
|       key: 'topMenu', | 
|       defaultVal: appStore.topMenu, | 
|     }, | 
|     { name: 'settings.footer', key: 'footer', defaultVal: appStore.footer }, | 
|     { name: 'settings.tabBar', key: 'tabBar', defaultVal: appStore.tabBar }, | 
|     { | 
|       name: 'settings.menuFromServer', | 
|       key: 'menuFromServer', | 
|       defaultVal: appStore.menuFromServer, | 
|     }, | 
|     { | 
|       name: 'settings.menuWidth', | 
|       key: 'menuWidth', | 
|       defaultVal: appStore.menuWidth, | 
|       type: 'number', | 
|     }, | 
|   ]); | 
|   const othersOpts = computed(() => [ | 
|     { | 
|       name: 'settings.colorWeak', | 
|       key: 'colorWeak', | 
|       defaultVal: appStore.colorWeak, | 
|     }, | 
|   ]); | 
|   | 
|   const cancel = () => { | 
|     appStore.updateSettings({ globalSettings: false }); | 
|     emit('cancel'); | 
|   }; | 
|   const copySettings = async () => { | 
|     const text = JSON.stringify(appStore.$state, null, 2); | 
|     await copy(text); | 
|     Message.success(t('settings.copySettings.message')); | 
|   }; | 
|   const setVisible = () => { | 
|     appStore.updateSettings({ globalSettings: true }); | 
|   }; | 
| </script> | 
|   | 
| <style scoped lang="less"> | 
|   .fixed-settings { | 
|     position: fixed; | 
|     top: 280px; | 
|     right: 0; | 
|   | 
|     svg { | 
|       font-size: 18px; | 
|       vertical-align: -4px; | 
|     } | 
|   } | 
| </style> |