ant design vue+vue3+ts实现一天内按钮只能点击2次,并置灰,且过当天0点时需复原~

1、需求:在主页面中点击新增按钮,弹出弹窗,此时弹窗中有一个确定按钮,需实现该确定按钮在当天0点前指点点击2次,超过2次置灰,过了零点复原。

思路:首先弹窗通过v-if显示与隐藏弹窗子组件,使用父传子及子传父将弹窗弹窗开启关闭标识符来控制弹窗的开启与关闭。

第二步:针对一天内按钮只能点击2次需求,首先我们要拿到当前的系统日期及明天日期,并转化为“2024-09-01”格式,为后续通过Date.parse()转化为总毫秒数做对比,来实现点击次数,但此时容易忽略一个问题,即弹窗是通过v-if实现的,每一次进来都会重新渲染,在子组件中定义的点击次数变量会清零,所以此时需要进行状态管理,这里使用的是pinia来实现的,将点击次数等数据存储在pinia中,然后在弹窗组件中使用即可。(也可通过将点击次数数据存储在本地存储中,通过判断本地存储中有无点击次数来判断起始数字即可)

第三步:针对过0点之后复原问题。同样的在pinia中获取当前系统日期,并在组件中将上一次点击时的“明天日期”存储在pinia中,然后在pinia中写方法进行比对,当二者一致时,进行复原即可。(这里应计算大于等于,后续优化)

按钮置灰同样道理。

2、父组件

<a-button class="btn" type="primary" @click="add">新增</a-button>
<modal v-if="openFlag == true" :openFlag="openFlag" @close="handle"></modal>import { ref } from 'vue';
import modal from '@/layout/SpecialFaceToFace/modal/modal.vue';
// 新增
let openFlag = ref(false);
function add() {openFlag.value = true;
}

3、子组件

<template><!-- 弹窗 --><a-modal v-model:open="open" title="分配信息" :closable="closable"><!-- 底部自定义按钮 --><template #footer><a-button key="back" @click="handleCancel">取消</a-button><a-button key="submit" type="primary" @click="handleOk" :disabled="useStore.isDisabled">确定</a-button></template></a-modal>
</template><script lang="ts" setup>import { ref, defineProps, defineEmits, onMounted } from 'vue';import { useSpecialStore } from '@/store/modules/SpecialModal';const useStore = useSpecialStore();// 取消弹窗叉号let closable = false;// 接收弹窗开启标识const re = defineProps(['openFlag']);const emits = defineEmits(['close']);onMounted(() => {// 开启弹窗open.value = re.openFlag;// 实现第二天确认按钮点击次数及置灰复原useStore.compareDay();});// 日期处理比较const getTomorrowDate = () => {const today = new Date();// 格式化当天日期const newTotade = today.toISOString().split('T')[0]; //"2024-08-31"// 获取明天日期// 创建一个新的日期对象const tomorrow = new Date(today);tomorrow.setDate(tomorrow.getDate() + 1); //"2024-08-31T14:15:30.000Z"const newTomorrow = tomorrow.toISOString().split('T')[0]; //"2024-08-31"if (Date.parse(newTotade) < Date.parse(newTomorrow) && useStore.clickCount < 2) {useStore.clickCount++;console.log('次数', useStore.clickCount);useStore.useTomorrow = newTomorrow;} else {message.warning('一天内只能点击2次');// 确定按钮置灰useStore.isDisabled = true;}};// 确定事件const handleOk = () => {// 点击次数控制getTomorrowDate();open.value = false;// 将关闭标识传给父组件emits('close', open.value);};// 取消事件const handleCancel = () => {open.value = false;// 将关闭标识传给父组件emits('close', open.value);};
</script>

4、pinia

import { defineStore } from 'pinia';
import { ref } from 'vue';
export const useSpecialStore = defineStore('SpecialModal', () => {// 弹窗确认按钮点击次数const clickCount = ref(0);// 确定按钮是否只读const isDisabled = ref(false);// 存储的是昨天的明天日期const useTomorrow = ref('');// 复原确认按钮点击次数及置灰const compareDay = () => {// 获取当前日期const day = new Date();// 格式化当天日期const newDay = day.toISOString().split('T')[0]; //"2024-09-01"if (Date.parse(useTomorrow.value) <= Date.parse(newDay)) {clickCount.value = 0;isDisabled.value = false;} else {return;}};return {clickCount,isDisabled,useTomorrow,compareDay,};
});

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

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

相关文章

【Linux网络】应用层协议HTTP(1)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux网络 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 应用层协议HTTP 的相关内容。 如果看到最后您觉得这篇文章写得…

OCI编程高级篇(十八) OCI连接池概念

数据库连接池已经不是新概念了&#xff0c;它以有限的连接让外部更多的客户来访问数据库&#xff0c;一般用于中间服务器中&#xff0c;OCI也有连接池的概念。OCI的连接池是由OCI自己管理的&#xff0c;不需要应用干预&#xff0c;程序通过函数从连接池中得到一个会话&#xff…

【Android】 工具篇:ProxyPin抓包详解---夜神模拟器

1️⃣ProxyPin介绍 ProxyPin是一种基于MITM(中间人攻击)的抓包工具,主要用于移动应用程序的安全测试和调试。下面是关于ProxyPin的详解。 2️⃣ 安裝和使用 安裝 下载地址 https://gitee.com/wanghongenpin/network-proxy-flutter/releases 直接拖入模拟器就可以了,打开…

github源码指引:共享内存、数据结构与算法:字符串池StringPool

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 专题&#xff1a;共享内存、数…

5. MyBatis 如何实现数据库类型和 Java 类型的转换的?

MyBatis 在处理数据库查询结果或传递参数时&#xff0c;需要将数据库类型与 Java 类型之间进行转换。MyBatis 提供了多种方式来实现这种类型转换&#xff0c;主要通过内置的 TypeHandler&#xff08;类型处理器&#xff09;机制。 1. TypeHandler 的作用 TypeHandler 是 MyBat…

C++ STL 之哈希 map unordered_map

一. 概述 在C中&#xff0c;unordered_map 是一个关联容器&#xff0c;是一种基于哈希表的键值对容器&#xff0c;它存储了键值对&#xff08;key-value&#xff09;&#xff0c;其中每个键&#xff08;key&#xff09;都是唯一的。 二. map & unordered_map的区别 map内…

rqueue使用笔记

文章目录 maven依赖引入监听器注入和发送消息接收消息属性配置 项目用到rqueue&#xff0c;虽然知道和redis相关&#xff0c;但是肯定有不一样的地方&#xff0c;做个笔记。 maven依赖 网上找个能用的版本就行&#xff0c;如&#xff1a; <dependency><groupId>c…

「深入理解」HTML Meta标签:网页元信息的配置

「深入理解」HTML Meta标签&#xff1a;网页元信息的配置 HTML的<meta>元素用于提供关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些信息对于浏览器和其他处理HTML文档的应用程序来说是非常有用的&#xff0c;如&#xff1a;<base>、<li…

【网络安全】服务基础第一阶段——第九节:Windows系统管理基础---- Windows_AD域

目录 一、域与活动目录 1.1 工作组 1.2 域 1.2.1 域&#xff08;Domain&#xff09; 1.2.2 域控制器&#xff08;Domain Controller&#xff0c;DC&#xff09; 1.2.3 功能和角色 1.2.4 管理和监控 1.2 5 域结构 1.3 组织单元&#xff08;Organizational Unit&#xff…

集成电路学习:什么是IP知识产权

一、IP&#xff1a;知识产权 IP是Intellectual Property的缩写&#xff0c;即知识产权。知识产权是一种无形的财产权&#xff0c;也称智力成果权&#xff0c;它指的是通过智力创造性劳动所获得的成果&#xff0c;并且是由智力劳动者对成果依法享有的专有权利。这种权利包括人身…

性能优化:自动化处理系统设计

性能优化&#xff1a;自动化处理系统设计 前言需求分析系统设计1. 调度中心2. 任务执行器3. 错误处理机制4. 通知系统5. 报表生成器6. 日志记录器 技术实现结语 前言 在当今这个信息爆炸、技术日新月异的时代&#xff0c;企业面临着前所未有的挑战和机遇。随着业务量的不断增长…

基于Yolov5_6.1、LPRNet、PySide6开发的车牌识别系统

项目概述 项目背景 随着车辆数量的不断增加&#xff0c;车牌识别系统在交通管理、停车场自动化等领域变得越来越重要。本项目利用先进的深度学习技术和现代图形用户界面框架来实现高效的车牌识别功能。 项目特点 高效识别&#xff1a;采用 YOLOv5_6.1 进行车牌定位&#xff…

差分传输与单端传输

差分与单端传输 本页讨论模拟信号传输中的两个概念&#xff1a;“单端”和“差分”。模拟信号用于将模拟仪器的输出传送到数字转换器。虽然数字信号对干扰的容忍度相对较高&#xff0c;但模拟信号却可能受到环境中电磁波的干扰和改变。本文档将解释这一问题&#xff0c;并描述…

React 入门第九天:与后端API的集成与数据管理

在React学习的第九天&#xff0c;我集中学习了如何与后端API进行集成。这一步是将静态的React应用转变为动态、可交互的关键。通过与后端通信&#xff0c;我们可以从服务器获取数据、发送用户输入以及处理复杂的业务逻辑。 1. 使用fetch进行数据请求 React没有内置的HTTP库&a…

Assembly 跨域通信AppDomain

Assembly 怎么实现跨域通信 在 .NET Framework 中&#xff0c;AppDomain 是一种用于隔离应用程序的机制&#xff0c;可以在单个进程内创建多个应用程序域&#xff08;AppDomain&#xff09;。每个应用程序域都有自己的程序集、资源和内存空间。通过使用 AppDomain&#xff0c;…

Linux 搭建 Java 部署环境:安装 JDK 和 MySQL 的教程

目录 一、apt 二、JDK 2.1 更新软件包 2.2 安装openjdk 三、MySQL 3.1 使用apt安装MySQL 3.2 查看MySQL的状态 3.3 MySQL 安装安全设置 3.4 设置密码 一、apt apt(Advanced Packaging Tool), Linux软件包管理工具&#xff0c;用于在Ubuntu、Debian和相关Linux发行版上…

OcrLiteNcnn:Windows环境打包及Java调用

目录结构 前言cmake安装源码下载说明Windows源码编译执行“cmake -DCMAKE_BUILD_TYPE=Release ..”执行“cmake --build . --config Release -- -m:6”编译完成识别图片命令行调用Java调用前言 Java实现OCR识别图片中的文字,小编先前整理过一篇在Linux环境中基于“ChineseOcr…

OpenCV入门12.2:SURF与SIFT比较及SURF示例

SIFT (Scale-Invariant Feature Transform): 提出时间: 1999年&#xff0c;由David Lowe提出。关键特点: 能够检测和描述图像中的关键点&#xff0c;这些关键点对旋转、缩放和部分亮度变化具有不变性。计算复杂度: 相对较高&#xff0c;因为SIFT使用了高斯差分核来检测关键点&…

小程序面试题二

一、微信小程序的开发原理是什么&#xff1f; 微信小程序的开发原理主要基于Web规范&#xff0c;采用HTML、CSS和JavaScript等前端技术&#xff0c;并结合微信官方提供的特定框架和API进行开发。以下是小程序开发原理的详细解析&#xff1a; 1. 开发框架与语言 WXML&#xff…

全局安装react

1、首先安装react脚手架 npm install -g create-react-app2、创建react项目 create-react-app my-app3、 PS D:\桌面\papers\subject> create-react-app my-react-appCreating a new React app in D:\桌面\papers\subject\my-react-app.Installing packages. This might …