系统完善
This commit is contained in:
parent
98ba531305
commit
628e0d9461
2
.gitignore
vendored
2
.gitignore
vendored
@ -36,7 +36,7 @@ reading-platform-backend/prisma/migrations
|
|||||||
*.iml
|
*.iml
|
||||||
*.ipr
|
*.ipr
|
||||||
*.iws
|
*.iws
|
||||||
|
*/package-lock.json
|
||||||
# 日志
|
# 日志
|
||||||
logs/
|
logs/
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
Binary file not shown.
1034
reading-platform-frontend/package-lock.json
generated
1034
reading-platform-frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -11,8 +11,10 @@ declare module 'vue' {
|
|||||||
AAvatar: typeof import('ant-design-vue/es')['Avatar']
|
AAvatar: typeof import('ant-design-vue/es')['Avatar']
|
||||||
ABadge: typeof import('ant-design-vue/es')['Badge']
|
ABadge: typeof import('ant-design-vue/es')['Badge']
|
||||||
AButton: typeof import('ant-design-vue/es')['Button']
|
AButton: typeof import('ant-design-vue/es')['Button']
|
||||||
|
AButtonGroup: typeof import('ant-design-vue/es')['ButtonGroup']
|
||||||
ACard: typeof import('ant-design-vue/es')['Card']
|
ACard: typeof import('ant-design-vue/es')['Card']
|
||||||
ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
|
ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
|
||||||
|
ACheckboxGroup: typeof import('ant-design-vue/es')['CheckboxGroup']
|
||||||
ACol: typeof import('ant-design-vue/es')['Col']
|
ACol: typeof import('ant-design-vue/es')['Col']
|
||||||
ACollapse: typeof import('ant-design-vue/es')['Collapse']
|
ACollapse: typeof import('ant-design-vue/es')['Collapse']
|
||||||
ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
|
||||||
@ -47,16 +49,21 @@ declare module 'vue' {
|
|||||||
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
APopconfirm: typeof import('ant-design-vue/es')['Popconfirm']
|
||||||
AProgress: typeof import('ant-design-vue/es')['Progress']
|
AProgress: typeof import('ant-design-vue/es')['Progress']
|
||||||
ARadio: typeof import('ant-design-vue/es')['Radio']
|
ARadio: typeof import('ant-design-vue/es')['Radio']
|
||||||
|
ARadioButton: typeof import('ant-design-vue/es')['RadioButton']
|
||||||
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
|
ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup']
|
||||||
ARangePicker: typeof import('ant-design-vue/es')['RangePicker']
|
ARangePicker: typeof import('ant-design-vue/es')['RangePicker']
|
||||||
ARate: typeof import('ant-design-vue/es')['Rate']
|
ARate: typeof import('ant-design-vue/es')['Rate']
|
||||||
|
AResult: typeof import('ant-design-vue/es')['Result']
|
||||||
ARow: typeof import('ant-design-vue/es')['Row']
|
ARow: typeof import('ant-design-vue/es')['Row']
|
||||||
ASelect: typeof import('ant-design-vue/es')['Select']
|
ASelect: typeof import('ant-design-vue/es')['Select']
|
||||||
|
ASelectOptGroup: typeof import('ant-design-vue/es')['SelectOptGroup']
|
||||||
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
|
ASelectOption: typeof import('ant-design-vue/es')['SelectOption']
|
||||||
ASkeleton: typeof import('ant-design-vue/es')['Skeleton']
|
ASkeleton: typeof import('ant-design-vue/es')['Skeleton']
|
||||||
ASpace: typeof import('ant-design-vue/es')['Space']
|
ASpace: typeof import('ant-design-vue/es')['Space']
|
||||||
ASpin: typeof import('ant-design-vue/es')['Spin']
|
ASpin: typeof import('ant-design-vue/es')['Spin']
|
||||||
AStatistic: typeof import('ant-design-vue/es')['Statistic']
|
AStatistic: typeof import('ant-design-vue/es')['Statistic']
|
||||||
|
AStep: typeof import('ant-design-vue/es')['Step']
|
||||||
|
ASteps: typeof import('ant-design-vue/es')['Steps']
|
||||||
ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
|
ASubMenu: typeof import('ant-design-vue/es')['SubMenu']
|
||||||
ASwitch: typeof import('ant-design-vue/es')['Switch']
|
ASwitch: typeof import('ant-design-vue/es')['Switch']
|
||||||
ATable: typeof import('ant-design-vue/es')['Table']
|
ATable: typeof import('ant-design-vue/es')['Table']
|
||||||
|
|||||||
@ -20,54 +20,33 @@
|
|||||||
|
|
||||||
<!-- 角色选择 -->
|
<!-- 角色选择 -->
|
||||||
<div class="role-section">
|
<div class="role-section">
|
||||||
<div
|
<div v-for="role in roles" :key="role.value" :class="['role-btn', { active: formState.role === role.value }]"
|
||||||
v-for="role in roles"
|
@click="selectRole(role.value)">
|
||||||
:key="role.value"
|
|
||||||
:class="['role-btn', { active: formState.role === role.value }]"
|
|
||||||
@click="selectRole(role.value)"
|
|
||||||
>
|
|
||||||
<component :is="role.icon" />
|
<component :is="role.icon" />
|
||||||
<span>{{ role.label }}</span>
|
<span>{{ role.label }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 登录表单 -->
|
<!-- 登录表单 -->
|
||||||
<a-form
|
<a-form :model="formState" @finish="handleLogin" layout="vertical" class="login-form">
|
||||||
:model="formState"
|
|
||||||
@finish="handleLogin"
|
|
||||||
layout="vertical"
|
|
||||||
class="login-form"
|
|
||||||
>
|
|
||||||
<a-form-item name="account" :rules="[{ required: true, message: '请输入账号' }]">
|
<a-form-item name="account" :rules="[{ required: true, message: '请输入账号' }]">
|
||||||
<a-input
|
<a-input v-model:value="formState.account" placeholder="请输入账号" size="large" allow-clear>
|
||||||
v-model:value="formState.account"
|
<template #prefix>
|
||||||
placeholder="请输入账号"
|
<UserOutlined />
|
||||||
size="large"
|
</template>
|
||||||
allow-clear
|
|
||||||
>
|
|
||||||
<template #prefix><UserOutlined /></template>
|
|
||||||
</a-input>
|
</a-input>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item name="password" :rules="[{ required: true, message: '请输入密码' }]">
|
<a-form-item name="password" :rules="[{ required: true, message: '请输入密码' }]">
|
||||||
<a-input-password
|
<a-input-password v-model:value="formState.password" placeholder="请输入密码" size="large">
|
||||||
v-model:value="formState.password"
|
<template #prefix>
|
||||||
placeholder="请输入密码"
|
<LockOutlined />
|
||||||
size="large"
|
</template>
|
||||||
>
|
|
||||||
<template #prefix><LockOutlined /></template>
|
|
||||||
</a-input-password>
|
</a-input-password>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button type="primary" html-type="submit" size="large" block :loading="loading" class="login-btn">
|
||||||
type="primary"
|
|
||||||
html-type="submit"
|
|
||||||
size="large"
|
|
||||||
block
|
|
||||||
:loading="loading"
|
|
||||||
class="login-btn"
|
|
||||||
>
|
|
||||||
登录
|
登录
|
||||||
</a-button>
|
</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@ -77,12 +56,7 @@
|
|||||||
<div class="test-section">
|
<div class="test-section">
|
||||||
<div class="test-title">快速体验</div>
|
<div class="test-title">快速体验</div>
|
||||||
<div class="test-list">
|
<div class="test-list">
|
||||||
<span
|
<span v-for="acc in testAccounts" :key="acc.role" class="test-item" @click="fillAccount(acc)">
|
||||||
v-for="acc in testAccounts"
|
|
||||||
:key="acc.role"
|
|
||||||
class="test-item"
|
|
||||||
@click="fillAccount(acc)"
|
|
||||||
>
|
|
||||||
{{ acc.label }}: {{ acc.account }}
|
{{ acc.label }}: {{ acc.account }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@ -162,12 +136,12 @@ const handleLogin = async () => {
|
|||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
// 温暖明快的配色
|
// 温暖明快的配色
|
||||||
$primary: #FF8C42; // 温暖橙
|
$primary: #FF8C42; // 温暖橙
|
||||||
$primary-light: #FFF4EB;
|
$primary-light: #FFF4EB;
|
||||||
$secondary: #6C5CE7; // 梦幻紫
|
$secondary: #6C5CE7; // 梦幻紫
|
||||||
$accent: #00D9A5; // 薄荷绿
|
$accent: #00D9A5; // 薄荷绿
|
||||||
$coral: #FF7675; // 珊瑚粉
|
$coral: #FF7675; // 珊瑚粉
|
||||||
$sky: #74B9FF; // 天空蓝
|
$sky: #74B9FF; // 天空蓝
|
||||||
$text-dark: #2D3436;
|
$text-dark: #2D3436;
|
||||||
$text-gray: #636E72;
|
$text-gray: #636E72;
|
||||||
$text-light: #B2BEC3;
|
$text-light: #B2BEC3;
|
||||||
@ -382,9 +356,8 @@ $bg-cream: #FEFEFE;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试账号 - 暂时隐藏
|
// 测试账号
|
||||||
.test-section {
|
.test-section {
|
||||||
display: none;
|
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
border-top: 1px solid #F5F5F5;
|
border-top: 1px solid #F5F5F5;
|
||||||
|
|||||||
2
reading-platform-frontend/src/vite-env.d.ts
vendored
2
reading-platform-frontend/src/vite-env.d.ts
vendored
@ -1,5 +1,7 @@
|
|||||||
/// <reference types="vite/client" />
|
/// <reference types="vite/client" />
|
||||||
|
|
||||||
|
declare module 'virtual:uno.css' {}
|
||||||
|
|
||||||
interface ImportMetaEnv {
|
interface ImportMetaEnv {
|
||||||
readonly VITE_API_URL: string
|
readonly VITE_API_URL: string
|
||||||
readonly VITE_SERVER_BASE_URL: string
|
readonly VITE_SERVER_BASE_URL: string
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user