当前位置: 首页 > news >正文

Vue3+setup实现父子组件单表增删改查写法模板

父组件写法

<el-card><!-- el-card 头部插槽 显示列表名和新增按钮 --><template #header><div class="table-header-container"><i class="fas fa-th" />角色列表(100)<span style="flex-grow: 1" />&nbsp;&nbsp;&nbsp;<!-- 新增按钮 --><el-buttonicon="fas fa-plus"type="text"style="margin: -10px 0px"@click="click_Add_Roles">&nbsp;新增监管角色</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>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 掌握MATLAB中的数据类型转换技巧
  • java之认识异常
  • matlab绘制不同区域不同色彩的图,并显示数据(代码)
  • 【C++ 高频面试题】new、delete 与 malloc、free的区别
  • 64位系统中不支持In.vi与Out.vi的原因
  • 深入理解指针(二)
  • GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制
  • Nginx:Web架构中的全能战士
  • 020、二级Java选择题综合知识点(持续更新版)
  • python vtk 绘制圆柱体和包围盒
  • 网络工程师学习笔记——网络互连与互联网
  • 数据库体系结构概述
  • Python实现牛顿法 目录
  • I/O 多路复用:`select`、`poll`、`epoll` 和 `kqueue` 的区别与示例
  • 【代码随想录训练营第42期 Day55打卡 - 图论Part5 - 并查集的应用
  • 07.Android之多媒体问题
  • HTTP中的ETag在移动客户端的应用
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Node + FFmpeg 实现Canvas动画导出视频
  • Objective-C 中关联引用的概念
  • pdf文件如何在线转换为jpg图片
  • Redis字符串类型内部编码剖析
  • select2 取值 遍历 设置默认值
  • STAR法则
  • vue学习系列(二)vue-cli
  • win10下安装mysql5.7
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 区块链技术特点之去中心化特性
  • 什么软件可以剪辑音乐?
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通过git安装npm私有模块
  • 自制字幕遮挡器
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​HTTP与HTTPS:网络通信的安全卫士
  • (2)MFC+openGL单文档框架glFrame
  • (35)远程识别(又称无人机识别)(二)
  • (LeetCode C++)盛最多水的容器
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (转) ns2/nam与nam实现相关的文件
  • (转)shell中括号的特殊用法 linux if多条件判断
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Net CF下精确的计时器
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET建议使用的大小写命名原则
  • .Net语言中的StringBuilder:入门到精通
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /var/spool/postfix/maildrop 下有大量文件
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能
  • [AI 大模型] Meta LLaMA-2