aosiyiliaouniapp/components/QuShe-picker/QuShe-picker.vue

890 lines
27 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view :style="{'z-index': zIndex}" @touchmove.prevent.stop="voidFc()" @tap.prevent.stop="voidFc()">
<view
class="mask"
:class="showPicker?'show':'hide'"
:style="{'z-index': Number(zIndex) + 1}"
@touchmove.prevent.stop="voidFc()"
@tap.prevent.stop="hide()"></view>
<view
class="flex_column"
:class="[mode||'middle', showPicker?'show':'hide']"
:style="'z-index:' + (Number(zIndex) + 2) + ';'"
@touchmove.prevent.stop="voidFc()"
@tap.prevent.stop="voidFc()">
<view class="flex_column" :class="(mode||'middle') + '_view'" :style="{'height': heightSize}">
<block v-if="mode==='bottom'">
<view class="flex_row_between_c width100 padding20rpx" :style="{'font-size': titleSize, 'background-color': bgColor_title||'#f8f8f8'}">
<view class="flex_row_none_c width250rpx " :style="{'color': buttonSet.cancleColor||'#ADADAD'}" @tap="hide()">
{{buttonSet.cancleName||'取消'}}
</view>
<view class="flex_row_c_c width250rpx" :style="{'color': titleColor||'#999'}">
{{title||''}}
</view>
<view class="flex_row_e_c width250rpx" :style="{'color': buttonSet.confirmColor||'#3399FF'}" @tap="confirm()">
{{buttonSet.confirmName||'确定'}}
</view>
</view>
</block>
<block v-else-if="mode==='middle'">
<view class="flex_row_c_c width100 padding20rpx" :style="{'font-size': titleSize, 'background-color': bgColor_title||'#f8f8f8', 'color': titleColor||'#999'}" v-if="title">
{{title||''}}
</view>
</block>
<picker-view :indicator-style="'height:' + wH*(lineHeight||.09) + 'px;' + indicator_style" class="width100 height100 backgroundColor_white" :style="{'font-size': contentSize, 'color': contentColor||'black'}" :value="value" @change="bindChange($event)">
<block v-if="type==='date'">
<picker-view-column v-if="setObj.dateMode>=1">
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in years" :key="picker_index">{{picker_item}}年</view>
</picker-view-column>
<picker-view-column v-if="setObj.dateMode>=2">
<!-- #ifndef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 12" :key="picker_index">{{picker_item+1}}月</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 12" :key="picker_index">{{picker_item}}月</view>
<!-- #endif -->
</picker-view-column>
<picker-view-column v-if="setObj.dateMode>=3">
<!-- #ifndef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in days" :key="picker_index">{{picker_item+1}}日</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in days" :key="picker_index">{{picker_item}}日</view>
<!-- #endif -->
</picker-view-column>
<picker-view-column v-if="setObj.dateMode>=4">
<!-- #ifndef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 24" :key="picker_index">{{picker_item}}时</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 24" :key="picker_index">{{picker_item-1}}时</view>
<!-- #endif -->
</picker-view-column>
<picker-view-column v-if="setObj.dateMode>=5">
<!-- #ifndef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 60" :key="picker_index">{{picker_item}}分</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 60" :key="picker_index">{{picker_item-1}}分</view>
<!-- #endif -->
</picker-view-column>
<picker-view-column v-if="setObj.dateMode>=6">
<!-- #ifndef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 60" :key="picker_index">{{picker_item}}秒</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in 60" :key="picker_index">{{picker_item-1}}秒</view>
<!-- #endif -->
</picker-view-column>
</block>
<block v-else-if="type==='city'">
<picker-view-column>
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in provinceDataList" :key="picker_index">{{picker_item.label}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in cityDataList" :key="picker_index">{{picker_item.label}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in areaDataList" :key="picker_index">{{picker_item.label}}</view>
</picker-view-column>
</block>
<block v-else-if="type==='provincialStreet'">
<picker-view-column>
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in provinceDataList" :key="picker_index">{{picker_item.label}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in cityDataList" :key="picker_index">{{picker_item.label}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in areaDataList" :key="picker_index">{{picker_item.label}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(picker_item,picker_index) in streetDataList" :key="picker_index">{{picker_item}}</view>
</picker-view-column>
</block>
<block v-if="type==='custom'">
<block v-if="setObj.linkage">
<block v-if="setObj.linkageNum===2">
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemArray" :key="index">{{item[setObj.steps.step_1_value]}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemArray[value[0]][setObj.steps.step_2_item]" :key="index">{{item[setObj.steps.step_2_value]||item}}</view>
</picker-view-column>
</block>
<block v-else-if="setObj.linkageNum===3">
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemArray" :key="index">{{item[setObj.steps.step_1_value]}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemArray[value[0]][setObj.steps.step_2_item]" :key="index">{{item[setObj.steps.step_2_value]}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemArray[value[0]][setObj.steps.step_2_item][value[1]][setObj.steps.step_3_item]"
:key="index">{{item[setObj.steps.step_3_value]||item}}</view>
</picker-view-column>
</block>
</block>
<block v-else>
<picker-view-column v-for="(items, indexs) in setObj.itemArray" :key="indexs">
<view class="flex_row_c_c" v-for="(item, index) in items" :key="index">{{setObj.steps?setObj.steps.step_1_value?item[setObj.steps.step_1_value]:item:item}}</view>
</picker-view-column>
</block>
</block>
<block v-if="type==='custom2'">
<block v-if="setObj.linkage">
<block v-if="setObj.linkageNum===2">
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemObject.step_1" :key="index">{{setObj.steps.step_1_value?item[setObj.steps.step_1_value]:item}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemObject.step_2[value[0]]" :key="index">{{setObj.steps.step_2_value?item[setObj.steps.step_2_value]:item}}</view>
</picker-view-column>
</block>
<block v-else-if="setObj.linkageNum===3">
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemObject.step_1" :key="index">{{setObj.steps.step_1_value?item[setObj.steps.step_1_value]:item}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemObject.step_2[value[0]]" :key="index">{{setObj.steps.step_2_value?item[setObj.steps.step_2_value]:item}}</view>
</picker-view-column>
<picker-view-column>
<view class="flex_row_c_c" v-for="(item,index) in setObj.itemObject.step_3[value[0]][value[1]]" :key="index">{{setObj.steps.step_3_value?item[setObj.steps.step_3_value]:item}}</view>
</picker-view-column>
</block>
</block>
<block v-else>
<picker-view-column v-for="(items, indexs) in setObj.itemArray" :key="indexs">
<view class="flex_row_c_c" v-for="(item, index) in items" :key="index">{{setObj.steps.step_1_value?item[setObj.steps.step_1_value]:item}}</view>
</picker-view-column>
</block>
</block>
</picker-view>
<block v-if="mode==='top'">
<view class="flex_row_between_c width100 padding20rpx" :style="{'font-size': titleSize, 'background-color': bgColor_title||'#f8f8f8'}">
<view class="flex_row_none_c width250rpx " :style="{'color': buttonSet.cancleColor||'#ADADAD'}" @tap="hide()">
{{buttonSet.cancleName||'取消'}}
</view>
<view class="flex_row_c_c width250rpx" :style="{'color': titleColor||'#999'}">
{{title||''}}
</view>
<view class="flex_row_e_c width250rpx" :style="{'color': buttonSet.confirmColor||'#3399FF'}" @tap="confirm()">
{{buttonSet.confirmName||'确定'}}
</view>
</view>
</block>
</view>
<view class="flex_row" style="margin-top: 20px;" v-if="mode==='middle'">
<view class="flex_row_c_c width50">
<button :type="buttonSet.cancelType||'default'" @tap="hide()" :style="classObj.btnSize + (buttonSet.cancelStyle||'')">{{buttonSet.cancelName||'取消'}}</button>
</view>
<view class="flex_row_c_c width50">
<button :type="buttonSet.confirmType||'primary'" @tap="confirm()" :style="classObj.btnSize + (buttonSet.confirmStyle||'')">{{buttonSet.confirmName||'确定'}}</button>
</view>
</view>
</view>
</view>
</template>
<script>
import _app from './app.js';
var provinceData = {};
var cityData = {};
var areaData = {};
var streetData = {};
const Sys = uni.getSystemInfoSync();
const wH = Sys.screenHeight;
const wW = Sys.screenWidth;
export default {
name: 'QS-picker',
props: {
pickerId: {
type: String,
default: '未定义Id'
},
/* show: { //控制是否弹出
type: Boolean,
default: false
}, */
type: { //类型
type: String,
default: 'date'
},
height: { //picker高度
type: Number,
default: 0
},
lineHeight: {
type: Number,
default: .09
},
indicator_style: { //picker单行样式
type: String,
default: ''
},
fontscale: { //picker内文字大小
type: Number,
default: .02
},
width: { //picker宽度
type: Number,
default: .8
},
buttonSet: { //按钮设置
type: Object,
default () {
return {};
}
},
dataSet: { //各类型携带的数据
type: Object,
default () {
return {};
}
},
showReset: { //每次显示是否重置value
type: Boolean,
default: false
},
title: { //title标题
type: String,
default: ''
},
mode: {
type: String,
default: 'bottom'
},
zIndex: {
type: [Number, String],
default: 9999
},
bgColor_title: {
type: String,
default: '#F8F8F8'
},
autoHide: {
type: Boolean,
default: true
},
titleColor: {
type: String,
default: '#999'
},
contentColor: {
type: String,
default: 'black'
}
},
data() {
return {
showPicker: false,
setObj: {},
//date
years: [],
days: 0,
value: [],
//city、provincialStreet
provinceDataList: [],
cityDataList: [],
areaDataList: [],
//provincialStreet
streetDataList: [],
defaultValue: [],
wH,
classObj: {
btnSize: 'font-size: ' + (wH * (this.fontscale + .005)) + 'px;',
}
};
},
computed: {
heightSize() {
if(this.mode==='middle') {
return wH*(this.height||.3) + 'px';
}else{
return wH*(this.height||.45) + 'px';
}
},
titleSize() {
return (wH * (this.fontscale + .002)) + 'px';
},
contentSize() {
return (wH * this.fontscale) + 'px';
}
},
watch: {
dataSet() {
this.init();
},
showPicker(n, o) {
if (n && this.showReset) {
let defaultValue = this.defaultValue;
switch (this.type) {
case 'city':
this.cityDataList = cityData[defaultValue[0]];
this.areaDataList = areaData[defaultValue[0]][defaultValue[1]];
break;
case 'provincialStreet':
this.cityDataList = cityData[defaultValue[0]];
this.areaDataList = areaData[defaultValue[0]][defaultValue[1]];
this.streetDataList = streetData[defaultValue[0]][defaultValue[1]][defaultValue[2]];
break;
case 'date':
let data = _app.countDays(this.years[defaultValue[0]], defaultValue);
this.days = data.days;
this.value = data.val;
break;
default:
break;
}
this.value = [...defaultValue];
}
}
},
created() {
this.init();
},
methods: {
init() {
let value = [];
let setObj = {};
//date
let years = [];
let days = 0;
// city、provincialStreet
let provinceDataList;
let cityDataList;
let areaDataList;
//provincialStreet
let streetDataList;
switch (this.type) {
case 'date': //date
setObj = _app.creatDateObj(this.dataSet);
console.log('setObj: ' + JSON.stringify(setObj));
let defaultDate = setObj.defaultValue;
years = _app.countYears(setObj.startYear || (new Date().getFullYear() - 5), setObj.endYear || (new Date().getFullYear() +
5));
let endYear = years[years.length - 1];
let defaultYear = defaultDate.getFullYear(),
defaultMonth = defaultDate.getMonth(),
defaultDay = defaultDate.getDate(),
defaultHour = defaultDate.getHours(),
defaultMinute = defaultDate.getMinutes(),
defaultSecond = defaultDate.getSeconds();
let compareY = defaultYear > endYear;
let year = compareY ? endYear : defaultYear;
let month = compareY ? 11 : defaultMonth;
defaultDate[1] = month;
days = _app.countDays(year, defaultDate).days;
let dm = setObj.dateMode;
if (dm >= 1) {
if (compareY)
value.push(years.length - 1);
else
for (let i = 0; i < years.length; i++) {
if (year == years[i]) {
value.push(i);
}
}
}
if (dm >= 2) value.push(compareY ? 11 : month);
if (dm >= 3) value.push(compareY ? days : defaultDay - 1);
if (dm >= 4) value.push(defaultHour);
if (dm >= 5) value.push(defaultMinute);
if (dm >= 6) value.push(defaultSecond);
//date
this.years = years;
this.days = days;
this.setObj = setObj;
break;
case 'city':
value = this.dataSet.defaultValue || [0, 0, 0];
provinceData = require('./city-data/province.js').default;
cityData = require('./city-data/city.js').default;
areaData = require('./city-data/area.js').default;
provinceDataList = provinceData;
cityDataList = cityData[value[0]];
areaDataList = areaData[value[0]][value[1]];
//city、provincialStreet
this.provinceDataList = provinceDataList;
this.cityDataList = cityDataList;
this.areaDataList = areaDataList;
break;
case 'provincialStreet':
value = this.dataSet.defaultValue || [0, 0, 0, 0];
provinceData = require('./city-data/province.js').default;
cityData = require('./city-data/city.js').default;
areaData = require('./city-data/area.js').default;
streetData = require('./city-data/streets.js').default;
provinceDataList = provinceData;
cityDataList = cityData[value[0]];
areaDataList = areaData[value[0]][value[1]];
streetDataList = streetData[value[0]][value[1]][value[2]];
//provincialStreet
this.provinceDataList = provinceDataList;
this.cityDataList = cityDataList;
this.areaDataList = areaDataList;
this.streetDataList = streetDataList;
break;
case 'custom':
setObj = _app.creatCustomObj(this.dataSet);
if (setObj.defaultValue) {
value = setObj.defaultValue;
} else {
if (setObj.linkage) {
for (let i = 0; i < setObj.linkageNum; i++) {
value.push(0);
}
} else {
setObj.itemArray.forEach(item => {
value.push(0);
});
}
}
this.setObj = setObj;
break;
case 'custom2':
setObj = _app.creatCustom2Obj(this.dataSet);
if (setObj.defaultValue) {
value = setObj.defaultValue;
} else {
if (setObj.linkage) {
for (let i = 0; i < setObj.linkageNum; i++) {
value.push(0);
}
} else {
setObj.itemArray.forEach(item => {
value.push(0);
});
}
}
this.setObj = setObj;
break;
default:
break;
}
let defaultValue = [...value];
this.value = value;
this.defaultValue = defaultValue;
},
bindChange({
detail: {
value
}
}) {
// console.log(JSON.stringify(e))
let changevalue;
switch (this.type) {
case 'city':
changevalue = value;
if (this.value[0] !== changevalue[0]) {
// 第一级发生滚动
this.cityDataList = cityData[changevalue[0]];
this.areaDataList = areaData[changevalue[0]][0];
changevalue[1] = 0;
changevalue[2] = 0;
} else if (this.value[1] !== changevalue[1]) {
// 第二级滚动
this.areaDataList = areaData[changevalue[0]][changevalue[1]];
changevalue[2] = 0;
}
this.value = changevalue;
break;
case 'provincialStreet':
changevalue = value;
if (this.value[0] !== changevalue[0]) {
// 第一级发生滚动
this.cityDataList = cityData[changevalue[0]];
this.areaDataList = areaData[changevalue[0]][0];
this.streetDataList = streetData[changevalue[0]] && streetData[changevalue[0]][0] && streetData[changevalue[0]][
0
][0] ? streetData[changevalue[0]][0][0] : [];
changevalue[1] = 0;
changevalue[2] = 0;
changevalue[3] = 0;
} else if (this.value[1] !== changevalue[1]) {
// 第二级滚动
this.areaDataList = areaData[changevalue[0]][changevalue[1]];
this.streetDataList = streetData[changevalue[0]] && streetData[changevalue[0]][changevalue[1]] && streetData[
changevalue[0]][changevalue[1]][0] ? streetData[changevalue[0]][changevalue[1]][0] : [];
changevalue[2] = 0;
changevalue[3] = 0;
} else if (this.value[2] !== changevalue[2]) {
this.streetDataList = streetData[changevalue[0]] && streetData[changevalue[0]][changevalue[1]] && streetData[
changevalue[0]][changevalue[1]][changevalue[2]] ? streetData[changevalue[0]][changevalue[1]][changevalue[2]] :
[];
changevalue[3] = 0;
}
this.value = changevalue;
break;
case 'date':
let data = _app.countDays(this.years[value[0]], value);
this.days = data.days;
this.value = data.val;
break;
default:
this.value = value;
break;
}
},
confirm() {
let type = this.type;
let value = this.value;
let obj = {
type,
value,
pickerId: this.pickerId
}
let setObj = this.setObj;
let data;
switch (type) {
case 'date':
data = '';
let dateFormatArray = setObj.dateFormatArray;
console.log('dateFormatArray' + JSON.stringify(dateFormatArray));
for (let i = 1; i <= this.setObj.dateMode; i++) {
if (i <= 6) {
let j = i - 1;
let f = i - 2;
switch (i) {
case 1:
data += this.years[value[j]];
break;
case 2:
data += dateFormatArray[f] + (value[j] + 1);
break;
case 3:
data += dateFormatArray[f] + (value[j] + 1);
break;
default:
data += dateFormatArray[f] + value[j];
break;
}
}
}
break;
case 'city':
data = {
label: this._getLabel(),
value: this.value,
cityCode: this._getCityCode()
};
break;
case 'provincialStreet':
data = {
label: this._getprovincialStreetLabel(),
value: this.value,
cityCode: this._getCityCode()
};
break;
case 'custom':
let custom_datas = setObj.itemArray;
data = {};
let custom_val = this.value;
let custom_steps = setObj.steps;
if (setObj.linkage) {
if (setObj.linkageNum === 2) { //二级联动
data.steps1 = custom_datas[custom_val[0]];
data.steps2 = custom_datas[custom_val[0]][custom_steps.step_2_item][custom_val[1]];
} else if (setObj.linkageNum === 3) { //三级联动
data.steps1 = custom_datas[custom_val[0]];
if (!data.steps1)
_app.showToast('第一列中不存在第' + custom_val[0] + '项');
data.steps2 = data.steps1[custom_steps.step_2_item][custom_val[1]];
if (!data.steps2)
_app.showToast('第二列中不存在第' + custom_val[1] + '项');
data.steps3 = data.steps2[custom_steps.step_3_item][custom_val[2]];
if (!data.steps3)
_app.showToast('第三列中不存在第' + custom_val[2] + '项');
} else {
_app.showToast('不在指定范围中');
}
} else { //无联动
data = [];
for (let i = 0; i < custom_datas.length; i++) {
let d = custom_datas[i];
data.push(d[custom_val[i]]);
}
}
break;
case 'custom2':
let custom2_datas = setObj.linkage ? setObj.itemObject : setObj.itemArray;
let custom2_val = this.value;
if (setObj.linkage) {
data = {}
if (setObj.linkageNum === 2) { //二级联动
data.steps1 = custom2_datas.step_1[custom2_val[0]];
data.steps2 = custom2_datas.step_2[custom2_val[0]][custom2_val[1]];
} else if (setObj.linkageNum === 3) { //三级联动
data.steps1 = custom2_datas.step_1[custom2_val[0]];
if (!data.steps1)
_app.showToast('第一列中不存在第' + custom2_val[0] + '项');
data.steps2 = custom2_datas.step_2[custom2_val[0]][custom2_val[1]];
if (!data.steps2)
_app.showToast('第二列中不存在第' + custom2_val[1] + '项');
data.steps3 = custom2_datas.step_3[custom2_val[0]][custom2_val[1]][custom2_val[2]];
if (!data.steps3)
_app.showToast('第三列中不存在第' + custom2_val[2] + '项');
} else {
_app.showToast('不在指定范围中');
}
} else { //无联动
data = [];
for (let i = 0; i < custom2_datas.length; i++) {
let d = custom2_datas[i];
data.push(d[custom2_val[i]]);
}
}
break;
default:
break;
}
obj.data = data;
this.$emit('confirm', obj);
console.log(this.autoHide)
if(this.autoHide)
this.hide();
},
_getprovincialStreetLabel() {
let pcikerLabel =
this.provinceDataList[this.value[0]].label +
'-' +
this.cityDataList[this.value[1]].label +
'-' +
this.areaDataList[this.value[2]].label +
(this.streetDataList[this.value[3]] ? '-' + this.streetDataList[this.value[3]] : '');
return pcikerLabel;
},
_getLabel() {
let pcikerLabel =
this.provinceDataList[this.value[0]].label +
'-' +
this.cityDataList[this.value[1]].label +
'-' +
this.areaDataList[this.value[2]].label;
return pcikerLabel;
},
_getCityCode() {
return this.areaDataList[this.value[2]].value;
},
show() {
this.showPicker = true;
this.$emit('showQSPicker', {
pickerId: this.pickerId,
type: this.type
});
},
hide() {
this.showPicker = false;
this.$emit('hideQSPicker', {
pickerId: this.pickerId,
type: this.type
});
},
voidFc() {}
}
}
</script>
<style scoped>
/* middle */
.middle{
position: fixed;
left: 50%;
top: 50%;
opacity: 0;
pointer-events: none;
perspective: 2500upx;
transition: all .3s ease-in-out;
}
.middle.show{
transition-delay: .3s;
transform: translate(-50%, -50%);
pointer-events: auto;
opacity: 1;
}
.middle.hide{
transform: translate(-50%, -50%);
opacity: 0;
pointer-events: none;
}
.middle_view{
background-color: #FFF;
border-radius: 15upx;
overflow: hidden;
width: 80vw;
}
/* bottom */
.bottom{
position: fixed;
left: 0;
bottom: 0;
pointer-events: none;
perspective: 2500upx;
transition: all .3s ease-in-out;
transform: translateY(100%);
}
.bottom.show{
transform: translateY(0);
pointer-events: auto;
}
.bottom.hide{
transform: translateY(100%);
pointer-events: none;
}
.bottom_view{
width: 100vw;
background-color: white;
}
/* top */
.top{
position: fixed;
left: 0;
top: 0;
pointer-events: none;
perspective: 2500upx;
transition: all .3s ease-in-out;
transform: translateY(-100%);
}
.top.show{
transform: translateY(0);
pointer-events: auto;
}
.top.hide{
transform: translateY(-100%);
pointer-events: none;
}
.top_view{
width: 100vw;
background-color: white;
}
/* mask */
.mask{
position: fixed;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
opacity: 0;
background-color: rgba(0,0,0,.6);
transition: all .3s ease-in-out;
pointer-events: none;
}
.mask.show{
opacity: 1;
pointer-events: auto;
}
.mask.hide{
opacity: 0;
transition: all .3s ease-in-out .3s;
pointer-events: none;
}
.flex_column_c_c {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.text_align_center {
text-align: center;
}
/* flex */
.flex_1 {
flex: 1;
}
.flex_column {
display: flex;
flex-direction: column;
}
.flex_row_e_none {
display: flex;
flex-direction: row;
justify-content: flex-end;
}
.flex_column_c_c {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.flex_row {
display: flex;
flex-direction: row;
}
.flex_row_none_c {
display: flex;
flex-direction: row;
align-items: center;
}
.flex_row_e_c {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
}
.flex_row_c_c {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.flex_row_between_c {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
/* width height */
.width50 {
width: 50%;
}
.width100 {
width: 100%;
}
.width250rpx{
width: 250rpx;
}
.height100 {
height: 100%;
}
/* padding */
.padding20rpx{
padding: 20rpx;
}
view, block, botton, text, picker, picker-view picker-view-column {
box-sizing: border-box;
}
.backgroundColor_white{
background-color: white;
}
</style>