From 27bbd35057ba2a309f407cbe3a208fa864d6d04d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=9D=E5=85=88=E7=91=9E?= <1490493387@qq.com> Date: Sat, 12 Mar 2022 00:18:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95=E5=92=8C=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8E=A5=E5=8F=A3typescript=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=A3=B0=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/login/index.ts | 20 +- src/api/system/user.ts | 15 +- src/store/modules/user.ts | 59 +-- src/types/api/base.d.ts | 11 + src/types/api/login.d.ts | 18 + src/types/api/user.d.ts | 20 + src/types/index.d.ts | 2 + src/views/system/user/index.vue | 663 +++++++++++++++----------------- 8 files changed, 415 insertions(+), 393 deletions(-) create mode 100644 src/types/api/base.d.ts create mode 100644 src/types/api/login.d.ts create mode 100644 src/types/api/user.d.ts create mode 100644 src/types/index.d.ts diff --git a/src/api/login/index.ts b/src/api/login/index.ts index 92e4029d..95ba21b3 100644 --- a/src/api/login/index.ts +++ b/src/api/login/index.ts @@ -1,13 +1,15 @@ +import { LoginRequestParam, LoginResponseData } from "@/types"; import request from "@/utils/request"; +import { AxiosPromise } from "axios"; /** * 登录 * @param data */ -export function login(data: object) { +export function login(data: LoginRequestParam): AxiosPromise { return request({ url: '/youlai-auth/oauth/token', - method:'post', + method: 'post', params: data, headers: { 'Authorization': 'Basic bWFsbC1hZG1pbi13ZWI6MTIzNDU2' // 客户端信息Base64明文:mall-admin-web:123456 @@ -15,16 +17,6 @@ export function login(data: object) { }) } -/** - * 登录成功后获取用户信息(包括用户头像、权限列表等) - */ -export function getUserInfo() { - return request({ - url: '/youlai-admin/api/v1/users/me', - method: 'get' - }) -} - /** * 注销 */ @@ -38,9 +30,9 @@ export function logout() { /** * 获取图片验证码 */ -export function getCaptcha() { +export function getCaptcha(): AxiosPromise { return request({ - url: '/captcha?t='+(new Date()).getTime().toString(), + url: '/captcha?t=' + (new Date()).getTime().toString(), method: 'get' }) } \ No newline at end of file diff --git a/src/api/system/user.ts b/src/api/system/user.ts index cd55e246..a90c1605 100644 --- a/src/api/system/user.ts +++ b/src/api/system/user.ts @@ -1,11 +1,24 @@ import request from "@/utils/request"; +import { AxiosPromise } from "axios"; +import { UserInfo, UserQueryParam } from "@/types"; + +/** + * 登录成功后获取用户信息(包括用户头像、权限列表等) + */ +export function getUserInfo(): AxiosPromise { + return request({ + url: '/youlai-admin/api/v1/users/me', + method: 'get' + }) +} + /** * 获取用户分页列表 * * @param queryParams */ -export function listUsersWithPage(queryParams: any) { +export function listUserPages(queryParams: UserQueryParam) { return request({ url: '/youlai-admin/api/v1/users/page', method: 'get', diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 3d5b9670..2eb32dc5 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -1,12 +1,13 @@ import { defineStore } from "pinia"; -import {UserState} from "@/store/interface"; -import {localStorage} from "@/utils/storage"; -import {getUserInfo, login, logout} from "@/api/login"; -import {resetRouter} from "@/router"; +import { UserState } from "@/store/interface"; +import { localStorage } from "@/utils/storage"; +import { login, logout } from "@/api/login"; +import { resetRouter } from "@/router"; +import { getUserInfo } from "@/api/system/user"; - const useUserStore = defineStore({ - id:"user", - state: ():UserState=>({ +const useUserStore = defineStore({ + id: "user", + state: (): UserState => ({ token: localStorage.get('token') || '', nickname: '', avatar: '', @@ -14,7 +15,7 @@ import {resetRouter} from "@/router"; perms: [] }), actions: { - async RESET_STATE () { + async RESET_STATE() { this.$reset() }, /** @@ -26,7 +27,7 @@ import {resetRouter} from "@/router"; * uuid: 匹配正确验证码的 key */ login(userInfo: { username: string, password: string, code: string, uuid: string }) { - const {username, password, code, uuid} = userInfo + const { username, password, code, uuid } = userInfo return new Promise((resolve, reject) => { login( { @@ -37,7 +38,7 @@ import {resetRouter} from "@/router"; uuid: uuid } ).then(response => { - const {access_token, token_type} = response.data + const { access_token, token_type } = response.data const accessToken = token_type + " " + access_token localStorage.set("token", accessToken) this.token = accessToken @@ -52,24 +53,24 @@ import {resetRouter} from "@/router"; */ getUserInfo() { return new Promise(((resolve, reject) => { - getUserInfo().then(response => { - const {data} = response - if (!data) { - return reject('Verification failed, please Login again.') - } - const {nickname, avatar, roles, perms} = data - if (!roles || roles.length <= 0) { - reject('getUserInfo: roles must be a non-null array!') - } - this.nickname = nickname - this.avatar = avatar - this.roles = roles - this.perms = perms - resolve(data) - }).catch(error => { - reject(error) - }) + getUserInfo().then(response => { + const { data } = response + if (!data) { + return reject('Verification failed, please Login again.') + } + const { nickname, avatar, roles, perms } = data + if (!roles || roles.length <= 0) { + reject('getUserInfo: roles must be a non-null array!') + } + this.nickname = nickname + this.avatar = avatar + this.roles = roles + this.perms = perms + resolve(data) + }).catch(error => { + reject(error) }) + }) ) }, @@ -92,8 +93,8 @@ import {resetRouter} from "@/router"; /** * 清除 Token */ - resetToken(){ - return new Promise(resolve=>{ + resetToken() { + return new Promise(resolve => { localStorage.remove('token') this.RESET_STATE() resolve(null) diff --git a/src/types/api/base.d.ts b/src/types/api/base.d.ts new file mode 100644 index 00000000..8aeee52a --- /dev/null +++ b/src/types/api/base.d.ts @@ -0,0 +1,11 @@ + +export interface Page { + pageNum: number, + pageSize: number +} + +export interface PageResult { + data: T, + total: number +} + diff --git a/src/types/api/login.d.ts b/src/types/api/login.d.ts new file mode 100644 index 00000000..a71ef224 --- /dev/null +++ b/src/types/api/login.d.ts @@ -0,0 +1,18 @@ +/** + * 登录请求参数 + */ +export interface LoginRequestParam { + username: string, + password: string, + grant_type: string, + code: string, + uuid: string, +} + +/** + * 登录响应参数 + */ +export interface LoginResponseData { + access_token: string, + token_type: string +} \ No newline at end of file diff --git a/src/types/api/user.d.ts b/src/types/api/user.d.ts new file mode 100644 index 00000000..fd337fc8 --- /dev/null +++ b/src/types/api/user.d.ts @@ -0,0 +1,20 @@ +import { Page, PageResult } from "./base" + +/** + * 用户信息 + */ +export interface UserInfo { + nickname: string, + avatar: string, + roles: string[], + perms: string[] +} + +/** + * 用户查询参数 + */ +export interface UserQueryParam extends Page { + keywords: String | undefined, + status: number | undefined , + deptId: number | undefined +} diff --git a/src/types/index.d.ts b/src/types/index.d.ts new file mode 100644 index 00000000..f2da9c54 --- /dev/null +++ b/src/types/index.d.ts @@ -0,0 +1,2 @@ +export * from './api/login' +export * from './api/user' \ No newline at end of file diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 6e816f9f..c7241b54 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -1,58 +1,48 @@