This commit is contained in:
pplokijuhyg 2019-12-24 15:02:17 +08:00
commit 68a7aea72c
365 changed files with 9339 additions and 9254 deletions

76
app.js
View File

@ -1,39 +1,39 @@
//app.js
App({
onLaunch: function () {
// 展示本地存储能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
// 获取用户信息
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
}
}
})
},
globalData: {
userInfo: null
}
//app.js
App({
onLaunch: function () {
// 展示本地存储能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
// 获取用户信息
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
}
}
})
},
globalData: {
userInfo: null
}
})

View File

@ -21,6 +21,9 @@
color: #999999;
font-size: 28rpx;
}
.shurupla1{
color: #333333;
}
.arrow {
width: 14rpx;
height: 25rpx;

View File

@ -1,11 +1,11 @@
<view class="shuru">
<view class="left">{{left}}</view>
<view class="right"wx:if="{{ifarrow}}" bindtap="choose">
<text class="shurupla">{{right}}</text>
<view class="arrow"></view>
</view>
<view class="right" wx:else>
<input type="text" placeholder-class="shurupla" class="shuru1" placeholder="{{right}}" value="" bindinput="get" no="0" data-left="{{left}}"/>
</view>
<view class="shuru">
<view class="left">{{left}}</view>
<view class="right"wx:if="{{ifarrow}}" bindtap="choose">
<text class="shurupla1">{{right}}</text>
<view class="arrow"></view>
</view>
<view class="right" wx:else>
<input type="text" placeholder-class="shurupla" class="shuru1" placeholder="{{right}}" value="" bindinput="get" no="0" data-left="{{left}}"/>
</view>
</view>

View File

@ -1,37 +1 @@
.shuru {
width: 670rpx;
height: 100rpx;
border-bottom: 2rpx solid #E8E8E8;
margin: 0 auto;
display: flex;
justify-content: space-between;
line-height: 100rpx;
font-size: 28rpx;
}
.shuru .left {
color: #333333;
}
.shuru .right {
margin: auto 0;
display: flex;
}
.shuru .right .shuru1 {
width: 280rpx;
text-align: right;
}
.shuru .right .shurupla {
color: #999999;
font-size: 28rpx;
}
.shuru .right .arrow {
width: 14rpx;
height: 25rpx;
background-color: #999999;
margin: auto 0;
margin-left: 27rpx;
}
.shuru{width:670rpx;height:100rpx;border-bottom:2rpx solid #E8E8E8;margin:0 auto;display:flex;justify-content:space-between;line-height:100rpx;font-size:28rpx}.shuru .left{color:#333333}.shuru .right{margin:auto 0;display:flex}.shuru .right .shuru1{width:280rpx;text-align:right}.shuru .right .shurupla{color:#999999;font-size:28rpx}.shuru .right .shurupla1{color:#333333}.shuru .right .arrow{width:14rpx;height:25rpx;background-color:#999999;margin:auto 0;margin-left:27rpx}

View File

@ -1 +1 @@
.list{padding-left:20rpx;width:572rpx;box-sizing:border-box;height:100vh}.list .commodity{width:552rpx;display:flex;align-items:center}.list .commodity .content{width:552rpx;height:100%;display:flex;align-items:center;border-bottom:2rpx solid #eaeaea;padding:30rpx 0}.list .commodity .content .imgthumb{width:105rpx;height:105rpx;margin-left:40rpx;background-color:#333}.list .commodity .content .introduce{width:336rpx;margin-left:40rpx;display:flex;flex-direction:column}.list .commodity .content .introduce .towline{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.list .commodity .content .introduce>text{font-size:22rpx;color:#333;margin-bottom:22rpx}.list .commodity .content .introduce>view{display:flex;align-items:center;justify-content:space-between}.list .commodity .content .introduce>view>text:first-child{font-size:30rpx;color:#dec499}.list .commodity .content .introduce>view>text:last-child{font-size:22rpx;color:#999}
.list{padding-left:20rpx;width:572rpx;box-sizing:border-box;height:100vh}.list .commodity{width:552rpx;display:flex;align-items:center}.list .commodity .content{width:552rpx;height:100%;display:flex;align-items:center;border-bottom:2rpx solid #eaeaea;padding:30rpx 0}.list .commodity .content .imgthumb{width:105rpx;height:105rpx;margin-left:40rpx;background-color:#333}.list .commodity .content .introduce{width:336rpx;margin-left:40rpx;display:flex;flex-direction:column}.list .commodity .content .introduce .towline{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.list .commodity .content .introduce>text{font-size:22rpx;color:#333;margin-bottom:22rpx}.list .commodity .content .introduce>view{display:flex;align-items:center;justify-content:space-between}.list .commodity .content .introduce>view>text:first-child{font-size:30rpx;color:#dec499}.list .commodity .content .introduce>view>text:last-child{font-size:22rpx;color:#999}

View File

@ -1 +1 @@
.navigation{width:188rpx;border-right:2rpx solid #eaeaea;max-height:100vh}.navigation view{height:97rpx;font-size:28rpx;color:#333;border-bottom:2rpx solid #eaeaea;line-height:97rpx;font-weight:bold;text-align:center;box-sizing:border-box}.navigation .on{border-left:5rpx solid #56CC84;color:#56CC84}
.navigation{width:188rpx;border-right:2rpx solid #eaeaea;max-height:100vh}.navigation view{height:97rpx;font-size:28rpx;color:#333;border-bottom:2rpx solid #eaeaea;line-height:97rpx;font-weight:bold;text-align:center;box-sizing:border-box}.navigation .on{border-left:5rpx solid #56CC84;color:#56CC84}

View File

@ -1 +1 @@
.commodity{width:623rpx;height:143rpx;margin-top:32rpx;display:flex;align-items:center}.commodity .content{width:614rpx;height:100%;display:flex;align-items:center;box-shadow:0 0 24rpx 0 rgba(227,227,227,0.4)}.commodity .content .imgthumb{width:105rpx;height:105rpx;margin-left:40rpx;background-color:#333}.commodity .content .introduce{width:410rpx;margin-left:40rpx;display:flex;flex-direction:column}.commodity .content .introduce>text{font-size:26rpx;color:#333;margin-bottom:22rpx;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.commodity .content .introduce>view{display:flex;align-items:center;justify-content:space-between}.commodity .content .introduce>view>text:first-child{font-size:30rpx;color:#dec499}.commodity .content .introduce>view>text:last-child{font-size:22rpx;color:#999}.commodity .decorate{width:9rpx;height:102rpx;background-color:#3fb66e}
.commodity{width:623rpx;height:143rpx;margin-top:32rpx;display:flex;align-items:center}.commodity .content{width:614rpx;height:100%;display:flex;align-items:center;box-shadow:0 0 24rpx 0 rgba(227,227,227,0.4)}.commodity .content .imgthumb{width:105rpx;height:105rpx;margin-left:40rpx;background-color:#333}.commodity .content .introduce{width:410rpx;margin-left:40rpx;display:flex;flex-direction:column}.commodity .content .introduce>text{font-size:26rpx;color:#333;margin-bottom:22rpx;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.commodity .content .introduce>view{display:flex;align-items:center;justify-content:space-between}.commodity .content .introduce>view>text:first-child{font-size:30rpx;color:#dec499}.commodity .content .introduce>view>text:last-child{font-size:22rpx;color:#999}.commodity .decorate{width:9rpx;height:102rpx;background-color:#3fb66e}

View File

@ -1 +1 @@
.list{width:623rpx;margin-top:36rpx}.list .title{font-size:30rpx;color:#333;font-weight:bold;margin-left:32rpx}
.list{width:623rpx;margin-top:36rpx}.list .title{font-size:30rpx;color:#333;font-weight:bold;margin-left:32rpx}

View File

@ -1 +1 @@
.search{width:613rpx;height:76rpx;margin-top:30rpx;box-sizing:border-box;border-radius:15rpx;display:flex;border:1rpx solid #c6c6c6}.search>image{width:42rpx;height:42rpx;background-color:#000;margin-left:40rpx;margin-top:17rpx}.search>input{height:30rpx;width:480rpx;margin-top:20rpx;margin-left:17rpx;font-size:30rpx}
.search{width:613rpx;height:76rpx;margin-top:30rpx;box-sizing:border-box;border-radius:15rpx;display:flex;border:1rpx solid #c6c6c6}.search>image{width:42rpx;height:42rpx;background-color:#000;margin-left:40rpx;margin-top:17rpx}.search>input{height:30rpx;width:480rpx;margin-top:20rpx;margin-left:17rpx;font-size:30rpx}

View File

@ -13,4 +13,4 @@
<!-- <view class="button" catch:tap="cancel">取消订单</view> -->
<view class="button hlight" catch:tap="shouhuo">确认收货</view>
</view>
</view>
</view>

View File

@ -1 +1 @@
.commodity{margin-top:20rpx;background-color:#fff}.commodity .message{padding:35rpx;display:flex;align-items:center;border-bottom:1rpx solid #F2F2F2}.commodity .message .image{width:141rpx;height:150rpx;background-color:#000;margin-left:34rpx}.commodity .message .introduce{margin-left:32rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;width:362rpx}.commodity .message .introduce .title{font-size:28rpx;color:#333}.commodity .message .introduce .count{font-size:24rpx;color:#999;display:flex}.commodity .message .introduce .count>view{margin-right:27rpx}.commodity .message .parameter{width:150rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end}.commodity .aggregate{display:flex;box-sizing:border-box;padding:30rpx;justify-content:flex-end;font-size:22rpx;color:#999;height:78rpx;border-bottom:1rpx solid #F2F2F2}.commodity .aggregate>text{color:#333;margin:0 5rpx}.commodity .operation{height:84rpx;display:flex;justify-content:flex-end;padding:0 30rpx;align-items:center}.commodity .operation .button{width:133rpx;height:51rpx;border:2rpx solid #999999;border-radius:26rpx;text-align:center;font-size:22rpx;color:#999999;line-height:51rpx;margin-right:8rpx}.commodity .operation .hlight{border:2rpx solid #47c877;color:#47C877}
.commodity{margin-top:20rpx;background-color:#fff}.commodity .message{padding:35rpx;display:flex;align-items:center;border-bottom:1rpx solid #F2F2F2}.commodity .message .image{width:141rpx;height:150rpx;background-color:#000;margin-left:34rpx}.commodity .message .introduce{margin-left:32rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;width:362rpx}.commodity .message .introduce .title{font-size:28rpx;color:#333}.commodity .message .introduce .count{font-size:24rpx;color:#999;display:flex}.commodity .message .introduce .count>view{margin-right:27rpx}.commodity .message .parameter{width:150rpx;height:120rpx;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end}.commodity .aggregate{display:flex;box-sizing:border-box;padding:30rpx;justify-content:flex-end;font-size:22rpx;color:#999;height:78rpx;border-bottom:1rpx solid #F2F2F2}.commodity .aggregate>text{color:#333;margin:0 5rpx}.commodity .operation{height:84rpx;display:flex;justify-content:flex-end;padding:0 30rpx;align-items:center}.commodity .operation .button{width:133rpx;height:51rpx;border:2rpx solid #999999;border-radius:26rpx;text-align:center;font-size:22rpx;color:#999999;line-height:51rpx;margin-right:8rpx}.commodity .operation .hlight{border:2rpx solid #47c877;color:#47C877}

View File

@ -14,4 +14,4 @@
<van-tab title="售后">
<commodity wx:for="{{AFTERSALE}}" wx:for-index="j" wx:key="{{j}}" data-id="{{item.order_id}}" num="{{item.goods_num}}" cprice="{{item.goods_price}}" freight="{{item.integral_money}}" goods="{{item.goods_list}}"></commodity>
</van-tab>
</van-tabs>
</van-tabs>

View File

@ -1 +1 @@
.content{background-color:#fff;width:750rpx;padding-bottom:33rpx}.content .aggregate{display:flex;box-sizing:border-box;padding:30rpx;justify-content:flex-end;font-size:22rpx;color:#999;height:78rpx;border-bottom:1rpx solid #f2f2f2}.content .aggregate>text{color:#333;margin:0 5rpx}.content .message{display:flex;padding:0 30rpx;justify-content:space-between;font-size:26rpx;color:#333;align-items:center;height:77rpx;border-bottom:1rpx solid #f2f2f2}.content .leave{display:flex;height:77rpx;padding:0 30rpx;align-items:center}
.content{background-color:#fff;width:750rpx;padding-bottom:33rpx}.content .aggregate{display:flex;box-sizing:border-box;padding:30rpx;justify-content:flex-end;font-size:22rpx;color:#999;height:78rpx;border-bottom:1rpx solid #f2f2f2}.content .aggregate>text{color:#333;margin:0 5rpx}.content .message{display:flex;padding:0 30rpx;justify-content:space-between;font-size:26rpx;color:#333;align-items:center;height:77rpx;border-bottom:1rpx solid #f2f2f2}.content .leave{display:flex;height:77rpx;padding:0 30rpx;align-items:center}

View File

@ -1 +1 @@
.logistics{margin-top:20rpx;background-color:#fff}.logistics .title{height:84rpx;font-size:28rpx;color:#333;line-height:84rpx;border-bottom:2rpx solid #e5e5e5;padding-left:29rpx;box-sizing:border-box}.logistics .schedule{width:650rpx;margin-left:50rpx}
.logistics{margin-top:20rpx;background-color:#fff}.logistics .title{height:84rpx;font-size:28rpx;color:#333;line-height:84rpx;border-bottom:2rpx solid #e5e5e5;padding-left:29rpx;box-sizing:border-box}.logistics .schedule{width:650rpx;margin-left:50rpx}

View File

@ -1 +1 @@
.orderchooseaddr{background-color:#fff;width:750rpx;height:148rpx;margin:0 auto;border-bottom:20rpx solid #fbfbfb;display:flex;justify-content:space-between}.orderchooseaddr .left{width:572rpx;height:80rpx}.orderchooseaddr .left .userinfo{color:#333333;font-size:26rpx;text-indent:30rpx;margin-top:41rpx;display:flex;justify-content:space-between}.orderchooseaddr .left .addr{color:#999999;font-size:24rpx;text-indent:30rpx;margin-top:32rpx}.orderchooseaddr .right{width:17rpx;height:30rpx;background-color:#d3d3d3;margin:auto 0;margin-right:19rpx}
.orderchooseaddr{background-color:#fff;width:750rpx;height:148rpx;margin:0 auto;border-bottom:20rpx solid #fbfbfb;display:flex;justify-content:space-between}.orderchooseaddr .left{width:572rpx;height:80rpx}.orderchooseaddr .left .userinfo{color:#333333;font-size:26rpx;text-indent:30rpx;margin-top:41rpx;display:flex;justify-content:space-between}.orderchooseaddr .left .addr{color:#999999;font-size:24rpx;text-indent:30rpx;margin-top:32rpx}.orderchooseaddr .right{width:17rpx;height:30rpx;background-color:#d3d3d3;margin:auto 0;margin-right:19rpx}

View File

@ -1 +1 @@
.payment{width:750rpx;height:98rpx;position:fixed;bottom:0;display:flex;justify-content:space-between;background-color:#fff;align-items:center}.payment .price{font-size:34rpx;margin-left:74rpx}.payment .price .title{color:#333}.payment .price .counts{color:#ff3838}.payment .submit{width:250rpx;height:98rpx;background-color:#47c877;font-size:30rpx;color:#fff;line-height:98rpx;text-align:center}
.payment{width:750rpx;height:98rpx;position:fixed;bottom:0;display:flex;justify-content:space-between;background-color:#fff;align-items:center}.payment .price{font-size:34rpx;margin-left:74rpx}.payment .price .title{color:#333}.payment .price .counts{color:#ff3838}.payment .submit{width:250rpx;height:98rpx;background-color:#47c877;font-size:30rpx;color:#fff;line-height:98rpx;text-align:center}

View File

@ -1 +1 @@
.merchandise{padding:46rpx 32rpx;display:flex;border-bottom:20rpx solid #fbfbfb}.merchandise .image{width:171rpx;height:168rpx;background-color:#000}.merchandise .message{margin-left:24rpx}.merchandise .message .title{font-size:26rpx;color:#333;width:491rpx;margin-bottom:9rpx}.merchandise .message .brief{font-size:22rpx;color:#999;margin-bottom:26rpx}.merchandise .message .price{font-size:28rpx;color:#ff4e6c}
.merchandise{padding:46rpx 32rpx;display:flex;border-bottom:20rpx solid #fbfbfb}.merchandise .image{width:171rpx;height:168rpx;background-color:#000}.merchandise .message{margin-left:24rpx}.merchandise .message .title{font-size:26rpx;color:#333;width:491rpx;margin-bottom:9rpx}.merchandise .message .brief{font-size:22rpx;color:#999;margin-bottom:26rpx}.merchandise .message .price{font-size:28rpx;color:#ff4e6c}

View File

@ -1,66 +1,66 @@
// pages/accomplish/accomplish.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/accomplish/accomplish.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,7 +1,7 @@
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index",
"logistics": "../components/particulars/logistics/index"
}
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index",
"logistics": "../components/particulars/logistics/index"
}
}

View File

@ -1,5 +1,5 @@
<view class="box">
<orderchooseaddr></orderchooseaddr>
<content></content>
<logistics></logistics>
<view class="box">
<orderchooseaddr></orderchooseaddr>
<content></content>
<logistics></logistics>
</view>

View File

@ -1 +1 @@
page{background-color:#fbfbfb}
page{background-color:#fbfbfb}

View File

@ -1,170 +1,282 @@
// pages/addaddress/addaddress.js
import { request } from "../../utils/bin"
Page({
/**
* 页面的初始数据
*/
data: {
canshu: [],
no: 0,
userid:"",
show: false,
arealist:[],
area:["请选择","请选择","请选择"]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
request({
url: "User/getArea",
urldata:{
parent_id:0
},
}).then((res)=>{
console.log(res)
this.setData({
arealist:res.data.result
})
console.log(this.data.arealist)
})
},
bindPickerChange(e) {
console.log(e)
},
showPopup() {
this.setData({ show: true });
},
onClose() {
this.setData({ show: false });
},
onMyEvent(e) {
console.log(e)
for (let i = 0; i < 8; i++) {
if (i == e.currentTarget.dataset.no) {
this.data.canshu[i] = e.detail
}
}
console.log(this.data.canshu)
},
choose(e){
console.log(e.currentTarget.dataset.id,e.currentTarget.dataset.name,e.currentTarget.dataset)
let type=parseInt(e.currentTarget.dataset.type)
request({
url: "User/getArea",
urldata:{
parent_id:e.currentTarget.dataset.id
},
}).then((res)=>{
console.log(res)
if(res.data.result.length){
this.setData({
arealist1:res.data.result
})
// this.data.area[type]=e.currentTarget.dataset.name
console.log(this.data.area,123)
}
// for(let i in this.data.area){
// if(i==type){
// this.data.area[i]=e.currentTarget.dataset.name
// }
// }
this.data.area[0]=e.currentTarget.dataset.name
console.log(this.data.area,this.data.arealist)
})
},
save() {
// wx.navigateTo({
// url: "/pages/chooseaddr/chooseaddr"
// })
request({
url: "User/validateOpenid",
}).then((res)=>{
console.log(res,1452)
this.setData({
userid:res.data.data.user_id
})
request({
url: "User/addAddress",
urldata:{
user_id:this.data.userid
},
method:"POST",
data: {
address: "Wesrdtfyguhijkl",
city: "339",
consignee: "srdtfyguhijokl",
country: 1,
district: "361",
is_default: 0,
mobile: "19953879035",
province: "338",
twon: 0,
user_id: "9",
zipcode: "271103",
}
}).then((res)=>{
console.log(res)
})
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/addaddress/addaddress.js
import { request } from "../../utils/bin"
Page({
/**
* 页面的初始数据
*/
data: {
canshu: [],
no: 0,
userid:"",
show: false,
arealist1:[],
arealist2:[],
arealist3:[],
area:["请选择","请选择","请选择"],
tagDis:[false,true,true],
active:0,
addressCity:"请选择 请选择 请选择",
countrys:[],
countryid:44,
nowcountry:"中国",
areaid:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
request({
url: "User/getArea",
urldata:{
parent_id:0
},
}).then((res)=>{
// console.log(res)
this.setData({
arealist1:res.data.result
})
console.log(this.data.arealist)
})
request({
url: "User/getCountry",
}).then((res)=>{
let country=[]
console.log(res,10000)
for(let i=0;i<res.data.result.length;i++){
country[i]=res.data.result[i].name
}
this.setData({
countrys:country
})
})
},
bindPickerChange(e) {
console.log(e.detail.value)
let nowcountry=this.data.countrys[e.detail.value]
this.setData({
countryid:e.detail.value+1,
nowcountry:nowcountry
})
console.log(nowcountry,"zxc")
},
showPopup() {
this.setData({ show: true });
},
onClose() {
this.setData({ show: false });
},
onMyEvent(e) {
// console.log(e)
for (let i = 0; i < 8; i++) {
if (i == e.currentTarget.dataset.no) {
this.data.canshu[i] = e.detail
}
}
// console.log(this.data.canshu)
},
choose1(e){
// console.log(e.currentTarget.dataset.id,e.currentTarget.dataset.name,e.currentTarget.dataset)
let type=parseInt(e.currentTarget.dataset.type)
request({
url: "User/getArea",
urldata:{
parent_id:e.currentTarget.dataset.id
},
}).then((res)=>{
// console.log(res)
this.setData({
arealist2:res.data.result,
active:1
})
// this.data.area[type]=e.currentTarget.dataset.name
this.setData({
tagDis:[false,false,true]
})
// console.log(this.data.area,123)
this.data.area[0]=e.currentTarget.dataset.name
this.data.areaid[0]=e.currentTarget.dataset.id
// for(let i in this.data.area){
// if(i==type){
// this.data.area[i]=e.currentTarget.dataset.name
// }
// }
this.setData({
area:this.data.area
})
// console.log(this.data.area,this.data.arealist)
})
},
choose2(e){
// console.log(e.currentTarget.dataset.id,e.currentTarget.dataset.name,e.currentTarget.dataset)
let type=parseInt(e.currentTarget.dataset.type)
request({
url: "User/getArea",
urldata:{
parent_id:e.currentTarget.dataset.id
},
}).then((res)=>{
this.setData({
arealist3:res.data.result,
active:2,
tagDis:[false,false,false]
})
// this.data.area[type]=e.currentTarget.dataset.name
// console.log(this.data.area,123)
this.data.area[1]=e.currentTarget.dataset.name
this.data.areaid[1]=e.currentTarget.dataset.id
// for(let i in this.data.area){
// if(i==type){
// this.data.area[i]=e.currentTarget.dataset.name
// }
// }
this.setData({
area:this.data.area
})
// console.log(this.data.area,this.data.arealist)
console.log(this.data.arealist3+"001",this.data.active+"002",this.data.tagDis+"003")
})
},
choose3(e){
// console.log(e.currentTarget.dataset.id,e.currentTarget.dataset.name,e.currentTarget.dataset)
let type=parseInt(e.currentTarget.dataset.type)
request({
url: "User/getArea",
urldata:{
parent_id:e.currentTarget.dataset.id
},
}).then((res)=>{
// console.log(res)
this.setData({
arealist1:res.data.result,
tagDis:[false,false,false],
active:1
})
// this.data.area[type]=e.currentTarget.dataset.name
// console.log(this.data.area,123)
this.data.area[2]=e.currentTarget.dataset.name
this.data.areaid[2]=e.currentTarget.dataset.id
// for(let i in this.data.area){
// if(i==type){
// this.data.area[i]=e.currentTarget.dataset.name
// }
// }}
console.log(93)
this.setData({
area:this.data.area,
show: false,
addressCity:this.data.area[0]+this.data.area[1]+this.data.area[2]
})
console.log(this.data.active,94)
// console.log(this.data.area,this.data.arealist)
})
},
save() {
// wx.navigateTo({
// url: "/pages/chooseaddr/chooseaddr"
// })
console.log(this.data.canshu)
console.log(this.data.countryid)
console.log(this.data.area)
console.log(this.data.areaid)
request({
url: "User/validateOpenid",
}).then((res)=>{
console.log(res,1452)
this.setData({
userid:res.data.data.user_id
})
request({
url: "User/addAddress",
urldata:{
user_id:this.data.userid
},
method:"POST",
data: {
// address: this.data.canshu[4],
city: this.data.areaid[1],
consignee: this.data.canshu[0],
country: this.data.countryid,
address: this.data.canshu[4],
is_default: 0,
mobile: this.data.canshu[1],
province: this.data.areaid[0],
twon: this.data.areaid[2],
user_id:this.data.userid,
zipcode: this.data.canshu[5],
idcard: this.data.canshu[6],
}
}).then((res)=>{
console.log(res)
})
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,42 +1,42 @@
<view class="addaddress">
<shuru left="收件人" right="姓名需和身份证一致" bindmyevent="onMyEvent" data-no="0"></shuru>
<shuru left="手机号" right="请填入常用的手机号码" bindmyevent="onMyEvent" data-no="1"></shuru>
<picker bindchange="bindPickerChange" value="{{item.item_id?item.item_id:0}}" range="{{info.goods.goods_spec_list?info.goods.goods_spec_list:['默认规格']}}">
<shuru left="国家" right="CN中国大陆" ifarrow="{{true}}" data-no="2"></shuru>
</picker>
<!-- <picker bindchange="bindPickerChange" value="{{item.item_id?item.item_id:0}}" range="{{info.goods.goods_spec_list?info.goods.goods_spec_list:['默认规格']}}">
<shuru left="城市信息" right="北京市 北京市 东城区" ifarrow="{{true}}" data-no="3"></shuru>
</picker> -->
<view bindtap="showPopup">
<shuru left="城市信息" right="北京市 北京市 东城区" ifarrow="{{true}}" data-no="3"></shuru>
</view>
<van-popup show="{{ show }}" position="bottom" bind:close="onClose">
<van-tabs class="tab" swipe-threshold="5">
<van-tab title="{{area[0]}}">
<view class="choose">
<view class="item" wx:for="{{arealist}}" bindtap="choose" data-type="0" data-id="{{item.id}}" data-name="{{item.name}}">
{{item.name}}
</view>
</view>
</van-tab>
<van-tab title="{{area[1]}}">
<view class="choose">
<view class="item" wx:for="{{arealist1}}" data-type="1" data-id="{{item.id}}" data-name="{{item.name}}">
{{item.name}}
</view>
</view>
</van-tab>
<van-tab title="{{area[2]}}">
<view class="choose">
<view class="item" wx:for="{{arealist2}}" data-type="2" data-id="{{item.id}}" data-name="{{item.name}}">
{{item.name}}
</view>
</view>
</van-tab>
</van-tabs>
</van-popup>
<shuru left="街道地址" right="街道地址" bindmyevent="onMyEvent" data-no="4"></shuru>
<shuru left="邮政编码" right="邮政编码" bindmyevent="onMyEvent" data-no="5"></shuru>
<shuru left="身份证号" right="可为空,部分商品需要" bindmyevent="onMyEvent" data-no="6"></shuru>
<addradd text="保存地址" class="btn1" bindtap="save"></addradd>
<view class="addaddress">
<shuru left="收件人" right="姓名需和身份证一致" bindmyevent="onMyEvent" data-no="0"></shuru>
<shuru left="手机号" right="请填入常用的手机号码" bindmyevent="onMyEvent" data-no="1"></shuru>
<picker bindchange="bindPickerChange" value="{{index}}" range="{{countrys}}">
<shuru left="国家" right="{{nowcountry}}" ifarrow="{{true}}" data-no="2"></shuru>
</picker>
<!-- <picker bindchange="bindPickerChange" value="{{item.item_id?item.item_id:0}}" range="{{info.goods.goods_spec_list?info.goods.goods_spec_list:['默认规格']}}">
<shuru left="城市信息" right="北京市 北京市 东城区" ifarrow="{{true}}" data-no="3"></shuru>
</picker> -->
<view bindtap="showPopup">
<shuru left="城市信息" right="{{addressCity}}" ifarrow="{{true}}" data-no="3"></shuru>
</view>
<van-popup show="{{ show }}" position="bottom" bind:close="onClose" >
<van-tabs class="tab" swipe-threshold="5" active="{{active}}">
<van-tab title="{{area[0]}}" disabled="{{tagDis[0]}}">
<view class="choose">
<view class="item" wx:for="{{arealist1}}" bindtap="choose1" data-type="0" data-id="{{item.id}}" data-name="{{item.name}}">
{{item.name}}
</view>
</view>
</van-tab>
<van-tab title="{{area[1]}}" disabled="{{tagDis[1]}}" bingtap="choose2">
<view class="choose">
<view class="item" wx:for="{{arealist2}}" bindtap="choose2" data-type="1" data-id="{{item.id}}" data-name="{{item.name}}">
{{item.name}}
</view>
</view>
</van-tab>
<van-tab title="{{area[2]}}" disabled="{{tagDis[2]}}">
<view class="choose">
<view class="item" wx:for="{{arealist3}}" bindtap="choose3" data-type="2" data-id="{{item.id}}" data-name="{{item.name}}">
{{item.name}}
</view>
</view>
</van-tab>
</van-tabs>
</van-popup>
<shuru left="街道地址" right="街道地址" bindmyevent="onMyEvent" data-no="4"></shuru>
<shuru left="邮政编码" right="邮政编码" bindmyevent="onMyEvent" data-no="5"></shuru>
<shuru left="身份证号" right="可为空,部分商品需要" bindmyevent="onMyEvent" data-no="6"></shuru>
<addradd text="保存地址" class="btn1" bindtap="save"></addradd>
</view>

View File

@ -1,159 +1,164 @@
// pages/chooseaddr/chooseaddr.js
import { request } from "../../utils/bin"
Page({
/**
* 页面的初始数据
*/
data: {
addresslist:[],
userid:""
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
request({
url: "User/validateOpenid",
}).then((res)=>{
this.setData({
userid:res.data.data.user_id
})
request({
url: "User/getAddressList",
urldata:{
user_id:this.data.userid
},
}).then((res)=>{
console.log(res)
this.setData({
addresslist:res.data.result
})
})
})
},
add() {
wx.navigateTo({
url: "/pages/addaddress/addaddress"
})
},
// user_id/8/id/215
delete(e){
let t=this
wx.showModal({
title: '确认',
content: '要删除这个地址吗?',
success(){
console.log(e.currentTarget.dataset.id)
request({
url: "User/validateOpenid",
}).then((res)=>{
t.setData({
userid:res.data.data.user_id
})
request({
url: "User/del_address",
urldata:{
user_id:res.data.data.user_id,
id:e.currentTarget.dataset.id
},
}).then((res)=>{
console.log(res)
request({
url: "User/getAddressList",
urldata:{
user_id:t.data.userid
},
}).then((res)=>{
console.log(res)
t.setData({
addresslist:res.data.result
})
})
})
})
}
})
},
setdefault(e){
console.log(e.currentTarget.dataset.id)
request({
url: "User/setDefaultAddress",
urldata:{
user_id:this.data.userid,
address_id:e.currentTarget.dataset.id
},
}).then((res)=>{
console.log(res)
request({
url: "User/getAddressList",
urldata:{
user_id:this.data.userid
},
}).then((res)=>{
console.log(res)
this.setData({
addresslist:res.data.result
})
})
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {
}
// pages/chooseaddr/chooseaddr.js
import { request } from "../../utils/bin"
Page({
/**
* 页面的初始数据
*/
data: {
addresslist:[],
userid:""
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
request({
url: "User/validateOpenid",
}).then((res)=>{
this.setData({
userid:res.data.data.user_id
})
request({
url: "User/getAddressList",
urldata:{
user_id:this.data.userid
},
}).then((res)=>{
console.log(res)
this.setData({
addresslist:res.data.result
})
})
})
},
add() {
wx.navigateTo({
url: "/pages/addaddress/addaddress"
})
},
// user_id/8/id/215
delete(e){
let t=this
wx.showModal({
title: '确认',
content: '要删除这个地址吗?',
success(res){
if (res.confirm) {
console.log('用户点击确定')
request({
url: "User/validateOpenid",
}).then((res)=>{
t.setData({
userid:res.data.data.user_id
})
request({
url: "User/del_address",
urldata:{
user_id:res.data.data.user_id,
id:e.currentTarget.dataset.id
},
}).then((res)=>{
console.log(res)
request({
url: "User/getAddressList",
urldata:{
user_id:t.data.userid
},
}).then((res)=>{
console.log(res)
t.setData({
addresslist:res.data.result
})
})
})
})
} else if (res.cancel) {
console.log('用户点击取消')
console.log("不能动啊")
}
}
})
},
setdefault(e){
console.log(e.currentTarget.dataset.id)
request({
url: "User/setDefaultAddress",
urldata:{
user_id:this.data.userid,
address_id:e.currentTarget.dataset.id
},
}).then((res)=>{
console.log(res)
request({
url: "User/getAddressList",
urldata:{
user_id:this.data.userid
},
}).then((res)=>{
console.log(res)
this.setData({
addresslist:res.data.result
})
})
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {
}
})

View File

@ -1,4 +1,7 @@
.chooseaddress {
.box{
height: 910rpx
}
.addr {
margin-left: 30rpx;
}

View File

@ -1,14 +1,17 @@
<view class="chooseaddress">
<view class="addr" wx:for="{{addresslist}}">
<address binddelete="delete" binddefault="setdefault"data-id="{{item.address_id}}" username="{{item.consignee}}" address="{{item.address}}" tel="{{item.mobile}}" youzheng="{{item.zipcode}}" isdefault="{{item.is_default}}"></address>
</view>
<!-- <view class="addr">
<address></address>
</view>
<view class="addr">
<address></address>
</view> -->
<view class="btn1" bindtap="add">
<addradd text="添加地址"></addradd>
</view>
<view class="chooseaddress">
<scroll-view class="box" scroll-y="{{true}}">
<view class="addr" wx:for="{{addresslist}}">
<address binddelete="delete" binddefault="setdefault"data-id="{{item.address_id}}" username="{{item.consignee}}" address="{{item.address}}" tel="{{item.mobile}}" youzheng="{{item.zipcode}}" isdefault="{{item.is_default}}"></address>
</view>
</scroll-view>
<!-- <view class="addr">
<address></address>
</view>
<view class="addr">
<address></address>
</view> -->
<view class="btn1" bindtap="add">
<addradd text="添加地址"></addradd>
</view>
</view>

View File

@ -1,9 +1 @@
.chooseaddress .addr {
margin-left: 30rpx;
}
.chooseaddress .btn1 {
position: fixed;
bottom: 149rpx;
left: 50rpx;
}
.chooseaddress .box{height:910rpx}.chooseaddress .addr{margin-left:30rpx}.chooseaddress .btn1{position:fixed;bottom:149rpx;left:50rpx}

View File

@ -1 +1 @@
.box{width:750rpx;display:flex;border-top:1rpx solid #eaeaea}
.box{width:750rpx;display:flex;border-top:1rpx solid #eaeaea}

View File

@ -1,22 +1,22 @@
import {request} from "../../utils/bin"
Page({
data:{
list:[]
},
onLoad(){
request({
url:"Goods/hotGoodsList",
data:{
page:0
}
}).then((res)=>{
console.log(res.data.result)
this.setData({
list:res.data.result
})
})
},
searchs(){
console.log(10)
}
})
import {request} from "../../utils/bin"
Page({
data:{
list:[]
},
onLoad(){
request({
url:"Goods/hotGoodsList",
data:{
page:0
}
}).then((res)=>{
console.log(res.data.result)
this.setData({
list:res.data.result
})
})
},
searchs(){
console.log(10)
}
})

View File

@ -1,4 +1,4 @@
<view class="box">
<search bind:tap="searchs"></search>
<list list="{{list}}"></list>
<view class="box">
<search bind:tap="searchs"></search>
<list list="{{list}}"></list>
</view>

View File

@ -1 +1 @@
.box{border-top:#eaeaea solid 1rpx;width:750rpx;display:flex;align-items:center;flex-direction:column}
.box{border-top:#eaeaea solid 1rpx;width:750rpx;display:flex;align-items:center;flex-direction:column}

View File

@ -1,123 +1,123 @@
// pages/login/login.js
import {request} from "../../utils/bin"
Page({
/**
* 页面的初始数据
*/
data: {
},
getinfo(a){
request({
url:"User/validateOpenid"
}).then((res)=>{
if(res.data.code == 400){
request({
url:"User/register",
data:{
country:"",
gender:0,
nick_name:a.detail.userInfo.nickName,
province:"",
city:"",
head_pic:a.detail.userInfo.avatarUrl,
open_id: wx.getStorageSync("openid"),
}
}).then((res)=>{
if(res.data.code == 200){
wx.switchTab({
url:"/pages/index/index"
})
}
})
}else{
wx.switchTab({
url:"/pages/index/index"
})
}
})
},
login(a){
console.log(a)
let i = this
wx.login({
success (res) {
if (res.code) {
//发起网络请求
request({
url:"User/getopenId",
data:{
js_code:res.code
}
}).then((res)=>{
console.log(res)
wx.setStorageSync("openid",res.data.openid)
i.getinfo(a)
wx.switchTab({
url:"/pages/index/index"
})
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/login/login.js
import {request} from "../../utils/bin"
Page({
/**
* 页面的初始数据
*/
data: {
},
getinfo(a){
request({
url:"User/validateOpenid"
}).then((res)=>{
if(res.data.code == 400){
request({
url:"User/register",
data:{
country:"",
gender:0,
nick_name:a.detail.userInfo.nickName,
province:"",
city:"",
head_pic:a.detail.userInfo.avatarUrl,
open_id: wx.getStorageSync("openid"),
}
}).then((res)=>{
if(res.data.code == 200){
wx.switchTab({
url:"/pages/index/index"
})
}
})
}else{
wx.switchTab({
url:"/pages/index/index"
})
}
})
},
login(a){
console.log(a)
let i = this
wx.login({
success (res) {
if (res.code) {
//发起网络请求
request({
url:"User/getopenId",
data:{
js_code:res.code
}
}).then((res)=>{
console.log(res)
wx.setStorageSync("openid",res.data.openid)
i.getinfo(a)
wx.switchTab({
url:"/pages/index/index"
})
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,3 +1,3 @@
{
"usingComponents": {}
{
"usingComponents": {}
}

View File

@ -1,3 +1,3 @@
<view>
<button open-type="getUserInfo" bindgetuserinfo="login">登录</button>
<view>
<button open-type="getUserInfo" bindgetuserinfo="login">登录</button>
</view>

View File

@ -1,66 +1,66 @@
// pages/message/message.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/message/message.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,3 +1,3 @@
{
"usingComponents": {}
{
"usingComponents": {}
}

View File

@ -1,29 +1,29 @@
<view class="box">
<view class="list">
<view class="information">
<text>姓名</text>
<input type="text" />
</view>
<view class="information">
<text>联系电话</text>
<input type="text" />
</view>
<view class="information">
<text>邮箱</text>
<input type="text" />
</view>
<view class="information">
<text>护照奥马</text>
<input type="text" />
</view>
</view>
<view class="upload">
<text class="title">护照正反面照片</text>
<view class="files">
<image></image>
</view>
</view>
<view class="submit">
保存
</view>
<view class="box">
<view class="list">
<view class="information">
<text>姓名</text>
<input type="text" />
</view>
<view class="information">
<text>联系电话</text>
<input type="text" />
</view>
<view class="information">
<text>邮箱</text>
<input type="text" />
</view>
<view class="information">
<text>护照奥马</text>
<input type="text" />
</view>
</view>
<view class="upload">
<text class="title">护照正反面照片</text>
<view class="files">
<image></image>
</view>
</view>
<view class="submit">
保存
</view>
</view>

View File

@ -1 +1 @@
.box{display:flex;flex-direction:column;align-items:center}.box .list{width:650rpx}.box .list .information{margin-top:43rpx;display:flex;flex-direction:column;font-size:28rpx;color:#333;border-bottom:1rpx solid #eaeaea;justify-content:space-between}.box .list .information>input{height:28rpx;font-size:28rpx;color:#333}.box .upload{width:650rpx;margin-top:42rpx}.box .upload .title{font-size:26rpx;color:#999}.box .upload .files{margin-top:42rpx;width:195rpx;height:195rpx;box-shadow:2rpx 3rpx 16rpx 1rpx rgba(51,51,51,0.1)}.box .upload .files>image{width:50rpx;height:41rpx;background-color:#000;margin:77rpx 73rpx}.box .submit{margin-top:295rpx;width:650rpx;height:98rpx;background-color:#47C877;border-radius:49rpx;font-size:36rpx;line-height:98rpx;text-align:center;color:#fff}
.box{display:flex;flex-direction:column;align-items:center}.box .list{width:650rpx}.box .list .information{margin-top:43rpx;display:flex;flex-direction:column;font-size:28rpx;color:#333;border-bottom:1rpx solid #eaeaea;justify-content:space-between}.box .list .information>input{height:28rpx;font-size:28rpx;color:#333}.box .upload{width:650rpx;margin-top:42rpx}.box .upload .title{font-size:26rpx;color:#999}.box .upload .files{margin-top:42rpx;width:195rpx;height:195rpx;box-shadow:2rpx 3rpx 16rpx 1rpx rgba(51,51,51,0.1)}.box .upload .files>image{width:50rpx;height:41rpx;background-color:#000;margin:77rpx 73rpx}.box .submit{margin-top:295rpx;width:650rpx;height:98rpx;background-color:#47C877;border-radius:49rpx;font-size:36rpx;line-height:98rpx;text-align:center;color:#fff}

View File

@ -1,66 +1,66 @@
// pages/order/order.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/order/order.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,3 +1,3 @@
<view class="box">
<tab style="width:100%"></tab>
<view class="box">
<tab style="width:100%"></tab>
</view>

View File

@ -1 +1 @@
.box{display:flex;flex-direction:column;align-items:center;width:100%}page{background-color:#efefef}
.box{display:flex;flex-direction:column;align-items:center;width:100%}page{background-color:#efefef}

View File

@ -1,8 +1,8 @@
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index",
"submit":"../components/particulars/submit/index"
}
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index",
"submit":"../components/particulars/submit/index"
}
}

View File

@ -1 +1 @@
page{background-color:#fbfbfb}
page{background-color:#fbfbfb}

View File

@ -1 +1 @@
.box{display:flex;flex-direction:column;align-items:center}.box .card{width:690rpx;height:313rpx;background-color:#47C877;display:flex;box-sizing:border-box;padding:50rpx;font-size:30rpx;flex-direction:column;color:#fff;margin-top:20rpx}.box .card .user{display:flex;align-items:center}.box .card .user .head{width:80rpx;height:80rpx;margin-right:32rpx;border-radius:50%;background-color:#fff}.box .card .balance{display:flex;flex-direction:column;margin-top:52rpx}.box .list{display:flex;width:690rpx;margin-top:33rpx;flex-direction:column}.box .list .option{width:100%;height:80rpx;margin-bottom:15rpx;box-sizing:border-box;padding:0 30rpx;box-shadow:2rpx 3rpx 16rpx 1rpx rgba(51,51,51,0.1);display:flex;align-items:center;justify-content:space-between}
.box{display:flex;flex-direction:column;align-items:center}.box .card{width:690rpx;height:313rpx;background-color:#47C877;display:flex;box-sizing:border-box;padding:50rpx;font-size:30rpx;flex-direction:column;color:#fff;margin-top:20rpx}.box .card .user{display:flex;align-items:center}.box .card .user .head{width:80rpx;height:80rpx;margin-right:32rpx;border-radius:50%;background-color:#fff}.box .card .balance{display:flex;flex-direction:column;margin-top:52rpx}.box .list{display:flex;width:690rpx;margin-top:33rpx;flex-direction:column}.box .list .option{width:100%;height:80rpx;margin-bottom:15rpx;box-sizing:border-box;padding:0 30rpx;box-shadow:2rpx 3rpx 16rpx 1rpx rgba(51,51,51,0.1);display:flex;align-items:center;justify-content:space-between}

View File

@ -1,6 +1,6 @@
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index"
}
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index"
}
}

View File

@ -1 +1 @@
page{background-color:#fbfbfb}
page{background-color:#fbfbfb}

View File

@ -1,66 +1,66 @@
// pages/sales1/sales1.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/sales1/sales1.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,5 +1,5 @@
{
"usingComponents": {
"merchandise":"../components/seles/merchandises/index"
}
{
"usingComponents": {
"merchandise":"../components/seles/merchandises/index"
}
}

View File

@ -1,16 +1,16 @@
<view class="box">
<merchandise></merchandise>
<view class="fill">
<view class="cause">
<view class="title">退货原因</view>
<view class="select">请选择 ></view>
</view>
<view class="upload">
<view class="title">添加照片(选填)</view>
<view class="img">
</view>
</view>
</view>
<view class="submit">提交</view>
<view class="box">
<merchandise></merchandise>
<view class="fill">
<view class="cause">
<view class="title">退货原因</view>
<view class="select">请选择 ></view>
</view>
<view class="upload">
<view class="title">添加照片(选填)</view>
<view class="img">
</view>
</view>
</view>
<view class="submit">提交</view>
</view>

View File

@ -1 +1 @@
.box{border-top:1rpx solid #eee}.box .fill{padding:42rpx 30rpx;box-sizing:border-box}.box .fill .cause{display:flex;justify-content:space-between;align-items:center;margin-bottom:45rpx}.box .fill .cause .title{font-size:26rpx;color:#333}.box .fill .cause .select{font-size:26rpx;color:#999}.box .fill .upload .title{font-size:26rpx;color:#333;margin-bottom:45rpx}.box .fill .upload .img{width:187rpx;height:187rpx;border:1rpx solid #e5e5e5;border-radius:6rpx}.box .submit{width:650rpx;height:98rpx;border-radius:49rpx;background-color:#47C877;line-height:98rpx;text-align:center;color:#fff;font-size:36rpx;margin-top:67rpx;margin-left:50rpx}
.box{border-top:1rpx solid #eee}.box .fill{padding:42rpx 30rpx;box-sizing:border-box}.box .fill .cause{display:flex;justify-content:space-between;align-items:center;margin-bottom:45rpx}.box .fill .cause .title{font-size:26rpx;color:#333}.box .fill .cause .select{font-size:26rpx;color:#999}.box .fill .upload .title{font-size:26rpx;color:#333;margin-bottom:45rpx}.box .fill .upload .img{width:187rpx;height:187rpx;border:1rpx solid #e5e5e5;border-radius:6rpx}.box .submit{width:650rpx;height:98rpx;border-radius:49rpx;background-color:#47C877;line-height:98rpx;text-align:center;color:#fff;font-size:36rpx;margin-top:67rpx;margin-left:50rpx}

View File

@ -1,66 +1,66 @@
// pages/sales2/sales2.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/sales2/sales2.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,3 +1,3 @@
{
"usingComponents": { "merchandise":"../components/seles/merchandises/index"}
{
"usingComponents": { "merchandise":"../components/seles/merchandises/index"}
}

View File

@ -1,15 +1,15 @@
<view class="box">
<view class="info">
<view class="title">等待商家处理</view>
<view class="msg">请耐心等待</view>
</view>
<merchandise></merchandise>
<view class="info">
<view class="title">退货原因: 拍多/多拍/不想要</view>
<view class="title">申请时间2019-07-21 11:23:21</view>
</view>
<view class="submit">
<view class="button">修改申请</view>
<view class="button">取消申请</view>
</view>
<view class="box">
<view class="info">
<view class="title">等待商家处理</view>
<view class="msg">请耐心等待</view>
</view>
<merchandise></merchandise>
<view class="info">
<view class="title">退货原因: 拍多/多拍/不想要</view>
<view class="title">申请时间2019-07-21 11:23:21</view>
</view>
<view class="submit">
<view class="button">修改申请</view>
<view class="button">取消申请</view>
</view>
</view>

View File

@ -1 +1 @@
.box{border-top:1rpx solid #efefef}.box .info{border-bottom:1rpx solid #efefef;padding:29rpx;box-sizing:border-box}.box .info .title{font-size:26rpx;color:#333;margin-bottom:22rpx}.box .info .msg{font-size:24rpx;color:#999}.box .submit{display:flex;margin-top:36rpx;padding:0 30rpx;justify-content:flex-end}.box .submit .button{width:133rpx;height:51rpx;border:1rpx solid #47C877;border-radius:25rpx;color:#47C877;font-size:22rpx;line-height:51rpx;text-align:center;margin-left:8rpx}
.box{border-top:1rpx solid #efefef}.box .info{border-bottom:1rpx solid #efefef;padding:29rpx;box-sizing:border-box}.box .info .title{font-size:26rpx;color:#333;margin-bottom:22rpx}.box .info .msg{font-size:24rpx;color:#999}.box .submit{display:flex;margin-top:36rpx;padding:0 30rpx;justify-content:flex-end}.box .submit .button{width:133rpx;height:51rpx;border:1rpx solid #47C877;border-radius:25rpx;color:#47C877;font-size:22rpx;line-height:51rpx;text-align:center;margin-left:8rpx}

View File

@ -1,66 +1,66 @@
// pages/search/search.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/search/search.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,6 +1,6 @@
{
"usingComponents": {
"search":"../components/index/search/index",
"hot":"../components/search/hot/index"
}
{
"usingComponents": {
"search":"../components/index/search/index",
"hot":"../components/search/hot/index"
}
}

View File

@ -1,4 +1,4 @@
<view class="box">
<search></search>
<hot></hot>
<view class="box">
<search></search>
<hot></hot>
</view>

View File

@ -1 +1 @@
.box{border-top:#eaeaea solid 1rpx;width:750rpx;display:flex;align-items:center;flex-direction:column}
.box{border-top:#eaeaea solid 1rpx;width:750rpx;display:flex;align-items:center;flex-direction:column}

View File

@ -1,66 +1,66 @@
// pages/status/status.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
// pages/status/status.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -1,6 +1,6 @@
{
"usingComponents": {
"logistics": "../components/particulars/logistics/index",
"message":"../components/order/message/index"
}
{
"usingComponents": {
"logistics": "../components/particulars/logistics/index",
"message":"../components/order/message/index"
}
}

View File

@ -1,7 +1,7 @@
<view class="box">
<view class="reference">
订单编号1234567812345789
<message></message>
</view>
<logistics></logistics>
<view class="box">
<view class="reference">
订单编号1234567812345789
<message></message>
</view>
<logistics></logistics>
</view>

View File

@ -1 +1 @@
.box .reference{font-size:24rpx;color:#999;padding:32rpx 20rpx;background-color:#fff}page{background-color:#fbfbfb}
.box .reference{font-size:24rpx;color:#999;padding:32rpx 20rpx;background-color:#fff}page{background-color:#fbfbfb}

View File

@ -1,5 +1,8 @@
// pages/undetermined/undetermined.js
<<<<<<< HEAD
import bin from "../../utils/bin"
=======
>>>>>>> 260785c6fe0a4997462040f4f8890f1da9a0deb6
Page({
/**

View File

@ -1,6 +1,6 @@
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index"
}
{
"usingComponents": {
"content":"../components/particulars/content/index",
"orderchooseaddr":"../components/particulars/orderchooseaddr/index"
}
}

View File

@ -1 +1 @@
page{background-color:#FBFBFB}
page{background-color:#FBFBFB}

View File

@ -1,7 +1,7 @@
{
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
"rules": [{
"action": "allow",
"page": "*"
}]
{
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
"rules": [{
"action": "allow",
"page": "*"
}]
}

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,59 +1,59 @@
import { VantComponent } from '../common/component';
VantComponent({
props: {
show: Boolean,
title: String,
cancelText: String,
description: String,
round: {
type: Boolean,
value: true
},
zIndex: {
type: Number,
value: 100
},
actions: {
type: Array,
value: []
},
overlay: {
type: Boolean,
value: true
},
closeOnClickOverlay: {
type: Boolean,
value: true
},
closeOnClickAction: {
type: Boolean,
value: true
},
safeAreaInsetBottom: {
type: Boolean,
value: true
}
},
methods: {
onSelect(event) {
const { index } = event.currentTarget.dataset;
const item = this.data.actions[index];
if (item && !item.disabled && !item.loading) {
this.$emit('select', item);
if (this.data.closeOnClickAction) {
this.onClose();
}
}
},
onCancel() {
this.$emit('cancel');
},
onClose() {
this.$emit('close');
},
onClickOverlay() {
this.$emit('click-overlay');
this.onClose();
}
}
});
import { VantComponent } from '../common/component';
VantComponent({
props: {
show: Boolean,
title: String,
cancelText: String,
description: String,
round: {
type: Boolean,
value: true
},
zIndex: {
type: Number,
value: 100
},
actions: {
type: Array,
value: []
},
overlay: {
type: Boolean,
value: true
},
closeOnClickOverlay: {
type: Boolean,
value: true
},
closeOnClickAction: {
type: Boolean,
value: true
},
safeAreaInsetBottom: {
type: Boolean,
value: true
}
},
methods: {
onSelect(event) {
const { index } = event.currentTarget.dataset;
const item = this.data.actions[index];
if (item && !item.disabled && !item.loading) {
this.$emit('select', item);
if (this.data.closeOnClickAction) {
this.onClose();
}
}
},
onCancel() {
this.$emit('cancel');
},
onClose() {
this.$emit('close');
},
onClickOverlay() {
this.$emit('click-overlay');
this.onClose();
}
}
});

View File

@ -1,8 +1,8 @@
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index",
"van-popup": "../popup/index",
"van-loading": "../loading/index"
}
}
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index",
"van-popup": "../popup/index",
"van-loading": "../loading/index"
}
}

View File

@ -1,54 +1,54 @@
<wxs src="../wxs/utils.wxs" module="utils" />
<van-popup
show="{{ show }}"
position="bottom"
round="{{ round }}"
z-index="{{ zIndex }}"
overlay="{{ overlay }}"
custom-class="van-action-sheet"
safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
close-on-click-overlay="{{ closeOnClickOverlay }}"
bind:close="onClickOverlay"
>
<view wx:if="{{ title }}" class="van-hairline--bottom van-action-sheet__header">
{{ title }}
<van-icon
name="close"
custom-class="van-action-sheet__close"
bind:click="onClose"
/>
</view>
<view wx:if="{{ description }}" class="van-action-sheet__description">
{{ description }}
</view>
<view wx:if="{{ actions && actions.length }}">
<!-- button外包一层view防止actions动态变化导致渲染时button被打散 -->
<button
wx:for="{{ actions }}"
wx:key="index"
open-type="{{ item.openType }}"
style="{{ item.color ? 'color: ' + item.color : '' }}"
class="{{ utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }) }} van-hairline--top {{ item.className || '' }}"
hover-class="van-action-sheet__item--hover"
data-index="{{ index }}"
bind:tap="onSelect"
>
<block wx:if="{{ !item.loading }}">
{{ item.name }}
<text wx:if="{{ item.subname }}" class="van-action-sheet__subname" >{{ item.subname }}</text>
</block>
<van-loading wx:else custom-class="van-action-sheet__loading" size="20px" />
</button>
</view>
<slot />
<view
wx:if="{{ cancelText }}"
class="van-action-sheet__cancel"
hover-class="van-action-sheet__cancel--hover"
hover-stay-time="70"
bind:tap="onCancel"
>
{{ cancelText }}
</view>
</van-popup>
<wxs src="../wxs/utils.wxs" module="utils" />
<van-popup
show="{{ show }}"
position="bottom"
round="{{ round }}"
z-index="{{ zIndex }}"
overlay="{{ overlay }}"
custom-class="van-action-sheet"
safe-area-inset-bottom="{{ safeAreaInsetBottom }}"
close-on-click-overlay="{{ closeOnClickOverlay }}"
bind:close="onClickOverlay"
>
<view wx:if="{{ title }}" class="van-hairline--bottom van-action-sheet__header">
{{ title }}
<van-icon
name="close"
custom-class="van-action-sheet__close"
bind:click="onClose"
/>
</view>
<view wx:if="{{ description }}" class="van-action-sheet__description">
{{ description }}
</view>
<view wx:if="{{ actions && actions.length }}">
<!-- button外包一层view防止actions动态变化导致渲染时button被打散 -->
<button
wx:for="{{ actions }}"
wx:key="index"
open-type="{{ item.openType }}"
style="{{ item.color ? 'color: ' + item.color : '' }}"
class="{{ utils.bem('action-sheet__item', { disabled: item.disabled || item.loading }) }} van-hairline--top {{ item.className || '' }}"
hover-class="van-action-sheet__item--hover"
data-index="{{ index }}"
bind:tap="onSelect"
>
<block wx:if="{{ !item.loading }}">
{{ item.name }}
<text wx:if="{{ item.subname }}" class="van-action-sheet__subname" >{{ item.subname }}</text>
</block>
<van-loading wx:else custom-class="van-action-sheet__loading" size="20px" />
</button>
</view>
<slot />
<view
wx:if="{{ cancelText }}"
class="van-action-sheet__cancel"
hover-class="van-action-sheet__cancel--hover"
hover-stay-time="70"
bind:tap="onCancel"
>
{{ cancelText }}
</view>
</van-popup>

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,210 +1,210 @@
import { VantComponent } from '../common/component';
import { pickerProps } from '../picker/shared';
const COLUMNSPLACEHOLDERCODE = '000000';
VantComponent({
classes: ['active-class', 'toolbar-class', 'column-class'],
props: Object.assign(Object.assign({}, pickerProps), { value: String, areaList: {
type: Object,
value: {}
}, columnsNum: {
type: null,
value: 3
}, columnsPlaceholder: {
type: Array,
observer(val) {
this.setData({
typeToColumnsPlaceholder: {
province: val[0] || '',
city: val[1] || '',
county: val[2] || '',
}
});
}
} }),
data: {
columns: [{ values: [] }, { values: [] }, { values: [] }],
displayColumns: [{ values: [] }, { values: [] }, { values: [] }],
typeToColumnsPlaceholder: {}
},
watch: {
value(value) {
this.code = value;
this.setValues();
},
areaList: 'setValues',
columnsNum(value) {
this.setData({
displayColumns: this.data.columns.slice(0, +value)
});
}
},
mounted() {
setTimeout(() => {
this.setValues();
}, 0);
},
methods: {
getPicker() {
if (this.picker == null) {
this.picker = this.selectComponent('.van-area__picker');
}
return this.picker;
},
onCancel(event) {
this.emit('cancel', event.detail);
},
onConfirm(event) {
const { index } = event.detail;
let { value } = event.detail;
value = this.parseOutputValues(value);
this.emit('confirm', { value, index });
},
emit(type, detail) {
detail.values = detail.value;
delete detail.value;
this.$emit(type, detail);
},
// parse output columns data
parseOutputValues(values) {
const { columnsPlaceholder } = this.data;
return values.map((value, index) => {
// save undefined value
if (!value)
return value;
value = JSON.parse(JSON.stringify(value));
if (!value.code || value.name === columnsPlaceholder[index]) {
value.code = '';
value.name = '';
}
return value;
});
},
onChange(event) {
const { index, picker, value } = event.detail;
this.code = value[index].code;
this.setValues().then(() => {
this.$emit('change', {
picker,
values: this.parseOutputValues(picker.getValues()),
index
});
});
},
getConfig(type) {
const { areaList } = this.data;
return (areaList && areaList[`${type}_list`]) || {};
},
getList(type, code) {
const { typeToColumnsPlaceholder } = this.data;
let result = [];
if (type !== 'province' && !code) {
return result;
}
const list = this.getConfig(type);
result = Object.keys(list).map(code => ({
code,
name: list[code]
}));
if (code) {
// oversea code
if (code[0] === '9' && type === 'city') {
code = '9';
}
result = result.filter(item => item.code.indexOf(code) === 0);
}
if (typeToColumnsPlaceholder[type] && result.length) {
// set columns placeholder
const codeFill = type === 'province' ? '' : type === 'city' ? COLUMNSPLACEHOLDERCODE.slice(2, 4) : COLUMNSPLACEHOLDERCODE.slice(4, 6);
result.unshift({
code: `${code}${codeFill}`,
name: typeToColumnsPlaceholder[type]
});
}
return result;
},
getIndex(type, code) {
let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
const list = this.getList(type, code.slice(0, compareNum - 2));
// oversea code
if (code[0] === '9' && type === 'province') {
compareNum = 1;
}
code = code.slice(0, compareNum);
for (let i = 0; i < list.length; i++) {
if (list[i].code.slice(0, compareNum) === code) {
return i;
}
}
return 0;
},
setValues() {
const county = this.getConfig('county');
let { code } = this;
if (!code) {
if (this.data.columnsPlaceholder.length) {
code = COLUMNSPLACEHOLDERCODE;
}
else if (Object.keys(county)[0]) {
code = Object.keys(county)[0];
}
else {
code = '';
}
}
const province = this.getList('province');
const city = this.getList('city', code.slice(0, 2));
const picker = this.getPicker();
if (!picker) {
return;
}
const stack = [];
stack.push(picker.setColumnValues(0, province, false));
stack.push(picker.setColumnValues(1, city, false));
if (city.length && code.slice(2, 4) === '00') {
[{ code }] = city;
}
stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
return Promise.all(stack)
.catch(() => { })
.then(() => picker.setIndexes([
this.getIndex('province', code),
this.getIndex('city', code),
this.getIndex('county', code)
]))
.catch(() => { });
},
getValues() {
const picker = this.getPicker();
return picker ? picker.getValues().filter(value => !!value) : [];
},
getDetail() {
const values = this.getValues();
const area = {
code: '',
country: '',
province: '',
city: '',
county: ''
};
if (!values.length) {
return area;
}
const names = values.map((item) => item.name);
area.code = values[values.length - 1].code;
if (area.code[0] === '9') {
area.country = names[1] || '';
area.province = names[2] || '';
}
else {
area.province = names[0] || '';
area.city = names[1] || '';
area.county = names[2] || '';
}
return area;
},
reset(code) {
this.code = code || '';
return this.setValues();
}
}
});
import { VantComponent } from '../common/component';
import { pickerProps } from '../picker/shared';
const COLUMNSPLACEHOLDERCODE = '000000';
VantComponent({
classes: ['active-class', 'toolbar-class', 'column-class'],
props: Object.assign(Object.assign({}, pickerProps), { value: String, areaList: {
type: Object,
value: {}
}, columnsNum: {
type: null,
value: 3
}, columnsPlaceholder: {
type: Array,
observer(val) {
this.setData({
typeToColumnsPlaceholder: {
province: val[0] || '',
city: val[1] || '',
county: val[2] || '',
}
});
}
} }),
data: {
columns: [{ values: [] }, { values: [] }, { values: [] }],
displayColumns: [{ values: [] }, { values: [] }, { values: [] }],
typeToColumnsPlaceholder: {}
},
watch: {
value(value) {
this.code = value;
this.setValues();
},
areaList: 'setValues',
columnsNum(value) {
this.setData({
displayColumns: this.data.columns.slice(0, +value)
});
}
},
mounted() {
setTimeout(() => {
this.setValues();
}, 0);
},
methods: {
getPicker() {
if (this.picker == null) {
this.picker = this.selectComponent('.van-area__picker');
}
return this.picker;
},
onCancel(event) {
this.emit('cancel', event.detail);
},
onConfirm(event) {
const { index } = event.detail;
let { value } = event.detail;
value = this.parseOutputValues(value);
this.emit('confirm', { value, index });
},
emit(type, detail) {
detail.values = detail.value;
delete detail.value;
this.$emit(type, detail);
},
// parse output columns data
parseOutputValues(values) {
const { columnsPlaceholder } = this.data;
return values.map((value, index) => {
// save undefined value
if (!value)
return value;
value = JSON.parse(JSON.stringify(value));
if (!value.code || value.name === columnsPlaceholder[index]) {
value.code = '';
value.name = '';
}
return value;
});
},
onChange(event) {
const { index, picker, value } = event.detail;
this.code = value[index].code;
this.setValues().then(() => {
this.$emit('change', {
picker,
values: this.parseOutputValues(picker.getValues()),
index
});
});
},
getConfig(type) {
const { areaList } = this.data;
return (areaList && areaList[`${type}_list`]) || {};
},
getList(type, code) {
const { typeToColumnsPlaceholder } = this.data;
let result = [];
if (type !== 'province' && !code) {
return result;
}
const list = this.getConfig(type);
result = Object.keys(list).map(code => ({
code,
name: list[code]
}));
if (code) {
// oversea code
if (code[0] === '9' && type === 'city') {
code = '9';
}
result = result.filter(item => item.code.indexOf(code) === 0);
}
if (typeToColumnsPlaceholder[type] && result.length) {
// set columns placeholder
const codeFill = type === 'province' ? '' : type === 'city' ? COLUMNSPLACEHOLDERCODE.slice(2, 4) : COLUMNSPLACEHOLDERCODE.slice(4, 6);
result.unshift({
code: `${code}${codeFill}`,
name: typeToColumnsPlaceholder[type]
});
}
return result;
},
getIndex(type, code) {
let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
const list = this.getList(type, code.slice(0, compareNum - 2));
// oversea code
if (code[0] === '9' && type === 'province') {
compareNum = 1;
}
code = code.slice(0, compareNum);
for (let i = 0; i < list.length; i++) {
if (list[i].code.slice(0, compareNum) === code) {
return i;
}
}
return 0;
},
setValues() {
const county = this.getConfig('county');
let { code } = this;
if (!code) {
if (this.data.columnsPlaceholder.length) {
code = COLUMNSPLACEHOLDERCODE;
}
else if (Object.keys(county)[0]) {
code = Object.keys(county)[0];
}
else {
code = '';
}
}
const province = this.getList('province');
const city = this.getList('city', code.slice(0, 2));
const picker = this.getPicker();
if (!picker) {
return;
}
const stack = [];
stack.push(picker.setColumnValues(0, province, false));
stack.push(picker.setColumnValues(1, city, false));
if (city.length && code.slice(2, 4) === '00') {
[{ code }] = city;
}
stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
return Promise.all(stack)
.catch(() => { })
.then(() => picker.setIndexes([
this.getIndex('province', code),
this.getIndex('city', code),
this.getIndex('county', code)
]))
.catch(() => { });
},
getValues() {
const picker = this.getPicker();
return picker ? picker.getValues().filter(value => !!value) : [];
},
getDetail() {
const values = this.getValues();
const area = {
code: '',
country: '',
province: '',
city: '',
county: ''
};
if (!values.length) {
return area;
}
const names = values.map((item) => item.name);
area.code = values[values.length - 1].code;
if (area.code[0] === '9') {
area.country = names[1] || '';
area.province = names[2] || '';
}
else {
area.province = names[0] || '';
area.city = names[1] || '';
area.county = names[2] || '';
}
return area;
},
reset(code) {
this.code = code || '';
return this.setValues();
}
}
});

View File

@ -1,6 +1,6 @@
{
"component": true,
"usingComponents": {
"van-picker": "../picker/index"
}
}
{
"component": true,
"usingComponents": {
"van-picker": "../picker/index"
}
}

View File

@ -1,18 +1,18 @@
<van-picker
class="van-area__picker"
active-class="active-class"
toolbar-class="toolbar-class"
column-class="column-class"
show-toolbar
value-key="name"
title="{{ title }}"
loading="{{ loading }}"
columns="{{ displayColumns }}"
item-height="{{ itemHeight }}"
visible-item-count="{{ visibleItemCount }}"
cancel-button-text="{{ cancelButtonText }}"
confirm-button-text="{{ confirmButtonText }}"
bind:change="onChange"
bind:confirm="onConfirm"
bind:cancel="onCancel"
/>
<van-picker
class="van-area__picker"
active-class="active-class"
toolbar-class="toolbar-class"
column-class="column-class"
show-toolbar
value-key="name"
title="{{ title }}"
loading="{{ loading }}"
columns="{{ displayColumns }}"
item-height="{{ itemHeight }}"
visible-item-count="{{ visibleItemCount }}"
cancel-button-text="{{ cancelButtonText }}"
confirm-button-text="{{ confirmButtonText }}"
bind:change="onChange"
bind:confirm="onConfirm"
bind:cancel="onCancel"
/>

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,68 +1,68 @@
import { VantComponent } from '../common/component';
import { button } from '../mixins/button';
import { openType } from '../mixins/open-type';
VantComponent({
mixins: [button, openType],
classes: ['hover-class', 'loading-class'],
data: {
style: ''
},
props: {
icon: String,
plain: Boolean,
block: Boolean,
round: Boolean,
square: Boolean,
loading: Boolean,
hairline: Boolean,
disabled: Boolean,
loadingText: String,
customStyle: String,
loadingType: {
type: String,
value: 'circular'
},
type: {
type: String,
value: 'default'
},
size: {
type: String,
value: 'normal'
},
loadingSize: {
type: String,
value: '20px'
},
color: {
type: String,
observer(color) {
let style = '';
if (color) {
style += `color: ${this.data.plain ? color : 'white'};`;
if (!this.data.plain) {
// Use background instead of backgroundColor to make linear-gradient work
style += `background: ${color};`;
}
// hide border when color is linear-gradient
if (color.indexOf('gradient') !== -1) {
style += 'border: 0;';
}
else {
style += `border-color: ${color};`;
}
}
if (style !== this.data.style) {
this.setData({ style });
}
}
}
},
methods: {
onClick() {
if (!this.data.disabled && !this.data.loading) {
this.$emit('click');
}
}
}
});
import { VantComponent } from '../common/component';
import { button } from '../mixins/button';
import { openType } from '../mixins/open-type';
VantComponent({
mixins: [button, openType],
classes: ['hover-class', 'loading-class'],
data: {
style: ''
},
props: {
icon: String,
plain: Boolean,
block: Boolean,
round: Boolean,
square: Boolean,
loading: Boolean,
hairline: Boolean,
disabled: Boolean,
loadingText: String,
customStyle: String,
loadingType: {
type: String,
value: 'circular'
},
type: {
type: String,
value: 'default'
},
size: {
type: String,
value: 'normal'
},
loadingSize: {
type: String,
value: '20px'
},
color: {
type: String,
observer(color) {
let style = '';
if (color) {
style += `color: ${this.data.plain ? color : 'white'};`;
if (!this.data.plain) {
// Use background instead of backgroundColor to make linear-gradient work
style += `background: ${color};`;
}
// hide border when color is linear-gradient
if (color.indexOf('gradient') !== -1) {
style += 'border: 0;';
}
else {
style += `border-color: ${color};`;
}
}
if (style !== this.data.style) {
this.setData({ style });
}
}
}
},
methods: {
onClick() {
if (!this.data.disabled && !this.data.loading) {
this.$emit('click');
}
}
}
});

View File

@ -1,7 +1,7 @@
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index",
"van-loading": "../loading/index"
}
}
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index",
"van-loading": "../loading/index"
}
}

View File

@ -1,52 +1,52 @@
<wxs src="../wxs/utils.wxs" module="utils" />
<button
id="{{ id }}"
class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}"
hover-class="van-button--active hover-class"
lang="{{ lang }}"
style="{{ style }} {{ customStyle }}"
open-type="{{ openType }}"
business-id="{{ businessId }}"
session-from="{{ sessionFrom }}"
send-message-title="{{ sendMessageTitle }}"
send-message-path="{{ sendMessagePath }}"
send-message-img="{{ sendMessageImg }}"
show-message-card="{{ showMessageCard }}"
app-parameter="{{ appParameter }}"
aria-label="{{ ariaLabel }}"
bindtap="onClick"
bindgetuserinfo="bindGetUserInfo"
bindcontact="bindContact"
bindgetphonenumber="bindGetPhoneNumber"
binderror="bindError"
bindlaunchapp="bindLaunchApp"
bindopensetting="bindOpenSetting"
>
<block wx:if="{{ loading }}">
<van-loading
custom-class="loading-class"
size="{{ loadingSize }}"
type="{{ loadingType }}"
color="{{ type === 'default' ? '#c9c9c9' : 'white' }}"
/>
<view
wx:if="{{ loadingText }}"
class="van-button__loading-text"
>
{{ loadingText }}
</view>
</block>
<block wx:else>
<van-icon
wx:if="{{ icon }}"
size="1.2em"
name="{{ icon }}"
class="van-button__icon"
custom-style="line-height: inherit;"
/>
<view class="van-button__text">
<slot />
</view>
</block>
</button>
<wxs src="../wxs/utils.wxs" module="utils" />
<button
id="{{ id }}"
class="custom-class {{ utils.bem('button', [type, size, { block, round, plain, square, loading, disabled, hairline, unclickable: disabled || loading }]) }} {{ hairline ? 'van-hairline--surround' : '' }}"
hover-class="van-button--active hover-class"
lang="{{ lang }}"
style="{{ style }} {{ customStyle }}"
open-type="{{ openType }}"
business-id="{{ businessId }}"
session-from="{{ sessionFrom }}"
send-message-title="{{ sendMessageTitle }}"
send-message-path="{{ sendMessagePath }}"
send-message-img="{{ sendMessageImg }}"
show-message-card="{{ showMessageCard }}"
app-parameter="{{ appParameter }}"
aria-label="{{ ariaLabel }}"
bindtap="onClick"
bindgetuserinfo="bindGetUserInfo"
bindcontact="bindContact"
bindgetphonenumber="bindGetPhoneNumber"
binderror="bindError"
bindlaunchapp="bindLaunchApp"
bindopensetting="bindOpenSetting"
>
<block wx:if="{{ loading }}">
<van-loading
custom-class="loading-class"
size="{{ loadingSize }}"
type="{{ loadingType }}"
color="{{ type === 'default' ? '#c9c9c9' : 'white' }}"
/>
<view
wx:if="{{ loadingText }}"
class="van-button__loading-text"
>
{{ loadingText }}
</view>
</block>
<block wx:else>
<van-icon
wx:if="{{ icon }}"
size="1.2em"
name="{{ icon }}"
class="van-button__icon"
custom-style="line-height: inherit;"
/>
<view class="van-button__text">
<slot />
</view>
</block>
</button>

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,38 +1,38 @@
import { link } from '../mixins/link';
import { VantComponent } from '../common/component';
VantComponent({
classes: [
'num-class',
'desc-class',
'thumb-class',
'title-class',
'price-class',
'origin-price-class',
],
mixins: [link],
props: {
tag: String,
num: String,
desc: String,
thumb: String,
title: String,
price: String,
centered: Boolean,
lazyLoad: Boolean,
thumbLink: String,
originPrice: String,
thumbMode: {
type: String,
value: 'aspectFit'
},
currency: {
type: String,
value: '¥'
}
},
methods: {
onClickThumb() {
this.jumpLink('thumbLink');
}
}
});
import { link } from '../mixins/link';
import { VantComponent } from '../common/component';
VantComponent({
classes: [
'num-class',
'desc-class',
'thumb-class',
'title-class',
'price-class',
'origin-price-class',
],
mixins: [link],
props: {
tag: String,
num: String,
desc: String,
thumb: String,
title: String,
price: String,
centered: Boolean,
lazyLoad: Boolean,
thumbLink: String,
originPrice: String,
thumbMode: {
type: String,
value: 'aspectFit'
},
currency: {
type: String,
value: '¥'
}
},
methods: {
onClickThumb() {
this.jumpLink('thumbLink');
}
}
});

View File

@ -1,6 +1,6 @@
{
"component": true,
"usingComponents": {
"van-tag": "../tag/index"
}
}
{
"component": true,
"usingComponents": {
"van-tag": "../tag/index"
}
}

View File

@ -1,45 +1,45 @@
<wxs src="../wxs/utils.wxs" module="utils" />
<view class="custom-class van-card">
<view class="{{ utils.bem('card__header', { center: centered }) }}">
<view class="van-card__thumb" bind:tap="onClickThumb">
<image
wx:if="{{ thumb }}"
src="{{ thumb }}"
mode="{{ thumbMode }}"
lazy-load="{{ lazyLoad }}"
class="van-card__img thumb-class"
/>
<slot name="thumb" />
<van-tag
wx:if="{{ tag }}"
mark
type="danger"
custom-class="van-card__tag"
>
{{ tag }}
</van-tag>
</view>
<view class="van-card__content">
<view wx:if="{{ title }}" class="van-card__title title-class">{{ title }}</view>
<slot wx:else name="title" />
<view wx:if="{{ desc }}" class="van-card__desc desc-class">{{ desc }}</view>
<slot wx:else name="desc" />
<slot name="tags" />
<view class="van-card__bottom">
<view wx:if="{{ price || price === 0 }}" class="van-card__price price-class">{{ currency }} {{ price }}</view>
<view wx:if="{{ originPrice || originPrice === 0 }}" class="van-card__origin-price origin-price-class">{{ currency }} {{ originPrice }}</view>
<view wx:if="{{ num }}" class="van-card__num num-class">x {{ num }}</view>
<slot name="bottom" />
</view>
</view>
</view>
<view class="van-card__footer">
<slot name="footer" />
</view>
</view>
<wxs src="../wxs/utils.wxs" module="utils" />
<view class="custom-class van-card">
<view class="{{ utils.bem('card__header', { center: centered }) }}">
<view class="van-card__thumb" bind:tap="onClickThumb">
<image
wx:if="{{ thumb }}"
src="{{ thumb }}"
mode="{{ thumbMode }}"
lazy-load="{{ lazyLoad }}"
class="van-card__img thumb-class"
/>
<slot name="thumb" />
<van-tag
wx:if="{{ tag }}"
mark
type="danger"
custom-class="van-card__tag"
>
{{ tag }}
</van-tag>
</view>
<view class="van-card__content">
<view wx:if="{{ title }}" class="van-card__title title-class">{{ title }}</view>
<slot wx:else name="title" />
<view wx:if="{{ desc }}" class="van-card__desc desc-class">{{ desc }}</view>
<slot wx:else name="desc" />
<slot name="tags" />
<view class="van-card__bottom">
<view wx:if="{{ price || price === 0 }}" class="van-card__price price-class">{{ currency }} {{ price }}</view>
<view wx:if="{{ originPrice || originPrice === 0 }}" class="van-card__origin-price origin-price-class">{{ currency }} {{ originPrice }}</view>
<view wx:if="{{ num }}" class="van-card__num num-class">x {{ num }}</view>
<slot name="bottom" />
</view>
</view>
</view>
<view class="van-card__footer">
<slot name="footer" />
</view>
</view>

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,10 +1,10 @@
import { VantComponent } from '../common/component';
VantComponent({
props: {
title: String,
border: {
type: Boolean,
value: true
}
}
});
import { VantComponent } from '../common/component';
VantComponent({
props: {
title: String,
border: {
type: Boolean,
value: true
}
}
});

View File

@ -1,3 +1,3 @@
{
"component": true
{
"component": true
}

View File

@ -1,9 +1,9 @@
<view
wx:if="{{ title }}"
class="van-cell-group__title"
>
{{ title }}
</view>
<view class="custom-class van-cell-group {{ border ? 'van-hairline--top-bottom' : '' }}">
<slot />
</view>
<view
wx:if="{{ title }}"
class="van-cell-group__title"
>
{{ title }}
</view>
<view class="custom-class van-cell-group {{ border ? 'van-hairline--top-bottom' : '' }}">
<slot />
</view>

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,37 +1,37 @@
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
}
},
methods: {
onClick(event) {
this.$emit('click', event.detail);
this.jumpLink();
}
}
});
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
}
},
methods: {
onClick(event) {
this.$emit('click', event.detail);
this.jumpLink();
}
}
});

View File

@ -1,6 +1,6 @@
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index"
}
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index"
}
}

View File

@ -1,45 +1,45 @@
<wxs src="../wxs/utils.wxs" module="utils" />
<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="{{ titleWidth ? 'max-width:' + titleWidth + ';min-width:' + titleWidth : '' }}"
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>
<wxs src="../wxs/utils.wxs" module="utils" />
<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="{{ titleWidth ? 'max-width:' + titleWidth + ';min-width:' + titleWidth : '' }}"
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>

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,39 +1,39 @@
import { VantComponent } from '../common/component';
VantComponent({
field: true,
relation: {
name: 'checkbox',
type: 'descendant',
linked(target) {
this.children = this.children || [];
this.children.push(target);
this.updateChild(target);
},
unlinked(target) {
this.children = this.children.filter((child) => child !== target);
}
},
props: {
max: Number,
value: {
type: Array,
observer: 'updateChildren'
},
disabled: {
type: Boolean,
observer: 'updateChildren'
}
},
methods: {
updateChildren() {
(this.children || []).forEach((child) => this.updateChild(child));
},
updateChild(child) {
const { value, disabled } = this.data;
child.setData({
value: value.indexOf(child.data.name) !== -1,
disabled: disabled || child.data.disabled
});
}
}
});
import { VantComponent } from '../common/component';
VantComponent({
field: true,
relation: {
name: 'checkbox',
type: 'descendant',
linked(target) {
this.children = this.children || [];
this.children.push(target);
this.updateChild(target);
},
unlinked(target) {
this.children = this.children.filter((child) => child !== target);
}
},
props: {
max: Number,
value: {
type: Array,
observer: 'updateChildren'
},
disabled: {
type: Boolean,
observer: 'updateChildren'
}
},
methods: {
updateChildren() {
(this.children || []).forEach((child) => this.updateChild(child));
},
updateChild(child) {
const { value, disabled } = this.data;
child.setData({
value: value.indexOf(child.data.name) !== -1,
disabled: disabled || child.data.disabled
});
}
}
});

View File

@ -1,3 +1,3 @@
{
"component": true
}
{
"component": true
}

View File

@ -1 +1 @@
<slot />
<slot />

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,87 +1,87 @@
import { VantComponent } from '../common/component';
import { addUnit } from '../common/utils';
function emit(target, value) {
target.$emit('input', value);
target.$emit('change', value);
}
VantComponent({
field: true,
relation: {
name: 'checkbox-group',
type: 'ancestor',
linked(target) {
this.parent = target;
},
unlinked() {
this.parent = null;
}
},
classes: ['icon-class', 'label-class'],
props: {
value: Boolean,
disabled: Boolean,
useIconSlot: Boolean,
checkedColor: String,
labelPosition: String,
labelDisabled: Boolean,
shape: {
type: String,
value: 'round'
},
iconSize: {
type: null,
observer: 'setSizeWithUnit'
}
},
data: {
sizeWithUnit: '20px'
},
methods: {
emitChange(value) {
if (this.parent) {
this.setParentValue(this.parent, value);
}
else {
emit(this, value);
}
},
toggle() {
const { disabled, value } = this.data;
if (!disabled) {
this.emitChange(!value);
}
},
onClickLabel() {
const { labelDisabled, disabled, value } = this.data;
if (!disabled && !labelDisabled) {
this.emitChange(!value);
}
},
setParentValue(parent, value) {
const parentValue = parent.data.value.slice();
const { name } = this.data;
const { max } = parent.data;
if (value) {
if (max && parentValue.length >= max) {
return;
}
if (parentValue.indexOf(name) === -1) {
parentValue.push(name);
emit(parent, parentValue);
}
}
else {
const index = parentValue.indexOf(name);
if (index !== -1) {
parentValue.splice(index, 1);
emit(parent, parentValue);
}
}
},
setSizeWithUnit(size) {
this.set({
sizeWithUnit: addUnit(size)
});
},
}
});
import { VantComponent } from '../common/component';
import { addUnit } from '../common/utils';
function emit(target, value) {
target.$emit('input', value);
target.$emit('change', value);
}
VantComponent({
field: true,
relation: {
name: 'checkbox-group',
type: 'ancestor',
linked(target) {
this.parent = target;
},
unlinked() {
this.parent = null;
}
},
classes: ['icon-class', 'label-class'],
props: {
value: Boolean,
disabled: Boolean,
useIconSlot: Boolean,
checkedColor: String,
labelPosition: String,
labelDisabled: Boolean,
shape: {
type: String,
value: 'round'
},
iconSize: {
type: null,
observer: 'setSizeWithUnit'
}
},
data: {
sizeWithUnit: '20px'
},
methods: {
emitChange(value) {
if (this.parent) {
this.setParentValue(this.parent, value);
}
else {
emit(this, value);
}
},
toggle() {
const { disabled, value } = this.data;
if (!disabled) {
this.emitChange(!value);
}
},
onClickLabel() {
const { labelDisabled, disabled, value } = this.data;
if (!disabled && !labelDisabled) {
this.emitChange(!value);
}
},
setParentValue(parent, value) {
const parentValue = parent.data.value.slice();
const { name } = this.data;
const { max } = parent.data;
if (value) {
if (max && parentValue.length >= max) {
return;
}
if (parentValue.indexOf(name) === -1) {
parentValue.push(name);
emit(parent, parentValue);
}
}
else {
const index = parentValue.indexOf(name);
if (index !== -1) {
parentValue.splice(index, 1);
emit(parent, parentValue);
}
}
},
setSizeWithUnit(size) {
this.set({
sizeWithUnit: addUnit(size)
});
},
}
});

View File

@ -1,6 +1,6 @@
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index"
}
}
{
"component": true,
"usingComponents": {
"van-icon": "../icon/index"
}
}

View File

@ -1,19 +1,19 @@
<wxs src="../wxs/utils.wxs" module="utils" />
<view class="van-checkbox custom-class">
<view class="van-checkbox__icon-wrap" bindtap="toggle">
<slot wx:if="{{ useIconSlot }}" name="icon" />
<van-icon
wx:else
name="success"
size="0.8em"
class="{{ utils.bem('checkbox__icon', [shape, { disabled, checked: value }]) }}"
style="font-size: {{ sizeWithUnit }};{{ checkedColor && value && !disabled ? 'border-color:' + checkedColor + '; background-color:' + checkedColor : '' }}"
custom-class="icon-class"
custom-style="line-height: 1.25em;"
/>
</view>
<view class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled }]) }}" bindtap="onClickLabel">
<slot />
</view>
</view>
<wxs src="../wxs/utils.wxs" module="utils" />
<view class="van-checkbox custom-class">
<view class="van-checkbox__icon-wrap" bindtap="toggle">
<slot wx:if="{{ useIconSlot }}" name="icon" />
<van-icon
wx:else
name="success"
size="0.8em"
class="{{ utils.bem('checkbox__icon', [shape, { disabled, checked: value }]) }}"
style="font-size: {{ sizeWithUnit }};{{ checkedColor && value && !disabled ? 'border-color:' + checkedColor + '; background-color:' + checkedColor : '' }}"
custom-class="icon-class"
custom-style="line-height: 1.25em;"
/>
</view>
<view class="label-class {{ utils.bem('checkbox__label', [labelPosition, { disabled }]) }}" bindtap="onClickLabel">
<slot />
</view>
</view>

View File

@ -1 +1 @@
export {};
export {};

View File

@ -1,158 +1,158 @@
import { VantComponent } from '../common/component';
import { isObj } from '../common/utils';
import { BLUE, WHITE } from '../common/color';
function format(rate) {
return Math.min(Math.max(rate, 0), 100);
}
const PERIMETER = 2 * Math.PI;
const BEGIN_ANGLE = -Math.PI / 2;
const STEP = 1;
VantComponent({
props: {
text: String,
lineCap: {
type: String,
value: 'round'
},
value: {
type: Number,
value: 0,
observer: 'reRender'
},
speed: {
type: Number,
value: 50
},
size: {
type: Number,
value: 100,
observer: 'setStyle'
},
fill: String,
layerColor: {
type: String,
value: WHITE
},
color: {
type: [String, Object],
value: BLUE,
observer: 'setHoverColor'
},
strokeWidth: {
type: Number,
value: 4
},
clockwise: {
type: Boolean,
value: true
}
},
data: {
style: 'width: 100px; height: 100px;',
hoverColor: BLUE
},
methods: {
getContext() {
if (!this.ctx) {
this.ctx = wx.createCanvasContext('van-circle', this);
}
return this.ctx;
},
setHoverColor() {
const context = this.getContext();
const { color, size } = this.data;
let hoverColor = color;
if (isObj(color)) {
const LinearColor = context.createLinearGradient(size, 0, 0, 0);
Object.keys(color)
.sort((a, b) => parseFloat(a) - parseFloat(b))
.map(key => LinearColor.addColorStop(parseFloat(key) / 100, color[key]));
hoverColor = LinearColor;
}
this.setData({ hoverColor });
},
setStyle() {
const { size } = this.data;
const style = `width: ${size}px; height: ${size}px;`;
this.setData({ style });
},
presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) {
const { strokeWidth, lineCap, clockwise, size } = this.data;
const position = size / 2;
const radius = position - strokeWidth / 2;
context.setStrokeStyle(strokeStyle);
context.setLineWidth(strokeWidth);
context.setLineCap(lineCap);
context.beginPath();
context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
context.stroke();
if (fill) {
context.setFillStyle(fill);
context.fill();
}
},
renderLayerCircle(context) {
const { layerColor, fill } = this.data;
this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
},
renderHoverCircle(context, formatValue) {
const { clockwise, hoverColor } = this.data;
// 结束角度
const progress = PERIMETER * (formatValue / 100);
const endAngle = clockwise
? BEGIN_ANGLE + progress
: 3 * Math.PI - (BEGIN_ANGLE + progress);
this.presetCanvas(context, hoverColor, BEGIN_ANGLE, endAngle);
},
drawCircle(currentValue) {
const context = this.getContext();
const { size } = this.data;
context.clearRect(0, 0, size, size);
this.renderLayerCircle(context);
const formatValue = format(currentValue);
if (formatValue !== 0) {
this.renderHoverCircle(context, formatValue);
}
context.draw();
},
reRender() {
// tofector 动画暂时没有想到好的解决方案
const { value, speed } = this.data;
if (speed <= 0 || speed > 1000) {
this.drawCircle(value);
return;
}
this.clearInterval();
this.currentValue = this.currentValue || 0;
this.interval = setInterval(() => {
if (this.currentValue !== value) {
if (this.currentValue < value) {
this.currentValue += STEP;
}
else {
this.currentValue -= STEP;
}
this.drawCircle(this.currentValue);
}
else {
this.clearInterval();
}
}, 1000 / speed);
},
clearInterval() {
if (this.interval) {
clearInterval(this.interval);
this.interval = null;
}
}
},
created() {
const { value } = this.data;
this.currentValue = value;
this.drawCircle(value);
},
destroyed() {
this.ctx = null;
this.clearInterval();
}
});
import { VantComponent } from '../common/component';
import { isObj } from '../common/utils';
import { BLUE, WHITE } from '../common/color';
function format(rate) {
return Math.min(Math.max(rate, 0), 100);
}
const PERIMETER = 2 * Math.PI;
const BEGIN_ANGLE = -Math.PI / 2;
const STEP = 1;
VantComponent({
props: {
text: String,
lineCap: {
type: String,
value: 'round'
},
value: {
type: Number,
value: 0,
observer: 'reRender'
},
speed: {
type: Number,
value: 50
},
size: {
type: Number,
value: 100,
observer: 'setStyle'
},
fill: String,
layerColor: {
type: String,
value: WHITE
},
color: {
type: [String, Object],
value: BLUE,
observer: 'setHoverColor'
},
strokeWidth: {
type: Number,
value: 4
},
clockwise: {
type: Boolean,
value: true
}
},
data: {
style: 'width: 100px; height: 100px;',
hoverColor: BLUE
},
methods: {
getContext() {
if (!this.ctx) {
this.ctx = wx.createCanvasContext('van-circle', this);
}
return this.ctx;
},
setHoverColor() {
const context = this.getContext();
const { color, size } = this.data;
let hoverColor = color;
if (isObj(color)) {
const LinearColor = context.createLinearGradient(size, 0, 0, 0);
Object.keys(color)
.sort((a, b) => parseFloat(a) - parseFloat(b))
.map(key => LinearColor.addColorStop(parseFloat(key) / 100, color[key]));
hoverColor = LinearColor;
}
this.setData({ hoverColor });
},
setStyle() {
const { size } = this.data;
const style = `width: ${size}px; height: ${size}px;`;
this.setData({ style });
},
presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) {
const { strokeWidth, lineCap, clockwise, size } = this.data;
const position = size / 2;
const radius = position - strokeWidth / 2;
context.setStrokeStyle(strokeStyle);
context.setLineWidth(strokeWidth);
context.setLineCap(lineCap);
context.beginPath();
context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
context.stroke();
if (fill) {
context.setFillStyle(fill);
context.fill();
}
},
renderLayerCircle(context) {
const { layerColor, fill } = this.data;
this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
},
renderHoverCircle(context, formatValue) {
const { clockwise, hoverColor } = this.data;
// 结束角度
const progress = PERIMETER * (formatValue / 100);
const endAngle = clockwise
? BEGIN_ANGLE + progress
: 3 * Math.PI - (BEGIN_ANGLE + progress);
this.presetCanvas(context, hoverColor, BEGIN_ANGLE, endAngle);
},
drawCircle(currentValue) {
const context = this.getContext();
const { size } = this.data;
context.clearRect(0, 0, size, size);
this.renderLayerCircle(context);
const formatValue = format(currentValue);
if (formatValue !== 0) {
this.renderHoverCircle(context, formatValue);
}
context.draw();
},
reRender() {
// tofector 动画暂时没有想到好的解决方案
const { value, speed } = this.data;
if (speed <= 0 || speed > 1000) {
this.drawCircle(value);
return;
}
this.clearInterval();
this.currentValue = this.currentValue || 0;
this.interval = setInterval(() => {
if (this.currentValue !== value) {
if (this.currentValue < value) {
this.currentValue += STEP;
}
else {
this.currentValue -= STEP;
}
this.drawCircle(this.currentValue);
}
else {
this.clearInterval();
}
}, 1000 / speed);
},
clearInterval() {
if (this.interval) {
clearInterval(this.interval);
this.interval = null;
}
}
},
created() {
const { value } = this.data;
this.currentValue = value;
this.drawCircle(value);
},
destroyed() {
this.ctx = null;
this.clearInterval();
}
});

Some files were not shown because too many files have changed in this diff Show More