uniapp 日期組件可選擇年月

month-picker 月份選擇器組件

組件介紹

month-picker 是一個用于選擇年月的自定義組件,基于 uni-app 開發,提供了簡潔的月份選擇功能。
解決彈框底部出現底部頁面區域
safe-area屬性設為true時,即可解決這個問題
在這里插入圖片描述

  • 效果如圖

功能特點

  • 支持選擇年份和月份
  • 可設置默認選中的年月
  • 自動限制當前年份的可選月份
  • 提供清晰的視覺反饋和交互體驗

使用方法

基本用法

<template><month-picker v-model="selectedMonth" @change="handleMonthChange"/>
</template><script>
import MonthPicker from '@/pages/components/date-picker/month-picker.vue'
export default {components: {MonthPicker},data() {return {selectedMonth: '2023-05'}},methods: {handleMonthChange(value) {console.log('選擇的月份:', value)}}
}
</script>

屬性說明

屬性名類型默認值說明
value / v-modelString“”綁定值,格式為"YYYY-MM"
placeholderString“請選擇月份”未選擇時的占位文本
safe-areaBooleanfalse是否開啟底部安全區適配。設為 false 時不會為底部安全區添加額外padding,適合自定義內容已考慮安全區的情況

事件說明

事件名說明回調參數
input選擇月份時觸發(value: String) 格式為"YYYY-MM"
change確認選擇月份時觸發(value: String) 格式為"YYYY-MM"

month-pick 核心代碼

<template><view><view class="date-selector" @click="showPopup"><text>{{ displayText }}</text><uni-icons type="bottom" size="14" /></view><uni-popup ref="popup" type="bottom" class="custom-picker-popup" :safe-area="false" :background-lock="true"><view class="custom-picker"><view class="picker-header"><text @click="closePopup">取消</text><text @click="confirmMonth">確定</text></view><picker-view :value="dateValue" indicator-class='pickerCol'  @change="handlePickerChange"><picker-view-column class="picker-item"><view v-for="(year, i) in yearList" :key="i">{{ year }}年</view></picker-view-column><picker-view-column class="picker-item"><view v-for="(month, i) in maxMonth" :key="i">{{ month }}月</view></picker-view-column></picker-view></view></uni-popup></view>
</template><script>
export default {props: {// 默認選中的年月(格式:YYYY-MM)value: {type: String,default: "",},// 占位文本placeholder: {type: String,default: "請選擇月份",},},data() {return {yearList: [],selectedYear: new Date().getFullYear(),selectedMonth: new Date().getMonth() + 1,dateValue: [0,0],maxMonth: 12,};},computed: {displayText() {const currentTime = `${new Date().getFullYear()}年${new Date().getMonth() + 1}月`;if (!this.selectedYear || !this.selectedMonth) return currentTime;return `${this.selectedYear}年${this.selectedMonth}月`;},},created() {this.generateYearList();this.setDefaultValue();},mounted() {},methods: {generateYearList() {const currentYear = new Date().getFullYear();this.yearList = Array.from({ length: 10 },(_, i) => currentYear - 9 + i);},setDefaultValue() {const [year, month] = this.value.split("-");if (!year || !month) {if(this.selectedYear){this.dateValue[0] = this.yearList.indexOf(parseInt(this.selectedYear));this.dateValue[1] = parseInt(this.selectedMonth) - 1;this.updateMaxMonth(parseInt(this.selectedYear));}return;};this.dateValue[0] = this.yearList.indexOf(parseInt(year));this.dateValue[1] = parseInt(month ) - 1;this.updateMaxMonth(parseInt(year));},updateMaxMonth(year) {if (year === new Date().getFullYear()) {this.maxMonth = new Date().getMonth() + 1;} else {this.maxMonth = 12;}},showPopup() {this.$refs.popup.open();},closePopup() {this.$refs.popup.close();},confirmMonth() {this.selectedYear = this.yearList[this.dateValue[0]];this.selectedMonth = this.dateValue[1] + 1;this.$emit("input",`${this.selectedYear}-${this.selectedMonth.toString().padStart(2, "0")}`);this.$emit("change",`${this.selectedYear}-${this.selectedMonth.toString().padStart(2, "0")}`);this.closePopup();},handlePickerChange(e) {const [yearIndex, monthIndex] = e.detail.value;this.updateMaxMonth(this.yearList[yearIndex])this.dateValue[0] = yearIndex;this.dateValue[1] = Math.min(monthIndex,this.maxMonth - 1) ;},},
};
</script><style scoped lang="scss">
.picker-view {display: flex;align-items: center;padding: 10px;background-color: #f5f5f5;border-radius: 4px;
}
.custom-picker {background-color: #fff;border-radius: 12px 12px 0px 0px;
}
.date-selector {font-size: 32rpx;color: #020b1c;
}
.picker-header {display: flex;justify-content: space-between;padding: 12px 16px;border-bottom: 1px solid #eee;
}
picker-view {height: 560rpx;
}
::v-deep .pickerCol {height: 90rpx;line-height: 90rpx;border-radius: 20rpx;
}.picker-item {font-size: 32rpx;color: #333;text-align: center;view {line-height: 90rpx;}
}
::v-deep .uni-picker-view-highlight {/* 修改選中項的高亮背景 */background-color: #eee !important;height: 80rpx;
}
</style>

注意事項

  • 當選擇的年份為當前年份時,月份選項會自動限制為當前月份及之前的月份
  • 年份范圍為當前年份前9年至當前年份
  • 組件使用了 uni-popup 和 uni-icons,請確保項目中已引入這些組件
  • safe-area屬性設為false時,彈出層不會為底部安全區添加額外padding,適合自定義內容已考慮安全區的情況;設為true時會自動適配底部安全區域,避免內容被遮擋

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88556.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88556.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88556.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從真人到數字分身:3D人臉掃描設備在高校數字人建模教學中的應用

在影視、動漫、游戲等數字創意產業蓬勃發展的當下&#xff0c;超寫實虛擬數字人憑借其高度逼真的形象&#xff0c;成為行業關注的焦點。無論是影視特效中栩栩如生的角色&#xff0c;還是游戲里精致的NPC&#xff0c;超寫實虛擬數字人的制作都離不開先進的技術支撐。而3D人臉掃描…

你以為大數據只是存?其實真正的“寶藏”藏在這招里——數據挖掘!

你以為大數據只是存&#xff1f;其實真正的“寶藏”藏在這招里——數據挖掘&#xff01; 曾經我也天真地以為&#xff0c;搞大數據就是會寫幾個SQL、部署個Hadoop集群&#xff0c;結果真到項目現場&#xff0c;甲方爸爸一句&#xff1a;“給我挖掘一下用戶的購買意圖”&#xf…

LeetCode經典題解:128、最長連續序列

“最長連續序列”是一道極具代表性的數組處理問題&#xff0c; 本文將帶你從直觀思路出發&#xff0c;逐步推導出最優解法&#xff0c;并通過場景化記憶技巧掌握核心邏輯。 一、題目描述 題目&#xff1a;給定一個未排序的整數數組 nums&#xff0c;找出數字連續的最長序列&…

電力分析儀的“雙語對話”:CCLinkIE與Modbus TCP的無縫連接

在工業自動化領域&#xff0c;協議兼容性問題如同“方言壁壘”&#xff0c;讓不同品牌、不同系統的設備難以高效協同。對于電力分析儀這類關鍵設備而言&#xff0c;如何打破CCLinkIE與Modbus TCP協議的“語言障礙”&#xff0c;已成為工程師優化系統集成的核心課題。 為何需要協…

暑假復習篇之文本編譯器

一、知識點補充【在此次示例代碼上顯示的關鍵用法】知識點1、JMenuBar&#xff1a;菜單欄的容器&#xff0c;通常添加到JFrame的頂部。關鍵用法&#xff1a;add&#xff1a; 添加菜單到菜單欄2、JMenu&#xff1a;菜單條目&#xff08;“文件” “編輯” 等&#xff09;&#x…

Linux自動化構建工具(一)

&#x1f381;個人主頁&#xff1a;工藤新一 &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄Li…

目標檢測流程圖繪制

目標檢測流程圖繪制作為一個長期科研的苦命人&#xff0c;我一般采用Processon。 一、目標檢測流程圖繪制的 “量身定制” 體驗 Processon 的繪圖元素庫對目標檢測領域極度友好&#xff0c;從基礎模塊到復雜結構都能精準匹配&#xff1a; ??核心組件一鍵調用&#xff1a;在右…

GitHub 趨勢日報 (2025年07月09日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖970genai-toolbox780WebAgent650rustfs451prompt-eng-interactive-tutorial246ai-a…

多云環境下的成本管理挑戰與對策 ——資源碎片化治理與華為CloudMatrix破局之道

一、危機&#xff1a;多云成本失控已成企業“隱形殺手”成本超支概率激增據Gartner 2024報告&#xff0c;采用多云策略的企業成本超支概率比單云企業高47%&#xff0c;主因資源碎片化導致的閑置浪費和管控失效。觸目驚心的數據&#xff1a;73%企業云成本占營收超20%&#xff0c…

Linux的基礎I/O

目錄 1、理解“文件” 1.1 狹義理解 1.2 廣義理解 1.3 文件操作的歸類認知 1.4 系統角度 2、回顧C文件接口 2.1 文件的打開與關閉 2.2 文件的讀寫函數 2.3 stdin & stdout & stderr 3、系統文件I/O 3.1 一種傳標志位的方式 3.2 文件的系統調用接口 3.2.1 o…

廣告匹配策略的智能化之路:人工智能大模型的方法和步驟

摘要 廣告匹配策略是指根據用戶的需求和偏好&#xff0c;向用戶推薦最合適的廣告的方法。廣告匹配策略的優化是數字化營銷的核心問題之一&#xff0c;也是提升廣告效果和收益的關鍵因素。本文介紹了如何利用人工智能大模型&#xff0c;從數據分析、廣告推薦、策略優化、效果評…

飛算JavaAI:重塑Java開發的“人機協同“新模式

引言 在Java開發領域&#xff0c;“效率"與"質量"的平衡始終是開發者面臨的核心挑戰——重復編碼消耗精力、復雜業務易出漏洞、老系統重構舉步維艱。飛算JavaAI的出現&#xff0c;并非簡單地用AI替代人工&#xff0c;而是構建了一套"AI處理機械勞動&#…

運行ssh -T git@github.com報錯

運行ssh -T gitgithub.com報錯 no such identity: /root/.ssh/id_rsa: No such file or directory gitssh.github.com: Permission denied (publickey). 如果我用的是ed25519而非rsa&#xff0c;有id_ed25519 則需要打開~/.ssh/config檢查一下是否寫錯了 vim ~/.ssh/config 然后…

20250710-2-Kubernetes 集群部署、配置和驗證-網絡組件存在的意義?_筆記

一、網絡組件的作用&#xfeff;1. 部署網絡組件的目的&#xfeff;核心功能&#xff1a;執行kubectl apply -f calico.yaml命令的主要目的是為Kubernetes集群部署網絡組件必要性&#xff1a;解決Pod間的跨節點通信問題建立集群范圍的網絡平面&#xff0c;使所有Pod處于同一網絡…

【牛客刷題】dd愛科學1.0

文章目錄 一、題目介紹1.1 題目描述1.2 輸入描述:1.3 輸出描述:1.4 示例1二、解題思路2.1 核心策略2.2 算法流程2.3 正確性證明三、算法實現四、關鍵步驟解析五、復雜度分析六、正確性驗證七、算法對比7.1 暴力搜索法7.2 動態規劃7.3 三種解法對比分析一、題目介紹 1.1 題目描…

跑步-Java刷題 藍橋云課

目錄 題目鏈接 題目 解題思路 代碼 題目鏈接 競賽中心 - 藍橋云課 題目 解題思路 用數組記錄每個月有多少天,再使用一個int型變量記錄是星期幾,遍歷即可 代碼 import java.util.Scanner; // 1:無需package // 2: 類名必須Main, 不可修改public class Main {public stat…

Qt常用控件之QWidget(二)

Qt常用控件&#xff08;二&#xff09;1.window frame2.windowTitle3.windowIcon&#x1f31f;&#x1f31f;hello&#xff0c;各位讀者大大們你們好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列專欄&#xff1a;【Qt的學習】 &#x1f4dd;&#x1f4dd;本篇…

飛算Java AI:專為 Java 開發者打造的智能開發引擎

目錄 一&#xff0c;核心功能 1&#xff0c;智能編碼&#xff08;AI Coding&#xff09; 2&#xff0c;AI 驅動測試&#xff08;AI Testing&#xff09; 3&#xff0c;智能運維&#xff08;AIOps&#xff09; 4&#xff0c;工程化支持 二、注冊與上手&#xff1a;3 分鐘快…

基于開源AI大模型AI智能名片S2B2C商城小程序源碼的私域流量新生態構建

摘要&#xff1a;私域流量并非新生概念&#xff0c;企業持續構建和經營“企業 - 客戶”關系是其持續存在的關鍵&#xff0c;且會隨時代發展自我完善迭代。本文探討了開源AI大模型AI智能名片S2B2C商城小程序源碼在私域流量領域的應用價值。通過分析私域流量發展現狀與挑戰&#…

用 ELK+Filebeat 提高50%問題排查效率,這套方案實測有效!

摘要 在中大型系統中&#xff0c;日志的分布常常讓問題排查變得異常痛苦&#xff1a;每次出錯都要登錄一堆服務器、翻一堆文本&#xff0c;還不一定能找到關鍵線索。為了解決這個問題&#xff0c;ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;日志聚合平臺應運而…