merge
335
apis/index.js
@@ -1,169 +1,168 @@
|
|||||||
|
/**
|
||||||
/**
|
* Web唐明明
|
||||||
* Web唐明明
|
* 匆匆数载恍如梦,岁月迢迢华发增。
|
||||||
* 匆匆数载恍如梦,岁月迢迢华发增。
|
* 碌碌无为枉半生,一朝惊醒万事空。
|
||||||
* 碌碌无为枉半生,一朝惊醒万事空。
|
*/
|
||||||
*/
|
|
||||||
|
import store from '@/store'
|
||||||
import store from '@/store'
|
import router from '../router'
|
||||||
import router from '../router'
|
|
||||||
|
// 基础配置
|
||||||
// 基础配置
|
const config = {
|
||||||
const config = {
|
apiUrl : 'https://api.gongli.vip/api/', // 正式环境
|
||||||
apiUrl : 'https://api.gongli.vip/api/', // 正式环境
|
// apiUrl: 'http://api.gl.shangkelian.cn/api/', // 测试
|
||||||
// apiUrl : 'http://api.gl.shangkelian.cn/api/', // 测试
|
timeout: 60000
|
||||||
timeout : 60000
|
}
|
||||||
}
|
|
||||||
|
let loginHintState = false
|
||||||
let loginHintState = false
|
|
||||||
|
// 网络请求
|
||||||
// 网络请求
|
const request = (parameter, hideLoding = true) => {
|
||||||
const request = (parameter, hideLoding = true) => {
|
// 检查url配置
|
||||||
// 检查url配置
|
if (parameter.url === 'undefined' || parameter.url === '') {
|
||||||
if(parameter.url === 'undefined' || parameter.url === ''){
|
uni.showToast({
|
||||||
uni.showToast({
|
title: '请求地址不能为空',
|
||||||
title: '请求地址不能为空',
|
icon: 'none'
|
||||||
icon : 'none'
|
})
|
||||||
})
|
return
|
||||||
return
|
}
|
||||||
}
|
// 注入header
|
||||||
// 注入header
|
config.header = {
|
||||||
config.header = {
|
'Accept': 'application/json',
|
||||||
'Accept': 'application/json',
|
'Authorization': store.getters.getToken || uni.getStorageSync('token')
|
||||||
'Authorization': store.getters.getToken || uni.getStorageSync('token')
|
}
|
||||||
}
|
// 加载提示
|
||||||
// 加载提示
|
if (!hideLoding) uni.showLoading({
|
||||||
if(!hideLoding) uni.showLoading({
|
title: '加载中',
|
||||||
title: '加载中',
|
mask: true
|
||||||
mask : true
|
});
|
||||||
});
|
|
||||||
|
// 请求实例
|
||||||
// 请求实例
|
return new Promise((resolve, reject) => {
|
||||||
return new Promise((resolve, reject) => {
|
uni.request({
|
||||||
uni.request({
|
url: config.apiUrl + parameter.url,
|
||||||
url : config.apiUrl + parameter.url,
|
timeout: config.timeout,
|
||||||
timeout : config.timeout,
|
header: config.header || {},
|
||||||
header : config.header || {},
|
data: parameter.data || {},
|
||||||
data : parameter.data || {},
|
method: parameter.method || 'GET',
|
||||||
method : parameter.method || 'GET',
|
success: res => {
|
||||||
success : res => {
|
if (res.header.Authorization) {
|
||||||
if (res.header.Authorization){
|
updateToken('token', res.header.Authorization)
|
||||||
updateToken('token', res.header.Authorization)
|
}
|
||||||
}
|
if (res.statusCode === 200) {
|
||||||
if(res.statusCode === 200){
|
uni.hideLoading()
|
||||||
uni.hideLoading()
|
const resolveData = res.data
|
||||||
const resolveData = res.data
|
if (resolveData.status_code === 200) {
|
||||||
if(resolveData.status_code === 200) {
|
resolve(resolveData.data)
|
||||||
resolve(resolveData.data)
|
return
|
||||||
return
|
}
|
||||||
}
|
if (resolveData.status_code === 401) {
|
||||||
if(resolveData.status_code === 401) {
|
loginHint()
|
||||||
loginHint()
|
return
|
||||||
return
|
}
|
||||||
}
|
reject(resolveData)
|
||||||
reject(resolveData)
|
return
|
||||||
return
|
}
|
||||||
}
|
errToast(res.statusCode)
|
||||||
errToast(res.statusCode)
|
},
|
||||||
},
|
fail(err) {
|
||||||
fail(err) {
|
uni.showToast({
|
||||||
uni.showToast({
|
title: '网络错误,请检查您设备网络状态',
|
||||||
title: '网络错误,请检查您设备网络状态',
|
icon: 'none'
|
||||||
icon : 'none'
|
})
|
||||||
})
|
}
|
||||||
}
|
})
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
}
|
|
||||||
|
// 文件上传
|
||||||
// 文件上传
|
const uploading = (paths) => {
|
||||||
const uploading = (paths) => {
|
uni.showLoading({
|
||||||
uni.showLoading({
|
title: '上传中',
|
||||||
title: '上传中',
|
mask: true
|
||||||
mask : true
|
});
|
||||||
});
|
// 注入header
|
||||||
// 注入header
|
config.header = {
|
||||||
config.header = {
|
'Accept': 'application/json',
|
||||||
'Accept': 'application/json',
|
'Authorization': store.getters.getToken || ''
|
||||||
'Authorization': store.getters.getToken || ''
|
}
|
||||||
}
|
// 上传图片
|
||||||
// 上传图片
|
return new Promise((resolve, reject) => {
|
||||||
return new Promise((resolve, reject) => {
|
uni.uploadFile({
|
||||||
uni.uploadFile({
|
url: config.apiUrl + 'storage/uploads',
|
||||||
url : config.apiUrl + 'storage/uploads',
|
files: paths,
|
||||||
files : paths,
|
header: config.header || {},
|
||||||
header : config.header || {},
|
success: res => {
|
||||||
success : res=>{
|
if (res.statusCode === 200) {
|
||||||
if(res.statusCode === 200){
|
uni.hideLoading()
|
||||||
uni.hideLoading()
|
let updData = JSON.parse(res.data)
|
||||||
let updData = JSON.parse(res.data)
|
if (updData.status_code === 200) {
|
||||||
if(updData.status_code === 200){
|
resolve(updData.data)
|
||||||
resolve(updData.data)
|
return
|
||||||
return
|
}
|
||||||
}
|
reject(updData)
|
||||||
reject(updData)
|
return
|
||||||
return
|
}
|
||||||
}
|
errToast(res.statusCode)
|
||||||
errToast(res.statusCode)
|
}
|
||||||
}
|
})
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
}
|
|
||||||
|
// 处理一些http请求错误提示
|
||||||
// 处理一些http请求错误提示
|
const errToast = (code) => {
|
||||||
const errToast = (code) => {
|
switch (code) {
|
||||||
switch (code){
|
case 404:
|
||||||
case 404:
|
uni.showToast({
|
||||||
uni.showToast({
|
title: code + '接口不存在,请联系系统管理员',
|
||||||
title: code + '接口不存在,请联系系统管理员',
|
icon: 'none'
|
||||||
icon : 'none'
|
})
|
||||||
})
|
break;
|
||||||
break;
|
case 405:
|
||||||
case 405:
|
uni.showToast({
|
||||||
uni.showToast({
|
title: code + '请检查接口请求方式错误',
|
||||||
title: code + '请检查接口请求方式错误',
|
icon: 'none'
|
||||||
icon : 'none'
|
})
|
||||||
})
|
break;
|
||||||
break;
|
case 500:
|
||||||
case 500:
|
uni.showToast({
|
||||||
uni.showToast({
|
title: code + '服务端错误,请检查服务器信息',
|
||||||
title: code + '服务端错误,请检查服务器信息',
|
icon: 'none'
|
||||||
icon : 'none'
|
})
|
||||||
})
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
// 更新token
|
||||||
// 更新token
|
const updateToken = (token) => {
|
||||||
const updateToken = (token) => {
|
store.commit('setToken', token)
|
||||||
store.commit('setToken', token)
|
// 清除退出登录标识
|
||||||
// 清除退出登录标识
|
uni.removeStorageSync('isnew')
|
||||||
uni.removeStorageSync('isnew')
|
}
|
||||||
}
|
|
||||||
|
// 处理登录提示
|
||||||
// 处理登录提示
|
const loginHint = () => {
|
||||||
const loginHint = () => {
|
if (loginHintState) return
|
||||||
if( loginHintState ) return
|
if (!loginHintState) loginHintState = true
|
||||||
if(!loginHintState) loginHintState = true
|
updateToken('')
|
||||||
updateToken('')
|
uni.showModal({
|
||||||
uni.showModal({
|
title: '登录提示',
|
||||||
title: '登录提示',
|
content: '您的登录信息已过期,请重新登录',
|
||||||
content: '您的登录信息已过期,请重新登录',
|
confirmColor: '#8b64fd',
|
||||||
confirmColor: '#8b64fd',
|
showCancel: false,
|
||||||
showCancel:false,
|
success: res => {
|
||||||
success: res=> {
|
loginHintState = false
|
||||||
loginHintState = false
|
if (res.confirm) {
|
||||||
if (res.confirm) {
|
uni.reLaunch({
|
||||||
uni.reLaunch({
|
url: '/pages/auth/auth'
|
||||||
url:'/pages/auth/auth'
|
})
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
})
|
}
|
||||||
}
|
|
||||||
|
export {
|
||||||
export {
|
request,
|
||||||
request,
|
uploading,
|
||||||
uploading,
|
config
|
||||||
config
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,23 @@ const dtPAY = (orderNo,password) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const collagePAY = (orderNo,password) => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/pay/' + orderNo + '/collage/account',
|
||||||
|
method:'post',
|
||||||
|
data: {
|
||||||
|
type: 'app',
|
||||||
|
transfer_password:password
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
wxPAY,
|
wxPAY,
|
||||||
alPAY,
|
alPAY,
|
||||||
dtPAY,
|
dtPAY,
|
||||||
payIndex,
|
payIndex,
|
||||||
|
collagePAY,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,14 +40,10 @@ const shopsDetail = (shopId) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 店铺商品
|
// 店铺商品
|
||||||
const shopsGoods = (shopId, categoryId,page) => {
|
const shopsGoods = (data) => {
|
||||||
return request({
|
return request({
|
||||||
url: 'mall/goods',
|
url: 'mall/goods',
|
||||||
data: {
|
data: data
|
||||||
shop_id:shopId,
|
|
||||||
category_id:categoryId,
|
|
||||||
page:page,
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,6 +62,21 @@ const buy = data => {
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 拼团商品确认页面
|
||||||
|
const buyPin = data => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/buy/collages',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 拼团商品确认下单
|
||||||
|
const collages = data => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/buy/collages',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 商品下单
|
// 商品下单
|
||||||
const verify = data => {
|
const verify = data => {
|
||||||
@@ -83,6 +94,21 @@ const classify = id => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 拼团成功后展示页面
|
||||||
|
const repages = id => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/collages/' + id + '/repages'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 商城所有分类
|
||||||
|
const categories = id => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/categories/lists'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
mall,
|
mall,
|
||||||
goods,
|
goods,
|
||||||
@@ -91,6 +117,10 @@ export {
|
|||||||
shopsGoods,
|
shopsGoods,
|
||||||
lists,
|
lists,
|
||||||
buy,
|
buy,
|
||||||
|
buyPin,
|
||||||
verify,
|
verify,
|
||||||
classify
|
collages,
|
||||||
|
repages,
|
||||||
|
classify,
|
||||||
|
categories
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,10 +51,21 @@ const relationsVerify = (invite) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 我的卡券
|
||||||
|
const myCard = (data) => {
|
||||||
|
data.receive = 'desc'
|
||||||
|
return request({
|
||||||
|
url: 'mall/shops/users',
|
||||||
|
data:data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
info,
|
info,
|
||||||
chainSeed,
|
chainSeed,
|
||||||
invitationCode,
|
invitationCode,
|
||||||
relationsBind,
|
relationsBind,
|
||||||
relationsVerify
|
relationsVerify,
|
||||||
|
myCard
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const vipPay = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取支付信息
|
// 获取支付信息
|
||||||
const payInfo = (orderId) => {
|
const payInfo = (orderId) => {
|
||||||
return request({
|
return request({
|
||||||
url: 'user/identities/pay/' + orderId + '/wechat'
|
url: 'user/identities/pay/' + orderId + '/wechat'
|
||||||
@@ -36,6 +36,28 @@ const agreement = (id) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 店铺会员
|
||||||
|
const shopVipInfo = (id) => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/shops/'+id+'/identities'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//开通店铺会员
|
||||||
|
const shopVipCreate = (id,identity) => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/shops/'+id+'/identities/'+identity,
|
||||||
|
method:'POST'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开通店铺会员微信支付
|
||||||
|
const shopVipWeChat = (id) => {
|
||||||
|
return request({
|
||||||
|
url: 'mall/shops/identities/wechat/'+id,
|
||||||
|
method:'POST'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
@@ -43,4 +65,7 @@ export {
|
|||||||
vipPay,
|
vipPay,
|
||||||
payInfo,
|
payInfo,
|
||||||
agreement,
|
agreement,
|
||||||
|
shopVipInfo,
|
||||||
|
shopVipCreate,
|
||||||
|
shopVipWeChat
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,16 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="goods-item">
|
<view class="goods-item">
|
||||||
<image
|
<image :src="item.cover" mode="aspectFill" class="goods-cover" />
|
||||||
src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202003%2F18%2F20200318231340_shbab.thumb.1000_0.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1662167784&t=893e1b78d1563aa0a9a65f4d14f21643"
|
|
||||||
mode="aspectFill" class="goods-cover" />
|
|
||||||
<view class="goods-info">
|
<view class="goods-info">
|
||||||
<view class="_title">北欧抱枕靠垫沙发垫办公室腰靠等功能弃权</view>
|
<view class="_title">{{item.name}}</view>
|
||||||
<view class="_des">金凯来京东店 </view>
|
<view class="_des">{{item.shop.name}} </view>
|
||||||
<view class="_pin">
|
<view class="_pin">
|
||||||
<view class="_has">
|
<view class="_has" v-if="item.sales>0"> <image src="/static/book/fire.png" mode="widthFix" class="fire" /> 已拼 {{item.sales}} 件 </view>
|
||||||
<image src="/static/book/fire.png" mode="widthFix" class="fire" /> 已拼1件
|
<view class="tuan">{{item.active.number}}人团</view>
|
||||||
</view>
|
|
||||||
<view class="tuan">2人团</view>
|
|
||||||
</view>
|
</view>
|
||||||
<view class="price">
|
<view class="price">
|
||||||
<view class="money"> ¥160.00 </view>
|
<view class="money">{{item.active.price}} <span>DT积分</span> </view>
|
||||||
<view class="now-pin" @click="goPin(90)">马上拼团</view>
|
<view class="now-pin" @click="goPin(item.goods_id)">马上拼团</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -91,7 +87,8 @@
|
|||||||
color: #d81e06;
|
color: #d81e06;
|
||||||
background-color: rgba($color: $text-price, $alpha: 0.1);
|
background-color: rgba($color: $text-price, $alpha: 0.1);
|
||||||
padding: 4rpx 10rpx;
|
padding: 4rpx 10rpx;
|
||||||
border-radius: 30rpx;
|
border-radius: 30rpx;
|
||||||
|
margin-right: $margin;
|
||||||
|
|
||||||
image {
|
image {
|
||||||
width: 24rpx;
|
width: 24rpx;
|
||||||
@@ -100,9 +97,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tuan {
|
|
||||||
margin-left: $margin;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.price {
|
.price {
|
||||||
@@ -116,7 +110,12 @@
|
|||||||
.money {
|
.money {
|
||||||
font-size: 34rpx;
|
font-size: 34rpx;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: #d81e06;
|
color: #d81e06;
|
||||||
|
span{
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.now-pin {
|
.now-pin {
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
# 使用方法
|
|
||||||
```
|
|
||||||
<x-pay-pwd
|
|
||||||
ref="xPayPwd"
|
|
||||||
:type="1"
|
|
||||||
:maskClick="true"
|
|
||||||
top="unset"
|
|
||||||
bottom="0rpx"
|
|
||||||
:showClose="false"
|
|
||||||
@change="change"
|
|
||||||
:showHead="true"
|
|
||||||
headText="请输入支付密码"
|
|
||||||
>
|
|
||||||
<template #center>
|
|
||||||
<button @click="clear">插槽</button>
|
|
||||||
</template>
|
|
||||||
</x-pay-pwd>
|
|
||||||
```
|
|
||||||
```
|
|
||||||
export default {
|
|
||||||
methods: {
|
|
||||||
// 监听输入框内容变化
|
|
||||||
change({password}){
|
|
||||||
console.log(password)
|
|
||||||
},
|
|
||||||
// 清空输入框内容,一般用于密码输错手动清空
|
|
||||||
clear(){
|
|
||||||
this.$refs.xPayPwd._clearKey();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
# 属性
|
|
||||||
| 字段 | 类型 | 默认 | 描述 |
|
|
||||||
| --------- | ------- | -------------- | ---------------------------------------- |
|
|
||||||
| type | Number | 1 | 0原生键盘 1自定义键盘 |
|
|
||||||
| maskClick | Boolean | true | 是否允许点击蒙版 |
|
|
||||||
| top | String | 20vh | 中间内容的top值,为absolute的top值 |
|
|
||||||
| bottom | String | 0rpx | 中间内容的bottom值,为absolute的bottom值 |
|
|
||||||
| showClose | Boolean | true | 是否显示关闭按钮 |
|
|
||||||
| showHead | Boolean | true | 是否显示标题 |
|
|
||||||
| headText | String | 请输入支付密码 | 标题文本 |
|
|
||||||
# 事件
|
|
||||||
|
|
||||||
| 事件名 | 默认参数 | 描述 |
|
|
||||||
| ------ | ---------- | -------------------------------- |
|
|
||||||
| change | {password} | 监听内容输入,参数返回输入的内容 |
|
|
||||||
|
|
||||||
# 组件方法
|
|
||||||
| 方法名 | 描述 |
|
|
||||||
| ------ | -------------------------------- |
|
|
||||||
| _open | 打开弹窗 |
|
|
||||||
| _close | 关闭弹窗 |
|
|
||||||
| _clearnKey | 请空输入内容 |
|
|
||||||
|
|
||||||
# 注意
|
|
||||||
|
|
||||||
```
|
|
||||||
ios下输入框不会自动获取焦点,需要手动点击输入区域
|
|
||||||
```
|
|
||||||
|
|
||||||
# 参与贡献
|
|
||||||
+ xueshuai(xueshuai_12@163.com)
|
|
||||||
+ Email:xueshuai_12@163.com
|
|
||||||
+ GitHub:GitHub地址
|
|
||||||
+ QQ交流群:1063233592
|
|
||||||
+ 个人博客:(薛小帅)[http://blog.xueshuai.top]
|
|
||||||
+ 个人公众号:叮当Ding
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
184
components/vip-goods-item/index.vue
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
<template>
|
||||||
|
<view class="goods-item">
|
||||||
|
<view class="bg"> {{item.shop_vip.message}} </view>
|
||||||
|
<image :src="item.cover" mode="aspectFill" class="goods-cover" />
|
||||||
|
<view class="tags"> VIP </view>
|
||||||
|
<view class="goods-info">
|
||||||
|
<view class="_title">{{item.name}}</view>
|
||||||
|
<view class="_des"> {{item.shop.name}} </view>
|
||||||
|
<view class="_pin" v-if="item.sales>0">
|
||||||
|
<view class="_has">
|
||||||
|
<image src="/static/book/fire.png" mode="widthFix" class="fire" /> 已换购 {{item.sales}} 件
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="price">
|
||||||
|
<view class="money">
|
||||||
|
{{item.price.price_min}} <span>DT积分</span>
|
||||||
|
<span class='del'>{{item.original_price}} DT积分</span>
|
||||||
|
</view>
|
||||||
|
<view class="now-pin" @click="goPin(item.goods_id)">立即领取</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
item: {
|
||||||
|
type: Object,
|
||||||
|
default: {},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goPin(id) {
|
||||||
|
this.$emit('goPin', id)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.goods-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
padding: $padding;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
position: relative;
|
||||||
|
z-index: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.bg {
|
||||||
|
position: absolute;
|
||||||
|
top: -40rpx;
|
||||||
|
right: -10rpx;
|
||||||
|
opacity: 0.05;
|
||||||
|
font-size: 130rpx;
|
||||||
|
color: #999;
|
||||||
|
z-index: 1;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tags {
|
||||||
|
position: absolute;
|
||||||
|
top: 6rpx;
|
||||||
|
left: -54rpx;
|
||||||
|
background: #d81e06;
|
||||||
|
color: #fff;
|
||||||
|
width: 150rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding: 4rpx 0;
|
||||||
|
text-align: center;
|
||||||
|
transform: rotate(-45deg);
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing: 2rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.goods-cover {
|
||||||
|
width: 160rpx;
|
||||||
|
height: 160rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.goods-info {
|
||||||
|
width: calc(100% - 160rpx - 30rpx);
|
||||||
|
padding-left: $padding;
|
||||||
|
|
||||||
|
._title {
|
||||||
|
overflow: hidden;
|
||||||
|
font-size: 30rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
._des {
|
||||||
|
font-size: 26rpx;
|
||||||
|
padding: 10rpx 0;
|
||||||
|
margin-bottom: 4rpx;
|
||||||
|
color: #4f300a;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
._pin {
|
||||||
|
font-size: 26rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: $text-gray;
|
||||||
|
|
||||||
|
._has {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: #d81e06;
|
||||||
|
background-color: rgba($color: $text-price, $alpha: 0.1);
|
||||||
|
padding: 4rpx 10rpx;
|
||||||
|
border-radius: 30rpx;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 24rpx;
|
||||||
|
height: 24rpx;
|
||||||
|
margin-right: 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tuan {
|
||||||
|
margin-left: $margin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding-top: 20rpx;
|
||||||
|
|
||||||
|
.money {
|
||||||
|
font-size: 34rpx;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #d81e06;
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.del {
|
||||||
|
text-decoration: line-through;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.now-pin {
|
||||||
|
background-color: #d81e06;
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 6rpx 20rpx;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -47,6 +47,9 @@
|
|||||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||||
|
|||||||
87
pages.json
@@ -154,9 +154,21 @@
|
|||||||
"path": "pages/store/list",
|
"path": "pages/store/list",
|
||||||
"name": "StoreList",
|
"name": "StoreList",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "商品",
|
"navigationBarTitleText": "更多商品",
|
||||||
"navigationBarBackgroundColor": "#FFFFFF",
|
"navigationBarBackgroundColor": "#FFFFFF",
|
||||||
"enablePullDownRefresh": true
|
"enablePullDownRefresh": true,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": {
|
||||||
|
"backgroundColor": "#fff",
|
||||||
|
"buttons": [{
|
||||||
|
"float": "right",
|
||||||
|
"text": "\ue603",
|
||||||
|
"fontSrc": "/static/iconfont.ttf",
|
||||||
|
"color": "#000",
|
||||||
|
"fontSize": "20px"
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -447,7 +459,7 @@
|
|||||||
"color": "#696969",
|
"color": "#696969",
|
||||||
"type": "none",
|
"type": "none",
|
||||||
"fontSrc": "/static/fonts/iconfont1.ttf",
|
"fontSrc": "/static/fonts/iconfont1.ttf",
|
||||||
"text": "\ue608" //小相机
|
"text": "\ue608"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -520,16 +532,16 @@
|
|||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "公告详情",
|
"navigationBarTitleText": "公告详情",
|
||||||
"enablePullDownRefresh": false,
|
"enablePullDownRefresh": false,
|
||||||
"navigationBarBackgroundColor": "#FFFFFF",
|
"navigationBarBackgroundColor": "#FFFFFF",
|
||||||
"app-plus": {
|
"app-plus": {
|
||||||
"titleNView": {
|
"titleNView": {
|
||||||
"buttons": [{
|
"buttons": [{
|
||||||
"text": "分享",
|
"text": "分享",
|
||||||
"fontSize": "14",
|
"fontSize": "14",
|
||||||
"width": "60px",
|
"width": "60px",
|
||||||
"color": "#333"
|
"color": "#333"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
@@ -541,6 +553,43 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
,{
|
||||||
|
"path" : "pages/store/vip/index/index",
|
||||||
|
"style" :
|
||||||
|
{
|
||||||
|
"navigationBarTitleText": "***店铺会员",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
,{
|
||||||
|
"path" : "pages/user/my-card/my-card",
|
||||||
|
"name": "MyCard",
|
||||||
|
"style" :
|
||||||
|
{
|
||||||
|
"navigationBarTitleText": "我的卡券",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
,{
|
||||||
|
"path" : "pages/group-book/success/success",
|
||||||
|
"style" :
|
||||||
|
{
|
||||||
|
"navigationBarTitleText": "拼单更多",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
,{
|
||||||
|
"path" : "pages/store/vip-list/vip-list",
|
||||||
|
"name": "VipList",
|
||||||
|
"style" :
|
||||||
|
{
|
||||||
|
"navigationBarTitleText": "VIP换购中心",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"tabBar": {
|
"tabBar": {
|
||||||
"borderStyle": "white",
|
"borderStyle": "white",
|
||||||
@@ -580,14 +629,14 @@
|
|||||||
"easycom": {
|
"easycom": {
|
||||||
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
|
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
|
||||||
},
|
},
|
||||||
"condition" : { //模式配置,仅开发期间生效
|
"condition" : {
|
||||||
"current": 0, //当前激活的模式(list 的索引项)
|
"current": 0,
|
||||||
"list": [
|
"list": [
|
||||||
{
|
{
|
||||||
"name": "", //模式名称
|
"name": "",
|
||||||
"path": "", //启动页面,必选
|
"path": "",
|
||||||
"query": "" //启动参数,在页面的onLoad函数里面得到
|
"query": ""
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<u-empty
|
<u-empty
|
||||||
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
||||||
textColor="#999"
|
textColor="#999"
|
||||||
text="暂无任何拼单商品~"
|
text="暂无拼单商品~"
|
||||||
/>
|
/>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|||||||
235
pages/group-book/success/success.vue
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
<template>
|
||||||
|
<view class="pinSuccess">
|
||||||
|
<view class="count-down">
|
||||||
|
<u-count-down ref="countDown" :time="downTime" format="HH:mm:ss" :autoStart="true" millisecond/>
|
||||||
|
</view>
|
||||||
|
<view class="title"> 还差 <span>{{surplus}}</span> 人,赶紧邀请好友来拼单吧 </view>
|
||||||
|
<view class="btn invite"> 邀请好友拼单 </view>
|
||||||
|
<view class="btn index" @click="goIndex"> 去首页逛逛</view>
|
||||||
|
<view class="goodInfo">
|
||||||
|
<view class="avatars">
|
||||||
|
<block v-for="(item,index) in details" :key='index'>
|
||||||
|
<image class="avatar pin" :src="item.cover" mode="aspectFill" />
|
||||||
|
</block>
|
||||||
|
<image class="wen" src="/static/book/wen.png" mode="aspectFill" />
|
||||||
|
</view>
|
||||||
|
<block>
|
||||||
|
<view class="orderInfo">
|
||||||
|
<view class="left"> 订单详情 </view>
|
||||||
|
<view class="right" @click="goDetail">
|
||||||
|
<view class="right-title"> {{goodName}} </view>
|
||||||
|
<u-icon name="arrow-right" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="orderInfo">
|
||||||
|
<view class="left"> 拼单规则 </view>
|
||||||
|
<view class="right">
|
||||||
|
<view class="right-title">人满发货 · 人不满退款 · 只能拼一次 </view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
repages
|
||||||
|
} from '@/apis/interfaces/store.js'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
goodName: '',
|
||||||
|
details: [],
|
||||||
|
downTime: 0,
|
||||||
|
surplus: 1,
|
||||||
|
order: {}, // order 是{} 标识不是我的订单,否则就是我的订单可以跳转订单详情
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
repages(this.$Route.query.id).then(res => {
|
||||||
|
this.order = res.order
|
||||||
|
this.goodName = res.order.goods.name
|
||||||
|
this.downTime = res.share.down * 1000
|
||||||
|
this.surplus = res.share.surplus
|
||||||
|
this.details = res.share.details
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: "none",
|
||||||
|
mask: true,
|
||||||
|
duration: 3000
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onHide() {
|
||||||
|
try {
|
||||||
|
if(this.$refs.countDown){
|
||||||
|
this.$refs.countDown.pause()
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
uni.showToast({
|
||||||
|
title: err,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goIndex() {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/store/index'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
goDetail(){
|
||||||
|
if(!this.order.order_no){
|
||||||
|
console.log('不是我的跳商品详情')
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/store/goods?id='+this.order.goods.goods_id
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
console.log('是我的跳转订单详情')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.pinSuccess {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.count-down {
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
border-radius: 4rpx;
|
||||||
|
padding: 10rpx $padding;
|
||||||
|
margin-top: $margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 38rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: $margin * 2;
|
||||||
|
|
||||||
|
span {
|
||||||
|
color: $main-color;
|
||||||
|
font-size: 42rpx;
|
||||||
|
padding: 0 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 80%;
|
||||||
|
background-color: $main-color;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: $padding - 4;
|
||||||
|
font-size: 34rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
margin-top: $margin;
|
||||||
|
border: solid $main-color 3rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.invite {
|
||||||
|
margin-top: $margin + 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.index {
|
||||||
|
background-color: rgba($color: #fff, $alpha: 1.0);
|
||||||
|
color: $main-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.goodInfo {
|
||||||
|
border-top: solid 20rpx #f9f9f9;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: $margin + 20;
|
||||||
|
padding: $padding + 10;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.avatars {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
border-bottom: solid 1rpx #f9f9f9;
|
||||||
|
padding-bottom: $padding;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 90rpx;
|
||||||
|
height: 90rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin: 10rpx 20rpx;
|
||||||
|
border: solid 2rpx #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.me {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
content: '我';
|
||||||
|
border-radius: 20rpx;
|
||||||
|
background: $main-color;
|
||||||
|
padding: 4rpx 34rpx;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pin {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
content: '拼主';
|
||||||
|
// border-radius: 20rpx;
|
||||||
|
background: orange;
|
||||||
|
padding: 4rpx 0;
|
||||||
|
font-size: 20rpx;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.orderInfo {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 30rpx 0;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color: #666;
|
||||||
|
border-bottom: solid 1rpx #f9f9f9;
|
||||||
|
|
||||||
|
.right {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: $margin;
|
||||||
|
text-align: right;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.right-title {
|
||||||
|
margin-right: 10rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -6,17 +6,20 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import payKeyboard from '@/components/mi-payKeyboard/mi-payKeyboard.vue'
|
import payKeyboard from '@/components/mi-payKeyboard/mi-payKeyboard.vue'
|
||||||
import eventBus from '../../utils/eventBus.js';
|
import eventBus from '../../utils/eventBus.js';
|
||||||
import {
|
import {
|
||||||
wxPAY,
|
wxPAY,
|
||||||
alPAY,
|
alPAY,
|
||||||
dtPAY,
|
dtPAY,
|
||||||
|
collagePAY,
|
||||||
payIndex
|
payIndex
|
||||||
} from '@/apis/interfaces/pay'
|
} from '@/apis/interfaces/pay'
|
||||||
export default {
|
export default {
|
||||||
components: { payKeyboard },
|
components: {
|
||||||
|
payKeyboard
|
||||||
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
payNo: "",
|
payNo: "",
|
||||||
@@ -26,8 +29,9 @@
|
|||||||
oepnType: '',
|
oepnType: '',
|
||||||
canpay: true,
|
canpay: true,
|
||||||
has_transfer_password: true,
|
has_transfer_password: true,
|
||||||
password: '',
|
password: '',
|
||||||
showKeyBoard: false,
|
showKeyBoard: false,
|
||||||
|
type: '',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -36,7 +40,9 @@
|
|||||||
if (this.$Route.query.oepnType === 'order') {
|
if (this.$Route.query.oepnType === 'order') {
|
||||||
this.oepnType = this.$Route.query.oepnType
|
this.oepnType = this.$Route.query.oepnType
|
||||||
}
|
}
|
||||||
|
if (this.$Route.query.type) {
|
||||||
|
this.type = this.$Route.query.type
|
||||||
|
}
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.payIndex();
|
this.payIndex();
|
||||||
@@ -109,23 +115,27 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// 输入正确的回调
|
// 输入正确的回调
|
||||||
enterSuccess(password) {
|
enterSuccess(password) {
|
||||||
this.password = password
|
this.password = password
|
||||||
this.showKeyBoard = false
|
this.showKeyBoard = false
|
||||||
this.getDTPAY();
|
this.getDTPAY();
|
||||||
},
|
},
|
||||||
// 点击[取消] 关闭输入框 的回调
|
// 点击[取消] 关闭输入框 的回调
|
||||||
close(){
|
close() {
|
||||||
this.showKeyBoard = false;
|
this.showKeyBoard = false;
|
||||||
this.canpay = true;
|
this.canpay = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
// 调用 dt 支付
|
// 调用 dt 支付
|
||||||
getDTPAY() {
|
getDTPAY() {
|
||||||
if (this.canpay) {
|
if (this.canpay) {
|
||||||
this.canpay = false
|
this.canpay = false
|
||||||
dtPAY(this.payNo, this.password).then(res => {
|
let requestUrl = dtPAY
|
||||||
|
if (this.type === 'pin') {
|
||||||
|
requestUrl = collagePAY
|
||||||
|
}
|
||||||
|
requestUrl(this.payNo, this.password).then(res => {
|
||||||
if (res.state === 'warning') {
|
if (res.state === 'warning') {
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '当前DT积分不足',
|
title: '当前DT积分不足',
|
||||||
@@ -162,27 +172,64 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
uni.showModal({
|
if (this.type === 'pin') {
|
||||||
title: '支付成功',
|
console.log('pin........', res)
|
||||||
content: '该订单已支付成功',
|
this.canpay = true
|
||||||
confirmText: '我的订单',
|
if (res.detailId) {
|
||||||
confirmColor: "#34CE98",
|
uni.showLoading({
|
||||||
cancelText: '再逛逛',
|
title:'跳转中',
|
||||||
cancelColor: "#666666",
|
mask:true,
|
||||||
success: (res) => {
|
})
|
||||||
if (res.confirm) {
|
setTimeout(() => {
|
||||||
this.$Router.push({
|
uni.hideLoading()
|
||||||
name: "Order",
|
uni.navigateTo({
|
||||||
params: {
|
url: '/pages/group-book/success/success?id=' + res.detailId
|
||||||
index: 0
|
})
|
||||||
},
|
}, 2000)
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
uni.navigateBack();
|
uni.showModal({
|
||||||
}
|
title: '温馨提示',
|
||||||
this.canpay = true
|
content: '该订单拼团成功',
|
||||||
|
confirmText: '查看订单',
|
||||||
|
confirmColor: "#34CE98",
|
||||||
|
cancelText: '再逛逛',
|
||||||
|
cancelColor: "#666666",
|
||||||
|
success: (res) => {
|
||||||
|
if(res.confirm){
|
||||||
|
console.log('挑战到我的拼单列表')
|
||||||
|
} if(res.cancel){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/store/index'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
} else {
|
||||||
|
uni.showModal({
|
||||||
|
title: '支付成功',
|
||||||
|
content: '该订单已支付成功',
|
||||||
|
confirmText: '我的订单',
|
||||||
|
confirmColor: "#34CE98",
|
||||||
|
cancelText: '再逛逛',
|
||||||
|
cancelColor: "#666666",
|
||||||
|
success: (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
this.$Router.push({
|
||||||
|
name: "Order",
|
||||||
|
params: {
|
||||||
|
index: 0
|
||||||
|
},
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.navigateBack();
|
||||||
|
}
|
||||||
|
this.canpay = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,114 +1,113 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="rank">
|
<view class="rank">
|
||||||
<view class="rank_top">
|
<view class="rank_top">
|
||||||
<view class="rank_top_left">
|
<view class="rank_top_left">
|
||||||
<image class="rank_title" src="../../static/rank/rank_txt.png" mode="widthFix" />
|
<image class="rank_title" src="../../static/rank/rank_txt.png" mode="widthFix" />
|
||||||
<view class="rank_sub_title" @click="toHelp"> 共力家族 周会员邀请 <image src="/static/rank/help.png" mode="widthFix" /> </view>
|
<view class="rank_sub_title" @click="toHelp"> 共力家族 周会员邀请 <image src="/static/rank/help.png" mode="widthFix" /> </view>
|
||||||
</view>
|
</view>
|
||||||
<image class="rank_top_right" src="../../static/rank/rank.png" mode="widthFix" />
|
<image class="rank_top_right" src="../../static/rank/rank.png" mode="widthFix" />
|
||||||
</view>
|
</view>
|
||||||
<!-- @click="click" -->
|
<!-- @click="click" -->
|
||||||
<u-sticky bgColor="#34CE98">
|
<u-sticky bgColor="#34CE98">
|
||||||
<u-tabs
|
<u-tabs
|
||||||
:list="tabs"
|
:list="tabs"
|
||||||
lineColor="white"
|
lineColor="white"
|
||||||
:activeStyle="{color: 'white', fontWeight: 'bold', fontSize: '14px'}"
|
:activeStyle="{color: 'white', fontWeight: 'bold', fontSize: '15px'}"
|
||||||
:inactiveStyle="{color: 'rgba(255,255,255,.6)', fontSize: '14px'}"
|
:inactiveStyle="{color: 'rgba(255,255,255,.6)', fontSize: '15px'}"
|
||||||
:itemStyle="{'height': '50px'}"
|
:itemStyle="{'height': '50px'}"
|
||||||
@click="onTabs"
|
@click="onTabs"
|
||||||
></u-tabs>
|
/>
|
||||||
</u-sticky>
|
</u-sticky>
|
||||||
<view class="rank_update_time" v-if="type != '3'&& type != '4'">
|
|
||||||
<view class="title"> 加成{{type === '1'?'结束':'生效'}}倒计时:</view>
|
<view class="rank_update_time" v-if="type != '3' && type != '4' && end_timestamp">
|
||||||
|
<view class="title"> 加成{{type === '1'?'结束':'生效'}}倒计时:</view>
|
||||||
<u-count-down
|
<u-count-down
|
||||||
ref="countDown"
|
ref="countDown"
|
||||||
format="DD:HH:mm:ss"
|
format="DD:HH:mm:ss"
|
||||||
:time="end_timestamp"
|
:time="end_timestamp"
|
||||||
:autoStart="false"
|
:autoStart="false"
|
||||||
@change="downTime"
|
@change="downTime"
|
||||||
>
|
>
|
||||||
<view class="time">
|
<view class="time">
|
||||||
<view class="time__item">
|
<view class="time__item">
|
||||||
<text class="time__item_no">{{ timeData.days > 9 ? timeData.days: '0' + timeData.days }} </text>天
|
<text class="time__item_no">{{ timeData.days > 9 ? timeData.days: '0' + timeData.days }} </text>天
|
||||||
</view>
|
</view>
|
||||||
<view class="time__item">
|
<view class="time__item">
|
||||||
<text class="time__item_no">{{ timeData.hours > 9 ? timeData.hours : '0' + timeData.hours}}</text>时
|
<text class="time__item_no">{{ timeData.hours > 9 ? timeData.hours : '0' + timeData.hours}}</text>时
|
||||||
</view>
|
</view>
|
||||||
<view class="time__item">
|
<view class="time__item">
|
||||||
<text class="time__item_no">{{ timeData.minutes > 9 ? timeData.minutes : '0' + timeData.minutes}}</text>分
|
<text class="time__item_no">{{ timeData.minutes > 9 ? timeData.minutes : '0' + timeData.minutes}}</text>分
|
||||||
</view>
|
</view>
|
||||||
<view class="time__item">
|
<view class="time__item">
|
||||||
<text class="time__item_no">{{ timeData.seconds > 9 ? timeData.seconds : '0' + timeData.seconds}}</text>秒
|
<text class="time__item_no">{{ timeData.seconds > 9 ? timeData.seconds : '0' + timeData.seconds}}</text>秒
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</u-count-down>
|
</u-count-down>
|
||||||
</view>
|
</view>
|
||||||
<view class="list">
|
<view class="list">
|
||||||
<block v-if="lists.length>0">
|
<block v-if="lists.length>0">
|
||||||
<view class="list_item" v-for="(item,index) in lists" :keys='index'>
|
<view class="list_item" v-for="(item,index) in lists" :keys='index'>
|
||||||
<view class="no">
|
<view class="no">
|
||||||
<image v-if="index < 3" class="image" :src="'/static/rank/rank-'+(index+1)+'.png'"
|
<image v-if="index < 3" class="image" :src="'/static/rank/rank-'+(index+1)+'.png'"
|
||||||
mode="widthFix" />
|
mode="widthFix" />
|
||||||
<view v-else class="txt"> {{index + 1}} </view>
|
<view v-else class="txt"> {{index + 1}} </view>
|
||||||
</view>
|
</view>
|
||||||
<view class="user_info">
|
<view class="user_info">
|
||||||
<view class="user">
|
<view class="user">
|
||||||
<image class="avatar" :src="item.avatar" mode="aspectFill" />
|
<image class="avatar" :src="item.avatar" mode="aspectFill" />
|
||||||
<view class="nickname"> {{item.nickname}} </view>
|
<view class="nickname"> {{item.nickname}} </view>
|
||||||
<view class="wight" v-if="type === '1'">+{{item.rate}}%</view>
|
<view class="wight" v-if="type === '1'">+{{item.rate}}%</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="tuijian">
|
<view class="tuijian">
|
||||||
<view class="num"> {{item.number}}</view>
|
<view class="num"> {{item.number}}</view>
|
||||||
<view class="title">{{type === '4'?'邀请用户':'邀请会员'}}</view>
|
<view class="title">{{type === '4'?'邀请用户':'邀请会员'}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
<block v-else>
|
<block v-else>
|
||||||
<view class="vertical pages-empty">
|
<view class="vertical pages-empty">
|
||||||
<u-empty
|
<u-empty
|
||||||
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
||||||
textColor="#999"
|
textColor="#999"
|
||||||
:text="type === '1'?'上周无加成数据':'当前暂无邀请数据'">
|
:text="type === '1'?'上周无加成数据':'当前暂无邀请数据'">
|
||||||
</u-empty>
|
</u-empty>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
</view>
|
</template>
|
||||||
</template>
|
<script>
|
||||||
|
import {
|
||||||
<script>
|
week,
|
||||||
import {
|
week_mul,
|
||||||
week,
|
total,
|
||||||
week_mul,
|
totaluser
|
||||||
total,
|
} from '@/apis/interfaces/rank.js'
|
||||||
totaluser
|
export default {
|
||||||
} from '@/apis/interfaces/rank.js'
|
data() {
|
||||||
export default {
|
return {
|
||||||
data() {
|
end_timestamp: 0,
|
||||||
return {
|
lists : [],
|
||||||
end_timestamp: 0,
|
|
||||||
lists : [],
|
|
||||||
timeData : {
|
timeData : {
|
||||||
days : 0,
|
days : 0,
|
||||||
hours : 0,
|
hours : 0,
|
||||||
minutes : 0,
|
minutes : 0,
|
||||||
seconds : 0
|
seconds : 0
|
||||||
},
|
},
|
||||||
type : '1', // 1加成榜 2邀请榜 3会员邀请 4用户邀请
|
type : '1', // 1加成榜 2邀请榜 3会员邀请 4用户邀请
|
||||||
page_id : '',
|
page_id : '',
|
||||||
tabs : [
|
tabs : [
|
||||||
{name: '上周加成榜', type: '1'},
|
{name: '上周加成榜', type: '1'},
|
||||||
{name: '本周邀请榜', type: '2'},
|
{name: '本周邀请榜', type: '2'},
|
||||||
{name: '会员邀请榜', type: '3'},
|
{name: '会员邀请榜', type: '3'},
|
||||||
{name: '用户邀请榜', type: '4'},
|
{name: '用户邀请榜', type: '4'},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.getList();
|
this.getList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onTabs(e){
|
onTabs(e){
|
||||||
if(this.type == e.type){
|
if(this.type == e.type){
|
||||||
@@ -125,26 +124,26 @@
|
|||||||
this.getList()
|
this.getList()
|
||||||
},
|
},
|
||||||
downTime(e) {
|
downTime(e) {
|
||||||
this.timeData = e
|
this.timeData = e
|
||||||
},
|
},
|
||||||
toHelp() {
|
toHelp() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: 'pages/vip/agreement?id=' + this.page_id
|
url: 'pages/vip/agreement?id=' + this.page_id
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getList() {
|
getList() {
|
||||||
let urlRequest = ''
|
let urlRequest = ''
|
||||||
if (this.type === '1') {
|
if (this.type === '1') {
|
||||||
urlRequest = week_mul
|
urlRequest = week_mul
|
||||||
} else if (this.type === '2') {
|
} else if (this.type === '2') {
|
||||||
urlRequest = week
|
urlRequest = week
|
||||||
} else if (this.type === '4') {
|
} else if (this.type === '4') {
|
||||||
urlRequest = totaluser
|
urlRequest = totaluser
|
||||||
} else {
|
} else {
|
||||||
urlRequest = total
|
urlRequest = total
|
||||||
}
|
}
|
||||||
urlRequest().then(res => {
|
urlRequest().then(res => {
|
||||||
this.lists = res.rand;
|
this.lists = res.rand;
|
||||||
this.page_id = res.page_id;
|
this.page_id = res.page_id;
|
||||||
this.end_timestamp = res.end_timestamp * 1000;
|
this.end_timestamp = res.end_timestamp * 1000;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
@@ -152,15 +151,15 @@
|
|||||||
this.$refs.countDown.start()
|
this.$refs.countDown.start()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
uni.hideLoading()
|
uni.hideLoading()
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: err.message,
|
title: err.message,
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
mask: true
|
mask: true
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onHide() {
|
onHide() {
|
||||||
try {
|
try {
|
||||||
@@ -173,70 +172,69 @@
|
|||||||
icon: 'none'
|
icon: 'none'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
<style lang="scss">
|
.rank {
|
||||||
.rank {
|
.rank_top {
|
||||||
.rank_top {
|
display: flex;
|
||||||
display: flex;
|
flex-direction: row;
|
||||||
flex-direction: row;
|
align-items: center;
|
||||||
align-items: center;
|
justify-content: space-between;
|
||||||
justify-content: space-between;
|
box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
background-color: #34CE98;
|
||||||
background-color: #34CE98;
|
padding: 50rpx 30rpx 40rpx 30rpx;
|
||||||
padding: 50rpx 30rpx 40rpx 30rpx;
|
border-bottom: solid 1rpx rgba($color: #fff, $alpha: 0.6);
|
||||||
border-bottom: solid 1rpx rgba($color: #fff, $alpha: 0.6);
|
.rank_top_left {
|
||||||
.rank_top_left {
|
display: flex;
|
||||||
display: flex;
|
flex-direction: column;
|
||||||
flex-direction: column;
|
align-items: flex-start;
|
||||||
align-items: flex-start;
|
justify-content: flex-start;
|
||||||
justify-content: flex-start;
|
box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
|
||||||
|
.rank_title {
|
||||||
.rank_title {
|
width: 360rpx;
|
||||||
width: 360rpx;
|
}
|
||||||
}
|
|
||||||
|
.rank_sub_title {
|
||||||
.rank_sub_title {
|
font-size: 28rpx;
|
||||||
font-size: 28rpx;
|
font-weight: 500;
|
||||||
font-weight: 500;
|
color: white;
|
||||||
color: white;
|
padding-left: 20rpx;
|
||||||
padding-left: 20rpx;
|
display: flex;
|
||||||
display: flex;
|
flex-direction: row;
|
||||||
flex-direction: row;
|
align-items: center;
|
||||||
align-items: center;
|
justify-content: center;
|
||||||
justify-content: center;
|
box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
margin-top: 10rpx;
|
||||||
margin-top: 10rpx;
|
|
||||||
|
image {
|
||||||
image {
|
width: 32rpx;
|
||||||
width: 32rpx;
|
margin-left: 6rpx;
|
||||||
margin-left: 6rpx;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
.rank_top_right {
|
||||||
.rank_top_right {
|
width: 280rpx;
|
||||||
width: 280rpx;
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.rank_update_time {
|
.rank_update_time {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 50rpx 30rpx;
|
padding: 50rpx 30rpx;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-bottom: 20rpx solid $window-color;
|
border-bottom: 20rpx solid $window-color;
|
||||||
.title {
|
.title {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #34CE98;
|
color: #34CE98;
|
||||||
padding-right: 10rpx;
|
padding-right: 10rpx;
|
||||||
}
|
}
|
||||||
.time{
|
.time{
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -253,109 +251,109 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
margin: 0 10rpx;
|
margin: 0 10rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
padding: 30rpx;
|
padding: 30rpx;
|
||||||
.list_item {
|
.list_item {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.no {
|
.no {
|
||||||
width: 80rpx;
|
width: 80rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.image {
|
.image {
|
||||||
width: 54rpx;
|
width: 54rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.txt {
|
.txt {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
font-size: 34rpx;
|
font-size: 34rpx;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.user_info {
|
.user_info {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
border-bottom: solid 1rpx #f9f9f9;
|
border-bottom: solid 1rpx #f9f9f9;
|
||||||
padding: 30rpx 20rpx 30rpx 0;
|
padding: 30rpx 20rpx 30rpx 0;
|
||||||
margin-left: 30rpx;
|
margin-left: 30rpx;
|
||||||
|
|
||||||
.user {
|
.user {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
|
||||||
.avatar {
|
.avatar {
|
||||||
width: 90rpx;
|
width: 90rpx;
|
||||||
height: 90rpx;
|
height: 90rpx;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
margin-right: 30rpx;
|
margin-right: 30rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nickname {
|
.nickname {
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
color: #333;
|
color: #333;
|
||||||
max-width: 200rpx;
|
max-width: 200rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wight {
|
.wight {
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
margin-left: 20rpx;
|
margin-left: 20rpx;
|
||||||
background-color: #bdc6d7;
|
background-color: #bdc6d7;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border-radius: 30rpx;
|
border-radius: 30rpx;
|
||||||
padding: 0 10rpx;
|
padding: 0 10rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tuijian {
|
.tuijian {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.num {
|
.num {
|
||||||
color: #999;
|
color: #999;
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 22rpx;
|
font-size: 22rpx;
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,338 +1,476 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="content">
|
<view class="content">
|
||||||
<!-- address -->
|
<!-- address -->
|
||||||
<block v-if="address != ''">
|
<block v-if="address != ''">
|
||||||
<view class="block address" @click="$Router.push({name: 'Address'})">
|
<view class="block address" @click="$Router.push({name: 'Address'})">
|
||||||
<uni-icons class="address-icon location" type="location-filled" size="24" color="#34CE98"></uni-icons>
|
<uni-icons class="address-icon location" type="location-filled" size="24" color="#34CE98"></uni-icons>
|
||||||
<uni-icons class="address-icon arrows" type="right" size="20" color="#999"></uni-icons>
|
<uni-icons class="address-icon arrows" type="right" size="20" color="#999"></uni-icons>
|
||||||
<view class="user"><text>{{address.name}}</text>{{address.mobile}}</view>
|
<view class="user"><text>{{address.name}}</text>{{address.mobile}}</view>
|
||||||
<view class="city">{{address.full_address}}</view>
|
<view class="city">{{address.full_address}}</view>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
<block v-else>
|
<block v-else>
|
||||||
<view class="block address-new" @click="$Router.push({name: 'Address'})">
|
<view class="block address-new" @click="$Router.push({name: 'Address'})">
|
||||||
<uni-icons class="icon" type="plus" size="26" color="#34CE98"></uni-icons>添加收货地址
|
<uni-icons class="icon" type="plus" size="26" color="#34CE98"></uni-icons>添加收货地址
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
<!-- 订单产品 -->
|
<!-- 订单产品 -->
|
||||||
<view class="block goods-box">
|
<view class="block goods-box">
|
||||||
<block v-for="(item, index) in goodsInfo" :key="index">
|
<block v-for="(item, index) in goodsInfo" :key="index">
|
||||||
<view class="goods-item">
|
<view class="goods-item">
|
||||||
<image class="order-cover" :src="item.items[0].cover" mode="aspectFill"></image>
|
<image class="order-cover" :src="item.items[0].cover" mode="aspectFill"></image>
|
||||||
<view class="order-title">
|
<view class="order-title">
|
||||||
<view class="title"> {{item.items[0].title}}</view>
|
<view class="title"> {{item.items[0].title}}</view>
|
||||||
<view class="subtitle" v-if="item.items[0] && item.items[0].value"> {{item.items[0].value}} </view>
|
<view class="subtitle" v-if="item.items[0] && item.items[0].value"> {{item.items[0].value}}
|
||||||
</view>
|
</view>
|
||||||
<view class="order-count">
|
</view>
|
||||||
<view class="order-price">{{item.items[0].price}}<text class="type">DT积分</text></view>
|
<view class="order-count">
|
||||||
</view>
|
<view class="order-price">{{item.items[0].price}}<text class="type">DT积分</text></view>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</view>
|
||||||
</view>
|
</block>
|
||||||
<!-- 订单信息 -->
|
</view>
|
||||||
<view class="block info-box">
|
<!-- 订单信息 -->
|
||||||
<view class="info-item">
|
<view class="block info-box">
|
||||||
<view class="label">购买数量</view>
|
<view class="info-item">
|
||||||
<uni-number-box class="info-number" :value="qty" :min="1" :max="999" @change="numberChange" />
|
<view class="label">购买数量</view>
|
||||||
</view>
|
<uni-number-box class="info-number" :value="qty" :min="1" :max="limit" @change="numberChange" />
|
||||||
<view class="info-item">
|
</view>
|
||||||
<view class="label">配送方式</view>
|
<view class="info-item">
|
||||||
<view class="nowrap">快递</view>
|
<view class="label">配送方式</view>
|
||||||
</view>
|
<view class="nowrap">快递</view>
|
||||||
<view class="info-item">
|
</view>
|
||||||
<view class="label">配送费用</view>
|
<view class="info-item">
|
||||||
<view class="nowrap">{{freight == 0 ? '免费': freight}}</view>
|
<view class="label">配送费用</view>
|
||||||
</view>
|
<view class="nowrap">{{freight == 0 ? '免费': freight}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="block info-box">
|
</view>
|
||||||
<view class="info-item">
|
<view class="block info-box">
|
||||||
<view class="label">订单备注</view>
|
<view class="info-item">
|
||||||
<textarea class="info-textarea" v-model="remark" placeholder="请输入备注"></textarea>
|
<view class="label">订单备注</view>
|
||||||
</view>
|
<textarea class="info-textarea" v-model="remark" placeholder="请输入备注"></textarea>
|
||||||
</view>
|
</view>
|
||||||
<!-- footer -->
|
</view>
|
||||||
<view class="order-footer">
|
<!-- footer -->
|
||||||
<view class="total">总计:<text>{{total}} <text class="type">DT积分</text></text></view>
|
<view class="order-footer">
|
||||||
<button class="btn" @click="subOrder">确认订单</button>
|
<view class="total">总计:<text>{{total}} <text class="type">DT积分</text></text></view>
|
||||||
</view>
|
<button class="btn" @click="subOrder">确认订单</button>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</view>
|
||||||
|
</template>
|
||||||
<script>
|
|
||||||
import { buy, verify } from '@/apis/interfaces/store'
|
<script>
|
||||||
export default {
|
import {
|
||||||
data() {
|
buy,
|
||||||
return {
|
buyPin,
|
||||||
qty : 0,
|
verify,
|
||||||
goodsInfo : [],
|
collages,
|
||||||
total : 0,
|
} from '@/apis/interfaces/store'
|
||||||
freight : 0,
|
export default {
|
||||||
address : "",
|
data() {
|
||||||
remark : "",
|
return {
|
||||||
canApply :true
|
qty: 0,
|
||||||
};
|
goodsInfo: [],
|
||||||
},
|
total: 0,
|
||||||
onShow(){
|
freight: 0,
|
||||||
if(JSON.stringify(this.$store.getters.getAddress) !== '{}') this.address = this.$store.getters.getAddress
|
address: "",
|
||||||
this.qty= this.$Route.query.qty;
|
remark: "",
|
||||||
},
|
canApply: true,
|
||||||
mounted() {
|
limit:0,
|
||||||
this.getBuy()
|
type: '', // 是否为空
|
||||||
},
|
};
|
||||||
methods:{
|
},
|
||||||
getBuy(){
|
onShow() {
|
||||||
buy({
|
if (JSON.stringify(this.$store.getters.getAddress) !== '{}') this.address = this.$store.getters.getAddress
|
||||||
goods_sku_id: this.$Route.query.skuId,
|
this.qty = this.$Route.query.qty;
|
||||||
qty: this.qty
|
},
|
||||||
}).then(res => {
|
onLoad() {
|
||||||
this.address = res.address
|
if (this.$Route.query.type === 'pin') {
|
||||||
this.freight = res.freight
|
this.type = 'pin'
|
||||||
this.total = res.total
|
}
|
||||||
this.goodsInfo = res.detail
|
this.getBuy()
|
||||||
}).catch(err => {
|
},
|
||||||
uni.showToast({
|
methods: {
|
||||||
title: err.message,
|
getBuy() {
|
||||||
icon : 'none'
|
console.log(this.type === 'pin')
|
||||||
})
|
if (this.type == 'pin') {
|
||||||
})
|
let data = {
|
||||||
},
|
goods_sku_id: this.$Route.query.skuId,
|
||||||
numberChange(e){
|
collage_id:this.$Route.query.collageid || '',
|
||||||
this.qty = e
|
}
|
||||||
this.getBuy()
|
console.log(data);
|
||||||
},
|
buyPin(data).then(res => {
|
||||||
// 确认订单
|
this.address = res.address
|
||||||
subOrder(){
|
this.freight = res.freight
|
||||||
if(this.address === ""){
|
this.total = res.total
|
||||||
uni.showModal({
|
this.goodsInfo = res.detail
|
||||||
title : '提示',
|
this.limit = res.limit
|
||||||
content : '暂未添加收货地址,无法下单',
|
}).catch(err => {
|
||||||
showCancel : true,
|
uni.showModal({
|
||||||
confirmText : '添加',
|
title: '温馨提示',
|
||||||
success : res => {
|
content: err.message,
|
||||||
if(res.confirm){
|
showCancel: false,
|
||||||
this.$Router.push({name: 'Address'})
|
confirmColor: '#34CE98',
|
||||||
}
|
cancelText: '知道了',
|
||||||
}
|
success: (res) => {
|
||||||
})
|
uni.navigateBack({})
|
||||||
return
|
}
|
||||||
}
|
})
|
||||||
if(this.canApply){
|
})
|
||||||
|
} else {
|
||||||
|
buy({
|
||||||
|
goods_sku_id: this.$Route.query.skuId,
|
||||||
|
qty: this.qty
|
||||||
|
}).then(res => {
|
||||||
|
this.address = res.address
|
||||||
|
this.freight = res.freight
|
||||||
|
this.total = res.total
|
||||||
|
this.goodsInfo = res.detail
|
||||||
|
this.limit = res.limit
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showModal({
|
||||||
|
title: '温馨提示',
|
||||||
|
content: err.message,
|
||||||
|
showCancel: false,
|
||||||
|
confirmColor: '#34CE98',
|
||||||
|
cancelText: '知道了',
|
||||||
|
success: (res) => {
|
||||||
|
uni.navigateBack({})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
numberChange(e) {
|
||||||
|
this.qty = e
|
||||||
|
this.getBuy()
|
||||||
|
},
|
||||||
|
// 确认订单
|
||||||
|
subOrder() {
|
||||||
|
if (this.address === "") {
|
||||||
|
uni.showModal({
|
||||||
|
title: '提示',
|
||||||
|
content: '暂未添加收货地址,无法下单',
|
||||||
|
showCancel: true,
|
||||||
|
confirmText: '添加',
|
||||||
|
success: res => {
|
||||||
|
if (res.confirm) {
|
||||||
|
this.$Router.push({
|
||||||
|
name: 'Address'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (this.canApply) {
|
||||||
this.canApply = false;
|
this.canApply = false;
|
||||||
verify({
|
if (this.type == 'pin'){
|
||||||
goods_sku_id: this.$Route.query.skuId,
|
collages({
|
||||||
qty : this.qty,
|
goods_sku_id: this.$Route.query.skuId,
|
||||||
address_id : this.address.address_id,
|
collage_id:this.$Route.query.collageid || '',
|
||||||
remark : this.remark || ''
|
address_id: this.address.address_id,
|
||||||
}).then(res => {
|
remark: this.remark || ''
|
||||||
this.$store.commit('setAddress', {})
|
}).then(res => {
|
||||||
this.$Router.replace({
|
console.log(res)
|
||||||
name: 'Pay',
|
this.$store.commit('setAddress', {})
|
||||||
params: {
|
this.$Router.replace({
|
||||||
orderNo: res.order_no,
|
name: 'Pay',
|
||||||
price : res.total,
|
params: {
|
||||||
coins : res.coins,
|
orderNo: res.order_no,
|
||||||
}
|
price: res.total,
|
||||||
})
|
coins: res.coins,
|
||||||
this.canApply = true
|
type:'pin'
|
||||||
}).catch(err=>{
|
}
|
||||||
this.canApply = true
|
})
|
||||||
})
|
this.canApply = true
|
||||||
}else{
|
}).catch(err => {
|
||||||
this.canApply = true
|
this.canApply = true
|
||||||
}
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: "none",
|
||||||
}
|
mask: true,
|
||||||
}
|
duration: 2000
|
||||||
}
|
})
|
||||||
</script>
|
})
|
||||||
|
}else{
|
||||||
<style lang="scss" scoped>
|
verify({
|
||||||
.content{
|
goods_sku_id: this.$Route.query.skuId,
|
||||||
background: $window-color;
|
qty: this.qty,
|
||||||
min-height: 100vh;
|
address_id: this.address.address_id,
|
||||||
overflow: hidden;
|
remark: this.remark || ''
|
||||||
padding-bottom: $padding + 80;
|
}).then(res => {
|
||||||
box-sizing: border-box;
|
console.log(res)
|
||||||
}
|
if (res.order_no === '') {
|
||||||
.block{
|
uni.showModal({
|
||||||
background: white;
|
title: ' 温馨提示',
|
||||||
margin: $margin;
|
content: '领取商品成功',
|
||||||
border-radius: $radius;
|
confirmColor: '#34CE98',
|
||||||
}
|
confirmText: ' 查看订单',
|
||||||
// 地址管理
|
cancelColor: '#999',
|
||||||
.address{
|
cancelText: '返回首页',
|
||||||
position: relative;
|
success: (res) => {
|
||||||
padding: $padding 80rpx $padding 90rpx;
|
if (res.confirm) {
|
||||||
font-size: $title-size-lg;
|
uni.navigateTo({
|
||||||
.user{
|
url: '/pages/order/index?index=0'
|
||||||
font-size: $title-size;
|
})
|
||||||
line-height: 40rpx;
|
}
|
||||||
color: $text-gray;
|
if (res.cancel) {
|
||||||
text{
|
uni.reLaunch({
|
||||||
color: black;
|
url: '/pages/store/index'
|
||||||
max-width: 200rpx;
|
})
|
||||||
display: inline-block;
|
}
|
||||||
margin-right: $margin/2;
|
}
|
||||||
}
|
})
|
||||||
}
|
} else {
|
||||||
.city{
|
this.$store.commit('setAddress', {})
|
||||||
padding-top: $padding/2;
|
this.$Router.replace({
|
||||||
font-size: $title-size-sm;
|
name: 'Pay',
|
||||||
color: $text-gray;
|
params: {
|
||||||
line-height: 36rpx;
|
orderNo: res.order_no,
|
||||||
}
|
price: res.total,
|
||||||
.address-icon{
|
coins: res.coins,
|
||||||
position: absolute;
|
}
|
||||||
top: 50%;
|
})
|
||||||
&.location{
|
}
|
||||||
margin-top: -26rpx;
|
this.canApply = true
|
||||||
left: $margin - 10;
|
}).catch(err => {
|
||||||
}
|
this.canApply = true
|
||||||
&.arrows{
|
uni.showToast({
|
||||||
margin-top: -20rpx;
|
title: err.message,
|
||||||
right: $margin - 10;
|
icon: "none",
|
||||||
}
|
mask: true,
|
||||||
}
|
duration: 2000
|
||||||
}
|
})
|
||||||
.address-new{
|
})
|
||||||
padding: $padding;
|
}
|
||||||
text-align: center;
|
|
||||||
height: 90rpx;
|
} else {
|
||||||
line-height: 90rpx;
|
this.canApply = true
|
||||||
color: $main-color;
|
}
|
||||||
.icon{
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-bottom: 8rpx;
|
}
|
||||||
margin-right: 10rpx;
|
}
|
||||||
}
|
}
|
||||||
}
|
</script>
|
||||||
// 订单列表
|
|
||||||
.goods-item{
|
<style lang="scss" scoped>
|
||||||
display: flex;
|
.content {
|
||||||
align-items: center;
|
background: $window-color;
|
||||||
padding: $padding;
|
min-height: 100vh;
|
||||||
.order-cover{
|
overflow: hidden;
|
||||||
vertical-align: top;
|
padding-bottom: $padding + 80;
|
||||||
width: 128rpx;
|
box-sizing: border-box;
|
||||||
height: 128rpx;
|
}
|
||||||
}
|
|
||||||
.order-title{
|
.block {
|
||||||
flex: 1;
|
background: white;
|
||||||
padding-left: $margin;
|
margin: $margin;
|
||||||
// line-height: 40rpx;
|
border-radius: $radius;
|
||||||
.title{
|
}
|
||||||
font-size: 28rpx;
|
|
||||||
@extend .ellipsis;
|
// 地址管理
|
||||||
text-align: left;
|
.address {
|
||||||
}
|
position: relative;
|
||||||
.subtitle{
|
padding: $padding 80rpx $padding 90rpx;
|
||||||
font-size: 26rpx;
|
font-size: $title-size-lg;
|
||||||
color: #666;
|
|
||||||
padding-top: 10rpx;
|
.user {
|
||||||
}
|
font-size: $title-size;
|
||||||
}
|
line-height: 40rpx;
|
||||||
.order-count{
|
color: $text-gray;
|
||||||
text-align: right;
|
|
||||||
padding-left: $margin;
|
text {
|
||||||
line-height: 40rpx;
|
color: black;
|
||||||
.order-price{
|
max-width: 200rpx;
|
||||||
font-size: 32rpx;
|
display: inline-block;
|
||||||
font-weight: bold;
|
margin-right: $margin/2;
|
||||||
color: $text-price;
|
}
|
||||||
&>text{
|
}
|
||||||
font-size: 24rpx;
|
|
||||||
}
|
.city {
|
||||||
}
|
padding-top: $padding/2;
|
||||||
.type{
|
font-size: $title-size-sm;
|
||||||
font-size: 22rpx;
|
color: $text-gray;
|
||||||
padding-left: 6rpx;
|
line-height: 36rpx;
|
||||||
}
|
}
|
||||||
.order-sum{
|
|
||||||
font-size: $title-size-sm;
|
.address-icon {
|
||||||
color: $text-gray;
|
position: absolute;
|
||||||
}
|
top: 50%;
|
||||||
}
|
|
||||||
}
|
&.location {
|
||||||
// 订单信息
|
margin-top: -26rpx;
|
||||||
.info-box{
|
left: $margin - 10;
|
||||||
.info-item{
|
}
|
||||||
position: relative;
|
|
||||||
padding: $padding $padding $padding 200rpx;
|
&.arrows {
|
||||||
font-size: $title-size-m;
|
margin-top: -20rpx;
|
||||||
min-height: 40rpx;
|
right: $margin - 10;
|
||||||
text-align: right;
|
}
|
||||||
.label{
|
}
|
||||||
position: absolute;
|
}
|
||||||
left: $margin;
|
|
||||||
top: $margin;
|
.address-new {
|
||||||
color: $text-gray;
|
padding: $padding;
|
||||||
}
|
text-align: center;
|
||||||
.info-textarea{
|
height: 90rpx;
|
||||||
height: 120rpx;
|
line-height: 90rpx;
|
||||||
width: 100%;
|
color: $main-color;
|
||||||
text-align: left;
|
|
||||||
font-size: $title-size-m;
|
.icon {
|
||||||
}
|
vertical-align: middle;
|
||||||
&::after{
|
margin-bottom: 8rpx;
|
||||||
position: absolute;
|
margin-right: 10rpx;
|
||||||
left: $margin;
|
}
|
||||||
right: $margin;
|
}
|
||||||
content: " ";
|
|
||||||
height: 1rpx;
|
// 订单列表
|
||||||
bottom: 0;
|
.goods-item {
|
||||||
background: $border-color;
|
display: flex;
|
||||||
}
|
align-items: center;
|
||||||
&:last-child::after{
|
padding: $padding;
|
||||||
display: none;
|
|
||||||
}
|
.order-cover {
|
||||||
}
|
vertical-align: top;
|
||||||
}
|
width: 128rpx;
|
||||||
|
height: 128rpx;
|
||||||
// footer
|
}
|
||||||
.order-footer{
|
|
||||||
position: fixed;
|
.order-title {
|
||||||
bottom: 0;
|
flex: 1;
|
||||||
left: 0;
|
padding-left: $margin;
|
||||||
right: 0;
|
|
||||||
padding: $padding;
|
// line-height: 40rpx;
|
||||||
background: white;
|
.title {
|
||||||
border-radius: $radius $radius 0 0;
|
font-size: 28rpx;
|
||||||
box-shadow: 0 0 10rpx 10rpx rgba($color: #000000, $alpha: .02);
|
@extend .ellipsis;
|
||||||
z-index: 99;
|
text-align: left;
|
||||||
display: flex;
|
}
|
||||||
.total{
|
|
||||||
line-height: 80rpx;
|
.subtitle {
|
||||||
font-size: $title-size-lg;
|
font-size: 26rpx;
|
||||||
font-weight: bold;
|
color: #666;
|
||||||
width: calc(100% - 300rpx - #{$margin});
|
padding-top: 10rpx;
|
||||||
color: $text-gray;
|
}
|
||||||
font-weight: normal;
|
}
|
||||||
@extend .nowrap;
|
|
||||||
text{
|
.order-count {
|
||||||
color: $text-price;
|
text-align: right;
|
||||||
font-size: $title-size-lg;
|
padding-left: $margin;
|
||||||
font-weight: bold;
|
line-height: 40rpx;
|
||||||
}
|
|
||||||
.type{
|
.order-price {
|
||||||
font-size: 22rpx;
|
font-size: 32rpx;
|
||||||
padding-left: 6rpx;
|
font-weight: bold;
|
||||||
}
|
color: $text-price;
|
||||||
}
|
|
||||||
.btn{
|
&>text {
|
||||||
margin-left: $margin;
|
font-size: 24rpx;
|
||||||
width: 300rpx;
|
}
|
||||||
height: 80rpx;
|
}
|
||||||
padding: 0;
|
|
||||||
line-height: 80rpx;
|
.type {
|
||||||
font-size: $title-size-lg;
|
font-size: 22rpx;
|
||||||
border-radius: 40rpx;
|
padding-left: 6rpx;
|
||||||
background: $main-color;
|
}
|
||||||
color: white;
|
|
||||||
font-weight: bold;
|
.order-sum {
|
||||||
&::after{
|
font-size: $title-size-sm;
|
||||||
display: none;
|
color: $text-gray;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 订单信息
|
||||||
|
.info-box {
|
||||||
|
.info-item {
|
||||||
|
position: relative;
|
||||||
|
padding: $padding $padding $padding 200rpx;
|
||||||
|
font-size: $title-size-m;
|
||||||
|
min-height: 40rpx;
|
||||||
|
text-align: right;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
position: absolute;
|
||||||
|
left: $margin;
|
||||||
|
top: $margin;
|
||||||
|
color: $text-gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-textarea {
|
||||||
|
height: 120rpx;
|
||||||
|
width: 100%;
|
||||||
|
text-align: left;
|
||||||
|
font-size: $title-size-m;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
position: absolute;
|
||||||
|
left: $margin;
|
||||||
|
right: $margin;
|
||||||
|
content: " ";
|
||||||
|
height: 1rpx;
|
||||||
|
bottom: 0;
|
||||||
|
background: $border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// footer
|
||||||
|
.order-footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
padding: $padding;
|
||||||
|
background: white;
|
||||||
|
border-radius: $radius $radius 0 0;
|
||||||
|
box-shadow: 0 0 10rpx 10rpx rgba($color: #000000, $alpha: .02);
|
||||||
|
z-index: 99;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.total {
|
||||||
|
line-height: 80rpx;
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
font-weight: bold;
|
||||||
|
width: calc(100% - 300rpx - #{$margin});
|
||||||
|
color: $text-gray;
|
||||||
|
font-weight: normal;
|
||||||
|
@extend .nowrap;
|
||||||
|
|
||||||
|
text {
|
||||||
|
color: $text-price;
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.type {
|
||||||
|
font-size: 22rpx;
|
||||||
|
padding-left: 6rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
margin-left: $margin;
|
||||||
|
width: 300rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
padding: 0;
|
||||||
|
line-height: 80rpx;
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
background: $main-color;
|
||||||
|
color: white;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,395 +1,547 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="content">
|
<view class="content">
|
||||||
<!-- swiper -->
|
<!-- swiper -->
|
||||||
<view class="swiper">
|
<view class="swiper">
|
||||||
<view class="swiper-box">
|
<view class="swiper-box">
|
||||||
<swiper autoplay @change="swiperCount = $event.detail.current">
|
<swiper autoplay @change="swiperCount = $event.detail.current">
|
||||||
<swiper-item v-for="(item, index) in banners" :key="index" @click="goBook(item)">
|
<swiper-item v-for="(item, index) in banners" :key="index" @click="goBook(item)">
|
||||||
<image :src="item.cover" mode="aspectFill"></image>
|
<image :src="item.cover" mode="aspectFill"></image>
|
||||||
</swiper-item>
|
</swiper-item>
|
||||||
</swiper>
|
</swiper>
|
||||||
<view class="swiper-pages">
|
<view class="swiper-pages">
|
||||||
<block v-for="(item, index) in banners" :key="index">
|
<block v-for="(item, index) in banners" :key="index">
|
||||||
<text class="pages-item" :class="{'show':swiperCount === index}"></text>
|
<text class="pages-item" :class="{'show':swiperCount === index}"></text>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 健康产品分类 -->
|
<!-- 健康产品分类 -->
|
||||||
<u-scroll-list class="classify-box" indicatorColor="#ddd" indicatorActiveColor="#34CE98">
|
<u-scroll-list class="classify-box" indicatorColor="#ddd" indicatorActiveColor="#34CE98">
|
||||||
<view v-for="(item, index) in goodTabs" :key="index" class="classify-item" @click="$Router.push({name: 'StoreList', params: {id: item.category_id, title: item.name}})">
|
<view v-for="(item, index) in goodTabs" :key="index" class="classify-item"
|
||||||
<view class="classify-item-nav">
|
@click="$Router.push({name: 'StoreList', params: {id: item.category_id, title: item.name}})">
|
||||||
<image class="classify-item-cover" :src="item.cover"></image>
|
<view class="classify-item-nav">
|
||||||
<view class="classify-item-title">{{item.name}}</view>
|
<image class="classify-item-cover" :src="item.cover"></image>
|
||||||
</view>
|
<view class="classify-item-title">{{item.name}}</view>
|
||||||
</view>
|
</view>
|
||||||
</u-scroll-list>
|
</view>
|
||||||
|
</u-scroll-list>
|
||||||
<!-- 每日上新 -->
|
|
||||||
<view class="new-box">
|
<!-- 每日上新 -->
|
||||||
<view class="title">上新精选<text class="title-des"> | 精品上新新品推荐</text></view>
|
<view class="new-box">
|
||||||
<view class="news">
|
<view class="title">上新精选<text class="title-des"> | 精品上新新品推荐</text></view>
|
||||||
<view class="news-item" v-for="(item, index) in newGood" :key="index" @click="$Router.push({ name: 'StoreGoods', params: {id: item.goods_id}})">
|
<view class="news">
|
||||||
<view class="news-cover">
|
<view class="news-item" v-for="(item, index) in newGood" :key="index"
|
||||||
<image :src="item.cover" mode="aspectFill"></image>
|
@click="$Router.push({ name: 'StoreGoods', params: {id: item.goods_id}})">
|
||||||
</view>
|
<view class="news-cover">
|
||||||
<view class="news-title nowrap">{{item.name}}</view>
|
<image :src="item.cover" mode="aspectFill"></image>
|
||||||
<view class="news-price nowrap">{{item.price.price_min}} <text>DT积分</text></view>
|
</view>
|
||||||
</view>
|
<view class="news-title nowrap">{{item.name}}</view>
|
||||||
</view>
|
<view class="news-price nowrap">{{item.price.price_min}} <text>DT积分</text></view>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
<!-- 线下商家 -->
|
</view>
|
||||||
<view class="offline-box">
|
|
||||||
<view class="title">推荐店铺 <view class="more"><text class="title-des"> | 您身边的优质体验店</text> <text class="more-txt" @click="$Router.push({name: 'ShopList'})">更多></text></view></view>
|
<!-- VIP换购 -->
|
||||||
<view class="card-box">
|
<view class="new-box" style="margin-top: 30rpx;" v-if="vips.length>0">
|
||||||
<block v-for="(item, index) in shops" :key="index">
|
<view class="title">VIP换购 <view class="more"><text class="title-des"> | 千款商品任意换购</text> <text
|
||||||
<view class="card-box-item" style="{'backgrond': #FFF}" v-if="index < 4" @click="$Router.push({name: 'ShopDetail', params: {ShopId: item.shop_id}})">
|
class="more-txt" @click="$Router.push({name: 'VipList'})">更多 ></text></view>
|
||||||
<view class="card-title">{{item.name}}</view>
|
</view>
|
||||||
<view class="card-subtitle"> 优质店铺 </view>
|
<view class="news">
|
||||||
<view class="card-btn">前往体验</view>
|
<view class="news-item" v-for="(item, index) in vips" :key="index"
|
||||||
<image class="card-cover" :src="item.cover" mode="aspectFill" />
|
@click="$Router.push({ name: 'StoreGoods', params: {id: item.goods_id}})">
|
||||||
</view>
|
<view class="news-cover">
|
||||||
</block>
|
<image :src="item.cover" mode="aspectFill"></image>
|
||||||
</view>
|
<view class="tags"> VIP </view>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="news-title nowrap">{{item.name}}</view>
|
||||||
<!-- 推荐品类 -->
|
<view class="news-price nowrap">{{item.price.price_min}} <text>DT积分</text></view>
|
||||||
<!-- <view class="card-box">
|
<!-- <view class="news-price nowrap through">{{item.original_price}} <text>DT积分</text></view> -->
|
||||||
<block v-for="(item, index) in meals" :key="index">
|
</view>
|
||||||
<view class="card-box-item" :style="{'backgrond': item.color}" @click="$Router.push({name: 'StoreMeals', params: {id: item.meal_id}})">
|
</view>
|
||||||
<view class="card-title">{{item.title}}</view>
|
</view>
|
||||||
<view class="card-subtitle">{{item.subtitle}}</view>
|
|
||||||
<image class="card-cover" :src="item.cover" mode="aspectFill"></image>
|
<!-- 线下商家 -->
|
||||||
</view>
|
<view class="offline-box">
|
||||||
</block>
|
<view class="title">推荐店铺 <view class="more"><text class="title-des"> | 您身边的优质体验店</text> <text
|
||||||
</view> -->
|
class="more-txt" @click="$Router.push({name: 'ShopList'})">更多 ></text></view>
|
||||||
|
</view>
|
||||||
<!-- goods -->
|
<view class="card-box">
|
||||||
<view class="goods-box">
|
<block v-for="(item, index) in shops" :key="index">
|
||||||
<oct-goods
|
<view class="card-box-item" style="{'backgrond': #FFF}" v-if="index < 4"
|
||||||
:lists="goodsArr"
|
@click="$Router.push({name: 'ShopDetail', params: {ShopId: item.shop_id}})">
|
||||||
priceType="DT"
|
<view class="card-title">{{item.name}}</view>
|
||||||
color="#e6576b"
|
<view class="card-subtitle"> {{item.type.code == 2 ? 'VIP优质店铺' : '优质店铺'}} </view>
|
||||||
@onGoods="$Router.push({ name: 'StoreGoods', params: {id: $event.goods_id}})"
|
<view class="card-btn">前往体验</view>
|
||||||
/>
|
<image class="card-cover" :src="item.cover" mode="aspectFill" />
|
||||||
<!-- <u-loadmore status="loading" /> -->
|
</view>
|
||||||
</view>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</view>
|
||||||
|
|
||||||
<script>
|
<!-- 推荐品类 -->
|
||||||
import { mall } from "@/apis/interfaces/store"
|
<!-- <view class="card-box">
|
||||||
export default {
|
<block v-for="(item, index) in meals" :key="index">
|
||||||
data() {
|
<view class="card-box-item" :style="{'backgrond': item.color}" @click="$Router.push({name: 'StoreMeals', params: {id: item.meal_id}})">
|
||||||
return {
|
<view class="card-title">{{item.title}}</view>
|
||||||
swiperCount : 0,
|
<view class="card-subtitle">{{item.subtitle}}</view>
|
||||||
banners : [],
|
<image class="card-cover" :src="item.cover" mode="aspectFill"></image>
|
||||||
goodTabs : [],
|
</view>
|
||||||
newGood : [],
|
</block>
|
||||||
goodsArr : [],
|
</view> -->
|
||||||
meals : [],
|
|
||||||
shops : [],
|
<!-- goods -->
|
||||||
};
|
<view class="goods-box">
|
||||||
},
|
<view class="title2">
|
||||||
mounted(){
|
猜你喜欢 <view class="more"><text class="title-des"> | 您身边的快捷推荐</text> <text class="more-txt" @click="$Router.push({name: 'StoreList'})">更多 ></text></view>
|
||||||
this.getMall()
|
</view>
|
||||||
},
|
<oct-goods :lists="goodsArr" priceType="DT" color="#e6576b"
|
||||||
methods:{
|
@onGoods="$Router.push({ name: 'StoreGoods', params: {id: $event.goods_id}})" />
|
||||||
getMall(){
|
<!-- <u-loadmore status="loading" /> -->
|
||||||
mall().then(res => {
|
</view>
|
||||||
this.banners = res.banners
|
</view>
|
||||||
this.goodsArr = res.goods
|
</template>
|
||||||
this.newGood = res.news
|
|
||||||
this.goodTabs = res.categories
|
<script>
|
||||||
this.meals = res.meals
|
import {
|
||||||
this.shops = res.shops
|
mall
|
||||||
uni.stopPullDownRefresh()
|
} from "@/apis/interfaces/store"
|
||||||
})
|
export default {
|
||||||
},
|
data() {
|
||||||
goBook(item){
|
return {
|
||||||
if(item.url){
|
swiperCount: 0,
|
||||||
if(item.url.openType === 'navigateTo'){
|
banners: [],
|
||||||
let url = item.url.path
|
goodTabs: [],
|
||||||
if(item.url.params != ''){
|
newGood: [],
|
||||||
url = url + '?' + item.url.params
|
goodsArr: [],
|
||||||
}
|
meals: [],
|
||||||
uni.navigateTo({
|
shops: [],
|
||||||
url
|
vips:[]
|
||||||
})
|
};
|
||||||
}
|
},
|
||||||
}
|
mounted() {
|
||||||
}
|
this.getMall()
|
||||||
},
|
},
|
||||||
onPullDownRefresh() {
|
methods: {
|
||||||
this.getMall()
|
getMall() {
|
||||||
},
|
mall().then(res => {
|
||||||
onNavigationBarButtonTap() {
|
this.banners = res.banners
|
||||||
this.$Router.push({name: 'StoreSearch'})
|
this.goodsArr = res.goods
|
||||||
}
|
this.newGood = res.news
|
||||||
}
|
this.goodTabs = res.categories
|
||||||
</script>
|
this.meals = res.meals
|
||||||
|
this.shops = res.shops
|
||||||
<style lang="scss">
|
this.vips = res.vips
|
||||||
.content{
|
uni.stopPullDownRefresh()
|
||||||
background: $window-color;
|
})
|
||||||
}
|
},
|
||||||
// 商城列表
|
goBook(item) {
|
||||||
.goods-box{
|
console.log(item)
|
||||||
padding-bottom: $padding;
|
if (item.url) {
|
||||||
&>.title{
|
if (item.url.openType === 'navigateTo') {
|
||||||
padding: $padding $padding 0;
|
if (item.url.params != '') {
|
||||||
font-size: $title-size-lg;
|
uni.navigateTo({
|
||||||
color: $text-color;
|
url: item.url.path + '?' + item.url.params,
|
||||||
font-weight: bold;
|
})
|
||||||
margin-bottom: -$margin/2;
|
} else {
|
||||||
|
uni.navigateTo({
|
||||||
}
|
url: item.url.path,
|
||||||
}
|
})
|
||||||
// 商城分类
|
}
|
||||||
.classify-box{
|
}
|
||||||
.classify-item{
|
}
|
||||||
padding: 0 10rpx;
|
}
|
||||||
&:last-child{
|
},
|
||||||
padding-right: $padding;
|
onPullDownRefresh() {
|
||||||
}
|
this.getMall()
|
||||||
&:first-child{
|
},
|
||||||
padding-left: $padding;
|
onNavigationBarButtonTap() {
|
||||||
}
|
this.$Router.push({
|
||||||
&-nav{
|
name: 'StoreSearch'
|
||||||
text-align: center;
|
})
|
||||||
width: 138rpx;
|
}
|
||||||
}
|
}
|
||||||
&-cover{
|
</script>
|
||||||
width: 86rpx;
|
|
||||||
height: 86rpx;
|
<style lang="scss">
|
||||||
border-radius: 50%;
|
.content {
|
||||||
vertical-align: top;
|
background: $window-color;
|
||||||
margin-bottom: $margin/2;
|
}
|
||||||
}
|
|
||||||
&-title{
|
// 商城列表
|
||||||
line-height: 40rpx;
|
.goods-box {
|
||||||
font-size: $title-size-sm;
|
padding: $padding 0;
|
||||||
color: $text-color;
|
|
||||||
}
|
&>.title {
|
||||||
}
|
padding: $padding $padding 0;
|
||||||
}
|
font-size: $title-size-lg;
|
||||||
// 卡片推荐
|
color: $text-color;
|
||||||
.card-box{
|
font-weight: bold;
|
||||||
padding: $padding $padding - 10;
|
margin-bottom: -$margin/2;
|
||||||
padding-bottom: 0;
|
}
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
.title2 {
|
||||||
&-item{
|
font-size: $title-size-lg;
|
||||||
margin: 0 10rpx;
|
color: $text-color;
|
||||||
width: calc(50% - 20rpx);
|
font-weight: bold;
|
||||||
padding: $padding;
|
padding: 0 30rpx 10rpx 30rpx;
|
||||||
border-radius: $radius;
|
display: flex;
|
||||||
box-sizing: border-box;
|
flex-direction: row;
|
||||||
position: relative;
|
align-items: center;
|
||||||
.card-title{
|
justify-content: flex-start;
|
||||||
font-size: $title-size-lg;
|
box-sizing: border-box;
|
||||||
font-weight: bold;
|
|
||||||
color: $text-color;
|
.title-des {
|
||||||
line-height: 40rpx;
|
font-size: 24rpx !important;
|
||||||
width: calc(100% - 80rpx);
|
padding-left: 10rpx;
|
||||||
overflow: hidden;
|
color: $text-gray-m;
|
||||||
text-overflow: ellipsis;
|
font-weight: normal;
|
||||||
white-space: nowrap;
|
}
|
||||||
}
|
|
||||||
.card-subtitle{
|
.more {
|
||||||
font-size: 22rpx;
|
flex: 1;
|
||||||
color: $text-gray;
|
display: flex;
|
||||||
// line-height: 40rpx;
|
flex-direction: row;
|
||||||
min-height: 20rpx;
|
align-items: center;
|
||||||
@extend .nowrap;
|
justify-content: space-between;
|
||||||
}
|
box-sizing: border-box;
|
||||||
.card-cover{
|
padding-right: $padding;
|
||||||
width: 80rpx;
|
|
||||||
height: 80rpx;
|
.more-txt {
|
||||||
position: absolute;
|
font-size: 24rpx;
|
||||||
border-radius: 50%;
|
color: $text-gray;
|
||||||
right: $margin;
|
font-weight: normal;
|
||||||
top: $margin;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&-item:nth-child(1){
|
|
||||||
background: #fef2ae;
|
}
|
||||||
}
|
|
||||||
&-item:nth-child(2){
|
// 商城分类
|
||||||
background: #c9ead9;
|
.classify-box {
|
||||||
}
|
.classify-item {
|
||||||
}
|
padding: 0 10rpx;
|
||||||
// 上新精选
|
|
||||||
.new-box{
|
&:last-child {
|
||||||
padding: 0 $margin;
|
padding-right: $padding;
|
||||||
border-radius: $radius;
|
}
|
||||||
// padding: $padding - 10;
|
|
||||||
.title{
|
&:first-child {
|
||||||
font-size: $title-size-lg;
|
padding-left: $padding;
|
||||||
color: $text-color;
|
}
|
||||||
font-weight: bold;
|
|
||||||
padding-bottom: 10rpx;
|
&-nav {
|
||||||
.title-des{
|
text-align: center;
|
||||||
font-size: 24rpx !important;
|
width: 138rpx;
|
||||||
padding-left: 10rpx;
|
}
|
||||||
color: $text-gray-m;
|
|
||||||
font-weight: normal;
|
&-cover {
|
||||||
}
|
width: 86rpx;
|
||||||
}
|
height: 86rpx;
|
||||||
.news{
|
border-radius: 50%;
|
||||||
margin: $margin/2 -10rpx 0;
|
vertical-align: top;
|
||||||
display: flex;
|
margin-bottom: $margin/2;
|
||||||
.news-item{
|
}
|
||||||
margin: 0 10rpx;
|
|
||||||
width: calc(25% - 20rpx);
|
&-title {
|
||||||
.news-cover{
|
line-height: 40rpx;
|
||||||
position: relative;
|
font-size: $title-size-sm;
|
||||||
width: 100%;
|
color: $text-color;
|
||||||
padding-top: 100%;
|
}
|
||||||
background-color: white;
|
}
|
||||||
border-radius: $radius-lg;
|
}
|
||||||
overflow: hidden;
|
|
||||||
image{
|
// 卡片推荐
|
||||||
position: absolute;
|
.card-box {
|
||||||
top: 0;
|
padding: $padding $padding - 10;
|
||||||
left: 0;
|
padding-bottom: 0;
|
||||||
width: 100%;
|
display: flex;
|
||||||
height: 100%;
|
flex-wrap: wrap;
|
||||||
}
|
|
||||||
}
|
&-item {
|
||||||
.news-title{
|
margin: 0 10rpx;
|
||||||
margin-top: $margin/2;
|
width: calc(50% - 20rpx);
|
||||||
font-size: $title-size-sm;
|
padding: $padding;
|
||||||
text-align: center;
|
border-radius: $radius;
|
||||||
color: $text-color;
|
box-sizing: border-box;
|
||||||
line-height: 40rpx;
|
position: relative;
|
||||||
}
|
|
||||||
.news-price{
|
.card-title {
|
||||||
text-align: center;
|
font-size: $title-size-lg;
|
||||||
font-size: $title-size-sm;
|
font-weight: bold;
|
||||||
font-weight: bold;
|
color: $text-color;
|
||||||
color: $text-price;
|
line-height: 40rpx;
|
||||||
line-height: 40rpx;
|
width: calc(100% - 80rpx);
|
||||||
text{
|
overflow: hidden;
|
||||||
margin-left: 6rpx;
|
text-overflow: ellipsis;
|
||||||
font-size: 70%;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
.card-subtitle {
|
||||||
}
|
font-size: 22rpx;
|
||||||
}
|
color: $text-gray;
|
||||||
.offline-box{
|
// line-height: 40rpx;
|
||||||
.title{
|
min-height: 20rpx;
|
||||||
font-size: $title-size-lg;
|
@extend .nowrap;
|
||||||
color: $text-color;
|
}
|
||||||
font-weight: bold;
|
|
||||||
margin-top: $margin;
|
.card-cover {
|
||||||
margin-left: $margin;
|
width: 80rpx;
|
||||||
display: flex;
|
height: 80rpx;
|
||||||
flex-direction: row;
|
position: absolute;
|
||||||
align-items: center;
|
border-radius: 50%;
|
||||||
justify-content: space-between;
|
right: $margin;
|
||||||
box-sizing: border-box;
|
top: $margin;
|
||||||
.more{
|
}
|
||||||
flex: 1;
|
}
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
&-item:nth-child(1) {
|
||||||
align-items: center;
|
background: #fef2ae;
|
||||||
justify-content: space-between;
|
}
|
||||||
box-sizing: border-box;
|
|
||||||
padding-right: $padding;
|
&-item:nth-child(2) {
|
||||||
.more-txt{
|
background: #c9ead9;
|
||||||
font-size: 24rpx;
|
}
|
||||||
color: $text-gray;
|
}
|
||||||
font-weight: normal;
|
|
||||||
}
|
// 上新精选
|
||||||
}
|
.new-box {
|
||||||
}
|
padding: 0 $margin;
|
||||||
.card-btn{
|
border-radius: $radius;
|
||||||
font-size: 22rpx;
|
|
||||||
color: #fff;
|
// padding: $padding - 10;
|
||||||
padding: 4rpx 20rpx;
|
.title {
|
||||||
border-radius: 20rpx;
|
font-size: $title-size-lg;
|
||||||
background-color: $text-price;
|
color: $text-color;
|
||||||
display: inline-block;
|
font-weight: bold;
|
||||||
}
|
padding-bottom: 10rpx;
|
||||||
|
display: flex;
|
||||||
.card-box {
|
flex-direction: row;
|
||||||
// &-item{
|
align-items: center;
|
||||||
// background: #fff !important;
|
justify-content: flex-start;
|
||||||
// }
|
box-sizing: border-box;
|
||||||
&-item:nth-child(1){
|
|
||||||
background: #fef2ae;
|
.title-des {
|
||||||
background: rgba($color: #fef2ae, $alpha:.5);
|
font-size: 24rpx !important;
|
||||||
}
|
padding-left: 10rpx;
|
||||||
&-item:nth-child(2){
|
color: $text-gray-m;
|
||||||
background: #c9ead9;
|
font-weight: normal;
|
||||||
background: rgba($color: #c9ead9, $alpha:.5);
|
}
|
||||||
}
|
|
||||||
&-item:nth-child(3){
|
.more {
|
||||||
margin-top: $padding - 8;
|
flex: 1;
|
||||||
background: #bde0ff;
|
display: flex;
|
||||||
background: rgba($color: #bde0ff, $alpha:.5);
|
flex-direction: row;
|
||||||
}
|
align-items: center;
|
||||||
&-item:nth-child(4){
|
justify-content: space-between;
|
||||||
margin-top: $padding - 8;
|
box-sizing: border-box;
|
||||||
background: rgba($color: #ffd9e1, $alpha:.5);
|
padding-right: $padding;
|
||||||
}
|
|
||||||
}
|
.more-txt {
|
||||||
.card-cover{
|
font-size: 24rpx;
|
||||||
width: 100rpx;
|
color: $text-gray;
|
||||||
height: 100rpx;
|
font-weight: normal;
|
||||||
position: absolute;
|
}
|
||||||
right: $margin;
|
}
|
||||||
top: $margin;
|
}
|
||||||
}
|
|
||||||
.title-des{
|
.news {
|
||||||
font-size: 24rpx;
|
margin: $margin/2 -10rpx 0;
|
||||||
padding-left: 10rpx;
|
display: flex;
|
||||||
color: $text-gray-m;
|
|
||||||
font-weight: normal;
|
.news-item {
|
||||||
}
|
margin: 0 10rpx;
|
||||||
}
|
width: calc(25% - 20rpx);
|
||||||
// swiper
|
|
||||||
.swiper{
|
.news-cover {
|
||||||
background: linear-gradient(#FFF, #F3F6FB);
|
position: relative;
|
||||||
padding: $padding;
|
width: 100%;
|
||||||
.swiper-box{
|
padding-top: 100%;
|
||||||
position: relative;
|
background-color: white;
|
||||||
padding-top: 40%;
|
border-radius: $radius-lg;
|
||||||
swiper,
|
overflow: hidden;
|
||||||
image{
|
|
||||||
position: absolute;
|
image {
|
||||||
top: 0;
|
position: absolute;
|
||||||
left: 0;
|
top: 0;
|
||||||
width: 100%;
|
left: 0;
|
||||||
height: 100%;
|
width: 100%;
|
||||||
}
|
height: 100%;
|
||||||
image{
|
}
|
||||||
border-radius: $radius;
|
|
||||||
}
|
.tags {
|
||||||
}
|
position: absolute;
|
||||||
.swiper-pages{
|
top: 6rpx;
|
||||||
position: absolute;
|
left: -54rpx;
|
||||||
z-index: 9;
|
background: #d81e06;
|
||||||
left: 0;
|
color: #fff;
|
||||||
right: 0;
|
width: 100%;
|
||||||
bottom: $margin - 10;
|
font-size: 24rpx;
|
||||||
height: 7rpx;
|
padding: 4rpx 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
.pages-item{
|
transform: rotate(-45deg);
|
||||||
vertical-align: top;
|
font-weight: bold;
|
||||||
display: inline-block;
|
letter-spacing:2rpx;
|
||||||
height: 7rpx;
|
}
|
||||||
width: 25rpx;
|
}
|
||||||
margin: 0 5rpx;
|
|
||||||
background: rgba($color: #fff, $alpha: .5);
|
.news-title {
|
||||||
&.show{
|
margin-top: $margin/2;
|
||||||
background: white;
|
font-size: $title-size-sm;
|
||||||
}
|
text-align: center;
|
||||||
}
|
color: $text-color;
|
||||||
}
|
line-height: 40rpx;
|
||||||
}
|
}
|
||||||
</style>
|
|
||||||
|
.news-price {
|
||||||
|
text-align: center;
|
||||||
|
font-size: $title-size-sm;
|
||||||
|
font-weight: bold;
|
||||||
|
color: $text-price;
|
||||||
|
line-height: 40rpx;
|
||||||
|
|
||||||
|
text {
|
||||||
|
margin-left: 6rpx;
|
||||||
|
font-size: 70%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.through{
|
||||||
|
text-decoration: line-through !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.offline-box {
|
||||||
|
.title {
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
color: $text-color;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: $margin;
|
||||||
|
margin-left: $margin;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.more {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding-right: $padding;
|
||||||
|
|
||||||
|
.more-txt {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: $text-gray;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-btn {
|
||||||
|
font-size: 22rpx;
|
||||||
|
color: #fff;
|
||||||
|
padding: 4rpx 20rpx;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
background-color: $text-price;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-box {
|
||||||
|
|
||||||
|
// &-item{
|
||||||
|
// background: #fff !important;
|
||||||
|
// }
|
||||||
|
&-item:nth-child(1) {
|
||||||
|
background: #fef2ae;
|
||||||
|
background: rgba($color: #fef2ae, $alpha:.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-item:nth-child(2) {
|
||||||
|
background: #c9ead9;
|
||||||
|
background: rgba($color: #c9ead9, $alpha:.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-item:nth-child(3) {
|
||||||
|
margin-top: $padding - 8;
|
||||||
|
background: #bde0ff;
|
||||||
|
background: rgba($color: #bde0ff, $alpha:.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
&-item:nth-child(4) {
|
||||||
|
margin-top: $padding - 8;
|
||||||
|
background: rgba($color: #ffd9e1, $alpha:.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-cover {
|
||||||
|
width: 100rpx;
|
||||||
|
height: 100rpx;
|
||||||
|
position: absolute;
|
||||||
|
right: $margin;
|
||||||
|
top: $margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-des {
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding-left: 10rpx;
|
||||||
|
color: $text-gray-m;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiper
|
||||||
|
.swiper {
|
||||||
|
background: linear-gradient(#FFF, #F3F6FB);
|
||||||
|
padding: $padding;
|
||||||
|
|
||||||
|
.swiper-box {
|
||||||
|
position: relative;
|
||||||
|
padding-top: 40%;
|
||||||
|
|
||||||
|
swiper,
|
||||||
|
image {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
image {
|
||||||
|
border-radius: $radius;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.swiper-pages {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 9;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: $margin - 10;
|
||||||
|
height: 7rpx;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.pages-item {
|
||||||
|
vertical-align: top;
|
||||||
|
display: inline-block;
|
||||||
|
height: 7rpx;
|
||||||
|
width: 25rpx;
|
||||||
|
margin: 0 5rpx;
|
||||||
|
background: rgba($color: #fff, $alpha: .5);
|
||||||
|
|
||||||
|
&.show {
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { lists, classify } from "@/apis/interfaces/store"
|
import { lists, categories } from "@/apis/interfaces/store"
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@@ -46,17 +46,21 @@
|
|||||||
uni.setNavigationBarTitle({
|
uni.setNavigationBarTitle({
|
||||||
title: this.$Route.query.title
|
title: this.$Route.query.title
|
||||||
})
|
})
|
||||||
|
if (this.$Route.query.id) {
|
||||||
|
this.cid = this.$Route.query.id
|
||||||
|
} else {
|
||||||
|
this.getClassify();
|
||||||
|
}
|
||||||
this.getLists()
|
this.getLists()
|
||||||
this.getClassify()
|
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
// 商品列表
|
// 商品列表
|
||||||
getLists() {
|
getLists() {
|
||||||
lists({
|
let data = {
|
||||||
category_id : this.$Route.query.id,
|
category_id : this.cid,
|
||||||
category_cid: this.cid,
|
|
||||||
page : this.page
|
page : this.page
|
||||||
}).then(res => {
|
};
|
||||||
|
lists(data).then(res => {
|
||||||
if(res.page.current === 1){
|
if(res.page.current === 1){
|
||||||
this.goodsArr = []
|
this.goodsArr = []
|
||||||
}
|
}
|
||||||
@@ -67,14 +71,15 @@
|
|||||||
},
|
},
|
||||||
// 获取二级分类
|
// 获取二级分类
|
||||||
getClassify(){
|
getClassify(){
|
||||||
classify(this.$Route.query.id).then(res => {
|
categories().then(res => {
|
||||||
this.classify = this.classify.concat(res)
|
this.classify = this.classify.concat(res)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
// 二级分类筛选
|
// 二级分类筛选
|
||||||
onTabs(e){
|
onTabs(e){
|
||||||
this.goodsArr = []
|
this.page = 1;
|
||||||
this.cid = e.category_id
|
this.goodsArr = [];
|
||||||
|
this.cid = e.category_id;
|
||||||
this.getLists()
|
this.getLists()
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1,401 +1,432 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="shopDetail">
|
<view class="shopDetail">
|
||||||
<view class="top">
|
<view class="top">
|
||||||
<view class="search" @click="search">
|
<view class="search" @click="search">
|
||||||
<uni-icons type="left" class="back" size="30" @click="$Router.back();" />
|
<uni-icons type="left" class="back" size="30" @click="$Router.back();" />
|
||||||
<view class="input">
|
<view class="input">
|
||||||
<uni-icons type="search" class="search-icon" color="grey" size="20" /> 请输入要搜索商品的关键词
|
<uni-icons type="search" class="search-icon" color="grey" size="20" /> 请输入要搜索商品的关键词
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="shopInfo">
|
<view class="shopInfo">
|
||||||
<view class="shopInfo-title-left">
|
<view class="shopInfo-title-left">
|
||||||
<image class="shop-logo" :src="logo" mode="aspectFill" />
|
<image class="shop-logo" :src="logo" mode="aspectFill" />
|
||||||
<view class="shop-title">
|
<view class="shop-title">
|
||||||
<view class="shop-titl">{{name}}</view>
|
<view class="shop-titl">{{name}}</view>
|
||||||
<view>店铺评分:<span class='no'>5.0</span> 服务态度 :<span class='no'>5.0</span></view>
|
<view>店铺评分:<span class='no'>5.0</span> 服务态度 :<span class='no'>5.0</span></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="shopInfo-title-right"> +关注 </view> -->
|
<view class="shopInfo-title-right" v-if="shopType === 2" @click="goVip"> {{!vip.status?'开通会员':vip.name}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="content">
|
</view>
|
||||||
<view class="left">
|
<view class="content">
|
||||||
<scroll-view scroll-y="true" class="scroll-view-left">
|
<view class="left">
|
||||||
<view :class="['classify-item', item.category_id === category_id?'active_classify_item':'']"
|
<scroll-view scroll-y="true" class="scroll-view-left">
|
||||||
v-for="(item,index) in classify" :key="index" @click="selectClassify(item.category_id)">
|
<view :class="['classify-item', item.category_id === category_id?'active_classify_item':'']"
|
||||||
{{item.name}}
|
v-for="(item,index) in classify" :key="index" @click="selectClassify(item.category_id)">
|
||||||
</view>
|
{{item.name}}
|
||||||
</scroll-view>
|
</view>
|
||||||
</view>
|
</scroll-view>
|
||||||
<view class="right">
|
</view>
|
||||||
<scroll-view scroll-y="true" class="scroll-view-right" @scrolltolower='lower'>
|
<view class="right">
|
||||||
<block v-if="goods.length > 0">
|
<scroll-view scroll-y="true" class="scroll-view-right" @scrolltolower='lower'>
|
||||||
<view class="goods-item" v-for="(item,index) in goods" :key="index"
|
<block v-if="goods.length > 0">
|
||||||
@click="onGoods(item.goods_id)">
|
<view class="goods-item" v-for="(item,index) in goods" :key="index"
|
||||||
<image :src="item.cover" mode="aspectFill" class="good-img" />
|
@click="onGoods(item.goods_id)">
|
||||||
<view class="item--content">
|
<image :src="item.cover" mode="aspectFill" class="good-img" />
|
||||||
<view class="title">{{item.name}}</view>
|
<view class="item--content">
|
||||||
<view class="sub_title">{{item.shop.name}}</view>
|
<view class="title">{{item.name}}</view>
|
||||||
<view class="price">{{item.price.price_min || '0'}}
|
<view class="sub_title">{{item.shop.name}}</view>
|
||||||
<view class="price-type">
|
<view class="price">{{item.price.price_min || '0'}}
|
||||||
<text> DT积分</text>
|
<view class="price-type">
|
||||||
<text class="kucun"> 库存量:{{item.stock}}</text>
|
<text> DT积分</text>
|
||||||
</view>
|
<text class="kucun"> 库存量:{{item.stock}}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</view>
|
||||||
<block v-else>
|
</block>
|
||||||
<view class="vertical pages-empty">
|
<block v-else>
|
||||||
<u-empty icon="http://cdn.uviewui.com/uview/empty/list.png" textColor="#999" text="暂无相关商品">
|
<view class="vertical pages-empty">
|
||||||
</u-empty>
|
<u-empty icon="http://cdn.uviewui.com/uview/empty/list.png" textColor="#999" text="暂无相关商品">
|
||||||
</view>
|
</u-empty>
|
||||||
</block>
|
</view>
|
||||||
</scroll-view>
|
</block>
|
||||||
</view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
shopsDetail,
|
shopsDetail,
|
||||||
shopsGoods
|
shopsGoods
|
||||||
} from "@/apis/interfaces/store"
|
} from "@/apis/interfaces/store"
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
name : '',
|
name: '',
|
||||||
logo : '',
|
logo: '',
|
||||||
category_id : '',
|
category_id: '',
|
||||||
classify : [],
|
classify: [],
|
||||||
goods : [],
|
goods: [],
|
||||||
has_more:true,
|
has_more: true,
|
||||||
page:1,
|
page: 1,
|
||||||
ShopId:'',
|
ShopId: '',
|
||||||
}
|
shopType: '', // 1。普通商品 2.会员制商品
|
||||||
},
|
vip: {},
|
||||||
onLoad(e) {
|
}
|
||||||
this.ShopId = this.$Route.query.ShopId
|
|
||||||
shopsDetail(this.ShopId).then(res => {
|
|
||||||
this.classify = [{
|
|
||||||
category_id: '',
|
|
||||||
name: '全部商品',
|
|
||||||
}, ...res.categories]
|
|
||||||
this.name = res.name
|
|
||||||
this.logo = res.cover
|
|
||||||
this.getGoods()
|
|
||||||
}).catch(err => {
|
|
||||||
uni.showToast({
|
|
||||||
title: err.message,
|
|
||||||
icon: 'none'
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
onPullDownRefresh() {
|
|
||||||
this.has_more = true;
|
|
||||||
this.page = 1;
|
|
||||||
this.goods = [];
|
|
||||||
this.getGoods()
|
|
||||||
},
|
},
|
||||||
methods: {
|
onLoad(e) {
|
||||||
getGoods() {
|
this.ShopId = this.$Route.query.ShopId
|
||||||
uni.showLoading({
|
shopsDetail(this.ShopId).then(res => {
|
||||||
title:'请求中~',
|
// vip 制 商品
|
||||||
mask:true,
|
if (res.type.code == 2) {
|
||||||
|
this.classify = [{
|
||||||
|
category_id: '',
|
||||||
|
name: '全部活动',
|
||||||
|
}, ...res.identities]
|
||||||
|
} else {
|
||||||
|
// 普通商品
|
||||||
|
this.classify = [{
|
||||||
|
category_id: '',
|
||||||
|
name: '全部商品',
|
||||||
|
}, ...res.categories]
|
||||||
|
}
|
||||||
|
this.name = res.name
|
||||||
|
this.logo = res.cover
|
||||||
|
this.vip = res.vip
|
||||||
|
this.shopType = res.type.code
|
||||||
|
this.getGoods()
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onPullDownRefresh() {
|
||||||
|
this.has_more = true;
|
||||||
|
this.page = 1;
|
||||||
|
this.goods = [];
|
||||||
|
this.getGoods()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getGoods() {
|
||||||
|
uni.showLoading({
|
||||||
|
title: '请求中~',
|
||||||
|
mask: true,
|
||||||
|
})
|
||||||
|
let data = {
|
||||||
|
shop_id: this.ShopId,
|
||||||
|
page: this.page,
|
||||||
|
}
|
||||||
|
if (this.shopType == 2) {
|
||||||
|
data.identity_id = this.category_id
|
||||||
|
data.is_user = 1
|
||||||
|
} else {
|
||||||
|
data.category_id = this.category_id
|
||||||
|
}
|
||||||
|
shopsGoods(data).then(res => {
|
||||||
|
this.goods = this.goods.concat(res.data);
|
||||||
|
this.has_more = res.page.has_more;
|
||||||
|
uni.hideLoading();
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
})
|
})
|
||||||
shopsGoods(this.ShopId, this.category_id,this.page).then(res => {
|
|
||||||
this.goods = this.goods.concat(res.data);
|
|
||||||
this.has_more = res.page.has_more;
|
|
||||||
uni.hideLoading();
|
|
||||||
}).catch(err => {
|
|
||||||
uni.showToast({
|
|
||||||
title: err.message,
|
|
||||||
icon: 'none'
|
|
||||||
})
|
|
||||||
})
|
|
||||||
},
|
|
||||||
lower(){
|
|
||||||
if(this.has_more){
|
|
||||||
this.page = this.page + 1
|
|
||||||
this.getGoods();
|
|
||||||
}else{
|
|
||||||
uni.showToast({
|
|
||||||
title:'没有更多~',
|
|
||||||
icon:"none",
|
|
||||||
mask:true,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
selectClassify(id) {
|
lower() {
|
||||||
if (id === this.category_id) return;
|
if (this.has_more) {
|
||||||
this.category_id = id;
|
this.page = this.page + 1
|
||||||
this.page = 1;
|
this.getGoods();
|
||||||
this.goods =[];
|
} else {
|
||||||
this.has_more = true;
|
uni.showToast({
|
||||||
this.getGoods()
|
title: '没有更多~',
|
||||||
},
|
icon: "none",
|
||||||
search() {
|
mask: true,
|
||||||
this.$Router.push({
|
})
|
||||||
name: 'StoreSearch'
|
}
|
||||||
});
|
},
|
||||||
},
|
selectClassify(id) {
|
||||||
onGoods(id) {
|
if (id === this.category_id) return;
|
||||||
this.$Router.push({
|
this.category_id = id;
|
||||||
name: 'StoreGoods',
|
this.page = 1;
|
||||||
params: {
|
this.goods = [];
|
||||||
id: id
|
this.has_more = true;
|
||||||
}
|
this.getGoods()
|
||||||
})
|
},
|
||||||
}
|
search() {
|
||||||
}
|
this.$Router.push({
|
||||||
}
|
name: 'StoreSearch'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
goVip() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/store/vip/index/index?id=' + this.ShopId
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onGoods(id) {
|
||||||
|
this.$Router.push({
|
||||||
|
name: 'StoreGoods',
|
||||||
|
params: {
|
||||||
|
id: id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.pages-empty {
|
.pages-empty {
|
||||||
height: 70vh;
|
height: 70vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.shopDetail {
|
.shopDetail {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
|
|
||||||
.top {
|
.top {
|
||||||
height: 320rpx;
|
height: 320rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding-top: 44px;
|
padding-top: 44px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.search {
|
.search {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-right: $padding;
|
padding-right: $padding;
|
||||||
|
|
||||||
.back {
|
.back {
|
||||||
padding: 0 $padding;
|
padding: 0 $padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input {
|
.input {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
background-color: #f9f9f9;
|
background-color: #f9f9f9;
|
||||||
color: gray;
|
color: gray;
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
border-radius: 30rpx;
|
border-radius: 30rpx;
|
||||||
padding: 10rpx $padding;
|
padding: 10rpx $padding;
|
||||||
|
|
||||||
.search-icon {
|
.search-icon {
|
||||||
margin-right: $margin;
|
margin-right: $margin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.shopInfo {
|
.shopInfo {
|
||||||
border-top: solid 1 #f9f9f9;
|
border-top: solid 1 #f9f9f9;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: $padding - 10;
|
padding: $padding - 10;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
|
||||||
.shopInfo-title-left {
|
.shopInfo-title-left {
|
||||||
width: 500rpx;
|
width: 500rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.shop-logo {
|
.shop-logo {
|
||||||
width: 100rpx;
|
width: 100rpx;
|
||||||
height: 100rpx;
|
height: 100rpx;
|
||||||
border-radius: 10rpx;
|
border-radius: 10rpx;
|
||||||
border: solid 1rpx #f9f9f9;
|
border: solid 1rpx #f9f9f9;
|
||||||
}
|
}
|
||||||
|
|
||||||
.shop-title {
|
.shop-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
margin-left: $margin;
|
margin-left: $margin;
|
||||||
color: #999;
|
color: #999;
|
||||||
width: 370rpx;
|
width: 370rpx;
|
||||||
|
|
||||||
.no {
|
.no {
|
||||||
color: $text-price;
|
color: $text-price;
|
||||||
padding-left: 4rpx;
|
padding-left: 4rpx;
|
||||||
padding-right: 10rpx;
|
padding-right: 10rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.shop-titl {
|
.shop-titl {
|
||||||
font-size: 34rpx;
|
font-size: 34rpx;
|
||||||
color: #333;
|
color: #333;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
margin-bottom: 6rpx;
|
margin-bottom: 6rpx;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.shopInfo-title-right {
|
.shopInfo-title-right {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #222;
|
color: #222;
|
||||||
background-color: $main-color;
|
background-color: $main-color;
|
||||||
padding: 6rpx $padding;
|
padding: 6rpx $padding;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
height: calc(100vh - 320rpx);
|
height: calc(100vh - 320rpx);
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding-top: 20rpx;
|
padding-top: 20rpx;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
width: 180rpx;
|
width: 180rpx;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.scroll-view-left {
|
.scroll-view-left {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.classify-item {
|
.classify-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: $padding 0;
|
padding: $padding 0;
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
color: #222;
|
color: #222;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active_classify_item {
|
.active_classify_item {
|
||||||
background-color: #FFFFFF;
|
background-color: #FFFFFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.right {
|
.right {
|
||||||
width: calc(100% - 180rpx);
|
width: calc(100% - 180rpx);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
|
||||||
.scroll-view-right {
|
.scroll-view-right {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.goods-item {
|
.goods-item {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
border-bottom: solid 1rpx #eee;
|
border-bottom: solid 1rpx #eee;
|
||||||
// padding: $padding;
|
// padding: $padding;
|
||||||
padding-left: $padding;
|
padding-left: $padding;
|
||||||
padding-top: $padding;
|
padding-top: $padding;
|
||||||
padding-bottom: $padding;
|
padding-bottom: $padding;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.good-img {
|
.good-img {
|
||||||
width: 160rpx;
|
width: 160rpx;
|
||||||
height: 160rpx;
|
height: 160rpx;
|
||||||
border-radius: 10rpx;
|
border-radius: 10rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item--content {
|
.item--content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: $padding - 10;
|
padding: $padding - 10;
|
||||||
|
|
||||||
&>.title {
|
&>.title {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
color: #333;
|
color: #333;
|
||||||
// @extend .ellipsis-1;
|
// @extend .ellipsis-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
&>.sub_title {
|
&>.sub_title {
|
||||||
color: #a05f0c;
|
color: #a05f0c;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
padding-top: 4rpx;
|
padding-top: 4rpx;
|
||||||
// @extend .ellipsis-1;
|
// @extend .ellipsis-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
&>.price {
|
&>.price {
|
||||||
padding-top: $padding/2;
|
padding-top: $padding/2;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
line-height: 40rpx;
|
line-height: 40rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
color: $text-price;
|
color: $text-price;
|
||||||
|
|
||||||
// @extend .ellipsis-1;
|
// @extend .ellipsis-1;
|
||||||
.price-type {
|
.price-type {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
position: relative;
|
||||||
|
top: 5rpx;
|
||||||
|
|
||||||
text {
|
text {
|
||||||
margin-right: $margin/2;
|
margin-right: $margin/2;
|
||||||
padding-left: 6rpx;
|
padding-left: 6rpx;
|
||||||
font-size: 70%;
|
font-size: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.kucun {
|
.kucun {
|
||||||
color: $text-gray;
|
color: $text-gray;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
126
pages/store/vip-list/vip-list.vue
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
<template>
|
||||||
|
<view class="groupBook">
|
||||||
|
<view class="top">
|
||||||
|
<view class="title">VIP换购</view>
|
||||||
|
<view>百款商品任意换购</view>
|
||||||
|
</view>
|
||||||
|
<!-- 有数据 -->
|
||||||
|
<scroll-view scroll-y="true" class="scroll" @scrolltolower='scrolltolower' v-if="lists.length>0">
|
||||||
|
<block v-for="(item,index) in lists" :key="index">
|
||||||
|
<vipGoodsItem :item="item" @goPin="goPin" />
|
||||||
|
</block>
|
||||||
|
</scroll-view>
|
||||||
|
<!-- 没数据 -->
|
||||||
|
<scroll-view scroll-y="true" class="scroll" v-else>
|
||||||
|
<view class="vertical pages-empty" style="padding-top: 200rpx;">
|
||||||
|
<u-empty
|
||||||
|
icon="http://cdn.uviewui.com/uview/empty/list.png"
|
||||||
|
textColor="#999"
|
||||||
|
text="暂无VIP商品~"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import vipGoodsItem from '@/components/vip-goods-item/index.vue'
|
||||||
|
import {
|
||||||
|
lists
|
||||||
|
} from '@/apis/interfaces/store.js'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
vipGoodsItem
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
lists: [],
|
||||||
|
page: 1,
|
||||||
|
has_more: true,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
onLoad() {
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getList() {
|
||||||
|
lists({
|
||||||
|
is_user:'1',
|
||||||
|
page: this.page
|
||||||
|
}).then(res => {
|
||||||
|
this.lists = this.lists.concat(res.data)
|
||||||
|
this.has_more = res.page.has_more
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: "none",
|
||||||
|
mask: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 触底获取更多~
|
||||||
|
scrolltolower() {
|
||||||
|
if (this.has_more) {
|
||||||
|
this.page = this.page + 1
|
||||||
|
this.getList()
|
||||||
|
}else{
|
||||||
|
uni.showToast({
|
||||||
|
title:'没有更多~',
|
||||||
|
icon:'none'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 马上拼团
|
||||||
|
goPin(id) {
|
||||||
|
console.log('fule gopin....')
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/store/goods?id='+id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.groupBook {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100vh;
|
||||||
|
position: relative;
|
||||||
|
background: $window-color;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.top {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
font-size: $title-size - 2;
|
||||||
|
color: #fff;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: $padding;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: linear-gradient(to bottom, #d81e06, rgba(255, 255, 255, 0));
|
||||||
|
padding-bottom: 40vh;
|
||||||
|
z-index: 1;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll {
|
||||||
|
height: 100vh;
|
||||||
|
position: relative;
|
||||||
|
padding: $padding * 4 $padding $padding $padding;
|
||||||
|
box-sizing: border-box;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
344
pages/store/vip/index/index.vue
Normal file
@@ -0,0 +1,344 @@
|
|||||||
|
<template>
|
||||||
|
<view class="store-vip">
|
||||||
|
<image class="vip-bg" src="/static/store/store-vip-bg.png" mode="widthFix"/>
|
||||||
|
<swiper class="swiper" circular>
|
||||||
|
<swiper-item class="swiper-item" v-for="item in vip" :key="item.identity_id">
|
||||||
|
<view class="top">
|
||||||
|
<view class="left" v-if="vip.length > 1">
|
||||||
|
<image class="left-img" src="/static/store/get-more.gif" mode="widthFix" /> 滑动获取更多
|
||||||
|
</view>
|
||||||
|
<view class="content">
|
||||||
|
<!-- 四个角标 -->
|
||||||
|
<block> <image class="jiao" src="/static/store/vip-left-top.png" mode="widthFix" /> <image class="jiao" src="/static/store/vip-right-top.png" mode="widthFix" /> <image class="jiao" src="/static/store/vip-left-bottom.png" mode="widthFix" /> <image class="jiao" src="/static/store/vip-right-bottom.png" mode="widthFix" /> </block>
|
||||||
|
<view class="title1"> {{item.shop.name}} </view>
|
||||||
|
<image class="title2" :src="item.title_cover" mode="widthFix" />
|
||||||
|
<view class="title3"> {{item.description}} </view> <!-- 分类 -->
|
||||||
|
<view class="type">
|
||||||
|
<view class="type-item" v-for="it in item.rules" :key="it.order">
|
||||||
|
<image :src="it.cover" mode="aspectFill" />
|
||||||
|
<view class="title">{{it.name}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="title4">详情咨询可添加产品页下方客服二维码</view>
|
||||||
|
</view>
|
||||||
|
<view class="right" v-if="vip.length > 1"> 滑动获取更多 <image class="right-img" src="/static/store/get-more.gif" mode="widthFix" /> </view>
|
||||||
|
</view>
|
||||||
|
<view class="bottom">
|
||||||
|
<view class="left">
|
||||||
|
<view class="title-1">立享尊贵特权 >> </view>
|
||||||
|
<view class="title-2" v-if="item.vip_info.ended_at"> 到期时间:{{item.vip_info.ended_at}} </view>
|
||||||
|
<view class="title-2" v-if="item.margins.days>0"> 距离{{item.margins.days}}天只需要补{{item.margins.price}}元升级 </view>
|
||||||
|
</view>
|
||||||
|
<view class="right" @click="onOpenVip(item.identity_id)">
|
||||||
|
{{item.is_vip ?'立即续费':item.margins.days>0 ? '立即升级':'立即开通'}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</swiper-item>
|
||||||
|
</swiper>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
shopVipInfo,
|
||||||
|
shopVipCreate,
|
||||||
|
shopVipWeChat
|
||||||
|
} from '@/apis/interfaces/vip.js'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
vip: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad(e) {
|
||||||
|
this.id = e.id;
|
||||||
|
this.getInfo()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getInfo() {
|
||||||
|
shopVipInfo(this.id).then(res => {
|
||||||
|
uni.setNavigationBarTitle({
|
||||||
|
title: res[0].shop.name + '会员'
|
||||||
|
});
|
||||||
|
this.vip = res;
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: 'none',
|
||||||
|
mask: true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 创建店铺vip会员
|
||||||
|
onOpenVip(identity) {
|
||||||
|
// 获取订单
|
||||||
|
uni.showLoading({
|
||||||
|
title: 'VIP会员开通中'
|
||||||
|
})
|
||||||
|
shopVipCreate(this.id,identity).then(res => {
|
||||||
|
// 支付参数
|
||||||
|
if (res.id) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: '获取支付信息'
|
||||||
|
})
|
||||||
|
this.wxPay(res.id)
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 微信支付
|
||||||
|
wxPay(orderId) {
|
||||||
|
shopVipWeChat(orderId).then(orderInfo => {
|
||||||
|
uni.requestPayment({
|
||||||
|
provider: "wxpay",
|
||||||
|
orderInfo: JSON.parse(orderInfo),
|
||||||
|
success: res => {
|
||||||
|
uni.showModal({
|
||||||
|
title: '提示',
|
||||||
|
content: '开通成功',
|
||||||
|
showCancel: false,
|
||||||
|
success: () => {
|
||||||
|
uni.navigateBack({})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
fail(err) {
|
||||||
|
let showToast = err.message
|
||||||
|
if (err.errMsg === 'requestPayment:fail [payment微信:-2]User canceled') {
|
||||||
|
showToast = '支付被取消'
|
||||||
|
}
|
||||||
|
uni.showToast({
|
||||||
|
title: showToast,
|
||||||
|
icon: 'none'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: 'none',
|
||||||
|
mask:true,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.store-vip {
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
background-color: #f6f1eb;
|
||||||
|
position: relative;
|
||||||
|
z-index: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.vip-bg {
|
||||||
|
width: 100%;
|
||||||
|
// height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
top: -50rpx;
|
||||||
|
left: -50rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.swiper {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
|
.swiper-item {
|
||||||
|
.top {
|
||||||
|
height: calc(100vh - 160rpx);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.right {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #999;
|
||||||
|
text-align: right;
|
||||||
|
width: 100%;
|
||||||
|
padding-bottom: 6%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-right: 20%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.right-img{
|
||||||
|
width: 50rpx;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #999;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
padding-top: 6%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
justify-content: flex-start;
|
||||||
|
margin-left: 20%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.left-img{
|
||||||
|
width: 50rpx;
|
||||||
|
transform: rotate(180deg);
|
||||||
|
margin-right: 10rpx;
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
padding: $padding * 2;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
width: 80%;
|
||||||
|
min-height: 70%;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.title1 {
|
||||||
|
font-size: 34rpx;
|
||||||
|
color: #e5c175;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title2 {
|
||||||
|
padding-top: $padding - 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 0;
|
||||||
|
padding-bottom: $padding - 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title3 {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #2f3245;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title4 {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #e5c175;
|
||||||
|
padding-top: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.type {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: $padding * 2;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.type-item {
|
||||||
|
width: 33.33%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #2f3245;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 90rpx;
|
||||||
|
height: 90rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.jiao {
|
||||||
|
width: 50rpx;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jiao:nth-child(1) {
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jiao:nth-child(2) {
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jiao:nth-child(3) {
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jiao:nth-child(4) {
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
height: 160rpx;
|
||||||
|
background-color: #2f3245;
|
||||||
|
color: #e5c175;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
.left {
|
||||||
|
color: #e5c175;
|
||||||
|
width: 70%;
|
||||||
|
height: 100%;
|
||||||
|
font-weight: bold;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.title-1 {
|
||||||
|
font-size: 36rpx;
|
||||||
|
}
|
||||||
|
.title-2{
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
background-color: #e5c175;
|
||||||
|
width: 30%;
|
||||||
|
height: 100%;
|
||||||
|
color: #2f3245;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 36rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -114,32 +114,29 @@
|
|||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
<view class="btns-box">
|
<view class="btns-box">
|
||||||
|
<view class="btns-box-item" @click="onBtn('MyCard', {})">
|
||||||
|
<image class="icon" src="@/static/user/userIcon_00.png" mode="widthFix" />
|
||||||
|
我的卡券 <uni-icons class="forward" type="forward" color="#999" />
|
||||||
|
</view>
|
||||||
<view class="btns-box-item" @click="onBtn('Address', { type: 'edit' })">
|
<view class="btns-box-item" @click="onBtn('Address', { type: 'edit' })">
|
||||||
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
|
<image class="icon" src="@/static/user/userIcon_03.png" mode="widthFix" />
|
||||||
地址管理
|
地址管理 <uni-icons class="forward" type="forward" color="#999" />
|
||||||
<uni-icons class="forward" type="forward" color="#999" />
|
|
||||||
</view>
|
</view>
|
||||||
<view class="btns-box-item" @click="onBtn('Invitation', {})">
|
<view class="btns-box-item" @click="onBtn('Invitation', {})">
|
||||||
<image class="icon" src="@/static/user/userIcon_07.png" mode="widthFix" />
|
<image class="icon" src="@/static/user/userIcon_07.png" mode="widthFix" />
|
||||||
分享邀请
|
分享邀请 <uni-icons class="forward" type="forward" color="#999" />
|
||||||
<uni-icons class="forward" type="forward" color="#999" />
|
|
||||||
</view>
|
</view>
|
||||||
<view class="btns-box-item" @click="onBtn('Supplier', {})">
|
<view class="btns-box-item" @click="onBtn('Supplier', {})">
|
||||||
<image class="icon" src="@/static/user/userIcon_09.png" mode="widthFix" />
|
<image class="icon" src="@/static/user/userIcon_09.png" mode="widthFix" />
|
||||||
供应商入驻
|
供应商入驻 <uni-icons class="forward" type="forward" color="#999" />
|
||||||
<uni-icons class="forward" type="forward" color="#999" />
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="btns-box">
|
<view class="btns-box">
|
||||||
<view class="btns-box-item" @click="onShare">
|
<view class="btns-box-item" @click="onShare">
|
||||||
<image class="icon" src="@/static/user/userIcon_14.png" mode="widthFix" />
|
<image class="icon" src="@/static/user/userIcon_14.png" mode="widthFix" />
|
||||||
绑定分享关系
|
绑定分享关系
|
||||||
<block v-if="share == null">
|
<block v-if="share == null"> <uni-icons class="forward" type="forward" color="#999" /> </block>
|
||||||
<uni-icons class="forward" type="forward" color="#999" />
|
<block v-else> <text class="forward" style="color: gray;">{{share.nickname}}</text> </block>
|
||||||
</block>
|
|
||||||
<block v-else>
|
|
||||||
<text class="forward" style="color: gray;">{{share.nickname}}</text>
|
|
||||||
</block>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="btns-box">
|
<view class="btns-box">
|
||||||
|
|||||||
179
pages/user/my-card/my-card.vue
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
<template>
|
||||||
|
<view class="my-card">
|
||||||
|
<view class="select">
|
||||||
|
{{listShowText}} <u-icon class='down' name="arrow-down-fill" size='11' color="#666" />
|
||||||
|
</view>
|
||||||
|
<block v-if="lists.length > 0">
|
||||||
|
<view class="card-item" v-for="item in lists" :key='item.card_id' @click="goShop(item.shop.shop_id)">
|
||||||
|
<image class="card-item-bg" :src="item.message.card_cover" mode="aspectFill" />
|
||||||
|
<view class="card-item-top">
|
||||||
|
<image class="avatar" :src="item.message.cover" mode="aspectFill" />
|
||||||
|
<view class="info">
|
||||||
|
<view class="title"> {{item.shop.name}}</view>
|
||||||
|
<view class="des"> NO.{{item.number}} | {{item.ended_at}} 到期</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="tags">{{item.message.title}}</view>
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
<block v-else>
|
||||||
|
<view class="vertical pages-empty" style="padding-top: 180rpx;">
|
||||||
|
<u-empty icon="http://cdn.uviewui.com/uview/empty/list.png" textColor="#999" text="暂无卡包信息~" />
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
<!-- 筛选 -->
|
||||||
|
<!-- <u-action-sheet :actions="typeList" @select="selectClick" :show="show" cancelText='取消' @close='show = false' /> -->
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {
|
||||||
|
myCard
|
||||||
|
} from '@/apis/interfaces/user.js'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
page: 1,
|
||||||
|
has_more: true,
|
||||||
|
lists: [],
|
||||||
|
typeList: [{
|
||||||
|
name: '按照会员到期时间排序'
|
||||||
|
}],
|
||||||
|
show: false,
|
||||||
|
listShowText: '按照会员到期时间排序',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
onReachBottom() {
|
||||||
|
if (this.has_more) {
|
||||||
|
this.page = this.page + 1;
|
||||||
|
this.getList();
|
||||||
|
}else{
|
||||||
|
uni.showToast({
|
||||||
|
title:'没有更多~',
|
||||||
|
icon: "none",
|
||||||
|
mask: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goShop(id) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/store/shop/shopDetail?ShopId=' + id
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getList() {
|
||||||
|
if(this.page === 1){
|
||||||
|
this.lists = []
|
||||||
|
}
|
||||||
|
myCard({
|
||||||
|
page: this.page
|
||||||
|
}).then(res => {
|
||||||
|
this.lists = this.lists.concat(res.data);
|
||||||
|
this.has_more = res.page.has_more;
|
||||||
|
}).catch(err => {
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: "none",
|
||||||
|
mask: true
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.my-card{
|
||||||
|
padding-bottom: $padding;
|
||||||
|
}
|
||||||
|
.select {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
padding: $padding;
|
||||||
|
|
||||||
|
.down {
|
||||||
|
padding-left: 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-item {
|
||||||
|
height: 180rpx;
|
||||||
|
background-color: pink;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0 $margin;
|
||||||
|
margin-bottom: $margin - 10;
|
||||||
|
.tags {
|
||||||
|
position: absolute;
|
||||||
|
top: 22rpx;
|
||||||
|
color: #fff;
|
||||||
|
right: -46rpx;
|
||||||
|
background: rgba($color: #ffaa00, $alpha: 0.9);
|
||||||
|
font-size: 30rpx;
|
||||||
|
padding: 2rpx 50rpx;
|
||||||
|
text-align: center;
|
||||||
|
transform: rotate(45deg);
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing:4rpx;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-item-bg {
|
||||||
|
position: absolute;
|
||||||
|
top: 1;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-item-top {
|
||||||
|
background-color: rgba($color: #000000, $alpha:0.6);
|
||||||
|
width: 100%;
|
||||||
|
height: 180rpx;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 2;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0 $padding;
|
||||||
|
|
||||||
|
.avatar {
|
||||||
|
width: 100rpx;
|
||||||
|
height: 100rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: solid 4rpx rgba($color: #fff, $alpha: 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
flex: 1;
|
||||||
|
padding-left: $padding;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 34rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: rgba($color: #fff, $alpha: 0.9);
|
||||||
|
}
|
||||||
|
|
||||||
|
.des {
|
||||||
|
padding-top: 6rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: rgba($color: #fff, $alpha: 0.8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -12,12 +12,8 @@
|
|||||||
<view>
|
<view>
|
||||||
<view class="vip-lv">{{identity.identity_text}}</view>
|
<view class="vip-lv">{{identity.identity_text}}</view>
|
||||||
<block>
|
<block>
|
||||||
<view class="vip-progress">
|
<view class="vip-progress"> <view class="vip-progress-loding" :style="'width:' + firstRule.rate + '%'"></view> </view>
|
||||||
<view class="vip-progress-loding" :style="'width:' + firstRule.rate + '%'"></view>
|
<view class="vip-loding"> <view>{{firstRule.current}}/{{firstRule.need}}{{firstRule.title}}</view> </view>
|
||||||
</view>
|
|
||||||
<view class="vip-loding">
|
|
||||||
<view>{{firstRule.current}}/{{firstRule.need}}{{firstRule.title}}</view>
|
|
||||||
</view>
|
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
<navigator class="vip-more" url="/pages/vip/agreement?id=2" hover-class="none">成长体系<uni-icons size="14" type="forward" color="#9f5529"></uni-icons></navigator>
|
<navigator class="vip-more" url="/pages/vip/agreement?id=2" hover-class="none">成长体系<uni-icons size="14" type="forward" color="#9f5529"></uni-icons></navigator>
|
||||||
|
|||||||
BIN
static/book/wen.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
static/store/.DS_Store
vendored
Normal file
BIN
static/store/get-more.gif
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
static/store/store-vip-bg.png
Normal file
|
After Width: | Height: | Size: 142 KiB |
BIN
static/store/store-vip-bg的副本.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
static/store/vip-left-bottom.png
Normal file
|
After Width: | Height: | Size: 150 B |
BIN
static/store/vip-left-top.png
Normal file
|
After Width: | Height: | Size: 143 B |
BIN
static/store/vip-right-bottom.png
Normal file
|
After Width: | Height: | Size: 146 B |
BIN
static/store/vip-right-top.png
Normal file
|
After Width: | Height: | Size: 147 B |