上传2.6小程序模板

This commit is contained in:
liaofei 2019-05-16 14:21:00 +08:00
parent 58f76bc3a1
commit 52393844fa
368 changed files with 20335 additions and 0 deletions

118
view/crmebNewUI/app.js Normal file
View File

@ -0,0 +1,118 @@
//app.js
//请配置请求url
//请修改开发者工具中【详情】->【AppID】改为自己的Appid
//请前往后台【小程序】->【小程序配置】填写自己的 appId and AppSecret
//请不要修改globalData中的其他配置如自行开发可不用理会这句话
//配置完以上就可以访问小程序啦
const URL ='http://datong.crmeb.net';
const util = require('utils/util.js');
App({
onLaunch: function (option) {
if (URL==''){
console.error("请配置请求url\n请修改开发者工具中【详情】->【AppID】改为自己的Appid\n请前往后台【小程序】->【小程序配置】填写自己的 appId and AppSecret");
return false;
}
if (option.query.hasOwnProperty('scene') && option.scene == 1047) this.globalData.code = option.query.scene;
if (option.query.hasOwnProperty('scene') && option.scene == 1001) this.globalData.spid = option.query.scene;
this.getMyMenus();
// 展示本地存储能力
var logs = wx.getStorageSync('logs') || [],that=this;
logs.unshift(Date.now())
wx.setStorageSync('logs', logs);
// 获取导航高度;
wx.getSystemInfo({
success: res => {
//导航高度
this.globalData.navHeight = res.statusBarHeight * (750 / res.windowWidth) + 97;
}, fail(err) {
console.log(err);
}
})
},
globalData: {
navHeight: 0,
routineStyle: '#ffffff',
openPages: '',
spid: 0,
code:0,
urlImages: '',
url: URL,
token: '',
isLog:false,
MyMenus:[],
header: {
'content-type': 'application/json',
'token': ''
}
},
/**
*
* 获取个人中心图标
*/
getMyMenus: function () {
var that = this;
if (that.globalData.MyMenus.legnth) return;
that.baseGet(that.U({ c: 'public_api', a: 'get_my_naviga'},that.globalData.url), function (res) {
that.globalData.MyMenus = res.data.routine_my_menus;
});
},
/*
* POST 访问快捷方法
* @param string | object url 访问地址
* @param callable successCallback 成功执行函数
* @param callable errorCallback 失败执行函数
* @param object header 访问header头
*/
basePost: function (url, data, successCallback, errorCallback, header) {
if (header == undefined) header = this.globalData.header;
header['token'] = this.globalData.token;
util.basePost(url, data, successCallback, errorCallback,header);
},
/*
* GET 访问快捷方法
* @param string | object url 访问地址
* @param callable successCallback 成功执行函数
* @param callable errorCallback 失败执行函数
* @param isMsg 错误信息提醒 默认提醒
* @param object header 访问header头
*/
baseGet: function (url, successCallback, errorCallback, isMsg, header) {
if (header == undefined) header = this.globalData.header;
header['token'] = this.globalData.token;
util.baseGet(url, successCallback, errorCallback, isMsg,header);
},
/*
* 信息提示 + 跳转
* @param object opt {title:'提示语',icon:''} | url
* @param object to_url 跳转url 有5种跳转方式 {tab:1-5,url:跳转地址}
*/
Tips: function (opt, to_url) {
return util.Tips(opt, to_url);
},
/*
* 访问Url拼接
* @param object opt {c:'控制器',a:'方法',q:{get参数},p:{parma参数}}
* @param url 接口访问地址
* @return string
*/
U: function (opt,url){
return util.U(opt,url);
},
/**
* 快捷调取助手函数
*/
help:function()
{
return util.$h;
},
/*
* 合并数组
* @param array list 请求返回数据
* @param array sp 原始数组
* @return array
*/
SplitArray: function (list, sp) { return util.SplitArray(list, sp)},
})

111
view/crmebNewUI/app.json Normal file
View File

@ -0,0 +1,111 @@
{
"pages": [
"pages/index/index",
"pages/goods_cate/goods_cate",
"pages/quality-recommend/index",
"pages/order_details/index",
"pages/user_sgin/index",
"pages/user/user",
"pages/user_get_coupon/index",
"pages/order_confirm/index",
"pages/goods_list/goods_list",
"pages/user_coupon/index",
"pages/goods_comment_list/index",
"pages/user_goods_collection/index",
"pages/user_address_list/index",
"pages/news_list/index",
"pages/goods_search/index",
"pages/user_vip/index",
"pages/user_spread_money/index",
"pages/user_integral/index",
"pages/user_bill/index",
"pages/user_money/index",
"pages/user_spread_user/index",
"pages/user_sgin_list/index",
"pages/order_list/index",
"pages/goods_details/index",
"pages/news_details/index",
"pages/promoter-list/index",
"pages/promoter-order/index",
"pages/cash-audit/index",
"pages/user_cash/index",
"pages/user_return_list/index",
"pages/user_goods_return/index",
"pages/goods_return/index",
"pages/goods_comment_con/index",
"pages/promotional-items/index",
"pages/first-new-product/index",
"pages/user_spread_code/index",
"pages/cut-poster/index",
"pages/user_info/index",
"pages/order_pay_status/index",
"pages/goods_logistics/index",
"pages/user_address/index",
"pages/order_addcart/order_addcart",
"pages/logs/logs",
"pages/user_payment/index",
"components/navbar/index",
"components/recommend/index",
"components/share-red-packets/index",
"components/orderGoods/index",
"components/swipers/index",
"components/goodList/index",
"components/promotionGood/index",
"components/productConSwiper/index",
"components/userEvaluation/index",
"components/coupon-window/index",
"components/product-window/index",
"components/coupon-list-window/index",
"components/address-window/index",
"components/home/index"
],
"subPackages": [
{
"root": "pages/activity",
"name": "activity",
"pages": [
"goods_seckill_details/index",
"goods_seckill/index"
]
}
],
"window": {
"backgroundTextStyle": "dark",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle": "black",
"navigationStyle": "custom"
},
"tabBar": {
"backgroundColor": "#ffffff",
"color": "#282828",
"selectedColor": "#e93323",
"list": [
{
"pagePath": "pages/index/index",
"iconPath": "images/1-001.png",
"selectedIconPath": "images/1-002.png",
"text": "首页"
},
{
"pagePath": "pages/goods_cate/goods_cate",
"iconPath": "images/2-001.png",
"selectedIconPath": "images/2-002.png",
"text": "分类"
},
{
"pagePath": "pages/order_addcart/order_addcart",
"iconPath": "images/3-001.png",
"selectedIconPath": "images/3-002.png",
"text": "购物车"
},
{
"pagePath": "pages/user/user",
"iconPath": "images/4-001.png",
"selectedIconPath": "images/4-002.png",
"text": "我的"
}
]
},
"sitemapLocation": "sitemap.json"
}

68
view/crmebNewUI/app.wxss Normal file
View File

@ -0,0 +1,68 @@
/**app.wxss**/
@import '/font/iconfont.wxss';
@import '/css/style.wxss';
@import '/css/animate.wxss';
.start{width: 122rpx; height: 30rpx;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHoAAADMCAYAAAC8yreMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4BpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMDg0NEE2QTVFNUQxMUU4QUI3RkNGOTgwNDYyRUZDOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozODU5QzVENDMwRjcxMUU5OTQ0QzlEOTQ5RkE1MTlBRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozODU5QzVEMzMwRjcxMUU5OTQ0QzlEOTQ5RkE1MTlBRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkN2ZhZTM5NC0wNmE4LTkzNGYtODA0OS0zNjBjNTcxOTU2YjAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmYWI1M2NhMC04MWE1LTE5NGItYmJlYi1jMzI2MjIwNmNhOTYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ctYL1AAAHsElEQVR42uycS4gcVRiFq5Mm4yuKihoVlKg7IVlkI4oGFV9R4wPSJChBMW5ECYooKuIbEReCBBGJEDS+BkVJYEIMJgvJIossFATxCW58boRJEDEZz83cDk3TXc/7T9Xt+g783O7p6tP/9Km6dbvp+jpzc3MJmnwt4i0gaETQiKBRM+UWY8OVpt9XXXySakcZ34Xwp/fR3mWO6LWqW/Wilxnte5b+re29TNB3+fEeozfL0r+1vXdGTRmdTmfc9HGGG1Rd1d+qZecc/PGfcVPI2Bc19Kf3uSBHdM+/mNNpqtsD77WW/q3uvTtmDzpPw9kDxm5XW6q6b2jTB7XtrEZXc35vc/rNV7LQ/vQ+2rs75v/Zproux45yhWrniL/vUq1JeZ6lP70XmLpvVr1SYoo5qnrBrQ4ztrP0p/eiizFND9dreHdgOknTr25lqEXCvrwLGgt/ei+xGNOTP9ewUrUn48XclLGi/2J5ZelP7wVX3TJxJ/f3Mjbbpu3+KrOctPSn9+Ifr9ZWfLxOf3rPE7TOF1Mabhg68e/yy/q+1mi7bpn/xNKf3osd0deqTva3f1ZdpenCLeFXq37wfz9ddWXJvdbSn94LBH2bH9/2J/79/hzypV8wvD60XVFZ+tN7xhcmgzrRnQv0AjtHLBgOa9is6eOzCm+WpT+9p32ORpMnfmFC0IigEUEjgkYEjQgaETQiaETQBI0IGhE0ImhE0IigEUGj8oIaEEfvTtPT0ytVF5bxh3gQl/9TqkcWauqGeFCDv47kM5P5y2PP1+0lpkH7K+9v9HfX6/4JIf8ZS/+Ye/dap/pI5U4Nt1gf0RAP6vO/WrVX9YnqjqJPhnjQoN5Tpu0LNPzS6/XcZTmHdH9WdZbu/1kp6ARqQC29Kzw39d+rOqL6V7XY33Y/5n9pYNOtqpdd4BqX+G3dNqck81dgzuQN2l15766gf7zgDHHUN/RcxnaW/jH3fkC1QbVbR+v7Y88Rvd5BDZsGdhA3qzykWqXaP+o5EA8a2LuCe0DDparHFOqhHKvxLaovtO3Wcf4QDxrYuwJ7Q8Nbqu0KckVKyO5Kyu2qF/shl151Qw2ox1/BfaXhbtVrKZs9r7pT234T6uMV1IB6/N3F8N+mPP6dX7BV/xwNNaA+f786n+kvuFT3qzYMPL5n4Euaykc01ID6/N3HuL0K91yNH/odaKnuu3P3Mt1264SbQgUNNaAGfwU55fNxX3e+qXrCLbhUbpH2tF9pO4Dcqdp2cYig+1feb1LNDi1GDqs26+Y1Fc5Dlv4x977azwSX+AXXTwMLNTd7rPOzhfti5vIsM4gHDdIgxllH6XJ3tPrVd9qRf5GGWW33R/9vI78bIeh2iJ8SETQiaETQiKARQSOCRgSNCBoRNEEjgkYEjQgaETQiaETQiKARQSMnYDXheneqApSx9AZWE16lgTKW3sBqAqoqUMbSG1hNWFUCylh6A6sJq0pAGUtvYDUBYDJ+aq0MlLH0BlZTsHdLoAywmmL+1r2bAWUSYDX5/ReqdwugjKl32gv6N8xdcP1OxnTopruNg6yOPG+Whf9C9u6+wNDwrOoZvclfjwnCXfr6pOrRQdZI1vse2htYTYXeQwNlLL2B1VTvPRhQxtIbWE01mEySBATKWHoDq6nWe5IEBMpYegOrqdB7aKCMpTewmmq9BwXKWHrDMCkoU6AMsBpUVfyUiKARQSOCRgSNCBoRNCJoRNCIoAkaETQiaETQiKARQSOCRgSNMtQmholTFQ4IDJOwsva3ZIxY+8MwySNLxoi1PwyTYrJkjFj7wzApIEvGiLU/DJOcU58ZY8TaH4bJ6DfFjANi7Q/DpJi/JWPE2h+GSVKQYWLBAbH2h2FSkmESmgNi7Q/DpKS/JWPE2h+GSXFZMkas/YN5Z7I7xnBAdvsvNvpzzTEOiI66/0p8SWLqnwxxQPwixl1P/IF/vM8B+bhkGJb+wbwnnWGSJLaMEWt/GCY5v2gwY4xY+8MwKSZLxoi1PwyT1H/IkANi7Q/DBFUWPyUiaETQiKARQSOCRgSNCBoRNCJogkYEjQgaETQiaETQiKARQaMMNY1h4tRUDggMk/BqJAck5t4bxzBpMgck5t4bxTDxaiwHJObem8YwcWosByTm3mthmKRMT43mgMTcey0Mk1g5IDH3XhfDJEoOSMy918owiY0DEnPvtTNMYuKAxNx77QyTmDggMffeFIZJFByQmHuvnWHSf34SAQck5t6bwDBJkkg4IDH3XjvDJCYOSMy9N4FhEg0HJObeR56jh5bnGxM/Z6TIfXbeVxKS8b2bDcaxOvR3Z7tFe+2M/6q1Kd5R9Q7DpCXip0QEjQgaETQiaETQiKARQSOCRgRN0IigEUEjgkYEjQgamQhqQDt6L3tEt5IaEHPvhYNuMzUg5t7LHNGtpQbE3HuZoFtLDYi590UFp4/jV977yzmPXXkfcHoy8297790xxlADWkI8gBowYb13oAZAPDj+IT2BGhB975mLMagBk9F73lU31IDIe+/mfEGoAZH3nveIhhoQee95FmNT/nPbDn/OeLh/UbYeW67hVdWnyTwXdL0eO1JwQRPUn95LLsYSqAET0XueczTUgAnoHeJBS8RPiQgaETQiaNRM/S/AAOykxVBJG5QXAAAAAElFTkSuQmCC');background-repeat: no-repeat; background-size: 122rpx auto;}
.start.star5{background-position: 0 3rpx;}
.start.star4{background-position: 0 -30rpx;}
.start.star3{background-position: 0 -70rpx;}
.start.star2{background-position: 0 -105rpx;}
.start.star1{background-position: 0 -140rpx;}
.start.star0{background-position: 0 -175rpx;}
page{font-size:28rpx;background-color: #f5f5f5; color: #333;}
view{box-sizing:border-box;}
.acea-row{display:flex;flex-wrap:wrap;}
.acea-row.row-top{align-items:flex-start;}
.acea-row.row-middle{align-items:center;}
.acea-row.row-bottom{align-items:flex-end;}
.acea-row.row-left{justify-content:flex-start;}
.acea-row.row-center{justify-content:center;}
.acea-row.row-right{justify-content:flex-end;}
.acea-row.row-between{justify-content:space-between;}
.acea-row.row-around{justify-content:space-around;}
.acea-row.row-column{flex-direction:column;}
.acea-row.row-column-between{flex-direction:column;justify-content:space-between;}
.acea-row.row-column-around{flex-direction:column;justify-content:space-around;}
.acea-row.row-center-wrapper{align-items:center;justify-content:center;}
.acea-row.row-between-wrapper{align-items:center;justify-content:space-between;}
.font-color{color:#fc4141!important;}
.bg-color{background-color:#e93323!important;}
.icon-color{color:#ff3c2b;}
.cart-color{color:#ff3700!important;border:1px solid #ff3700!important;}
/* 单选 */
radio .wx-radio-input{border-radius:50%;width:38rpx;height:38rpx;}
radio .wx-radio-input.wx-radio-input-checked{border: 1px solid #e93323 !important;
background-color: #e93323 !important;}
/* 多选 */
checkbox .wx-checkbox-input{border-radius:50%;width:38rpx;height:38rpx;}
checkbox .wx-checkbox-input.wx-checkbox-input-checked{
border: 1px solid #e93323 !important;background-color: #e93323 !important;color:#fff!important;}
checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {font-size:35rpx;}
.line1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.line2{word-break:break-all;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.mask{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000;opacity:0.5;z-index:5;}
button{padding:0;margin:0;line-height:normal;background-color:#fff;}
button::after{border:0;}
@keyframes load
{
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
.loadingpic {
animation: load 3s linear 1s infinite;
}
.loading-list {
animation: load linear 1s infinite;
font-size:40rpx;margin-right:22rpx;
}
.loading{width:100%;height:100rpx;line-height:100rpx;align-items:center;justify-content:center;position: relative;text-align:center;}
.loading .line{position: absolute;width: 450rpx;left: 150rpx;top: 50rpx;height: 1px;border-top:1px solid #eee ;}
.loading .text{position: relative;display: inline-block;padding: 0 20rpx;background: #fff;z-index: 2;color: #777;}
.loadingicon .loading {animation: load linear 1s infinite;font-size:45rpx;color:#000;}
.loadingicon{width:100%;height:80rpx;}

View File

@ -0,0 +1,55 @@
var app = getApp();
Component({
properties: {
//跳转url链接
pagesUrl:{
type:String,
value:'',
},
address:{
type: Object,
value:{
address:true,
addressId:0,
}
},
isLog:{
type:Boolean,
value:false,
},
},
data: {
active: 0,
//地址列表
addressList:[],
},
attached: function () {
},
methods: {
tapAddress: function (e) {
this.setData({ active: e.currentTarget.dataset.id });
this.triggerEvent('OnChangeAddress', e.currentTarget.dataset.addressid);
},
close: function () {
this.setData({ 'address.address': false });
this.triggerEvent('changeTextareaStatus');
},
goAddressPages:function(){
this.setData({ 'address.address': false });
this.triggerEvent('changeTextareaStatus');
wx.navigateTo({url: this.data.pagesUrl});
},
getAddressList:function(){
var that=this;
app.baseGet(app.U({ c: "user_api", a:'user_address_list'}),function(res){
var addressList=res.data;
//处理默认选中项
for (var i = 0, leng = addressList.length; i < leng;i++){
if (addressList[i].id == that.data.address.addressId) that.setData({ active:i});
}
that.setData({ addressList: addressList});
});
}
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,17 @@
<view class="address-window {{address.address==true?'on':''}}">
<view class='title'>选择地址<text class='iconfont icon-guanbi' bindtap='close'></text></view>
<view class='list'>
<view class='item acea-row row-between-wrapper {{active==index?"font-color":""}}' wx:for="{{addressList}}" data-id='{{index}}' bindtap='tapAddress' wx:key data-addressId="{{item.id}}">
<text class='iconfont icon-ditu {{active==index?"font-color":""}}'></text>
<view class='address'>
<view class='name {{active==index?"font-color":""}}'>{{item.real_name}}<text class='phone'>{{item.phone}}</text></view>
<view class='line1'>{{item.province}}{{item.city}}{{item.district}}{{item.detail}}</view>
</view>
<text class='iconfont icon-complete{{active==index?" font-color":""}}'></text>
</view>
</view>
<!-- 无地址 -->
<!-- <view class='pictrue'><image src='/images/noCoupon.png'></image></view> -->
<view class='addressBnt bg-color' bindtap='goAddressPages'>选择其他地址</view>
</view>
<view class='mask' catchtouchmove="true" hidden='{{address.address==false}}' bindtap='close'></view>

View File

@ -0,0 +1,15 @@
@import '/app.wxss';
.address-window{background-color:#fff;position:fixed;bottom:0;left:0;width:100%;z-index:101;transform:translate3d(0,100%,0);transition:all .3s cubic-bezier(.25,.5,.5,.9);}
.address-window.on{transform:translate3d(0,0,0);}
.address-window .title{font-size:32rpx;font-weight:bold;text-align:center;height:123rpx;line-height:123rpx;position:relative;}
.address-window .title .iconfont{position:absolute;right:30rpx;color:#8a8a8a;font-size:35rpx;}
.address-window .list .item{margin-left:30rpx;padding-right:30rpx;border-bottom:1px solid #eee;height:129rpx;font-size:25rpx;color:#333;}
.address-window .list .item .iconfont{font-size:37rpx;color:#2c2c2c;}
.address-window .list .item .iconfont.icon-complete{font-size:30rpx;color:#fff;}
.address-window .list .item .address{width:560rpx;}
.address-window .list .item .address .name{font-size:28rpx;font-weight:bold;color:#282828;margin-bottom:4rpx;}
.address-window .list .item .address .name .phone{margin-left:18rpx;}
.address-window .addressBnt{font-size:30rpx;font-weight:bold;color:#fff;width:690rpx;height:86rpx;border-radius:43rpx;text-align:center;line-height:86rpx;margin:85rpx auto;}
.address-window .pictrue{width:414rpx;height:336rpx;margin:0 auto;}
.address-window .pictrue image{width:100%;height:100%;}

View File

@ -0,0 +1,241 @@
var app = getApp();
Component({
properties: {
iShidden: {
type: Boolean,
value: true,
},
//是否自动登录
isAuto: {
type: Boolean,
value: true,
},
},
data: {
cloneIner: null,
url: app.globalData.url,
loading:false,
},
pageLifetimes: {
hide: function () {
//关闭页面时销毁定时器
if (this.data.cloneIner) clearInterval(this.data.cloneIner);
},
show: function () {
//打开页面销毁定时器
if (this.data.cloneIner) clearInterval(this.data.cloneIner);
},
},
detached() {
if (this.data.cloneIner) clearInterval(this.data.cloneIner);
},
attached() {
this.get_logo_url();
this.setAuthStatus();
},
methods: {
get_logo_url: function () {
if (wx.getStorageSync('logo_url')) return this.setData({ logo_url: wx.getStorageSync('logo_url') });
app.baseGet(app.U({ c: 'public_api', a: 'get_logo_url' }), function (res) {
wx.setStorageSync('logo_url', res.data.logo_url);
this.setData({ logo_url: res.data.logo_url });
}.bind(this));
},
//监听登录状态
WatchIsLogin: function () {
this.data.cloneIner = setInterval(function () {
//防止死循环,超过错误次数终止监听
if (this.getErrorCount()) return clearInterval(this.data.cloneIner);
if (app.globalData.token == '' && this.data.loading===false) this.setAuthStatus();
}.bind(this),800);
this.setData({ cloneIner: this.data.cloneIner });
},
//检测登录状态并执行自动登录
setAuthStatus() {
var that = this;
that.setErrorCount();
wx.getSetting({
success(res) {
if (!res.authSetting['scope.userInfo']) {
//没有授权不会自动弹出登录框
if (that.data.isAuto === false) return;
//自动弹出授权
that.setData({ iShidden: false });
} else {
//自动登录
that.setData({ iShidden: true });
if (app.globalData.token) {
that.triggerEvent('onLoadFun', app.globalData.token);
that.WatchIsLogin();
} else {
wx.showLoading({ title: '正在登录中' });
that.getUserInfoBydecryptCode();
}
}
}
})
},
//访问服务器获得cache_key
setCode(code, successFn, errotFn) {
var that = this;
that.setData({ loading: true });
app.basePost(app.U({ c: 'Login', a: 'setCode' }), { code: code }, function (res) {
that.setData({ loading: false });
wx.setStorage({ key: 'cache_key', data: res.data.cache_key});
successFn && successFn(res);
}, function (res) {
that.setData({ loading: false });
if (errotFn) errotFn(res);
else return app.Tips({ title: '获取cache_key失败' });
});
},
//获取code
getSessionKey(code, successFn, errotFn) {
var that = this;
wx.checkSession({
success: function (res) {
wx.getStorage({
key:'cache_key',
success:function(res){
if (res.data){
successFn && successFn();
}else{
that.setCode(code, successFn, errotFn);
}
},
fail(res){
that.setCode(code, successFn, errotFn);
},
});
},
fail: function () {
that.setCode(code, successFn, errotFn);
}
});
},
login:function(){
var that=this;
wx.login({
success: function (res) {
if (!res.code) return app.Tips({ title: '登录失败!' + res.errMsg });
//获取cache_key并缓存
that.getSessionKey(res.code, function () {
that.getUserInfoBydecryptCode();
});
},
fail() {
wx.hideLoading();
}
})
},
//授权
setUserInfo(e) {
wx.showLoading({ title: '正在登录中' });
this.login();
},
close: function () {
if (this.data.isAuto) return;
this.setData({ iShidden: true });
},
//登录获取访问权限
getUserInfoBydecryptCode: function () {
var that = this;
if (this.getErrorCount()){
this.setData({ iShidden: false, ErrorCount: 0 });
return app.Tips({ title: '获取code失败,请重新授权尝试获取!' });
}
wx.getStorage({
key:'cache_key',
success:function(res){
if(res.data){
var cache_key = res.data;
wx.getUserInfo({
lang: 'zh_CN',
success: function (res) {
var pdata = {};
pdata.spid = app.globalData.spid;//获取推广人ID
pdata.code = app.globalData.code;//获取推广人分享二维码ID
if (res.iv) {
pdata.iv = encodeURI(res.iv);
pdata.encryptedData = res.encryptedData;
pdata.cache_key = cache_key;
//获取用户信息生成访问token
that.setData({ loading: true });
app.basePost(app.U({ c: 'login', a: 'index' }), pdata, function (res) {
that.setData({ loading: false });
if (res.data.status == 0) return app.Tips({ title: '抱歉,您已被禁止登录!' });
else if (res.data.status == 410) {
wx.clearStorage();
wx.hideLoading();
that.setErrorCount();
that.login();
return false;
}
//取消登录提示
wx.hideLoading();
//关闭登录弹出窗口
that.setData({ iShidden: true, ErrorCount: 0 });
//保存token和记录登录状态
app.globalData.token = res.data.token;
app.globalData.isLog = true;
//执行登录完成回调
that.triggerEvent('onLoadFun', app.globalData.uid);
//清除定时器
if (that.data.cloneIner) clearInterval(that.data.cloneIner);
//监听登录状态
that.WatchIsLogin();
}, function (res) {
that.setData({ loading: false });
wx.hideLoading();
that.setErrorCount();
wx.clearStorage();
return app.Tips({ title: res.msg });
});
} else {
wx.hideLoading();
wx.clearStorage();
that.setErrorCount();
return app.Tips({ title: '用户信息获取失败!' });
}
},
fail: function () {
wx.hideLoading();
wx.clearStorage();
that.setErrorCount();
if (that.data.isAuto) that.login();
},
})
}else{
wx.hideLoading();
wx.clearStorage();
that.setErrorCount();
if (that.data.isAuto) that.login();
return false;
}
},
fail:function(){
wx.hideLoading();
wx.clearStorage();
that.setErrorCount();
if (that.data.isAuto) that.login();
}
})
},
/**
* 处理错误次数,防止死循环
*
*/
setErrorCount: function () {
if (!this.data.ErrorCount) this.data.ErrorCount = 1;
else this.data.ErrorCount++;
this.setData({ ErrorCount: this.data.ErrorCount });
},
/**
* 获取错误次数,是否终止监听
*
*/
getErrorCount: function () {
return this.data.ErrorCount >= 10 ? true : false;
}
},
})

View File

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

View File

@ -0,0 +1,10 @@
<!--pages/authorize/authorize.wxml-->
<view class='Popup' hidden='{{iShidden}}'>
<image src='{{url}}{{logo_url}}'></image>
<view class='title'>授权提醒</view>
<view class='tip'>请授权头像等信息,以便为您提供更好的服务</view>
<view class='bottom flex'>
<button class='item grant on' type="primary" open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="setUserInfo">去授权</button>
</view>
</view>
<view class='mask' hidden='{{iShidden}}' catchtouchmove="true" bindtap='close'></view>

View File

@ -0,0 +1,11 @@
/* pages/authorize/authorize.wxss */
@import "../../app.wxss";
.Popup{width:500rpx;background-color:#fff;position:fixed;top:50%;left:50%;margin-left:-250rpx;transform:translateY(-50%);z-index:320;}
.Popup image{width:150rpx;height:150rpx;margin:-67rpx auto 0 auto;display:block;border: 8rpx solid #fff;border-radius: 50%}
.Popup .title{font-size:28rpx;color:#000;text-align:center;margin-top: 30rpx}
.Popup .tip{font-size:22rpx;color:#555;padding:0 24rpx;margin-top:25rpx;}
.Popup .bottom .item{width:50%;height:80rpx;background-color:#eeeeee;text-align:center;line-height:80rpx;font-size:24rpx;color:#666;margin-top:54rpx;}
.Popup .bottom .item.on{width: 100%}
.Popup .bottom .item.grant{font-size:28rpx;color:#fff;font-weight:bold;background-color:#e93323;border-radius:0;padding:0;}
.mask{position:fixed;top:0;right:0;left:0;bottom:0;background-color:rgba(0,0,0,0.65);z-index:310;}

View File

@ -0,0 +1,49 @@
var app = getApp();
Component({
properties: {
coupon: {
type: Object,
value:{
list:[],
statusTile:''
},
},
//打开状态 0=领取优惠券,1=使用优惠券
openType:{
type:Number,
value:0,
}
},
data: {
},
attached: function () {
},
methods: {
close: function () {
this.triggerEvent('ChangCouponsClone');
},
getCouponUser:function(e){
var that = this;
var id = e.currentTarget.dataset.id;
var index = e.currentTarget.dataset.index;
var list = that.data.coupon.list;
if (list[index].is_use == true && this.data.openType==0) return true;
switch (this.data.openType){
case 0:
//领取优惠券
app.basePost(app.U({ c: 'coupons_api', a: 'user_get_coupon' }), { couponId:id},function(res){
list[index].is_use=true;
that.setData({
['coupon.list']: list
});
app.Tips({ title: '领取成功' });
that.triggerEvent('ChangCoupons',list[index]);
});
break;
case 1:
that.triggerEvent('ChangCoupons',index);
break;
}
},
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,20 @@
<view class='coupon-list-window {{coupon.coupon==true?"on":""}}'>
<view class='title'>优惠券<text class='iconfont icon-guanbi' bindtap='close'></text></view>
<view class='coupon-list' wx:if="{{coupon.list.length}}">
<view class='item acea-row row-center-wrapper' wx:for="{{coupon.list}}" bindtap='getCouponUser' data-index='{{index}}' data-id="{{item.id}}" wx:key>
<view class='money'>¥<text class='num'>{{item.coupon_price}}</text></view>
<view class='text'>
<view class='condition line1'>购物满{{item.use_min_price}}元可用</view>
<view class='data acea-row row-between-wrapper'>
<view>{{item.add_time}}-{{item.end_time}}</view>
<view class='bnt gray' wx:if="{{item.is_use}}">{{item.use_title || '已领取'}}</view>
<view class='bnt bg-color' wx:else>{{coupon.statusTile || '立即领取'}}</view>
</view>
</view>
</view>
</view>
<!-- 无优惠券 -->
<view class='pictrue' wx:else><image src='/images/noCoupon.png'></image></view>
</view>
<view class='mask' catchtouchmove="true" hidden='{{coupon.coupon==false}}' bindtap='close'></view>

View File

@ -0,0 +1,8 @@
@import '/app.wxss';
.coupon-list-window{position:fixed;bottom:0;left:0;width:100%;background-color:#f5f5f5;border-radius:16rpx 16rpx 0 0;z-index:111;transform:translate3d(0,100%,0);transition:all .3s cubic-bezier(.25,.5,.5,.9);z-index: 1000}
.coupon-list-window.on{transform:translate3d(0,0,0);}
.coupon-list-window .title{height:124rpx;width:100%;text-align:center;line-height:124rpx;font-size:32rpx;font-weight:bold;position:relative;}
.coupon-list-window .title .iconfont{position:absolute;right:30rpx;top:50%;transform:translateY(-50%);font-size:35rpx;color:#8a8a8a;font-weight:normal;}
.coupon-list-window .coupon-list{margin:0 0 50rpx 0;height:550rpx;overflow:auto;}
.coupon-list-window .pictrue{width:414rpx;height:336rpx;margin:0 auto 50rpx auto;}
.coupon-list-window .pictrue image{width:100%;height:100%;}

View File

@ -0,0 +1,24 @@
var app = getApp();
Component({
properties: {
window:{
type: Boolean,
value: true,
},
couponList:{
type:Array,
value:[],
}
},
data: {
},
attached: function () {
},
methods: {
close:function(){
this.triggerEvent('onColse');
}
}
})

View File

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

View File

@ -0,0 +1,16 @@
<view class='coupon-window {{window==true?"on":""}}'>
<view class='couponWinList'>
<view class='item acea-row row-between-wrapper' wx:for="{{couponList}}" wx:key>
<view class='money font-color'>¥<text class='num'>{{item.coupon_price}}</text></view>
<view class='text'>
<view class='name'>购物买{{item.use_min_price}}减{{item.coupon_price}}</view>
<view>{{item.add_time}}-{{item.end_time}}</view>
</view>
</view>
</view>
<view class='lid'>
<navigator hover-class='none' url='/pages/user_get_coupon/index' class='bnt font-color'>立即领取</navigator>
<view class='iconfont icon-guanbi3' bindtap='close'></view>
</view>
</view>
<view class='mask' catchtouchmove="true" hidden='{{window==false}}'></view>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,16 @@
// components/goodList/index.js
Component({
properties: {
status: {
type: String,
value: 0,
},
bastList: {
type: Object,
value: [],
}
},
data: {
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,21 @@
<view class='goodList'>
<block wx:for="{{bastList}}" wx:key>
<navigator url='/pages/goods_details/index?id={{item.id}}' class='item acea-row row-between-wrapper'>
<view class='pictrue'>
<image src='{{item.image}}'></image>
<image wx:if="{{index == 0 && status == 1}}" src='/images/one.png' class='numPic'></image>
<image wx:if="{{index == 1 && status == 1}}" src='/images/two.png' class='numPic'></image>
<image wx:if="{{index == 2 && status == 1}}" src='/images/three.png' class='numPic'></image>
</view>
<view class='underline'>
<view class='text'>
<view class='line1'>{{item.store_name}}</view>
<view class='money font-color'>¥<text class='num'>{{item.price}}</text></view>
<view class='vip-money acea-row row-middle'>¥{{item.vip_price || 0}}<image wx:if='{{item.vip_price && item.vip_price > 0}}' src='/images/vip.png'></image><text class='num'>已售{{item.sales}}{{item.unit_name}}</text></view>
</view>
</view>
<view class='iconfont icon-gouwuche cart-color acea-row row-center-wrapper'></view>
</navigator>
</block>
</view>

View File

@ -0,0 +1,14 @@
@import '/app.wxss';
.goodList .item{position:relative;padding-left:30rpx;}
.goodList .item .pictrue{width:180rpx;height:180rpx;position:relative;}
.goodList .item .pictrue image{width:100%;height:100%;border-radius:6rpx;}
.goodList .item .pictrue .numPic{position:absolute;left:7rpx;top:7rpx;width:50rpx;height:50rpx;border-radius:50%;}
.goodList .item .underline{padding:30rpx 30rpx 30rpx 0;border-bottom:1px solid #f5f5f5;}
.goodList .item:nth-last-child(1) .underline{border-bottom:0; }
.goodList .item .text{font-size:30rpx;color:#222;width:489rpx;}
.goodList .item .text .money{font-size:26rpx;font-weight:bold;margin-top:50rpx;}
.goodList .item .text .money .num{font-size:34rpx;}
.goodList .item .text .vip-money{font-size:24rpx;color:#282828;font-weight:bold;margin-top:15rpx;}
.goodList .item .text .vip-money image{width:46rpx;height:21rpx;margin-left:5rpx;}
.goodList .item .text .vip-money .num{font-size:22rpx;color:#aaa;font-weight:normal;margin:-2rpx 0 0 22rpx;}
.goodList .item .iconfont{position:absolute;right:30rpx;width:50rpx;height:50rpx;border-radius:50%;font-size:30rpx;bottom:38rpx;}

View File

@ -0,0 +1,77 @@
// components/home/index.js
Page({
/**
* 页面的初始数据
*/
data: {
homeActive:false
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
setTouchMove: function (e) {
var that = this;
if (e.touches[0].clientY < 400 && e.touches[0].clientY > 66) {
that.setData({
top: e.touches[0].clientY
})
}
},
open:function(){
this.setData({
homeActive: !this.data.homeActive
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,9 @@
<view class='home' style=" top:{{top*2}}rpx;" catchtouchmove="setTouchMove">
<view class='homeCon bg-color acea-row row-column-between {{homeActive==true?"on":""}}'>
<navigator hover-class='none' url='/pages/index/index' open-type='switchTab' class='iconfont icon-shouye-xianxing'></navigator>
<navigator hover-class='none' url='/pages/order_addcart/order_addcart' open-type='switchTab' class='iconfont icon-caigou-xianxing'></navigator>
<navigator hover-class='none' url='/pages/user/user' open-type='switchTab' class='iconfont icon-yonghu1'></navigator>
</view>
<view class='pictrue' bindtap='open'><image src='{{homeActive==false?"/images/close.gif":"/images/open.gif"}}'></image></view>
</view>

View File

@ -0,0 +1,7 @@
@import '/app.wxss';
.home{position: fixed ;top:780rpx;color: white;text-align: center;z-index:99;right:10rpx;}
.home .homeCon{width:86rpx;border-radius:50rpx;padding:34rpx 0;box-sizing:border-box;transition:all 0.3s ease-in-out 0s;opacity:0;transform: scale(0);height:0rpx;color:#e93323;}
.home .homeCon.on{opacity:1;transform: scale(1);height:300rpx;color:#fff;}
.home .homeCon .iconfont{font-size:48rpx;}
.home .pictrue{width:86rpx;height:86rpx;border-radius:50%;margin-top:20rpx;}
.home .pictrue image{width:100%;height:100%;border-radius:50%;}

View File

@ -0,0 +1,57 @@
var app = getApp();
Component({
properties: {
parameter:{
type: Object,
value:{
class:'0'
},
},
logoUrl:{
type:String,
value:'',
}
},
data: {
navH: ""
},
ready: function(){
this.setClass();
var pages = getCurrentPages();
if (pages.length <= 1) this.setData({'parameter.return':0});
},
attached: function () {
this.setData({
navH: app.globalData.navHeight
});
},
methods: {
return:function(){
wx.navigateBack();
},
setGoodsSearch:function(){
wx.navigateTo({
url: '/pages/goods_search/index',
})
},
setClass:function(){
var color = '';
switch (this.data.parameter.class) {
case "0": case 'on':
color = 'on'
break;
case '1': case 'black':
color = 'black'
break;
case '2': case 'gray':
color = 'gray'
break;
default:
break;
}
this.setData({
'parameter.class': color
})
}
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,13 @@
<view class='navbar {{parameter.class}}' style='height:{{navH}}rpx'>
<view class='navbarH' style='height:{{navH}}rpx;'>
<view class='navbarCon acea-row row-center-wrapper' wx:if='{{parameter.navbar==0}}'>
<view class='search acea-row row-middle' bindtap='setGoodsSearch'><text class='iconfont icon-xiazai5'></text>搜索商品</view>
<view class='logo'><image src='{{logoUrl}}'></image></view>
</view>
<view class='navbarCon acea-row row-center-wrapper' wx:if='{{parameter.navbar==1}}'>
<view class='name {{parameter.color==true?"on":""}} line1'>{{parameter.title}}</view>
<view class='iconfont icon-xiangzuo {{parameter.color==true?"on":""}}' wx:if='{{parameter.return==1}}' bindtap='return'></view>
</view>
</view>
</view>
<view style='height:{{navH}}rpx'></view>

View File

@ -0,0 +1,15 @@
@import '/app.wxss';
.navbar{position:fixed;background-color:#fff;top:0;left:0;z-index:999;width:100%;}
.navbar.on{background-color:#e93323;}
.navbar.black{background-color:#232323;}
.navbar.gray{background-color:#666;}
.navbar .navbarH{position:relative;}
.navbar .navbarH .navbarCon{position:absolute;bottom:0;height:100rpx;width:100%;}
.navbar .navbarH .navbarCon .name{color:#000;font-size:36rpx;font-weight:bold;width: 300rpx;text-align: center;}
.navbar .navbarH .navbarCon .name.on{color:#fff;}
.navbar .navbarH .navbarCon .icon-xiangzuo{color:#000;font-weight:bold;position:absolute;font-size:40rpx;left:16rpx;width:100rpx;height:56rpx;line-height:54rpx;top:50%;transform:translateY(-50%);}
.navbar .navbarH .navbarCon .icon-xiangzuo.on{color:#fff;}
.navbar .navbarH .navbarCon .logo{width:127rpx;height:45rpx;position:absolute;left:30rpx;top:50%;transform:translateY(-50%);}
.navbar .navbarH .navbarCon .logo image{width:100%;height:100%;display:block;}
.navbar .navbarH .navbarCon .search{width:360rpx;height:64rpx;background-color:#f7f7f7;border-radius:50rpx;padding:0 28rpx;box-sizing:border-box;font-size:28rpx;color:#bbb;margin-right:26rpx;}
.navbar .navbarH .navbarCon .search .icon-xiazai5{font-size:34rpx;margin-right:16rpx;}

View File

@ -0,0 +1,21 @@
var app = getApp();
Component({
properties: {
evaluate: {
type: Number,
value:0,
},
cartInfo:{
type:Object,
value:[],
},
orderId:{
type:String,
value:'',
},
},
data: {
},
methods: {
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,22 @@
<view class="orderGoods">
<view class='total'>共{{cartInfo.length}}件商品</view>
<view class='goodWrapper'>
<view class='item acea-row row-between-wrapper' wx:for="{{cartInfo}}" wx:key>
<view class='pictrue'>
<image src='{{item.productInfo.attrInfo.image}}' wx:if="{{item.productInfo.attrInfo}}"></image>
<image src='{{item.productInfo.image}}' wx:else></image>
</view>
<view class='text'>
<view class='acea-row row-between-wrapper'>
<view class='name line1'>{{item.productInfo.store_name}}</view>
<view class='num'>x {{item.cart_num}}</view>
</view>
<view class='attr line1' wx:if="{{item.productInfo.attrInfo}}">{{item.productInfo.attrInfo.suk}}</view>
<view class='money font-color' wx:if="{{item.productInfo.attrInfo}}">¥{{item.productInfo.attrInfo.price}}</view>
<view class='money font-color' wx:else>¥{{item.productInfo.price}}</view>
<navigator class='evaluate' wx:if='{{item.is_reply==0 && evaluate==3}}' hover-class="none" url='/pages/goods_comment_con/index?unique={{item.unique}}&uni={{orderId}}'>评价</navigator>
<view class='evaluate' wx:elif='{{item.is_reply==1 && evaluate==3}}'>已评价</view>
</view>
</view>
</view>
</view>

View File

@ -0,0 +1,6 @@
@import '/app.wxss';
.orderGoods{background-color:#fff;margin-top:12rpx;}
.orderGoods .total{width:100%;height:86rpx;padding:0 30rpx;border-bottom:2rpx solid #f0f0f0;font-size:30rpx;color:#282828;line-height:86rpx;}

View File

@ -0,0 +1,68 @@
var app = getApp();
Component({
properties: {
attribute: {
type: Object,
value:{}
},
attrList:{
type: Object,
value:[],
},
productAttr:{
type: Object,
value: [],
},
productSelect:{
type: Object,
value: {
image: '',
store_name: '',
price: 0,
unique: '',
stock:0,
}
},
},
data: {
attrValue:[],
attrIndex:0,
},
attached: function () {
},
methods: {
close: function () {
this.triggerEvent('myevent', {'window': false});
},
CartNumDes:function(){
this.triggerEvent('ChangeCartNum', false);
},
CartNumInt:function(){
this.triggerEvent('ChangeCartNum', true);
},
tapAttr:function(e){
//父级index
var indexw = e.currentTarget.dataset.indexw;
//子集index
var indexn = e.currentTarget.dataset.indexn;
//每次点击获得的属性
var attr = this.data.productAttr[indexw].attr_value[indexn];
//设置当前点击属性
this.data.productAttr[indexw].checked = attr['attr'];
this.setData({
productAttr: this.data.productAttr,
});
var value = this.getCheckedValue().sort().join(',');
this.triggerEvent('ChangeAttr',value);
},
getCheckedValue: function () {
return this.data.productAttr.map(function (attr) {
return attr.checked;
});
},
ResetAttr:function(){
for (var k in this.data.productAttr) this.data.productAttr[k].checked='';
this.setData({ productAttr: this.data.productAttr});
},
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,30 @@
<view class='product-window {{attribute.cartAttr==true?"on":""}}'>
<view class='textpic acea-row row-between-wrapper'>
<view class='pictrue'><image src='{{productSelect.image}}'></image></view>
<view class='text'>
<view class='line1'>{{productSelect.store_name}}</view>
<view class='money font-color'>
¥<text class='num'>{{productSelect.price}}</text>
<text class='stock'>库存: {{productSelect.stock}}</text>
</view>
</view>
<view class='iconfont icon-guanbi' bindtap='close'></view>
</view>
<view class='productWinList'>
<view class='item' wx:for='{{productAttr}}' wx:key>
<view class='title'>{{item.attr_name}}</view>
<view class='listn acea-row row-middle'>
<view class='itemn {{item.checked==itemn.attr ?"on":""}}' wx:for='{{item.attr_value}}' wx:for-item='itemn' wx:for-index='indexn' data-indexw='{{index}}' data-indexn='{{indexn}}' bindtap='tapAttr' wx:key>{{itemn.attr}}</view>
</view>
</view>
</view>
<view class='cart'>
<view class='title'>数量</view>
<view class='carnum acea-row row-left'>
<view class='reduce {{productSelect.cart_num <= 1 ? "on":""}}' bindtap='CartNumDes'>-</view>
<view class='num'>{{productSelect.cart_num}}</view>
<view class='plus {{productSelect.cart_num >= productSelect.stock || productSelect.is_on ? "on":""}}' bindtap='CartNumInt'>+</view>
</view>
</view>
</view>
<view class='mask' catchtouchmove="true" hidden='{{attribute.cartAttr==false}}' bindtap='close'></view>

View File

@ -0,0 +1,28 @@
@import '/app.wxss';
.product-window{position:fixed;bottom:0;width:100%;left:0;background-color:#fff;z-index:88;border-radius:16rpx 16rpx 0 0;padding-bottom:140rpx;transform:translate3d(0,100%,0);transition:all .3s cubic-bezier(.25,.5,.5,.9);}
.product-window.on{transform:translate3d(0,0,0);}
.product-window .textpic{padding:0 130rpx 0 30rpx;margin-top:29rpx;position:relative;}
.product-window .textpic .pictrue{width:150rpx;height:150rpx;}
.product-window .textpic .pictrue image{width:100%;height:100%;border-radius:10rpx;}
.product-window .textpic .text{width:410rpx;font-size:32rpx;color:#202020;}
.product-window .textpic .text .money{font-size:24rpx;margin-top:40rpx;}
.product-window .textpic .text .money .num{font-size:36rpx;}
.product-window .textpic .text .money .stock{color:#999;margin-left:18rpx;}
.product-window .textpic .iconfont{position:absolute;right:30rpx;top:-5rpx;font-size:35rpx;color:#8a8a8a;}
.product-window .productWinList{max-height:395rpx;overflow:auto;margin-top:36rpx;}
.product-window .productWinList .item~.item{margin-top:36rpx;}
.product-window .productWinList .item .title{font-size:30rpx;color:#999;padding:0 30rpx;}
.product-window .productWinList .item .listn{padding:0 30rpx 0 16rpx;}
.product-window .productWinList .item .listn .itemn{border:1px solid #bbb;font-size:26rpx;color:#282828;padding:7rpx 33rpx;border-radius:6rpx;margin:14rpx 0 0 14rpx;}
.product-window .productWinList .item .listn .itemn.on{color:#fff;background-color:#ff3700;border-color:#ff3700;}
.product-window .cart{margin-top:36rpx;padding:0 30rpx;}
.product-window .cart .title{font-size:30rpx;color:#999;}
.product-window .cart .carnum{height:54rpx;margin-top:24rpx;}
.product-window .cart .carnum view{border:1px solid #a4a4a4;width:84rpx;text-align:center;height:100%;line-height:54rpx;color:#a4a4a4;font-size:45rpx;}
.product-window .cart .carnum .reduce{border-right:0;border-radius:6rpx 0 0 6rpx;line-height:48rpx;}
.product-window .cart .carnum .reduce.on{border-color:#e3e3e3;color:#dedede;}
.product-window .cart .carnum .plus{border-left:0;border-radius:0 6rpx 6rpx 0;line-height:46rpx;}
.product-window .cart .carnum .plus.on{border-color:#e3e3e3;color:#dedede;}
.product-window .cart .carnum .num{color:#282828;font-size:28rpx;}

View File

@ -0,0 +1,26 @@
var app = getApp();
Component({
properties: {
imgUrls:{
type:Object,
value:[]
}
},
data: {
indicatorDots: false,
circular: true,
autoplay: false,
interval: 3000,
duration: 500,
currents: "1"
},
attached:function(){
},
methods: {
change: function (e) {
this.setData({
currents: e.detail.current + 1
})
}
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,11 @@
<view class='product-bg'>
<swiper indicator-dots="{{indicatorDots}}"
autoplay="{{autoplay}}" circular="{{circular}}" interval="{{interval}}" duration="{{duration}}" bindchange="change">
<block wx:for="{{imgUrls}}" wx:key>
<swiper-item>
<image src="{{item}}" class="slide-image"/>
</swiper-item>
</block>
</swiper>
<view class='pages'>{{currents}}/{{imgUrls.length || 1}}</view>
</view>

View File

@ -0,0 +1,4 @@
.product-bg{width:100%;height:750rpx;position:relative;}
.product-bg swiper{width:100%;height:100%;position:relative;}
.product-bg .slide-image{width:100%;height:100%;}
.product-bg .pages{position:absolute;background-color:#fff;height:34rpx;padding:0 10rpx;border-radius:3rpx;right:30rpx;bottom:30rpx;line-height:34rpx;font-size:24rpx;color:#050505;}

View File

@ -0,0 +1,21 @@
var app = getApp();
Component({
properties: {
benefit: {
type: Object,
value: [],
}
},
data: {
},
ready: function () {
},
attached: function () {
},
methods: {
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,17 @@
<view class='promotionGood'>
<block wx:for="{{benefit}}" wx:key>
<navigator class='item acea-row row-between-wrapper' url='/pages/goods_details/index?id={{item.id}}'>
<view class='pictrue'><image src='{{item.image}}'></image></view>
<view class='text'>
<view class='name line1'>{{item.store_name}}</view>
<view class='sp-money acea-row'>
<view class='moneyCon'>促销价: ¥<text class='num'>{{item.price}}</text></view>
</view>
<view class='acea-row row-between-wrapper'>
<view class='money'>日常价:¥{{item.ot_price}}</view>
<view>仅剩:{{item.stock}}{{item.unit_name}}</view>
</view>
</view>
</navigator>
</block>
</view>

View File

@ -0,0 +1,11 @@
@import '/app.wxss';
.promotionGood{padding:0 30rpx;}
.promotionGood .item{border-bottom:1rpx solid #eee;height:250rpx;}
.promotionGood .item .pictrue{width:188rpx;height:188rpx;}
.promotionGood .item .pictrue image{width:100%;height:100%;border-radius:8rpx;}
.promotionGood .item .text{font-size:24rpx;color:#999;width:472rpx;}
.promotionGood .item .text .name{font-size:30rpx;color:#333;}
.promotionGood .item .text .sp-money{margin:34rpx 0 20rpx 0;}
.promotionGood .item .text .sp-money .moneyCon{padding:0 18rpx;background-color:red;height:46rpx;line-height:46rpx;background-image:linear-gradient(to right,#ff6248 0%,#ff3e1e 100%);font-size:20rpx;color:#fff;border-radius:24rpx 3rpx 24rpx 3rpx;}
.promotionGood .item .text .sp-money .moneyCon .num{font-size:24rpx;}
.promotionGood .item .text .money{text-decoration:line-through;}

View File

@ -0,0 +1,15 @@
var app = getApp();
Component({
properties: {
host_product:{
type: Object,
value:[],
}
},
data: {
},
attached: function () {
},
methods: {
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,14 @@
<view class='recommend'>
<view class='title acea-row row-center-wrapper'>
<text class='iconfont icon-zhuangshixian'></text>
<text class='name'>为你推荐</text>
<text class='iconfont icon-zhuangshixian lefticon'></text>
</view>
<view class='recommendList acea-row row-between-wrapper'>
<navigator class='item' wx:for="{{host_product}}" wx:key url='/pages/goods_details/index?id={{item.id}}' hover-class='none'>
<view class='pictrue'><image src='{{item.image}}'></image></view>
<view class='name line1'>{{item.store_name}}</view>
<view class='money font-color'>¥<text class='num'>{{item.price}}</text></view>
</navigator>
</view>
</view>

View File

@ -0,0 +1,13 @@
@import '/app.wxss';
.recommend{background-color:#fff;}
.recommend .title{height:135rpx;font-size:28rpx;color:#282828;}
.recommend .title .name{margin:0 28rpx;}
.recommend .title .iconfont{font-size:170rpx;color:#454545;}
.recommend .title .iconfont.lefticon{transform:rotate(180deg);}
.recommend .recommendList{padding:0 30rpx;}
.recommend .recommendList .item{width:335rpx;margin-bottom:30rpx;}
.recommend .recommendList .item .pictrue{width:100%;height:335rpx;}
.recommend .recommendList .item .pictrue image{width:100%;height:100%;border-radius:6rpx;}
.recommend .recommendList .item .name{font-size:28rpx;color:#282828;margin-top:20rpx;}
.recommend .recommendList .item .money{font-size:20rpx;margin-top:8rpx;}
.recommend .recommendList .item .money .num{font-size:28rpx;}

View File

@ -0,0 +1,27 @@
var app = getApp();
Component({
properties: {
sharePacket:{
type:Object,
value:{
isState: true,
priceName:'',
}
}
},
data: {
},
attached: function () {
},
methods: {
closeShare:function(){
this.setData({
"sharePacket.isState": true
})
},
goShare:function(){
this.triggerEvent('listenerActionSheet');
},
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,13 @@
<view class='sharing-packets {{sharePacket.isState==true?"on":""}}'>
<view class='iconfont icon-guanbi' bindtap='closeShare'></view>
<view class='line'></view>
<view class='sharing-con' bindtap='goShare'>
<image src='/images/red-packets.png'></image>
<view class='text font-color'>
<view>会员分享返</view>
<view class='money'><text class='label'>¥</text>{{sharePacket.priceName}}</view>
<view class='tip'>下单即返佣金</view>
<view class='shareBut'>立即分享</view>
</view>
</view>
</view>

View File

@ -0,0 +1,12 @@
@import '/app.wxss';
.sharing-packets{position:fixed;right:30rpx;top:900rpx;z-index:5;transition:all 0.3s ease-in-out 0s;opacity:1;transform: scale(1);}
.sharing-packets.on{transform: scale(0);opacity:0;}
.sharing-packets .iconfont{width:44rpx;height:44rpx;border-radius:50%;text-align:center;line-height:44rpx;background-color:#999;font-size:20rpx;color:#fff;margin:0 auto;box-sizing:border-box;padding-left:1px;}
.sharing-packets .line{width:2rpx;height:40rpx;background-color:#999;margin:0 auto;}
.sharing-packets .sharing-con{width:187rpx;height:210rpx;position:relative;}
.sharing-packets .sharing-con image{width:100%;height:100%;}
.sharing-packets .sharing-con .text{position:absolute;top:30rpx;font-size:20rpx;width:100%;text-align:center;}
.sharing-packets .sharing-con .text .money{font-size:32rpx;font-weight:bold;margin-top:5rpx;}
.sharing-packets .sharing-con .text .money .label{font-size:20rpx;}
.sharing-packets .sharing-con .text .tip{font-size:18rpx;color:#999;margin-top:5rpx;}
.sharing-packets .sharing-con .text .shareBut{font-size:22rpx;color:#fff;margin-top:18rpx;height:50rpx;line-height:50rpx;}

View File

@ -0,0 +1,27 @@
// components/swiper/index.js
var app = getApp();
Component({
properties: {
imgUrls: {
type: Object,
value: []
}
},
data: {
circular: true,
autoplay: true,
interval: 3000,
duration: 500,
currentSwiper: 0
},
attached: function () {
console.log(this.data.imgUrls);
},
methods: {
swiperChange: function (e) {
this.setData({
currentSwiper: e.detail.current
})
},
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"component": true
}

View File

@ -0,0 +1,12 @@
<view class='swiper'>
<swiper autoplay="{{autoplay}}" circular="{{circular}}" interval="{{interval}}" duration="{{duration}}" bindchange="swiperChange">
<block wx:for="{{imgUrls}}" wx:key>
<swiper-item>
<navigator url="{{item.link}}" style='width:100%;height:100%;' hover-class='none'><image src="{{item.img}}" class="slide-image"/></navigator>
</swiper-item>
</block>
</swiper>
<view class="dots acea-row">
<view class="dot {{index == currentSwiper ? 'active' : ''}}" wx:for="{{imgUrls}}" wx:key></view>
</view>
</view>

View File

@ -0,0 +1,7 @@
@import '/app.wxss';
.swiper{width:100%;height:282rpx;position:relative;}
.swiper swiper{width:100%;height:100%;position:relative;}
.swiper swiper .slide-image{width:100%;height:100%;}
.swiper .dots{position:absolute;right:40rpx;bottom:20rpx;}
.swiper .dots .dot{width:12rpx;height:12rpx;border:2rpx solid #fff;border-radius:50%;margin-right:15rpx;}
.swiper .dots .dot.active{border-color:#e93323;background-color:#e93323;}

View File

@ -0,0 +1,24 @@
var app = getApp();
Component({
properties: {
reply:{
type:Object,
value:[],
}
},
data: {
},
attached: function () {
},
methods: {
getpreviewImage:function(e){
var dataset=e.currentTarget.dataset;
wx.previewImage({
urls: this.data.reply[dataset.index].pics,
current: this.data.reply[dataset.index].pics[dataset.pic_index],
});
},
}
})

View File

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

View File

@ -0,0 +1,24 @@
<view class='evaluateWtapper'>
<view class='evaluateItem' wx:for="{{reply}}" wx:key>
<view class='pic-text acea-row row-middle'>
<view class='pictrue'><image src='{{item.avatar}}'></image></view>
<view class='acea-row row-middle'>
<view class='name line1'>{{item.nickname}}</view>
<view class='start star{{item.star}}'></view>
</view>
</view>
<view class='time'>{{item.add_time}} {{item.suk}}</view>
<view class='evaluate-infor'>{{item.comment}}</view>
<view class='imgList acea-row'>
<view class='pictrue' wx:for="{{item.pics}}" wx:for-item="items" wx:for-index='pic_index' wx:key>
<image wx:if="{{items}}" src='{{items}}' data-index="{{index}}" data-pic_index='{{pic_index}}' bindtap='getpreviewImage'></image>
</view>
</view>
<view class='reply' wx:if='{{item.merchant_reply_content}}'><text class='font-color'>店小二</text>:{{item.merchant_reply_content}}</view>
</view>
</view>

View File

@ -0,0 +1,14 @@
@import '/app.wxss';
.evaluateWtapper .evaluateItem{background-color:#fff;padding-bottom:25rpx;}
.evaluateWtapper .evaluateItem~.evaluateItem{border-top:1rpx solid #f5f5f5;}
.evaluateWtapper .evaluateItem .pic-text{font-size:26rpx;color:#282828;height:95rpx;padding:0 30rpx;}
.evaluateWtapper .evaluateItem .pic-text .pictrue{width:56rpx;height:56rpx;margin-right:20rpx;}
.evaluateWtapper .evaluateItem .pic-text .pictrue image{width:100%;height:100%;border-radius:50%;}
.evaluateWtapper .evaluateItem .pic-text .name{max-width:450rpx;margin-right:15rpx;}
.evaluateWtapper .evaluateItem .time{font-size:24rpx;color:#82848f;padding:0 30rpx;}
.evaluateWtapper .evaluateItem .evaluate-infor{font-size:28rpx;color:#282828;margin-top:19rpx;padding:0 30rpx;}
.evaluateWtapper .evaluateItem .imgList{padding:0 30rpx 0 15rpx;margin-top:25rpx;}
.evaluateWtapper .evaluateItem .imgList .pictrue{width:156rpx;height:156rpx;margin:0 0 15rpx 15rpx;}
.evaluateWtapper .evaluateItem .imgList .pictrue image{width:100%;height:100%;}
.evaluateWtapper .evaluateItem .reply{font-size:26rpx;color:#454545;background-color:#f7f7f7;border-radius:5rpx;margin:20rpx 30rpx 0 30rpx;padding:30rpx;position:relative;}
.evaluateWtapper .evaluateItem .reply::before{content: "";width: 0;height: 0;border-left:0.3rem solid transparent;border-right:0.3rem solid transparent;border-bottom:0.4rem solid #f7f7f7;position:absolute;top:-0.4rem;left:2rem;}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

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