鴻蒙OSUniApp 實現的日期選擇器與時間選擇器組件#三方框架 #Uniapp

UniApp 實現的日期選擇器與時間選擇器組件

在移動應用開發中,日期選擇器和時間選擇器是表單、預約、日程、打卡等場景中不可或缺的基礎組件。一個好用的日期/時間選擇器不僅能提升用戶體驗,還能有效減少輸入錯誤。隨著 HarmonyOS(鴻蒙)生態的不斷壯大,開發一套兼容鴻蒙的日期與時間選擇器組件變得尤為重要。本文將結合 UniApp 跨平臺開發的優勢,詳細講解如何實現一個高效、易擴展、適配鴻蒙的日期和時間選擇器組件,并分享實際案例和鴻蒙適配經驗。

為什么要自定義日期/時間選擇器?

雖然 UniApp 提供了 uni-datetime-pickeruni-picker 等基礎能力,但在實際項目中,往往會遇到如下需求:

  • 支持日期、時間、日期時間等多種模式;
  • 支持自定義樣式、格式、占位符、禁用范圍等;
  • 兼容多端,尤其是 HarmonyOS 設備的適配和體驗優化;
  • 支持表單校驗、聯動、快捷選擇等高級功能。

自定義組件不僅能滿足個性化需求,還能提升整體產品體驗和品牌一致性。

組件設計思路

設計一個日期/時間選擇器組件,需要考慮以下幾個方面:

  1. 多模式支持:日期、時間、日期時間、年月等多種選擇模式。
  2. 交互體驗:彈窗選擇、滑動選擇、快捷選項、禁用日期等。
  3. 樣式定制:支持自定義顏色、圖標、占位符、動畫等。
  4. 鴻蒙適配:在鴻蒙端保證彈窗、滑動、動畫等能力正常。
  5. 易用性與擴展性:props 設計合理,便于業務集成和后續擴展。

組件實現

我們以一個通用的 DateTimePicker 組件為例,支持日期、時間、日期時間三種模式。

1. 組件結構

components/date-time-picker/date-time-picker.vue 下新建組件:

<template><view class="dt-picker"><inputclass="dt-input":placeholder="placeholder":value="displayValue"readonly@click="openPicker"/><pickerv-if="mode === 'date'"mode="date":value="dateValue":start="start":end="end"@change="onDateChange":disabled="disabled"/><pickerv-else-if="mode === 'time'"mode="time":value="timeValue"start="00:00"end="23:59"@change="onTimeChange":disabled="disabled"/><pickerv-elsemode="datetime":value="dateTimeValue":start="start":end="end"@change="onDateTimeChange":disabled="disabled"/></view>
</template><script>
export default {name: 'DateTimePicker',props: {value: {type: String,default: ''},mode: {type: String,default: 'date' // date, time, datetime},placeholder: {type: String,default: '請選擇日期/時間'},start: {type: String,default: ''},end: {type: String,default: ''},disabled: {type: Boolean,default: false},format: {type: String,default: '' // 可自定義顯示格式}},data() {return {show: false};},computed: {displayValue() {if (!this.value) return '';if (this.format) {// 可擴展為格式化顯示return this.value;}return this.value;},dateValue() {return this.value ? this.value.split(' ')[0] : '';},timeValue() {return this.value ? this.value.split(' ')[1] : '';},dateTimeValue() {return this.value || '';}},methods: {openPicker() {// 兼容部分端需手動觸發 picker// 這里直接依賴 input 的點擊彈出 picker},onDateChange(e) {const val = e.detail.value;this.$emit('input', val);this.$emit('change', val);},onTimeChange(e) {const val = e.detail.value;this.$emit('input', val);this.$emit('change', val);},onDateTimeChange(e) {const val = e.detail.value;this.$emit('input', val);this.$emit('change', val);}}
};
</script><style scoped>
.dt-picker {width: 100%;position: relative;margin-bottom: 32rpx;
}
.dt-input {width: 100%;height: 88rpx;border: 1rpx solid #e5e5e5;border-radius: 12rpx;padding: 0 24rpx;font-size: 32rpx;background: #f8f8f8;color: #333;
}
</style>

2. 組件使用與頁面集成

在頁面中引用并使用 DateTimePicker 組件,實現日期、時間、日期時間選擇:

<template><view class="demo-dt-picker"><date-time-picker v-model="date" mode="date" placeholder="選擇日期" /><date-time-picker v-model="time" mode="time" placeholder="選擇時間" /><date-time-picker v-model="datetime" mode="datetime" placeholder="選擇日期時間" /><text class="result">日期:{{ date }} 時間:{{ time }} 日期時間:{{ datetime }}</text></view>
</template><script>
import DateTimePicker from '@/components/date-time-picker/date-time-picker.vue';export default {components: { DateTimePicker },data() {return {date: '',time: '',datetime: ''};}
};
</script><style scoped>
.demo-dt-picker {padding: 40rpx;
}
.result {margin-top: 32rpx;color: #666;font-size: 28rpx;
}
</style>

3. HarmonyOS 適配與優化建議

  • 彈窗體驗:鴻蒙端對 picker 彈窗支持良好,建議多端真機測試。
  • 格式化顯示:可結合 dayjs/moment.js 等庫自定義日期時間格式。
  • 禁用范圍:可根據業務需求設置 start/end 限制選擇范圍。
  • UI 細節:鴻蒙設備分辨率多樣,建議用 vw/rpx 單位自適應。
  • 無障礙支持:為輸入框和 picker 添加 aria-label,提升可訪問性。

4. 實際案例與體驗優化

在某鴻蒙快應用項目中,日期/時間選擇器廣泛應用于預約、打卡、日程等場景,結合表單校驗和快捷選項,極大提升了用戶體驗。實際開發中還可結合以下優化:

  • 支持快捷選擇"今天"“明天”"本周末"等;
  • 選擇后自動校驗并高亮錯誤;
  • 結合表單聯動,選擇日期后自動刷新相關數據;
  • 只讀模式下支持展示歷史記錄。

總結

基于 UniApp 的日期/時間選擇器組件方案,既能兼容 HarmonyOS 生態,也能滿足多端統一開發需求。通過靈活的 props 設計、交互優化和樣式定制,可以為用戶帶來高效、友好的日期時間選擇體驗。希望本文能為你的鴻蒙/UniApp 項目提供實用參考。


如有問題或更好的實現思路,歡迎留言交流!

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

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

相關文章

嵌入式開發STM32 -- 江協科技筆記

1.背景介紹及基礎認知 8大輸入輸出 斯密特觸發器&#xff1a;高于設定閾值輸出高電平&#xff0c;低于設定閾值輸出低電平 有關上拉輸入、下拉輸入、推挽輸出、開漏輸出、復用開漏輸出、復用推挽輸出以及浮空輸入、模擬輸入的區別 1、上拉輸入&#xff1a;上拉就是把電位拉高…

RISC-V 開發板 MUSE Pi Pro RTSP 串流 CSI ov5647 攝像頭

視頻鏈接&#xff1a;RISC-V 開發板 MUSE Pi Pro RTSP 串流 CSI ov5647 攝像頭_嗶哩嗶哩_bilibili RISC-V 開發板 MUSE Pi Pro RTSP 串流 CSI ov5647 攝像頭 RTSP&#xff08;Real-Time Streaming Protocol&#xff0c;實時流傳輸協議&#xff09; 是一種基于文本的應用層協議&…

Python面試1

1. 解釋型語言和編譯型語言的區別 編譯型語言&#xff1a; 將程序編譯成二進制可執行程序&#xff08;C、C) 解釋型語言&#xff1a; 將程序逐行解釋運行&#xff08;python&#xff09; Java不是將源程序直接編譯機器語言&#xff0c;而是編譯成字節碼文件&#xff0c;然后用…

輸入一串字符,統計其中字母的個數

#include <stdio.h> int main() { char ch; int count 0; printf("請輸入一串字符&#xff1a;\n"); while ((ch getchar())! \n) { if ((ch > a && ch < z) || (ch > A && ch < Z)) { count; } } printf("字母的個數為&a…

git基礎語法回顧

1. 初始化與克隆 git init 初始化一個新的本地倉庫。git clone <repo-url> 克隆遠程倉庫到本地&#xff08;如 git clone https://github.com/user/repo.git&#xff09;。 2. 基礎操作 git add <file> 將文件添加到暫存區&#xff08;如 git add main.py&#x…

華為倉頡語言初識:結構體struct和類class的異同

前言 華為倉頡語言是鴻蒙原生應用的一種新的編程語言&#xff0c;采用面向對象的編程思想&#xff0c;為開發者帶來新的開發體驗。不僅可以和 ArkTs 相互調用&#xff0c;更能提升應用程序的性能&#xff0c;更重要的是倉頡語言的特點結合了 java 和 C 的特點。對開發者來說比…

電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測

電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測 目錄 電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測預測效果基本描述程序設計參考資料 預測效果 基本描述 電池預測 | 第28講 基于CNN-GRU的鋰電池剩余壽命預測 運行環境Matlab2023b及以上&#xff0c;鋰電池剩余壽…

在 Ubuntu 24.04 LTS 上 Docker 部署 DB-GPT

一、DB-GPT 簡介 DB-GPT 是一個開源的AI原生數據應用開發框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。目的是構建大模型領域的基礎設施&#xff0c;通過開發多模型管理(SMMF)、Text2SQL效果優化、RAG框架以及…

早停策略和模型權重的保存

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 作業&#xff1a;對信貸數據集訓練后保存權重&#xff0c;加載權重后繼續訓練50輪&#xf…

DeepSpeed-Ulysses:支持極長序列 Transformer 模型訓練的系統優化方法

DeepSpeed-Ulysses&#xff1a;支持極長序列 Transformer 模型訓練的系統優化方法 flyfish 名字 Ulysses “Ulysses” 和 “奧德修斯&#xff08;Odysseus&#xff09;” 指的是同一人物&#xff0c;“Ulysses” 是 “Odysseus” 的拉丁化版本 《尤利西斯》&#xff08;詹姆…

Redis-基礎-總結

一、概述 Remote Dictionary Server(遠程字典服務)是完全開源的&#xff0c;使用ANSIC語言編寫遵守BSD協議&#xff0c;是一個高性能的Key-Value數據庫提供了豐富的數據結構&#xff0c;例如String、Hash、List、Set、sortedset等等。數據是存在內存中的&#xff0c;同時Redis…

尚硅谷redis7 28-32 redis持久化之理論介紹

28redis持久化之理論介紹 redis持久化&#xff1a;redis如何將內存數據寫入磁盤中 為什么需要持久化&#xff1f; 內存數據一斷電就會消失&#xff0c;那么所有的請求都會打到數據庫中。因此讓redis中的數據長期持有&#xff0c;不管是重啟、故障、恢復、宕機&#xff0c;還…

JS逆向【抖查查】逆向分析 | sign | secret簽名驗證

1.目標 目標網址&#xff1a;https://www.douchacha.com/bloggerRankingRise 切換日期出現目標請求 import requests import jsonheaders {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q0.9","…

【數據倉庫面試題合集④】SQL 性能調優:面試高頻場景 + 調優策略解析

隨著業務數據規模的持續增長,SQL 查詢的執行效率直接影響到數據平臺的穩定性與數據產出效率。因此,在數據倉庫類崗位的面試中,SQL 性能調優常被作為重點考察內容。 本篇將圍繞常見 SQL 調優問題,結合實際經驗,整理出高頻面試題與答題參考,助你在面試中游刃有余。 ?? 高…

python打卡訓練營打卡記錄day37

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 作業&#xff1a;對信貸數據集訓練后保存權重&#xff0c;加載權重后繼續訓練50輪&#xf…

卷積神經網絡(CNN)深度講解

卷積神經網絡&#xff08;CNN&#xff09; 本篇博客參考自大佬的開源書籍&#xff0c;幫助大家從頭開始學習卷積神經網絡&#xff0c;謝謝各位的支持了&#xff0c;在此期待各位能與我共同進步? 卷積神經網絡&#xff08;CNN&#xff09;是一種特殊的深度學習網絡結構&#x…

深度體驗:海螺 AI,開啟智能創作新時代

人工智能 AI 工具如雨后春筍般涌現&#xff0c;而海螺 AI 以其獨特的魅力與卓越的性能&#xff0c;迅速在眾多產品中嶄露頭角&#xff0c;成為了無數創作者、辦公族以及各行業人士的得力助手。近期&#xff0c;我對海螺 AI 進行了深入的使用體驗&#xff0c;接下來就為大家詳細…

哈希表day5

242 有效的字母異位詞 思路就是轉為ASCII碼&#xff0c;然后用一個數組記錄26位字母出現的次數 #include <string> class Solution{ public:bool isAnagram(string s,string t){int record[26]{0};for (int i0;i<s.size();i){record[s[i]-a];}for (int i0;i<t.si…

【Python數據庫全棧指南】從SQL到ORM深度實踐

目錄 &#x1f31f; 前言&#x1f3d7;? 技術背景與價值&#x1fa79; 當前技術痛點&#x1f6e0;? 解決方案概述&#x1f465; 目標讀者說明 &#x1f9e0; 一、技術原理剖析&#x1f4ca; 核心概念圖解&#x1f4a1; 核心作用講解&#x1f527; 關鍵技術模塊說明?? 技術選…

Android磁盤占用優化全解析:從監控到治理的存儲效率革命

引言 隨著移動應用功能的復雜化&#xff0c;磁盤占用問題日益突出。據統計&#xff0c;國內頭部應用的平均安裝包大小已超100MB&#xff0c;運行時緩存、日志、圖片等數據更可能使磁盤占用突破GB級。過度的磁盤消耗不僅影響用戶設備空間&#xff0c;還可能觸發系統的“應用數據…