vue3+ts+element-plus管理系统实际开发业务之增删改查

news2024/11/23 9:01:30

文章目录

    • 功能一: 实现一个表格增、删、改、查功能
      • ✏️ 1. 表格、添加按钮、删除按钮、搜索框和搜索按钮、编辑按钮添加
          • 📒 运行后页面效果:如下
      • ✏️ 2. 使用添加按钮添加一条新纪录,逻辑点击按钮弹出带有表单的弹窗进行输入添加。实现代码如下图
          • 📒 运行后页面效果:如下
          • 注释: 中途用到的表单知识
      • ✏️ 3. 使用删除按钮单条和批量删除表格信息
        • 1. 先禁用删除按钮,当有选中信息时候释放删除按钮。
          • 📒 运行后页面效果:如下
        • 2. 添加选中时候确认提示。
          • 📒 运行后页面效果:如下
      • ✏️ 4. 使用编辑按钮修改单条表格信息
        • 1. 点击编辑获取当条信息,同时打开弹窗并且把获取信息赋值给form对象
          • 📒 运行后页面效果:如下
        • 2. 编辑信息后提交(提交和添加一样一般写在一块)
    • 最后附上完整代码


注释: 上期主要实现项目从0-1搭建,和引入常见依赖时候报错和出现的问题,之后是完整的管理系统常见功能开发代码。中途有问题或者错误欢迎大家指出共同学习,

功能一: 实现一个表格增、删、改、查功能

✏️ 1. 表格、添加按钮、删除按钮、搜索框和搜索按钮、编辑按钮添加

布局使用le-row,表格使用le-table,整体使用ts+setup实现。实现代码如下图
​​在这里插入图片描述
在这里插入图片描述

📒 运行后页面效果:如下

在这里插入图片描述

✏️ 2. 使用添加按钮添加一条新纪录,逻辑点击按钮弹出带有表单的弹窗进行输入添加。实现代码如下图

![在这里插入图片描述](https://img-blog.csdnimg.cn/7474be55710c4485ba817d2af26ef83c.png

在这里插入图片描述

📒 运行后页面效果:如下

在这里插入图片描述

注释: 中途用到的表单知识

validate: 对表单进行校验,返回一个 Promise 对象,可以通过 .then() 方法获取校验结果。
resetFields: 重置表单,将表单的值恢复为初始状态。
clearValidate: 清除表单的校验结果。
setFieldsValue: 设置表单字段的值。
getFieldsValue: 获取表单字段的值。
getFieldValue: 获取指定字段的值。
getFieldsError: 获取表单字段的校验错误信息。
isFieldsTouched: 判断表单字段是否被触碰过。
isFieldsValidating: 判断表单字段是否正在进行校验。

✏️ 3. 使用删除按钮单条和批量删除表格信息

逻辑当没有选中信息时候删除按钮为禁用状态,有选中信息时候,删除按钮可点击,并且点击后弹出确认删除提示。实现代码如下图

1. 先禁用删除按钮,当有选中信息时候释放删除按钮。

在这里插入图片描述
在这里插入图片描述

📒 运行后页面效果:如下

在这里插入图片描述
在这里插入图片描述

2. 添加选中时候确认提示。

在这里插入图片描述

📒 运行后页面效果:如下

在这里插入图片描述

✏️ 4. 使用编辑按钮修改单条表格信息

逻辑: 点击编辑获取当条信息,同时打开弹窗并且把获取信息赋值给form对象,编辑信息后提交(提交和添加一样一般写在一块)

1. 点击编辑获取当条信息,同时打开弹窗并且把获取信息赋值给form对象

在这里插入图片描述
在这里插入图片描述

📒 运行后页面效果:如下

在这里插入图片描述

2. 编辑信息后提交(提交和添加一样一般写在一块)

在这里插入图片描述

最后附上完整代码


<!-- 增删改查 -->
<template>
    <!-- 搜索框 -->
    <el-row>
        <el-col :span="24">
            <el-date-picker v-model="inputDate.timeDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
                class="input-box m-2" placeholder="请选择" />
            <el-input v-model="inputDate.name" class="input-box m-2" placeholder="名字" :suffix-icon="Search" />
            <el-button type="primary" plain @click="searchClick" :icon="Search">搜索</el-button>
            <el-button type="primary" plain @click="addClick">添加</el-button>
            <el-button type="danger" plain @click="deleteClick" :icon="Delete" :disabled="disabled">删除</el-button>
        </el-col>
    </el-row>
    <!-- 引入表格 -->
    <el-table :data="tableData" @selection-change="handleSelectionChange" style="width: 100%">
        <el-table-column type="selection" width="55" />
        <el-table-column fixed prop="date" label="Date" width="150" />
        <el-table-column prop="name" label="姓名" width="120" />
        <el-table-column prop="state" label="状态" width="120" />
        <el-table-column prop="city" label="地址" width="120" />
        <el-table-column fixed="right" label="操作" width="120">
            <template #default="scope">
                <el-button link type="primary" size="small" @click="detailsClick(scope.row)">详情</el-button>
                <el-button link type="primary" size="small" @click="editorClick(scope.row)">编辑</el-button>
            </template>
        </el-table-column>
    </el-table>
    <!-- 添加弹窗 -->
    <el-dialog v-model="dialogFormVisible" :title="title">
        <el-form :model="ruleForm" ref="ruleFormRef" :rules="rules">
            <el-form-item label="姓名" label-width="140px" prop="name">
                <el-input v-model="ruleForm.name" placeholder="请输入" autocomplete="off" />
            </el-form-item>
            <el-form-item label="状态" label-width="140px" prop="state">
                <el-select v-model="ruleForm.state" placeholder="请选择">
                    <el-option label="待完成" value="1" />
                    <el-option label="已完成" value="2" />
                </el-select>
            </el-form-item>
            <el-form-item label="地址" label-width="140px" prop="city">
                <el-input v-model="ruleForm.city" placeholder="请输入" autocomplete="off" />
            </el-form-item>
            <el-form-item label="时间" label-width="140px" prop="date">
                <el-date-picker v-model="ruleForm.date" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
                    placeholder="请选择" />
            </el-form-item>
        </el-form>
        <template #footer>
            <span class="dialog-footer">
                <el-button @click="dialogFormVisible = false">取消</el-button>
                <el-button type="primary" @click="submitForm(ruleFormRef)">
                    提交
                </el-button>
            </span>
        </template>
    </el-dialog>
</template>
<script setup lang="ts">
import { Search, Delete } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox, FormInstance, } from 'element-plus';
import { reactive, ref } from 'vue';
const tableData = [
    {
        date: '2016-05-03',
        name: 'Tom',
        state: 'California',
        city: 'Los Angeles',
    },
    {
        date: '2016-05-02',
        name: 'Tom',
        state: 'California',
        city: 'Los Angeles',
    },
]

//---- 添加弹窗相关代码 ----
let title = ref("添加")
let dialogFormVisible = ref(false)
//获取表单实例对象
const ruleFormRef = ref<FormInstance>()
let ruleForm = reactive({
    name: '',
    state: '',
    city: '',
    date: ''
})
const rules = reactive({
    name: [
        { required: true, message: '请输入', trigger: 'blur' },
    ],
    state: [
        { required: true, message: '请输入', trigger: 'blur' },
    ],
    city: [
        { required: true, message: '请输入', trigger: 'blur' },
    ],
    date: [
        { required: true, message: '请输入', trigger: 'blur' },
    ],
})
const addClick = () => {
    console.log("添加按钮")
    title.value = "添加"
    dialogFormVisible.value = true
    ruleForm = {
        name: '',
        state: '',
        city: '',
        date: ''
    }
}
//提交表单信息
const submitForm = async (formEl: FormInstance | undefined) => {

    if (!formEl) return
    await formEl.validate((valid) => {
        if (valid) {
            if (title.value === "编辑") {
                console.log('提交编辑信息', ruleForm)

            } else if (title.value === "添加") {
                console.log('提交新添加信息', ruleForm)

            }
        }
    })
}
//---- 表单选中方法 ----
const handleSelectionChange = (val: []) => {
    console.log('选中按钮', val)
    if (val.length > 0) {
        disabled.value = false
        deleteDate = val
    }
}
//---- 删除按钮相关代码 ----
let disabled = ref(true)
let deleteDate = reactive([])
const deleteClick = () => {
    console.log("删除按钮,根据唯一标识符删除当前信息,一般列表更新使用的重新获取接口信息更新", deleteDate)
    ElMessageBox.confirm('是否要删除选中信息?',
        {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
        }
    )
        .then(() => {
            ElMessage({
                message: '删除成功',
                type: 'success',
            })
        })
        .catch(() => {
            ElMessage({
                message: '已取消',
                type: 'warning',
            })
        })
}
//---- 查看详情相关代码 ----
const detailsClick = (row: any) => {
    console.log('详情按钮', row)
}
//---- 编辑单条信息相关代码 ----
const editorClick = (row: any) => {
    console.log('详情按钮', row)
    title.value = "编辑"
    dialogFormVisible.value = true
    ruleForm = row
}
//---- 搜索相关代码 ----
const inputDate = reactive({
    timeDate: "",
    name: "",
})
const searchClick = () => {
    console.log("搜索按钮", inputDate)
}
</script>
<style scoped lang="scss">
.input-box {
    width: 200px;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch--查询(nested、join)

nested 嵌套类型 数据的某个值是json、object对象&#xff1b;不再是简单的数据类型&#xff0c;或者简单数据类型的数组&#xff1b;那么还用之前的查询方式就有问题了。因为ES在存储复杂类型的时候会把对象的复杂层次结果扁平化为一个键值对列表 。此时&#xff0c;需要用n…

一文了解OLED拼接屏优点

随着科技的不断发展&#xff0c;显示技术也在不断地更新换代。其中&#xff0c;OLED技术是目前最为先进的显示技术之一。 OLED拼接屏是一种利用OLED技术制作的大屏幕显示设备&#xff0c;可以将多个OLED屏幕拼接在一起&#xff0c;形成一个更大的显示屏幕。济南OLED拼接屏是一…

分布式锁的实现方式

文章目录 一、分布式锁概述1.1 为什么需要分布式锁1.2 概述分布式锁1.3 分布式锁的特性1.4 分布式锁的类型1.5 实现重点 二、Mysql数据库实现分布式锁2.1 表结构2.2 加锁2.3 解锁2.4 锁超时2.5 实现重入锁 三、Redis实现分布式锁3.1 加锁3.2 解锁3.3 锁超时3.4 redlock的容错性…

设计模式-简单工厂模式

文章目录 简单工厂设计模式什么是简单工厂?为什么使用简单工厂工厂模式代码实现简单工厂优缺点优点&#xff1a; 简单工厂设计模式 学习视频 什么是简单工厂? 简单工厂模式属于类的创建型模式&#xff0c;又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实…

GitLab CICD Day 08 - 环境变量

1.局部/全局环境变量 stages:- testing # stage编排- build- deployvariables:global_var: "全部变量" #全部变量build_image:stage: buildvariables: #局部环境变量my_name: "局部环境变量" tags:- shell script:- …

14款奔驰R400升级ACC自适应巡航系统,增加您的行车安全性

有的时候你是否厌倦了不停的刹车、加油&#xff1f;是不是讨厌急刹车&#xff0c;为掌握不好车距而烦恼&#xff1f;如果是这样&#xff0c;那么就升级奔驰原厂ACC自适应式巡航控制系统&#xff0c;带排队自动辅助和行车距离警报功能&#xff0c;感受现代科技带给你的舒适安全和…

window.getComputedStyle

遇见一个问题&#xff0c;一个元素样式用的 固定定位。但是 top 属性没有在 元素树&#x1f332;种显示。js获取不到。这个方法可以获取到 style 里面设置的样式

OI中好用的技巧——c++快读快写

在写一些题时&#xff0c;发现不对读写进行处理会 TLE or WA 此时就需要降低读写的时间 c读写速度 &#xff1a; 普通写法 < scanf和printf写法 ≈ 缓存禁用写法 < 字符处理写法 普通写法&#xff08;读写最慢&#xff09; #include<iostream> using namespace…

车载调频发射机-德阳广播电台应用机关车队车载电台移动解说系统

车载调频发射机-德阳广播电台应用机关车队车载电台移动解说系统 北京海特伟业科技任洪卓发布于2023年7月13日 一、车载调频发射机-机关车队车载电台移动解说系统用户需求 机关车队主要承担领导干部公务用车以及重要会议、公务接待、调研应急等公务用车的服务保障工作。为认真…

前段开发概述

目录 网站概述 网站&#xff08;web site&#xff09;&#xff1a; 网页概述 网站开发流程&#xff1a; HTML基本概念 开发工具的选择 网站概述 网站&#xff08;web site&#xff09;&#xff1a; 按照一定规则&#xff0c;使用HTML超文本标记语言等工具制作的。用于展示…

FPGA——静态数码管

文章目录 一、实验环境二、实验原理三、实验任务四、实验过程4.1 time_count模块4.2 seg_led_static模块4.3 top_seg_led_static模块4.4 引脚配置 五、仿真5.1 仿真代码5.2 仿真结果 六、实验结果七、总结 一、实验环境 quartus 18.1 modelsim vscode Cyclone IV开发板 二、实…

大坝安全监测中需要做好检查监测

大坝安全监测是人们了解大坝运行状态和安全状况的有效手段和方法。它的目的主要是了解大坝安全状况及其发展态势&#xff0c;是一个包括由获取各种环境、水文、结构、安全信息到经过识别、计算、判断等步骤&#xff0c;最终给出一个大坝安全 程度的全过程。 此过程包括&#xf…

阿里云无影云电脑和服务器有啥区别?

阿里云无影云电脑和云服务器有什么区别&#xff1f;云电脑是作为个人或企业办公电脑使用&#xff0c;云服务器是对外提供24小时高可用服务&#xff0c;云电脑是桌面服务&#xff0c;云服务器是提供背后的计算服务&#xff0c;阿里云百科分享阿里云无影云电脑和云服务器的区别&a…

互联网医院源码|互联网医院系统源码|互联网医院诊疗系统

互联网医院系统开发可以提供许多好用的功能&#xff0c;以下是一些常见的功能&#xff1a;   在线挂号预约&#xff1a;用户可以通过系统在线选择医生、科室和就诊时间&#xff0c;并进行挂号预约&#xff0c;避免了传统排队等候的麻烦。   问诊咨询&#xff1a;用户可以通…

Fiddler 抓包工具 手机抓包配置

1. 下载Fiddler 工具阿里云盘分享 2. 安装后进行设置 Tools -->Options 这些设置完后开始手机WLAN 设置 1. 打开手机的“设置” ->“WLAN”&#xff0c;找到你要连接的网络&#xff0c;在上面长按&#xff0c;然后选择“修改网络”&#xff0c;弹出网络设置对话框&…

探索Web自动化测试工具的特点

Web应用程序的快速发展使得自动化测试在软件开发生命周期中变得至关重要。Web自动化测试工具为开发人员和测试人员提供了一种高效、准确且可重复的方法来验证Web应用程序的功能和稳定性&#xff0c;我们一起来探索Web自动化测试工具的特点。 1.多浏览器兼容性&#xff1a; Web自…

Notes中使用邮件合并功能

大家好&#xff0c;才是真的好。 很久很久以前&#xff0c;就实现了Notes客户机的邮件合并功能&#xff0c;老实说&#xff0c;早得我都忘记当时是如何实现的了。 对了&#xff0c;我记起来一点&#xff0c;就是Excel 2003和之前的版本&#xff0c;还可以导出为Lotus 1-2-3格…

< 每日算法 - JavaScript解析:跳跃游戏 Ⅰ/ Ⅱ - 贪心 >

每日算法 - JavaScript解析&#xff1a;跳跃游戏 Ⅰ/ Ⅱ - 贪心 跳跃游戏 Ⅰ① 任务描述&#xff1a;> 示例一> 示例二 ② 题意解析③ 解决方案&#xff1a; 跳跃游戏 Ⅱ① 任务描述&#xff1a;> 示例一> 示例二 ② 题意解析③ 解决方案 往期内容 &#x1f4a8; 跳…

09_SPI-Flash 页写实验

09_SPI-Flash 页写实验 1. 实验目标2. 操作时序3. 模块框图3.1 顶层模块3.2 页写模块 4. 波形图5. RTL5.1 flash_pp_ctrl5.2 spi_flash_pp 6. Testbench6.1 tb_flash_pp_ctrl6.2 tb_spi_flash_pp 1. 实验目标 使用页写指令&#xff0c;向 Flash 中写入 N 字节数据&#xff0c;…

4.postgresql--rollup,grouping sets,cube

PostgreSQL ROLLUP 是group by 的子句&#xff0c;是生成多个分组集合的快捷功能。与Cube子句的差异是&#xff0c;rollup 不生成基于特定列所有可能的分组集合&#xff0c;生成分组集合为其子集。 ROLLUP假设输入列之间存在层次结构&#xff0c;从而生成有意义的所有分组集合…