| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- <script setup lang="ts">
- import Background from '@/pages/common/components/Background.vue'
- import { LockOnIcon, UserIcon } from 'tdesign-icons-vue-next'
- import { reactive, ref } from 'vue'
- import type { CreateTokenRequest } from '@/model/token'
- import { MessagePlugin } from 'tdesign-vue-next'
- import { useAppStore } from '@/stores/app'
- const loginForm = reactive<CreateTokenRequest>({
- password: '',
- username: ''
- })
- const loading = ref(false)
- const appStore = useAppStore()
- const handleLogin = async () => {
- if (!loginForm.username || !loginForm.password) {
- MessagePlugin.error('用户名或密码不能为空')
- return
- }
- try {
- await appStore.login(loginForm)
- } finally {
- loading.value = false
- }
- }
- </script>
- <template>
- <div class="w-[100vw] h-[100vh] px-20 flex items-center">
- <Background></Background>
- <div class="w-[400px]">
- <div class="text-4xl font-bold mb-12">欢迎到<br />布兰德后台管理系统</div>
- <div class="flex flex-col gap-6 mb-11">
- <TInput size="large" placeholder="账户" v-model="loginForm.username" clearable>
- <template #prefix-icon>
- <UserIcon></UserIcon>
- </template>
- </TInput>
- <TInput
- size="large"
- placeholder="密码"
- type="password"
- v-model="loginForm.password"
- clearable
- @enter="handleLogin"
- >
- <template #prefix-icon>
- <LockOnIcon></LockOnIcon>
- </template>
- </TInput>
- </div>
- <TButton size="large" :block="true" @click="handleLogin" :loading="loading">
- {{ loading ? '登录中' : '登录' }}
- </TButton>
- </div>
- </div>
- </template>
- <style scoped></style>
|