From 1c15ad1eab0e55175976fad811b4e4c56882c383 Mon Sep 17 00:00:00 2001 From: jiangzhe <244140623@qq.com> Date: Tue, 16 Jul 2024 09:47:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=A8=E6=88=B7=E6=94=B9=E7=89=88=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/catalogResource.js | 14 +- src/apis/category.js | 44 --- src/apis/home.js | 26 +- src/apis/layout.js | 8 - src/apis/testAPI.js | 4 +- src/apis/textbook.js | 14 +- src/apis/user.js | 22 +- src/assets/images/doc.png | Bin 0 -> 3209 bytes src/assets/images/home-video.png | Bin 0 -> 3812 bytes src/assets/images/other.png | Bin 0 -> 5234 bytes src/assets/images/picture.png | Bin 0 -> 3457 bytes src/components/MyFooter/index.vue | 85 ++++++ src/components/MyHeader/index.vue | 159 +++++++++++ src/main.js | 4 + src/router/index.js | 26 +- src/stores/tenantStore.js | 4 +- src/stores/userStore.js | 53 ++-- src/utils/http.js | 44 ++- src/views/Home/index.vue | 265 +++++++++--------- src/views/Layout/components/LayoutHeader.vue | 129 ++++++++- .../Layout/components/LayoutHeaderUl.vue | 55 ---- src/views/Layout/index.vue | 10 - src/views/Login/index.vue | 52 +++- src/views/MyCollect/index.vue | 119 ++++++++ src/views/MyLike/index.vue | 119 ++++++++ src/views/MyRecord/index.vue | 161 +++++++++++ src/views/MyUpload/index.vue | 161 +++++++++++ src/views/TextBook/index.vue | 119 ++++---- 28 files changed, 1282 insertions(+), 415 deletions(-) delete mode 100644 src/apis/category.js delete mode 100644 src/apis/layout.js create mode 100644 src/assets/images/doc.png create mode 100644 src/assets/images/home-video.png create mode 100644 src/assets/images/other.png create mode 100644 src/assets/images/picture.png create mode 100644 src/components/MyFooter/index.vue create mode 100644 src/components/MyHeader/index.vue delete mode 100644 src/views/Layout/components/LayoutHeaderUl.vue create mode 100644 src/views/MyCollect/index.vue create mode 100644 src/views/MyLike/index.vue create mode 100644 src/views/MyRecord/index.vue create mode 100644 src/views/MyUpload/index.vue diff --git a/src/apis/catalogResource.js b/src/apis/catalogResource.js index 295e111..a11eab9 100644 --- a/src/apis/catalogResource.js +++ b/src/apis/catalogResource.js @@ -1,7 +1,7 @@ -import httpInstance from '@/utils/http' +import request from '@/utils/http' export const getResourceCatalogList = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/resource/catalog/pageList', params }) @@ -9,27 +9,27 @@ export const getResourceCatalogList = (params = {}) => { export const getResourceList = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/resource/list', params }) } export const getTreeList = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/resource/catalog/tree', params }) } export const getResourceInfo = (id) => { - return httpInstance({ + return request({ url: `/portal/resource/${id}`, }) } export function resourcePreview(id) { - return httpInstance({ + return request({ url: `/portal/resource/preview/${id}`, method: 'post', // responseType: 'blob' @@ -37,7 +37,7 @@ export function resourcePreview(id) { } export function resourcePreviewTxt(id) { - return httpInstance({ + return request({ url: `/portal/resource/preview/${id}`, method: 'post', responseType: 'blob', diff --git a/src/apis/category.js b/src/apis/category.js deleted file mode 100644 index b5bf637..0000000 --- a/src/apis/category.js +++ /dev/null @@ -1,44 +0,0 @@ -import request from '@/utils/http' - - -export function getCategoryAPI (id) { - return request({ - url: '/category', - params: { - id - } - }) -} - -/** - * @description: 获取二级分类列表数据 - * @param {*} id 分类id - * @return {*} - */ - -export const getCategoryFilterAPI = (id) => { - return request({ - url: '/category/sub/filter', - params: { - id - } - }) -} - -/** - * @description: 获取导航数据 - * @data { - categoryId: 1005000 , - page: 1, - pageSize: 20, - sortField: 'publishTime' | 'orderNum' | 'evaluateNum' - } - * @return {*} - */ -export const getSubCategoryAPI = (data) => { - return request({ - url: '/category/goods/temporary', - method: 'POST', - data - }) -} \ No newline at end of file diff --git a/src/apis/home.js b/src/apis/home.js index b2d792c..e6ee082 100644 --- a/src/apis/home.js +++ b/src/apis/home.js @@ -1,9 +1,8 @@ -import httpInstance from '@/utils/http' - +import request from '@/utils/http' // 查询门户Banner列表 export function getBannerAPI(params = {}) { - return httpInstance({ + return request({ url: '/portal/banner/list', params }) @@ -13,14 +12,14 @@ export function getBannerAPI(params = {}) { * 查询学校动态列表 */ export const getTrendAPI = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/trend/list', params }) } export const getTrendInfoAPI = (trendId) => { - return httpInstance({ + return request({ url: `/portal/trend/${trendId}` }) } @@ -29,7 +28,7 @@ export const getTrendInfoAPI = (trendId) => { *查询学校名师列表 */ export const getShowAPI = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/show/list', params }) @@ -39,28 +38,33 @@ export const getShowAPI = (params = {}) => { *查询目录-同步教材 */ export const getTextbookAPI = () => { - return httpInstance({ + return request({ url: '/portal/textbook/catalog/tree' }) } // 查询目录-专题资源 export const getResourceAPI = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/resource/catalog/pageList', params }) } - export const getAuthAPI = () => { - return httpInstance({ + return request({ url: '/auth/tenant/list' }) } export const getShowInfoAPI = (showId) => { - return httpInstance({ + return request({ url: `/portal/show/${showId}` }) +} + +export const getUploadNum = (showId) => { + return request({ + url: `/statistic/upload/num` + }) } \ No newline at end of file diff --git a/src/apis/layout.js b/src/apis/layout.js deleted file mode 100644 index a42195d..0000000 --- a/src/apis/layout.js +++ /dev/null @@ -1,8 +0,0 @@ - -import httpInstance from "@/utils/http" - -export function getCategoryAPI () { - return httpInstance({ - url: '/home/category/head' - }) -} \ No newline at end of file diff --git a/src/apis/testAPI.js b/src/apis/testAPI.js index 3a60c09..94735ea 100644 --- a/src/apis/testAPI.js +++ b/src/apis/testAPI.js @@ -1,8 +1,8 @@ -import httpInstance from "@/utils/http" +import request from "@/utils/http" export function getCategory () { - return httpInstance({ + return request({ url: 'home/category/head' }) } \ No newline at end of file diff --git a/src/apis/textbook.js b/src/apis/textbook.js index efaebcd..1d827c0 100644 --- a/src/apis/textbook.js +++ b/src/apis/textbook.js @@ -1,36 +1,36 @@ -import httpInstance from '@/utils/http' +import request from '@/utils/http' /** *查询目录-同步教材 */ export const getTextbookAPI = () => { - return httpInstance({ + return request({ url: '/portal/textbook/catalog/list' }) } export const getTextbookTreeAPI = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/textbook/catalog/tree', params }) } export const getTextbookList = (params = {}) => { - return httpInstance({ + return request({ url: '/portal/textbook/list', params }) } export const getTextbookInfoAPI = (id) => { - return httpInstance({ + return request({ url: `/portal/textbook/${id}` }) } export function textbookPreview(id) { - return httpInstance({ + return request({ url: `/portal/textbook/preview/${id}`, method: 'post', // responseType: 'blob' @@ -38,7 +38,7 @@ export function textbookPreview(id) { } export function textbookPreviewTxt(id) { - return httpInstance({ + return request({ url: `/portal/textbook/preview/${id}`, method: 'post', responseType: 'blob', diff --git a/src/apis/user.js b/src/apis/user.js index 89cf512..09eab51 100644 --- a/src/apis/user.js +++ b/src/apis/user.js @@ -1,23 +1,19 @@ // 封装所有和用户相关的接口函数 import request from '@/utils/http' -export const loginAPI = ({ account, password }) => { +export const loginAPI = (loginBody) => { return request({ - url: '/login', + url: '/auth/passwordLogin', method: 'POST', - data: { - account, - password - } + headers: { + isToken: false, + isEncrypt: false + }, + data: loginBody }) } - - -export const getLikeListAPI = ({ limit = 4 }) => { +export const userInfoAPI = () => { return request({ - url: '/goods/relevant', - params: { - limit - } + url: '/system/user/getInfo' }) } \ No newline at end of file diff --git a/src/assets/images/doc.png b/src/assets/images/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..4d7e8bfee00cad09ea7902f447036a989380b382 GIT binary patch literal 3209 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/home-video.png b/src/assets/images/home-video.png new file mode 100644 index 0000000000000000000000000000000000000000..139bb022a668ff0d3ba78e31ffd388006b683fde GIT binary patch literal 3812 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/picture.png b/src/assets/images/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..b9a2b5a042aaa8654d90fbfc9d68f1dc9cb57b01 GIT binary patch literal 3457 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 + + + + \ No newline at end of file diff --git a/src/components/MyHeader/index.vue b/src/components/MyHeader/index.vue new file mode 100644 index 0000000..399b967 --- /dev/null +++ b/src/components/MyHeader/index.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/src/main.js b/src/main.js index 83cc477..cc81b27 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,10 @@ import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' import App from './App.vue' import router from './router' +//引入Elmessage和Elloading的css样式文件 +import 'element-plus/theme-chalk/el-loading.css' +import 'element-plus/theme-chalk/el-message.css' + // 引入初始化样式文件 import '@/styles/common.scss' diff --git a/src/router/index.js b/src/router/index.js index 2f4f00f..08977bd 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -5,7 +5,7 @@ import { createRouter, createWebHashHistory } from 'vue-router' import Layout from '@/views/Layout/index.vue' import Home from '@/views/Home/index.vue' -import { useTenantStore } from '@/stores/tenantStore' +import { useUserStore } from '@/stores/userStore' const router = createRouter({ history: createWebHashHistory(import.meta.env.BASE_URL), @@ -15,6 +15,22 @@ const router = createRouter({ path: '/login', component: () => import('@/views/Login/index.vue') }, + { + path: '/myUpload', + component: () => import('@/views/MyUpload/index.vue') + }, + { + path: '/myLike', + component: () => import('@/views/MyLike/index.vue') + }, + { + path: '/myCollect', + component: () => import('@/views/MyCollect/index.vue') + }, + { + path: '/myRecord', + component: () => import('@/views/MyRecord/index.vue') + }, { path: '/', component: Layout, @@ -75,9 +91,13 @@ const router = createRouter({ }) router.beforeEach((to, from) => { - useTenantStore().getTenantInfo() + const store = useUserStore() + const whiteList = ['/login'] + + if (!store.token && !whiteList.includes(to.path)) { + return '/login' + } - return true }) export default router diff --git a/src/stores/tenantStore.js b/src/stores/tenantStore.js index 1b2d5a9..4578c47 100644 --- a/src/stores/tenantStore.js +++ b/src/stores/tenantStore.js @@ -5,7 +5,7 @@ import { getAuthAPI } from '@/apis/home' export const useTenantStore = defineStore('tenant', () => { const tenantInfo = ref({}) - const getTenantInfo = async () => { + const setTenantInfo = async () => { const res = await getAuthAPI() if (res.data.voList.length > 0) { tenantInfo.value = res.data.voList[0] @@ -18,7 +18,7 @@ export const useTenantStore = defineStore('tenant', () => { return { tenantInfo, - getTenantInfo, + setTenantInfo, clearTenantInfo } }, { diff --git a/src/stores/userStore.js b/src/stores/userStore.js index 498dc1a..e0bccdf 100644 --- a/src/stores/userStore.js +++ b/src/stores/userStore.js @@ -1,40 +1,43 @@ // 管理用户数据相关 - import { defineStore } from 'pinia' import { ref } from 'vue' -import { loginAPI } from '@/apis/user' -import { useCartStore } from './cartStore' -import { mergeCartAPI } from '@/apis/cart' +import { loginAPI, userInfoAPI } from '@/apis/user' + export const useUserStore = defineStore('user', () => { - const cartStore = useCartStore() - // 1. 定义管理用户数据的state + const token = ref('') const userInfo = ref({}) - // 2. 定义获取接口数据的action函数 - const getUserInfo = async ({ account, password }) => { - const res = await loginAPI({ account, password }) - userInfo.value = res.result - // 合并购物车的操作 - await mergeCartAPI(cartStore.cartList.map(item => { - return { - skuId: item.skuId, - selected: item.selected, - count: item.count - } - })) - cartStore.updateNewList() + + const setToken = async (loginData) => { + const res = await loginAPI(loginData) + token.value = res.data.access_token + } + + const cleartoken = () => { + token.value = '' + } + + const setUserInfo = async () => { + const res = await userInfoAPI() + userInfo.value = res.data } - // 退出时清除用户信息 const clearUserInfo = () => { userInfo.value = {} - // 执行清除购物车的action - cartStore.clearCart() } - // 3. 以对象的格式把state和action return + + const logout = () => { + token.value = '' + userInfo.value = {} + } + return { + token, userInfo, - getUserInfo, - clearUserInfo + setToken, + cleartoken, + setUserInfo, + clearUserInfo, + logout } }, { persist: true, diff --git a/src/utils/http.js b/src/utils/http.js index 79e3bfb..0ff32ec 100644 --- a/src/utils/http.js +++ b/src/utils/http.js @@ -3,19 +3,22 @@ import axios from 'axios' import { ElMessage } from 'element-plus' import { useUserStore } from '@/stores/userStore' import { useTenantStore } from '@/stores/tenantStore' +import router from '@/router' -const httpInstance = axios.create({ +const request = axios.create({ baseURL: '/api-school', timeout: 50000 }) // 拦截器 // axios请求拦截器 -httpInstance.interceptors.request.use(config => { +request.interceptors.request.use(config => { + config.headers.clientId = 'e5cd7e4891bf95d1d19206ce24a7b32e' + // 1. 从pinia获取token数据 const userStore = useUserStore() // 2. 按照后端的要求拼接token数据 - const token = userStore.userInfo.token + const token = userStore.token if (token) { config.headers.Authorization = `Bearer ${token}` } @@ -30,14 +33,35 @@ httpInstance.interceptors.request.use(config => { }, e => Promise.reject(e)) // axios响应式拦截器 -httpInstance.interceptors.response.use(res => res.data, e => { - // 统一错误提示 - ElMessage({ - type: 'warning', - message: e.response.data.message - }) +request.interceptors.response.use(res => { + if (res.data.code === 401) { + // 清除用户信息 + const userStore = useUserStore() + userStore.logout() + router.push('/login') + } + // 业务逻辑失败 + if (res.data.code !== 200) { + ElMessage.error(res.data.msg) + return Promise.reject(res.data) + } + // 业务逻辑成功 + return res.data +}, e => { + if (e.response.status === 401) { + // 清除用户信息 + const userStore = useUserStore() + userStore.logout() + router.push('/login') + } else { + // 统一错误提示 + ElMessage({ + type: 'warning', + message: e.response.data.msg + }) + } return Promise.reject(e) }) -export default httpInstance +export default request diff --git a/src/views/Home/index.vue b/src/views/Home/index.vue index 28f7bec..39cb5d3 100644 --- a/src/views/Home/index.vue +++ b/src/views/Home/index.vue @@ -1,65 +1,66 @@ - \ No newline at end of file diff --git a/src/views/Layout/index.vue b/src/views/Layout/index.vue index 60b317a..a3e6121 100644 --- a/src/views/Layout/index.vue +++ b/src/views/Layout/index.vue @@ -1,16 +1,6 @@ \ No newline at end of file diff --git a/src/views/MyLike/index.vue b/src/views/MyLike/index.vue new file mode 100644 index 0000000..a773a61 --- /dev/null +++ b/src/views/MyLike/index.vue @@ -0,0 +1,119 @@ + + + + + \ No newline at end of file diff --git a/src/views/MyRecord/index.vue b/src/views/MyRecord/index.vue new file mode 100644 index 0000000..4efb93a --- /dev/null +++ b/src/views/MyRecord/index.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/src/views/MyUpload/index.vue b/src/views/MyUpload/index.vue new file mode 100644 index 0000000..4efb93a --- /dev/null +++ b/src/views/MyUpload/index.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/src/views/TextBook/index.vue b/src/views/TextBook/index.vue index afc92fd..3dd920e 100644 --- a/src/views/TextBook/index.vue +++ b/src/views/TextBook/index.vue @@ -7,67 +7,70 @@ - - - - - - - + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - @@ -139,8 +142,6 @@ import { View, Search } from '@element-plus/icons-vue' import { getTextbookAPI, getTextbookTreeAPI, getTextbookList } from '@/apis/textbook' import JzSort from '@/components/JzSort/index.vue' -const imgSuffix = ['.jpg', '.png', '.jpeg', '.gif', '.bmp'] - const router = useRouter() const queryParams = ref({ catalogId: undefined, @@ -155,6 +156,8 @@ const queryParams = ref({ const tableData = ref([]) const total = ref(0) +const activeNames = ref(['1']) + const radio2 = ref() const radio3 = ref() const radio4 = ref() @@ -301,7 +304,7 @@ onMounted(() => { } } - .card-filter { + .el-collapse { margin-top: 20px; }