Refactor MasterDetailMntC.vue for improved readability and consistency
This commit is contained in:
+27
-19
@@ -5,10 +5,17 @@
|
||||
:form="form"
|
||||
:header="header"
|
||||
:illustration="illustration"
|
||||
:layout="formPositionLayout" :mobile-announcement="mobileAnnouncement" :toolbar="toolbar"
|
||||
@captcha-change="handleCaptchaChange" @captcha-refresh="handleCaptchaRefresh" @change-locale="handleChangeLocale"
|
||||
@forgot-password="handleForgotPassword" @select-announcement="handleSelectAnnouncement" @submit="onLogin"
|
||||
@toggle-layout="handleToggleLayout" />
|
||||
:layout="formPositionLayout"
|
||||
:mobile-announcement="mobileAnnouncement"
|
||||
:toolbar="toolbar"
|
||||
@captcha-change="handleCaptchaChange"
|
||||
@captcha-refresh="handleCaptchaRefresh"
|
||||
@change-locale="handleChangeLocale"
|
||||
@forgot-password="handleForgotPassword"
|
||||
@select-announcement="handleSelectAnnouncement"
|
||||
@submit="onLogin"
|
||||
@toggle-layout="handleToggleLayout"
|
||||
/>
|
||||
|
||||
<v-dialog v-model="dialogVisible" width="360">
|
||||
<v-card>
|
||||
@@ -52,7 +59,10 @@ import { useRoute, useRouter } from 'vue-router'
|
||||
import HyakkaouAcademyImage from '@/assets/logo.png'
|
||||
import SKLogin from '@/components/SKLogin.vue'
|
||||
import { useAuthStore } from '@/stores/auth'
|
||||
import { type LoginAnnouncementListItem, useLoginAnnouncementsStore } from '@/stores/loginAnnouncements'
|
||||
import {
|
||||
type LoginAnnouncementListItem,
|
||||
useLoginAnnouncementsStore,
|
||||
} from '@/stores/loginAnnouncements'
|
||||
import { useMenuStore } from '@/stores/menu'
|
||||
import { useSnackbarStore } from '@/stores/snackbar'
|
||||
|
||||
@@ -71,8 +81,7 @@ const {
|
||||
mobileAnnouncementConfig: mobileAnnouncement,
|
||||
selectedAnnouncement,
|
||||
selectedAnnouncementDetail,
|
||||
} =
|
||||
storeToRefs(loginAnnouncementsStore)
|
||||
} = storeToRefs(loginAnnouncementsStore)
|
||||
|
||||
// 語系選項
|
||||
const locales = ['zh-TW', 'en-US']
|
||||
@@ -148,10 +157,10 @@ const form = computed(() => ({
|
||||
withCaptcha: withCaptcha.value,
|
||||
captcha: authStore.captcha
|
||||
? {
|
||||
imgUrl: authStore.captcha.dntCaptchaImgUrl,
|
||||
id: authStore.captcha.dntCaptchaId,
|
||||
tokenValue: authStore.captcha.dntCaptchaTokenValue,
|
||||
}
|
||||
imgUrl: authStore.captcha.dntCaptchaImgUrl,
|
||||
id: authStore.captcha.dntCaptchaId,
|
||||
tokenValue: authStore.captcha.dntCaptchaTokenValue,
|
||||
}
|
||||
: undefined,
|
||||
captchaValue: captchaValue.value,
|
||||
captchaLoading: authStore.captchaLoading,
|
||||
@@ -164,7 +173,6 @@ const form = computed(() => ({
|
||||
},
|
||||
}))
|
||||
|
||||
|
||||
// 右上工具列設定(含顯示開關)
|
||||
const toolbar = computed(() => ({
|
||||
// 功能開關:是否顯示語系切換工具列
|
||||
@@ -174,37 +182,37 @@ const toolbar = computed(() => ({
|
||||
}))
|
||||
|
||||
// 事件處理
|
||||
function handleForgotPassword (e: MouseEvent) {
|
||||
function handleForgotPassword(e: MouseEvent) {
|
||||
console.log('Playground Forgot Password Click:', e)
|
||||
}
|
||||
|
||||
function handleChangeLocale (nextLocale: string) {
|
||||
function handleChangeLocale(nextLocale: string) {
|
||||
locale.value = nextLocale
|
||||
localStorage.setItem('playground.locale', nextLocale)
|
||||
}
|
||||
|
||||
async function handleCaptchaRefresh () {
|
||||
async function handleCaptchaRefresh() {
|
||||
captchaValue.value = ''
|
||||
await authStore.getCaptcha()
|
||||
}
|
||||
|
||||
function handleCaptchaChange (value: string) {
|
||||
function handleCaptchaChange(value: string) {
|
||||
captchaValue.value = value
|
||||
}
|
||||
|
||||
function handleToggleLayout () {
|
||||
function handleToggleLayout() {
|
||||
const layoutOrder: LayoutType[] = ['side-left', 'side-right', 'card']
|
||||
const currentIndex = layoutOrder.indexOf(formPositionLayout.value)
|
||||
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % layoutOrder.length
|
||||
formPositionLayout.value = layoutOrder[nextIndex] ?? 'side-left'
|
||||
}
|
||||
|
||||
function handleSelectAnnouncement (item: LoginAnnouncementListItem) {
|
||||
function handleSelectAnnouncement(item: LoginAnnouncementListItem) {
|
||||
loginAnnouncementsStore.selectById(item.id)
|
||||
announcementDialogVisible.value = true
|
||||
}
|
||||
|
||||
async function onLogin (data: Record<string, unknown>) {
|
||||
async function onLogin(data: Record<string, unknown>) {
|
||||
if (withCaptcha.value && !captchaValue.value) {
|
||||
dialogTitle.value = t('common.notice')
|
||||
dialogMessage.value = t('pages.login.alert.verifyRequired')
|
||||
|
||||
Reference in New Issue
Block a user