前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot+mybatis+vue3实现前后端管理系统

springboot+mybatis+vue3实现前后端管理系统

作者头像
爱学习的前端歌谣
发布2024-03-04 14:25:12
1310
发布2024-03-04 14:25:12
举报
文章被收录于专栏:前端小歌谣前端小歌谣

第一步 开发view页面

代码语言:javascript
复制
<script setup>
import { Edit, Delete } from "@element-plus/icons-vue";
import { ref } from "vue";
import {
  articleCategoryListService,
  articleCategoryAddService,
  articleCategoryDeleteService,
  articleCategoryUpdateService,
} from "../../api/artical.js";
import { ElMessage, ElMessageBox } from "element-plus";
const categorys = ref([
  {
    id: 3,
    categoryName: "美食",
    categoryAlias: "my",
    createTime: "2023-09-02 12:06:59",
    updateTime: "2023-09-02 12:06:59",
  },
  {
    id: 4,
    categoryName: "娱乐",
    categoryAlias: "yl",
    createTime: "2023-09-02 12:08:16",
    updateTime: "2023-09-02 12:08:16",
  },
  {
    id: 5,
    categoryName: "军事",
    categoryAlias: "js",
    createTime: "2023-09-02 12:08:33",
    updateTime: "2023-09-02 12:08:33",
  },
]);
const getAllCategory = async () => {
  let result = await articleCategoryListService();
  categorys.value = result.data;
};

//控制添加分类弹窗
const dialogVisible = ref(false);

//弹窗标题
const title = ref("");
//添加分类数据模型
const categoryModel = ref({
  categoryName: "",
  categoryAlias: "",
});
//添加分类表单校验
const rules = {
  categoryName: [
    { required: true, message: "请输入分类名称", trigger: "blur" },
  ],
  categoryAlias: [
    { required: true, message: "请输入分类别名", trigger: "blur" },
  ],
};
//访问后台,添加文章分类
const addCategory = async () => {
  let result = await articleCategoryAddService(categoryModel.value);
  ElMessage.success(result.message ? result.message : "添加成功");
  //隐藏弹窗
  dialogVisible.value = false;
  //再次访问后台接口,查询所有分类
  getAllCategory();
};

//修改分类回显
const updateCategoryEcho = (row) => {
  title.value = "修改分类";
  dialogVisible.value = true;
  //将row中的数据赋值给categoryModel
  categoryModel.value.categoryName = row.categoryName;
  categoryModel.value.categoryAlias = row.categoryAlias;
  //修改的时候必须传递分类的id,所以扩展一个id属性
  categoryModel.value.id = row.id;
};

//修改分类
const updateCategory = async () => {
  let result = await articleCategoryUpdateService(categoryModel.value);
  ElMessage.success(result.message ? result.message : "修改成功");
  //隐藏弹窗
  dialogVisible.value = false;
  //再次访问后台接口,查询所有分类
  getAllCategory();
};

//清空模型数据
const clearCategoryModel = () => {
  (categoryModel.value.categoryName = ""),
    (categoryModel.value.categoryAlias = "");
};

//删除分类  给删除按钮绑定事件
const deleteCategory = (row) => {
  ElMessageBox.confirm("你确认删除该分类信息吗?", "温馨提示", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(async () => {
      //用户点击了确认
      let result = await articleCategoryDeleteService(row.id);
      ElMessage.success(result.message ? result.message : "删除成功");
      //再次调用getAllCategory,获取所有文章分类
      getAllCategory();
    })
    .catch(() => {
      //用户点击了取消
      ElMessage({
        type: "info",
        message: "取消删除",
      });
    });
};
getAllCategory();
</script>
<template>
  <el-card class="page-container">
    <template #header>
      <div class="header">
        <span>文章分类</span>
        <div class="extra">
          <el-button
            @click="
              title = '新增分类';
              dialogVisible = true;
              clearCategoryModel();
            "
            type="primary"
            >添加分类</el-button
          >
        </div>
      </div>
    </template>
    <el-table :data="categorys" style="width: 100%">
      <el-table-column label="序号" width="100" type="index"> </el-table-column>
      <el-table-column label="分类名称" prop="categoryName"></el-table-column>
      <el-table-column label="分类别名" prop="categoryAlias"></el-table-column>
      <el-table-column label="操作" width="100">
        <template #default="{ row }">
          <el-button
            :icon="Edit"
            @click="updateCategoryEcho(row)"
            circle
            plain
            type="primary"
          ></el-button>
          <el-button
            :icon="Delete"
            @click="deleteCategory(row)"
            circle
            plain
            type="danger"
          ></el-button>
        </template>
      </el-table-column>
      <template #empty>
        <el-empty description="没有数据" />
      </template>
    </el-table>
    <el-dialog v-model="dialogVisible" :title="title" width="30%">
      <el-form
        :model="categoryModel"
        :rules="rules"
        label-width="100px"
        style="padding-right: 30px"
      >
        <el-form-item label="分类名称" prop="categoryName">
          <el-input
            v-model="categoryModel.categoryName"
            minlength="1"
            maxlength="10"
          ></el-input>
        </el-form-item>
        <el-form-item label="分类别名" prop="categoryAlias">
          <el-input
            v-model="categoryModel.categoryAlias"
            minlength="1"
            maxlength="15"
          ></el-input>
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="dialogVisible = false">取消</el-button>
          <el-button
            type="primary"
            @click="title === '新增分类' ? addCategory() : updateCategory()"
          >
            确认
          </el-button>
        </span>
      </template>
    </el-dialog>
  </el-card>
</template>

<style lang="scss" scoped>
.page-container {
  min-height: 100%;
  box-sizing: border-box;

  .header {
    display: flex;
    align-items: center;
    justify-content: space-between;
  }
}
</style>

第二步 配置路由

代码语言:javascript
复制
import { createRouter, createWebHistory } from 'vue-router'

import LoginVue from "../views/Login.vue"
import LayoutVue from "../views/layout.vue"
import ArticleCategoryVue from "@/views/article/ArticleCategory.vue"
import ArticleManageVue from "@/views/article/ArticleManage.vue"
import UserInfoVue from "@/views/user/UserInfo.vue"
import UserAvatarVUe from "@/views/user/UserAvatar.vue"
import UserResetPasswordVue from "@/views/user/UserResetPassword.vue"
const routes = [
    { path: '/login', component: LoginVue },
    { path: '/', component: LayoutVue,redirect:"/article/manage",
    children: [
        { path: '/article/category', component: ArticleCategoryVue },
        { path: '/article/manage', component: ArticleManageVue },
        { path: '/user/info', component: UserInfoVue },
        { path: '/user/avatar', component: UserAvatarVUe },
        { path: '/user/password', component: UserResetPasswordVue },
    ] },
   
]

//创建路由器
const router = createRouter({
    history: createWebHistory(),
    routes: routes
});

export default router

第三步 请求接口

代码语言:javascript
复制
//  导入
import request from "../utils/request.js"
//查询分类
export const articleCategoryListService=()=>{ 
   return request.get('/category')
}
//添加文章分类
export const articleCategoryAddService = (categoryModel) => {
    return request.post('/category', categoryModel)
}
//修改分类
export const articleCategoryUpdateService = (categoryModel)=>{
    return request.put('/category',categoryModel)
}

//删除分类
export const articleCategoryDeleteService = (id)=>{
    return request.delete(`/category/delete?id=`+id)
}

//文章列表查询
export const articleListService = (params) => {
    return request.get('/artical/list', { params: params })
}

//添加文章
export const articleAddService = (articleModel)=>{
    return request.post('/artical',articleModel)
}

//修改文章
export const articleUpdateService = (categoryModel)=>{
    return request.put('/artical',categoryModel)
}

//删除文章
export const articleDeleteService = (id)=>{
    return request.delete(`/artical/delete?id=`+id)
}

第四步 运行

代码语言:javascript
复制
我是歌谣 励志成为一名全栈工程师
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端小歌谣 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档