31 changed files with 485 additions and 124 deletions
@ -0,0 +1,2 @@ |
|||
export * from './modules'; |
|||
export type * from './types'; |
|||
@ -0,0 +1 @@ |
|||
export * from './user'; |
|||
@ -0,0 +1,22 @@ |
|||
import type { UserApiType } from '@/apis/types'; |
|||
import type { UserInfo } from '@vben/types'; |
|||
|
|||
import { request } from '@/apis/request'; |
|||
|
|||
/** |
|||
* 登录 |
|||
*/ |
|||
async function userLogin(data: UserApiType.LoginParams) { |
|||
return request<UserApiType.LoginResult>('/login', { data, method: 'post' }); |
|||
} |
|||
|
|||
/** |
|||
* 获取用户信息 |
|||
*/ |
|||
async function getUserInfo() { |
|||
return request<UserInfo>('/getUserInfo', { method: 'get' }); |
|||
} |
|||
|
|||
export { getUserInfo, userLogin }; |
|||
|
|||
export * from './user'; |
|||
@ -0,0 +1 @@ |
|||
export type * from './user'; |
|||
@ -1 +0,0 @@ |
|||
export * from './modules/user'; |
|||
@ -1,23 +0,0 @@ |
|||
import type { UserInfo } from '@vben/types'; |
|||
|
|||
import { request } from '@/services/request'; |
|||
|
|||
import type { UserApi } from './typing'; |
|||
|
|||
/** |
|||
* 登录 |
|||
*/ |
|||
async function userLogin(data: UserApi.LoginParams) { |
|||
return request<UserApi.LoginResult>('/login', { data, method: 'post' }); |
|||
} |
|||
|
|||
/** |
|||
* 获取用户信息 |
|||
*/ |
|||
async function getUserInfo() { |
|||
return request<UserInfo>('/getUserInfo', { method: 'get' }); |
|||
} |
|||
|
|||
export { getUserInfo, userLogin }; |
|||
|
|||
export type { UserApi } from './typing'; |
|||
@ -0,0 +1,53 @@ |
|||
import plugin from 'tailwindcss/plugin.js'; |
|||
|
|||
const enterAnimationPlugin = plugin(({ addUtilities }) => { |
|||
const maxChild = 5; |
|||
const utilities: Record<string, any> = {}; |
|||
for (let i = 1; i <= maxChild; i++) { |
|||
const baseDelay = 0.1; |
|||
const delay = `${baseDelay * i}s`; |
|||
|
|||
utilities[`.enter-x:nth-child(${i})`] = { |
|||
animation: `enter-x-animation 0.3s ease-in-out ${delay} forwards`, |
|||
opacity: '0', |
|||
transform: `translateX(50px)`, |
|||
}; |
|||
|
|||
utilities[`.enter-y:nth-child(${i})`] = { |
|||
animation: `enter-y-animation 0.3s ease-in-out ${delay} forwards`, |
|||
opacity: '0', |
|||
transform: `translateY(50px)`, |
|||
}; |
|||
|
|||
utilities[`.-enter-x:nth-child(${i})`] = { |
|||
animation: `enter-x-animation 0.3s ease-in-out ${delay} forwards`, |
|||
opacity: '0', |
|||
transform: `translateX(-50px)`, |
|||
}; |
|||
|
|||
utilities[`.-enter-y:nth-child(${i})`] = { |
|||
animation: `enter-y-animation 0.3s ease-in-out ${delay} forwards`, |
|||
opacity: '0', |
|||
transform: `translateY(-50px)`, |
|||
}; |
|||
} |
|||
|
|||
// 添加动画关键帧
|
|||
addUtilities(utilities); |
|||
addUtilities({ |
|||
'@keyframes enter-x-animation': { |
|||
to: { |
|||
opacity: '1', |
|||
transform: 'translateX(0)', |
|||
}, |
|||
}, |
|||
'@keyframes enter-y-animation': { |
|||
to: { |
|||
opacity: '1', |
|||
transform: 'translateY(0)', |
|||
}, |
|||
}, |
|||
}); |
|||
}); |
|||
|
|||
export { enterAnimationPlugin }; |
|||
@ -0,0 +1,327 @@ |
|||
@charset "UTF-8"; |
|||
|
|||
/** css 样式重置 */ |
|||
@import 'modern-normalize/modern-normalize.css'; |
|||
|
|||
#app, |
|||
.ant-app, |
|||
body, |
|||
html { |
|||
width: 100%; |
|||
height: 100%; |
|||
overscroll-behavior: none; |
|||
} |
|||
|
|||
*, |
|||
::after, |
|||
::before { |
|||
@apply border-border; |
|||
|
|||
box-sizing: border-box; |
|||
border-style: solid; |
|||
border-width: 0; |
|||
} |
|||
|
|||
body.invert-mode { |
|||
@apply invert; |
|||
} |
|||
|
|||
body.grayscale-mode { |
|||
@apply grayscale; |
|||
} |
|||
|
|||
html { |
|||
@apply text-foreground bg-background; |
|||
|
|||
font-variation-settings: normal; |
|||
text-size-adjust: 100%; |
|||
font-synthesis-weight: none; |
|||
scroll-behavior: smooth; |
|||
text-rendering: optimizelegibility; |
|||
-webkit-tap-highlight-color: transparent; |
|||
} |
|||
|
|||
a, |
|||
a:active, |
|||
a:hover, |
|||
a:link, |
|||
a:visited { |
|||
color: inherit; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
::view-transition-new(root), |
|||
::view-transition-old(root) { |
|||
mix-blend-mode: normal; |
|||
animation: none; |
|||
} |
|||
|
|||
::view-transition-old(root) { |
|||
z-index: 1; |
|||
} |
|||
|
|||
::view-transition-new(root) { |
|||
z-index: 2147483646; |
|||
} |
|||
|
|||
html.dark::view-transition-old(root) { |
|||
z-index: 2147483646; |
|||
} |
|||
|
|||
html.dark::view-transition-new(root) { |
|||
z-index: 1; |
|||
} |
|||
|
|||
input::placeholder, |
|||
textarea::placeholder { |
|||
opacity: 1; |
|||
} |
|||
|
|||
input:-webkit-autofill { |
|||
border: none; |
|||
box-shadow: 0 0 0 1000px transparent inset; |
|||
} |
|||
|
|||
input[type='number']::-webkit-inner-spin-button, |
|||
input[type='number']::-webkit-outer-spin-button { |
|||
margin: 0; |
|||
appearance: none; |
|||
} |
|||
|
|||
.slide-up-enter-active, |
|||
.slide-up-leave-active { |
|||
transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1); |
|||
} |
|||
|
|||
.slide-up-move { |
|||
transition: transform 0.3s; |
|||
} |
|||
|
|||
.slide-up-enter-from, |
|||
.slide-up-leave-to { |
|||
opacity: 0; |
|||
transform: translateY(-15px); |
|||
} |
|||
|
|||
.slide-down-enter-active, |
|||
.slide-down-leave-active { |
|||
transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1); |
|||
} |
|||
|
|||
.slide-down-move { |
|||
transition: transform 0.3s; |
|||
} |
|||
|
|||
.slide-down-enter-from, |
|||
.slide-down-leave-to { |
|||
opacity: 0; |
|||
transform: translateY(15px); |
|||
} |
|||
|
|||
.slide-left-enter-active, |
|||
.slide-left-leave-active { |
|||
transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1); |
|||
} |
|||
|
|||
.slide-left-move { |
|||
transition: transform 0.3s; |
|||
} |
|||
|
|||
.slide-left-enter-from, |
|||
.slide-left-leave-to { |
|||
opacity: 0; |
|||
transform: translateX(-15px); |
|||
} |
|||
|
|||
.slide-right-enter-active, |
|||
.slide-right-leave-active { |
|||
transition: 0.25s cubic-bezier(0.25, 0.8, 0.5, 1); |
|||
} |
|||
|
|||
.slide-right-move { |
|||
transition: transform 0.3s; |
|||
} |
|||
|
|||
.slide-right-enter-from, |
|||
.slide-right-leave-to { |
|||
opacity: 0; |
|||
transform: translateX(15px); |
|||
} |
|||
|
|||
.fade-transition-enter-active, |
|||
.fade-transition-leave-active { |
|||
transition: opacity 0.2s ease-in-out; |
|||
} |
|||
|
|||
.fade-transition-enter-from, |
|||
.fade-transition-leave-to { |
|||
opacity: 0; |
|||
} |
|||
|
|||
.fade-enter-active, |
|||
.fade-leave-active { |
|||
transition: opacity 0.2s ease-in-out; |
|||
} |
|||
|
|||
.fade-enter-from, |
|||
.fade-leave-to { |
|||
opacity: 0; |
|||
} |
|||
|
|||
/* fade-slide */ |
|||
.fade-slide-leave-active, |
|||
.fade-slide-enter-active { |
|||
transition: all 0.3s; |
|||
} |
|||
|
|||
.fade-slide-enter-from { |
|||
opacity: 0; |
|||
transform: translateX(-30px); |
|||
} |
|||
|
|||
.fade-slide-leave-to { |
|||
opacity: 0; |
|||
transform: translateX(30px); |
|||
} |
|||
|
|||
.fade-down-enter-active, |
|||
.fade-down-leave-active { |
|||
transition: |
|||
opacity 0.25s, |
|||
transform 0.3s; |
|||
} |
|||
|
|||
.fade-down-enter-from { |
|||
opacity: 0; |
|||
transform: translateY(-10%); |
|||
} |
|||
|
|||
.fade-down-leave-to { |
|||
opacity: 0; |
|||
transform: translateY(10%); |
|||
} |
|||
|
|||
.fade-scale-leave-active, |
|||
.fade-scale-enter-active { |
|||
transition: all 0.28s; |
|||
} |
|||
|
|||
.fade-scale-enter-from { |
|||
opacity: 0; |
|||
transform: scale(1.2); |
|||
} |
|||
|
|||
.fade-scale-leave-to { |
|||
opacity: 0; |
|||
transform: scale(0.8); |
|||
} |
|||
|
|||
.fade-up-enter-active, |
|||
.fade-up-leave-active { |
|||
transition: |
|||
opacity 0.2s, |
|||
transform 0.25s; |
|||
} |
|||
|
|||
.fade-up-enter-from { |
|||
opacity: 0; |
|||
transform: translateY(10%); |
|||
} |
|||
|
|||
.fade-up-leave-to { |
|||
opacity: 0; |
|||
transform: translateY(-10%); |
|||
} |
|||
|
|||
@keyframes fade-slide { |
|||
0% { |
|||
opacity: 0; |
|||
transform: translateX(-30px); |
|||
} |
|||
|
|||
50% { |
|||
opacity: 1; |
|||
} |
|||
|
|||
100% { |
|||
opacity: 0; |
|||
transform: translateX(30px); |
|||
} |
|||
} |
|||
|
|||
@keyframes fade { |
|||
0% { |
|||
opacity: 0; |
|||
} |
|||
|
|||
50% { |
|||
opacity: 1; |
|||
} |
|||
|
|||
100% { |
|||
opacity: 0; |
|||
} |
|||
} |
|||
|
|||
@keyframes fade-up { |
|||
0% { |
|||
opacity: 0; |
|||
transform: translateY(10%); |
|||
} |
|||
|
|||
50% { |
|||
opacity: 1; |
|||
} |
|||
|
|||
100% { |
|||
opacity: 0; |
|||
transform: translateY(-10%); |
|||
} |
|||
} |
|||
|
|||
@keyframes fade-down { |
|||
0% { |
|||
opacity: 0; |
|||
transform: translateY(-10%); |
|||
} |
|||
|
|||
50% { |
|||
opacity: 1; |
|||
} |
|||
|
|||
100% { |
|||
opacity: 0; |
|||
transform: translateY(10%); |
|||
} |
|||
} |
|||
|
|||
.fade-slow { |
|||
animation: fade 3s infinite; |
|||
} |
|||
|
|||
.fade-slide-slow { |
|||
animation: fade-slide 3s infinite; |
|||
} |
|||
|
|||
.fade-up-slow { |
|||
animation: fade-up 3s infinite; |
|||
} |
|||
|
|||
.fade-down-slow { |
|||
animation: fade-down 3s infinite; |
|||
} |
|||
|
|||
.collapse-transition { |
|||
transition: |
|||
0.2s height ease-in-out, |
|||
0.2s padding-top ease-in-out, |
|||
0.2s padding-bottom ease-in-out; |
|||
} |
|||
|
|||
.collapse-transition-leave-active, |
|||
.collapse-transition-enter-active { |
|||
transition: |
|||
0.2s max-height ease-in-out, |
|||
0.2s padding-top ease-in-out, |
|||
0.2s margin-top ease-in-out; |
|||
} |
|||
@ -1,7 +1,6 @@ |
|||
export type * from './access'; |
|||
export type * from './app'; |
|||
export type * from './flatten'; |
|||
export type * from './helper'; |
|||
export type * from './menu-record'; |
|||
export type * from './tabs'; |
|||
export type * from './tools'; |
|||
export type * from './vue-router'; |
|||
|
|||
@ -1,51 +0,0 @@ |
|||
$max-child: 5; |
|||
|
|||
@for $i from 1 through $max-child { |
|||
* > .enter-x:nth-child(#{$i}) { |
|||
transform: translateX(50px); |
|||
} |
|||
|
|||
* > .-enter-x:nth-child(#{$i}) { |
|||
transform: translateX(-50px); |
|||
} |
|||
|
|||
* > .enter-x:nth-child(#{$i}), |
|||
* > .-enter-x:nth-child(#{$i}) { |
|||
// z-index: 10 - $i; |
|||
opacity: 0; |
|||
animation: enter-x-animation 0.3s ease-in-out 0.2s; |
|||
animation-delay: 0.1s * $i; |
|||
animation-fill-mode: forwards; |
|||
} |
|||
|
|||
* > .enter-y:nth-child(#{$i}) { |
|||
transform: translateY(50px); |
|||
} |
|||
|
|||
* > .-enter-y:nth-child(#{$i}) { |
|||
transform: translateY(-50px); |
|||
} |
|||
|
|||
* > .enter-y:nth-child(#{$i}), |
|||
* > .-enter-y:nth-child(#{$i}) { |
|||
// z-index: 10 - $i; |
|||
opacity: 0; |
|||
animation: enter-y-animation 0.3s ease-in-out 0.2s; |
|||
animation-delay: 0.1s * $i; |
|||
animation-fill-mode: forwards; |
|||
} |
|||
} |
|||
|
|||
@keyframes enter-x-animation { |
|||
to { |
|||
opacity: 1; |
|||
transform: translateX(0); |
|||
} |
|||
} |
|||
|
|||
@keyframes enter-y-animation { |
|||
to { |
|||
opacity: 1; |
|||
transform: translateY(0); |
|||
} |
|||
} |
|||
@ -1,2 +1,3 @@ |
|||
export type * from './ui'; |
|||
export type * from './user'; |
|||
export type * from '@vben-core/typings'; |
|||
|
|||
Loading…
Reference in new issue