Vue3+setup实现父子组件单表增删改查写法模板
父组件写法
<el-card><!-- el-card 头部插槽 显示列表名和新增按钮 --><template #header><div class="table-header-container"><i class="fas fa-th" />角色列表(100)<span style="flex-grow: 1" /> <!-- 新增按钮 --><el-buttonicon="fas fa-plus"type="text"style="margin: -10px 0px"@click="click_Add_Roles"> 新增监管角色</el-button></div></template><!-- el-table 显示表格 :data绑定数据--><el-table :data="tableData_List" :height="650" stripe ref="userTable"><el-table-columnlabel="序号"type="index":min-width="100"fixedalign="center"/><el-table-columnlabel="编码"prop="code"width="300"sortablealign="center"/><el-table-columnlabel="名称"prop="name"width="180"sortablealign="center"/><el-table-columnlabel="创建时间"prop="createdTime":formatter="formatDate"width="180"sortablealign="center"/><el-table-columnlabel="更新时间"prop="updatedTime":formatter="formatDate"width="180"sortablealign="center"/><el-table-column label="备注" prop="remark" align="center"></el-table-column><el-table-column label="操作" align="center" :min-width="120"><template #default="{ row }"><iclass="fas fa-edit"style="cursor: pointer; color: #409eff"@click="click_Edit(row)"/><iclass="fas fa-trash-alt"style="cursor: pointer; color: red"@click="click_Delete(row)"/></template></el-table-column></el-table><!-- 新增表单弹窗子组件 传入属性值及方法 --><AddRolesDialogref="AddRolesDialogRef":option="optionRoles":rowData="rowDataRoles":formTitle="formTitleRoles"@closeAuthorizeChildDialog="closeAuthorizeChildDialog"@get_SupRoles_List="get_SupRoles_List"></AddRolesDialog></el-card>
<script lang="ts" setup>
// 引入ui组件 加载效果及消息提示
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
// 引入moment插件
import moment from "moment";
import {computed,getCurrentInstance,onMounted,ref,defineProps,nextTick,watch,reactive,
} from "vue";// 引入api 可以是自己封装好的也可以是axios
import axios from "axios";
import { BAD_DATA_DISPLAY_CONTENT } from "@/constant";
// 引入新增表单弹窗子组件
import AddRolesDialog from "./AddRolesDialog.vue";
const { proxy }: any = getCurrentInstance();// 利用moment格式化时间绑定表格创建时间更新时间等
function formatDate(_row: any, _column: any, cellValue?: Date) {if (cellValue) {return moment(cellValue).format("YYYY-MM-DD HH:mm:ss");}// 定义好的常量 例如"--"return BAD_DATA_DISPLAY_CONTENT;
}
// ----------------------------------------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------------
// 定义子组件弹窗开关的布尔值和当前操作的表格行数据
const optionRoles = ref({dialogAuthorizeChildVisible: false,currectRowData: {},
});
// 定义子组件弹窗标题
const formTitleRoles = ref("新增监管角色");
// 定义表格当前行数据
const rowDataRoles = ref({});
// 定义子组件ref
const AddRolesDialogRef: any = ref();
// 定义表格数据源
const tableData_List: any = ref([]);//打开新增表单 更新属性值状态
const click_Add_Roles = () => {optionRoles.value.dialogAuthorizeChildVisible = true;formTitleRoles.value = "新增监管角色";
};
// 定义关闭子组件弹窗方法
const closeAuthorizeChildDialog = () => {optionRoles.value.dialogAuthorizeChildVisible = false;
};
// 定义编辑表格行方法 更改属性值 调用子组件编辑方法
const click_Edit = (row: any) => {formTitleRoles.value = "修改监管角色";rowDataRoles.value = row;AddRolesDialogRef.value.editToForm(row);optionRoles.value.dialogAuthorizeChildVisible = true;
};
// 定义表格行数据删除方法
const click_Delete = (row: any) => {ElMessageBox.confirm(`确定删除该角色吗?`, "提示", {confirmButtonText: "确定",cancelButtonText: "取消",type: "warning",}).then(() => {proxy.axios.delete(`/pcadmin/regulator-role-manage/roles/${row.id}`).then(({ data }: { data: any }) => {ElMessage({type: "success",message: "删除成功",});get_SupRoles_List();}).catch((err: any) => {console.error(err);});}).catch(() => {});
};// 获取监管角色列表
const get_SupRoles_List = () => {let loadingInstance: any = null;loadingInstance = ElLoading.service({lock: true,text: "加载中...",background: "rgba(0, 0, 0, 0.7)",});proxy.axios.get(`/pcadmin/regulator-role-manage/roles`).then(({ data }: { data: any }) => {console.log(data, "获取列表");tableData_List.value = [];tableData_List.value = data.data;if (loadingInstance) {loadingInstance.close();}}).catch((err: any) => {console.error(err);if (loadingInstance) {loadingInstance.close();}});
};onMounted(() => {get_SupRoles_List();
});
</script>
子组件写法
<!-- 显示自定义弹窗 绑定弹窗关闭打开关闭方法及是否显示弹窗标题--><el-dialog@close="closeAuthorizeChildDialog"@open="clearForm"v-model="option1":title="props.formTitle"width="30%"><el-form :model="form"><el-form-item label="编码" prop="code" :label-width="formLabelWidth"><el-inputplaceholder="请输入"class="inputForm"v-model="form.code"autocomplete="off"/></el-form-item><el-form-item label="名称" prop="name" :label-width="formLabelWidth"><el-inputplaceholder="请输入"class="inputForm"v-model="form.name"autocomplete="off"/></el-form-item><el-form-item label="备注" prop="remark" :label-width="formLabelWidth"><el-inputplaceholder="请输入内容"class="inputForm"v-model="form.remark"type="textarea"/></el-form-item><el-form-itemlabel="序列号"prop="sortOrder":label-width="formLabelWidth"><el-inputplaceholder="请输入"class="inputForm"v-model="form.sortOrder"autocomplete="off"/></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="closeAuthorizeChildDialog">取消</el-button><el-button type="primary" @click="onClick_SaveForm"> 确定 </el-button></div></template></el-dialog>
<script lang="ts" setup>
import {ref,defineProps,reactive,onMounted,toRef,defineEmits,getCurrentInstance,computed,defineExpose,
} from "vue";
import { ElMessage } from "element-plus";
// 引入api 可以是自己封装好的也可以是axios
import axios from "axios";
const { proxy }: any = getCurrentInstance();
// 接受父组件传过来的数据
const props = defineProps({option: Object,rowData: Object,formTitle: String,
});
// 表单label宽度
const formLabelWidth = "60px";
// 将父组件传来的option通过toRef转换成响应式数据
const option = toRef(props, "option");
// 接收父组件传来的方法
const emit = defineEmits(["closeAuthorizeChildDialog", "get_SupRoles_List"]);
// 定义form表单初始数据
const form: any = reactive({id: "",code: "",name: "",sortOrder: "",remark: "",
});
//周期函数
onMounted(() => {//打印父组件传递的值
});
// 定义清空form表单数据方法 判断只有新增的时候清空,编辑不清空
const clearForm = () => {if (props.formTitle == "新增监管角色") {form.code = "";form.name = "";form.sortOrder = "";form.remark = "";form.id = "";}
};
// 定义编辑form表单方法 接收实参,形参赋值,拿到要编辑行数据的id
const editToForm = (val: any) => {form.id = val.id;form.code = val.code;form.name = val.name;form.sortOrder = val.sortOrder;form.remark = val.remark;
};
// 方法暴露给父组件
defineExpose({ editToForm });// 定义关闭弹窗方法
const closeAuthorizeChildDialog = () => {emit("closeAuthorizeChildDialog");
};
// 定义一个新变量,用于控制弹窗双向绑定的布尔值
const option1 = computed({get: () => option.value?.dialogAuthorizeChildVisible,set: (val: any) => {emit("closeAuthorizeChildDialog");},
});//新增编辑保存
const onClick_SaveForm = () => {// 关闭弹窗closeAuthorizeChildDialog();// 判断是编辑还是新增if (props.formTitle == "新增监管角色") {let params = {code: "",name: "",sortOrder: "",remark: "",};params.code = form.code;params.name = form.name;params.sortOrder = form.sortOrder;params.remark = form.remark;proxy.axios.post(`/pcadmin/regulator-role-manage/roles`, params).then(({ data }: { data: any }) => {if (data.errorcode == 0) {ElMessage.success("新增成功!");emit("get_SupRoles_List");} else {ElMessage.warning(data.message);}}).catch((err: any) => {console.error(err);ElMessage.warning(err);});} else {let params = {code: "",name: "",sortOrder: "",remark: "",};params.code = form.code;params.name = form.name;params.sortOrder = form.sortOrder;params.remark = form.remark;proxy.axios.put(`/pcadmin/regulator-role-manage/roles/${form.id}`, params).then(({ data }: { data: any }) => {if (data.errorcode == 0) {ElMessage.success("编辑成功!");emit("get_SupRoles_List");} else {ElMessage.warning(data.message);}}).catch((err: any) => {ElMessage.warning(err);console.error(err);});}
};
</script>
相关文章:
Vue3+setup实现父子组件单表增删改查写法模板
父组件写法 <el-card><!-- el-card 头部插槽 显示列表名和新增按钮 --><template #header><div class"table-header-container"><i class"fas fa-th" />角色列表(100)<span style"flex-grow…...
jmeter 录制APP脚本
一、手机 1、修改网络 代理选择手动→填写服务器主机名(电脑IP,如:192.1xx.x.xx)→服务器端口(任意未被占用端口,如:8888) 2、安装证书 手机浏览器访问服务器主机名:服务器端口&a…...
C++类与对象深度解析(一):从抽象到实践的全面入门指南
文章目录 C 类与对象——详细入门指南前言1. 类的定义1.1 类定义的基本格式示例代码解释 1.2 访问限定符示例代码解释 1.3 类域示例代码解释 1.4 成员命名规范常见的命名约定:示例:拓展: 1.5 class与struct的默认访问权限示例: 2.…...
docker拉取 jdk 8
docker pull openjdk:8docker run -d -it --name java-8 openjdk:8docker run -d -it --name java-8 openjdk:8 –name java-8 容器名,自定义的 openjdk:8 镜像名:标签名 , 使用 docker images 查看 2、查看已运行的容器实例: doc…...
机器学习VS深度学习
机器学习(Machine Learning, ML)和深度学习(Deep Learning, DL)是人工智能(AI)的两个子领域,它们有许多相似之处,但在技术实现和应用范围上也有显著区别。下面从几个方面对两者进行区…...
基于vue框架的宠物交流平台1n2n3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:会员,宠物信息,宠物类型,团队信息,申请领养,团队申请,领养宠物 开题报告内容 基于Vue框架的宠物交流平台开题报告 一、项目背景 随着现代生活节奏的加快与人们情感需求的日益增长,宠物已成为众多家庭不可或缺的重要成员。…...
Rust 所有权 借用与引用
文章目录 发现宝藏1. 所有权(Ownership)2. 引用(References)2.1 不可变引用2.2 可变引用2.3 引用的规则 3. 悬垂引用(Dangling References)4. 借用(Borrowing)结论 发现宝藏 前些天…...
构建智能电商新生态:深度解析京东商品详情API的力量
在当今数字化浪潮中,智能电商系统已成为推动零售业转型升级的重要引擎。作为电商行业的领军者之一,京东凭借其庞大的商品数据库和先进的技术架构,为开发者与商家提供了丰富的API接口,其中商品详情API无疑是构建智能电商系统的关键…...
Golang | Leetcode Golang题解之第398题随机数索引
题目: 题解: type Solution []intfunc Constructor(nums []int) Solution {return nums }func (nums Solution) Pick(target int) (ans int) {cnt : 0for i, num : range nums {if num target {cnt // 第 cnt 次遇到 targetif rand.Intn(cnt) 0 {ans …...
使用注意力机制可以让你的模型更加灵活,但是需要额外的计算资源。rnn lstm bilstm attension
确实,使用注意力机制可以使模型更加灵活,但也确实需要额外的计算资源。注意力机制允许模型在处理序列数据时,能够动态地关注不同位置的重要性,从而更好地捕捉长依赖关系。下面是一个简单的注意力机制实现示例,可以帮助…...
git命令大全
简介:个人学习分享,如有错误,欢迎批评指正 一、Git操作流程 1、代码提交和同步代码 第零步: 工作区与仓库保持一致第一步: 文件增删改,变为已修改状态第二步: git add ,变为已暂存状态 $ git status $ git add --al…...
【数据仓库】数据仓库常见的数据模型——范式模型
目录 一、范式 1、第一范式 2、第二范式 3、第三范式 4、进一步范式化:BCNF、4NF 和 5NF 简介 (1)Boyce-Codd 范式(BCNF) (2)第四范式(4NF) (5&#x…...
【LeetCode每日一题】——LCR 078.合并 K 个升序链表
文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 优先队列 二【题目难度】 困难 三【题目编号】 LCR 078.合并 K 个升序链表 …...
代码随想录算法训练营第五十九天 | dijkstra(堆优化版)精讲
目录 dijkstra(堆优化版)精讲 思路 堆优化细节 方法一: 最小堆优化 dijkstra(堆优化版)精讲 题目链接:卡码网:47. 参加科学大会 文章讲解:代码随想录 小明是一位科学家&#x…...
go语言后端开发学习(七)——如何在gin框架中集成限流中间件
一.什么是限流 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。 我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为8万人;沙河地铁站早高峰通过站外排队逐一放行的…...
SpringBoot2:web开发常用功能实现及原理解析-整合EasyExcel实现Excel导入导出功能
1、工程包结构 主要是这5个Java类 2、导入EasyExcel包 这里同时贴出其他相关springboot的基础包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><depend…...
CTFShow-信息搜集
Web1: 题目描述:开发注释未及时删除 。 打开题目后提示web1:where is flag? ctrlu读取源码。 Web2: 题目描述:js前台拦截 无效操作 打开题目后显示:无法查看源代码 右键无法用,…...
Facebook的虚拟现实功能简介:社交网络的新前沿
在科技飞速发展的今天,虚拟现实(VR)已经从科幻小说中的梦想变成了触手可及的现实。作为全球领先的社交平台,Facebook(现已更名为Meta)正大力推动虚拟现实技术的发展,以重新定义用户的社交体验。…...
Redis embstr 编码
embstr 编码 是 Redis 中一种优化存储小型字符串的编码方式。它是 Redis 内部存储字符串的多种方式之一,特别适用于存储长度不超过 44 字节的小字符串。...
【Elasticsearch系列二】安装 Kibana
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...
