当前位置:   article > 正文

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

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;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/120990
推荐阅读
相关标签
  

闽ICP备14008679号