| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031 |
- <template>
- <view class="uni-datetime-picker">
- <view @click="initTimePicker">
- <slot>
- <view
- class="uni-datetime-picker-timebox-pointer"
- :class="{
- 'uni-datetime-picker-disabled': disabled,
- 'uni-datetime-picker-timebox': border
- }"
- >
- <text class="uni-datetime-picker-text">{{ time }}</text>
- <view v-if="!time" class="uni-datetime-picker-time">
- <text class="uni-datetime-picker-text">{{ selectTimeText }}</text>
- </view>
- </view>
- </slot>
- </view>
- <view
- v-if="visible"
- id="mask"
- class="uni-datetime-picker-mask"
- @click="tiggerTimePicker"
- ></view>
- <view
- v-if="visible"
- class="uni-datetime-picker-popup"
- :class="[dateShow && timeShow ? '' : 'fix-nvue-height']"
- :style="fixNvueBug"
- >
- <view class="uni-title">
- <text class="uni-datetime-picker-text">{{ selectTimeText }}</text>
- </view>
- <view v-if="dateShow" class="uni-datetime-picker__container-box">
- <picker-view
- class="uni-datetime-picker-view"
- :indicator-style="indicatorStyle"
- :value="ymd"
- @change="bindDateChange"
- >
- <picker-view-column>
- <view
- class="uni-datetime-picker-item"
- v-for="(item, index) in years"
- :key="index"
- >
- <text class="uni-datetime-picker-item">{{
- lessThanTen(item)
- }}</text>
- </view>
- </picker-view-column>
- <picker-view-column>
- <view
- class="uni-datetime-picker-item"
- v-for="(item, index) in months"
- :key="index"
- >
- <text class="uni-datetime-picker-item">{{
- lessThanTen(item)
- }}</text>
- </view>
- </picker-view-column>
- <picker-view-column>
- <view
- class="uni-datetime-picker-item"
- v-for="(item, index) in days"
- :key="index"
- >
- <text class="uni-datetime-picker-item">{{
- lessThanTen(item)
- }}</text>
- </view>
- </picker-view-column>
- </picker-view>
- <!-- 兼容 nvue 不支持伪类 -->
- <text class="uni-datetime-picker-sign sign-left">-</text>
- <text class="uni-datetime-picker-sign sign-right">-</text>
- </view>
- <view v-if="timeShow" class="uni-datetime-picker__container-box">
- <picker-view
- class="uni-datetime-picker-view"
- :class="[hideSecond ? 'time-hide-second' : '']"
- :indicator-style="indicatorStyle"
- :value="hms"
- @change="bindTimeChange"
- >
- <picker-view-column>
- <view
- class="uni-datetime-picker-item"
- v-for="(item, index) in hours"
- :key="index"
- >
- <text class="uni-datetime-picker-item">{{
- lessThanTen(item)
- }}</text>
- </view>
- </picker-view-column>
- <picker-view-column>
- <view
- class="uni-datetime-picker-item"
- v-for="(item, index) in minutes"
- :key="index"
- >
- <text class="uni-datetime-picker-item">{{
- lessThanTen(item)
- }}</text>
- </view>
- </picker-view-column>
- <picker-view-column v-if="!hideSecond">
- <view
- class="uni-datetime-picker-item"
- v-for="(item, index) in seconds"
- :key="index"
- >
- <text class="uni-datetime-picker-item">{{
- lessThanTen(item)
- }}</text>
- </view>
- </picker-view-column>
- </picker-view>
- <!-- 兼容 nvue 不支持伪类 -->
- <text
- class="uni-datetime-picker-sign"
- :class="[hideSecond ? 'sign-center' : 'sign-left']"
- >:</text
- >
- <text v-if="!hideSecond" class="uni-datetime-picker-sign sign-right"
- >:</text
- >
- </view>
- <view class="uni-datetime-picker-btn">
- <view @click="clearTime">
- <text class="uni-datetime-picker-btn-text">{{ clearText }}</text>
- </view>
- <view class="uni-datetime-picker-btn-group">
- <view class="uni-datetime-picker-cancel" @click="tiggerTimePicker">
- <text class="uni-datetime-picker-btn-text">{{ cancelText }}</text>
- </view>
- <view @click="setTime">
- <text class="uni-datetime-picker-btn-text">{{ okText }}</text>
- </view>
- </view>
- </view>
- </view>
- <!-- #ifdef H5 -->
- <!-- <keypress v-if="visible" @esc="tiggerTimePicker" @enter="setTime" /> -->
- <!-- #endif -->
- </view>
- </template>
- <script>
- // #ifdef H5
- import keypress from './keypress'
- // #endif
- import { initVueI18n } from '@dcloudio/uni-i18n'
- import messages from './i18n/index.js'
- const { t } = initVueI18n(messages)
- /**
- * DatetimePicker 时间选择器
- * @description 可以同时选择日期和时间的选择器
- * @tutorial https://ext.dcloud.net.cn/plugin?id=xxx
- * @property {String} type = [datetime | date | time] 显示模式
- * @property {Boolean} multiple = [true|false] 是否多选
- * @property {String|Number} value 默认值
- * @property {String|Number} start 起始日期或时间
- * @property {String|Number} end 起始日期或时间
- * @property {String} return-type = [timestamp | string]
- * @event {Function} change 选中发生变化触发
- */
- export default {
- name: 'UniDatetimePicker',
- components: {
- // #ifdef H5
- keypress
- // #endif
- },
- data () {
- return {
- indicatorStyle: `height: 50px;`,
- visible: false,
- fixNvueBug: {},
- dateShow: true,
- timeShow: true,
- title: '日期和时间',
- // 输入框当前时间
- time: '',
- // 当前的年月日时分秒
- year: 1920,
- month: 0,
- day: 0,
- hour: 0,
- minute: 0,
- second: 0,
- // 起始时间
- startYear: 1920,
- startMonth: 1,
- startDay: 1,
- startHour: 0,
- startMinute: 0,
- startSecond: 0,
- // 结束时间
- endYear: 2120,
- endMonth: 12,
- endDay: 31,
- endHour: 23,
- endMinute: 59,
- endSecond: 59
- }
- },
- props: {
- type: {
- type: String,
- default: 'datetime'
- },
- value: {
- type: [String, Number],
- default: ''
- },
- modelValue: {
- type: [String, Number],
- default: ''
- },
- start: {
- type: [Number, String],
- default: ''
- },
- end: {
- type: [Number, String],
- default: ''
- },
- returnType: {
- type: String,
- default: 'string'
- },
- disabled: {
- type: [Boolean, String],
- default: false
- },
- border: {
- type: [Boolean, String],
- default: true
- },
- hideSecond: {
- type: [Boolean, String],
- default: false
- }
- },
- watch: {
- value: {
- handler (newVal, oldVal) {
- if (newVal) {
- this.parseValue(this.fixIosDateFormat(newVal)) //兼容 iOS、safari 日期格式
- this.initTime(false)
- } else {
- this.time = ''
- this.parseValue(Date.now())
- }
- },
- immediate: true
- },
- type: {
- handler (newValue) {
- if (newValue === 'date') {
- this.dateShow = true
- this.timeShow = false
- this.title = '日期'
- } else if (newValue === 'time') {
- this.dateShow = false
- this.timeShow = true
- this.title = '时间'
- } else {
- this.dateShow = true
- this.timeShow = true
- this.title = '日期和时间'
- }
- },
- immediate: true
- },
- start: {
- handler (newVal) {
- this.parseDatetimeRange(this.fixIosDateFormat(newVal), 'start') //兼容 iOS、safari 日期格式
- },
- immediate: true
- },
- end: {
- handler (newVal) {
- this.parseDatetimeRange(this.fixIosDateFormat(newVal), 'end') //兼容 iOS、safari 日期格式
- },
- immediate: true
- },
- // 月、日、时、分、秒可选范围变化后,检查当前值是否在范围内,不在则当前值重置为可选范围第一项
- months (newVal) {
- this.checkValue('month', this.month, newVal)
- },
- days (newVal) {
- this.checkValue('day', this.day, newVal)
- },
- hours (newVal) {
- this.checkValue('hour', this.hour, newVal)
- },
- minutes (newVal) {
- this.checkValue('minute', this.minute, newVal)
- },
- seconds (newVal) {
- this.checkValue('second', this.second, newVal)
- }
- },
- computed: {
- // 当前年、月、日、时、分、秒选择范围
- years () {
- return this.getCurrentRange('year')
- },
- months () {
- return this.getCurrentRange('month')
- },
- days () {
- return this.getCurrentRange('day')
- },
- hours () {
- return this.getCurrentRange('hour')
- },
- minutes () {
- return this.getCurrentRange('minute')
- },
- seconds () {
- return this.getCurrentRange('second')
- },
- // picker 当前值数组
- ymd () {
- return [
- this.year - this.minYear,
- this.month - this.minMonth,
- this.day - this.minDay
- ]
- },
- hms () {
- return [
- this.hour - this.minHour,
- this.minute - this.minMinute,
- this.second - this.minSecond
- ]
- },
- // 当前 date 是 start
- currentDateIsStart () {
- return (
- this.year === this.startYear &&
- this.month === this.startMonth &&
- this.day === this.startDay
- )
- },
- // 当前 date 是 end
- currentDateIsEnd () {
- return (
- this.year === this.endYear &&
- this.month === this.endMonth &&
- this.day === this.endDay
- )
- },
- // 当前年、月、日、时、分、秒的最小值和最大值
- minYear () {
- return this.startYear
- },
- maxYear () {
- return this.endYear
- },
- minMonth () {
- if (this.year === this.startYear) {
- return this.startMonth
- } else {
- return 1
- }
- },
- maxMonth () {
- if (this.year === this.endYear) {
- return this.endMonth
- } else {
- return 12
- }
- },
- minDay () {
- if (this.year === this.startYear && this.month === this.startMonth) {
- return this.startDay
- } else {
- return 1
- }
- },
- maxDay () {
- if (this.year === this.endYear && this.month === this.endMonth) {
- return this.endDay
- } else {
- return this.daysInMonth(this.year, this.month)
- }
- },
- minHour () {
- if (this.type === 'datetime') {
- if (this.currentDateIsStart) {
- return this.startHour
- } else {
- return 0
- }
- }
- if (this.type === 'time') {
- return this.startHour
- }
- },
- maxHour () {
- if (this.type === 'datetime') {
- if (this.currentDateIsEnd) {
- return this.endHour
- } else {
- return 23
- }
- }
- if (this.type === 'time') {
- return this.endHour
- }
- },
- minMinute () {
- if (this.type === 'datetime') {
- if (this.currentDateIsStart && this.hour === this.startHour) {
- return this.startMinute
- } else {
- return 0
- }
- }
- if (this.type === 'time') {
- if (this.hour === this.startHour) {
- return this.startMinute
- } else {
- return 0
- }
- }
- },
- maxMinute () {
- if (this.type === 'datetime') {
- if (this.currentDateIsEnd && this.hour === this.endHour) {
- return this.endMinute
- } else {
- return 59
- }
- }
- if (this.type === 'time') {
- if (this.hour === this.endHour) {
- return this.endMinute
- } else {
- return 59
- }
- }
- },
- minSecond () {
- if (this.type === 'datetime') {
- if (
- this.currentDateIsStart &&
- this.hour === this.startHour &&
- this.minute === this.startMinute
- ) {
- return this.startSecond
- } else {
- return 0
- }
- }
- if (this.type === 'time') {
- if (this.hour === this.startHour && this.minute === this.startMinute) {
- return this.startSecond
- } else {
- return 0
- }
- }
- },
- maxSecond () {
- if (this.type === 'datetime') {
- if (
- this.currentDateIsEnd &&
- this.hour === this.endHour &&
- this.minute === this.endMinute
- ) {
- return this.endSecond
- } else {
- return 59
- }
- }
- if (this.type === 'time') {
- if (this.hour === this.endHour && this.minute === this.endMinute) {
- return this.endSecond
- } else {
- return 59
- }
- }
- },
- /**
- * for i18n
- */
- selectTimeText () {
- return t('uni-datetime-picker.selectTime')
- },
- okText () {
- return t('uni-datetime-picker.ok')
- },
- clearText () {
- return t('uni-datetime-picker.clear')
- },
- cancelText () {
- return t('uni-datetime-picker.cancel')
- }
- },
- mounted () {
- // #ifdef APP-NVUE
- const res = uni.getSystemInfoSync()
- this.fixNvueBug = {
- top: res.windowHeight / 2,
- left: res.windowWidth / 2
- }
- // #endif
- },
- methods: {
- /**
- * @param {Object} item
- * 小于 10 在前面加个 0
- */
- lessThanTen (item) {
- return item < 10 ? '0' + item : item
- },
- /**
- * 解析时分秒字符串,例如:00:00:00
- * @param {String} timeString
- */
- parseTimeType (timeString) {
- if (timeString) {
- let timeArr = timeString.split(':')
- this.hour = Number(timeArr[0])
- this.minute = Number(timeArr[1])
- this.second = Number(timeArr[2])
- }
- },
- /**
- * 解析选择器初始值,类型可以是字符串、时间戳,例如:2000-10-02、'08:30:00'、 1610695109000
- * @param {String | Number} datetime
- */
- initPickerValue (datetime) {
- let defaultValue = null
- if (datetime) {
- defaultValue = this.compareValueWithStartAndEnd(
- datetime,
- this.start,
- this.end
- )
- } else {
- defaultValue = Date.now()
- defaultValue = this.compareValueWithStartAndEnd(
- defaultValue,
- this.start,
- this.end
- )
- }
- this.parseValue(defaultValue)
- },
- /**
- * 初始值规则:
- * - 用户设置初始值 value
- * - 设置了起始时间 start、终止时间 end,并 start < value < end,初始值为 value, 否则初始值为 start
- * - 只设置了起始时间 start,并 start < value,初始值为 value,否则初始值为 start
- * - 只设置了终止时间 end,并 value < end,初始值为 value,否则初始值为 end
- * - 无起始终止时间,则初始值为 value
- * - 无初始值 value,则初始值为当前本地时间 Date.now()
- * @param {Object} value
- * @param {Object} dateBase
- */
- compareValueWithStartAndEnd (value, start, end) {
- let winner = null
- value = this.superTimeStamp(value)
- start = this.superTimeStamp(start)
- end = this.superTimeStamp(end)
- if (start && end) {
- if (value < start) {
- winner = new Date(start)
- } else if (value > end) {
- winner = new Date(end)
- } else {
- winner = new Date(value)
- }
- } else if (start && !end) {
- winner = start <= value ? new Date(value) : new Date(start)
- } else if (!start && end) {
- winner = value <= end ? new Date(value) : new Date(end)
- } else {
- winner = new Date(value)
- }
- return winner
- },
- /**
- * 转换为可比较的时间戳,接受日期、时分秒、时间戳
- * @param {Object} value
- */
- superTimeStamp (value) {
- let dateBase = ''
- if (this.type === 'time' && value && typeof value === 'string') {
- const now = new Date()
- const year = now.getFullYear()
- const month = now.getMonth() + 1
- const day = now.getDate()
- dateBase = year + '/' + month + '/' + day + ' '
- }
- if (Number(value) && typeof value !== NaN) {
- value = parseInt(value)
- dateBase = 0
- }
- return this.createTimeStamp(dateBase + value)
- },
- /**
- * 解析默认值 value,字符串、时间戳
- * @param {Object} defaultTime
- */
- parseValue (value) {
- if (!value) {
- return
- }
- if (this.type === 'time' && typeof value === 'string') {
- this.parseTimeType(value)
- } else {
- let defaultDate = null
- defaultDate = new Date(value)
- if (this.type !== 'time') {
- this.year = defaultDate.getFullYear()
- this.month = defaultDate.getMonth() + 1
- this.day = defaultDate.getDate()
- }
- if (this.type !== 'date') {
- this.hour = defaultDate.getHours()
- this.minute = defaultDate.getMinutes()
- this.second = defaultDate.getSeconds()
- }
- }
- if (this.hideSecond) {
- this.second = 0
- }
- },
- /**
- * 解析可选择时间范围 start、end,年月日字符串、时间戳
- * @param {Object} defaultTime
- */
- parseDatetimeRange (point, pointType) {
- // 时间为空,则重置为初始值
- if (!point) {
- if (pointType === 'start') {
- this.startYear = 1920
- this.startMonth = 1
- this.startDay = 1
- this.startHour = 0
- this.startMinute = 0
- this.startSecond = 0
- }
- if (pointType === 'end') {
- this.endYear = 2120
- this.endMonth = 12
- this.endDay = 31
- this.endHour = 23
- this.endMinute = 59
- this.endSecond = 59
- }
- return
- }
- if (this.type === 'time') {
- const pointArr = point.split(':')
- this[pointType + 'Hour'] = Number(pointArr[0])
- this[pointType + 'Minute'] = Number(pointArr[1])
- this[pointType + 'Second'] = Number(pointArr[2])
- } else {
- if (!point) {
- pointType === 'start'
- ? (this.startYear = this.year - 60)
- : (this.endYear = this.year + 60)
- return
- }
- if (Number(point) && Number(point) !== NaN) {
- point = parseInt(point)
- }
- // datetime 的 end 没有时分秒, 则不限制
- const hasTime = /[0-9]:[0-9]/
- if (
- this.type === 'datetime' &&
- pointType === 'end' &&
- typeof point === 'string' &&
- !hasTime.test(point)
- ) {
- point = point + ' 23:59:59'
- }
- const pointDate = new Date(point)
- this[pointType + 'Year'] = pointDate.getFullYear()
- this[pointType + 'Month'] = pointDate.getMonth() + 1
- this[pointType + 'Day'] = pointDate.getDate()
- if (this.type === 'datetime') {
- this[pointType + 'Hour'] = pointDate.getHours()
- this[pointType + 'Minute'] = pointDate.getMinutes()
- this[pointType + 'Second'] = pointDate.getSeconds()
- }
- }
- },
- // 获取 年、月、日、时、分、秒 当前可选范围
- getCurrentRange (value) {
- const range = []
- for (
- let i = this['min' + this.capitalize(value)];
- i <= this['max' + this.capitalize(value)];
- i++
- ) {
- range.push(i)
- }
- return range
- },
- // 字符串首字母大写
- capitalize (str) {
- return str.charAt(0).toUpperCase() + str.slice(1)
- },
- // 检查当前值是否在范围内,不在则当前值重置为可选范围第一项
- checkValue (name, value, values) {
- if (values.indexOf(value) === -1) {
- this[name] = values[0]
- }
- },
- // 每个月的实际天数
- daysInMonth (year, month) {
- // Use 1 for January, 2 for February, etc.
- return new Date(year, month, 0).getDate()
- },
- //兼容 iOS、safari 日期格式
- fixIosDateFormat (value) {
- if (typeof value === 'string') {
- value = value.replace(/-/g, '/')
- }
- return value
- },
- /**
- * 生成时间戳
- * @param {Object} time
- */
- createTimeStamp (time) {
- if (!time) return
- if (typeof time === 'number') {
- return time
- } else {
- time = time.replace(/-/g, '/')
- if (this.type === 'date') {
- time = time + ' ' + '00:00:00'
- }
- return Date.parse(time)
- }
- },
- /**
- * 生成日期或时间的字符串
- */
- createDomSting () {
- const yymmdd =
- this.year +
- '-' +
- this.lessThanTen(this.month) +
- '-' +
- this.lessThanTen(this.day)
- let hhmmss =
- this.lessThanTen(this.hour) + ':' + this.lessThanTen(this.minute)
- if (!this.hideSecond) {
- hhmmss = hhmmss + ':' + this.lessThanTen(this.second)
- }
- if (this.type === 'date') {
- return yymmdd
- } else if (this.type === 'time') {
- return hhmmss
- } else {
- return yymmdd + ' ' + hhmmss
- }
- },
- /**
- * 初始化返回值,并抛出 change 事件
- */
- initTime (emit = true) {
- this.time = this.createDomSting()
- if (!emit) return
- if (this.returnType === 'timestamp' && this.type !== 'time') {
- this.$emit('change', this.createTimeStamp(this.time))
- this.$emit('input', this.createTimeStamp(this.time))
- this.$emit('update:modelValue', this.createTimeStamp(this.time))
- } else {
- this.$emit('change', this.time)
- this.$emit('input', this.time)
- this.$emit('update:modelValue', this.time)
- }
- },
- /**
- * 用户选择日期或时间更新 data
- * @param {Object} e
- */
- bindDateChange (e) {
- const val = e.detail.value
- this.year = this.years[val[0]]
- this.month = this.months[val[1]]
- this.day = this.days[val[2]]
- },
- bindTimeChange (e) {
- const val = e.detail.value
- this.hour = this.hours[val[0]]
- this.minute = this.minutes[val[1]]
- this.second = this.seconds[val[2]]
- },
- /**
- * 初始化弹出层
- */
- initTimePicker () {
- if (this.disabled) return
- const value = this.fixIosDateFormat(this.value)
- this.initPickerValue(value)
- this.visible = !this.visible
- },
- /**
- * 触发或关闭弹框
- */
- tiggerTimePicker (e) {
- this.visible = !this.visible
- },
- /**
- * 用户点击“清空”按钮,清空当前值
- */
- clearTime () {
- this.time = ''
- this.$emit('change', this.time)
- this.$emit('input', this.time)
- this.$emit('update:modelValue', this.time)
- this.tiggerTimePicker()
- },
- /**
- * 用户点击“确定”按钮
- */
- setTime () {
- this.initTime()
- this.tiggerTimePicker()
- }
- }
- }
- </script>
- <style>
- .uni-datetime-picker {
- /* #ifndef APP-NVUE */
- /* width: 100%; */
- /* #endif */
- }
- .uni-datetime-picker-view {
- height: 130px;
- width: 270px;
- /* #ifndef APP-NVUE */
- cursor: pointer;
- /* #endif */
- }
- .uni-datetime-picker-item {
- height: 50px;
- line-height: 50px;
- text-align: center;
- font-size: 32rpx;
- }
- .uni-datetime-picker-btn {
- margin-top: 60px;
- /* #ifndef APP-NVUE */
- display: flex;
- cursor: pointer;
- /* #endif */
- flex-direction: row;
- justify-content: space-between;
- }
- .uni-datetime-picker-btn-text {
- font-size: 32rpx;
- color: #007aff;
- }
- .uni-datetime-picker-btn-group {
- /* #ifndef APP-NVUE */
- display: flex;
- /* #endif */
- flex-direction: row;
- }
- .uni-datetime-picker-cancel {
- margin-right: 30px;
- }
- .uni-datetime-picker-mask {
- position: fixed;
- bottom: 0px;
- top: 0px;
- left: 0px;
- right: 0px;
- background-color: rgba(0, 0, 0, 0.4);
- transition-duration: 0.3s;
- z-index: 998;
- }
- .uni-datetime-picker-popup {
- border-radius: 8px;
- padding: 30px;
- width: 270px;
- /* #ifdef APP-NVUE */
- height: 500px;
- /* #endif */
- /* #ifdef APP-NVUE */
- width: 330px;
- /* #endif */
- background-color: #fff;
- position: fixed;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- transition-duration: 0.3s;
- z-index: 999;
- }
- .fix-nvue-height {
- /* #ifdef APP-NVUE */
- height: 330px;
- /* #endif */
- }
- .uni-datetime-picker-time {
- color: grey;
- }
- .uni-datetime-picker-column {
- height: 50px;
- }
- .uni-datetime-picker-timebox {
- border: 1px solid #e5e5e5;
- border-radius: 5px;
- padding: 7px 10px;
- /* #ifndef APP-NVUE */
- box-sizing: border-box;
- cursor: pointer;
- /* #endif */
- }
- .uni-datetime-picker-timebox-pointer {
- /* #ifndef APP-NVUE */
- cursor: pointer;
- /* #endif */
- }
- .uni-datetime-picker-disabled {
- opacity: 0.4;
- /* #ifdef H5 */
- cursor: not-allowed !important;
- /* #endif */
- }
- .uni-datetime-picker-text {
- font-size: 32rpx;
- }
- .uni-datetime-picker-sign {
- position: absolute;
- top: 53px;
- /* 减掉 10px 的元素高度,兼容nvue */
- color: #999;
- /* #ifdef APP-NVUE */
- font-size: 16px;
- /* #endif */
- }
- .sign-left {
- left: 86px;
- }
- .sign-right {
- right: 86px;
- }
- .sign-center {
- left: 135px;
- }
- .uni-datetime-picker__container-box {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-top: 40px;
- }
- .time-hide-second {
- width: 180px;
- }
- </style>
|