• Spring Boot 笔记 026 文章分类列表查询


    1.1 pinia

    1.1.1 安装pinia npm install pinia

    1.1.2 安装persist npm install pinia-persistedstate-plugin

    1.1.2 在vue应用实例中使用pinia,在pinia中使用persist

    1.1.3 在src/stores/token.js中定义store,定义状态Store时指定持久化配置参数

    1. //定义store
    2. import {defineStore} from 'pinia'
    3. import {ref} from 'vue'
    4. /*
    5. 第一个参数:名字,唯一性
    6. 第二个参数:函数,函数的内部可以定义状态的所有内容
    7. 返回值: 函数
    8. */
    9. export const useTokenStore = defineStore('token',()=>{
    10. //定义状态的内容
    11. //1.响应式变量
    12. const token = ref('')
    13. //2.定义一个函数,修改token的值
    14. const setToken = (newToken)=>{
    15. token.value = newToken
    16. }
    17. //3.函数,移除token的值
    18. const removeToken = ()=>{
    19. token.value=''
    20. }
    21. return {
    22. token,setToken,removeToken
    23. }
    24. },{
    25. persist:true//持久化存储
    26. });

    1.1.4 在组件中使用store

    1.1.4.1 在login.vue中使用store将token存储到pinia中

     1.1.4.2 在axios中添加请求拦截器使用pinia中的token

    1. //定制请求的实例
    2. //导入axios npm install axios
    3. import axios from 'axios';
    4. import { ElMessage } from 'element-plus'
    5. //定义一个变量,记录公共的前缀 , baseURL
    6. //const baseURL = 'http://localhost:8080';
    7. const baseURL = '/api';
    8. const instance = axios.create({ baseURL })
    9. import {useTokenStore} from '@/stores/token.js'
    10. //添加请求拦截器
    11. instance.interceptors.request.use(
    12. (config)=>{
    13. //请求前的回调
    14. //添加token
    15. const tokenStore = useTokenStore();
    16. //判断有没有token
    17. if(tokenStore.token){
    18. config.headers.Authorization = tokenStore.token
    19. }
    20. return config;
    21. },
    22. (err)=>{
    23. //请求错误的回调
    24. Promise.reject(err)
    25. }
    26. )
    27. /* import {useRouter} from 'vue-router'
    28. const router = useRouter(); */
    29. import router from '@/router'
    30. //添加响应拦截器
    31. instance.interceptors.response.use(
    32. result => {
    33. //判断业务状态码
    34. if(result.data.code===0){
    35. return result.data;
    36. }
    37. //操作失败
    38. //alert(result.data.msg?result.data.msg:'服务异常')
    39. ElMessage.error(result.data.msg?result.data.msg:'服务异常')
    40. //异步操作的状态转换为失败
    41. return Promise.reject(result.data)
    42. },
    43. err => {
    44. //判断响应状态码,如果为401,则证明未登录,提示请登录,并跳转到登录页面
    45. if(err.response.status===401){
    46. ElMessage.error('请先登录')
    47. router.push('/login')
    48. }else{
    49. ElMessage.error('服务异常')
    50. }
    51. return Promise.reject(err);//异步的状态转化成失败的状态
    52. }
    53. )
    54. export default instance;

    1.1.4.3 在article.js中发送请求

    1. import request from '@/utils/request.js'
    2. //文章分类列表查询
    3. export const articleCategoryListService = ()=>{
    4. const tokenStore = useTokenStore();
    5. //在pinia中定义的响应式数据,都不需要.value
    6. return request.get('/category')
    7. }

    1.1.5 articlecategory.vue 编写页面并调用接口

    1. ```html
    2. <script setup>
    3. import {
    4. Edit,
    5. Delete
    6. } from '@element-plus/icons-vue'
    7. import { ref } from 'vue'
    8. const categorys = ref([
    9. {
    10. "id": 3,
    11. "categoryName": "美食",
    12. "categoryAlias": "my",
    13. "createTime": "2023-09-02 12:06:59",
    14. "updateTime": "2023-09-02 12:06:59"
    15. },
    16. {
    17. "id": 4,
    18. "categoryName": "娱乐",
    19. "categoryAlias": "yl",
    20. "createTime": "2023-09-02 12:08:16",
    21. "updateTime": "2023-09-02 12:08:16"
    22. },
    23. {
    24. "id": 5,
    25. "categoryName": "军事",
    26. "categoryAlias": "js",
    27. "createTime": "2023-09-02 12:08:33",
    28. "updateTime": "2023-09-02 12:08:33"
    29. }
    30. ])
    31. //声明一个异步的函数
    32. import { articleCategoryListService } from '@/api/article.js'
    33. const articleCategoryList = async () => {
    34. let result = await articleCategoryListService();
    35. categorys.value = result.data;
    36. }
    37. articleCategoryList();
    38. script>
    39. <template>
    40. <el-card class="page-container">
    41. <template #header>
    42. <div class="header">
    43. <span>文章分类span>
    44. <div class="extra">
    45. <el-button type="primary">添加分类el-button>
    46. div>
    47. div>
    48. template>
    49. <el-table :data="categorys" style="width: 100%">
    50. <el-table-column label="序号" width="100" type="index"> el-table-column>
    51. <el-table-column label="分类名称" prop="categoryName">el-table-column>
    52. <el-table-column label="分类别名" prop="categoryAlias">el-table-column>
    53. <el-table-column label="操作" width="100">
    54. <template #default="{ row }">
    55. <el-button :icon="Edit" circle plain type="primary" >el-button>
    56. <el-button :icon="Delete" circle plain type="danger">el-button>
    57. template>
    58. el-table-column>
    59. <template #empty>
    60. <el-empty description="没有数据" />
    61. template>
    62. el-table>
    63. el-card>
    64. template>
    65. <style lang="scss" scoped>
    66. .page-container {
    67. min-height: 100%;
    68. box-sizing: border-box;
    69. .header {
    70. display: flex;
    71. align-items: center;
    72. justify-content: space-between;
    73. }
    74. }
    75. style>
    76. ```

    1.2 未登录统一处理

    1. //定制请求的实例
    2. //导入axios npm install axios
    3. import axios from 'axios';
    4. import { ElMessage } from 'element-plus'
    5. //定义一个变量,记录公共的前缀 , baseURL
    6. const baseURL = '/api';
    7. const instance = axios.create({baseURL})
    8. import {useTokenStore} from '@/stores/token.js'
    9. //添加请求拦截器
    10. instance.interceptors.request.use(
    11. (config)=>{
    12. //请求前的回调
    13. //添加token
    14. const tokenStore = useTokenStore();
    15. //判断有没有token
    16. if(tokenStore.token){
    17. config.headers.Authorization = tokenStore.token
    18. }
    19. return config;
    20. },
    21. (err)=>{
    22. //请求错误的回调
    23. Promise.reject(err)
    24. }
    25. )
    26. import router from '@/router'
    27. //添加响应拦截器
    28. instance.interceptors.response.use(
    29. result => {
    30. //判断业务状态码
    31. if(result.data.code===0){
    32. return result.data;
    33. }
    34. //操作失败
    35. //alert(result.data.msg?result.data.msg:'服务异常')
    36. ElMessage.error(result.data.msg?result.data.msg:'服务异常')
    37. //异步操作的状态转换为失败
    38. return Promise.reject(result.data)
    39. },
    40. err => {
    41. //判断响应状态码,如果为401,则证明未登录,提示请登录,并跳转到登录页面
    42. if(err.response.status===401){
    43. ElMessage.error('请先登录')
    44. router.push('/login')
    45. }else{
    46. ElMessage.error('服务异常')
    47. }
    48. return Promise.reject(err);//异步的状态转化成失败的状态
    49. }
    50. )
    51. export default instance;

  • 相关阅读:
    Linux基础知识笔记
    Parallels Desktop 19 for Mac(PD19虚拟机)详细图文安装教程分享
    ueditor整合到thinkPHP里
    开源B2B网站电子商务平台源码下载搭建 实现高效交易的桥梁
    浅显直白的Python深拷贝与浅拷贝区别说明
    计算机毕业设计(附源码)python中医保健系统
    性能与效果平衡:选择适合项目的直播实时美颜SDK
    渗透测试tomcat错误信息泄露解决办法
    Servlet | 连接数据库、使用IDEA工具开发Servlet
    学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作 dreamweaver网页设计与制作代码 web前端期末大作业
  • 原文地址:https://blog.csdn.net/geji001/article/details/136163990