diff --git a/packages/toolkits/pro/template/server/nestJs/src/auth/auth.controller.ts b/packages/toolkits/pro/template/server/nestJs/src/auth/auth.controller.ts index db59250d..26b8b048 100644 --- a/packages/toolkits/pro/template/server/nestJs/src/auth/auth.controller.ts +++ b/packages/toolkits/pro/template/server/nestJs/src/auth/auth.controller.ts @@ -19,6 +19,6 @@ export class AuthController { @Post('logout') @UseGuards(AuthGuard) async logout(@Body() body: LogoutAuthDto) { - return this.authService.logout(body.email); + return this.authService.logout(body.token); } } diff --git a/packages/toolkits/pro/template/server/nestJs/src/auth/auth.service.ts b/packages/toolkits/pro/template/server/nestJs/src/auth/auth.service.ts index d59a3cad..6bf5bd11 100644 --- a/packages/toolkits/pro/template/server/nestJs/src/auth/auth.service.ts +++ b/packages/toolkits/pro/template/server/nestJs/src/auth/auth.service.ts @@ -1,10 +1,10 @@ -import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; -import { CreateAuthDto } from './dto/create-auth.dto'; -import { InjectRepository } from '@nestjs/typeorm'; -import { encry, User } from '@app/models'; -import { Repository } from 'typeorm'; -import { JwtService } from '@nestjs/jwt'; -import { RedisService } from '../../libs/redis/redis.service'; +import {HttpException, HttpStatus, Injectable} from '@nestjs/common'; +import {CreateAuthDto} from './dto/create-auth.dto'; +import {InjectRepository} from '@nestjs/typeorm'; +import {encry, User} from '@app/models'; +import {Repository} from 'typeorm'; +import {JwtService} from '@nestjs/jwt'; +import {RedisService} from '../../libs/redis/redis.service'; @Injectable() export class AuthService { @@ -13,21 +13,24 @@ export class AuthService { private user: Repository, private jwtService: JwtService, private readonly redisService: RedisService - ) {} + ) { + } async getToken(userId: string): Promise { return this.redisService.getUserToken(`user:${userId}:token`); } - async logout(email: string): Promise { + async logout(token: string): Promise { + //通过token解析email + const decoded = await this.jwtService.verify(token); //退出登录后,将token从Redis删除 - await this.redisService.delUserToken(`user:${email}:token`); + await this.redisService.delUserToken(`user:${decoded.email}:token`); return; } async login(dto: CreateAuthDto) { - const { email, password } = dto; - const userInfo = await this.user.findOne({ where: { email } }); + const {email, password} = dto; + const userInfo = await this.user.findOne({where: {email}}); if (userInfo === null || userInfo.deleteAt != 0) { throw new HttpException('该用户不存在', HttpStatus.NOT_FOUND); } @@ -44,6 +47,8 @@ export class AuthService { await token, await parseInt(process.env.REDIS_SECONDS) ); - return token; + return { + token: await token, + }; } } diff --git a/packages/toolkits/pro/template/server/nestJs/src/auth/dto/logout-auth.dto.ts b/packages/toolkits/pro/template/server/nestJs/src/auth/dto/logout-auth.dto.ts index 3c009c78..6581e0c5 100644 --- a/packages/toolkits/pro/template/server/nestJs/src/auth/dto/logout-auth.dto.ts +++ b/packages/toolkits/pro/template/server/nestJs/src/auth/dto/logout-auth.dto.ts @@ -2,5 +2,5 @@ import { IsNotEmpty } from 'class-validator'; export class LogoutAuthDto { @IsNotEmpty() - email: string; + token: string; } diff --git a/packages/toolkits/pro/template/server/nestJs/src/user/dto/pagination-query.dto.ts b/packages/toolkits/pro/template/server/nestJs/src/user/dto/pagination-query.dto.ts index 5333b535..21d6d8c9 100644 --- a/packages/toolkits/pro/template/server/nestJs/src/user/dto/pagination-query.dto.ts +++ b/packages/toolkits/pro/template/server/nestJs/src/user/dto/pagination-query.dto.ts @@ -1,9 +1,12 @@ import { IsOptional } from 'class-validator'; - +import { Transform} from 'class-transformer'; +import * as process from "process"; export class PaginationQueryDto { @IsOptional() - page?: number; + @Transform(value => isNaN(Number(value)) ? 1 : Number(value)) + page?: number = Number(process.env.PAGITION_PAGE); @IsOptional() - limit?: number; + @Transform(value => isNaN(Number(value)) ? 10 : Number(value)) + limit?: number = Number(process.env.PAGITION_PAGE); } diff --git a/packages/toolkits/pro/template/server/nestJs/src/user/user.service.ts b/packages/toolkits/pro/template/server/nestJs/src/user/user.service.ts index 5e2de286..eb0a064b 100644 --- a/packages/toolkits/pro/template/server/nestJs/src/user/user.service.ts +++ b/packages/toolkits/pro/template/server/nestJs/src/user/user.service.ts @@ -63,7 +63,7 @@ export class UserService { } async getUserInfo(email: string, relations: string[] = []) { - return this.userRep.findOne({ + return await this.userRep.findOne({ where: { email, deleteAt: 0 }, select: [ 'id', diff --git a/packages/toolkits/pro/template/tinyvue/.env b/packages/toolkits/pro/template/tinyvue/.env index 679e6062..9de4842e 100644 --- a/packages/toolkits/pro/template/tinyvue/.env +++ b/packages/toolkits/pro/template/tinyvue/.env @@ -1,5 +1,5 @@ VITE_CONTEXT=/vue-pro/ VITE_BASE_API=/api -VITE_SERVER_HOST= http://127.0.0.1:7001 -VITE_USE_MOCK= true -VITE_MOCK_IGNORE= /api/user/userInfo,/api/user/login,/api/user/register,/api/employee/getEmployee \ No newline at end of file +VITE_SERVER_HOST= http://127.0.0.1:3000 +VITE_USE_MOCK= false +VITE_MOCK_IGNORE= /api/user/userInfo,/api/user/login,/api/user/register,/api/employee/getEmployee diff --git a/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts b/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts index 951e8188..b18cbd3a 100644 --- a/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts +++ b/packages/toolkits/pro/template/tinyvue/config/vite.config.dev.ts @@ -7,7 +7,7 @@ const proxyConfig = { target: loadEnv('', process.cwd()).VITE_SERVER_HOST, changeOrigin: true, logLevel: 'debug', - rewrite: (path) => + rewrite: (path: string) => path.replace( new RegExp(`${loadEnv('', process.cwd()).VITE_BASE_API}`), '' diff --git a/packages/toolkits/pro/template/tinyvue/src/api/interceptor.ts b/packages/toolkits/pro/template/tinyvue/src/api/interceptor.ts index 472b78ae..7601da09 100644 --- a/packages/toolkits/pro/template/tinyvue/src/api/interceptor.ts +++ b/packages/toolkits/pro/template/tinyvue/src/api/interceptor.ts @@ -45,15 +45,7 @@ axios.interceptors.request.use( // add response interceptors axios.interceptors.response.use( (response: AxiosResponse) => { - const res = response.data; - if (res.code !== '0') { - res.errMsg && - Modal.message({ - message: res.errMsg, - status: 'error', - }); - return Promise.reject(new Error(res.errMsg || 'Error')); - } + const res = response; return res; }, (error) => { diff --git a/packages/toolkits/pro/template/tinyvue/src/api/user.ts b/packages/toolkits/pro/template/tinyvue/src/api/user.ts index e0806818..628e9eb7 100644 --- a/packages/toolkits/pro/template/tinyvue/src/api/user.ts +++ b/packages/toolkits/pro/template/tinyvue/src/api/user.ts @@ -2,8 +2,19 @@ import axios from 'axios'; import { UserInfo } from '@/store/modules/user/types'; export interface LoginData { + email: string; + password: string; +} + +export interface LogoutData { + token: string | null; +} + +export interface RegisterData { username: string; + email: string; password: string; + roleIds: number[]; } export interface LoginDataMail { @@ -28,18 +39,28 @@ export interface UserData { } export function login(data: LoginData) { - return axios.post('/api/user/login', data); + return axios.post('/api/auth/login', data); } export function loginMail(data: LoginDataMail) { return axios.post('/api/mail/login', data); } -export function logout() { - return axios.post('/api/user/logout'); +export function logout(data: LogoutData) { + return axios.post('/api/auth/logout', data); +} + +// 获取全部用户 +export function getAllUser() { + return axios.get(`/api/user`); +} + +// 获取单个用户 +export function getUserInfo(email: string) { + return axios.get(`/api/user/info/${email}`); } -export function getUserInfo() { - return axios.get(`/api/user/userInfo`); +export function delUser(email: string) { + return axios.delete(`/api/user/${email}`); } export function updateUserInfo(data: UserInfo) { diff --git a/packages/toolkits/pro/template/tinyvue/src/router/guard/permission.ts b/packages/toolkits/pro/template/tinyvue/src/router/guard/permission.ts index 03c53fc1..1e6246e1 100644 --- a/packages/toolkits/pro/template/tinyvue/src/router/guard/permission.ts +++ b/packages/toolkits/pro/template/tinyvue/src/router/guard/permission.ts @@ -31,7 +31,6 @@ export default function setupPermissionGuard(router: Router) { crossroads(); } else { try { - await userStore.info(); crossroads(); } catch (error) { next({ diff --git a/packages/toolkits/pro/template/tinyvue/src/store/modules/user/index.ts b/packages/toolkits/pro/template/tinyvue/src/store/modules/user/index.ts index 09992554..2eae9d3a 100644 --- a/packages/toolkits/pro/template/tinyvue/src/store/modules/user/index.ts +++ b/packages/toolkits/pro/template/tinyvue/src/store/modules/user/index.ts @@ -1,20 +1,23 @@ -import { defineStore } from 'pinia'; +import {defineStore} from 'pinia'; import { login as userLogin, - loginMail as userLoginMail, - getUserInfo, - updateUserInfo, + logout as userLogout, LoginData, LoginDataMail, + loginMail as userLoginMail, + updateUserInfo, + getUserInfo, + getAllUser, } from '@/api/user'; -import { setToken, clearToken } from '@/utils/auth'; -import { removeRouteListener } from '@/utils/route-listener'; -import { UserState, UserInfo } from './types'; +import {clearToken, getToken, setToken} from '@/utils/auth'; +import {removeRouteListener} from '@/utils/route-listener'; +import {UserInfo, UserState} from './types'; const useUserStore = defineStore('user', { state: (): UserState => ({ - userId: '10000', - username: 'admin', + id: '10000', + name: 'admin', + email: 'admin@no-reply.com', department: 'Tiny-Vue-Pro', employeeType: 'social recruitment', job: 'Front end', @@ -66,12 +69,6 @@ const useUserStore = defineStore('user', { this.filterType = []; }, - // Get user's information - async info() { - const res = await getUserInfo(); - this.setInfo(res.data); - }, - async updateInfo(data: UserInfo) { const res = await updateUserInfo(data); this.setInfo(res.data); @@ -81,8 +78,17 @@ const useUserStore = defineStore('user', { async login(loginForm: LoginData) { try { const res = await userLogin(loginForm); - const { token, userInfo } = res.data; + const { token } = res.data; setToken(token); + const userRes = await getUserInfo(loginForm.email) + const userInfo = { + id: userRes.data.id, + name:userRes.data.name, + role:userRes.data.role[0].name, + createTime:userRes.data.createTime, + updateTime:userRes.data.updateTime, + email:userRes.data.email, + } this.setInfo(userInfo); } catch (err) { clearToken(); @@ -102,6 +108,10 @@ const useUserStore = defineStore('user', { // Logout async logout() { + const data = { + token:getToken() + } + await userLogout(data); this.resetInfo(); clearToken(); removeRouteListener(); diff --git a/packages/toolkits/pro/template/tinyvue/src/store/modules/user/types.ts b/packages/toolkits/pro/template/tinyvue/src/store/modules/user/types.ts index 7954e618..c2059aaf 100644 --- a/packages/toolkits/pro/template/tinyvue/src/store/modules/user/types.ts +++ b/packages/toolkits/pro/template/tinyvue/src/store/modules/user/types.ts @@ -1,7 +1,8 @@ export type RoleType = '' | '*' | 'admin' | 'user'; export interface UserInfo { - userId: string; - username: string; + id: string; + name: string; + email: string; department?: string; employeeType?: string; job?: string; @@ -13,6 +14,8 @@ export interface UserInfo { address?: string; status?: string; role: RoleType; + updateTime?: any; + createTime?: any; } export interface UserFilterData { sort?: number; diff --git a/packages/toolkits/pro/template/tinyvue/src/views/form/step/components/head.vue b/packages/toolkits/pro/template/tinyvue/src/views/form/step/components/head.vue index 6b7db756..b46e549b 100644 --- a/packages/toolkits/pro/template/tinyvue/src/views/form/step/components/head.vue +++ b/packages/toolkits/pro/template/tinyvue/src/views/form/step/components/head.vue @@ -83,9 +83,6 @@ const userStore = useUserStore(); - onMounted(() => { - userStore.info(); - });