Browse Source

对接登录、注册、足迹列表和添加删除、收藏列表和添加取消、部分商品详情

master
ltlzx 3 years ago
parent
commit
76dd3d8ff0
  1. 18
      api/index.js
  2. 7
      api/request.js
  3. 10
      common/common.scss
  4. 84
      pages/account/favorites.vue
  5. 30
      pages/account/index.vue
  6. 66
      pages/account/wishlist.vue
  7. 12
      pages/category/productList.vue
  8. 29
      pages/login/index.vue
  9. 15
      pages/login/verifyEmail.vue
  10. 77
      pages/productDetails/index.vue

18
api/index.js

@ -6,7 +6,8 @@ export const defaultRequest =query=>{
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:true
errMsg:true,
isCookies:false
})
}
//默认请求地址 不显示错误信息
@ -15,6 +16,17 @@ export const defaultRequest1 =query=>{
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:false
errMsg:false,
isCookies:false
})
}
}
//默认请求地址 只用cookies请求数据
export const defaultRequest2 =query=>{
return httpRequest({
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:true,
isCookies:true
})
}

7
api/request.js

@ -39,7 +39,7 @@ const httpRequest = (params) => {
method: params.method,
header: {
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'cookies':uni.getStorageSync('cookies') || ""
// 'cookies':uni.getStorageSync('cookies') || ""
}
};
return new Promise((resolve, reject) => {
@ -58,6 +58,11 @@ const httpRequest = (params) => {
duration: 2000
});
}
if(res.data.error!=0 && params.isCookies){
let user_info=uni.getStorageSync('user_info')
user_info.isLogin=false
uni.setStorageSync('user_info',user_info)
}
resolve(res.data);
},
fail: err => {

10
common/common.scss

@ -240,7 +240,7 @@
.wishlist{
padding: 0 26.67rpx;
display: flex;
justify-content: space-between;
// justify-content: space-between;
flex-wrap: wrap;
.wishlist_item{
@ -250,6 +250,10 @@
font-weight: 500;
width: 33%;
margin-top: 33.33rpx;
// margin-right: 18.67rpx;
&:nth-child(3n+3){
margin-right: 0;
}
.wishlist_item_img{
width: 220rpx;
@ -258,6 +262,10 @@
background-color: #999999;
position: relative;
.wishlist_item_img_goods{
width: 100%;
height: 100%;
}
.select{
position: absolute;
width: 28rpx;

84
pages/account/favorites.vue

@ -1,15 +1,17 @@
<template>
<view class="wishlist_body">
<view class="status_bar"></view>
<uni-nav-bar left-icon="left" :rightText="isDelete?'Done':'Delete'" title="Favorites" color="#000000" @clickLeft="back" @clickRight="isDelete=!isDelete"/>
<uni-nav-bar left-icon="left" :rightText="isDelete?'Done':'Delete'" title="Favorites" color="#000000" @clickLeft="back" @clickRight="$refs.alertDialog.open()"/>
<view class="wishlist">
<view class="wishlist_item" v-for="(item,index) in 9" :key="index">
<view class="wishlist_item" v-for="(item,index) in goodsList" :key="index" >
<view class="wishlist_item_img">
<image :src="item.goods_img" mode="" class="wishlist_item_img_goods"></image>
<image src="../../static/img/select.png" mode="" class="select" v-show="isDelete"></image>
</view>
<view class="wishlist_item_bottom">
<text>US$31234.00</text>
<image src="../../static/img/like.png" mode="" class="wishlist_item_bottom_icon"></image>
<text>US${{item.promote_price?item.promote_price:item.shop_price}}</text>
<image src="/static/img/like.png" mode="" v-show="item.is_attention==0" class="wishlist_item_bottom_icon" @click="addLike(item.id)"></image>
<image src="../../static/img/like1.png" mode="" v-show="item.is_attention==1" class="wishlist_item_bottom_icon" @click="removeLike(item.id)"></image>
</view>
</view>
</view>
@ -22,20 +24,92 @@
<button>DELETE</button>
</view>
</view>
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="Close" confirmText="Clear" title="Tips" content="Whether to clear browsing history?"
@confirm="clearFavorites" ></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
isDelete:false
isDelete:false,
goodsList:[]
}
},
methods:{
//
clearFavorites(){
let data={_action:'cleargoodsbrowsehistory'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.getList()
}
})
},
//
addLike(id){
let data={_action:'setfaviouritegoods',goods_id:id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.changeImage(id,0)
}
})
},
//
removeLike(id){
let data={_action:'unsetfaviouritegoods',goods_id:id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.changeImage(id,1)
}
})
},
//
changeImage(id,type){
this.goodsList.map(item=>{
if(item.id==id){
if(type==0){
item.is_attention=1
}else{
item.is_attention=0
}
}
})
},
back(){
uni.navigateBack()
},
getList(){
let data={_action:'getgoodsbrowsehistory'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
this.goodsList=res.data
}
})
}
},
onLoad() {
this.getList()
}
}
</script>

30
pages/account/index.vue

@ -3,15 +3,16 @@
<view class="status_bar"></view>
<view class="account_info">
<image src="../../static/img/logo.png" mode="" class="header_img"></image>
<view class="info_name" v-if="!isLogin">
<image src="../../static/img/logo.png" mode="" class="header_img" v-show="!user_info.isLogin"></image>
<image :src="user_info.user_head?user_info.user_head:user_info.headicons[5]" mode="" class="header_img" v-if="user_info.isLogin"></image>
<view class="info_name" v-if="!user_info.isLogin">
<navigator url="/pages/login/index" >
LOGIN / SIGUP>
</navigator>
</view>
<view class="info_name" v-else>
<navigator url="/pages/account/myProfile" >
hi,name>
hi,{{user_info.nickname!=''?user_info.nickname:user_info.email}}>
</navigator>
</view>
@ -116,14 +117,33 @@
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
isLogin:false
user_info:{
isLogin:false,
}
}
},
methods:{
getUserInfo(){
let data={_action:'getinfo'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
res.data.isLogin=true
this.user_info=res.data
uni.setStorageSync('user_info',this.user_info)
}else{
this.user_info=uni.getStorageSync('user_info')
}
})
}
},
onShow() {
this.user_info=uni.getStorageSync('user_info')
this.getUserInfo()
}
}
</script>

66
pages/account/wishlist.vue

@ -3,12 +3,14 @@
<view class="status_bar"></view>
<uni-nav-bar left-icon="left" :rightText="isDelete?'Done':'Delete'" title="Wishlist" color="#000000" @clickLeft="back" @clickRight="isDelete=!isDelete"/>
<view class="wishlist">
<view class="wishlist_item" v-for="(item,index) in 9" :key="index">
<view class="wishlist_item" v-for="(item,index) in goodsList" :key="index" @click="changeImage(item.id)">
<view class="wishlist_item_img">
<image src="../../static/img/select.png" mode="" class="select" v-show="isDelete"></image>
<image :src="item.goods_img" mode="" class="wishlist_item_img_goods"></image>
<image src="../../static/img/select.png" mode="" class="select" v-show="isDelete && item.is_select==0"></image>
<image src="../../static/img/select.png" mode="" class="select" v-show="isDelete && item.is_select==1"></image>
</view>
<view class="wishlist_item_bottom">
<text>US$31234.00</text>
<text>US${{item.promote_price?item.promote_price:item.shop_price}}</text>
<image src="../../static/img/cart2.png" mode="" class="wishlist_item_bottom_icon"></image>
</view>
</view>
@ -19,23 +21,77 @@
<text>All</text>
</view>
<view class="wishlist_foot_right">
<button>DELETE</button>
<button @click="removeLike">DELETE</button>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
isDelete:false
isDelete:false,
goodsList:[]
}
},
methods:{
getList(){
let data={_action:'getfaviouritegoods',page_index:1,page_size:30}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
this.goodsList=res.data
}
})
},
//
addLike(id){
let data={_action:'setfaviouritegoods',goods_id:id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.changeImage(id,0)
}
})
},
//
removeLike(id){
let data={_action:'unsetfaviouritegoods',goods_id:'659,664'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.getList()
}
})
},
//
changeImage(id){
this.goodsList.map(item=>{
if(item.id==id){
if(item.is_select==0){
item.is_select=1
}else{
item.is_select=0
}
}
})
},
back(){
uni.navigateBack()
}
},
onLoad() {
this.getList()
}
}
</script>

12
pages/category/productList.vue

@ -37,8 +37,8 @@
</view>
<view class="body">
<view class="product" v-show="pets_index==0">
<view class="product_item" v-for="(item,index) in list" :key="index">
<image class="product_item_image" :src="item.image"></image>
<view class="product_item" v-for="(item,index) in list" :key="index" @click="goDetails(item)">
<image class="product_item_image" :src="item.goods_img"></image>
<view class="product_item_right">
<view >{{item.short_name}}</view>
<view class="item_right_lable">
@ -56,7 +56,7 @@
</view>
<view class="product1" v-show="pets_index==1">
<custom-waterfalls-flow ref="waterfallsFlowRef" :value="list" imageKey="goods_img">
<custom-waterfalls-flow ref="waterfallsFlowRef" :value="list" imageKey="goods_img" @wapperClick="goDetails" @imageClick="goDetails">
<template v-slot:default="item">
<view class="product1_item">
<view>{{item.short_name}}</view>
@ -92,6 +92,12 @@
back(){
uni.navigateBack()
},
goDetails(item){
console.info(item)
uni.navigateTo({
url:"../productDetails/index?goods_id="+item.id
})
},
goPage(){
uni.navigateTo({
url:'../index/search'

29
pages/login/index.vue

@ -52,7 +52,7 @@
</template>
<script>
import {defaultRequest1} from '../../api/index.js'
import {defaultRequest1,defaultRequest} from '../../api/index.js'
export default {
data() {
return {
@ -80,6 +80,11 @@
loginErr:false,
regErr:false,
errMsg:'The email address or password you enterde is incorrect.',
query:{
_action:'sendmessagesforvalidation',
username:'',
password:''
}
}
},
methods:{
@ -106,10 +111,16 @@
console.info(res)
if(res.error==0){
this.loginErr=false
res.data.isLogin=true
uni.setStorageSync('user_info',res.data)
uni.switchTab({
url:'../index/index'
})
}else{
if(res.data){
this.$refs.alertDialog.open()
this.query.username=this.loginDate.username
this.query.password=this.loginDate.password
}else{
this.loginErr=true
this.errMsg=res.message
@ -117,10 +128,16 @@
}
})
},
//
dialogConfirm(){
uni.navigateTo({
url:'verifyEmail?email='+this.loginDate.username
defaultRequest(this.query).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none',
})
}
})
},
@ -139,7 +156,7 @@
if(res.error==0){
this.regErr=false
uni.showToast({
title:'注册成功',
title:'注册成功,请进行邮箱验证!',
icon:'success',
})
}else{

15
pages/login/verifyEmail.vue

@ -2,7 +2,7 @@
<view>
<view class="login">
<view class="verify_tips">
To verify your email,we've send a verification code to {{email}}
To verify your email,we've send a verification code to {{query.username}}
</view>
<input type="text" class="login_input" placeholder="Enter code">
<view class="tips" v-show="!isErr">The code is incorrect.</view>
@ -15,7 +15,7 @@
<image src="../../static/img/close.png" mode=""></image>
</view>
<view class="verify_popup_title">Send!</view>
<view class="verify_popup_msg">we send a new verification code to {{email}}</view>
<view class="verify_popup_msg">we send a new verification code to {{query.username}}</view>
<view class="verify_popup_btn">
<button>OKAY</button>
</view>
@ -24,12 +24,17 @@
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
isShow:false,
isErr:false,
email:'xxxx@xx.com'
query:{
_action:'sendmessagesforvalidation',
username:'xxxx@xx.com',
password:''
}
}
},
methods:{
@ -37,7 +42,9 @@
},
onLoad(e) {
console.info(e)
this.email=e.email
this.query.username=e.email
this.query.password=e.password
this.sendMsg()
}
}
</script>

77
pages/productDetails/index.vue

@ -17,7 +17,8 @@
<uni-swiper-dot :info="info" :current="current" field="content" mode="nav" class="page_padding " :class="isVedio?'showVedio':''" >
<swiper class="swiper" @change="gridSwiper" :circular="true">
<swiper-item>
<view class="swiper-item uni-bg-red">
<view class="swiper-item">
<!-- <img src="" alt="" class="swiper-item-image"> -->
<image src="../../static/img/play.png" class="vedio_play" mode=""></image>
</view>
</swiper-item>
@ -41,7 +42,7 @@
</swiper>
</uni-swiper-dot>
</view>
<view class="special">
<view class="special" v-if="goodsDate.is_promote==1">
<view class="special_left">
<image src="../../static/img/naozhong.png" mode=""></image>
<text>Flash Sale</text>
@ -54,13 +55,14 @@
</view>
<view class="goods_info">
<view class="goods_info_price">
<text>US$314.00</text>
<text>US${{goodsDate.shop_price}}</text>
<view class="info_price_right">
<image src="/static/img/like.png" mode=""></image>
<image src="/static/img/like.png" mode="" v-show="goodsDate.is_attention==0" @click="addLike(goodsDate.id)"></image>
<image src="../../static/img/like1.png" mode="" v-show="goodsDate.is_attention==1" @click="removeLike(goodsDate.id)"></image>
<image src="../../static/img/share.png" mode=""></image>
</view>
</view>
<view>Adidas Yeezy Boost 350 V2 Dazzling Blue Black GY 7164 Men's Sizes </view>
<view>{{goodsDate.goods_name}} </view>
<view class="evaluate">
<uni-rate size="18" :value="4" active-color="red" :is-fill="false"/>
<view class="evaluate_text">4.0</view>
@ -298,6 +300,7 @@
</template>
<script>
import {defaultRequest,defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
@ -305,6 +308,10 @@
current:0,
isVedio:false,
isSecurity:false,
query:{
_action:'getgoodsdetail',
goods_id:''
},
info: [{
colorClass: 'uni-bg-red',
url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg',
@ -322,10 +329,55 @@
}
],
isCart:false,
goodsDate:{},
user_info:{}
}
},
methods:{
//
addLike(id){
let data={_action:'setfaviouritegoods',goods_id:this.query.goods_id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.goodsDate.is_attention=1
}
})
},
//
removeLike(id){
let data={_action:'unsetfaviouritegoods',goods_id:this.query.goods_id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.goodsDate.is_attention=0
}
})
},
//
setFavorites(){
let data={_action:'setgoodsbrowsehistory',goods_id:this.query.goods_id}
defaultRequest2(data).then(res=>{
console.info(res)
})
},
//
getDate(){
defaultRequest(this.query).then(res=>{
console.info(res)
if(res.error==0){
this.goodsDate=res.data
}
})
},
addCart(){
this.isCart=true
},
@ -343,6 +395,15 @@
back(){
uni.navigateBack()
}
},
onLoad(e) {
this.query.goods_id=e.goods_id
this.getDate()
this.user_info=uni.getStorageSync('user_info')
if(this.user_info.isLogin){
this.setFavorites()
}
}
}
</script>
@ -699,6 +760,10 @@
color: white;
position: relative;
.swiper-item-image{
width: 100%;
height: 100%;
}
.vedioControl{
position: absolute;
bottom: 18.67rpx;

Loading…
Cancel
Save