From e2676f9ec894b1b61cd1c774dd49e6b2d5c54aa4 Mon Sep 17 00:00:00 2001 From: osiris Date: Thu, 29 Feb 2024 18:07:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=EF=BC=8C=20=E5=B7=A5=E5=85=B7=E6=94=B6?= =?UTF-8?q?=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mock/tools.ts | 47 +- src/api/tools/index.ts | 16 +- src/api/tools/type.ts | 15 +- src/api/user/index.ts | 53 +++ src/api/user/type.ts | 49 +++ src/assets/default_avatar.png | Bin 0 -> 5750 bytes src/components/Home/About.vue | 2 +- src/components/Home/Home.vue | 37 +- .../Layout/DetailHeader/DetailHeader.vue | 51 ++- src/components/Layout/Header/Header.vue | 80 +++- src/components/Layout/Login/Login.vue | 406 ++++++++++++++++++ src/store/modules/tools.ts | 51 ++- src/store/modules/user.ts | 105 +++++ src/utils/request.ts | 17 +- 14 files changed, 872 insertions(+), 57 deletions(-) create mode 100644 src/api/user/index.ts create mode 100644 src/api/user/type.ts create mode 100644 src/assets/default_avatar.png create mode 100644 src/components/Layout/Login/Login.vue create mode 100644 src/store/modules/user.ts diff --git a/mock/tools.ts b/mock/tools.ts index 579606e..2670e74 100644 --- a/mock/tools.ts +++ b/mock/tools.ts @@ -124,8 +124,8 @@ function getTools() { logo: 'https://baseran2.oss-cn-shenzhen.aliyuncs.com/toools-web/icon/icon_%E7%BC%96%E7%A0%81%E5%AF%B9%E7%85%A7.png', desc: 'ASCII码表,控制代码、标准ASCII字符和非标准ASCII字符对照表', url: '/ascii', - cateId: 2, - cate: '开发运维' + cateId: 4, + cate: '教育学术' }, { id: 1, @@ -214,8 +214,8 @@ function getTools() { logo: 'https://baseran2.oss-cn-shenzhen.aliyuncs.com/toools-web/icon/text_to_img.png', desc: '把文本转换成图片,生成长图,具有超多个性文字排版', url: '/textToImg', - cateId: 3, - cate: '文本处理' + cateId: 5, + cate: '设计工具' } ] } @@ -255,16 +255,6 @@ function getToolsCate() { cateId: 2, cate: '开发运维', }, - - { - id: 1, - title: 'ASCII码表', - logo: 'https://baseran2.oss-cn-shenzhen.aliyuncs.com/toools-web/icon/icon_%E7%BC%96%E7%A0%81%E5%AF%B9%E7%85%A7.png', - desc: 'ASCII码表,控制代码、标准ASCII字符和非标准ASCII字符对照表', - url: '/ascii', - cateId: 2, - cate: '开发运维' - }, { id: 1, title: '时间戳转换', @@ -335,15 +325,6 @@ function getToolsCate() { cateId: 3, cate: '文本处理' }, - { - id: 1, - title: '文本转图片', - logo: 'https://baseran2.oss-cn-shenzhen.aliyuncs.com/toools-web/icon/text_to_img.png', - desc: '把文本转换成图片,生成长图,具有超多个性文字排版', - url: '/textToImg', - cateId: 3, - cate: '文本处理' - }, { id: 1, title: '摩斯电码', @@ -386,7 +367,16 @@ function getToolsCate() { url: '/scaletran', cateId: 4, cate: '教育学术', - } + }, + { + id: 1, + title: 'ASCII码表', + logo: 'https://baseran2.oss-cn-shenzhen.aliyuncs.com/toools-web/icon/icon_%E7%BC%96%E7%A0%81%E5%AF%B9%E7%85%A7.png', + desc: 'ASCII码表,控制代码、标准ASCII字符和非标准ASCII字符对照表', + url: '/ascii', + cateId: 4, + cate: '教育学术' + }, ] }, { @@ -420,6 +410,15 @@ function getToolsCate() { url: '/signimage', cateId: 5, cate: '设计工具', + }, + { + id: 1, + title: '文本转图片', + logo: 'https://baseran2.oss-cn-shenzhen.aliyuncs.com/toools-web/icon/text_to_img.png', + desc: '把文本转换成图片,生成长图,具有超多个性文字排版', + url: '/textToImg', + cateId: 5, + cate: '设计工具' } ] }, diff --git a/src/api/tools/index.ts b/src/api/tools/index.ts index 6a43f47..63f14bc 100644 --- a/src/api/tools/index.ts +++ b/src/api/tools/index.ts @@ -5,11 +5,13 @@ import type { ToolsReqData, ToolsResponseData, ToolCateResponseData, - ToolRecommendResponseData + ToolRecommendResponseData, + ToolCollectResponseData, + CollectReqData, + GetToolCollectResponseData } from './type' //项目用户相关的请求地址 - enum API { //获取tools GET_TOOLS = '/tools', @@ -17,6 +19,10 @@ enum API { GET_TOOL_CATES = '/tool/cates', //获取推荐 GET_TOOL_RECOMMEND = '/tool/recommends', + //收藏工具 + COLLECT = '/tool/collects', + //我的收藏 + GET_TOOL_COLLECTS = '/get/tool/collects', } //获取tools export const getTools = (data: ToolsReqData) => request.get(API.GET_TOOLS, { @@ -25,4 +31,8 @@ export const getTools = (data: ToolsReqData) => request.get request.get(API.GET_TOOL_CATES) //获取推荐 -export const getToolRecommend = () => request.get(API.GET_TOOL_RECOMMEND) \ No newline at end of file +export const getToolRecommend = () => request.get(API.GET_TOOL_RECOMMEND) +//收藏工具 +export const toolCollect = (data: CollectReqData) => request.post(API.COLLECT + '/' + data.toolId) +//我的收藏 +export const getToolCollect = () => request.get(API.GET_TOOL_COLLECTS) \ No newline at end of file diff --git a/src/api/tools/type.ts b/src/api/tools/type.ts index 75536d1..4dce600 100644 --- a/src/api/tools/type.ts +++ b/src/api/tools/type.ts @@ -2,7 +2,8 @@ import { ResponseData } from "../common" export interface ToolsReqData { cateId: number, - title: string + title: string, + route: string, } //tools @@ -26,6 +27,10 @@ export interface ToolCate { list: ToolsInfo[] } +export interface CollectReqData { + toolId: number +} + //tools list response export interface ToolsResponseData extends ResponseData { data: ToolsInfo[] @@ -41,4 +46,12 @@ export interface ToolRecommendResponseData extends ResponseData { data: ToolsInfo[] } +//tools collect response +export interface ToolCollectResponseData extends ResponseData { +} + +//get collect response +export interface GetToolCollectResponseData extends ResponseData { + +} \ No newline at end of file diff --git a/src/api/user/index.ts b/src/api/user/index.ts new file mode 100644 index 0000000..38d2990 --- /dev/null +++ b/src/api/user/index.ts @@ -0,0 +1,53 @@ +import request from '@/utils/request' + +import type { + LoginReqData, + LoginResponseData, + LogoutResponseData, + RegisterReqData, + RegisterResponseData, + SendCodeEmailResponseData, + sendCodeEmailReq, + UserInfoResponseData, + ForgetReqData, + ForgetResponseData +} from './type' + +//项目用户相关的请求地址 +enum API { + //login + LOGIN = '/login', + //logout + LOGOUT = '/logout', + //register + REGISTER = '/register', + //forget + FORGET = '/forget/password', + //注册 - 发送邮箱验证码 + SEND_CODE_EMAIL = '/send/register/code', + //忘记密码 - 发送邮箱验证码 + SEND_FORGET_CODE_EMAIL = '/send/forget/password/code', + //获取用户信息 + USER_INFO = '/user/info' +} + +//login +export const login = (data: LoginReqData) => request.post(API.LOGIN, data) + +//logout +export const logout = () => request.post(API.LOGOUT) + +//register +export const register = (data: RegisterReqData) => request.post(API.REGISTER, data) + +//forget +export const forget = (data: ForgetReqData) => request.post(API.FORGET, data) + +//register - send code +export const sendCodeEmail = (data: sendCodeEmailReq) => request.post(API.SEND_CODE_EMAIL, data) + +//forget - send code +export const sendForgetCodeEmail = (data: sendCodeEmailReq) => request.post(API.SEND_FORGET_CODE_EMAIL, data) + +//获取用户信息 +export const userInfo = () => request.get(API.USER_INFO) \ No newline at end of file diff --git a/src/api/user/type.ts b/src/api/user/type.ts new file mode 100644 index 0000000..4596e82 --- /dev/null +++ b/src/api/user/type.ts @@ -0,0 +1,49 @@ +import { ResponseData } from "../common" + +export interface LoginReqData { + email: string, + password: string +} + +export interface RegisterReqData { + email: string, + code: string, + password: string, + password_confirmation: string +} + +export interface ForgetReqData { + email: string, + code: string, + password: string, + password_confirmation: string +} + +export interface sendCodeEmailReq { + email: string +} + +export interface LoginResponseData extends ResponseData { + +} + +export interface LogoutResponseData extends ResponseData { + +} + +export interface RegisterResponseData extends ResponseData { + +} + +export interface ForgetResponseData extends ResponseData { + +} + +export interface SendCodeEmailResponseData extends ResponseData { + +} + +export interface UserInfoResponseData extends ResponseData { + +} + diff --git a/src/assets/default_avatar.png b/src/assets/default_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..de2cd7653be7d6615885c77f83be788974a3459b GIT binary patch literal 5750 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

-

本项目是一个开源工具站

+

本项目是一个开源工具站, 求星星


本项目开源地址:https://github.com/taoran1401/tools-web


diff --git a/src/components/Home/Home.vue b/src/components/Home/Home.vue index 8d0d322..b02507b 100644 --- a/src/components/Home/Home.vue +++ b/src/components/Home/Home.vue @@ -1,22 +1,45 @@ diff --git a/src/components/Layout/Login/Login.vue b/src/components/Layout/Login/Login.vue new file mode 100644 index 0000000..061bf63 --- /dev/null +++ b/src/components/Layout/Login/Login.vue @@ -0,0 +1,406 @@ + + + + + \ No newline at end of file diff --git a/src/store/modules/tools.ts b/src/store/modules/tools.ts index f28c2f3..b0b9144 100644 --- a/src/store/modules/tools.ts +++ b/src/store/modules/tools.ts @@ -1,18 +1,21 @@ //创建tools相关的小工具 import { defineStore } from 'pinia' -import { getTools, getToolCate, getToolRecommend} from '@/api/tools' +import { getTools, getToolCate, getToolRecommend, toolCollect, getToolCollect } from '@/api/tools' import { getIp } from '@/api/ip' -import type { ToolsReqData, ToolsInfo, ToolCate } from '@/api/tools/type' +import type { ToolsReqData, ToolsInfo, ToolCate, CollectReqData } from '@/api/tools/type' import type { IpReqData, IpInfo } from '@/api/ip/type' +import { useUserStore } from '@/store/modules/user' export const useToolsStore = defineStore('tools', { //用来存放变量 state: () => ({ list: [] as ToolsInfo[], + toolInfo: {} as ToolsInfo, cates: [] as ToolCate[], recommends: [] as ToolsInfo[], ipData: {} as IpInfo, - collect: [], + collect: [] as ToolsInfo[], + collectIds: [] as number[], }), //方法 actions: { @@ -27,6 +30,17 @@ export const useToolsStore = defineStore('tools', { return Promise.reject(new Error(result.message)) } }, + //获取tool info + async getToolInfo(data: ToolsReqData) { + //发送请求 + const result: any = await getTools(data) + if (result.code == 200) { + this.toolInfo = result.data[0] + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, //获取tools cate async getToolCate() { //发送请求 @@ -57,6 +71,37 @@ export const useToolsStore = defineStore('tools', { } else { return Promise.reject(new Error(result.message)) } + }, + //收藏工具 + async toolCollect(data: CollectReqData) { + if (!useUserStore().isLogin()) { + //未登录 + return + } + const result: any = await toolCollect(data) + if (result.code == 200) { + //收藏成功 + this.getCollect(); + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, + //我的收藏 + async getCollect() { + if (!useUserStore().isLogin()) { + //未登录 + return + } + const result: any = await getToolCollect() + if (result.code == 200) { + this.collect = result.data + this.collectIds = this.collect.map(item => item.id) + console.log(this.collectIds) + return result.message + } else { + return Promise.reject(new Error(result.message)) + } } } }) \ No newline at end of file diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts new file mode 100644 index 0000000..f259d52 --- /dev/null +++ b/src/store/modules/user.ts @@ -0,0 +1,105 @@ +import { defineStore } from 'pinia' +import { login, register, sendCodeEmail, userInfo, logout, sendForgetCodeEmail, forget} from '@/api/user' +import type { LoginReqData, LoginResponseData, RegisterReqData, RegisterResponseData, SendCodeEmailResponseData, sendCodeEmailReq, ForgetReqData } from '@/api/user/type' +export const useUserStore = defineStore('user', { + //用来存放变量 + state: () => ({ + token: localStorage.getItem('TOKEN'),//token + username: '', + avatar: '', + email: '', + }), + //方法 + actions: { + //获取登录状态 + isLogin() { + let flag = false; + if (this.token != null && this.token != undefined && this.token != '') { + flag = true; + } + return flag; + }, + //login + async login(data: LoginReqData) { + //发送请求 + const result: any = await login(data) + if (result.code == 200) { + //仓库存储token + this.token = result.data.token + //本地存储token + localStorage.setItem('TOKEN', result.data.token) + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, + //logout + async logout() { + //发送请求 + const result: any = await logout() + if (result.code == 200) { + //本地存储token + localStorage.setItem('TOKEN', '') + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, + //register + async register(data: RegisterReqData) { + //发送请求 + const result: any = await register(data) + if (result.code == 200) { + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, + //forget + async forget(data: ForgetReqData) { + //发送请求 + const result: any = await forget(data) + if (result.code == 200) { + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, + //register - send code email + async sendCodeEmail(data: sendCodeEmailReq) { + //发送请求 + const result: any = await sendCodeEmail(data) + if (result.code == 200) { + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, + //forget - send code email + async sendForgetCodeEmail(data: sendCodeEmailReq) { + //发送请求 + const result: any = await sendForgetCodeEmail(data) + if (result.code == 200) { + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + }, + //获取用户信息 + async userInfo() { + if (this.token?.length == 0) { + return + } + //发送请求 + const result: any = await userInfo() + if (result.code == 200) { + this.username = result.data.nick_name + this.avatar = result.data.avatar + this.email = result.data.email + return result.message + } else { + return Promise.reject(new Error(result.message)) + } + } + } +}) \ No newline at end of file diff --git a/src/utils/request.ts b/src/utils/request.ts index 4cc367f..ce67a4c 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,5 +1,9 @@ import axios from "axios"; import { ElMessage } from "element-plus"; +import { useUserStore } from '@/store/modules/user' +//store +import pinia from '../store' //这里需要引入pinia +const userStore = useUserStore(pinia) //创建axios实例 let request = axios.create({ baseURL: import.meta.env.VITE_IS_MOCK == 'true' ? import.meta.env.VITE_APP_BASE_API : import.meta.env.VITE_SERVE + import.meta.env.VITE_APP_BASE_API, @@ -7,10 +11,20 @@ let request = axios.create({ }) //请求拦截器 request.interceptors.request.use(config => { + //获取token + if (userStore.token) { + // config.headers.token = userStore.token + config.headers.Authorization = 'Bearer ' + userStore.token + } return config; }); //响应拦截器 request.interceptors.response.use((response) => { + if (response.data.code == 401) { + //登录过期 + localStorage.setItem('TOKEN', '') + location.reload() + } return response.data; }, (error) => { //处理网络错误 @@ -18,7 +32,8 @@ request.interceptors.response.use((response) => { let status = error.response.status; switch (status) { case 401: - msg = "token过期"; + //msg = "token过期"; + msg = "登录过期"; break; case 403: msg = '无权访问';