微信小程序 选择学期控件 自定义datePicker组件 不复杂

news2025/4/8 20:59:38

我的时间选择组件在common文件夹里

datePicker组件代码

html:
<view class="date_bg_view">
</view>
<view class="date_content">
  <view class="date_title">
    <image src="/image/icon_close_black.png" class="close" bindtap="onClose"></image>
    <text class="date_title_txt">选择时间</text>
  </view>
  <view class="line"></view>
  <!-- 快速选择 -->
  <view class="date_quick_choose">
    <text class="date_quick_txt">快速选择</text>
    <view class="date_quick_show">
      <view class="{{item.flag ? 'quick_cell_flag' : 'quick_cell'}}" wx:for="{{dateList}}" wx:key="id" bindtap="handleQuickChoose" data-index="{{index}}">
        {{item.name}}
      </view>
    </view>
  </view>
  <!-- 自定义时间 -->
  <view class="date_quick_choose">
    <text class="date_quick_txt">自定义时间</text>
    <view class="date_picker">
      <picker mode="date" value="{{startDate}}" start="2015-09-01" end="2999-12-31" bindchange="bindDateChange" data-type="1"  mask-style=" color='#0A3E79'">
        <view class="picker">
        {{startDate?startDate:'开始时间'}}
        </view>
      </picker> 
      <text style="width: 20rpx;height: 1rpx;background-color: #999;"></text>
      <picker mode="date" value="{{endDate}}" start="2015-09-01" end="2999-12-31" bindchange="bindDateChange"  data-type="2">
        <view class="picker">
          {{endDate?endDate:'结束时间'}}
        </view>
      </picker>
    </view>
  </view>
  <button class="sure_btn" bindtap="handleSure"> 确定 </button>
</view>

css:
.date_bg_view{
  position: absolute;
  top: 0;
  left: 0;
  z-index: 10;
  width: 100%;
  height: 100%;
  background-color: #000;
  opacity: 0.3;  
}
.date_content{  
  position: fixed;
  bottom: 0;  
  left: 0;  
  z-index: 11;
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: flex-start;
  width: 100%;
  height: 75%;
  background-color: #fff;      
  border-top-left-radius: 20rpx;
  border-top-right-radius: 20rpx;
}
.date_title{
  z-index: 11;
  width: 100%;
  display: flex;
  justify-content: center;
  height: 90rpx;
  line-height: 90rpx;
}
.close{  
  position: absolute;
  top: 20rpx;
  right: 20rpx;
  width: 30rpx;
  height: 30rpx;
}
.date_title_txt{
  font-size: 35rpx;
  font-weight: bold;
}
.line{
  margin: 10rpx;
  width: 100%;  
  height: 1rpx;
  background-color: #eee;
}
.date_quick_choose{
  z-index: 11;
  padding: 20rpx;
  width: 100%;  
}
.date_quick_txt{
  z-index: 12;
  margin: 20rpx;    
  font-size: 30rpx;
  color: #666;  
}
.date_quick_show{
  z-index: 12;  
  display: flex;
  justify-content: flex-start;
  flex-wrap: wrap;
  flex-direction: row;
  align-items: center;  
  width: 100%;  
}
.quick_cell{
  z-index: 12;
  margin: 2%;
  padding: 5rpx;
  width: 29%;  
  height: 60rpx;
  text-align: center;
  line-height: 60rpx;      
  font-size: 28rpx;
  background-color: #F7F7F7;
  color: #999;
  border: 1rpx solid #F7F7F7;
  border-radius: 10rpx;
}
.quick_cell_flag{
  z-index: 12;
  margin: 2%;
  padding: 5rpx;
  width: 29%;  
  height: 60rpx;
  line-height: 60rpx;
  font-size: 28rpx;
  text-align: center;      
  background-color: #fff;
  color: #19b2ff;
  border: 1rpx solid #19b2ff;
  border-radius: 10rpx;
}
.date_picker{  
  margin-top: 30rpx;
  margin-left: 10%;
  display: flex;    
  justify-content: space-between;
  align-items: center;
  width: 80%;
}
.picker{  
  padding: 10rpx 40rpx;
  background-color: #fff;
  font-size: 30rpx;
  color: #19b2ff;
  font-weight: bold;
}
.sure_btn{
  margin-top: 80rpx;  
  font-size: 28rpx;
  width: 90%;    
  height: 80rpx;
  text-align: center;
  line-height: 80rpx;
  background-color: #19b2ff;
  color: #fff;  
}


js:

const util = require('../../utils/util.js');
import {
  formatDate
} from "../../utils/date";
const app = getApp();
Component({
  lifetimes: {
    attached: function () {
      // 在组件实例进入页面节点树时执行
      var currentDate = new Date();

      // 获取当前年份和月份
      var currentYear = currentDate.getFullYear();
    
      // 计算五年内的上学期和下学期
      var semesters = [];
      for (var i = 0; i < 5; i++) {
        var years = currentYear - i;
        semesters.push({
          name: years + '下半学年',
          dates: [years + '-09-01', (years + 1) + '-01-31'],
          flag: false
        });     
        semesters.push({
          name: years + '上半学年',
          dates: [years + '-02-01', years + '-06-30'],
          flag: false
        });        
      }

      // 输出结果
      this.setData({
        dateList: semesters
      })
    },

  },
  properties: {},

  /**
   * 组件的初始数据
   */
  data: {
    dateList: [],
    startDate: '',
    endDate: '',
    currentTime: formatDate(new Date()),
    oidx: null,
  },

  methods: {
    /**
     * 快速选择
     * @param {*} e 
     */
    handleQuickChoose(e) {
      let that = this;
      let oidx = e.currentTarget.dataset.index;
      let odateList = that.data.dateList
      
      // 遍历数组,并修改flag属性为false
      odateList.forEach(item => {
        item.flag = false;
      });
      odateList[oidx].flag = true
      that.setData({
        startDate: odateList[oidx].dates[0],
        endDate: odateList[oidx].dates[1],
        oidx,
        dateList: odateList
      })      
    },
    bindDateChange(e) {
      //console.log('picker发送选择改变,携带值为', e)
      let that = this;
      let type = e.currentTarget.dataset.type
      if (type == 1) {
        that.setData({
          startDate: e.detail.value
        })
      } else {
        that.setData({
          endDate: e.detail.value
        })
      }
    },
    /**
     * 顶部关闭按钮
     */
    onClose() {
      this.triggerEvent('sync', {
        show: false
      })
    },

    /**
     * 确定
     */
    handleSure() {
      let that = this;
      if (!that.data.startDate || !that.data.endDate) {
        util.alert('学期选择不能为空!');
        return false;
      }
      if (that.data.startDate <= that.data.endDate) {
        that.triggerEvent('sync', {
          show: false,
          startDate: that.data.startDate,
          endDate: that.data.endDate
        })
      } else {
        util.alert('结束时间不能小于开始时间');
        return false;
      }

    }
  },

})


json:
{
  "component": true,
  "usingComponents": {}
}

调用的页面:

json:
"usingComponents": {
  "datePicker":"../../common/datePicker/index"
},


html:
      <view class="check-list">
        <view class="check-list-lef">学期选择</view>
        <view class="check-list-rig">
          <view class="picker" bind:tap="openDatePicker">{{ startDate && endDate ? (startDate + ' - ' + endDate) : '请选择学期'}}</view>
          <!-- 时间选择组件 bind:sync 子类回传数据的方法-->
          <datePicker wx:if="{{show}}" bind:sync="syncGetDate"></datePicker>                    
        </view>
      </view>


js:
data:{
  startDate: '',
  endDate: '',
  show: false,//显示隐藏时间控件
}

  openDatePicker(e) {
    this.setData({
      hiddenChart: true,
      show:true
    })
  },
  syncGetDate(e){
    let that = this;
    let show = e.detail.show; 
    if(!show){ // 子组件点击了关闭   关闭弹窗
      that.setData({
        show:false,
        startDate: e.detail.startDate,
        endDate: e.detail.endDate,
        //hiddenChart: false,
      })
    }
    //console.log("子组件:",e);    
    //this.getStatisticThemeActivitiesTrend()
  },

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

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

相关文章

SKU助手

属性SKU助手可以帮你快速选中目标商品属性 下载安装与运行 下载、安装与运行 语雀 如何使用 下面以1688批量自动下单为例&#xff0c;演示用法&#xff0c;同样适用于淘宝天猫拼多多批量自动下单 功能说明 SKU助手弹出的时机 同时满足如下两个条件 Excel提供的SKU与真实…

知识储备--基础算法篇-数组

1.学习 2.数组 2.1第53题-最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 心得&#xff1a;一直在纠结这个连续的事情&…

YOLOv5算法改进(13)— 替换主干网络之PP-LCNet

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。PP-LCNet是一个由百度团队针对Intel-CPU端加速而设计的轻量高性能网络。它是一种基于MKLDNN加速策略的轻量级卷积神经网络&#xff0c;适用于多任务&#xff0c;并具有提高模型准确率的方法。与之前预测速度相近的模型相比…

你真的懂分数吗?(二)——分数模型应用初探

早点关注我&#xff0c;精彩不错过&#xff01; 上回我们聊到了分数的数学结构和数学建模&#xff0c;构成了分数的基本数学模型。相关内容请戳&#xff1a; 你真的懂分数吗&#xff1f;&#xff08;一&#xff09;——分数的数学结构和建模 但是&#xff0c;这样的分数是定义在…

基于单片机的点阵电子显示屏上下左右移加减速系统

一、系统方案 本设计的任务就是完成一个1616的点阵设计&#xff0c;并能滚动显示“********************”内容。 主要内容是&#xff0c;能同时流动显示汉字&#xff1b;能实现显示汉字无闪烁&#xff1b;能实屏幕亮度较高。本LED显示屏能够以动态扫描的方式显示一个1616点阵汉…

性能可靠it监控系统,性能监控软件的获得来源有哪些

性能可靠的IT监控系统是企业IT运维的重要保障之一。以下是一个性能可靠的IT监控系统应该具备的特点&#xff1a; 高可用性 高可用性是IT监控系统的一个重要特点&#xff0c;它可以保证系统在24小时不间断监控的同时&#xff0c;保证系统服务的可用性和稳定性。为了实现高可用性…

TiDB x 安能物流丨打造一栈式物流数据平台

作者&#xff1a;李家林 安能物流数据库团队负责人 本文以安能物流作为案例&#xff0c;探讨了在数字化转型中&#xff0c;企业如何利用 TiDB 分布式数据库来应对复杂的业务需求和挑战。 安能物流作为中国领先的综合型物流集团&#xff0c;需要应对大规模的业务流程&#xff…

linux中dmesg命令用法

在Linux系统中&#xff0c;dmesg&#xff08;diagnostic message&#xff09;是一个非常有用的命令行工具&#xff0c;用于显示和控制内核环形缓冲区中的消息。这些消息通常包含系统启动时的内核生成的信息&#xff0c;例如硬件设备的状态&#xff0c;驱动程序的加载&#xff0…

【Python基础教程】快速找到多个字典中的公共键(key)的方法

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 方法一&#xff1a;for in循环 from random import randint, samplea1 {k: randint(1, 4) for k in abcdefg} a2 {k: randint(1, 4) for k in abc123456…

Qt应用开发(基础篇)——输入对话框 QInputDialog

一、前言 QInputDialog类继承于QDialog&#xff0c;是一个简单方便的对话框&#xff0c;用于从用户获取单个值。 对话框窗口 QDialog QInputDialog输入对话框带有一个文本标签、一个输入框和标准按钮。输入内容可以字符、数字和选项&#xff0c;文本标签用来告诉用户应该要输入…

一文看遍半监督学习模型(Semi-Supervised Learning)

一、半监督学习的总体框架 二、一致性正则化模型 该算法旨在&#xff1a;一个模型对于同一个未标记图像&#xff0c;在图像添加额外噪声前后的预测值应该保持一致。 添加噪声的方法&#xff0c;如图像增强&#xff08;空间维度增强、像素维度增强&#xff09;。 同样&#x…

线性DP问题

目录 数字三角形DP 动态规划 [自上向下二维数组]DP 动态规划 [自上向下一维数组]DP 动态规划 [自下而上二维数组]DP 动态规划 [自下而上一维数组]记忆化搜索 DFS 最长上升子序列一维状态数组实现扩展&#xff1a;最长序列输出 最长上升子序列 II贪心二分优化算法思路代码实现扩…

2023蓝帽杯初赛

比赛总结就是首先审题要仔细&#xff0c;确定题目意思再去找才不会找错。 内存取证vol工具的使用不够熟练 然后容易走进死胡同&#xff0c;如果一个软件不能得到答案可以换一个看看&#xff0c;说不定就有答案了。 还有服务器取证很生疏&#xff0c;还是要多花时间做点题 取…

黑客之批处理编写

文章目录 一、批处理作用二、如何创建批处理三、批处理语法 一、批处理作用 自上而下成批的处理每一条命令&#xff0c;直到执行最后一条。这里的命令指的是DOS命令&#xff0c;在之前的【黑客常用DOS命令】博客中&#xff0c;我介绍了大量的常用DOS命令。不过我们之前输入命令…

Lesson3-5:OpenCV图像处理---模版匹配和霍夫变换

学习目标 掌握模板匹配的原理&#xff0c;能完成模板匹配的应用理解霍夫线变换的原理&#xff0c;了解霍夫圆检测知道使用OpenCV如何进行线和圆的检测 1 模板匹配 1.1 原理 所谓的模板匹配&#xff0c;就是在给定的图片中查找和模板最相似的区域&#xff0c;该算法的输入包括…

C++之map,set,multimap,multiset的使用

map&#xff0c;set&#xff0c;multimap&#xff0c;multiset的使用 关联式容器键值对树形结构的关联式容器setset介绍set的使用set定义方式set各种操作函数 multiset mapmap的介绍map的使用insert函数find函数erase函数[ ]运算符重载map的迭代器遍历 multimap 关联式容器 在…

ARM编程模型-状态模式

ARM的两种工作状态 大部分的ARM处理器都实现了两种指令集&#xff0c;32位ARM指令集和16位Thumb指令集&#xff0c;看生成的机器码是32位的还是16位的 ARM v6引入了新的指令集Thumb-2,能够提供32位和16位的混合指令&#xff0c;在增强了灵活性的同时保持了代码的高密度。 ARM的…

Linux基础学习2

Linux基础学习2 popen函数 popen函数 https://blog.csdn.net/yzy1103203312/article/details/78483566 https://blog.csdn.net/xy1413_/article/details/127135608 典型用法&#xff1a; FILE * fp popen("ifconfig eth0", "r"); if (!fp) { fprintf…

再谈IOS开发环境配置(2023-09-01 新)

关于IOS的开发&#xff0c;需要配置证书、密钥、管理标识符、功能配置等等&#xff0c;很是繁杂&#xff0c;以前也配置过&#xff0c;这次因为重新购买了新的M1笔记本&#xff0c;准备重新配置下&#xff0c;顺便记录&#xff0c;以便查询。 如果要开发IOS&#xff0c;首先需要…

2023高教社杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…