@ -0,0 +1,137 @@ |
|||||||
|
//app.js
|
||||||
|
App({ |
||||||
|
onLaunch: function (e) { |
||||||
|
var that = this; |
||||||
|
//获取设备信息
|
||||||
|
this.setMenuHeight() |
||||||
|
}, |
||||||
|
onShow(e){ |
||||||
|
var query = {}; |
||||||
|
if(e.query.q){ |
||||||
|
//通过扫码进来获取二维码上的参数并存入storage
|
||||||
|
let urlSpread = e.query.q; |
||||||
|
if (urlSpread) { |
||||||
|
if (urlSpread.indexOf('%3F') != -1) { |
||||||
|
// 通过扫桌面二维码进来
|
||||||
|
urlSpread = urlSpread.split("%3F")[1].replace(/%3D/g, ":").replace(/%26/g, ",").split(",").map((item, index) => { |
||||||
|
item = item.split(":"); |
||||||
|
return `"${item[0]}":"${item[1]}"`; |
||||||
|
}).join(","); |
||||||
|
query = JSON.parse("{" + urlSpread + "}"); |
||||||
|
}
|
||||||
|
console.log('query1',query) |
||||||
|
this.globalData.inviterId = query.id |
||||||
|
} |
||||||
|
} else{ |
||||||
|
query = e.query |
||||||
|
console.log('query2',query) |
||||||
|
this.globalData.inviterId = query.id |
||||||
|
}
|
||||||
|
}, |
||||||
|
setMenuHeight(){ |
||||||
|
wx.getSystemInfo({ |
||||||
|
success: res => { |
||||||
|
// console.log(res)
|
||||||
|
this.globalData.navTopHeight = res.statusBarHeight; |
||||||
|
this.globalData.CustomBar = res.statusBarHeight + 45; |
||||||
|
} |
||||||
|
}); |
||||||
|
let menuButtonObj = wx.getMenuButtonBoundingClientRect(); |
||||||
|
this.globalData.menuTop = menuButtonObj.top; |
||||||
|
// console.log(menuButtonObj)
|
||||||
|
this.globalData.menuHeight = menuButtonObj.height; |
||||||
|
this.globalData.navHeight = menuButtonObj.height + (menuButtonObj.top - this.globalData.navTopHeight); |
||||||
|
}, |
||||||
|
getToken(){ |
||||||
|
// console.log('getToken')
|
||||||
|
var tokentime = wx.getStorageSync('tokentime') || '';//过期时间
|
||||||
|
var timestamp = Date.parse(new Date());// 当前时间
|
||||||
|
var expiration = timestamp + 60000 * 60 * 12; //缓存12小时
|
||||||
|
var token = wx.getStorageSync('token') || ''; |
||||||
|
this.login(expiration); |
||||||
|
}, |
||||||
|
login(expiration){ |
||||||
|
wx.login({ |
||||||
|
success: res => { |
||||||
|
// 发送 res.code 到后台换取 openId, sessionKey, unionId
|
||||||
|
// console.log('code:',res.code)
|
||||||
|
this.http('GET','wechat/auth',{code : res.code,spread:0,login_type:0}).then( |
||||||
|
response =>{ |
||||||
|
if(response.data.isSuccess){ |
||||||
|
wx.setStorageSync('token', 'Bearer '+ response.data.data.token); |
||||||
|
wx.setStorageSync('uid', response.data.data.userId); |
||||||
|
wx.setStorageSync('tokentime', expiration); |
||||||
|
} else{ |
||||||
|
wx.showToast({ |
||||||
|
title: response.data.msg, |
||||||
|
icon : 'none' |
||||||
|
}) |
||||||
|
} |
||||||
|
}
|
||||||
|
) |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
getInfo(){ |
||||||
|
|
||||||
|
this.http('get','userinfo').then((res)=>{ |
||||||
|
if(res.data.success){ |
||||||
|
wx.setStorageSync('userInfo',res.data.data) |
||||||
|
var pages = getCurrentPages().pop();//当前页面
|
||||||
|
if (pages.getUser){ |
||||||
|
pages.getUser(); |
||||||
|
} |
||||||
|
} |
||||||
|
}) |
||||||
|
}, |
||||||
|
http(mathods,url, params) { |
||||||
|
var that = this; |
||||||
|
var header = { |
||||||
|
'content-type': 'application/json', |
||||||
|
'Authorization' : wx.getStorageSync('token') || '' |
||||||
|
} |
||||||
|
return new Promise( |
||||||
|
(resolve,reject) => { |
||||||
|
wx.showLoading({ |
||||||
|
title: "正在加载中...", |
||||||
|
}) |
||||||
|
wx.request({ |
||||||
|
url: this.globalData.baseURL + url, //请求地址
|
||||||
|
method: mathods, //请求方法
|
||||||
|
header: header, |
||||||
|
data: params || {}, //请求参数
|
||||||
|
success: res => { |
||||||
|
wx.hideLoading(); |
||||||
|
//判断token是否过期 res.data.code == 40001
|
||||||
|
if(!res.data.isSuccess && res.data.code == 40001){ |
||||||
|
console.log('token过期') |
||||||
|
that.getToken() |
||||||
|
} |
||||||
|
resolve(res); |
||||||
|
//成功执行方法,参数值为res.data,直接将返回的数据传入
|
||||||
|
}, |
||||||
|
fail: function() { |
||||||
|
//请求失败
|
||||||
|
wx.hideLoading(); |
||||||
|
wx.showToast({ |
||||||
|
title: '服务器错误,请稍后再试!', |
||||||
|
icon : 'none' |
||||||
|
}) |
||||||
|
reject(err) |
||||||
|
}, |
||||||
|
}) |
||||||
|
} |
||||||
|
) |
||||||
|
}, |
||||||
|
globalData: { |
||||||
|
// baseURL : 'http://192.168.0.114:8092/api/',
|
||||||
|
baseURL : 'https://www.cyjyyjy.com:8093/api/', |
||||||
|
userInfo: null, |
||||||
|
navHeight : 0, |
||||||
|
navTopHeight: 0, |
||||||
|
menuTop: 0, |
||||||
|
menuHeight: 0, |
||||||
|
CustomBar: 0, |
||||||
|
inviterId: null , //分享码
|
||||||
|
} |
||||||
|
}) |
@ -0,0 +1,20 @@ |
|||||||
|
{ |
||||||
|
"pages":[ |
||||||
|
"pages/user/agreement/index", |
||||||
|
"pages/user/index", |
||||||
|
"pages/user/incomeDetail/index", |
||||||
|
"pages/user/profession/index", |
||||||
|
"pages/index/index", |
||||||
|
"pages/user/completeData/index", |
||||||
|
"pages/user/personalData/index", |
||||||
|
"pages/user/industry/index" |
||||||
|
], |
||||||
|
"window":{ |
||||||
|
"backgroundTextStyle":"light", |
||||||
|
"navigationBarBackgroundColor": "#212226", |
||||||
|
"navigationBarTitleText": "禅易云生态", |
||||||
|
"navigationBarTextStyle":"white" |
||||||
|
}, |
||||||
|
"style": "v2", |
||||||
|
"sitemapLocation": "sitemap.json" |
||||||
|
} |
@ -0,0 +1,95 @@ |
|||||||
|
/**app.wxss**/ |
||||||
|
view, |
||||||
|
scroll-view, |
||||||
|
swiper, |
||||||
|
button, |
||||||
|
input, |
||||||
|
textarea, |
||||||
|
label, |
||||||
|
navigator, |
||||||
|
image { |
||||||
|
-webkit-box-sizing: border-box; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
/* layout */ |
||||||
|
.acea-row-nowrap { |
||||||
|
display: flex; |
||||||
|
/* 辅助类 */ |
||||||
|
} |
||||||
|
.acea-row { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
/* 辅助类 */ |
||||||
|
} |
||||||
|
.acea-row.row-middle,.acea-row-nowrap.row-middle{ |
||||||
|
align-items: center; |
||||||
|
} |
||||||
|
.acea-row.row-top,.acea-row-nowrap.row-top { |
||||||
|
align-items: flex-start; |
||||||
|
} |
||||||
|
.acea-row.row-bottom { |
||||||
|
align-items: flex-end; |
||||||
|
} |
||||||
|
.acea-row.row-center,.acea-row-nowrap.row-center { |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
|
.acea-row.row-right,.acea-row-nowrap.row-right { |
||||||
|
justify-content: flex-end; |
||||||
|
} |
||||||
|
.acea-row.row-left,.acea-row-nowrap.row-left { |
||||||
|
justify-content: flex-start; |
||||||
|
} |
||||||
|
.acea-row.row-between,.acea-row-nowrap.row-between { |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
.acea-row.row-around, .acea-row-nowrap.row-around{ |
||||||
|
justify-content: space-around; |
||||||
|
} |
||||||
|
.acea-row.row-column-around,.acea-row-nowrap.row-column-around { |
||||||
|
flex-direction: column; |
||||||
|
justify-content: space-around; |
||||||
|
} |
||||||
|
.acea-row.row-column { |
||||||
|
flex-direction: column; |
||||||
|
} |
||||||
|
.acea-row.row-column-between,.acea-row-nowrap.row-column-between { |
||||||
|
flex-direction: column; |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
/* 上下左右垂直居中 */ |
||||||
|
.acea-row.row-center-wrapper,.acea-row-nowrap.row-center-wrapper { |
||||||
|
align-items: center; |
||||||
|
justify-content: center; |
||||||
|
} |
||||||
|
/* 上下两边居中对齐 */ |
||||||
|
.acea-row.row-between-wrapper,.acea-row-nowrap.row-between-wrapper { |
||||||
|
align-items: center; |
||||||
|
justify-content: space-between; |
||||||
|
} |
||||||
|
.line1{ |
||||||
|
overflow:hidden; |
||||||
|
text-overflow:ellipsis; |
||||||
|
white-space:nowrap; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
.line2{ |
||||||
|
word-break:break-all; |
||||||
|
display:-webkit-box; |
||||||
|
-webkit-line-clamp:2; |
||||||
|
-webkit-box-orient:vertical; |
||||||
|
overflow:hidden; |
||||||
|
} |
||||||
|
|
||||||
|
.back-btn{ |
||||||
|
width: 36rpx; |
||||||
|
height: 36rpx; |
||||||
|
position: fixed; |
||||||
|
left: 40rpx; |
||||||
|
text-align: center; |
||||||
|
line-height: 36rpx; |
||||||
|
z-index: 99; |
||||||
|
} |
||||||
|
.back-btn image{ |
||||||
|
width: 100%; |
||||||
|
height: 100%; |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
import { link } from '../mixins/link'; |
||||||
|
import { VantComponent } from '../common/component'; |
||||||
|
VantComponent({ |
||||||
|
classes: [ |
||||||
|
'title-class', |
||||||
|
'label-class', |
||||||
|
'value-class', |
||||||
|
'right-icon-class', |
||||||
|
'hover-class', |
||||||
|
], |
||||||
|
mixins: [link], |
||||||
|
props: { |
||||||
|
title: null, |
||||||
|
value: null, |
||||||
|
icon: String, |
||||||
|
size: String, |
||||||
|
label: String, |
||||||
|
center: Boolean, |
||||||
|
isLink: Boolean, |
||||||
|
required: Boolean, |
||||||
|
clickable: Boolean, |
||||||
|
titleWidth: String, |
||||||
|
customStyle: String, |
||||||
|
arrowDirection: String, |
||||||
|
useLabelSlot: Boolean, |
||||||
|
border: { |
||||||
|
type: Boolean, |
||||||
|
value: true, |
||||||
|
}, |
||||||
|
titleStyle: String, |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
onClick(event) { |
||||||
|
this.$emit('click', event.detail); |
||||||
|
this.jumpLink(); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"component": true, |
||||||
|
"usingComponents": { |
||||||
|
"van-icon": "../icon/index" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
<wxs src="../wxs/utils.wxs" module="utils" /> |
||||||
|
<wxs src="./index.wxs" module="computed" /> |
||||||
|
|
||||||
|
<view |
||||||
|
class="custom-class {{ utils.bem('cell', [size, { center, required, borderless: !border, clickable: isLink || clickable }]) }}" |
||||||
|
hover-class="van-cell--hover hover-class" |
||||||
|
hover-stay-time="70" |
||||||
|
style="{{ customStyle }}" |
||||||
|
bind:tap="onClick" |
||||||
|
> |
||||||
|
<van-icon |
||||||
|
wx:if="{{ icon }}" |
||||||
|
name="{{ icon }}" |
||||||
|
class="van-cell__left-icon-wrap" |
||||||
|
custom-class="van-cell__left-icon" |
||||||
|
/> |
||||||
|
<slot wx:else name="icon" /> |
||||||
|
|
||||||
|
<view |
||||||
|
style="{{ computed.titleStyle({ titleWidth, titleStyle }) }}" |
||||||
|
class="van-cell__title title-class" |
||||||
|
> |
||||||
|
|
||||||
|
<block wx:if="{{ title }}">{{ title }}</block> |
||||||
|
<slot wx:else name="title" /> |
||||||
|
|
||||||
|
<view wx:if="{{ label || useLabelSlot }}" class="van-cell__label label-class"> |
||||||
|
<slot wx:if="{{ useLabelSlot }}" name="label" /> |
||||||
|
<block wx:elif="{{ label }}">{{ label }}</block> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
|
||||||
|
<view class="van-cell__value value-class"> |
||||||
|
<block wx:if="{{ value || value === 0 }}">{{ value }}</block> |
||||||
|
<slot wx:else /> |
||||||
|
</view> |
||||||
|
|
||||||
|
<van-icon |
||||||
|
wx:if="{{ isLink }}" |
||||||
|
name="{{ arrowDirection ? 'arrow' + '-' + arrowDirection : 'arrow' }}" |
||||||
|
class="van-cell__right-icon-wrap right-icon-class" |
||||||
|
custom-class="van-cell__right-icon" |
||||||
|
/> |
||||||
|
<slot wx:else name="right-icon" /> |
||||||
|
|
||||||
|
<slot name="extra" /> |
||||||
|
</view> |
@ -0,0 +1,17 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
var style = require('../wxs/style.wxs'); |
||||||
|
var addUnit = require('../wxs/add-unit.wxs'); |
||||||
|
|
||||||
|
function titleStyle(data) { |
||||||
|
return style([ |
||||||
|
{ |
||||||
|
'max-width': addUnit(data.titleWidth), |
||||||
|
'min-width': addUnit(data.titleWidth), |
||||||
|
}, |
||||||
|
data.titleStyle, |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
titleStyle: titleStyle, |
||||||
|
}; |
@ -0,0 +1 @@ |
|||||||
|
@import '../common/index.wxss';.van-cell{position:relative;display:-webkit-flex;display:flex;box-sizing:border-box;width:100%;padding:10px 16px;padding:var(--cell-vertical-padding,10px) var(--cell-horizontal-padding,16px);font-size:14px;font-size:var(--cell-font-size,14px);line-height:24px;line-height:var(--cell-line-height,24px);color:#323233;color:var(--cell-text-color,#323233);background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;right:16px;bottom:0;left:16px;border-bottom:1px solid #ebedf0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-cell--borderless:after{display:none}.van-cell-group{background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell__label{margin-top:3px;margin-top:var(--cell-label-margin-top,3px);font-size:12px;font-size:var(--cell-label-font-size,12px);line-height:18px;line-height:var(--cell-label-line-height,18px);color:#969799;color:var(--cell-label-color,#969799)}.van-cell__value{overflow:hidden;text-align:right;vertical-align:middle;color:#969799;color:var(--cell-value-color,#969799)}.van-cell__title,.van-cell__value{-webkit-flex:1;flex:1}.van-cell__title:empty,.van-cell__value:empty{display:none}.van-cell__left-icon-wrap,.van-cell__right-icon-wrap{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;height:24px;height:var(--cell-line-height,24px);font-size:16px;font-size:var(--cell-icon-size,16px)}.van-cell__left-icon-wrap{margin-right:4px;margin-right:var(--padding-base,4px)}.van-cell__right-icon-wrap{margin-left:4px;margin-left:var(--padding-base,4px);color:#969799;color:var(--cell-right-icon-color,#969799)}.van-cell__left-icon{vertical-align:middle}.van-cell__left-icon,.van-cell__right-icon{line-height:24px;line-height:var(--cell-line-height,24px)}.van-cell--clickable.van-cell--hover{background-color:#f2f3f5;background-color:var(--cell-active-color,#f2f3f5)}.van-cell--required{overflow:visible}.van-cell--required:before{position:absolute;content:"*";left:8px;left:var(--padding-xs,8px);font-size:14px;font-size:var(--cell-font-size,14px);color:#ee0a24;color:var(--cell-required-color,#ee0a24)}.van-cell--center{-webkit-align-items:center;align-items:center}.van-cell--large{padding-top:12px;padding-top:var(--cell-large-vertical-padding,12px);padding-bottom:12px;padding-bottom:var(--cell-large-vertical-padding,12px)}.van-cell--large .van-cell__title{font-size:16px;font-size:var(--cell-large-title-font-size,16px)}.van-cell--large .van-cell__value{font-size:16px;font-size:var(--cell-large-value-font-size,16px)}.van-cell--large .van-cell__label{font-size:14px;font-size:var(--cell-large-label-font-size,14px)} |
@ -0,0 +1,6 @@ |
|||||||
|
/// <reference types="miniprogram-api-typings" />
|
||||||
|
export declare function setContentAnimate( |
||||||
|
context: WechatMiniprogram.Component.TrivialInstance, |
||||||
|
expanded: boolean, |
||||||
|
mounted: boolean |
||||||
|
): void; |
@ -0,0 +1,70 @@ |
|||||||
|
import { canIUseAnimate } from '../common/version'; |
||||||
|
import { getRect } from '../common/utils'; |
||||||
|
function useAnimate(context, expanded, mounted, height) { |
||||||
|
const selector = '.van-collapse-item__wrapper'; |
||||||
|
if (expanded) { |
||||||
|
context.animate( |
||||||
|
selector, |
||||||
|
[ |
||||||
|
{ height: 0, ease: 'ease-in-out', offset: 0 }, |
||||||
|
{ height: `${height}px`, ease: 'ease-in-out', offset: 1 }, |
||||||
|
{ height: `auto`, ease: 'ease-in-out', offset: 1 }, |
||||||
|
], |
||||||
|
mounted ? 300 : 0, |
||||||
|
() => { |
||||||
|
context.clearAnimation(selector); |
||||||
|
} |
||||||
|
); |
||||||
|
return; |
||||||
|
} |
||||||
|
context.animate( |
||||||
|
selector, |
||||||
|
[ |
||||||
|
{ height: `${height}px`, ease: 'ease-in-out', offset: 0 }, |
||||||
|
{ height: 0, ease: 'ease-in-out', offset: 1 }, |
||||||
|
], |
||||||
|
300, |
||||||
|
() => { |
||||||
|
context.clearAnimation(selector); |
||||||
|
} |
||||||
|
); |
||||||
|
} |
||||||
|
function useAnimation(context, expanded, mounted, height) { |
||||||
|
const animation = wx.createAnimation({ |
||||||
|
duration: 0, |
||||||
|
timingFunction: 'ease-in-out', |
||||||
|
}); |
||||||
|
if (expanded) { |
||||||
|
if (height === 0) { |
||||||
|
animation.height('auto').top(1).step(); |
||||||
|
} else { |
||||||
|
animation |
||||||
|
.height(height) |
||||||
|
.top(1) |
||||||
|
.step({ |
||||||
|
duration: mounted ? 300 : 1, |
||||||
|
}) |
||||||
|
.height('auto') |
||||||
|
.step(); |
||||||
|
} |
||||||
|
context.setData({ |
||||||
|
animation: animation.export(), |
||||||
|
}); |
||||||
|
return; |
||||||
|
} |
||||||
|
animation.height(height).top(0).step({ duration: 1 }).height(0).step({ |
||||||
|
duration: 300, |
||||||
|
}); |
||||||
|
context.setData({ |
||||||
|
animation: animation.export(), |
||||||
|
}); |
||||||
|
} |
||||||
|
export function setContentAnimate(context, expanded, mounted) { |
||||||
|
getRect(context, '.van-collapse-item__content') |
||||||
|
.then((rect) => rect.height) |
||||||
|
.then((height) => { |
||||||
|
canIUseAnimate() |
||||||
|
? useAnimate(context, expanded, mounted, height) |
||||||
|
: useAnimation(context, expanded, mounted, height); |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,59 @@ |
|||||||
|
import { VantComponent } from '../common/component'; |
||||||
|
import { useParent } from '../common/relation'; |
||||||
|
import { setContentAnimate } from './animate'; |
||||||
|
VantComponent({ |
||||||
|
classes: ['title-class', 'content-class'], |
||||||
|
relation: useParent('collapse'), |
||||||
|
props: { |
||||||
|
name: null, |
||||||
|
title: null, |
||||||
|
value: null, |
||||||
|
icon: String, |
||||||
|
label: String, |
||||||
|
disabled: Boolean, |
||||||
|
clickable: Boolean, |
||||||
|
border: { |
||||||
|
type: Boolean, |
||||||
|
value: true, |
||||||
|
}, |
||||||
|
isLink: { |
||||||
|
type: Boolean, |
||||||
|
value: true, |
||||||
|
}, |
||||||
|
}, |
||||||
|
data: { |
||||||
|
expanded: false, |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
this.updateExpanded(); |
||||||
|
this.mounted = true; |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
updateExpanded() { |
||||||
|
if (!this.parent) { |
||||||
|
return; |
||||||
|
} |
||||||
|
const { value, accordion } = this.parent.data; |
||||||
|
const { children = [] } = this.parent; |
||||||
|
const { name } = this.data; |
||||||
|
const index = children.indexOf(this); |
||||||
|
const currentName = name == null ? index : name; |
||||||
|
const expanded = accordion |
||||||
|
? value === currentName |
||||||
|
: (value || []).some((name) => name === currentName); |
||||||
|
if (expanded !== this.data.expanded) { |
||||||
|
setContentAnimate(this, expanded, this.mounted); |
||||||
|
} |
||||||
|
this.setData({ index, expanded }); |
||||||
|
}, |
||||||
|
onClick() { |
||||||
|
if (this.data.disabled) { |
||||||
|
return; |
||||||
|
} |
||||||
|
const { name, expanded } = this.data; |
||||||
|
const index = this.parent.children.indexOf(this); |
||||||
|
const currentName = name == null ? index : name; |
||||||
|
this.parent.switch(currentName, !expanded); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"component": true, |
||||||
|
"usingComponents": { |
||||||
|
"van-cell": "../cell/index" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
<wxs src="../wxs/utils.wxs" module="utils" /> |
||||||
|
|
||||||
|
<view class="van-collapse-item custom-class {{ index !== 0 ? 'van-hairline--top' : '' }}"> |
||||||
|
<van-cell |
||||||
|
title="{{ title }}" |
||||||
|
title-class="title-class" |
||||||
|
icon="{{ icon }}" |
||||||
|
value="{{ value }}" |
||||||
|
label="{{ label }}" |
||||||
|
is-link="{{ isLink }}" |
||||||
|
clickable="{{ clickable }}" |
||||||
|
border="{{ border && expanded }}" |
||||||
|
class="{{ utils.bem('collapse-item__title', { disabled, expanded }) }}" |
||||||
|
right-icon-class="van-cell__right-icon" |
||||||
|
custom-class="van-cell" |
||||||
|
hover-class="van-cell--hover" |
||||||
|
bind:click="onClick" |
||||||
|
> |
||||||
|
<slot |
||||||
|
name="title" |
||||||
|
slot="title" |
||||||
|
/> |
||||||
|
<slot |
||||||
|
name="icon" |
||||||
|
slot="icon" |
||||||
|
/> |
||||||
|
<slot name="value" /> |
||||||
|
<slot |
||||||
|
name="right-icon" |
||||||
|
slot="right-icon" |
||||||
|
/> |
||||||
|
</van-cell> |
||||||
|
<view |
||||||
|
class="{{ utils.bem('collapse-item__wrapper') }}" |
||||||
|
style="height: 0;" |
||||||
|
animation="{{ animation }}" |
||||||
|
> |
||||||
|
<view |
||||||
|
class="van-collapse-item__content content-class" |
||||||
|
> |
||||||
|
<slot /> |
||||||
|
</view> |
||||||
|
</view> |
||||||
|
</view> |
@ -0,0 +1 @@ |
|||||||
|
@import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{-webkit-transform:rotate(90deg);transform:rotate(90deg);transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;transition:-webkit-transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s);transition:transform var(--collapse-item-transition-duration,.3s),-webkit-transform var(--collapse-item-transition-duration,.3s)}.van-collapse-item__title--expanded .van-cell__right-icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.van-collapse-item__title--disabled .van-cell,.van-collapse-item__title--disabled .van-cell__right-icon{color:#c8c9cc!important;color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important;background-color:var(--white,#fff)!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__content{padding:15px;padding:var(--collapse-item-content-padding,15px);color:#969799;color:var(--collapse-item-content-text-color,#969799);font-size:13px;font-size:var(--collapse-item-content-font-size,13px);line-height:1.5;line-height:var(--collapse-item-content-line-height,1.5);background-color:#fff;background-color:var(--collapse-item-content-background-color,#fff)} |
@ -0,0 +1,44 @@ |
|||||||
|
import { VantComponent } from '../common/component'; |
||||||
|
import { useChildren } from '../common/relation'; |
||||||
|
VantComponent({ |
||||||
|
relation: useChildren('collapse-item'), |
||||||
|
props: { |
||||||
|
value: { |
||||||
|
type: null, |
||||||
|
observer: 'updateExpanded', |
||||||
|
}, |
||||||
|
accordion: { |
||||||
|
type: Boolean, |
||||||
|
observer: 'updateExpanded', |
||||||
|
}, |
||||||
|
border: { |
||||||
|
type: Boolean, |
||||||
|
value: true, |
||||||
|
}, |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
updateExpanded() { |
||||||
|
this.children.forEach((child) => { |
||||||
|
child.updateExpanded(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
switch(name, expanded) { |
||||||
|
const { accordion, value } = this.data; |
||||||
|
const changeItem = name; |
||||||
|
if (!accordion) { |
||||||
|
name = expanded |
||||||
|
? (value || []).concat(name) |
||||||
|
: (value || []).filter((activeName) => activeName !== name); |
||||||
|
} else { |
||||||
|
name = expanded ? name : ''; |
||||||
|
} |
||||||
|
if (expanded) { |
||||||
|
this.$emit('open', changeItem); |
||||||
|
} else { |
||||||
|
this.$emit('close', changeItem); |
||||||
|
} |
||||||
|
this.$emit('change', name); |
||||||
|
this.$emit('input', name); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1,3 @@ |
|||||||
|
<view class="custom-class van-collapse {{ border ? 'van-hairline--top-bottom' : '' }}"> |
||||||
|
<slot /> |
||||||
|
</view> |
@ -0,0 +1,7 @@ |
|||||||
|
export declare const RED = "#ee0a24"; |
||||||
|
export declare const BLUE = "#1989fa"; |
||||||
|
export declare const WHITE = "#fff"; |
||||||
|
export declare const GREEN = "#07c160"; |
||||||
|
export declare const ORANGE = "#ff976a"; |
||||||
|
export declare const GRAY = "#323233"; |
||||||
|
export declare const GRAY_DARK = "#969799"; |
@ -0,0 +1,7 @@ |
|||||||
|
export const RED = '#ee0a24'; |
||||||
|
export const BLUE = '#1989fa'; |
||||||
|
export const WHITE = '#fff'; |
||||||
|
export const GREEN = '#07c160'; |
||||||
|
export const ORANGE = '#ff976a'; |
||||||
|
export const GRAY = '#323233'; |
||||||
|
export const GRAY_DARK = '#969799'; |
@ -0,0 +1,8 @@ |
|||||||
|
/// <reference types="miniprogram-api-typings" />
|
||||||
|
import { VantComponentOptions } from '../definitions/index'; |
||||||
|
declare function VantComponent< |
||||||
|
Data extends WechatMiniprogram.Component.DataOption, |
||||||
|
Props extends WechatMiniprogram.Component.PropertyOption, |
||||||
|
Methods extends WechatMiniprogram.Component.MethodOption |
||||||
|
>(vantOptions: VantComponentOptions<Data, Props, Methods>): void; |
||||||
|
export { VantComponent }; |
@ -0,0 +1,45 @@ |
|||||||
|
import { basic } from '../mixins/basic'; |
||||||
|
function mapKeys(source, target, map) { |
||||||
|
Object.keys(map).forEach((key) => { |
||||||
|
if (source[key]) { |
||||||
|
target[map[key]] = source[key]; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
function VantComponent(vantOptions) { |
||||||
|
const options = {}; |
||||||
|
mapKeys(vantOptions, options, { |
||||||
|
data: 'data', |
||||||
|
props: 'properties', |
||||||
|
mixins: 'behaviors', |
||||||
|
methods: 'methods', |
||||||
|
beforeCreate: 'created', |
||||||
|
created: 'attached', |
||||||
|
mounted: 'ready', |
||||||
|
destroyed: 'detached', |
||||||
|
classes: 'externalClasses', |
||||||
|
}); |
||||||
|
// add default externalClasses
|
||||||
|
options.externalClasses = options.externalClasses || []; |
||||||
|
options.externalClasses.push('custom-class'); |
||||||
|
// add default behaviors
|
||||||
|
options.behaviors = options.behaviors || []; |
||||||
|
options.behaviors.push(basic); |
||||||
|
// add relations
|
||||||
|
const { relation } = vantOptions; |
||||||
|
if (relation) { |
||||||
|
options.relations = relation.relations; |
||||||
|
options.behaviors.push(relation.mixin); |
||||||
|
} |
||||||
|
// map field to form-field behavior
|
||||||
|
if (vantOptions.field) { |
||||||
|
options.behaviors.push('wx://form-field'); |
||||||
|
} |
||||||
|
// add default options
|
||||||
|
options.options = { |
||||||
|
multipleSlots: true, |
||||||
|
addGlobalClass: true, |
||||||
|
}; |
||||||
|
Component(options); |
||||||
|
} |
||||||
|
export { VantComponent }; |
@ -0,0 +1 @@ |
|||||||
|
.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{display:table;clear:both;content:""}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #ebedf0;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} |
@ -0,0 +1,21 @@ |
|||||||
|
/// <reference types="miniprogram-api-typings" />
|
||||||
|
declare type TrivialInstance = WechatMiniprogram.Component.TrivialInstance; |
||||||
|
export declare function useParent( |
||||||
|
name: string, |
||||||
|
onEffect?: (this: TrivialInstance) => void |
||||||
|
): { |
||||||
|
relations: { |
||||||
|
[x: string]: WechatMiniprogram.Component.RelationOption; |
||||||
|
}; |
||||||
|
mixin: string; |
||||||
|
}; |
||||||
|
export declare function useChildren( |
||||||
|
name: string, |
||||||
|
onEffect?: (this: TrivialInstance, target: TrivialInstance) => void |
||||||
|
): { |
||||||
|
relations: { |
||||||
|
[x: string]: WechatMiniprogram.Component.RelationOption; |
||||||
|
}; |
||||||
|
mixin: string; |
||||||
|
}; |
||||||
|
export {}; |
@ -0,0 +1,64 @@ |
|||||||
|
export function useParent(name, onEffect) { |
||||||
|
const path = `../${name}/index`; |
||||||
|
return { |
||||||
|
relations: { |
||||||
|
[path]: { |
||||||
|
type: 'ancestor', |
||||||
|
linked() { |
||||||
|
onEffect && onEffect.call(this); |
||||||
|
}, |
||||||
|
linkChanged() { |
||||||
|
onEffect && onEffect.call(this); |
||||||
|
}, |
||||||
|
unlinked() { |
||||||
|
onEffect && onEffect.call(this); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
mixin: Behavior({ |
||||||
|
created() { |
||||||
|
Object.defineProperty(this, 'parent', { |
||||||
|
get: () => this.getRelationNodes(path)[0], |
||||||
|
}); |
||||||
|
Object.defineProperty(this, 'index', { |
||||||
|
// @ts-ignore
|
||||||
|
get: () => { |
||||||
|
var _a, _b; |
||||||
|
return (_b = |
||||||
|
(_a = this.parent) === null || _a === void 0 |
||||||
|
? void 0 |
||||||
|
: _a.children) === null || _b === void 0 |
||||||
|
? void 0 |
||||||
|
: _b.indexOf(this); |
||||||
|
}, |
||||||
|
}); |
||||||
|
}, |
||||||
|
}), |
||||||
|
}; |
||||||
|
} |
||||||
|
export function useChildren(name, onEffect) { |
||||||
|
const path = `../${name}/index`; |
||||||
|
return { |
||||||
|
relations: { |
||||||
|
[path]: { |
||||||
|
type: 'descendant', |
||||||
|
linked(target) { |
||||||
|
onEffect && onEffect.call(this, target); |
||||||
|
}, |
||||||
|
linkChanged(target) { |
||||||
|
onEffect && onEffect.call(this, target); |
||||||
|
}, |
||||||
|
unlinked(target) { |
||||||
|
onEffect && onEffect.call(this, target); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
mixin: Behavior({ |
||||||
|
created() { |
||||||
|
Object.defineProperty(this, 'children', { |
||||||
|
get: () => this.getRelationNodes(path) || [], |
||||||
|
}); |
||||||
|
}, |
||||||
|
}), |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1 @@ |
|||||||
|
.van-clearfix:after{display:table;clear:both;content:""} |
@ -0,0 +1 @@ |
|||||||
|
.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3} |
@ -0,0 +1 @@ |
|||||||
|
.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{position:absolute;box-sizing:border-box;-webkit-transform-origin:center;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #ebedf0;-webkit-transform:scale(.5);transform:scale(.5)}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} |
@ -0,0 +1,31 @@ |
|||||||
|
/// <reference types="miniprogram-api-typings" />
|
||||||
|
export { isDef } from './validator'; |
||||||
|
export declare function range(num: number, min: number, max: number): number; |
||||||
|
export declare function nextTick(cb: (...args: any[]) => void): void; |
||||||
|
export declare function getSystemInfoSync(): WechatMiniprogram.SystemInfo; |
||||||
|
export declare function addUnit(value?: string | number): string | undefined; |
||||||
|
export declare function requestAnimationFrame( |
||||||
|
cb: () => void |
||||||
|
): number | WechatMiniprogram.NodesRef; |
||||||
|
export declare function pickExclude(obj: unknown, keys: string[]): {}; |
||||||
|
export declare function getRect( |
||||||
|
context: WechatMiniprogram.Component.TrivialInstance, |
||||||
|
selector: string |
||||||
|
): Promise<WechatMiniprogram.BoundingClientRectCallbackResult>; |
||||||
|
export declare function getAllRect( |
||||||
|
context: WechatMiniprogram.Component.TrivialInstance, |
||||||
|
selector: string |
||||||
|
): Promise<WechatMiniprogram.BoundingClientRectCallbackResult[]>; |
||||||
|
export declare function groupSetData( |
||||||
|
context: WechatMiniprogram.Component.TrivialInstance, |
||||||
|
cb: () => void |
||||||
|
): void; |
||||||
|
export declare function toPromise( |
||||||
|
promiseLike: Promise<unknown> | unknown |
||||||
|
): Promise<unknown>; |
||||||
|
export declare function getCurrentPage<T>(): T & |
||||||
|
WechatMiniprogram.OptionalInterface<WechatMiniprogram.Page.ILifetime> & |
||||||
|
WechatMiniprogram.Page.InstanceProperties & |
||||||
|
WechatMiniprogram.Page.InstanceMethods<WechatMiniprogram.IAnyObject> & |
||||||
|
WechatMiniprogram.Page.Data<WechatMiniprogram.IAnyObject> & |
||||||
|
WechatMiniprogram.IAnyObject; |
@ -0,0 +1,90 @@ |
|||||||
|
import { isDef, isNumber, isPlainObject, isPromise } from './validator'; |
||||||
|
import { canIUseGroupSetData, canIUseNextTick } from './version'; |
||||||
|
export { isDef } from './validator'; |
||||||
|
export function range(num, min, max) { |
||||||
|
return Math.min(Math.max(num, min), max); |
||||||
|
} |
||||||
|
export function nextTick(cb) { |
||||||
|
if (canIUseNextTick()) { |
||||||
|
wx.nextTick(cb); |
||||||
|
} else { |
||||||
|
setTimeout(() => { |
||||||
|
cb(); |
||||||
|
}, 1000 / 30); |
||||||
|
} |
||||||
|
} |
||||||
|
let systemInfo; |
||||||
|
export function getSystemInfoSync() { |
||||||
|
if (systemInfo == null) { |
||||||
|
systemInfo = wx.getSystemInfoSync(); |
||||||
|
} |
||||||
|
return systemInfo; |
||||||
|
} |
||||||
|
export function addUnit(value) { |
||||||
|
if (!isDef(value)) { |
||||||
|
return undefined; |
||||||
|
} |
||||||
|
value = String(value); |
||||||
|
return isNumber(value) ? `${value}px` : value; |
||||||
|
} |
||||||
|
export function requestAnimationFrame(cb) { |
||||||
|
const systemInfo = getSystemInfoSync(); |
||||||
|
if (systemInfo.platform === 'devtools') { |
||||||
|
return setTimeout(() => { |
||||||
|
cb(); |
||||||
|
}, 1000 / 30); |
||||||
|
} |
||||||
|
return wx |
||||||
|
.createSelectorQuery() |
||||||
|
.selectViewport() |
||||||
|
.boundingClientRect() |
||||||
|
.exec(() => { |
||||||
|
cb(); |
||||||
|
}); |
||||||
|
} |
||||||
|
export function pickExclude(obj, keys) { |
||||||
|
if (!isPlainObject(obj)) { |
||||||
|
return {}; |
||||||
|
} |
||||||
|
return Object.keys(obj).reduce((prev, key) => { |
||||||
|
if (!keys.includes(key)) { |
||||||
|
prev[key] = obj[key]; |
||||||
|
} |
||||||
|
return prev; |
||||||
|
}, {}); |
||||||
|
} |
||||||
|
export function getRect(context, selector) { |
||||||
|
return new Promise((resolve) => { |
||||||
|
wx.createSelectorQuery() |
||||||
|
.in(context) |
||||||
|
.select(selector) |
||||||
|
.boundingClientRect() |
||||||
|
.exec((rect = []) => resolve(rect[0])); |
||||||
|
}); |
||||||
|
} |
||||||
|
export function getAllRect(context, selector) { |
||||||
|
return new Promise((resolve) => { |
||||||
|
wx.createSelectorQuery() |
||||||
|
.in(context) |
||||||
|
.selectAll(selector) |
||||||
|
.boundingClientRect() |
||||||
|
.exec((rect = []) => resolve(rect[0])); |
||||||
|
}); |
||||||
|
} |
||||||
|
export function groupSetData(context, cb) { |
||||||
|
if (canIUseGroupSetData()) { |
||||||
|
context.groupSetData(cb); |
||||||
|
} else { |
||||||
|
cb(); |
||||||
|
} |
||||||
|
} |
||||||
|
export function toPromise(promiseLike) { |
||||||
|
if (isPromise(promiseLike)) { |
||||||
|
return promiseLike; |
||||||
|
} |
||||||
|
return Promise.resolve(promiseLike); |
||||||
|
} |
||||||
|
export function getCurrentPage() { |
||||||
|
const pages = getCurrentPages(); |
||||||
|
return pages[pages.length - 1]; |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
export declare function isFunction(val: unknown): val is Function; |
||||||
|
export declare function isPlainObject( |
||||||
|
val: unknown |
||||||
|
): val is Record<string, unknown>; |
||||||
|
export declare function isPromise<T = unknown>(val: unknown): val is Promise<T>; |
||||||
|
export declare function isDef(value: unknown): boolean; |
||||||
|
export declare function isObj(x: unknown): x is Record<string, unknown>; |
||||||
|
export declare function isNumber(value: string): boolean; |
||||||
|
export declare function isBoolean(value: unknown): value is boolean; |
||||||
|
export declare function isImageUrl(url: string): boolean; |
||||||
|
export declare function isVideoUrl(url: string): boolean; |
@ -0,0 +1,31 @@ |
|||||||
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||||
|
export function isFunction(val) { |
||||||
|
return typeof val === 'function'; |
||||||
|
} |
||||||
|
export function isPlainObject(val) { |
||||||
|
return val !== null && typeof val === 'object' && !Array.isArray(val); |
||||||
|
} |
||||||
|
export function isPromise(val) { |
||||||
|
return isPlainObject(val) && isFunction(val.then) && isFunction(val.catch); |
||||||
|
} |
||||||
|
export function isDef(value) { |
||||||
|
return value !== undefined && value !== null; |
||||||
|
} |
||||||
|
export function isObj(x) { |
||||||
|
const type = typeof x; |
||||||
|
return x !== null && (type === 'object' || type === 'function'); |
||||||
|
} |
||||||
|
export function isNumber(value) { |
||||||
|
return /^\d+(\.\d+)?$/.test(value); |
||||||
|
} |
||||||
|
export function isBoolean(value) { |
||||||
|
return typeof value === 'boolean'; |
||||||
|
} |
||||||
|
const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i; |
||||||
|
const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv)/i; |
||||||
|
export function isImageUrl(url) { |
||||||
|
return IMAGE_REGEXP.test(url); |
||||||
|
} |
||||||
|
export function isVideoUrl(url) { |
||||||
|
return VIDEO_REGEXP.test(url); |
||||||
|
} |
@ -0,0 +1,7 @@ |
|||||||
|
export declare function canIUseModel(): boolean; |
||||||
|
export declare function canIUseFormFieldButton(): boolean; |
||||||
|
export declare function canIUseAnimate(): boolean; |
||||||
|
export declare function canIUseGroupSetData(): boolean; |
||||||
|
export declare function canIUseNextTick(): boolean; |
||||||
|
export declare function canIUseCanvas2d(): boolean; |
||||||
|
export declare function canIUseGetUserProfile(): boolean; |
@ -0,0 +1,48 @@ |
|||||||
|
import { getSystemInfoSync } from './utils'; |
||||||
|
function compareVersion(v1, v2) { |
||||||
|
v1 = v1.split('.'); |
||||||
|
v2 = v2.split('.'); |
||||||
|
const len = Math.max(v1.length, v2.length); |
||||||
|
while (v1.length < len) { |
||||||
|
v1.push('0'); |
||||||
|
} |
||||||
|
while (v2.length < len) { |
||||||
|
v2.push('0'); |
||||||
|
} |
||||||
|
for (let i = 0; i < len; i++) { |
||||||
|
const num1 = parseInt(v1[i], 10); |
||||||
|
const num2 = parseInt(v2[i], 10); |
||||||
|
if (num1 > num2) { |
||||||
|
return 1; |
||||||
|
} |
||||||
|
if (num1 < num2) { |
||||||
|
return -1; |
||||||
|
} |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
function gte(version) { |
||||||
|
const system = getSystemInfoSync(); |
||||||
|
return compareVersion(system.SDKVersion, version) >= 0; |
||||||
|
} |
||||||
|
export function canIUseModel() { |
||||||
|
return gte('2.9.3'); |
||||||
|
} |
||||||
|
export function canIUseFormFieldButton() { |
||||||
|
return gte('2.10.3'); |
||||||
|
} |
||||||
|
export function canIUseAnimate() { |
||||||
|
return gte('2.9.0'); |
||||||
|
} |
||||||
|
export function canIUseGroupSetData() { |
||||||
|
return gte('2.4.0'); |
||||||
|
} |
||||||
|
export function canIUseNextTick() { |
||||||
|
return wx.canIUse('nextTick'); |
||||||
|
} |
||||||
|
export function canIUseCanvas2d() { |
||||||
|
return gte('2.9.0'); |
||||||
|
} |
||||||
|
export function canIUseGetUserProfile() { |
||||||
|
return !!wx.getUserProfile; |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
import { VantComponent } from '../common/component'; |
||||||
|
VantComponent({ |
||||||
|
props: { |
||||||
|
dot: Boolean, |
||||||
|
info: null, |
||||||
|
size: null, |
||||||
|
color: String, |
||||||
|
customStyle: String, |
||||||
|
classPrefix: { |
||||||
|
type: String, |
||||||
|
value: 'van-icon', |
||||||
|
}, |
||||||
|
name: String, |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
onClick() { |
||||||
|
this.$emit('click'); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1,6 @@ |
|||||||
|
{ |
||||||
|
"component": true, |
||||||
|
"usingComponents": { |
||||||
|
"van-info": "../info/index" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
<wxs src="./index.wxs" module="computed" /> |
||||||
|
|
||||||
|
<view |
||||||
|
class="{{ computed.rootClass({ classPrefix, name }) }}" |
||||||
|
style="{{ computed.rootStyle({ customStyle, color, size }) }}" |
||||||
|
bindtap="onClick" |
||||||
|
> |
||||||
|
<van-info |
||||||
|
wx:if="{{ info !== null || dot }}" |
||||||
|
dot="{{ dot }}" |
||||||
|
info="{{ info }}" |
||||||
|
custom-class="van-icon__info" |
||||||
|
/> |
||||||
|
<image |
||||||
|
wx:if="{{ computed.isImage(name) }}" |
||||||
|
src="{{ name }}" |
||||||
|
mode="aspectFit" |
||||||
|
class="van-icon__image" |
||||||
|
/> |
||||||
|
</view> |
@ -0,0 +1,39 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
var style = require('../wxs/style.wxs'); |
||||||
|
var addUnit = require('../wxs/add-unit.wxs'); |
||||||
|
|
||||||
|
function isImage(name) { |
||||||
|
return name.indexOf('/') !== -1; |
||||||
|
} |
||||||
|
|
||||||
|
function rootClass(data) { |
||||||
|
var classes = ['custom-class']; |
||||||
|
|
||||||
|
if (data.classPrefix != null) { |
||||||
|
classes.push(data.classPrefix); |
||||||
|
} |
||||||
|
|
||||||
|
if (isImage(data.name)) { |
||||||
|
classes.push('van-icon--image'); |
||||||
|
} else if (data.classPrefix != null) { |
||||||
|
classes.push(data.classPrefix + '-' + data.name); |
||||||
|
} |
||||||
|
|
||||||
|
return classes.join(' '); |
||||||
|
} |
||||||
|
|
||||||
|
function rootStyle(data) { |
||||||
|
return style([ |
||||||
|
{ |
||||||
|
color: data.color, |
||||||
|
'font-size': addUnit(data.size), |
||||||
|
}, |
||||||
|
data.customStyle, |
||||||
|
]); |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
isImage: isImage, |
||||||
|
rootClass: rootClass, |
||||||
|
rootStyle: rootStyle, |
||||||
|
}; |
@ -0,0 +1,8 @@ |
|||||||
|
import { VantComponent } from '../common/component'; |
||||||
|
VantComponent({ |
||||||
|
props: { |
||||||
|
dot: Boolean, |
||||||
|
info: null, |
||||||
|
customStyle: String, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1,7 @@ |
|||||||
|
<wxs src="../wxs/utils.wxs" module="utils" /> |
||||||
|
|
||||||
|
<view |
||||||
|
wx:if="{{ info !== null && info !== '' || dot }}" |
||||||
|
class="van-info {{ utils.bem('info', { dot }) }} custom-class" |
||||||
|
style="{{ customStyle }}" |
||||||
|
>{{ dot ? '' : info }}</view> |
@ -0,0 +1 @@ |
|||||||
|
@import '../common/index.wxss';.van-info{position:absolute;top:0;right:0;display:-webkit-inline-flex;display:inline-flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;white-space:nowrap;-webkit-transform:translate(50%,-50%);transform:translate(50%,-50%);-webkit-transform-origin:100%;transform-origin:100%;height:16px;height:var(--info-size,16px);min-width:16px;min-width:var(--info-size,16px);padding:0 3px;padding:var(--info-padding,0 3px);color:#fff;color:var(--info-color,#fff);font-weight:500;font-weight:var(--info-font-weight,500);font-size:12px;font-size:var(--info-font-size,12px);font-family:-apple-system-font,Helvetica Neue,Arial,sans-serif;font-family:var(--info-font-family,-apple-system-font,Helvetica Neue,Arial,sans-serif);background-color:#ee0a24;background-color:var(--info-background-color,#ee0a24);border:1px solid #fff;border:var(--info-border-width,1px) solid var(--white,#fff);border-radius:16px;border-radius:var(--info-size,16px)}.van-info--dot{min-width:0;border-radius:100%;width:8px;width:var(--info-dot-size,8px);height:8px;height:var(--info-dot-size,8px);background-color:#ee0a24;background-color:var(--info-dot-color,#ee0a24)} |
@ -0,0 +1 @@ |
|||||||
|
export declare const basic: string; |
@ -0,0 +1,11 @@ |
|||||||
|
export const basic = Behavior({ |
||||||
|
methods: { |
||||||
|
$emit(name, detail, options) { |
||||||
|
this.triggerEvent(name, detail, options); |
||||||
|
}, |
||||||
|
set(data) { |
||||||
|
this.setData(data); |
||||||
|
return new Promise((resolve) => wx.nextTick(resolve)); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1 @@ |
|||||||
|
export declare const button: string; |
@ -0,0 +1,41 @@ |
|||||||
|
import { canIUseGetUserProfile } from '../common/version'; |
||||||
|
export const button = Behavior({ |
||||||
|
externalClasses: ['hover-class'], |
||||||
|
properties: { |
||||||
|
id: String, |
||||||
|
lang: String, |
||||||
|
businessId: Number, |
||||||
|
sessionFrom: String, |
||||||
|
sendMessageTitle: String, |
||||||
|
sendMessagePath: String, |
||||||
|
sendMessageImg: String, |
||||||
|
showMessageCard: Boolean, |
||||||
|
appParameter: String, |
||||||
|
ariaLabel: String, |
||||||
|
openType: String, |
||||||
|
getUserProfileDesc: String, |
||||||
|
}, |
||||||
|
data: { |
||||||
|
canIUseGetUserProfile: canIUseGetUserProfile(), |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
onGetUserInfo(event) { |
||||||
|
this.triggerEvent('getuserinfo', event.detail); |
||||||
|
}, |
||||||
|
onContact(event) { |
||||||
|
this.triggerEvent('contact', event.detail); |
||||||
|
}, |
||||||
|
onGetPhoneNumber(event) { |
||||||
|
this.triggerEvent('getphonenumber', event.detail); |
||||||
|
}, |
||||||
|
onError(event) { |
||||||
|
this.triggerEvent('error', event.detail); |
||||||
|
}, |
||||||
|
onLaunchApp(event) { |
||||||
|
this.triggerEvent('launchapp', event.detail); |
||||||
|
}, |
||||||
|
onOpenSetting(event) { |
||||||
|
this.triggerEvent('opensetting', event.detail); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1,24 @@ |
|||||||
|
export const link = Behavior({ |
||||||
|
properties: { |
||||||
|
url: String, |
||||||
|
linkType: { |
||||||
|
type: String, |
||||||
|
value: 'navigateTo', |
||||||
|
}, |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
jumpLink(urlKey = 'url') { |
||||||
|
const url = this.data[urlKey]; |
||||||
|
if (url) { |
||||||
|
if ( |
||||||
|
this.data.linkType === 'navigateTo' && |
||||||
|
getCurrentPages().length > 9 |
||||||
|
) { |
||||||
|
wx.redirectTo({ url }); |
||||||
|
} else { |
||||||
|
wx[this.data.linkType]({ url }); |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1,8 @@ |
|||||||
|
/// <reference types="miniprogram-api-typings" />
|
||||||
|
declare type IPageScrollOption = WechatMiniprogram.Page.IPageScrollOption; |
||||||
|
declare type Scroller = ( |
||||||
|
this: WechatMiniprogram.Component.TrivialInstance, |
||||||
|
event?: IPageScrollOption |
||||||
|
) => void; |
||||||
|
export declare const pageScrollMixin: (scroller: Scroller) => string; |
||||||
|
export {}; |
@ -0,0 +1,33 @@ |
|||||||
|
import { getCurrentPage } from '../common/utils'; |
||||||
|
function onPageScroll(event) { |
||||||
|
const { vanPageScroller = [] } = getCurrentPage(); |
||||||
|
vanPageScroller.forEach((scroller) => { |
||||||
|
if (typeof scroller === 'function') { |
||||||
|
// @ts-ignore
|
||||||
|
scroller(event); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
export const pageScrollMixin = (scroller) => |
||||||
|
Behavior({ |
||||||
|
attached() { |
||||||
|
const page = getCurrentPage(); |
||||||
|
if (Array.isArray(page.vanPageScroller)) { |
||||||
|
page.vanPageScroller.push(scroller.bind(this)); |
||||||
|
} else { |
||||||
|
page.vanPageScroller = |
||||||
|
typeof page.onPageScroll === 'function' |
||||||
|
? [page.onPageScroll.bind(page), scroller.bind(this)] |
||||||
|
: [scroller.bind(this)]; |
||||||
|
} |
||||||
|
page.onPageScroll = onPageScroll; |
||||||
|
}, |
||||||
|
detached() { |
||||||
|
var _a; |
||||||
|
const page = getCurrentPage(); |
||||||
|
page.vanPageScroller = |
||||||
|
((_a = page.vanPageScroller) === null || _a === void 0 |
||||||
|
? void 0 |
||||||
|
: _a.filter((item) => item !== scroller)) || []; |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1 @@ |
|||||||
|
export declare const touch: string; |
@ -0,0 +1,37 @@ |
|||||||
|
// @ts-nocheck
|
||||||
|
const MIN_DISTANCE = 10; |
||||||
|
function getDirection(x, y) { |
||||||
|
if (x > y && x > MIN_DISTANCE) { |
||||||
|
return 'horizontal'; |
||||||
|
} |
||||||
|
if (y > x && y > MIN_DISTANCE) { |
||||||
|
return 'vertical'; |
||||||
|
} |
||||||
|
return ''; |
||||||
|
} |
||||||
|
export const touch = Behavior({ |
||||||
|
methods: { |
||||||
|
resetTouchStatus() { |
||||||
|
this.direction = ''; |
||||||
|
this.deltaX = 0; |
||||||
|
this.deltaY = 0; |
||||||
|
this.offsetX = 0; |
||||||
|
this.offsetY = 0; |
||||||
|
}, |
||||||
|
touchStart(event) { |
||||||
|
this.resetTouchStatus(); |
||||||
|
const touch = event.touches[0]; |
||||||
|
this.startX = touch.clientX; |
||||||
|
this.startY = touch.clientY; |
||||||
|
}, |
||||||
|
touchMove(event) { |
||||||
|
const touch = event.touches[0]; |
||||||
|
this.deltaX = touch.clientX - this.startX; |
||||||
|
this.deltaY = touch.clientY - this.startY; |
||||||
|
this.offsetX = Math.abs(this.deltaX); |
||||||
|
this.offsetY = Math.abs(this.deltaY); |
||||||
|
this.direction = |
||||||
|
this.direction || getDirection(this.offsetX, this.offsetY); |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
@ -0,0 +1 @@ |
|||||||
|
export declare function transition(showDefaultValue: boolean): string; |
@ -0,0 +1,115 @@ |
|||||||
|
// @ts-nocheck
|
||||||
|
import { requestAnimationFrame } from '../common/utils'; |
||||||
|
import { isObj } from '../common/validator'; |
||||||
|
const getClassNames = (name) => ({ |
||||||
|
enter: `van-${name}-enter van-${name}-enter-active enter-class enter-active-class`, |
||||||
|
'enter-to': `van-${name}-enter-to van-${name}-enter-active enter-to-class enter-active-class`, |
||||||
|
leave: `van-${name}-leave van-${name}-leave-active leave-class leave-active-class`, |
||||||
|
'leave-to': `van-${name}-leave-to van-${name}-leave-active leave-to-class leave-active-class`, |
||||||
|
}); |
||||||
|
export function transition(showDefaultValue) { |
||||||
|
return Behavior({ |
||||||
|
properties: { |
||||||
|
customStyle: String, |
||||||
|
// @ts-ignore
|
||||||
|
show: { |
||||||
|
type: Boolean, |
||||||
|
value: showDefaultValue, |
||||||
|
observer: 'observeShow', |
||||||
|
}, |
||||||
|
// @ts-ignore
|
||||||
|
duration: { |
||||||
|
type: null, |
||||||
|
value: 300, |
||||||
|
observer: 'observeDuration', |
||||||
|
}, |
||||||
|
name: { |
||||||
|
type: String, |
||||||
|
value: 'fade', |
||||||
|
}, |
||||||
|
}, |
||||||
|
data: { |
||||||
|
type: '', |
||||||
|
inited: false, |
||||||
|
display: false, |
||||||
|
}, |
||||||
|
ready() { |
||||||
|
if (this.data.show === true) { |
||||||
|
this.observeShow(true, false); |
||||||
|
} |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
observeShow(value, old) { |
||||||
|
if (value === old) { |
||||||
|
return; |
||||||
|
} |
||||||
|
value ? this.enter() : this.leave(); |
||||||
|
}, |
||||||
|
enter() { |
||||||
|
const { duration, name } = this.data; |
||||||
|
const classNames = getClassNames(name); |
||||||
|
const currentDuration = isObj(duration) ? duration.enter : duration; |
||||||
|
this.status = 'enter'; |
||||||
|
this.$emit('before-enter'); |
||||||
|
requestAnimationFrame(() => { |
||||||
|
if (this.status !== 'enter') { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.$emit('enter'); |
||||||
|
this.setData({ |
||||||
|
inited: true, |
||||||
|
display: true, |
||||||
|
classes: classNames.enter, |
||||||
|
currentDuration, |
||||||
|
}); |
||||||
|
requestAnimationFrame(() => { |
||||||
|
if (this.status !== 'enter') { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.transitionEnded = false; |
||||||
|
this.setData({ classes: classNames['enter-to'] }); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}, |
||||||
|
leave() { |
||||||
|
if (!this.data.display) { |
||||||
|
return; |
||||||
|
} |
||||||
|
const { duration, name } = this.data; |
||||||
|
const classNames = getClassNames(name); |
||||||
|
const currentDuration = isObj(duration) ? duration.leave : duration; |
||||||
|
this.status = 'leave'; |
||||||
|
this.$emit('before-leave'); |
||||||
|
requestAnimationFrame(() => { |
||||||
|
if (this.status !== 'leave') { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.$emit('leave'); |
||||||
|
this.setData({ |
||||||
|
classes: classNames.leave, |
||||||
|
currentDuration, |
||||||
|
}); |
||||||
|
requestAnimationFrame(() => { |
||||||
|
if (this.status !== 'leave') { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.transitionEnded = false; |
||||||
|
setTimeout(() => this.onTransitionEnd(), currentDuration); |
||||||
|
this.setData({ classes: classNames['leave-to'] }); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}, |
||||||
|
onTransitionEnd() { |
||||||
|
if (this.transitionEnded) { |
||||||
|
return; |
||||||
|
} |
||||||
|
this.transitionEnded = true; |
||||||
|
this.$emit(`after-${this.status}`); |
||||||
|
const { show, display } = this.data; |
||||||
|
if (!show && display) { |
||||||
|
this.setData({ display: false }); |
||||||
|
} |
||||||
|
}, |
||||||
|
}, |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,12 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
var REGEXP = getRegExp('^-?\d+(\.\d+)?$'); |
||||||
|
|
||||||
|
function addUnit(value) { |
||||||
|
if (value == null) { |
||||||
|
return undefined; |
||||||
|
} |
||||||
|
|
||||||
|
return REGEXP.test('' + value) ? value + 'px' : value; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = addUnit; |
@ -0,0 +1,5 @@ |
|||||||
|
function isArray(array) { |
||||||
|
return array && array.constructor === 'Array'; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports.isArray = isArray; |
@ -0,0 +1,39 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
var array = require('./array.wxs'); |
||||||
|
var object = require('./object.wxs'); |
||||||
|
var PREFIX = 'van-'; |
||||||
|
|
||||||
|
function join(name, mods) { |
||||||
|
name = PREFIX + name; |
||||||
|
mods = mods.map(function(mod) { |
||||||
|
return name + '--' + mod; |
||||||
|
}); |
||||||
|
mods.unshift(name); |
||||||
|
return mods.join(' '); |
||||||
|
} |
||||||
|
|
||||||
|
function traversing(mods, conf) { |
||||||
|
if (!conf) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
if (typeof conf === 'string' || typeof conf === 'number') { |
||||||
|
mods.push(conf); |
||||||
|
} else if (array.isArray(conf)) { |
||||||
|
conf.forEach(function(item) { |
||||||
|
traversing(mods, item); |
||||||
|
}); |
||||||
|
} else if (typeof conf === 'object') { |
||||||
|
object.keys(conf).forEach(function(key) { |
||||||
|
conf[key] && mods.push(key); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function bem(name, conf) { |
||||||
|
var mods = []; |
||||||
|
traversing(mods, conf); |
||||||
|
return join(name, mods); |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = bem; |
@ -0,0 +1,55 @@ |
|||||||
|
/** |
||||||
|
* Simple memoize |
||||||
|
* wxs doesn't support fn.apply, so this memoize only support up to 2 args |
||||||
|
*/ |
||||||
|
/* eslint-disable */ |
||||||
|
|
||||||
|
function isPrimitive(value) { |
||||||
|
var type = typeof value; |
||||||
|
return ( |
||||||
|
type === 'boolean' || |
||||||
|
type === 'number' || |
||||||
|
type === 'string' || |
||||||
|
type === 'undefined' || |
||||||
|
value === null |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
// mock simple fn.call in wxs |
||||||
|
function call(fn, args) { |
||||||
|
if (args.length === 2) { |
||||||
|
return fn(args[0], args[1]); |
||||||
|
} |
||||||
|
|
||||||
|
if (args.length === 1) { |
||||||
|
return fn(args[0]); |
||||||
|
} |
||||||
|
|
||||||
|
return fn(); |
||||||
|
} |
||||||
|
|
||||||
|
function serializer(args) { |
||||||
|
if (args.length === 1 && isPrimitive(args[0])) { |
||||||
|
return args[0]; |
||||||
|
} |
||||||
|
var obj = {}; |
||||||
|
for (var i = 0; i < args.length; i++) { |
||||||
|
obj['key' + i] = args[i]; |
||||||
|
} |
||||||
|
return JSON.stringify(obj); |
||||||
|
} |
||||||
|
|
||||||
|
function memoize(fn) { |
||||||
|
var cache = {}; |
||||||
|
|
||||||
|
return function() { |
||||||
|
var key = serializer(arguments); |
||||||
|
if (cache[key] === undefined) { |
||||||
|
cache[key] = call(fn, arguments); |
||||||
|
} |
||||||
|
|
||||||
|
return cache[key]; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = memoize; |
@ -0,0 +1,13 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
var REGEXP = getRegExp('{|}|"', 'g'); |
||||||
|
|
||||||
|
function keys(obj) { |
||||||
|
return JSON.stringify(obj) |
||||||
|
.replace(REGEXP, '') |
||||||
|
.split(',') |
||||||
|
.map(function(item) { |
||||||
|
return item.split(':')[0]; |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
module.exports.keys = keys; |
@ -0,0 +1,42 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
var object = require('./object.wxs'); |
||||||
|
var array = require('./array.wxs'); |
||||||
|
|
||||||
|
function kebabCase(word) { |
||||||
|
var newWord = word |
||||||
|
.replace(getRegExp("[A-Z]", 'g'), function (i) { |
||||||
|
return '-' + i; |
||||||
|
}) |
||||||
|
.toLowerCase() |
||||||
|
|
||||||
|
return newWord; |
||||||
|
} |
||||||
|
|
||||||
|
function style(styles) { |
||||||
|
if (array.isArray(styles)) { |
||||||
|
return styles |
||||||
|
.filter(function (item) { |
||||||
|
return item != null && item !== ''; |
||||||
|
}) |
||||||
|
.map(function (item) { |
||||||
|
return style(item); |
||||||
|
}) |
||||||
|
.join(';'); |
||||||
|
} |
||||||
|
|
||||||
|
if ('Object' === styles.constructor) { |
||||||
|
return object |
||||||
|
.keys(styles) |
||||||
|
.filter(function (key) { |
||||||
|
return styles[key] != null && styles[key] !== ''; |
||||||
|
}) |
||||||
|
.map(function (key) { |
||||||
|
return [kebabCase(key), [styles[key]]].join(':'); |
||||||
|
}) |
||||||
|
.join(';'); |
||||||
|
} |
||||||
|
|
||||||
|
return styles; |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = style; |
@ -0,0 +1,10 @@ |
|||||||
|
/* eslint-disable */ |
||||||
|
var bem = require('./bem.wxs'); |
||||||
|
var memoize = require('./memoize.wxs'); |
||||||
|
var addUnit = require('./add-unit.wxs'); |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
bem: memoize(bem), |
||||||
|
memoize: memoize, |
||||||
|
addUnit: addUnit |
||||||
|
}; |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 193 B |
After Width: | Height: | Size: 228 B |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 34 KiB |