黑马智数Day4-1

新增月卡

配置路由完成跳转

{path: '/cardAdd',component: () => import('@/views/car/car-card/add-card')
}<el-button type="primary" @click="$router.push('/cardAdd')">添加月卡</el-button>

车辆信息表单验证

<el-form :model="carInfoForm" :rules="carInfoRules" label-width="100px"><el-form-item label="车主姓名" prop="personName"><el-input v-model="carInfoForm.personName" /></el-form-item><el-form-item label="联系方式" prop="phoneNumber"><el-input v-model="carInfoForm.phoneNumber" /></el-form-item><el-form-item label="车辆号码" prop="carNumber"><el-input v-model="carInfoForm.carNumber" /></el-form-item><el-form-item label="车辆品牌" prop="carBrand"><el-input v-model="carInfoForm.carBrand" /></el-form-item>
</el-form>data() {return {// 车辆信息表单carInfoForm: {personName: '', // 车主姓名phoneNumber: '', // 联系方式carNumber: '', // 车牌号码carBrand: '' // 车辆品牌},carInfoRules: {personName: [{required: true, message: '请输入车主姓名', trigger: 'blur'}],phoneNumber: [{required: true, message: '请输入联系方式', trigger: 'blur'}],carNumber: [{required: true, message: '请输入车辆号码', trigger: 'blur'}],carBrand: [{required: true, message: '请输入车辆品牌', trigger: 'blur'}]}}}

车牌号单独校验

 data() {const validaeCarNumber = (rule, value, callback) => {// value:表单中的数据// callback:放行函数 必须调用 校验通过直接调用 未通过callback(new Error('错误提示语'))const plateNumberRegex = /^[\u4E00-\u9FA5][\da-zA-Z]{6}$/if (plateNumberRegex.test(value)) {callback()} else {callback(new Error('请输入正确的车牌号'))}}return {carInfoRules: {carNumber: [{required: true, message: '请输入车辆号码', trigger: 'blur'},{validator: validaeCarNumber, trigger: 'blur'}]}}}

缴费信息表单校验

 

<el-date-picker v-model="feeForm.payTime" type="daterange" range-separator="至"start-placeholder="开始日期" end-placeholder="结束日期">
</el-date-picker>
<el-form :model="feeForm" :rules="feeFormRules" label-width="100px"><el-form-item label="有效日期" prop="payTime"><el-date-pickerv-model="feeForm.payTime"type="daterange"range-separator="至"start-placeholder="开始日期"end-placeholder="结束日期"/></el-form-item><el-form-item label="支付金额" prop="paymentAmount"><el-input v-model="feeForm.paymentAmount" /></el-form-item><el-form-item label="支付方式" prop="paymentMethod"><el-select v-model="feeForm.paymentMethod"><el-optionv-for="item in payMethodList":key="item.id":value="item.id":label="item.name"/></el-select></el-form-item></el-form>data() {return {// 缴费信息表单feeForm: {payTime: '', // 支付时间paymentAmount: null, // 支付金额paymentMethod: '' // 支付方式},// 缴费规则feeFormRules: {payTime: [{required: true,message: '请选择支付时间'}],paymentAmount: [{required: true,message: '请输入支付金额',trigger: 'blur'}],paymentMethod: [{required: true,message: '请选择支付方式',trigger: 'change'}]},// 支付方式列表payMethodList: [{id: 'Alipay',name: '支付宝'},{id: 'WeChat',name: '微信'},{id: 'Cash',name: '线下'}]}}

统一校验俩个表单

<el-form ref="carInfoForm"></el-form>
<el-form ref="feeForm"></el-form>methods: {confirmAdd() {this.$refs.carInfoForm.validate(valid => {if (valid) {this.$refs.feeForm.validate(valid => {if (valid) {// 全部校验通过// TODO 确定}})}})}
}

收集表单确认提交

封装接口

export function createCardAPI(data) {return request({url: '/parking/card',method: 'POST',data})
}

处理表单数据提交

methods: {confirmAdd() {this.$refs.carInfoForm.validate(valid => {if (valid) {this.$refs.feeForm.validate(valid => {if (valid) {// 全部校验通过// TODO 确定// 参数处理const payload = {...this.feeForm,...this.carInfoForm,// 单独处理时间cardStartDate: this.feeForm.payTime[0],cardEndDate: this.feeForm.payTime[1]}// 删掉多余字段delete payload.payTimeawait createCardAPI(payload)this.$router.back()}})}})}
}

重置表单

  1. 清空输入数据

  2. 清空校验错误

resetForm() {this.$refs.feeForm.resetFields()this.$refs.carInfoForm.resetFields()
}

编辑月卡

编辑功能的通用实现流程

携带id跳转并缓存id

scope 作用域插槽

scope.row -> 当前行的数据对象

<el-button size="mini" type="text" @click="editCard(scope.row.id)">编辑</el-button>editCard(id) {this.$router.push({path: '/cardAdd',query: {id}})
}

回填数据

封装接口

export function getCardDetailAPI(id) {return request({url: `/parking/card/detail/${id}`})
}

根据id获取详情

// 获取详情
async getDetail() {const res = await getCardDetailAPI(this.id)// 回填车辆信息表单const { carInfoId, personName, phoneNumber, carNumber, carBrand } = res.datathis.carInfoForm = {personName, phoneNumber, carNumber, carBrand, carInfoId}// 回填缴费信息表单const { rechargeId, cardStartDate, cardEndDate, paymentAmount, paymentMethod } = res.datathis.feeForm = {rechargeId,paymentAmount,paymentMethod,payTime: [cardStartDate, cardEndDate]}
}mounted() {if (this.id) {this.getDetail()}
}

根据id做接口适配

methods: {confirmAdd() {this.$refs.carInfoForm.validate(valid => {if (valid) {this.$refs.feeForm.validate(valid => {if (valid) {// 全部校验通过// TODO 确定// 参数处理const payload = {...this.feeForm,...this.carInfoForm,cardStartDate: this.feeForm.payTime[0],cardEndDate: this.feeForm.payTime[1]}delete payload.payTimeif (this.id) {// 编辑await updateCardAPI(payload)} else {// 新增await createCardAPI(payload)}this.$router.back()}})}})}
}

删除功能实现

export function delCardAPI(id) {return request({url: `/parking/card/${id}`,method: 'DELETE'})
}
// 绑定事件
<el-button size="mini" type="text" @click="delCard(scope.row.id)">删除</el-button>// 导入接口
import { delCardAPI } from '@/apis/card'// 删除逻辑
delCard(id) {this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(async() => {await delCardAPI(id)this.getCardList()this.$message({type: 'success',message: '删除成功!'})}).catch((error) => {console.log(error)})
}

批量删除

收集用户选择行

<el-table style="width: 100%" :data="cardList" @selection-change="handleSelectionChange"><el-table-columntype="selection"width="55"/><!-- 省略 -->
</el-table>data() {return {// 已选择列表selectedCarList: []}
}methods:{handleSelectionChange(rowList) {console.log(rowList)this.selectedCarList = rowList}
}

处理数据调用接口

export function delCardListAPI(idList) {return request({url: `/parking/card/${idList.join(',')}`,method: 'DELETE'})
}delCartList() {this.$confirm('此操作将永久删除选择的月卡, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(async() => {// 处理idawait delCardListAPI(this.selectedCarList.map(item => item.id))this.getCardList()this.$message({type: 'success',message: '删除成功!'})}).catch((error) => {console.log(error)})
}

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

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

相关文章

Bug:ThreadPoolTaskScheduler搭配CronTask完成定时任务,关闭scheduler后CronTask任务仍然执行?

【问题】执行下面代码后&#xff0c;关闭ThreadPoolTaskScheduler&#xff0c;CronTask仍然继续执行。 Configuration public class config {Beanpublic String getString() throws InterruptedException {Runnable runnable () -> {try {System.out.println("hello r…

《程序猿之设计模式实战 · 适配器模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

【后端开发】JavaEE初阶—线程安全问题与加锁原理(超详解)

前言&#xff1a; &#x1f308;上期博客&#xff1a;【后端开发】JavaEE初阶—Theard类及常见方法—线程的操作&#xff08;超详解&#xff09;-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f308;小编会在后端开发的学习中不…

关于javascript中防抖和节流的使用详解

防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常见的优化技巧&#xff0c;通常用于控制函数在短时间内频繁触发的场景&#xff0c;尤其是在处理用户输入、滚动、窗口大小调整等事件时。它们的主要目的是减少不必要的函数调用&#xff0c;…

超详细超实用!!!AI编程之cursor编写设计模式开闭原则实例(四)

云风网 云风笔记 云风知识库 一、设计模式开闭原则定义 当应用的需求改变时&#xff0c;在不修改软件实体&#xff08;项目模块、类、接口方法&#xff09;的源代码或者二进制代码的前提下&#xff0c;可以扩展模块的功能&#xff0c;使其满足新的需求。即软件实体应当对扩展开…

【Linux】nginx连接前端项目

文章目录 一、项目编译1.编译文件2.dist文件 二、Linux nginx配置三、启动nginx 一、项目编译 1.编译文件 2.dist文件 二、Linux nginx配置 在Xshell软件中&#xff0c;点击CtrlAltF进入文件传输找到地址&#xff1a;/usr/local/nginx/html将dist文件传入 找到nginx.conf&…

git add成功后忘记commit的文件丢了?

本文目标&#xff1a;开发人员&#xff0c;在了解git fsck命令用法的条件下&#xff0c;进行git add成功但由于误操作导致丢失的文件找回&#xff0c;达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中&#xff0c;分支太多&#xff08;基线分…

CREO教程——2 绘制标准图纸

CREO教程——2 绘制标准图纸 说明&#xff1a;继承第一章设置好的配置文件&#xff0c;这一章进行学习分享如何定制自己的图纸图框&#xff0c;参考国家标准距&#xff0c;定制属于设计师或单位的通用图框。 1.设置工作目录 1.1设置工作目录 1.打开软件设置工作目录&#x…

u盘格式化怎么恢复数据?四款工具来救急!

工作中真的没少碰到过那些让人头疼的数据丢失问题&#xff0c;特别是U盘里的宝贝数据一不小心就“蒸发”了&#xff0c;简直让人欲哭无泪。不过别担心&#xff0c;我作为一个数据恢复的新手小白&#xff0c;最近可是亲测了几款超给力的数据恢复软件&#xff0c;今天就来跟大家分…

19c-TNS-12541: TNS:no listener

有套19c单机&#xff0c;没应用任何的补丁&#xff0c;使用lsnrctl status查看监听是异常的&#xff0c;但是lsnrctl start发现监听已运行&#xff0c;当前业务连接都正常&#xff0c; orcl:/home/oracledb> lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Pro…

打造灵活DateTimePicker日期时间选择器组件:轻松实现时间的独立清除功能

element ui中日期和时间选择器&#xff08;DateTimePicker&#xff09;是一个常见且重要的组件。它允许用户轻松地选择日期和时间&#xff0c;极大地提升了用户体验。然而&#xff0c;在某些场景下&#xff0c;用户可能需要更细粒度的控制&#xff0c;例如单独清除已选择的时间…

下载与安装|Inventor 2025百度云资源分享附教程

如大家所了解的&#xff0c;Inventor是一款专业的三维可视化实体建模软件&#xff0c;主要用于各类二维机械制图、三维制图的设计和开发等操作&#xff0c;可以广泛地应用于零件设计、钣金设计、装配设计等领域。 不同领域的应用证明了Inventor具有强大的兼容性&#xff0c;基…

监控易监测对象及指标之:全面监控Oracle ODBC数据库

在数字化时代&#xff0c;数据库作为存储和管理企业核心数据的基石&#xff0c;其稳定性和性能直接关系到业务的连续性和效率。Oracle数据库以其强大的功能和稳定性&#xff0c;广泛应用于各行各业。为了确保Oracle数据库的稳定运行和高效性能&#xff0c;对其进行全面监控显得…

备战软考Day04-计算机网络

1、计算机网络的分类 2、七层网络体系结构 3、网络的设备与标准 4、TCP/IP协议族 TCP/IP作为Internet的核心协议&#xff0c;被广泛应用于局域网和广域网中&#xff0c;目前已成为事实上的国际标准 1、TCP/IP分层模型 TCP/IP协议是Internet的基础和核心&#xff0c;和OSI参考…

git命令将已经commit的代码push到其他分支

文章目录 一&#xff1a;对于多分支的代码库&#xff0c;将提交记录从一个分支转移到另一个分支是常见需求方法1&#xff1a;撤销commit操作方法2&#xff1a;实用命令git cherry-pick 来移动commit 二、不小心revert导致代码消失的问题 一&#xff1a;对于多分支的代码库&…

【Diffusion分割】FDiff-Fusion:基于模糊学习的去噪扩散融合网络

FDiff-Fusion: Denoising diffusion fusion network based on fuzzy learning for 3D medical image segmentation 摘要&#xff1a; 近年来&#xff0c;去噪扩散模型在图像分割建模中取得了令人瞩目的成就。凭借其强大的非线性建模能力和优越的泛化性能&#xff0c;去噪扩散模…

好用的todolist待办清单软件下载推荐

在快节奏的现代生活中&#xff0c;时间管理变得尤为重要。todolist待办清单管理软件&#xff0c;作为一种高效的任务管理工具&#xff0c;它帮助我们记录、跟踪和管理日常任务&#xff0c;从而提升个人效率。 在众多的待办软件中&#xff0c;敬业签以其出色的用户体验脱颖而出…

Vue2电商项目(四) Detail模块

文章目录 一、配置Detail路由1. 将Detail组件配置为路由组件2. 将路由配置文件拆分3. 声明式导航跳转到Detail跳转时存在的问题&#xff1a;页面滚动条还在下边 二、配置API及vuex三、放大镜及下方轮播图1. Detail组件传递放大镜数据2. 读取vuex数据的经典错误undefined3. 放大…

力扣234 回文链表 Java版本

文章目录 题目描述代码 题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&…

【集合拆分+多线程并行处理,拿来即用】

文章目录 一.业务场景二.拆分流程三. 简单上个List拆分的demo四.测试结果五.小结 一.业务场景 节假日后第一天&#xff0c;上完班有点累&#xff0c;回到家稍微写点简单的东西。 我们项目里面有这样一业务场景&#xff0c;要计算全公司所有人某几个月内每天的考勤机打卡加班工时…