This commit is contained in:
曹辉 2022-10-21 11:01:04 +08:00
parent a0435a1417
commit 27eeed6de8
6 changed files with 693 additions and 354 deletions

View File

@ -2,7 +2,6 @@
<view class="app">
<view class="productlist">
<view class="item" @tap='goCommodityDetails(item)' v-for="(item,index) in goodsList" :key="index">
<image :src="item.goodsPictureUrl" mode=""></image>
<view class="title">
{{item.goodsName}} 1{{item.goodsUnit}}
@ -11,7 +10,6 @@
{{item.goodsPrice}}
</view>
</view>
</view>
</view>
</template>
@ -55,7 +53,6 @@
console.log(this.goodsCategoryList)
})
},
//
goCommodityDetails() {
uni.navigateTo({

View File

@ -10,12 +10,11 @@
<span>电话</span>
<span>{{personInfo.phone}}</span>
</view>
<view class="item">
<span>地址</span>
<span>{{personInfo.address}}</span>
</view>
<view class="selecttime" @tap='timeshow2=true'>
<view class="selecttime" @tap='timeshow=true'>
<span>时间</span>
<text v-if="usertime==''">请选择时间</text>
<text v-else>{{usertime}}</text>
@ -25,7 +24,6 @@
<view class="remarks">
服务时长:{{orderlist.serveDurationUnit}}
</view>
<view class="Package">套餐信息
<text class="money">{{orderlist.nurseItemPrice}}</text>
<text class="detail">
@ -57,12 +55,13 @@
<view class="queren" @tap='updata'>确认预约</view>
</view>
<u-toast ref="uToast" />
<u-picker @confirm='confirm2()' mode="time" v-model="timeshow2" start-year='2022' :params="params2">
<!-- <u-picker @confirm='confirm2()' mode="time" v-model="timeshow2" start-year='2022' :params="params2">
</u-picker>
<u-picker @confirm='confirm3()' mode="time" v-model="timeshow3" start-year='2022' :params="params3">
</u-picker>
<u-picker @confirm='confirm4()' mode="time" v-model="timeshow4" start-year='2022' :params="params4">
</u-picker>
</u-picker> -->
<upicker v-model="timeshow" mode="time" start-year='2022' :params="timeparams" @confirm='timeconfirm'></upicker>
</view>
</template>
<script>
@ -72,17 +71,23 @@
submitAppointment
} from '@/api/appointmenttime/appointmenttime.js'
import baseurl from '@/api/baseurl.js'
import upicker from '../u-picker/u-picker.vue'
export default {
components: {
upicker
},
data() {
return {
params2: {
timeparams: {
year: true,
month: true,
day: true,
hour: true,
endhour: true,
minute: true,
second: false
endminute: true,
},
timeshow: false,
timeshow2: false,
timeshow3: false,
timeshow4: false,
@ -134,9 +139,13 @@
this.orderlist.stationItemId = options.stationItemId
this.orderlist.stationItemPriceId = options.stationItemPriceId
//
this.getPatientInfo(options.stationId, options.stationItemId, options.stationItemPriceId)
// this.getPatientInfo(options.stationId, options.stationItemId, options.stationItemPriceId)
},
methods: {
//
timeconfirm(e){
console.log(e)
},
getInfo() { //
getAppPatientList(this.patientId).then(res => {
this.personInfo = res.data[0]
@ -314,13 +323,13 @@
height: 34rpx;
border-radius: 70%;
border: 2rpx solid #178ffb;
margin: 6px 25px -10px -10px;
margin: 6px 25px -10px -10px;
}
.agreement {
font-size: 34rpx;
color: #878987;
margin-left: 14%;
margin-left: 14%;
}
.radio-right {

View File

@ -1,4 +1,3 @@
<template>
<view class="app">
<view class="cards">
@ -6,28 +5,15 @@
v-for="(item,index) in goodsCategoryList" :key="index">
<!-- <image src="../../static/sp.png" mode=""></image> -->
<image :src="item.goodsCatrgoryPicture" mode=""></image>
<view class="title">
<view class="title" style="font-size:42rpx">
{{item.goodsCategoryName}}
</view>
</view>
<view class=" item">
<view class="item">
</view>
<!-- <view class="item" style="background-color: #E1AE3C;">
<image src="../../static/znsb.png" mode=""></image>
<view class="title" style="font-size: 42rpx;">
可穿戴医疗设备
</view>
</view>
<view class="item" style="background: #4C7BC9;">
<image src="../../static/cp.png" mode=""></image>
<view class="title" style="font-size: 42rpx;">
适老化改造
</view>
</view> -->
</view>
</view>
</template>
<script>
import {
goodsCategoryList
@ -40,27 +26,18 @@
pageSize: 999,
goodsCategoryList: [],
listcolor: ['#00C176', '#D43953', '#E1AE3C', '#4C7BC9', '#00C176'],
// img: '',
};
},
onLoad(options) {
this.goodsCategory()
},
methods: {
//
goProductList(item) {
console.log(item)
// if (number == 1) {
// var titlename = ''
// uni.navigateTo({
// url: `/pages/ProductList/ProductList?title=${titlename}&goodsCategoryId=${this.id}`
// })
// }
uni.navigateTo({
url: `/pages/ProductList/ProductList?title=${item.goodsCategoryName}&goodsCategoryId=${item.id}`
})
},
//
goodsCategory() {
@ -76,12 +53,4 @@
</script>
<style lang="scss">
.app {
// background-color: #F4F5F7;
// width: 100%;
// height: 100vh;
// position: relative;
}
</style>

View File

@ -1,36 +1,31 @@
<template>
<view class="concent">
<view class="page-body" style="margin-top: -80rpx;">
<view class="app">
<view>
<view class="nursetation" @tap='detailed()'>
<text class="what">什么是护理站</text>
<u-icon class="icon" name="arrow-right"></u-icon>
<!-- <image src="../../static/jiantou.png" mode=""></image> -->
</view>
<view class="map">
<!-- <map style="width:100%; height:40vh;" scale="17" :latitude="latitude" :longitude="longitude"
:markers="markers"></map> -->
<map style="width:100%; height:40vh;" scale="17" :latitude="latitude" :longitude="longitude"
:markers="markers"></map>
</view>
</view>
<view class="conNew">
<view class="addressContent">
<view class="lists" v-for="(item,index) in nearbylist" :key="index">
<text class="nurse">{{item.nurseStationName}}</text>
<text class="distance">距离您800米</text>
<view class="nurse">{{item.nurseStationName}}</view>
<view class="distance">距离您800米</view>
<view class="background">
<view class="picture">
<image src="/static/logo.png" mode=""></image>
</view>
<text class="qyttext">泉医通</text>
<text class="lianmeng">济卫护理联盟NO.1</text>
<image src="/static/logo.png" mode=""></image>
</view>
<view class="click" @tap='godetails()'>
<view class="understand" @tap='godetails()'>
点击了解
</view>
</view>
</view>
</view>
<view class="masks" style="" v-if="mask">
<view class="masks" style="" v-if="locationmask">
<view class="mask">
<view class="picture2">
<image src="../../static/locatinsmall.png"></image>
@ -56,11 +51,15 @@
data() {
return {
nearbylist: [],
mask: true,
locationmask: false,
pageNum: 1,
pageSize: 10,
longitude:116.397128,
latitude:39.916527,
//map
id: 0, // 使 marker id
latitude: 39.909,
longitude: 116.39742,
markers: [],
covers: []
}
},
onReachBottom() {
@ -112,9 +111,8 @@
} else {
uni.request({
url: baseurl +
`/nurseApplet/nearbyNursingStation/nearbyList`, //
`/nurseApplet/nearbyNursingStation/nearbyList`,
success: (res) => {
console.log(res)
this.nearbylist = res.data.rows
console.log(this.nearbylist)
}
@ -122,7 +120,6 @@
}
},
godetails() {
// console.log("111");
uni.navigateTo({
url: `/pages/nursestation/nursestation`
})
@ -132,312 +129,109 @@
url: `/pages/detail/detail`
})
},
// nurse() {
// uni.navigateTo({
// url: `/pages/nursestation/nursestation`
// })
// },
cancel() {
this.mask = false
// uni.reLaunch({
// url: `/pages/site/site`
// })
},
},
}
</script>
<style lang="scss">
.concent {
width: 100%;
height: 1000px;
background-color: #F4F5F7;
// box-sizing: border-box;
position: relative;
}
//
.conNew {
width: 100%;
height: 1000000px;
width: 96%;
background-color: #F4F5F7;
// box-sizing: border-box;
position: relative;
// box-sizing: border-box;
// padding: 24px;
}
.addressContent {
position: absolute;
top: -91px;
// margin: 0 auto;
width: 100%;
// height: 100%;
// background: #F4F5F7;
// box-sizing: border-box;
padding: 24px;
}
.map {
width: 750rpx;
height: 544rpx;
background-color: red;
}
.picture2 image {
// position: absolute;
display: block;
margin: 0 auto;
width: 86rpx;
height: 102rpx;
// margin-top: 20%;
// text-align: center;
}
.masks {
border-radius: 30px;
height: 100%;
width: 100%;
position: absolute;
opacity: 0.9;
top: 0;
z-index: 999;
}
.mask {
// margin-top: 50%;
position: relative;
width: 520rpx;
height: 348rpx;
background-color: #ffffff;
margin: 47% auto;
position: relative;
border-radius: 30rpx;
}
.title {
width: 254rpx;
height: 35rpx;
font-size: 37rpx;
// margin: 0 auto;
text-align: center;
margin-top: 10%;
margin-left: 30%;
font-family: Adobe Heiti Std;
font-weight: normal;
color: #000000;
// line-height: rpx;
// height: 100rpx;
// line-height: 100rpx;
// border-bottom: 1px solid #eeeeee;
// /* background-color: red; */
// font-size: 36rpx;
// margin: 0px auto;
// width: 100%;
// text-align: center;
// /* line-height: 80rpx; */
}
.text {
margin-top: 30rpx;
font-size: 30rpx;
width: 100%;
text-align: left;
/* padding-top: 40rpx; */
text-align: center;
}
.btn1 {
height: 62rpx;
line-height: 62rpx;
text-align: center;
// border-top: 1px solid #eeeeee;
// border-right: 1px solid #eeeeee;
// position: inherit;
margin-top: 10%;
margin-left: 10%;
background: #C5BFBF;
color: #ffffff;
width: 198rpx;
border-radius: 23rpx;
}
.btn2 {
height: 62rpx;
line-height: 62rpx;
text-align: center;
color: #ffffff;
// display: inline-block;
// position: absolute;
// bottom: 0;
position: absolute;
margin-top: -12%;
margin-left: 58%;
width: 198rpx;
background-color: #4486e8;
border-radius: 23rpx;
}
.lists {
// bottom: 5%;
// display: block;
// position: absolute;
// top: -191px;
// margin: 0 auto;
background-color: #ffffff;
// width: 698.8rpx;
width: 100%;
height: 227.8rpx;
margin-bottom: 3%;
border-radius: 20rpx;
z-index: 99999;
}
.background {
position: absolute;
width: 180rpx;
height: 180rpx;
background-color: #4C7BC9;
margin-top: 4%;
margin-left: 7%;
border-radius: 30rpx;
}
.background image {
width: 99rpx;
height: 99rpx;
// margin: 0 auto;
text-align: center;
margin-top: 5%;
margin-left: 20%;
}
.qyttext {
// text-align: center;
// margin-top: 10%;
margin-left: 28%;
display: block;
// width: 30px;
// height: 10px;
font-size: 25rpx;
// font-family: Adobe Heiti Std;
// font-weight: normal;
color: #FFFFFF;
}
.lianmeng {
display: block;
margin-left: 5%;
font-size: 14rpx;
// font-family: Adobe Heiti Std;
// font-weight: normal;
color: #FFFFFF;
}
.click {
// position: absolute;
color: #ffffff;
float: right;
width: 167.3rpx;
height: 34px;
line-height: 34px;
// height: 58.5rpx;
// line-height: 58.5rpx;
// margin: 0 auto;
text-align: center;
background-color: #4C7BC9;
margin-top: 20%;
margin-right: 5%;
border-radius: 17px;
// margin-top: 6%;
// margin-left: 40%;
// border-radius: 10rpx;
}
.wenzi {
color: #ffffff;
text-align: center;
}
.nurse {
position: absolute;
float: right;
margin-top: 5%;
font-size: 30rpx;
margin-left: 35%;
}
.icon {
height: 60rpx;
width: 80%;
line-height: 60rpx;
position: absolute;
// float: right;
margin-left: 85%;
margin-top: -9%;
}
.distance {
position: absolute;
float: right;
margin-top: 12%;
font-size: 14rpx;
margin-left: 35%;
font-family: Adobe Heiti Std;
font-weight: normal;
color: #666666;
}
.nursestation image {
position: relative;
width: 16rpx;
height: 24rpx;
top: 400rpx;
left: 2%;
.addressContent {
width: 100%;
}
.lists {
background-color: #ffffff;
width: 100%;
height: 240rpx;
margin-bottom: 14rpx;
border-radius: 20rpx;
position: relative;
.nurse {
font-size: 30rpx;
position: absolute;
top: 15%;
left: 35%;
}
.distance {
position: absolute;
top: 40%;
font-size: 14rpx;
margin-left: 35%;
color: #666666;
}
.background {
width: 180rpx;
height: 180rpx;
background-color: #4C7BC9;
position: absolute;
top: 12%;
left: 7%;
border-radius: 30rpx;
}
.background image {
width: 99rpx;
height: 99rpx;
// margin: 0 auto;
text-align: center;
margin-top: 5%;
margin-left: 20%;
}
.understand {
color: #ffffff;
width: 170rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
background-color: #4C7BC9;
position: absolute;
bottom: 10%;
right: 5%;
border-radius: 35rpx;
}
}
}
//
.nursetation {
position: relative;
// display: block;
// margin:0 auto;
top: 50px;
left: 0px;
float: left;
// background-color: white;
border: 1px solid #f0f0f0;
width: 80%;
height: 60rpx;
margin: 10rpx 0 10rpx 50%;
transform: translateX(-50%);
border-radius: 20rpx;
background-color: red;
z-index: 100;
}
.what {
display: block;
// margin: 0 auto;
position: absolute;
height: 50rpx;
top: 5%;
left: 12%;
// background-color: #4486e8;
position: relative;
height: 60rpx;
width: 80%;
line-height: 60rpx;
margin-left: 5%;
top: 20px;
left: 10%;
float: left;
border: 1px solid #f0f0f0;
border-radius: 20rpx;
background-color: #ffffff;
z-index: 100;
height: 85rpx;
line-height: 85rpx;
box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
.what {
margin-left: 10%;
display: inline-block;
}
.icon {
display: inline-block;
height: 85rpx;
line-height: 85rpx;
margin-left: 45%;
}
}
</style>

View File

@ -0,0 +1,7 @@
// 定义混入指令用于在非nvue环境下的flex定义因为nvue没有display属性会报错
@mixin vue-flex($direction: row) {
/* #ifndef APP-NVUE */
display: flex;
flex-direction: $direction;
/* #endif */
}

563
pages/u-picker/u-picker.vue Normal file
View File

@ -0,0 +1,563 @@
<template>
<u-popup :maskCloseAble="maskCloseAble" mode="bottom" :popup="false" v-model="value" length="auto"
:safeAreaInsetBottom="safeAreaInsetBottom" @close="close" :z-index="uZIndex">
<view class="u-datetime-picker">
<view class="u-picker-header" @touchmove.stop.prevent="">
<view class="u-btn-picker u-btn-picker--tips" :style="{ color: cancelColor }" hover-class="u-opacity"
:hover-stay-time="150" @tap="getResult('cancel')">{{cancelText}}</view>
<view class="u-picker__title">{{ title }}</view>
<view class="u-btn-picker u-btn-picker--primary" :style="{ color: moving ? cancelColor : confirmColor }"
hover-class="u-opacity" :hover-stay-time="150" @touchmove.stop="" @tap.stop="getResult('confirm')">
{{confirmText}}
</view>
</view>
<view class="u-picker-body">
<picker-view :value="valueArr" @change="change" class="u-picker-view" @pickstart="pickstart"
@pickend="pickend">
<picker-view-column v-if="!reset && params.year" style="flex:6">
<view class="u-column-item" v-for="(item, index) in years" :key="index">
{{ item }}
<text class="u-text" v-if="showTimeTag"></text>
</view>
</picker-view-column>
<picker-view-column v-if="!reset && params.month" style="flex:5">
<view class="u-column-item" v-for="(item, index) in months" :key="index">
{{ formatNumber(item) }}
<text class="u-text" v-if="showTimeTag"></text>
</view>
</picker-view-column>
<picker-view-column v-if="!reset && params.day" style="flex:5">
<view class="u-column-item" v-for="(item, index) in days" :key="index">
{{ formatNumber(item) }}
<text class="u-text" v-if="showTimeTag"></text>
</view>
</picker-view-column>
<picker-view-column v-if="!reset && params.hour" style="flex:6">
<view class="u-column-item" v-for="(item, index) in hours" :key="index">
<view class="" style="font-size:38rpx">
{{ formatNumber(item) }}
</view>
<text class="u-text" v-if="showTimeTag"></text>
</view>
</picker-view-column>
<picker-view-column v-if="!reset && params.minute" style="flex:6">
<view class="u-column-item" v-for="(item, index) in minutes" :key="index">
<view class="" style="font-size:38rpx">
{{ formatNumber(item) }}
</view>
<text class="u-text" v-if="showTimeTag"></text>
</view>
</picker-view-column>
<picker-view-column style="flex:2">
<view class="u-column-item">
<text class="u-text"></text>
</view>
</picker-view-column>
<picker-view-column v-if="!reset && params.endhour" style="flex:6">
<view class="u-column-item" v-for="(item, index) in endhours" :key="index">
<view class="" style="font-size:38rpx">
{{ formatNumber(item) }}
</view>
<text class="u-text" v-if="showTimeTag"></text>
</view>
</picker-view-column>
<picker-view-column v-if="!reset && params.endminute" style="flex:6">
<view class="u-column-item" v-for="(item, index) in endminutes" :key="index">
<view class="" style="font-size:38rpx">
{{ formatNumber(item) }}
</view>
<text class="u-text" v-if="showTimeTag"></text>
</view>
</picker-view-column>
</picker-view>
</view>
</view>
</u-popup>
</template>
<script>
/**
* picker picker弹出选择器
* @description 此选择器有两种弹出模式一是时间模式可以配置年秒参数 二是地区模式可以配置省区参数
* @tutorial https://www.uviewui.com/components/picker.html
* @property {Object} params 需要显示的参数见官网说明
* @property {String} mode 模式选择region-地区类型time-时间类型默认time
* @property {String Number} start-year 可选的开始年份mode=time时有效默认1950
* @property {String Number} end-year 可选的结束年份mode=time时有效默认2050
* @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配默认false
* @property {Boolean} show-time-tag 时间模式时是否显示后面的年月日中文提示
* @property {String} cancel-color 取消按钮的颜色默认#606266
* @property {String} confirm-color 确认按钮的颜色默认#2979ff
* @property {String} default-time 默认选中的时间mode=time时有效
* @property {String} confirm-text 确认按钮的文字
* @property {String} cancel-text 取消按钮的文字
* @property {String} default-region 默认选中的地区中文形式mode=region时有效
* @property {String} default-code 默认选中的地区编号形式mode=region时有效
* @property {Boolean} mask-close-able 是否允许通过点击遮罩关闭Picker默认true
* @property {String Number} z-index 弹出时的z-index值默认1075
* @property {Array} default-selector 数组形式其中每一项表示选择了range对应项中的第几个
* @property {Array} range 自定义选择的数据mode=selector或mode=multiSelector时有效
* @property {String} range-key 当range参数的元素为对象时指定Object中的哪个key的值作为选择器显示内容
* @event {Function} confirm 点击确定按钮返回当前选择的值
* @event {Function} cancel 点击取消按钮返回当前选择的值
* @example <u-picker v-model="show" mode="time"></u-picker>
*/
export default {
name: 'u-picker',
props: {
// picker
params: {
type: Object,
default () {
return {
year: false,
month: true,
day: true,
hour: true,
endhour: true,
minute: true,
endminute: true,
second: false,
};
}
},
// mode=selectormode=multiSelector
range: {
type: Array,
default () {
return [];
}
},
// mode=selectormode=multiSelector
defaultSelector: {
type: Array,
default () {
return [0];
}
},
// range ArrayObject range-key Object key
rangeKey: {
type: String,
default: ''
},
// region-time-selector-multiSelector-
mode: {
type: String,
default: 'time'
},
//
startYear: {
type: [String, Number],
default: 1950
},
//
endYear: {
type: [String, Number],
default: 2050
},
// ""
cancelColor: {
type: String,
default: '#606266'
},
// ""
confirmColor: {
type: String,
default: '#2979ff'
},
// 2025-07-02 || 2025-07-02 13:01:00 || 2025/07/02
defaultTime: {
type: String,
default: ''
},
//
showTimeTag: {
type: Boolean,
default: true
},
safeAreaInsetBottom: {
type: Boolean,
default: false
},
// Picker
maskCloseAble: {
type: Boolean,
default: true
},
//
value: {
type: Boolean,
default: false
},
// z-index
zIndex: {
type: [String, Number],
default: 0
},
//
title: {
type: String,
default: '预约时间'
},
//
cancelText: {
type: String,
default: '取消'
},
//
confirmText: {
type: String,
default: '确认'
}
},
data() {
return {
years: [],
months: [],
days: [],
hours: [],
endhours: [],
minutes: [],
endminutes: [],
seconds: [],
year: 0,
month: 0,
day: 0,
hour: 0,
endhour: 0,
minute: 0,
endminute: 0,
second: 0,
reset: false,
startDate: '',
endDate: '',
valueArr: [],
moving: false //
};
},
mounted() {
this.init();
},
computed: {
propsChange() {
//
return `${this.mode}-${this.defaultTime}-${this.startYear}-${this.endYear}-${this.defaultRegion}-${this.areaCode}`;
},
regionChange() {
//
return `${this.province}-${this.city}`;
},
yearAndMonth() {
return `${this.year}-${this.month}`;
},
uZIndex() {
// z-index使
return this.zIndex ? this.zIndex : this.$u.zIndex.popup;
}
},
watch: {
propsChange() {
this.reset = true;
setTimeout(() => this.init(), 10);
},
// pickerthis.citysthis.areas
regionChange(val) {
this.citys = citys[this.province];
this.areas = areas[this.province][this.city];
},
// watch
// 3031229228
yearAndMonth(val) {
if (this.params.year) this.setDays();
},
// QQ()
value(n) {
if (n) {
this.reset = true;
setTimeout(() => this.init(), 10);
}
}
},
methods: {
//
pickstart() {
// #ifdef MP-WEIXIN
this.moving = true;
// #endif
},
//
pickend() {
// #ifdef MP-WEIXIN
this.moving = false;
// #endif
},
//
getItemValue(item, mode) {
// (2020-05-25)uni-appv-iffalse
// getItemValue
if (this.mode == mode) {
return typeof item == 'object' ? item[this.rangeKey] : item;
}
},
// 100
formatNumber(num) {
return +num < 10 ? '0' + num : String(num);
},
//
generateArray: function(start, end) {
// end-yearend+1
start = Number(start);
end = Number(end);
end = end > start ? end : start;
//
return [...Array(end + 1).keys()].slice(start);
},
getIndex: function(arr, val) {
let index = arr.indexOf(val);
// index-1(index)~(-1)=-(-1)-1=0
return ~index ? index : 0;
},
//
initTimeValue() {
// IE(uni)"-"
let fdate = this.defaultTime.replace(/\-/g, '/');
fdate = fdate && fdate.indexOf('/') == -1 ? `2020/01/01 ${fdate}` : fdate;
let time = null;
if (fdate) time = new Date(fdate);
else time = new Date();
//
this.year = time.getFullYear();
this.month = Number(time.getMonth()) + 1;
this.day = time.getDate();
this.hour = time.getHours();
this.minute = time.getMinutes();
this.endhour = time.getHours();
this.endminute = time.getMinutes();
// this.second = time.getSeconds();
},
init() {
this.valueArr = [];
this.reset = false;
if (this.mode == 'time') {
this.initTimeValue();
if (this.params.year) {
this.valueArr.push(0);
this.setYears();
}
if (this.params.month) {
this.valueArr.push(0);
this.setMonths();
}
if (this.params.day) {
this.valueArr.push(0);
this.setDays();
}
if (this.params.hour) {
this.valueArr.push(0);
this.setHours();
}
if (this.params.minute) {
this.valueArr.push(0);
this.setMinutes();
}
if (this.params.endhour) {
this.valueArr.push(0);
this.setendHours();
}
if (this.params.endminute) {
this.valueArr.push(0);
this.setendMinutes();
}
// if (this.params.second) {
// this.valueArr.push(0);
// this.setSeconds();
// }
}
this.$forceUpdate();
},
// picker
setYears() {
//
this.years = this.generateArray(this.startYear, this.endYear);
// this.valueArrpicker
this.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.years, this.year));
},
setMonths() {
this.months = this.generateArray(1, 12);
this.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.months, this.month));
},
setDays() {
let totalDays = new Date(this.year, this.month, 0).getDate();
this.days = this.generateArray(1, totalDays);
let index = 0;
// 使setMonths()this.valueArr.splice(this.valueArr.length - 1, xxx)
// this.monththis.yearwatchthis.setDays()this.valueArr.length
if (this.params.year && this.params.month) index = 2;
else if (this.params.month) index = 1;
else if (this.params.year) index = 1;
else index = 0;
//
// 331229day3129(picker-column1)
if (this.day > this.days.length) this.day = this.days.length;
this.valueArr.splice(index, 1, this.getIndex(this.days, this.day));
},
setHours() {
this.hours = this.generateArray(0, 23);
this.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.hours, this.hour));
},
setMinutes() {
this.minutes = this.generateArray(0, 59);
this.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.minutes, this.minute));
},
setendHours() {
this.endhours = this.generateArray(0, 23);
this.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.endhours, this.endhour));
},
setendMinutes() {
this.endminutes = this.generateArray(0, 59);
this.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.endminutes, this.endminute));
},
// setSeconds() {
// this.seconds = this.generateArray(0, 59);
// this.valueArr.splice(this.valueArr.length - 1, 1, this.getIndex(this.seconds, this.second));
// },
close() {
this.$emit('input', false);
},
// picker
change(e) {
this.valueArr = e.detail.value;
console.log(this.valueArr)
let i = 0;
if (this.mode == 'time') {
// 使i++this.valueArrthis.params
// ifi1
if (this.params.year) this.year = this.years[this.valueArr[i++]];
if (this.params.month) this.month = this.months[this.valueArr[i++]];
if (this.params.day) this.day = this.days[this.valueArr[i++]];
if (this.params.hour) this.hour = this.hours[this.valueArr[i++]];
if (this.params.minute) this.minute = this.minutes[this.valueArr[i++]];
if (this.params.endhour) this.endhour = this.hours[this.valueArr[6]]
if (this.params.endminute) this.endminute = this.endminutes[this.valueArr[7]];
// if (this.params.second) this.second = this.seconds[this.valueArr[i++]];
}
},
//
getResult(event = null) {
// #ifdef MP-WEIXIN
if (this.moving) return;
// #endif
let result = {};
// this.paramstrue
if (this.mode == 'time') {
if (this.params.year) result.year = this.formatNumber(this.year || 0);
if (this.params.month) result.month = this.formatNumber(this.month || 0);
if (this.params.day) result.day = this.formatNumber(this.day || 0);
if (this.params.hour) result.hour = this.formatNumber(this.hour || 0);
if (this.params.minute) result.minute = this.formatNumber(this.minute || 0);
if (this.params.endhour) result.endhour = this.formatNumber(this.endhour || 0);
if (this.params.endminute) result.endminute = this.formatNumber(this.endminute || 0);
// if (this.params.second) result.second = this.formatNumber(this.second || 0);
// if (this.params.timestamp) result.timestamp = this.getTimestamp();
}
if (event) this.$emit(event, result);
this.close();
},
//
getTimestamp() {
// yyyy-mm-ddiOS使"/"
let time = this.year + '/' + this.month + '/' + this.day + ' ' + this.hour + ':' + this.minute + ':' + this
.second;
return new Date(time).getTime() / 1000;
}
}
};
</script>
<style lang="scss" scoped>
// nvueflexnvuedisplay
@mixin vue-flex($direction: row) {
/* #ifndef APP-NVUE */
display: flex;
flex-direction: $direction;
/* #endif */
}
.u-datetime-picker {
position: relative;
z-index: 999;
}
.u-picker-view {
height: 100%;
box-sizing: border-box;
}
.u-picker-header {
width: 100%;
height: 90rpx;
padding: 0 40rpx;
@include vue-flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
font-size: 30rpx;
background: #fff;
position: relative;
}
.u-picker-header::after {
content: '';
position: absolute;
border-bottom: 1rpx solid #eaeef1;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
bottom: 0;
right: 0;
left: 0;
}
.u-picker__title {
color: $u-content-color;
}
.u-picker-body {
width: 100%;
height: 500rpx;
overflow: hidden;
background-color: #fff;
}
.u-column-item {
@include vue-flex;
align-items: center;
justify-content: center;
font-size: 30rpx;
color: $u-main-color;
padding: 0 8rpx;
}
.u-text {
font-size: 24rpx;
padding-left: 8rpx;
}
.u-btn-picker {
padding: 16rpx;
box-sizing: border-box;
text-align: center;
text-decoration: none;
}
.u-opacity {
opacity: 0.5;
}
.u-btn-picker--primary {
color: $u-type-primary;
}
.u-btn-picker--tips {
color: $u-tips-color;
}
</style>