店铺会员制Vip功能增加
@@ -10,8 +10,8 @@ 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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,20 +34,18 @@ const shops = (categoryId,page) => {
|
|||||||
|
|
||||||
// 店铺详情
|
// 店铺详情
|
||||||
const shopsDetail = (shopId) => {
|
const shopsDetail = (shopId) => {
|
||||||
|
console.log(shopId,'shopId.....')
|
||||||
return request({
|
return request({
|
||||||
url: 'mall/shops/' + shopId,
|
url: 'mall/shops/' + shopId,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 店铺商品
|
// 店铺商品
|
||||||
const shopsGoods = (shopId, categoryId,page) => {
|
const shopsGoods = (data) => {
|
||||||
|
console.log(data,'shopsGoods.....')
|
||||||
return request({
|
return request({
|
||||||
url: 'mall/goods',
|
url: 'mall/goods',
|
||||||
data: {
|
data: data
|
||||||
shop_id:shopId,
|
|
||||||
category_id:categoryId,
|
|
||||||
page:page,
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -92,6 +88,7 @@
|
|||||||
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 {
|
||||||
@@ -117,6 +111,11 @@
|
|||||||
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
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
157
components/vip-goods-item/index.vue
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
<template>
|
||||||
|
<view class="goods-item">
|
||||||
|
<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> </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;
|
||||||
|
overflow: hidden;
|
||||||
|
.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: 28rpx;
|
||||||
|
padding: 6rpx 0;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.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\"/>",
|
||||||
|
|||||||
37
pages.json
@@ -531,6 +531,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/store/vip/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",
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
<view :class="['rank_type_item',type === '4'?'rank_type_item_active':'']" @click="changeType('4')">用户邀请榜
|
<view :class="['rank_type_item',type === '4'?'rank_type_item_active':'']" @click="changeType('4')">用户邀请榜
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
<view class="rank_update_time" v-if="lists.length > 0 && type !== '3'&& type !== '4'">
|
<view class="rank_update_time" v-if="lists.length > 0 && type !== '3'&& type !== '4' && showCountDown">
|
||||||
<view class="title"> 加成{{type === '1'?'结束':'生效'}}倒计时 : </view>
|
<view class="title"> 加成{{type === '1'?'结束':'生效'}}倒计时 : </view>
|
||||||
<u-count-down :time="end_timestamp" format="DD:HH:mm:ss" autoStart millisecond @change="onChange">
|
<u-count-down ref="countDown" :time="end_timestamp" format="DD:HH:mm:ss" autoStart millisecond @change="onChange">
|
||||||
<view class="time">
|
<view class="time">
|
||||||
<view class="time__item">
|
<view class="time__item">
|
||||||
<view class="time__item_no">{{ timeData.days }} </view>天
|
<view class="time__item_no">{{ timeData.days }} </view>天
|
||||||
@@ -92,12 +92,15 @@
|
|||||||
timeData: {},
|
timeData: {},
|
||||||
type: "1", // 1 加成榜 2邀请榜
|
type: "1", // 1 加成榜 2邀请榜
|
||||||
page_id: '',
|
page_id: '',
|
||||||
|
showCountDown:false, // 是否显示倒计时 默认不显示,隐藏页面移出
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
this.getList();
|
this.getList();
|
||||||
},
|
},
|
||||||
|
onHide() {
|
||||||
|
this.showCountDown = false;
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
onChange(e) {
|
onChange(e) {
|
||||||
this.timeData = e
|
this.timeData = e
|
||||||
@@ -132,6 +135,7 @@
|
|||||||
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;
|
||||||
uni.hideLoading()
|
uni.hideLoading()
|
||||||
|
this.showCountDown = true;
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: err.message,
|
title: err.message,
|
||||||
|
|||||||
@@ -1,338 +1,410 @@
|
|||||||
<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>
|
||||||
<view class="order-count">
|
<view class="order-count">
|
||||||
<view class="order-price">{{item.items[0].price}}<text class="type">DT积分</text></view>
|
<view class="order-price">{{item.items[0].price}}<text class="type">DT积分</text></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
<!-- 订单信息 -->
|
<!-- 订单信息 -->
|
||||||
<view class="block info-box">
|
<view class="block info-box">
|
||||||
<view class="info-item">
|
<view class="info-item">
|
||||||
<view class="label">购买数量</view>
|
<view class="label">购买数量</view>
|
||||||
<uni-number-box class="info-number" :value="qty" :min="1" :max="999" @change="numberChange" />
|
<uni-number-box class="info-number" :value="qty" :min="1" :max="999" @change="numberChange" />
|
||||||
</view>
|
</view>
|
||||||
<view class="info-item">
|
<view class="info-item">
|
||||||
<view class="label">配送方式</view>
|
<view class="label">配送方式</view>
|
||||||
<view class="nowrap">快递</view>
|
<view class="nowrap">快递</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="info-item">
|
<view class="info-item">
|
||||||
<view class="label">配送费用</view>
|
<view class="label">配送费用</view>
|
||||||
<view class="nowrap">{{freight == 0 ? '免费': freight}}</view>
|
<view class="nowrap">{{freight == 0 ? '免费': freight}}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="block info-box">
|
<view class="block info-box">
|
||||||
<view class="info-item">
|
<view class="info-item">
|
||||||
<view class="label">订单备注</view>
|
<view class="label">订单备注</view>
|
||||||
<textarea class="info-textarea" v-model="remark" placeholder="请输入备注"></textarea>
|
<textarea class="info-textarea" v-model="remark" placeholder="请输入备注"></textarea>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- footer -->
|
<!-- footer -->
|
||||||
<view class="order-footer">
|
<view class="order-footer">
|
||||||
<view class="total">总计:<text>{{total}} <text class="type">DT积分</text></text></view>
|
<view class="total">总计:<text>{{total}} <text class="type">DT积分</text></text></view>
|
||||||
<button class="btn" @click="subOrder">确认订单</button>
|
<button class="btn" @click="subOrder">确认订单</button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { buy, verify } from '@/apis/interfaces/store'
|
import {
|
||||||
export default {
|
buy,
|
||||||
data() {
|
verify
|
||||||
return {
|
} from '@/apis/interfaces/store'
|
||||||
qty : 0,
|
export default {
|
||||||
goodsInfo : [],
|
data() {
|
||||||
total : 0,
|
return {
|
||||||
freight : 0,
|
qty: 0,
|
||||||
address : "",
|
goodsInfo: [],
|
||||||
remark : "",
|
total: 0,
|
||||||
canApply :true
|
freight: 0,
|
||||||
};
|
address: "",
|
||||||
},
|
remark: "",
|
||||||
onShow(){
|
canApply: true
|
||||||
if(JSON.stringify(this.$store.getters.getAddress) !== '{}') this.address = this.$store.getters.getAddress
|
};
|
||||||
this.qty= this.$Route.query.qty;
|
},
|
||||||
},
|
onShow() {
|
||||||
mounted() {
|
if (JSON.stringify(this.$store.getters.getAddress) !== '{}') this.address = this.$store.getters.getAddress
|
||||||
this.getBuy()
|
this.qty = this.$Route.query.qty;
|
||||||
},
|
},
|
||||||
methods:{
|
mounted() {
|
||||||
getBuy(){
|
this.getBuy()
|
||||||
buy({
|
},
|
||||||
goods_sku_id: this.$Route.query.skuId,
|
methods: {
|
||||||
qty: this.qty
|
getBuy() {
|
||||||
}).then(res => {
|
buy({
|
||||||
this.address = res.address
|
goods_sku_id: this.$Route.query.skuId,
|
||||||
this.freight = res.freight
|
qty: this.qty
|
||||||
this.total = res.total
|
}).then(res => {
|
||||||
this.goodsInfo = res.detail
|
this.address = res.address
|
||||||
}).catch(err => {
|
this.freight = res.freight
|
||||||
uni.showToast({
|
this.total = res.total
|
||||||
title: err.message,
|
this.goodsInfo = res.detail
|
||||||
icon : 'none'
|
}).catch(err => {
|
||||||
})
|
uni.showModal({
|
||||||
})
|
title: '温馨提示',
|
||||||
},
|
content: err.message,
|
||||||
numberChange(e){
|
showCancel: false,
|
||||||
this.qty = e
|
confirmColor: '#34CE98',
|
||||||
this.getBuy()
|
cancelText: '知道了',
|
||||||
},
|
success: (res) => {
|
||||||
// 确认订单
|
uni.navigateBack({ })
|
||||||
subOrder(){
|
}
|
||||||
if(this.address === ""){
|
})
|
||||||
uni.showModal({
|
})
|
||||||
title : '提示',
|
},
|
||||||
content : '暂未添加收货地址,无法下单',
|
numberChange(e) {
|
||||||
showCancel : true,
|
this.qty = e
|
||||||
confirmText : '添加',
|
this.getBuy()
|
||||||
success : res => {
|
},
|
||||||
if(res.confirm){
|
// 确认订单
|
||||||
this.$Router.push({name: 'Address'})
|
subOrder() {
|
||||||
}
|
if (this.address === "") {
|
||||||
}
|
uni.showModal({
|
||||||
})
|
title: '提示',
|
||||||
return
|
content: '暂未添加收货地址,无法下单',
|
||||||
}
|
showCancel: true,
|
||||||
if(this.canApply){
|
confirmText: '添加',
|
||||||
|
success: res => {
|
||||||
|
if (res.confirm) {
|
||||||
|
this.$Router.push({
|
||||||
|
name: 'Address'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (this.canApply) {
|
||||||
this.canApply = false;
|
this.canApply = false;
|
||||||
verify({
|
verify({
|
||||||
goods_sku_id: this.$Route.query.skuId,
|
goods_sku_id: this.$Route.query.skuId,
|
||||||
qty : this.qty,
|
qty: this.qty,
|
||||||
address_id : this.address.address_id,
|
address_id: this.address.address_id,
|
||||||
remark : this.remark || ''
|
remark: this.remark || ''
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
this.$store.commit('setAddress', {})
|
console.log(res)
|
||||||
this.$Router.replace({
|
if (res.order_no === '') {
|
||||||
name: 'Pay',
|
uni.showModal({
|
||||||
params: {
|
title: ' 温馨提示',
|
||||||
orderNo: res.order_no,
|
content: '领取商品成功',
|
||||||
price : res.total,
|
confirmColor: '#34CE98',
|
||||||
coins : res.coins,
|
confirmText: ' 查看订单',
|
||||||
}
|
cancelColor: '#999',
|
||||||
})
|
cancelText: '返回首页',
|
||||||
|
success: (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/order/index?index=0'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if (res.cancel) {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/store/index'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$store.commit('setAddress', {})
|
||||||
|
this.$Router.replace({
|
||||||
|
name: 'Pay',
|
||||||
|
params: {
|
||||||
|
orderNo: res.order_no,
|
||||||
|
price: res.total,
|
||||||
|
coins: res.coins,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
this.canApply = true
|
this.canApply = true
|
||||||
}).catch(err=>{
|
}).catch(err => {
|
||||||
this.canApply = true
|
this.canApply = true
|
||||||
|
uni.showToast({
|
||||||
|
title: err.message,
|
||||||
|
icon: "none",
|
||||||
|
mask: true,
|
||||||
|
duration: 2000
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}else{
|
} else {
|
||||||
this.canApply = true
|
this.canApply = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.content{
|
.content {
|
||||||
background: $window-color;
|
background: $window-color;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding-bottom: $padding + 80;
|
padding-bottom: $padding + 80;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
.block{
|
|
||||||
background: white;
|
.block {
|
||||||
margin: $margin;
|
background: white;
|
||||||
border-radius: $radius;
|
margin: $margin;
|
||||||
}
|
border-radius: $radius;
|
||||||
// 地址管理
|
}
|
||||||
.address{
|
|
||||||
position: relative;
|
// 地址管理
|
||||||
padding: $padding 80rpx $padding 90rpx;
|
.address {
|
||||||
font-size: $title-size-lg;
|
position: relative;
|
||||||
.user{
|
padding: $padding 80rpx $padding 90rpx;
|
||||||
font-size: $title-size;
|
font-size: $title-size-lg;
|
||||||
line-height: 40rpx;
|
|
||||||
color: $text-gray;
|
.user {
|
||||||
text{
|
font-size: $title-size;
|
||||||
color: black;
|
line-height: 40rpx;
|
||||||
max-width: 200rpx;
|
color: $text-gray;
|
||||||
display: inline-block;
|
|
||||||
margin-right: $margin/2;
|
text {
|
||||||
}
|
color: black;
|
||||||
}
|
max-width: 200rpx;
|
||||||
.city{
|
display: inline-block;
|
||||||
padding-top: $padding/2;
|
margin-right: $margin/2;
|
||||||
font-size: $title-size-sm;
|
}
|
||||||
color: $text-gray;
|
}
|
||||||
line-height: 36rpx;
|
|
||||||
}
|
.city {
|
||||||
.address-icon{
|
padding-top: $padding/2;
|
||||||
position: absolute;
|
font-size: $title-size-sm;
|
||||||
top: 50%;
|
color: $text-gray;
|
||||||
&.location{
|
line-height: 36rpx;
|
||||||
margin-top: -26rpx;
|
}
|
||||||
left: $margin - 10;
|
|
||||||
}
|
.address-icon {
|
||||||
&.arrows{
|
position: absolute;
|
||||||
margin-top: -20rpx;
|
top: 50%;
|
||||||
right: $margin - 10;
|
|
||||||
}
|
&.location {
|
||||||
}
|
margin-top: -26rpx;
|
||||||
}
|
left: $margin - 10;
|
||||||
.address-new{
|
}
|
||||||
padding: $padding;
|
|
||||||
text-align: center;
|
&.arrows {
|
||||||
height: 90rpx;
|
margin-top: -20rpx;
|
||||||
line-height: 90rpx;
|
right: $margin - 10;
|
||||||
color: $main-color;
|
}
|
||||||
.icon{
|
}
|
||||||
vertical-align: middle;
|
}
|
||||||
margin-bottom: 8rpx;
|
|
||||||
margin-right: 10rpx;
|
.address-new {
|
||||||
}
|
padding: $padding;
|
||||||
}
|
text-align: center;
|
||||||
// 订单列表
|
height: 90rpx;
|
||||||
.goods-item{
|
line-height: 90rpx;
|
||||||
display: flex;
|
color: $main-color;
|
||||||
align-items: center;
|
|
||||||
padding: $padding;
|
.icon {
|
||||||
.order-cover{
|
vertical-align: middle;
|
||||||
vertical-align: top;
|
margin-bottom: 8rpx;
|
||||||
width: 128rpx;
|
margin-right: 10rpx;
|
||||||
height: 128rpx;
|
}
|
||||||
}
|
}
|
||||||
.order-title{
|
|
||||||
flex: 1;
|
// 订单列表
|
||||||
padding-left: $margin;
|
.goods-item {
|
||||||
// line-height: 40rpx;
|
display: flex;
|
||||||
.title{
|
align-items: center;
|
||||||
|
padding: $padding;
|
||||||
|
|
||||||
|
.order-cover {
|
||||||
|
vertical-align: top;
|
||||||
|
width: 128rpx;
|
||||||
|
height: 128rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-title {
|
||||||
|
flex: 1;
|
||||||
|
padding-left: $margin;
|
||||||
|
|
||||||
|
// line-height: 40rpx;
|
||||||
|
.title {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
@extend .ellipsis;
|
@extend .ellipsis;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
.subtitle{
|
|
||||||
|
.subtitle {
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
color: #666;
|
color: #666;
|
||||||
padding-top: 10rpx;
|
padding-top: 10rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.order-count{
|
|
||||||
text-align: right;
|
.order-count {
|
||||||
padding-left: $margin;
|
text-align: right;
|
||||||
line-height: 40rpx;
|
padding-left: $margin;
|
||||||
.order-price{
|
line-height: 40rpx;
|
||||||
font-size: 32rpx;
|
|
||||||
font-weight: bold;
|
.order-price {
|
||||||
color: $text-price;
|
font-size: 32rpx;
|
||||||
&>text{
|
font-weight: bold;
|
||||||
font-size: 24rpx;
|
color: $text-price;
|
||||||
}
|
|
||||||
}
|
&>text {
|
||||||
.type{
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.type {
|
||||||
font-size: 22rpx;
|
font-size: 22rpx;
|
||||||
padding-left: 6rpx;
|
padding-left: 6rpx;
|
||||||
}
|
}
|
||||||
.order-sum{
|
|
||||||
font-size: $title-size-sm;
|
.order-sum {
|
||||||
color: $text-gray;
|
font-size: $title-size-sm;
|
||||||
}
|
color: $text-gray;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 订单信息
|
}
|
||||||
.info-box{
|
|
||||||
.info-item{
|
// 订单信息
|
||||||
position: relative;
|
.info-box {
|
||||||
padding: $padding $padding $padding 200rpx;
|
.info-item {
|
||||||
font-size: $title-size-m;
|
position: relative;
|
||||||
min-height: 40rpx;
|
padding: $padding $padding $padding 200rpx;
|
||||||
text-align: right;
|
font-size: $title-size-m;
|
||||||
.label{
|
min-height: 40rpx;
|
||||||
position: absolute;
|
text-align: right;
|
||||||
left: $margin;
|
|
||||||
top: $margin;
|
.label {
|
||||||
color: $text-gray;
|
position: absolute;
|
||||||
}
|
left: $margin;
|
||||||
.info-textarea{
|
top: $margin;
|
||||||
height: 120rpx;
|
color: $text-gray;
|
||||||
width: 100%;
|
}
|
||||||
text-align: left;
|
|
||||||
font-size: $title-size-m;
|
.info-textarea {
|
||||||
}
|
height: 120rpx;
|
||||||
&::after{
|
width: 100%;
|
||||||
position: absolute;
|
text-align: left;
|
||||||
left: $margin;
|
font-size: $title-size-m;
|
||||||
right: $margin;
|
}
|
||||||
content: " ";
|
|
||||||
height: 1rpx;
|
&::after {
|
||||||
bottom: 0;
|
position: absolute;
|
||||||
background: $border-color;
|
left: $margin;
|
||||||
}
|
right: $margin;
|
||||||
&:last-child::after{
|
content: " ";
|
||||||
display: none;
|
height: 1rpx;
|
||||||
}
|
bottom: 0;
|
||||||
}
|
background: $border-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:last-child::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// footer
|
// footer
|
||||||
.order-footer{
|
.order-footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
padding: $padding;
|
padding: $padding;
|
||||||
background: white;
|
background: white;
|
||||||
border-radius: $radius $radius 0 0;
|
border-radius: $radius $radius 0 0;
|
||||||
box-shadow: 0 0 10rpx 10rpx rgba($color: #000000, $alpha: .02);
|
box-shadow: 0 0 10rpx 10rpx rgba($color: #000000, $alpha: .02);
|
||||||
z-index: 99;
|
z-index: 99;
|
||||||
display: flex;
|
display: flex;
|
||||||
.total{
|
|
||||||
line-height: 80rpx;
|
.total {
|
||||||
font-size: $title-size-lg;
|
line-height: 80rpx;
|
||||||
font-weight: bold;
|
font-size: $title-size-lg;
|
||||||
width: calc(100% - 300rpx - #{$margin});
|
font-weight: bold;
|
||||||
color: $text-gray;
|
width: calc(100% - 300rpx - #{$margin});
|
||||||
font-weight: normal;
|
color: $text-gray;
|
||||||
@extend .nowrap;
|
font-weight: normal;
|
||||||
text{
|
@extend .nowrap;
|
||||||
color: $text-price;
|
|
||||||
font-size: $title-size-lg;
|
text {
|
||||||
font-weight: bold;
|
color: $text-price;
|
||||||
}
|
font-size: $title-size-lg;
|
||||||
.type{
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.type {
|
||||||
font-size: 22rpx;
|
font-size: 22rpx;
|
||||||
padding-left: 6rpx;
|
padding-left: 6rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.btn{
|
|
||||||
margin-left: $margin;
|
.btn {
|
||||||
width: 300rpx;
|
margin-left: $margin;
|
||||||
height: 80rpx;
|
width: 300rpx;
|
||||||
padding: 0;
|
height: 80rpx;
|
||||||
line-height: 80rpx;
|
padding: 0;
|
||||||
font-size: $title-size-lg;
|
line-height: 80rpx;
|
||||||
border-radius: 40rpx;
|
font-size: $title-size-lg;
|
||||||
background: $main-color;
|
border-radius: 40rpx;
|
||||||
color: white;
|
background: $main-color;
|
||||||
font-weight: bold;
|
color: white;
|
||||||
&::after{
|
font-weight: bold;
|
||||||
display: none;
|
|
||||||
}
|
&::after {
|
||||||
}
|
display: none;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -9,9 +9,9 @@
|
|||||||
</view>
|
</view>
|
||||||
</swiper-item>
|
</swiper-item>
|
||||||
</swiper>
|
</swiper>
|
||||||
<view class="swiper-pages">
|
<view class="swiper-pages"> {{current}}/{{goods.pictures.length}}</view>
|
||||||
{{current}}/{{goods.pictures.length}}
|
<view class="vipGoodsInfo" v-if="shop_vip.status" >{{shop_vip.message}} </view>
|
||||||
</view>
|
<view class="vipGoodsInfo" v-if="goods.is_active " >拼团商品</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 详情 -->
|
<!-- 详情 -->
|
||||||
<view class="main">
|
<view class="main">
|
||||||
@@ -20,9 +20,9 @@
|
|||||||
<view class="box-flex">
|
<view class="box-flex">
|
||||||
<view class="price">
|
<view class="price">
|
||||||
{{goods.price.show}}<text>DT积分</text>
|
{{goods.price.show}}<text>DT积分</text>
|
||||||
</view>
|
<span class ='del' v-if="shop_vip.status">{{goods.original_price}} DT积分</span>
|
||||||
|
</view>
|
||||||
<view class="sales" v-if="goods.skus && !goods.is_active">库存量{{goods.skus[0].stock}}件</view>
|
<view class="sales" v-if="goods.skus && !goods.is_active">库存量{{goods.skus[0].stock}}件</view>
|
||||||
|
|
||||||
<view class="_pin" v-if="goods.is_active">
|
<view class="_pin" v-if="goods.is_active">
|
||||||
<view class="_has" v-if="goods.active.count>0">
|
<view class="_has" v-if="goods.active.count>0">
|
||||||
<image src="/static/book/fire.png" mode="widthFix" class="fire" /> 已拼{{goods.active.count}}件
|
<image src="/static/book/fire.png" mode="widthFix" class="fire" /> 已拼{{goods.active.count}}件
|
||||||
@@ -35,6 +35,7 @@
|
|||||||
<uni-icons type="right" color="#cacaca" />
|
<uni-icons type="right" color="#cacaca" />
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 可拼团列表 -->
|
||||||
<view class="is_active" v-if="goods.is_active && actives.length>0">
|
<view class="is_active" v-if="goods.is_active && actives.length>0">
|
||||||
<view class="title" v-if="actives.length > 2">
|
<view class="title" v-if="actives.length > 2">
|
||||||
这些人刚刚拼单成功,可参与拼单
|
这些人刚刚拼单成功,可参与拼单
|
||||||
@@ -42,9 +43,7 @@
|
|||||||
<uni-icons type="right" color="#cacaca" />
|
<uni-icons type="right" color="#cacaca" />
|
||||||
</span>
|
</span>
|
||||||
</view>
|
</view>
|
||||||
<view class="title" v-if="actives.length <= 2">
|
<view class="title" v-if="actives.length <= 2"> {{actives.length}}人正在拼单,可参与拼单 </view>
|
||||||
{{actives.length}}人正在拼单,可参与拼单
|
|
||||||
</view>
|
|
||||||
<view class="content">
|
<view class="content">
|
||||||
<block v-for="(item,index) in actives" :key="index">
|
<block v-for="(item,index) in actives" :key="index">
|
||||||
<view class="content-item" v-if="index < 2">
|
<view class="content-item" v-if="index < 2">
|
||||||
@@ -52,7 +51,7 @@
|
|||||||
<u-avatar-group :urls="item.urls" size="34" gap="0.6" class="avatar-group" />
|
<u-avatar-group :urls="item.urls" size="34" gap="0.6" class="avatar-group" />
|
||||||
<view class="nickname"> {{item.name}}</view>
|
<view class="nickname"> {{item.name}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="btn">去拼单</view>
|
<view class="btn" @click="toPin(item)">去拼单</view>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
@@ -66,10 +65,7 @@
|
|||||||
<view class="shop-titl">{{goods.shop.name}}</view>
|
<view class="shop-titl">{{goods.shop.name}}</view>
|
||||||
<view> 店铺评分:
|
<view> 店铺评分:
|
||||||
<span class='no'>5.0</span>
|
<span class='no'>5.0</span>
|
||||||
<text style="padding-left: 20rpx;">
|
<text style="padding-left: 20rpx;"> 服务态度: <span class='no'>5.0</span> </text>
|
||||||
服务态度:
|
|
||||||
<span class='no'>5.0</span>
|
|
||||||
</text>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -78,18 +74,26 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 商品详情 -->
|
||||||
<view class="imgs">
|
<view class="imgs">
|
||||||
|
<u-notice-bar v-if="shop_vip.status" text="戒指尺寸有大小,请再购买戒指时参照详情介绍备注所选尺寸" fontSize='14' />
|
||||||
<block v-for="(item, index) in goods.content" :key="index">
|
<block v-for="(item, index) in goods.content" :key="index">
|
||||||
<image :src="item" mode="widthFix" />
|
<image :src="item" mode="widthFix" />
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 立即购买 -->
|
|
||||||
|
<!-- 立即购买 shop_vip.status 区分是否是 vip 商品 否则的就却分是拼团商品还是普通商品 -->
|
||||||
<view class="footer">
|
<view class="footer">
|
||||||
<view @click="toShop(goods.shop.shop_id)" class=" shop">
|
<view @click="toShop(goods.shop.shop_id)" class="shop">
|
||||||
<uni-icons type="shop" size="26" color="grey" />店铺
|
<uni-icons type="shop" size="26" color="grey" />店铺
|
||||||
</view>
|
</view>
|
||||||
<button type="default" hover-class="none" @click="buy">立即购买</button>
|
<!-- vip 规格弹窗立即领取 -->
|
||||||
|
<button type="default" v-if="shop_vip.status" hover-class="none" @click="vipBuy">立即领取</button>
|
||||||
|
<!-- 非vip 规格弹窗 普通商品立即购买,拼单商品立即拼单 -->
|
||||||
|
<block v-else>
|
||||||
|
<button type="default" hover-class="none" @click="buy">立即购买</button>
|
||||||
|
</block>
|
||||||
</view>
|
</view>
|
||||||
<!-- 更多拼单弹窗 -->
|
<!-- 更多拼单弹窗 -->
|
||||||
<u-popup :show="getMorePin" :round="10" mode="center" @close="close" :closeable='true' zIndex="1229930">
|
<u-popup :show="getMorePin" :round="10" mode="center" @close="close" :closeable='true' zIndex="1229930">
|
||||||
@@ -102,13 +106,26 @@
|
|||||||
<u-avatar-group :urls="item.urls" size="34" gap="0.6" class="avatar-group" />
|
<u-avatar-group :urls="item.urls" size="34" gap="0.6" class="avatar-group" />
|
||||||
<view class="nickname"> {{item.name}}</view>
|
<view class="nickname"> {{item.name}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="btn">去拼单</view>
|
<view class="btn" @click="toPin(item)">去拼单</view>
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</u-popup>
|
</u-popup>
|
||||||
|
|
||||||
|
<!-- 与谁谁的拼团 -->
|
||||||
|
<u-popup :show="pinShow" :round="10" mode="center" @close="close" :closeable='true' zIndex="1229930">
|
||||||
|
<view scroll-y="true" class="content-2">
|
||||||
|
<view class="title"> 参与张三的拼单 </view>
|
||||||
|
<view class="number">仅剩<span>1</span>个名额</view>
|
||||||
|
<view class="avatars">
|
||||||
|
<image class="avatar me" src="/static/book/333.png" mode="aspectFill" />
|
||||||
|
<image class="wen pin" src="/static/book/wen.png" mode="aspectFill" />
|
||||||
|
</view>
|
||||||
|
<view class="applyPin" @click="applyPin"> 参与拼单 </view>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
|
||||||
<!-- 多规格弹窗 -->
|
<!-- 多规格弹窗 -->
|
||||||
<u-popup :show="skuShow" :round="10" mode="bottom" @close="close" @open="open">
|
<u-popup :show="skuShow" :round="10" mode="bottom" @close="close" @open="open">
|
||||||
<scroll-view class="skuView" scroll-y="true">
|
<scroll-view class="skuView" scroll-y="true">
|
||||||
@@ -128,9 +145,7 @@
|
|||||||
<view class="sku-list">
|
<view class="sku-list">
|
||||||
<block v-for="it in item.values" :keys='it.value_id'>
|
<block v-for="it in item.values" :keys='it.value_id'>
|
||||||
<view :class="['sku-item',specselect[index] == it.value_id ? 'sku-active':'']"
|
<view :class="['sku-item',specselect[index] == it.value_id ? 'sku-active':'']"
|
||||||
@click="clickSkus(index,it.value_id)">
|
@click="clickSkus(index,it.value_id)"> {{it.value}} </view>
|
||||||
{{it.value}}
|
|
||||||
</view>
|
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -141,7 +156,15 @@
|
|||||||
@change="qty = $event" />
|
@change="qty = $event" />
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<button class="now-buy" type="default" hover-class="none" @click="buy2(selectSkusValues)">立即购买</button>
|
<!-- 立即购买 shop_vip.status 区分是否是 vip 商品 只支持单规格php 规定不支持多规格 否则的就却分是拼团商品还是普通商品 -->
|
||||||
|
<!-- vip 规格弹窗立即领取 -->
|
||||||
|
<button class="now-buy" type="default" v-if="shop_vip.status" hover-class="none"
|
||||||
|
@click="vipBuy">立即领取</button>
|
||||||
|
<!-- 非vip 规格弹窗 普通商品立即购买,拼单商品立即拼单 -->
|
||||||
|
<block v-else>
|
||||||
|
<button class="now-buy" type="default" hover-class="none"
|
||||||
|
@click="buy2(selectSkusValues)">立即购买</button>
|
||||||
|
</block>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</u-popup>
|
</u-popup>
|
||||||
</view>
|
</view>
|
||||||
@@ -174,120 +197,29 @@
|
|||||||
selectSkusValues: {},
|
selectSkusValues: {},
|
||||||
qty: 1,
|
qty: 1,
|
||||||
actives: [{
|
actives: [{
|
||||||
urls: [
|
urls: [
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
'https://cdn.uviewui.com/uview/album/1.jpg',
|
||||||
'https://cdn.uviewui.com/uview/album/2.jpg'
|
'https://cdn.uviewui.com/uview/album/2.jpg'
|
||||||
],
|
],
|
||||||
name: "洛基洛基、张三张三张三张三张三张三"
|
name: "洛基洛基、张三张三张三张三张三张三"
|
||||||
},
|
}, ],
|
||||||
{
|
getMorePin: false, // 更多可拼团列表是否显示
|
||||||
urls: [
|
pinShow: false, // 与谁谁谁的拼团是否显示
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
shop_vip: {
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
// "status": true, // 当前店铺是否是会员制店铺 true 是 false 否
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
// "is_vip": true, // 当前会员是否是 vip true 是会员 false 非会员
|
||||||
],
|
// "is_receive": false // 当前会员是否已领取过 false 未领取 true 已领取
|
||||||
name: "卢比卢比、张三张三"
|
},
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
urls: [
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg',
|
|
||||||
'https://cdn.uviewui.com/uview/album/1.jpg'
|
|
||||||
],
|
|
||||||
name: "卢比卢比、张三张三"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
getMorePin: false,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
onShow() {
|
||||||
this.getGoods()
|
this.getGoods()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getGoods() {
|
getGoods() {
|
||||||
// let id = this.$Route.query.id
|
let id = this.$Route.query.id
|
||||||
// let id = 61; // 普通商品
|
// let id = 61; // 普通商品
|
||||||
let id = 90; // 拼团商品
|
// let id = 91; // 拼团商品
|
||||||
goods(id).then(res => {
|
goods(id).then(res => {
|
||||||
this.goods = res
|
this.goods = res
|
||||||
this.specs = res.specs
|
this.specs = res.specs
|
||||||
@@ -296,6 +228,7 @@
|
|||||||
this.unitText = res.skus[0].unit_text
|
this.unitText = res.skus[0].unit_text
|
||||||
this.specselect = res.skus[0].unit.split('|')
|
this.specselect = res.skus[0].unit.split('|')
|
||||||
this.selectSkusValues = res.skus[0]
|
this.selectSkusValues = res.skus[0]
|
||||||
|
this.shop_vip = res.shop_vip
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
open() {
|
open() {
|
||||||
@@ -305,10 +238,16 @@
|
|||||||
close() {
|
close() {
|
||||||
this.skuShow = false
|
this.skuShow = false
|
||||||
this.getMorePin = false
|
this.getMorePin = false
|
||||||
|
this.pinShow = false
|
||||||
this.qty = 1;
|
this.qty = 1;
|
||||||
// this.specselect = this.skus[0].unit.split('|')
|
// this.specselect = this.skus[0].unit.split('|')
|
||||||
// this.selectSkusValues = this.skus[0]
|
// this.selectSkusValues = this.skus[0]
|
||||||
},
|
},
|
||||||
|
// 去拼单
|
||||||
|
toPin(item) {
|
||||||
|
this.close();
|
||||||
|
this.pinShow = true
|
||||||
|
},
|
||||||
clickSkus(index, id) {
|
clickSkus(index, id) {
|
||||||
this.skuid = ''
|
this.skuid = ''
|
||||||
this.specselect[index] = id;
|
this.specselect[index] = id;
|
||||||
@@ -340,7 +279,55 @@
|
|||||||
}
|
}
|
||||||
this.specselect = newlist
|
this.specselect = newlist
|
||||||
},
|
},
|
||||||
|
// 会员商品领取
|
||||||
|
vipBuy() {
|
||||||
|
if (this.shop_vip.is_vip) {
|
||||||
|
if (this.shop_vip.is_receive) {
|
||||||
|
uni.showModal({
|
||||||
|
title: '温馨提示',
|
||||||
|
content: '您已经领取过商品想要获得更多新商品,请联系线下商家:' + this.goods.shop.mobile+'进行更换',
|
||||||
|
cancelText: '再看看',
|
||||||
|
cancelColor: '#999',
|
||||||
|
showCancel:false,
|
||||||
|
confirmColor: '#34ce98',
|
||||||
|
confirmText: ' 知道了',
|
||||||
|
// success: (res) => {
|
||||||
|
// if (res.confirm) {
|
||||||
|
// //#ifdef MP-WEIXIN
|
||||||
|
// uni.makePhoneCall({
|
||||||
|
// phoneNumber: '18354789632'
|
||||||
|
// });
|
||||||
|
// //#endif
|
||||||
|
// //#ifdef APP-PLUS
|
||||||
|
// plus.device.dial('18354789632', true);
|
||||||
|
// //#endif
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
console.log('已经是会员,且未领取领取了商品,')
|
||||||
|
this.goUrl();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.showModal({
|
||||||
|
title: '温馨提示',
|
||||||
|
content: '您还不是该店铺的会员',
|
||||||
|
cancelColor: '#999',
|
||||||
|
cancelText: '再想想',
|
||||||
|
confirmColor: "#34ce98",
|
||||||
|
confirmText: '立即开通',
|
||||||
|
success: (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
this.close();
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/store/vip/index/index?id=' + this.goods.shop
|
||||||
|
.shop_id,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
buy() {
|
buy() {
|
||||||
if (this.$store.state.token === '') {
|
if (this.$store.state.token === '') {
|
||||||
const Auth = new userAuth()
|
const Auth = new userAuth()
|
||||||
@@ -352,7 +339,6 @@
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.goUrl();
|
this.goUrl();
|
||||||
|
|
||||||
},
|
},
|
||||||
buy2(value) {
|
buy2(value) {
|
||||||
let {
|
let {
|
||||||
@@ -389,6 +375,11 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
applyPin() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/store/vip/success/success'
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -433,6 +424,17 @@
|
|||||||
font-size: $title-size-m;
|
font-size: $title-size-m;
|
||||||
text-shadow: 0 5rpx 5rpx rgba($color: #000000, $alpha: .02);
|
text-shadow: 0 5rpx 5rpx rgba($color: #000000, $alpha: .02);
|
||||||
}
|
}
|
||||||
|
.vipGoodsInfo{
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 10;
|
||||||
|
background-color: #d81e06;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 30rpx;
|
||||||
|
padding: 4rpx 30rpx;
|
||||||
|
border-radius: 0 0 40rpx 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 详情
|
// 详情
|
||||||
@@ -504,6 +506,13 @@
|
|||||||
font-size: 60%;
|
font-size: 60%;
|
||||||
margin-left: 10rpx;
|
margin-left: 10rpx;
|
||||||
}
|
}
|
||||||
|
.del{
|
||||||
|
text-decoration: line-through;
|
||||||
|
margin-left: 20rpx;
|
||||||
|
font-size: 26rpx;
|
||||||
|
color:#999;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sales {
|
.sales {
|
||||||
@@ -743,7 +752,7 @@
|
|||||||
|
|
||||||
.getPinTitle {
|
.getPinTitle {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 30rpx;
|
font-size: 34rpx;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding: $padding - 10 0;
|
padding: $padding - 10 0;
|
||||||
@@ -752,10 +761,93 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: #fff !important;
|
background-color: #fff !important;
|
||||||
border-radius: 20rpx 20rpx 0 0;
|
border-radius: 20rpx 20rpx 0 0;
|
||||||
z-index: 1000000000000000;
|
z-index: 1000000000000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.content-2 {
|
||||||
|
width: 70vw;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 34rpx;
|
||||||
|
color: #333333;
|
||||||
|
font-weight: bold;
|
||||||
|
padding-top: 50rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.number {
|
||||||
|
color: #333333;
|
||||||
|
font-size: 28rpx;
|
||||||
|
text-align: center;
|
||||||
|
color: #999;
|
||||||
|
padding-top: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avatars {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding-top: $padding * 2;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 90rpx;
|
||||||
|
height: 90rpx;
|
||||||
|
margin: 10rpx 20rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.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 20rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.applyPin {
|
||||||
|
margin: $margin;
|
||||||
|
background-color: $main-color;
|
||||||
|
color: #fff;
|
||||||
|
padding: $padding - 10;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 50rpx;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.getPinList {
|
.getPinList {
|
||||||
width: 80vw;
|
width: 80vw;
|
||||||
max-height: 60vh;
|
max-height: 60vh;
|
||||||
@@ -806,7 +898,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 规格弹窗
|
// 规格弹窗
|
||||||
|
|||||||
@@ -1,61 +1,84 @@
|
|||||||
<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="new-box">
|
||||||
<view class="title">上新精选<text class="title-des"> | 精品上新新品推荐</text></view>
|
<view class="title">上新精选<text class="title-des"> | 精品上新新品推荐</text></view>
|
||||||
<view class="news">
|
<view class="news">
|
||||||
<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-item" v-for="(item, index) in newGood" :key="index"
|
||||||
<view class="news-cover">
|
@click="$Router.push({ name: 'StoreGoods', params: {id: item.goods_id}})">
|
||||||
<image :src="item.cover" mode="aspectFill"></image>
|
<view class="news-cover">
|
||||||
</view>
|
<image :src="item.cover" mode="aspectFill"></image>
|
||||||
<view class="news-title nowrap">{{item.name}}</view>
|
</view>
|
||||||
<view class="news-price nowrap">{{item.price.price_min}} <text>DT积分</text></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>
|
||||||
|
|
||||||
|
<!-- VIP换购 -->
|
||||||
|
<view class="new-box" style="margin-top: 30rpx;" v-if="vips.length>0">
|
||||||
|
<view class="title">VIP换购 <view class="more"><text class="title-des"> | 千款商品任意换购</text> <text
|
||||||
|
class="more-txt" @click="$Router.push({name: 'VipList'})">更多 ></text></view>
|
||||||
|
</view>
|
||||||
|
<view class="news">
|
||||||
|
<view class="news-item" v-for="(item, index) in vips" :key="index"
|
||||||
|
@click="$Router.push({ name: 'StoreGoods', params: {id: item.goods_id}})">
|
||||||
|
<view class="news-cover">
|
||||||
|
<image :src="item.cover" mode="aspectFill"></image>
|
||||||
|
<view class="tags"> VIP </view>
|
||||||
|
</view>
|
||||||
|
<view class="news-title nowrap">{{item.name}}</view>
|
||||||
|
<view class="news-price nowrap">{{item.price.price_min}} <text>DT积分</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
<!-- 线下商家 -->
|
<!-- 线下商家 -->
|
||||||
<view class="offline-box">
|
<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>
|
<view class="title">推荐店铺 <view class="more"><text class="title-des"> | 您身边的优质体验店</text> <text
|
||||||
<view class="card-box">
|
class="more-txt" @click="$Router.push({name: 'ShopList'})">更多 ></text></view>
|
||||||
<block v-for="(item, index) in shops" :key="index">
|
</view>
|
||||||
<view class="card-box-item" style="{'backgrond': #FFF}" v-if="index < 4" @click="$Router.push({name: 'ShopDetail', params: {ShopId: item.shop_id}})">
|
<view class="card-box">
|
||||||
<view class="card-title">{{item.name}}</view>
|
<block v-for="(item, index) in shops" :key="index">
|
||||||
<view class="card-subtitle"> 优质店铺 </view>
|
<view class="card-box-item" style="{'backgrond': #FFF}" v-if="index < 4"
|
||||||
|
@click="$Router.push({name: 'ShopDetail', params: {ShopId: item.shop_id}})">
|
||||||
|
<view class="card-title">{{item.name}}</view>
|
||||||
|
<view class="card-subtitle"> 优质店铺 </view>
|
||||||
<view class="card-btn">前往体验</view>
|
<view class="card-btn">前往体验</view>
|
||||||
<image class="card-cover" :src="item.cover" mode="aspectFill" />
|
<image class="card-cover" :src="item.cover" mode="aspectFill" />
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 推荐品类 -->
|
<!-- 推荐品类 -->
|
||||||
<!-- <view class="card-box">
|
<!-- <view class="card-box">
|
||||||
<block v-for="(item, index) in meals" :key="index">
|
<block v-for="(item, index) in meals" :key="index">
|
||||||
<view class="card-box-item" :style="{'backgrond': item.color}" @click="$Router.push({name: 'StoreMeals', params: {id: item.meal_id}})">
|
<view class="card-box-item" :style="{'backgrond': item.color}" @click="$Router.push({name: 'StoreMeals', params: {id: item.meal_id}})">
|
||||||
@@ -66,229 +89,207 @@
|
|||||||
</block>
|
</block>
|
||||||
</view> -->
|
</view> -->
|
||||||
|
|
||||||
<!-- goods -->
|
<!-- goods -->
|
||||||
<view class="goods-box">
|
<view class="goods-box">
|
||||||
<oct-goods
|
<oct-goods :lists="goodsArr" priceType="DT" color="#e6576b"
|
||||||
:lists="goodsArr"
|
@onGoods="$Router.push({ name: 'StoreGoods', params: {id: $event.goods_id}})" />
|
||||||
priceType="DT"
|
<!-- <u-loadmore status="loading" /> -->
|
||||||
color="#e6576b"
|
</view>
|
||||||
@onGoods="$Router.push({ name: 'StoreGoods', params: {id: $event.goods_id}})"
|
</view>
|
||||||
/>
|
|
||||||
<!-- <u-loadmore status="loading" /> -->
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mall } from "@/apis/interfaces/store"
|
import {
|
||||||
export default {
|
mall
|
||||||
data() {
|
} from "@/apis/interfaces/store"
|
||||||
return {
|
export default {
|
||||||
swiperCount : 0,
|
data() {
|
||||||
banners : [],
|
return {
|
||||||
goodTabs : [],
|
swiperCount: 0,
|
||||||
newGood : [],
|
banners: [],
|
||||||
goodsArr : [],
|
goodTabs: [],
|
||||||
meals : [],
|
newGood: [],
|
||||||
shops : [],
|
goodsArr: [],
|
||||||
};
|
meals: [],
|
||||||
},
|
shops: [],
|
||||||
mounted(){
|
vips:[]
|
||||||
this.getMall()
|
};
|
||||||
},
|
},
|
||||||
methods:{
|
mounted() {
|
||||||
getMall(){
|
this.getMall()
|
||||||
mall().then(res => {
|
},
|
||||||
this.banners = res.banners
|
methods: {
|
||||||
this.goodsArr = res.goods
|
getMall() {
|
||||||
this.newGood = res.news
|
mall().then(res => {
|
||||||
this.goodTabs = res.categories
|
this.banners = res.banners
|
||||||
this.meals = res.meals
|
this.goodsArr = res.goods
|
||||||
this.shops = res.shops
|
this.newGood = res.news
|
||||||
uni.stopPullDownRefresh()
|
this.goodTabs = res.categories
|
||||||
})
|
this.meals = res.meals
|
||||||
},
|
this.shops = res.shops
|
||||||
goBook(item){
|
this.vips = res.vips
|
||||||
if(item.url){
|
uni.stopPullDownRefresh()
|
||||||
if(item.url.openType === 'navigateTo'){
|
})
|
||||||
uni.navigateTo({
|
},
|
||||||
url:item.url.path
|
goBook(item) {
|
||||||
})
|
console.log(item)
|
||||||
|
if (item.url) {
|
||||||
|
if (item.url.openType === 'navigateTo') {
|
||||||
|
if (item.url.params != '') {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: item.url.path + '?' + item.url.params,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: item.url.path,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onPullDownRefresh() {
|
onPullDownRefresh() {
|
||||||
this.getMall()
|
this.getMall()
|
||||||
},
|
},
|
||||||
onNavigationBarButtonTap() {
|
onNavigationBarButtonTap() {
|
||||||
this.$Router.push({name: 'StoreSearch'})
|
this.$Router.push({
|
||||||
}
|
name: 'StoreSearch'
|
||||||
}
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.content{
|
.content {
|
||||||
background: $window-color;
|
background: $window-color;
|
||||||
}
|
}
|
||||||
// 商城列表
|
|
||||||
.goods-box{
|
|
||||||
padding-bottom: $padding;
|
|
||||||
&>.title{
|
|
||||||
padding: $padding $padding 0;
|
|
||||||
font-size: $title-size-lg;
|
|
||||||
color: $text-color;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-bottom: -$margin/2;
|
|
||||||
|
|
||||||
}
|
// 商城列表
|
||||||
}
|
.goods-box {
|
||||||
// 商城分类
|
padding-bottom: $padding;
|
||||||
.classify-box{
|
|
||||||
.classify-item{
|
&>.title {
|
||||||
padding: 0 10rpx;
|
padding: $padding $padding 0;
|
||||||
&:last-child{
|
font-size: $title-size-lg;
|
||||||
padding-right: $padding;
|
color: $text-color;
|
||||||
}
|
font-weight: bold;
|
||||||
&:first-child{
|
margin-bottom: -$margin/2;
|
||||||
padding-left: $padding;
|
|
||||||
}
|
}
|
||||||
&-nav{
|
}
|
||||||
text-align: center;
|
|
||||||
width: 138rpx;
|
// 商城分类
|
||||||
}
|
.classify-box {
|
||||||
&-cover{
|
.classify-item {
|
||||||
width: 86rpx;
|
padding: 0 10rpx;
|
||||||
height: 86rpx;
|
|
||||||
border-radius: 50%;
|
&:last-child {
|
||||||
vertical-align: top;
|
padding-right: $padding;
|
||||||
margin-bottom: $margin/2;
|
}
|
||||||
}
|
|
||||||
&-title{
|
&:first-child {
|
||||||
line-height: 40rpx;
|
padding-left: $padding;
|
||||||
font-size: $title-size-sm;
|
}
|
||||||
color: $text-color;
|
|
||||||
}
|
&-nav {
|
||||||
}
|
text-align: center;
|
||||||
}
|
width: 138rpx;
|
||||||
// 卡片推荐
|
}
|
||||||
.card-box{
|
|
||||||
padding: $padding $padding - 10;
|
&-cover {
|
||||||
padding-bottom: 0;
|
width: 86rpx;
|
||||||
display: flex;
|
height: 86rpx;
|
||||||
flex-wrap: wrap;
|
border-radius: 50%;
|
||||||
&-item{
|
vertical-align: top;
|
||||||
margin: 0 10rpx;
|
margin-bottom: $margin/2;
|
||||||
width: calc(50% - 20rpx);
|
}
|
||||||
padding: $padding;
|
|
||||||
border-radius: $radius;
|
&-title {
|
||||||
box-sizing: border-box;
|
line-height: 40rpx;
|
||||||
position: relative;
|
font-size: $title-size-sm;
|
||||||
.card-title{
|
color: $text-color;
|
||||||
font-size: $title-size-lg;
|
}
|
||||||
font-weight: bold;
|
}
|
||||||
color: $text-color;
|
}
|
||||||
line-height: 40rpx;
|
|
||||||
|
// 卡片推荐
|
||||||
|
.card-box {
|
||||||
|
padding: $padding $padding - 10;
|
||||||
|
padding-bottom: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
&-item {
|
||||||
|
margin: 0 10rpx;
|
||||||
|
width: calc(50% - 20rpx);
|
||||||
|
padding: $padding;
|
||||||
|
border-radius: $radius;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
font-weight: bold;
|
||||||
|
color: $text-color;
|
||||||
|
line-height: 40rpx;
|
||||||
width: calc(100% - 80rpx);
|
width: calc(100% - 80rpx);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
.card-subtitle{
|
|
||||||
font-size: 22rpx;
|
.card-subtitle {
|
||||||
color: $text-gray;
|
font-size: 22rpx;
|
||||||
// line-height: 40rpx;
|
color: $text-gray;
|
||||||
min-height: 20rpx;
|
// line-height: 40rpx;
|
||||||
@extend .nowrap;
|
min-height: 20rpx;
|
||||||
}
|
@extend .nowrap;
|
||||||
.card-cover{
|
}
|
||||||
width: 80rpx;
|
|
||||||
height: 80rpx;
|
.card-cover {
|
||||||
position: absolute;
|
width: 80rpx;
|
||||||
|
height: 80rpx;
|
||||||
|
position: absolute;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
right: $margin;
|
right: $margin;
|
||||||
top: $margin;
|
top: $margin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&-item:nth-child(1){
|
|
||||||
background: #fef2ae;
|
&-item:nth-child(1) {
|
||||||
}
|
background: #fef2ae;
|
||||||
&-item:nth-child(2){
|
}
|
||||||
background: #c9ead9;
|
|
||||||
}
|
&-item:nth-child(2) {
|
||||||
}
|
background: #c9ead9;
|
||||||
// 上新精选
|
}
|
||||||
.new-box{
|
}
|
||||||
padding: 0 $margin;
|
|
||||||
border-radius: $radius;
|
// 上新精选
|
||||||
// padding: $padding - 10;
|
.new-box {
|
||||||
.title{
|
padding: 0 $margin;
|
||||||
font-size: $title-size-lg;
|
border-radius: $radius;
|
||||||
color: $text-color;
|
|
||||||
font-weight: bold;
|
// padding: $padding - 10;
|
||||||
|
.title {
|
||||||
|
font-size: $title-size-lg;
|
||||||
|
color: $text-color;
|
||||||
|
font-weight: bold;
|
||||||
padding-bottom: 10rpx;
|
padding-bottom: 10rpx;
|
||||||
.title-des{
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.title-des {
|
||||||
font-size: 24rpx !important;
|
font-size: 24rpx !important;
|
||||||
padding-left: 10rpx;
|
padding-left: 10rpx;
|
||||||
color: $text-gray-m;
|
color: $text-gray-m;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
.news{
|
.more {
|
||||||
margin: $margin/2 -10rpx 0;
|
|
||||||
display: flex;
|
|
||||||
.news-item{
|
|
||||||
margin: 0 10rpx;
|
|
||||||
width: calc(25% - 20rpx);
|
|
||||||
.news-cover{
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
padding-top: 100%;
|
|
||||||
background-color: white;
|
|
||||||
border-radius: $radius-lg;
|
|
||||||
overflow: hidden;
|
|
||||||
image{
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.news-title{
|
|
||||||
margin-top: $margin/2;
|
|
||||||
font-size: $title-size-sm;
|
|
||||||
text-align: center;
|
|
||||||
color: $text-color;
|
|
||||||
line-height: 40rpx;
|
|
||||||
}
|
|
||||||
.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%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.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;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@@ -296,14 +297,112 @@
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding-right: $padding;
|
padding-right: $padding;
|
||||||
.more-txt{
|
|
||||||
|
.more-txt {
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
color: $text-gray;
|
color: $text-gray;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.card-btn{
|
|
||||||
|
.news {
|
||||||
|
margin: $margin/2 -10rpx 0;
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.news-item {
|
||||||
|
margin: 0 10rpx;
|
||||||
|
width: calc(25% - 20rpx);
|
||||||
|
|
||||||
|
.news-cover {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
padding-top: 100%;
|
||||||
|
background-color: white;
|
||||||
|
border-radius: $radius-lg;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
image {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tags {
|
||||||
|
position: absolute;
|
||||||
|
top: 6rpx;
|
||||||
|
left: -54rpx;
|
||||||
|
background: #d81e06;
|
||||||
|
color: #fff;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding: 4rpx 0;
|
||||||
|
text-align: center;
|
||||||
|
transform: rotate(-45deg);
|
||||||
|
font-weight: bold;
|
||||||
|
letter-spacing:2rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.news-title {
|
||||||
|
margin-top: $margin/2;
|
||||||
|
font-size: $title-size-sm;
|
||||||
|
text-align: center;
|
||||||
|
color: $text-color;
|
||||||
|
line-height: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.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;
|
font-size: 22rpx;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 4rpx 20rpx;
|
padding: 4rpx 20rpx;
|
||||||
@@ -313,79 +412,92 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.card-box {
|
.card-box {
|
||||||
|
|
||||||
// &-item{
|
// &-item{
|
||||||
// background: #fff !important;
|
// background: #fff !important;
|
||||||
// }
|
// }
|
||||||
&-item:nth-child(1){
|
&-item:nth-child(1) {
|
||||||
background: #fef2ae;
|
background: #fef2ae;
|
||||||
background: rgba($color: #fef2ae, $alpha:.5);
|
background: rgba($color: #fef2ae, $alpha:.5);
|
||||||
}
|
}
|
||||||
&-item:nth-child(2){
|
|
||||||
background: #c9ead9;
|
&-item:nth-child(2) {
|
||||||
|
background: #c9ead9;
|
||||||
background: rgba($color: #c9ead9, $alpha:.5);
|
background: rgba($color: #c9ead9, $alpha:.5);
|
||||||
}
|
}
|
||||||
&-item:nth-child(3){
|
|
||||||
|
&-item:nth-child(3) {
|
||||||
margin-top: $padding - 8;
|
margin-top: $padding - 8;
|
||||||
background: #bde0ff;
|
background: #bde0ff;
|
||||||
background: rgba($color: #bde0ff, $alpha:.5);
|
background: rgba($color: #bde0ff, $alpha:.5);
|
||||||
}
|
}
|
||||||
&-item:nth-child(4){
|
|
||||||
|
&-item:nth-child(4) {
|
||||||
margin-top: $padding - 8;
|
margin-top: $padding - 8;
|
||||||
background: rgba($color: #ffd9e1, $alpha:.5);
|
background: rgba($color: #ffd9e1, $alpha:.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.card-cover{
|
|
||||||
width: 100rpx;
|
.card-cover {
|
||||||
height: 100rpx;
|
width: 100rpx;
|
||||||
position: absolute;
|
height: 100rpx;
|
||||||
right: $margin;
|
position: absolute;
|
||||||
top: $margin;
|
right: $margin;
|
||||||
|
top: $margin;
|
||||||
}
|
}
|
||||||
.title-des{
|
|
||||||
|
.title-des {
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
padding-left: 10rpx;
|
padding-left: 10rpx;
|
||||||
color: $text-gray-m;
|
color: $text-gray-m;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// swiper
|
|
||||||
.swiper{
|
// swiper
|
||||||
background: linear-gradient(#FFF, #F3F6FB);
|
.swiper {
|
||||||
padding: $padding;
|
background: linear-gradient(#FFF, #F3F6FB);
|
||||||
.swiper-box{
|
padding: $padding;
|
||||||
position: relative;
|
|
||||||
padding-top: 40%;
|
.swiper-box {
|
||||||
swiper,
|
position: relative;
|
||||||
image{
|
padding-top: 40%;
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
swiper,
|
||||||
left: 0;
|
image {
|
||||||
width: 100%;
|
position: absolute;
|
||||||
height: 100%;
|
top: 0;
|
||||||
}
|
left: 0;
|
||||||
image{
|
width: 100%;
|
||||||
border-radius: $radius;
|
height: 100%;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
.swiper-pages{
|
image {
|
||||||
position: absolute;
|
border-radius: $radius;
|
||||||
z-index: 9;
|
}
|
||||||
left: 0;
|
}
|
||||||
right: 0;
|
|
||||||
bottom: $margin - 10;
|
.swiper-pages {
|
||||||
height: 7rpx;
|
position: absolute;
|
||||||
text-align: center;
|
z-index: 9;
|
||||||
.pages-item{
|
left: 0;
|
||||||
vertical-align: top;
|
right: 0;
|
||||||
display: inline-block;
|
bottom: $margin - 10;
|
||||||
height: 7rpx;
|
height: 7rpx;
|
||||||
width: 25rpx;
|
text-align: center;
|
||||||
margin: 0 5rpx;
|
|
||||||
background: rgba($color: #fff, $alpha: .5);
|
.pages-item {
|
||||||
&.show{
|
vertical-align: top;
|
||||||
background: white;
|
display: inline-block;
|
||||||
}
|
height: 7rpx;
|
||||||
}
|
width: 25rpx;
|
||||||
}
|
margin: 0 5rpx;
|
||||||
}
|
background: rgba($color: #fff, $alpha: .5);
|
||||||
|
|
||||||
|
&.show {
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,401 +1,430 @@
|
|||||||
<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 => {
|
onLoad(e) {
|
||||||
this.classify = [{
|
this.ShopId = this.$Route.query.ShopId
|
||||||
category_id: '',
|
shopsDetail(this.ShopId).then(res => {
|
||||||
name: '全部商品',
|
// vip 制 商品
|
||||||
}, ...res.categories]
|
if (res.type.code == 2) {
|
||||||
this.name = res.name
|
this.classify = [{
|
||||||
this.logo = res.cover
|
category_id: '',
|
||||||
this.getGoods()
|
name: '全部活动',
|
||||||
}).catch(err => {
|
}, ...res.identities]
|
||||||
uni.showToast({
|
} else {
|
||||||
title: err.message,
|
// 普通商品
|
||||||
icon: 'none'
|
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() {
|
onPullDownRefresh() {
|
||||||
this.has_more = true;
|
this.has_more = true;
|
||||||
this.page = 1;
|
this.page = 1;
|
||||||
this.goods = [];
|
this.goods = [];
|
||||||
this.getGoods()
|
this.getGoods()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getGoods() {
|
getGoods() {
|
||||||
uni.showLoading({
|
uni.showLoading({
|
||||||
title:'请求中~',
|
title: '请求中~',
|
||||||
mask:true,
|
mask: true,
|
||||||
})
|
})
|
||||||
shopsGoods(this.ShopId, this.category_id,this.page).then(res => {
|
let data = {
|
||||||
this.goods = this.goods.concat(res.data);
|
shop_id: this.ShopId,
|
||||||
this.has_more = res.page.has_more;
|
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();
|
uni.hideLoading();
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: err.message,
|
title: err.message,
|
||||||
icon: 'none'
|
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.getGoods();
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '没有更多~',
|
||||||
|
icon: "none",
|
||||||
|
mask: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectClassify(id) {
|
||||||
|
if (id === this.category_id) return;
|
||||||
|
this.category_id = id;
|
||||||
this.page = 1;
|
this.page = 1;
|
||||||
this.goods =[];
|
this.goods = [];
|
||||||
this.has_more = true;
|
this.has_more = true;
|
||||||
this.getGoods()
|
this.getGoods()
|
||||||
},
|
},
|
||||||
search() {
|
search() {
|
||||||
this.$Router.push({
|
this.$Router.push({
|
||||||
name: 'StoreSearch'
|
name: 'StoreSearch'
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onGoods(id) {
|
goVip() {
|
||||||
this.$Router.push({
|
uni.navigateTo({
|
||||||
name: 'StoreGoods',
|
url: '/pages/store/vip/index/index?id=' + this.ShopId
|
||||||
params: {
|
})
|
||||||
id: id
|
},
|
||||||
}
|
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;
|
||||||
|
|
||||||
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>
|
||||||
317
pages/store/vip/index/index.vue
Normal file
@@ -0,0 +1,317 @@
|
|||||||
|
<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">
|
||||||
|
<< 滑动获取更多 </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"> 滑动获取更多 >> </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>
|
||||||
|
<view class="right" @click="onOpenVip(item.identity_id)">{{item.is_vip?'立即续费':'立即开通'}} </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-right: 20%;
|
||||||
|
padding-bottom: 6%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #999;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
padding-left: 20%;
|
||||||
|
padding-top: 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>
|
||||||
164
pages/store/vip/success/success.vue
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
<template>
|
||||||
|
<view class="pinSuccess">
|
||||||
|
<view class="count-down">
|
||||||
|
<u-count-down :time="30 * 60 * 60 * 1000" format="HH:mm:ss" autoStart millisecond />
|
||||||
|
</view>
|
||||||
|
<view class="title"> 还差 <span>1</span> 人,赶紧邀请好友来拼单吧 </view>
|
||||||
|
<view class="btn invite"> 邀请好友拼单 </view>
|
||||||
|
<view class="btn index" @click="goIndex"> 去首页逛逛</view>
|
||||||
|
<view class="goodInfo">
|
||||||
|
<view class="avatars">
|
||||||
|
<image class="avatar me" src="/static/book/333.png" mode="aspectFill" />
|
||||||
|
<image class="wen pin" src="/static/book/wen.png" mode="aspectFill" />
|
||||||
|
</view>
|
||||||
|
<view class="orderInfo">
|
||||||
|
订单详情
|
||||||
|
<view class="">
|
||||||
|
<view class="">
|
||||||
|
商品名称商品名称商品名称商品名称商品名称商品名称商品名称商品名称商品名称
|
||||||
|
</view>
|
||||||
|
<u-icon type="arrow-right" size="15" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goIndex() {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/store/index/index'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</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 #999;
|
||||||
|
padding-bottom: $padding;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 90rpx;
|
||||||
|
height: 90rpx;
|
||||||
|
margin: 10rpx 20rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.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 20rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.orderInfo{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
</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">
|
||||||
|
|||||||
164
pages/user/my-card/my-card.vue
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
<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>
|
||||||
|
</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;
|
||||||
|
|
||||||
|
.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/.DS_Store
vendored
Normal file
BIN
static/book/wen.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
static/store/30-day.png
Normal file
|
After Width: | Height: | Size: 4.8 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/type_1.png
Normal file
|
After Width: | Height: | Size: 3.5 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 |