10 changed files with 438 additions and 212 deletions
@ -1,183 +0,0 @@ |
|||||
<template> |
|
||||
<view class="my-userinfo-container"> |
|
||||
<!-- 头像和昵称区域 --> |
|
||||
<view class="top-box"> |
|
||||
<image :src="userinfo.avatarUrl" class="avatar"></image> |
|
||||
<view class="nickname">{{userinfo.nickName}}</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 面板区域 --> |
|
||||
<view class="panel-list"> |
|
||||
<!-- 第1个面板 --> |
|
||||
<view class="panel"> |
|
||||
<view class="panel-body"> |
|
||||
<view class="panel-item"> |
|
||||
<text>8</text> |
|
||||
<text>收藏的店铺</text> |
|
||||
</view> |
|
||||
<view class="panel-item"> |
|
||||
<text>14</text> |
|
||||
<text>收藏的商品</text> |
|
||||
</view> |
|
||||
<view class="panel-item"> |
|
||||
<text>18</text> |
|
||||
<text>关注的商品</text> |
|
||||
</view> |
|
||||
<view class="panel-item"> |
|
||||
<text>84</text> |
|
||||
<text>足迹</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 第2个面板 --> |
|
||||
<view class="panel"> |
|
||||
<view class="panel-title"> |
|
||||
我的订单 |
|
||||
</view> |
|
||||
<view class="panel-body"> |
|
||||
<view class="panel-item"> |
|
||||
<image src="/static/my-icons/icon1.png" class="icon"></image> |
|
||||
<text>待付款</text> |
|
||||
</view> |
|
||||
<view class="panel-item"> |
|
||||
<image src="/static/my-icons/icon2.png" class="icon"></image> |
|
||||
<text>待收货</text> |
|
||||
</view> |
|
||||
<view class="panel-item"> |
|
||||
<image src="/static/my-icons/icon3.png" class="icon"></image> |
|
||||
<text>退款/退货</text> |
|
||||
</view> |
|
||||
<view class="panel-item"> |
|
||||
<image src="/static/my-icons/icon4.png" class="icon"></image> |
|
||||
<text>全部订单</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
|
|
||||
<!-- 第3个面板 --> |
|
||||
<view class="panel"> |
|
||||
<view class="panel-list-item"> |
|
||||
<text>收货地址</text> |
|
||||
<uni-icons type="arrowright" size="15"></uni-icons> |
|
||||
</view> |
|
||||
<view class="panel-list-item"> |
|
||||
<text>联系客服</text> |
|
||||
<uni-icons type="arrowright" size="15"></uni-icons> |
|
||||
</view> |
|
||||
<view class="panel-list-item" @click="logout"> |
|
||||
<text>退出登录</text> |
|
||||
<uni-icons type="arrowright" size="15"></uni-icons> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { mapState, mapMutations } from 'vuex' |
|
||||
|
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
|
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
...mapState('m_user', ['userinfo']) |
|
||||
}, |
|
||||
methods: { |
|
||||
...mapMutations('m_user', ['updateAddress', 'updateUserInfo', 'updateToken']), |
|
||||
async logout() { |
|
||||
const [err, succ] = await uni.showModal({ |
|
||||
title: '提示', |
|
||||
content: '确认退出登录吗?' |
|
||||
}).catch(err => err) |
|
||||
|
|
||||
if (succ && succ.confirm) { |
|
||||
this.updateAddress({}) |
|
||||
this.updateUserInfo({}) |
|
||||
this.updateToken('') |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
.my-userinfo-container { |
|
||||
height: 100%; |
|
||||
background-color: #F4F4F4; |
|
||||
|
|
||||
.top-box { |
|
||||
height: 400rpx; |
|
||||
background-color: #C00000; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
flex-direction: column; |
|
||||
|
|
||||
.avatar { |
|
||||
width: 90px; |
|
||||
height: 90px; |
|
||||
border-radius: 45px; |
|
||||
border: 2px solid #FFF; |
|
||||
box-shadow: 0 1px 5px black; |
|
||||
} |
|
||||
|
|
||||
.nickname { |
|
||||
font-size: 16px; |
|
||||
color: #FFF; |
|
||||
font-weight: bold; |
|
||||
margin-top: 10px; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.panel-list { |
|
||||
padding: 0 10px; |
|
||||
position: relative; |
|
||||
top: -10px; |
|
||||
|
|
||||
.panel { |
|
||||
background-color: white; |
|
||||
border-radius: 3px; |
|
||||
margin-bottom: 8px; |
|
||||
|
|
||||
.panel-title { |
|
||||
line-height: 45px; |
|
||||
padding-left: 10px; |
|
||||
font-size: 15px; |
|
||||
border-bottom: 1px solid #F4F4F4; |
|
||||
} |
|
||||
|
|
||||
.panel-body { |
|
||||
display: flex; |
|
||||
justify-content: space-around; |
|
||||
|
|
||||
.panel-item { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
align-items: center; |
|
||||
justify-content: space-around; |
|
||||
padding: 10px 0; |
|
||||
font-size: 13px; |
|
||||
|
|
||||
.icon { |
|
||||
width: 35px; |
|
||||
height: 35px; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.panel-list-item { |
|
||||
display: flex; |
|
||||
justify-content: space-between; |
|
||||
align-items: center; |
|
||||
font-size: 15px; |
|
||||
padding: 0 10px; |
|
||||
line-height: 45px; |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,23 +0,0 @@ |
|||||
import { mapGetters } from 'vuex' |
|
||||
|
|
||||
export default { |
|
||||
computed: { |
|
||||
...mapGetters('m_cart', ['total']) |
|
||||
}, |
|
||||
watch: { |
|
||||
total() { |
|
||||
this.setBadge() |
|
||||
} |
|
||||
}, |
|
||||
onShow() { |
|
||||
this.setBadge() |
|
||||
}, |
|
||||
methods: { |
|
||||
setBadge() { |
|
||||
uni.setTabBarBadge({ |
|
||||
index: 2, |
|
||||
text: this.total + '' |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 69 KiB |
@ -0,0 +1,210 @@ |
|||||
|
|
||||
|
|
||||
|
<template> |
||||
|
<view class="cart-container"> |
||||
|
<!-- 选择收货地址的盒子 --> |
||||
|
<view class="address-choose-box" v-if="JSON.stringify(address) === '{}'"> |
||||
|
<button type="primary" size="mini" class="btnChooseAddress" @click="chooseAddress">请选择收货地址+</button> |
||||
|
</view> |
||||
|
|
||||
|
<!-- 渲染收货信息的盒子 --> |
||||
|
<view class="address-info-box" v-else @click="chooseAddress"> |
||||
|
<view class="row1"> |
||||
|
<view class="row1-left"> |
||||
|
<view class="username">收货人:{{address.userName}}</view> |
||||
|
</view> |
||||
|
<view class="row1-right"> |
||||
|
<view class="phone">电话:{{address.telNumber}}</view> |
||||
|
<uni-icons type="arrowright" size="16"></uni-icons> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="row2"> |
||||
|
<view class="row2-left">收货地址:</view> |
||||
|
<view class="row2-right">{{addstr}}</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
|
||||
|
<!-- 底部的边框线 --> |
||||
|
<image src="/static/cart_border@2x.png" class="address-border"></image> |
||||
|
|
||||
|
<!-- 循环渲染地址信息 --> |
||||
|
<view> |
||||
|
<block v-for="(goods, i) in addressList" :key="i"> |
||||
|
<view class="goods-item"> |
||||
|
<!-- 左侧的盒子 --> |
||||
|
<view class="goods-item-left"> |
||||
|
<radio :checked="goods.goods_state" color="#C00000" v-if="showRadio" @click="radioClickHandler"></radio> |
||||
|
<image :src="goods.goods_small_logo || defaultPic" class="goods-pic"></image> |
||||
|
</view> |
||||
|
<!-- 右侧的盒子 --> |
||||
|
<view class="goods-item-right"> |
||||
|
<!-- 商品的名字 --> |
||||
|
<view class="goods-name">{{goods.goods_name}}</view> |
||||
|
<view class="goods-info-box"> |
||||
|
<view class="goods-price">¥{{goods.goods_price | tofixed}}</view> |
||||
|
<uni-number-box :min="1" :value="goods.goods_count" v-if="showNum" @change="numChangeHandler"></uni-number-box> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</block> |
||||
|
</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapGetters } from 'vuex' |
||||
|
|
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
address: {}, |
||||
|
addressList:[{"goods_name":"111"}] |
||||
|
}; |
||||
|
}, |
||||
|
methods: { |
||||
|
...mapMutations('m_user', ['updateAddress']), |
||||
|
async chooseAddress() { |
||||
|
const [err, succ] = await uni.chooseAddress().catch(err => err) |
||||
|
if (err === null && succ.errMsg === 'chooseAddress:ok') { |
||||
|
// this.address = succ |
||||
|
this.updateAddress(succ) |
||||
|
} |
||||
|
|
||||
|
if (err && (err.errMsg === 'chooseAddress:fail auth deny' || err.errMsg === 'chooseAddress:fail authorize no response')) { |
||||
|
// 通过调用这个方法,让用户重新授权 |
||||
|
this.reAuth() |
||||
|
} |
||||
|
}, |
||||
|
// 让用户重新授权 |
||||
|
async reAuth() { |
||||
|
const [err2, confirmResult] = await uni.showModal({ |
||||
|
content: '检测到您没打开地址权限,是否去设置打开?', |
||||
|
confirmText: '确认', |
||||
|
cancelText: '取消' |
||||
|
}) |
||||
|
|
||||
|
if (err2) return |
||||
|
|
||||
|
console.log(confirmResult) |
||||
|
|
||||
|
if (confirmResult.cancel) return uni.$showMsg('您取消了地址授权!') |
||||
|
if (confirmResult.confirm) return uni.openSetting({ |
||||
|
success: (settingResult) => { |
||||
|
if (!settingResult.authSetting['scope.address']) return uni.$showMsg('您取消了授权!') |
||||
|
if (settingResult.authSetting['scope.address']) return uni.$showMsg('授权成功!请选择地址') |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
computed: { |
||||
|
...mapState('m_user', ['address']), |
||||
|
...mapGetters('m_user', ['addstr']) |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss"> |
||||
|
.address-border { |
||||
|
display: block; |
||||
|
width: 100%; |
||||
|
height: 5px; |
||||
|
} |
||||
|
|
||||
|
.address-choose-box { |
||||
|
height: 90px; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
} |
||||
|
|
||||
|
.address-info-box { |
||||
|
font-size: 12px; |
||||
|
height: 90px; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
justify-content: center; |
||||
|
padding: 0 5px; |
||||
|
|
||||
|
.row1 { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
|
||||
|
.row1-right { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.row2 { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
margin-top: 10px; |
||||
|
|
||||
|
.row2-left { |
||||
|
white-space: nowrap; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.cart-container { |
||||
|
padding-bottom: 50px; |
||||
|
} |
||||
|
|
||||
|
.cart-title { |
||||
|
height: 40px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
padding-left: 5px; |
||||
|
border-bottom: 1px solid #EFEFEF; |
||||
|
|
||||
|
.cart-title-text { |
||||
|
font-size: 14px; |
||||
|
margin-left: 10px; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-item { |
||||
|
width: 750rpx; |
||||
|
box-sizing: border-box; |
||||
|
display: flex; |
||||
|
padding: 10px 5px; |
||||
|
border-bottom: 1px solid #f0f0f0; |
||||
|
|
||||
|
.goods-item-left { |
||||
|
margin-right: 5px; |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
|
||||
|
.goods-pic { |
||||
|
width: 100px; |
||||
|
height: 100px; |
||||
|
display: block; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.goods-item-right { |
||||
|
display: flex; |
||||
|
flex: 1; |
||||
|
flex-direction: column; |
||||
|
justify-content: space-between; |
||||
|
|
||||
|
.goods-name { |
||||
|
font-size: 13px; |
||||
|
} |
||||
|
|
||||
|
.goods-info-box { |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
|
||||
|
.goods-price { |
||||
|
color: #C00000; |
||||
|
font-size: 16px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
</style> |
||||
@ -0,0 +1,52 @@ |
|||||
|
<template> |
||||
|
<view class="table_index"> |
||||
|
<uni-section title="建议与反馈" type="line"></uni-section> |
||||
|
<uni-forms :modelValue="formData"> |
||||
|
<uni-forms-item label="手机" name="mobile"> |
||||
|
<uni-easyinput type="text" v-model="formData.mobile" placeholder="请输入手机号码" /> |
||||
|
</uni-forms-item> |
||||
|
<uni-forms-item required name="content" label="内容"> |
||||
|
<uni-easyinput type="textarea" v-model="formData.content" placeholder="请输入您要反馈的内容" /> |
||||
|
</uni-forms-item> |
||||
|
<button class="uni-button" size="mini" type="primary" @click="toTable">提交</button> |
||||
|
</uni-forms> |
||||
|
</view> |
||||
|
</template> |
||||
|
<script> |
||||
|
import { mapMutations, mapState } from 'vuex' |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
formData: { |
||||
|
mobile: '', |
||||
|
content: '', |
||||
|
}, |
||||
|
} |
||||
|
}, |
||||
|
methods:{ |
||||
|
toTable(){ |
||||
|
console.log(this.formData.mobile); |
||||
|
console.log(this.formData.content); |
||||
|
}, |
||||
|
setTable(mobile,content){ |
||||
|
this.formData.mobile = mobile//获取到的名称 |
||||
|
this.formData.content = content//获取到的单位名称 |
||||
|
}, |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
<style scoped> |
||||
|
.table_index { |
||||
|
background-color: #fff; |
||||
|
height: 100%; |
||||
|
padding: 20px 30px; |
||||
|
} |
||||
|
.uni-button{ |
||||
|
font-size: 18px; |
||||
|
width: 100%; |
||||
|
height: 80rpx; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,131 @@ |
|||||
|
<template> |
||||
|
<view> |
||||
|
<view class="index-background"> |
||||
|
<image src="/static/medal_top.jpg"></image> |
||||
|
<view class="panel-list"> |
||||
|
<view class="panel"> |
||||
|
<view class="panel-body"> |
||||
|
<view class="panel-item" @click="taskMedal"> |
||||
|
<text>任务勋章</text> |
||||
|
</view> |
||||
|
<view class="panel-item" @click="myMedal"> |
||||
|
<text>我的勋章</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 任务奖章区域 --> |
||||
|
<view class="nav-list" v-if="showMedal == true" style="width: 1000rpx;"> |
||||
|
<view class="nav-item" v-for="(item, i) in taskMedalList" :key="i"> |
||||
|
<image :src="item" class="nav-img"></image> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 任务奖章区域 --> |
||||
|
<view class="nav-list" v-else="showMedal == false"> |
||||
|
<view class="nav-item" v-for="(item, i) in medalList" :key="i"> |
||||
|
<image :src="item" class="nav-img"></image> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
showMedal:true, |
||||
|
//奖章列表 |
||||
|
taskMedalList: [], |
||||
|
//我的奖章列表 |
||||
|
myMedalList: [], |
||||
|
}; |
||||
|
}, |
||||
|
onLoad() { |
||||
|
this.getMedalList() |
||||
|
}, |
||||
|
methods: { |
||||
|
|
||||
|
async getMedalList() { |
||||
|
|
||||
|
const { |
||||
|
data: res |
||||
|
} = await uni.$http.post('/small/scene/manage/listAll',{name:this.name}) |
||||
|
if (!res.success) return uni.$showMsg() |
||||
|
|
||||
|
res.data.forEach(item=>{ |
||||
|
item.uploadPath = uni.$http.baseUrl +item.uploadPath |
||||
|
this.taskMedalList.push(item.uploadPath) |
||||
|
}) |
||||
|
|
||||
|
uni.$showMsg('数据请求成功!') |
||||
|
}, |
||||
|
taskMedal(){ |
||||
|
this.showMedal = true |
||||
|
}, |
||||
|
myMedal(){ |
||||
|
this.showMedal = false |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss"> |
||||
|
.nav-list { |
||||
|
display: flex; |
||||
|
justify-content: left; |
||||
|
margin: 5px 0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
.nav-img { |
||||
|
margin: 10px; |
||||
|
width: 208rpx; |
||||
|
height: 200rpx; |
||||
|
border-radius: 8px; |
||||
|
} |
||||
|
.index-background { |
||||
|
image { |
||||
|
height: 300rpx; |
||||
|
width: 100%; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.panel-list { |
||||
|
padding: 0 10px; |
||||
|
position: relative; |
||||
|
top: -10px; |
||||
|
|
||||
|
.panel { |
||||
|
background-color: white; |
||||
|
border-radius: 3px; |
||||
|
margin-bottom: 8px; |
||||
|
|
||||
|
.panel-title { |
||||
|
line-height: 45px; |
||||
|
padding-left: 10px; |
||||
|
font-size: 15px; |
||||
|
border-bottom: 1px solid #F4F4F4; |
||||
|
} |
||||
|
|
||||
|
.panel-body { |
||||
|
display: flex; |
||||
|
justify-content: space-around; |
||||
|
|
||||
|
.panel-item { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: space-around; |
||||
|
padding: 10px 0; |
||||
|
font-size: 13px; |
||||
|
|
||||
|
.icon { |
||||
|
width: 35px; |
||||
|
height: 35px; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
</style> |
||||
Loading…
Reference in new issue