Commit 6f51cd7b by 袁伟伦

bug ywl

parents 39225c6a 3ce1a0e7
......@@ -5,7 +5,7 @@ App({
refreshToken: '',
userInfo: null,
baseUrl: 'https://sm-web.meiqicloud.com',//测试
// baseUrl: 'https://zmj.zhengmao.net',//生产
// baseUrl: 'https://smbhyh-web.meiqicloud.com',//生产
debug: true,
},
......
// picker/picker.js
import { isPlainObject } from './tool'
Component({
/**
* 组件的属性列表
*/
properties: {
scrollType: {
type: String,
value: 'normal'// "link": scroll间联动 "normal": scroll相互独立
},
listData: {
type: Array,
value: [],
observer: function(newVal) {
if (newVal.length === 0 || this._compareDate()) return
this._setTempData()
const tempArr = [...new Array(newVal.length).keys()].map(() => 0)
this.data.lastValue = this.data.tempValue = tempArr
this._setDefault()
// let {defaultPickData} = this.properties;
// if(newVal.length === 0) return;
//
// this._setDefault(newVal, defaultPickData)
}
},
defaultPickData: {
type: Array,
value: [],
observer: function(newVal) {
if (newVal.length === 0 || this._compareDate()) return
this._setTempData()
this._setDefault()
}
},
keyWordsOfShow: {
type: String,
value: 'name'
},
isShowPicker: {
type: Boolean,
value: false,
observer: function(newVal) {
if (newVal) {
this._openPicker()
} else {
this._closePicker()
}
}
},
titleText: {// 标题文案
type: String,
value: '标题'
},
cancelText: {// 取消按钮文案
type: String,
value: '取消'
},
sureText: {// 确定按钮文案
type: String,
value: '确定'
},
pickerHeaderStyle: String, // 标题栏样式 view
sureStyle: String, // 标题栏确定样式 text
cancelStyle: String, // 标题栏取消样式 text
titleStyle: String, // 标题栏标题样式 view
maskStyle: String, // 设置蒙层的样式(详见picker-view) view
indicatorStyle: String, // 设置选择器中间选中框的样式(详见picker-view) view
chooseItemTextStyle: String// 设置picker列表文案样式 text
},
/**
* 组件的初始数据
*/
data: {
columnsData: [],
value: [],
backData: [],
height: 0,
isOpen: false,
isUseKeywordOfShow: false,
scrollEnd: true, // 滚动是否结束
lastValue: [], // 上次各个colum的选择索引
tempValue: [],
isFirstOpen: true,
onlyKey: '',
defaultPickDataTemp: '',
listDataTemp: ''
},
/**
* 组件的方法列表
*/
methods: {
tapModal() {
this.properties.isShowPicker = false
this._closePicker()
},
cancle() {
this.triggerEvent('cancle')
this._closePicker()
},
sure() {
const { scrollEnd, tempValue } = this.data
if (!scrollEnd) return
const backData = this._getBackDataFromValue(tempValue)
this.setData({
backData
})
this.triggerEvent('sure', {
choosedData: backData,
choosedIndexArr: tempValue
})
this._closePicker()
},
_bindChange(e) {
const { scrollType } = this.properties
const { lastValue } = this.data
let val = e.detail.value
switch (scrollType) {
case 'normal':
this.data.tempValue = val.concat()
this.data.tempValue = val.concat()
break
case 'link':
// let column_02 = this._getColumnData(this.properties.listData[val[0]].children);
// let column_03 = this._getColumnData(this.properties.listData[val[0]].children[val[1]].children);
var tempArray = []
if (val.length > 1) {
val.slice(0, val.length - 1).reduce((t, c, i) => {
const v = t[c].children
tempArray.push(this._getColumnData(v))
return v
}, this.properties.listData)
}
// let columnsData = [this.data.columnsData[0],column_02,column_03];
var columnsData = [this.data.columnsData[0], ...tempArray]
// 设置value关联
var compareIndex = this._getScrollCompareIndex(lastValue, val)
if (compareIndex > -1) {
let tempI = 1
while (val[compareIndex + tempI] !== undefined) {
val[compareIndex + tempI] = 0
tempI++
}
}
val = this._validate(val)
this.data.lastValue = val.concat()
this.data.tempValue = val.concat()
this.setData({
columnsData
// value: val
})
}
},
_validate(val) {
const { columnsData } = this.data
columnsData.forEach((v, i) => {
if (columnsData[i].length - 1 < val[i]) {
val[i] = columnsData[i].length - 1
}
})
this.setData({
value: val
})
return val
},
_bindpickend() {
this.data.scrollEnd = true
},
_bindpickstart() {
this.data.scrollEnd = false
},
_openPicker() {
if (!this.data.isFirstOpen) {
if (this.properties.listData.length !== 0) {
this._setDefault(this._computedBackData(this.data.backData))
}
}
this.data.isFirstOpen = false
this.setData({
isOpen: true
})
},
_closePicker() {
this.setData({
isOpen: false
})
},
_getColumnData(arr) {
return arr.map((v) => this._fomateObj(v))
},
_fomateObj(o) {
const tempO = {}
for (const k in o) {
k !== 'children' && (tempO[k] = o[k])
}
return tempO
},
_getScrollCompareIndex(arr1, arr2) {
let tempIndex = -1
for (let i = 0, len = arr1.length; i < len; i++) {
if (arr1[i] !== arr2[i]) {
tempIndex = i
break
}
}
return tempIndex
},
// 根据id获取索引
_getIndexByIdOfObject(listData, idArr, key, arr) {
if (!Array.isArray(listData)) return
for (let i = 0, len = listData.length; i < len; i++) {
if (listData[i][key] === idArr[arr.length][key]) {
arr.push(i)
return this._getIndexByIdOfObject(listData[i].children, idArr, key, arr)
}
}
},
_setDefault(inBackData) {
const { scrollType } = this.properties
let { listData, defaultPickData } = this.properties
const { lastValue } = this.data
if (inBackData) {
defaultPickData = inBackData
}
let backData = []
switch (scrollType) {
case 'normal':
if (isPlainObject(listData[0][0])) {
this.setData({
isUseKeywordOfShow: true
})
}
if (Array.isArray(defaultPickData) && defaultPickData.length > 0) {
backData = listData.map((v, i) => v[defaultPickData[i]])
this.data.tempValue = defaultPickData
this.data.lastValue = defaultPickData
} else {
backData = listData.map((v) => v[0])
}
this.setData({
columnsData: listData,
backData: backData,
value: defaultPickData
})
break
case 'link':
// let column_01 = this._getColumnData(newVal);
// let column_02 = this._getColumnData(newVal[0].children);
// let column_03 = this._getColumnData(newVal[0].children[0].children);
// let columnsData = [column_01,column_02,column_03];
var columnsData = []
// 如果默认值
if (Array.isArray(defaultPickData) && defaultPickData.length > 0 && defaultPickData.every((v, i) => isPlainObject(v))) {
const key = this.data.onlyKey = Object.keys(defaultPickData[0])[0]
const arr = []
this._getIndexByIdOfObject(listData, defaultPickData, key, arr)
defaultPickData = arr
let tempI = 0
do {
lastValue.push(defaultPickData[tempI])
columnsData.push(this._getColumnData(listData))
listData = listData[defaultPickData[tempI]].children
tempI++
} while (listData)
backData = columnsData.map((v, i) => v[defaultPickData[i]])
// 如果没有默认值
} else {
this.data.onlyKey = this.properties.keyWordsOfShow || 'name'
do {
lastValue.push(0)
columnsData.push(this._getColumnData(listData))
listData = listData[0].children
} while (listData)
backData = columnsData.map((v) => v[0])
}
this.data.tempValue = defaultPickData
this.data.lastValue = defaultPickData
this.setData({
isUseKeywordOfShow: true,
columnsData,
backData
})
setTimeout(() => {
this.setData({
value: defaultPickData
})
}, 0)
break
}
},
_computedBackData(backData) {
const { scrollType, listData } = this.properties
const { onlyKey } = this.data
if (scrollType === 'normal') {
return backData.map((v, i) => listData[i].findIndex((vv, ii) => this._compareObj(v, vv)))
} else {
const t = backData.map((v, i) => {
const o = {}
o[onlyKey] = v[onlyKey]
return o
})
return t
}
},
_compareObj(o1, o2) {
const { keyWordsOfShow } = this.properties
if (typeof o1 !== 'object') {
return o1 === o2
} else {
return o1[keyWordsOfShow] === o2[keyWordsOfShow]
}
},
_getBackDataFromValue(val) {
let tempArr = []
if (val.length > 0) {
tempArr = this.data.columnsData.reduce((t, v, i) => {
return t.concat(v[val[i]])
}, [])
} else {
tempArr = this.data.columnsData.map((v, i) => v[0])
}
return tempArr
},
_compareDate() { // 完全相等返回true
const { defaultPickDataTemp, listDataTemp } = this.data
const { defaultPickData, listData } = this.properties
return defaultPickDataTemp === defaultPickData && listDataTemp === listData
},
_setTempData() {
const { defaultPickData, listData } = this.properties
this.data.defaultPickDataTemp = defaultPickData
this.data.listDataTemp = listData
}
}
})
{
"component": true,
"usingComponents": {}
}
\ No newline at end of file
<!--picker/picker.wxml-->
<view class="full-box {{isOpen?'cur':''}}">
<!--<view class="modal" bindtap="tapModal"></view>-->
<view class="picker">
<view class="picker-header" style="{{pickerHeaderStyle}}">
<view bindtap="cancle" >
<text style="{{cancelStyle}}">{{cancelText}}</text>
</view>
<text style="{{titleStyle}}">{{titleText}}</text>
<view bindtap="sure">
<text style="{{sureStyle}}">{{sureText}}</text>
</view>
</view>
<picker-view
value="{{value}}"
class="picker-content"
bindpickstart="_bindpickstart"
bindchange="_bindChange"
bindpickend="_bindpickend"
indicator-style="{{indicatorStyle}}"
mask-style="{{maskStyle}}"
>
<picker-view-column wx:for="{{columnsData}}" wx:key="{{index}}">
<view wx:for="{{item}}" wx:for-item="itemIn" class="picker-line" wx:key="{{index}}">
<text class="line1" style="{{chooseItemTextStyle}}">{{isUseKeywordOfShow?itemIn[keyWordsOfShow]:itemIn}}</text>
</view>
</picker-view-column>
</picker-view>
</view>
</view>
/* picker/picker.wxss */
.full-box{
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: 9999;
opacity: 0;
background:rgba(0,0,0,.4);
transition:all .4s ease-in-out 0;
pointer-events:none;
}
.full-box.cur{
opacity:1;
pointer-events:auto
}
.modal{
position: absolute;
width: 100%;
height: 50%;
bottom:-50%;
left: 0;
background: transparent;
transition:all .4s ease-in-out 0;
}
.picker{
position: absolute;
width: 100%;
height: 235px;
bottom: -235px;
left: 0;
background: #fff;
display: flex;
flex-direction: column;
transition:all .4s ease-in-out 0;
}
.cur .picker{
bottom:0;
}
.cur .modal{
bottom:50%;
}
.picker-line{
display: flex;
justify-content: center;
align-items: center;
}
.picker-header {
height: 20%;
box-sizing: border-box;
padding: 0 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #eeeeee;
}
.picker-header view {
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.picker-header view text{
font-size: 36rpx;
}
.picker-content {
flex-grow: 1;
}
.line1{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
lines:1
}
\ No newline at end of file
function _typeof(obj) {
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
}
function isString(obj) { //是否字符串
return _typeof(obj) === 'string'
}
function isPlainObject(obj) {
return _typeof(obj) === 'object';
}
module.exports = {
isString,
isPlainObject
}
......@@ -18,6 +18,10 @@ Page({
activityTimes: [{beginTime:'',endTime:'', date:''}],// 活动场次
activityIndex: 0,
isShow: false,
listData: [],
errorName: '',
errorPhone: '',
errorSession: '',
......@@ -102,10 +106,15 @@ Page({
},
onSelectionDate: function (event) {
console.log(event)
showPicker() {
this.setData({
isShow: true
})
},
sureCallBack: function (event) {
this.setData({
activityIndex: event.detail.value*1
activityIndex: event.detail.choosedIndexArr,
isShow: false
})
// 切换报名场次更新重置报名人数
this.setData({
......@@ -129,6 +138,11 @@ Page({
}
},
cancleCallBack() {
this.setData({
isShow: false
})
},
onServic: function () {
wx.makePhoneCall({
......@@ -213,13 +227,16 @@ Page({
var response = res.data
if (response.activityTimes.length > 0) {
var activityTimes = []
var pickerList = []
response.activityTimes.forEach(item => {
var obj = item
obj.date = item.beginTime + ' - ' + item.endTime
activityTimes.push(obj)
pickerList.push(obj.date)
})
that.setData({
activityTimes: activityTimes,
listData: [pickerList],
})
}
......
{
"navigationBarTextStyle": "black",
"usingComponents": {}
"usingComponents": {
"picker":"../../component/picker/picker"
}
}
\ No newline at end of file
......@@ -63,10 +63,13 @@
<!-- <picker class="input-picker" mode="date" value="{{date}}" start="{{appointmentDate}}" bindchange="onSelectionDate">
<view class="picker">{{formInto.date}}</view>
</picker> -->
<picker class="input-picker" mode="selector" range-key="{{'date'}}" range="{{activityTimes}}" bindchange="onSelectionDate">
<!-- item.beginTime + ' - ' + item.endTime -->
<!-- <picker class="input-picker" mode="selector" range-key="{{'date'}}" range="{{activityTimes}}" bindchange="onSelectionDate">
<text class="picker">{{activityTimes[activityIndex].beginTime}}</text>
</picker>
<image class="input-icon" src="../../image/more.png"></image> -->
<view class="input-picker" bindtap="showPicker">
<text class="picker">{{activityTimes[activityIndex].beginTime}}</text>
</view>
<image class="input-icon" src="../../image/more.png"></image>
</view>
</view>
......@@ -74,6 +77,19 @@
<text hidden="{{errorSession ? false : true}}">{{errorSession}}</text>
</view>
<picker
isShowPicker="{{isShow}}"
bindsure="sureCallBack"
bindcancle="cancleCallBack"
scrollType="normal"
listData="{{listData}}"
indicatorStyle="height:47rpx"
titleText=""
sureStyle="color:#26AB28"
cancelStyle="color:#888888"
chooseItemTextStyle="font-size: 24rpx;"
></picker>
<view class="row align-c">
<view class="input-label row align-c">
<text space="ensp">报名人数</text>
......
......@@ -22,8 +22,8 @@
</view>
<view class="banner-notice row align-c">
<image src="./image/inform.png"></image>
<text>最新动态</text>
<image src="./image/inform.png" bindtap="onNotice"></image>
<text bindtap="onNotice">最新动态</text>
<!-- <text>温泉公寓现已接受预定</text> -->
<l-notice-bar
show="{{true}}"
......

26.2 KB | W: | H:

3.47 KB | W: | H:

pages/mine/image/avatar.png
pages/mine/image/avatar.png
pages/mine/image/avatar.png
pages/mine/image/avatar.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -9,20 +9,14 @@ Page({
data: {
mobile: '',
nickName: '',
avatarUrl: '',
avatarUrl: '/pages/mine/image/avatar.png',
stateTest: '去认证',
mask:false,
type:0, //判断是否是认证的了
approveList:['园区门票优惠','餐厅价格优惠','SPA服务优惠','免费观看电影','无须预约入园','尽享多重特权'],
activityList: [],
appointmentList: [],
tabIn: false,
showIndex: 0,
},
//去认证
goApprove(){
wx.navigateTo({
url: '../ownerCertification/ownerCertification',
})
isRegister: false, // 是否注册
},
close(){
this.setData({
......@@ -51,10 +45,11 @@ Page({
let nickName = wx.getStorageSync('nickName')
let avatarUrl = wx.getStorageSync('avatarUrl')
if (mobile && nickName && avatarUrl) {
this.setData({
mobile: this.toHide(mobile),
that.setData({
mobile: that.toHide(mobile),
nickName: nickName,
avatarUrl: avatarUrl,
isRegister: true,
})
app.login({
......@@ -68,60 +63,60 @@ Page({
that.setData({
type: userType == 1 ? 1 : 0,
})
} else if (this.data.showIndex == 0) {
} else {
that.setData({
tabIn: false,
showIndex: 1,
isRegister: false,
})
}
},
// 登录注册页
checkRegister() {
if (this.data.isRegister) {
return true
} else {
wx.navigateTo({
url: '../login/login',
})
} else if (this.data.showIndex == 1) {
that.setData({
tabIn: false,
showIndex: 0,
return false
}
},
//去认证
goApprove(){
if (this.checkRegister()) {
wx.navigateTo({
url: '../ownerCertification/ownerCertification',
})
wx.switchTab({
url: '/pages/home/home',
}
},
myActivity() {
if (this.checkRegister()) {
wx.navigateTo({
url: "../myActivity/myActivity",
})
}
},
/**
* 监听 TabBar 切换点击
*/
onTabItemTap: function (item) {
// console.log(item)
if (item.index == 3) {
// this.setData({
// tabIn: true,
// })
// let that = this
// app.login({
// success: function(token) {
// let mobile = wx.getStorageSync('mobile')
// let nickName = wx.getStorageSync('nickName')
// let avatarUrl = wx.getStorageSync('avatarUrl')
// let userType = wx.getStorageSync('userType')
// if (mobile && nickName && avatarUrl) {
// that.setData({
// mobile: that.toHide(mobile),
// nickName: nickName,
// avatarUrl: avatarUrl,
// type: userType == 1 ? 1 : 0,
// })
// } else {
// wx.navigateTo({
// url: '../login/login',
// })
// }
// }
// })
myAppointment() {
if (this.checkRegister()) {
wx.navigateTo({
url: '../myAppointment/myAppointment',
})
}
},
customerService() {
if (this.checkRegister()) {
wx.navigateTo({
url: "../customerService/customerService",
})
}
},
//我的活动详情
activityDetail(e){
wx.navigateTo({
url: '../activityDetail/activityDetail?enrollid='+e.currentTarget.dataset.enrollid,
......@@ -136,9 +131,11 @@ Page({
//点击前往修改页面
goMyInfo(){
wx.navigateTo({
url: '../myInfo/myInfo',
})
if (this.checkRegister()) {
wx.navigateTo({
url: '../myInfo/myInfo',
})
}
},
// 我的活动
......
......@@ -4,10 +4,11 @@
<view class="mine" wx:if="{{type == 0}}">
<image class="background-image" src="./image/mine.png"></image>
<view class="row align-c">
<view class="mine-avatar">
<view class="mine-avatar" bindtap="checkRegister">
<l-avatar size="112" src="{{avatarUrl}}"/>
</view>
<view class="mine-info col">
<view wx:if="{{isRegister}}" class="mine-info col">
<view class="row align-c">
<text>{{nickName}}</text>
<image src="./image/inform.png" bindtap="goMyInfo"></image>
......@@ -16,6 +17,12 @@
<text>{{mobile}}</text>
</view>
</view>
<view wx:else class="mine-info col">
<view class="row align-c" bindtap="checkRegister">
<text style="color:#333333;font-weight:500;">登录/注册</text>
</view>
</view>
</view>
</view>
......@@ -55,7 +62,7 @@
</view>
<view class="menu">
<l-list url="../myActivity/myActivity" l-content-class="menu-title" l-class="listClass" title="我的活动"></l-list>
<l-list l-content-class="menu-title" l-class="listClass" title="我的活动" bind:lintap="myActivity"></l-list>
<!-- 我的活动 -->
<view class="my-activities" wx:if="{{activityList.length > 0}}">
<view class="my-activities-item" data-enrollid="{{item.enrollId}}" wx:for="{{activityList}}" wx:for-index="index" wx:for-item="item" wx:key="index" bindtap="activityDetail">
......@@ -69,7 +76,7 @@
</view>
<view class="my-activities-item"></view>
</view>
<l-list l-content-class="menu-title" title="我的预约" l-class="listClass" url="../myAppointment/myAppointment"></l-list>
<l-list l-content-class="menu-title" title="我的预约" l-class="listClass" bind:lintap="myAppointment"></l-list>
<!-- 我的预约 -->
<view class="my-activities" wx:if="{{appointmentList.length > 0}}">
<view class="my-activities-item" wx:for="{{appointmentList}}" wx:for-index="index" wx:for-item="item" wx:key="index">
......@@ -86,7 +93,8 @@
</view>
<view class="my-activities-item"></view>
</view>
<l-list l-content-class="menu-title" title="客服中心" l-class="listClass" url="../customerService/customerService"></l-list>
<l-list l-content-class="menu-title" title="客服中心" l-class="listClass" bind:lintap="customerService"></l-list>
</view>
</view>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment