【第22章】Vue实战篇之文章分类

文章目录

  • 前言
  • 一、文章分类列表查询
    • 1. 界面
    • 2. 脚本
    • 3. 展示
  • 二、文章分类添加
    • 1. 界面
    • 2. 接口脚本
    • 3. 点击事件
  • 三、文章分类编辑
    • 1. 界面
    • 2. 接口脚本
    • 3. 点击事件
  • 四、文章分类删除
    • 1. 界面
    • 2. 接口脚本
    • 3. 点击事件
  • 总结


前言

这里来学习文章分类相关界面和接口的调用(增删改查)。


一、文章分类列表查询

1. 界面

<script setup>
import {
    Edit,
    Delete
} from '@element-plus/icons-vue'
import { ref } from 'vue'
import articleCategoryListService from '@/api/article.js'

const categorys = ref([])
const articleCategoryList= async () => {
    let result=await articleCategoryListService();
    if(result.code==0){
        categorys.value=result.data
    }
}
articleCategoryList()
</script>
<template>
    <el-card class="page-container">
        <template #header>
            <div class="header">
                <span>文章分类</span>
                <div class="extra">
                    <el-button 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" circle plain type="primary" ></el-button>
                    <el-button :icon="Delete" circle plain type="danger"></el-button>
                </template>
            </el-table-column>
            <template #empty>
                <el-empty description="没有数据" />
            </template>
        </el-table>
    </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>

2. 脚本

import request from '@/utils/request.js'

const articleCategoryListService = ()=>{
    return request.get('/article/category')
}
export default articleCategoryListService

3. 展示

在这里插入图片描述

二、文章分类添加

1. 界面

<!-- 添加分类弹窗 -->
        <el-dialog v-model="dialogVisible" title="添加文章分类" width="30%">
            <el-form ref="addFormRef" :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="addCategory"> 确认 </el-button>
                </span>
            </template>
        </el-dialog>

2. 接口脚本

export const addCategoryService = (categoryData)=>{
    return request.post('/article/category',categoryData)
}

3. 点击事件

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

//添加分类数据模型
const categoryModel = ref({
    categoryName: '',
    categoryAlias: ''
})
//添加分类表单校验
const rules = {
    categoryName: [
        { required: true, message: '请输入分类名称', trigger: 'blur' },
    ],
    categoryAlias: [
        { required: true, message: '请输入分类别名', trigger: 'blur' },
    ]
}

import { addCategoryService } from '@/api/article.js'

const addFormRef = ref(null)
const addCategory = () => {
    if (!addFormRef) return
    addFormRef.value.validate(async(valid, fields) => {
        if (valid) {
            const result = await addCategoryService(categoryModel.value)
            const message = result.message
                if (result.code == 0) {
                    ElMessage.success(message ? message : '添加成功!')
                    articleCategoryList()
                    dialogVisible.value = false
                    categoryModel.value = ''
                } else {
                    ElMessage.error(message ? message : '添加失败,请稍后重试!')
                }
        }
    })
}
const resetFields=(addFormRef)=>{
    if(!addFormRef)return
    addFormRef.resetFields()
}

三、文章分类编辑

1. 界面

这里和新增使用同一套表单和校验,我们用变量控制显示不同的文字和触发不同的事件

<!-- 添加/编辑分类弹窗 -->
 <el-dialog v-model="dialogVisible" :title="title" width="30%">
     <el-form ref="categoryFormRef" :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="index === 0 ? addCategory() : editCategory()"> 确认 </el-button>
         </span>
     </template>
 </el-dialog>

2. 接口脚本

export const editCategoryService = (categoryData)=>{
    return request.put('/article/category',categoryData)
}

3. 点击事件

import { addCategoryService, editCategoryService } from '@/api/article.js'

const resetFields = (categoryFormRef) => {
    if (!categoryFormRef) return
    categoryFormRef.resetFields()
    categoryModel.value = {
        categoryName: '',
        categoryAlias: ''
    }
}
const titleArray = ref(['添加文章分类', '编辑文章分类'])
const index = ref(0)
const addCategoryClick = (categoryFormRef) => {
    index.value = 0
    dialogVisible.value = true;
    resetFields(categoryFormRef)
    title.value = titleArray.value[index.value]
}
//编辑文章分类
const title = ref('')
const editCategoryClick = (row) => {
    resetFields(categoryFormRef.value)
    index.value = 1
    title.value = titleArray.value[index.value]
    dialogVisible.value = true
    console.log(row);
    categoryModel.value.id = row.id
    categoryModel.value.categoryName = row.categoryName
    categoryModel.value.categoryAlias = row.categoryAlias
}
const editCategory = () => {
    if (!categoryFormRef) return
    categoryFormRef.value.validate(async (valid, fields) => {
        if (valid) {
            const result = await editCategoryService(categoryModel.value)
            const message = result.message
            if (result.code == 0) {
                ElMessage.success(message ? message : '更新成功!')
                articleCategoryList()
                dialogVisible.value = false
                resetFields(categoryFormRef.value)
            } else {
                ElMessage.error(message ? message : '更新失败,请稍后重试!')
            }
        }
    })
}

四、文章分类删除

1. 界面

<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" circle plain type="primary" @click="editCategoryClick(row)"></el-button>
          <el-popconfirm title="确认删除吗?" @confirm="deleteCategoryClick(row)">
              <template #reference>
                  <el-button :icon="Delete" circle plain type="danger"></el-button>
              </template>
          </el-popconfirm>
      </template>
  </el-table-column>
  <template #empty>
      <el-empty description="没有数据" />
  </template>
</el-table>

2. 接口脚本

export const deleteCategoryService = (categoryData)=>{
    return request.delete('/article/category?id='+categoryData)
    // var params = new URLSearchParams()
    // params.append('id', categoryData)
    // return request.delete('/article/category',{params:params})
}

3. 点击事件

import { addCategoryService, editCategoryService, deleteCategoryService } from '@/api/article.js'

//删除文章分类
const deleteCategoryClick = async (row) => {
    const result = await deleteCategoryService(row.id)
    const message = result.message
    if (result.code == 0) {
        ElMessage.success(message ? message : '删除成功!')
        articleCategoryList()

    } else {
        ElMessage.error(message ? message : '删除失败,请稍后重试!')
    }
}

总结

回到顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/727807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新版二开微信发卡小程序源码卡密系统/支持流量主

新版二开微信发卡小程序源码卡密系统支持流量主。裂变扩展多种领取模式二次开发的发卡小程序源码&#xff0c;其后台采用PHP编写&#xff0c;支持用户通过付费购卡或者观看视频广告领取卡密。 该小程序还支持流量主&#xff0c;因为功能需要&#xff0c;就进行了二开&#xff…

Java基础 - 练习(四)打印九九乘法表

Java基础练习 打印九九乘法表&#xff0c;先上代码&#xff1a; public static void multiplicationTable() {for (int i 1; i < 9; i) {for (int j 1; j < i; j) {// \t 跳到下一个TAB位置System.out.print(j "" i "" i * j "\t"…

C语言的网络编程

目录 引言 一、TCP/IP概述 1. TCP&#xff08;Transmission Control Protocol&#xff09; 2. UDP&#xff08;User Datagram Protocol&#xff09; 二、Socket编程基础 1. 服务器端 2. 客户端 三、URL与HTTP编程 1. 使用libcurl进行HTTP请求 表格总结 TCP/IP与Socke…

【Unity | Editor强化工具】项目备忘录工具

经常会被美术和策划同事反复询问某几个问题&#xff0c;每次都要翻Wiki链接给他们&#xff0c;非常折磨人&#xff0c;所以做了个可以在Unity内部显示备忘录的小工具&#xff0c;能够减少一些查找成本&#xff08;另外我觉得&#xff0c;让他们养成查看Unity内触手可及的信息的…

报错:ZeroDivisionError_ division by zero

问题&#xff1a;除数为0 原代码错误来源 # 归一化 , 保留6位小数 w round(w / img_w, 6) h round(h / img_h, 6) cx round(cx / img_w, 6) cy round(cy / img_h, 6) # print(cls_id, cx, cy, w, h) # 结果保存到数据labels文件夹中的txt文件 out_file.write(str(cls_id) …

Redis 主从复制+哨兵+集群

1、总结写在前面 Redis 集群 数据分片 高可用性 Redis 哨兵 主从复制 故障转移 2、主从复制 2.1、准备配置 查看docker 容器 ip docker inspect 容器id | grep IPAddressdocker inspect -f{{.Name}} {{.NetworkSettings.IPAddress}} $(docker ps -aq)修改配置文件 初始…

从零开始搭建创业公司全新技术栈解决方案

从零开始搭建创业公司全新技术栈解决方案 关于猫头虎 大家好&#xff0c;我是猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品评测图文、产品使用体…

Zookeeper 一、Zookeeper简介

1.分布式系统定义及面临的问题 分布式系统是同时跨越多给物理主机&#xff0c;独立运行的多个软件所组成的系统。类比一下&#xff0c;分布式系统就是一群人一起干活。人多力量大&#xff0c;每个服务器的算力是有限的&#xff0c;但是通过分布式系统&#xff0c;由n个服务器组…

Flink 流批一体场景应用及落地情况

摘要&#xff1a;本文由阿里云 Flink 团队苏轩楠老师撰写&#xff0c;旨在介绍 Flink 流批一体在几个常见场景下的应用。内容主要分为以下四个部分&#xff1a; 主要场景 落地情况 未来展望 总结 上篇&#xff1a;流批一体技术简介 在上篇文章中&#xff0c;给大家整体介绍…

有关计算素数的算法

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝黑暗的笼罩更会凸显光明的可贵! 一、引言 什么是素数 素数,也被称为质数,是指在大于1的自然数中,只能被1和它本身…

【ai】tx2-nx:安装深度学习环境及4.6对应pytorch

参考:https://www.waveshare.net/wiki/Jetson_TX2_NX#AI.E5.85.A5.E9.97.A8 英伟达2021年发布的的tritionserver 2.17 版本中,backend 有tensorflow1 和 onnxruntime ,他们都是做什么用的,作为backend 对于 triton 推理server意义是什么,是否应该有pytorch? Triton Infer…

小程序中用font-spider压缩字体后,字体没效果(解决办法)

因为项目中需要引入外部字体&#xff0c;有两种方案&#xff0c; 第一是把字体下载到本地&#xff0c; 第二种是cdn请求服务器放字体的地址 但是小程序是有大小限制的&#xff0c;所以必须要压缩字体大小&#xff0c;这时候有些人就说了&#xff0c;那把字体放在服务器上&a…

从复用性角度阐述中台建设

目录 复用性中台定义深思中台建设产品线形态何时演变中台能力落地中台 业务中台架构总结 技术学习永不止步&#xff0c;最近也是看了很多关于架构设计相关的专栏&#xff0c;慢慢总结出来一部分知识&#xff0c;代入自己的思考与理解&#xff0c;以及结合并反思自己之前公司的架…

windows和linux下清空Redis

前言 在本文中&#xff0c;我们将详尽阐述在Windows与Linux操作系统中有效清除Redis缓存的实践方法&#xff0c;旨在为您提供清晰、高效的指导流程&#xff0c;确保数据管理的灵活性与效率。 windows下推荐两款可视化工具 Another Redis Desktop Manager 这是我用的最多也是最…

安卓手机删除的照片如何恢复?2个有效方法,教你找回

手机相册就像是我们的私人宝藏&#xff0c;里面装满了无数珍贵的回忆。但是&#xff0c;如果你不小心把里面的宝贝照片给删了&#xff0c;那可真是让人欲哭无泪啊&#xff01;删除的照片如何恢复&#xff1f;今天&#xff0c;我要给你介绍几个方法&#xff0c;让你轻松找回那些…

网络编程(二)TCP编程 TCP粘包问题

文章目录 一、TCP网络编程&#xff08;一&#xff09;流程&#xff08;二&#xff09;相关函数1. socket2. bind3. listen4. accept5. connect 二、收发函数&#xff08;一&#xff09;send函数&#xff08;二&#xff09;recv函数 三、TCP粘包问题&#xff08;一&#xff09;将…

linux精通 4.1

2.1.3 http服务器实现 目的 reactor应用——webserver webclient 每次上课前 看大纲down code 复习&#xff1a; 不行啊 编译给的代码报错啊 给的最新的不是0430那一版就不行啊 reactor.c:(.text0x254): relocation truncated to fit: R_X86_64_PC32 against symbol begin de…

Gobject tutorial 八

The GObject base class Object memory management Gobject的内存管理相关的API很复杂&#xff0c;但其目标是提供一个基于引用计数的灵活的内存管理模式。 下面我们来介绍一下&#xff0c;与管理引用计数相关的函数。 Reference Count 函数g_object_ref和g_object_unref的…

车载测试面试项目看这一套就够了!车载测试___自我讲解项目

面试官您好&#xff0c;我叫xx来自安微&#xff0c;今年xx岁&#xff0c;毕业于安微新华学院&#xff0c;我是从2017年开始接触软件测试行业&#xff0c;目前从事软件测试工作有5年多时间&#xff0c;第一家公司做了电商和进销存项目app和web都有做过&#xff0c;上家公司做了车…

Python使用策略模式实现绘图功能

策略模式&#xff08;Strategy Pattern&#xff09;:允许定义一系列算法&#xff0c;将它们封装起来&#xff0c;使得它们可以互换。 实现绘制不同类型的图表&#xff08;如折线图、柱状图和饼图&#xff09;功能。 下面是一个示例&#xff0c;展示如何传入横坐标和纵坐标内容…