From 9a5581779428f816f87b50ddbde28fc5503e675c Mon Sep 17 00:00:00 2001 From: osiris Date: Mon, 13 May 2024 16:23:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=AA=E4=BF=9D=E7=95=99=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 8 +- src/api/tools/index.ts | 13 +- src/api/tools/type.ts | 10 - src/api/user/index.ts | 53 --- src/api/user/type.ts | 49 --- src/components/Home/Home.vue | 60 +-- .../Layout/DetailHeader/DetailHeader.vue | 33 +- src/components/Layout/Header/Header.vue | 77 +--- src/components/Layout/Left/Left.vue | 2 +- src/components/Layout/Login/Login.vue | 406 ------------------ src/store/modules/tools.ts | 36 +- src/store/modules/user.ts | 105 ----- src/utils/request.ts | 35 +- 13 files changed, 22 insertions(+), 865 deletions(-) delete mode 100644 src/api/user/index.ts delete mode 100644 src/api/user/type.ts delete mode 100644 src/components/Layout/Login/Login.vue delete mode 100644 src/store/modules/user.ts diff --git a/.env.example b/.env.example index 4506e1d..43a5c95 100644 --- a/.env.example +++ b/.env.example @@ -1,12 +1,12 @@ # 变量必须以 VITE_ 为前缀才能暴露给外部读取 NODE_ENV = 'development' # 网站名称 -VITE_APP_TITLE = '工具坊' -# 网站域名 -VITE_APP_WEBSITE = 'xxx.xxx.com' +VITE_APP_TITLE = 'tools-web' +# 简短描述 +VITE_APP_DESC = '一个轻量的工具集合' # base api VITE_APP_BASE_API = '/v1' -# 服务端地址: https://xxx.xxx.com +# 服务端地址: https://xxx.xxx.com; 使用mock时不需要填写 VITE_SERVE = '' # 自定义启动host VITE_HOST = '127.0.0.1' diff --git a/src/api/tools/index.ts b/src/api/tools/index.ts index 63f14bc..179d58d 100644 --- a/src/api/tools/index.ts +++ b/src/api/tools/index.ts @@ -6,9 +6,6 @@ import type { ToolsResponseData, ToolCateResponseData, ToolRecommendResponseData, - ToolCollectResponseData, - CollectReqData, - GetToolCollectResponseData } from './type' //项目用户相关的请求地址 @@ -19,10 +16,6 @@ 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, { @@ -31,8 +24,4 @@ export const getTools = (data: ToolsReqData) => request.get request.get(API.GET_TOOL_CATES) //获取推荐 -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 +export const getToolRecommend = () => request.get(API.GET_TOOL_RECOMMEND) \ No newline at end of file diff --git a/src/api/tools/type.ts b/src/api/tools/type.ts index 4dce600..070f11e 100644 --- a/src/api/tools/type.ts +++ b/src/api/tools/type.ts @@ -44,14 +44,4 @@ export interface ToolCateResponseData extends ResponseData { //tools recommend response 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 deleted file mode 100644 index 38d2990..0000000 --- a/src/api/user/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -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 deleted file mode 100644 index 4596e82..0000000 --- a/src/api/user/type.ts +++ /dev/null @@ -1,49 +0,0 @@ -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/components/Home/Home.vue b/src/components/Home/Home.vue index 548db02..fbfd978 100644 --- a/src/components/Home/Home.vue +++ b/src/components/Home/Home.vue @@ -1,14 +1,12 @@ @@ -170,30 +118,9 @@ onMounted(() => {
    -
  • - 建议/问题 -
  • -
  • - - - -
    - {{ userStore.email }} - 退出登录 -
    -
    -
  • -
  • - 登录 -
  • +
- diff --git a/src/components/Layout/Left/Left.vue b/src/components/Layout/Left/Left.vue index 10f0dc4..0a2ea9c 100644 --- a/src/components/Layout/Left/Left.vue +++ b/src/components/Layout/Left/Left.vue @@ -10,7 +10,7 @@ const router = useRouter() const route = useRoute() const appName = ref(import.meta.env.VITE_APP_TITLE || '工具坊') -const appNet = ref(import.meta.env.VITE_APP_WEBSITE || '') +const appNet = ref(import.meta.env.VITE_APP_DESC || '') //菜单选中 const defaultActive = ref('collect') //默认展开的菜单 diff --git a/src/components/Layout/Login/Login.vue b/src/components/Layout/Login/Login.vue deleted file mode 100644 index cb0e53f..0000000 --- a/src/components/Layout/Login/Login.vue +++ /dev/null @@ -1,406 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/store/modules/tools.ts b/src/store/modules/tools.ts index 189087b..98a757d 100644 --- a/src/store/modules/tools.ts +++ b/src/store/modules/tools.ts @@ -1,11 +1,10 @@ //创建tools相关的小工具 import { defineStore } from 'pinia' -import { getTools, getToolCate, getToolRecommend, toolCollect, getToolCollect } from '@/api/tools' +import { getTools, getToolCate, getToolRecommend } from '@/api/tools' import { getIp } from '@/api/ip' -import type { ToolsReqData, ToolsInfo, ToolCate, CollectReqData } from '@/api/tools/type' +import type { ToolsReqData, ToolsInfo, ToolCate } from '@/api/tools/type' import type { IpReqData, IpInfo } from '@/api/ip/type' import type { WebInfo, WebInfoReqData } from '@/api/webinfo/type' -import { useUserStore } from '@/store/modules/user' import { fetchWebInfo } from '@/api/webinfo' export const useToolsStore = defineStore('tools', { @@ -75,37 +74,6 @@ export const useToolsStore = defineStore('tools', { 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)) - } - }, //获取网站信息 async getWebInfo(data: WebInfoReqData) { const result: any = await fetchWebInfo(data) diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts deleted file mode 100644 index a6871d1..0000000 --- a/src/store/modules/user.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { defineStore } from 'pinia' -import { login, register, sendCodeEmail, userInfo, logout, sendForgetCodeEmail, forget} from '@/api/user' -import type { LoginReqData, RegisterReqData, sendCodeEmailReq, ForgetReqData } from '@/api/user/type' -export const useUserStore = defineStore('user', { - //用来存放变量 - state: () => ({ - token: import.meta.env.VITE_IS_MOCK == 'true' ? localStorage.setItem('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.isLogin()) { - 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 63aff6e..7597f80 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,44 +1,13 @@ 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, timeout: 5000 -}) -//创建一个存储CancelToken源的映射,用于管理请求和取消操作 -const cancelSources = new Map(); -//mock环境下无法使用的接口 -const mockBanUrl: string[] = [ - '/login', - '/user/info', - '/get/tool/collects', - '/send/forget/password/code', - '/send/register/code', - '/forget/password', - '/register', - '/logout' -]; +}); + //请求拦截器 request.interceptors.request.use(config => { - if (import.meta.env.VITE_IS_MOCK == 'true' && config.url != undefined && mockBanUrl.includes(config.url)) { - //mock环境不能使用登录后相关功能 - const source = axios.CancelToken.source() - //将source与请求的url或某种唯一标识符关联起来 - cancelSources.set(config.url, source); - config.cancelToken = source.token; - //取消 - source.cancel('Request canceled by the user.'); - } else { - //获取token - if (userStore.token) { - // config.headers.token = userStore.token - config.headers.Authorization = 'Bearer ' + userStore.token - } - } return config; }); //响应拦截器