Browse Source

商城app

master
“linchaomei” 3 years ago
commit
54e410ff8d
  1. 18
      .gitignore
  2. 24
      .hbuilderx/launch.json
  3. 18
      App.vue
  4. 3
      androidPrivacy.json
  5. 76
      api/index.js
  6. 99
      api/request.js
  7. 645
      common/common.scss
  8. 261
      common/scss/order.scss
  9. 5
      config.js
  10. 20
      index.html
  11. 21
      main.js
  12. 122
      manifest.json
  13. 35
      package-lock.json
  14. 6
      package.json
  15. 283
      pages.json
  16. 453
      pages/account/addAddress.vue
  17. 197
      pages/account/address.vue
  18. 165
      pages/account/changeImg.vue
  19. 129
      pages/account/favorites.vue
  20. 304
      pages/account/index.vue
  21. 103
      pages/account/message.vue
  22. 67
      pages/account/myCoupons.vue
  23. 874
      pages/account/myOrders.vue
  24. 161
      pages/account/myProfile.vue
  25. 74
      pages/account/myReview.vue
  26. 60
      pages/account/pointsDetails.vue
  27. 119
      pages/account/settings.vue
  28. 99
      pages/account/wishlist.vue
  29. 213
      pages/category/index.vue
  30. 225
      pages/category/pets.vue
  31. 134
      pages/index/flashSale.vue
  32. 736
      pages/index/index.vue
  33. 92
      pages/index/pickUpCentre.vue
  34. 168
      pages/index/search.vue
  35. 73
      pages/login/changePwd.vue
  36. 261
      pages/login/index.vue
  37. 159
      pages/login/verifyEmail.vue
  38. 540
      pages/order/confirmation.vue
  39. 393
      pages/order/details.vue
  40. 102
      pages/order/logisticsDetails.vue
  41. 169
      pages/order/paySuccess.vue
  42. 251
      pages/order/refund.vue
  43. 328
      pages/order/refundDetails.vue
  44. 1376
      pages/productDetails/index.vue
  45. 283
      pages/productDetails/review.vue
  46. 539
      pages/shippingCart/index.vue
  47. BIN
      static/icon/1024.png
  48. BIN
      static/icon/all.png
  49. BIN
      static/icon/back.png
  50. BIN
      static/icon/cart.png
  51. BIN
      static/icon/heart.png
  52. BIN
      static/icon/heart1.png
  53. BIN
      static/icon/left.png
  54. BIN
      static/icon/search.png
  55. BIN
      static/img/APay.png
  56. BIN
      static/img/About CHIC.png
  57. BIN
      static/img/Account.png
  58. BIN
      static/img/Account1.png
  59. BIN
      static/img/Attention CHIC.png
  60. BIN
      static/img/Cart.png
  61. BIN
      static/img/Category.png
  62. BIN
      static/img/Category1.png
  63. BIN
      static/img/GPay.png
  64. BIN
      static/img/Help Center.png
  65. BIN
      static/img/My Address.png
  66. BIN
      static/img/My Review.png
  67. BIN
      static/img/Processing.png
  68. BIN
      static/img/Return Policy.png
  69. BIN
      static/img/Returns.png
  70. BIN
      static/img/Setting.png
  71. BIN
      static/img/Shipped.png
  72. BIN
      static/img/add.png
  73. BIN
      static/img/address.png
  74. BIN
      static/img/address1.png
  75. BIN
      static/img/address_xian.png
  76. BIN
      static/img/apple.png
  77. BIN
      static/img/bottom.png
  78. BIN
      static/img/bottom1.png
  79. BIN
      static/img/camera.png
  80. BIN
      static/img/card.png
  81. BIN
      static/img/cart1.png
  82. BIN
      static/img/cart2.png
  83. BIN
      static/img/cart3.png
  84. BIN
      static/img/close.png
  85. BIN
      static/img/close1.png
  86. BIN
      static/img/close2.png
  87. BIN
      static/img/close3.png
  88. BIN
      static/img/completed.png
  89. BIN
      static/img/coupons.png
  90. BIN
      static/img/coupons_bg.png
  91. BIN
      static/img/delete.png
  92. BIN
      static/img/delete1.png
  93. BIN
      static/img/delete2.png
  94. BIN
      static/img/dope plus.png
  95. BIN
      static/img/facebook.png
  96. BIN
      static/img/fail.png
  97. BIN
      static/img/favorites.png
  98. BIN
      static/img/gantan.png
  99. BIN
      static/img/gantan1.png
  100. BIN
      static/img/goods_lable.png

18
.gitignore

@ -0,0 +1,18 @@
# Mac
.DS_Store
**/.DS_Store
# vim/vi
*.swp
# JavaScript
node_modules/
.node_modules/
.eslintcache
unpackage/dist/build/
unpackage/dist/dev/
unpackage/cache/
unpackage/release/
unpackage/debug/
# python
*.pyc

24
.hbuilderx/launch.json

@ -0,0 +1,24 @@
{ // launch.json configurations app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtypelocalremote, localremote
"version": "0.0",
"configurations": [{
"app-plus" :
{
"launchtype" : "local"
},
"default" :
{
"launchtype" : "local"
},
"h5" :
{
"launchtype" : "local"
},
"mp-weixin" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]
}

18
App.vue

@ -0,0 +1,18 @@
<script>
export default {
onLaunch: function() {
// console.log('App Launch')
},
onShow: function() {
// console.log('App Show')
},
onHide: function() {
// console.log('App Hide')
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import "@/common/common.scss";
</style>

3
androidPrivacy.json

@ -0,0 +1,3 @@
{
"prompt" : "none"
}

76
api/index.js

@ -0,0 +1,76 @@
import httpRequest from './request';
//默认请求地址
export const defaultRequest =query=>{
return httpRequest({
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:true,
isCookies:false,
isEncryption:false,
isLoad:true
})
}
//默认请求地址 不显示错误信息
export const defaultRequest1 =query=>{
return httpRequest({
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:false,
isCookies:false,
isEncryption:false,
isLoad:true
})
}
//默认请求地址 只用cookies请求数据
export const defaultRequest2 =query=>{
return httpRequest({
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:true,
isCookies:true,
isEncryption:false,
isLoad:true
})
}
//默认请求地址 只用cookies请求数据 对里面的对象进行加密
export const defaultRequest3 =(query,key)=>{
return httpRequest({
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:true,
isCookies:true,
isEncryption:true,
isLoad:true,
key:key
})
}
//默认请求地址 不显示等待加载
export const defaultRequest4 =query=>{
return httpRequest({
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:true,
isCookies:false,
isEncryption:false,
isLoad:false
})
}
export const defaultRequest5 =query=>{
return httpRequest({
url:'mapi/api_v2011.php?appcode=DOPE+',
method:'post',
data:query,
errMsg:true,
isCookies:false,
isEncryption:false,
isLoad:false
})
}

99
api/request.js

@ -0,0 +1,99 @@
import config from '../config.js'
import { encryptDes, decryptDes ,encrypt_by_des } from '@/utils/des.js'
import Base64 from 'base-64';
import cryptoJS from "crypto-js"
const httpRequest = (params) => {
if(params.isLoad){
uni.showLoading({
title: "努力加载中..."
});
}
const json_data={
appcode:'DOPE+' ,//应用编码
appchannel:'FXXXXHUAWEI' ,//应用发布渠道
appver: '1.0.0',//应用版本
appname:'cnic_buyer' ,//应用名称
manufacturer:'HUAWEI' ,//设备生产商
phonebrand:'HORNOR' ,//设备品牌
phonetype:'X30' ,//设备型号
phoneos:'ANDROID'// 设备系统
}
let data=Object.assign(json_data,params.data)
console.info(data)
let key=params.key
if(params.isEncryption){
// console.info(JSON.parse(JSON.stringify(data.consignee)))
key=encryption(JSON.parse(JSON.stringify(data[params.key])))
// console.info(consignee)
data=encryption(data)
data[params.key]=key
}else{
data=encryption(data)
}
// console.info(data)
//进行加密
// console.info(encryptDes(JSON.stringify(data),'6780f04cf2e211ec86a8005056c00008'))
// console.info(encrypt_by_des(JSON.stringify(data),'6780f04cf2e211ec86a8005056c00008'))
// data=Base64.encode(encryptDes(JSON.stringify(data),'6780f04cf2e211ec86a8005056c00008'));
data=encryptDes(JSON.stringify(data),'6780f04cf2e211ec86a8005056c00008');
// console.info(data)
// 解密
// let data2 =JSON.parse(decodeURIComponent (decryptDes(Base64.decode(data),'6780f04cf2e211ec86a8005056c00008'))) ;
// console.info(data2)
let data1={data:data}
let httpOptions = {
url: config.apiUri + params.url,
data:data1,
method: params.method,
header: {
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
// 'cookies':uni.getStorageSync('cookies') || ""
}
};
return new Promise((resolve, reject) => {
uni.request({
...httpOptions,
success: res => {
// console.info(res)
uni.hideLoading();
// 进行解密
res.data=JSON.parse(decryptDes(res.data,'6780f04cf2e211ec86a8005056c00008'))
// res.data=Base64.decode(decryptDes(res.data,'6780f04cf2e211ec86a8005056c00008'));
// console.info(res.data)
if(res.data.error!=0 && params.errMsg){
uni.showToast({
title: res.data.message,
icon:'none',
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 => {
uni.hideLoading();
reject(err);
}
})
})
}
const encryption=(data)=>{
for(let key in data){
let item= data[key]
data[key]=encodeURIComponent(item)
}
return data
}
export default httpRequest;

645
common/common.scss

@ -0,0 +1,645 @@
.status_bar {
height: var(--status-bar-height);
width: 100%;
}
//地址信息
.address{
padding-top: 33.33rpx;
padding-bottom: 36rpx;
padding-left: 29.33rpx;
padding-right: 22.67rpx;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 14.67rpx #F6F5FA solid;
position: relative;
.address_left{
.address_title{
display: flex;
align-items: center;
color: #666666;
font-size: 24rpx;
margin-bottom: 30.67rpx;
image{
width: 32rpx;
height: 32rpx;
}
.address_title_name{
font-size: 28rpx;
color: black;
font-weight: bold;
margin-left: 24rpx;
margin-right: 38.67rpx;
}
}
.address_content{
padding-left: 56rpx;
color: #666666;
font-size: 24rpx;
font-weight: bold;
}
}
.address_xian{
height: 4rpx;
width: 100%;
position: absolute;
left: 0;
bottom: 0;
}
}
.address_more{
width: 20rpx;
height: 20rpx;
}
// 评价
.reviews_item{
padding: 34rpx 0;
border-bottom: 1px solid #E2E2E2;
&:last-child{
border-bottom: none;
}
.reviews_item_title{
display: flex;
align-items: center;
justify-content: space-between;
.reviews_title_user{
font-size: 32rpx;
display: flex;
align-items: center;
color: #3D3D3D;
text{
display: inline-block;
margin-right: 26rpx;
}
}
.reviews_title_time{
font-size: 24rpx;
font-weight: 400;
color: #909090;
}
}
.reviews_item_color{
font-size: 24rpx;
color: #909090;
font-weight: 400;
margin-bottom: 21.33rpx;
margin-top: 10rpx;
}
.reviews_item_content{
font-size: 26.67rpx;
font-weight: 400;
margin-bottom: 34.67rpx;
}
.reviews_item_image{
display: flex;
align-items: center;
.reviews_image_content{
width: 233.33rpx;
height: 233.33rpx;
margin-left: 16.67rpx;
background-color: #999999;
&:first-child{
margin-left: 0;
}
}
}
}
// 谈判细节
.order_popup{
position: fixed;
z-index: 999;
background-color: white;
width: 100%;
bottom: 0;
.order_popup_title{
position: relative;
font-size: 32rpx;
font-weight: bold;
border-bottom: 1px solid #E2E2E2;
display: flex;
align-items: center;
justify-content: center;
padding-top: 44.67rpx;
padding-bottom: 30.67rpx;
image{
width: 21.33rpx;
height: 21.33rpx;
position: absolute;
right: 26rpx;
top: 50%;
margin-top: -5.5rpx;
}
.order_popup_title_span{
color: #B22234;
}
}
.order_popup_commodity{
border-bottom:1px solid #E2E2E2 ;
padding-bottom: 40rpx;
}
.order_popup_coupons{
padding:0 26.67rpx;
padding-top: 28rpx;
padding-bottom: 106.67rpx;
}
.order_popup_pay{
padding: 0 26.67rpx;
padding-bottom: 56.67rpx;
.pay_item{
border-bottom: 1px solid #EEEEEE;
padding: 13.33rpx 0;
display: flex;
align-items: center;
font-size: 28rpx;
&:nth-child(4){
border-bottom: none
}
.pay_item_select{
width: 29.33rpx;
height: 29.33rpx;
margin-right: 26rpx;
}
.pay_item_right{
display: flex;
align-items: center;
image{
width: 74.67rpx;
height: 74.67rpx;
margin-right: 28.67rpx;
}
}
}
button{
background: black;
color: white;
height: 88rpx;
line-height: 88rpx;
font-size: 26.67rpx;
font-weight: bold;
margin-top: 33.33rpx;
}
}
.order_popup_points{
padding-bottom: 63.33rpx;
padding-left: 47.33rpx;
padding-top: 34.67rpx;
font-size: 28rpx;
.points_item{
display: flex;
align-items: center;
margin-bottom: 40rpx;
&:last-child{
margin-bottom: 0;
}
image{
width: 29.33rpx;
height: 29.33rpx;
margin-right: 26rpx;
}
}
}
}
// 遮罩层
.mask{
position: fixed;
width: 100%;
height: 100%;
background-color: black;
opacity: 0.5;
z-index: 998;
top: 0;
left: 0;
}
.wishlist_body{
position: relative;
}
.wishlist{
padding: 0 26.67rpx;
display: flex;
// justify-content: space-between;
flex-wrap: wrap;
.wishlist_item{
display: flex;
flex-direction: column;
font-size: 25.33rpx;
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;
height: 220rpx;
margin-bottom: 25.33rpx;
background-color: #999999;
position: relative;
.wishlist_item_img_goods{
width: 100%;
height: 100%;
}
.select{
position: absolute;
width: 28rpx;
height: 28rpx;
top: 8rpx;
right: 8rpx;
}
}
.wishlist_item_bottom{
display: flex;
align-items: center;
padding-left: 22.67rpx;
justify-content: space-between;
.wishlist_item_bottom_icon{
width: 30rpx;
height: 30rpx;
}
}
}
}
.wishlist_foot{
padding: 33.33rpx 26.67rpx;
position: fixed;
bottom: 0;
width: 100%;
border-top: 1px solid #F5F6FA;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
.wishlist_foot_left{
font-size: 36rpx;
font-weight: 400;
display: flex;
justify-content: space-between;
align-items: center;
image{
width: 36rpx;
height: 36rpx;
margin-right: 9.33rpx;
}
}
.wishlist_foot_right{
width: 164rpx;
height: 73.33rpx;
font-weight: bold;
button{
font-size: 26.67rpx;
line-height: 73.33rpx;
width: 100%;
height: 100%;
background-color: #C0C0C0;
color: #FFFFFF;
border: none;
border-radius: 0;
}
.wishlist_foot_right_button{
background-color: black !important;
}
}
}
// 推荐
.recommend{
padding: 0 26.67rpx;
padding-top: 54rpx;
.recommend_title{
position: relative;
text-align: center;
font-size: 29.33rpx;
font-weight: bold;
margin-bottom: 64rpx;
&::after{
content: "";
position: absolute;
bottom: -13.33rpx;
width: 53.33rpx;
height: 4rpx;
background-color: black;
left: 50%;
margin-left: -26rpx;
}
}
.recommend_content{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
font-size: 29.33rpx;
font-weight: 400;
.recommend_content_item{
width: 340rpx;
margin-bottom: 46.67rpx;
.recommend_content_item_image{
width: 100%;
height:340rpx ;
background-color: #999999;
margin-bottom: 37.33rpx;
.recommend_content_item_image_name{
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
image{
width: 100%;
height: 100%;
}
}
.recommend_content_item_pric{
font-size: 32rpx;
font-weight: bold;
margin-top: 34rpx;
}
}
}
}
// 优惠卷
.coupons_item{
display: flex;
background-color: #FEF6F4;
height: 186.67rpx;
color: #F66C46;
margin-bottom: 25.33rpx;
.coupons_item_left{
width: 216.67rpx;
height: 100%;
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 20rpx;
font-weight: 400;
&:before{
content: "";
background-color: white;
z-index: 99;
position: absolute;
right: -15rpx;
top: 0;
width: 30rpx;
height: 20rpx;
border-radius: 0 0 15rpx 15rpx;
}
&:after{
content: "";
background-color: white;
z-index: 99;
position: absolute;
right: -15rpx;
bottom: 0;
width: 30rpx;
height: 20rpx;
border-radius: 15rpx 15rpx 0 0;
}
.item_left_prcie{
font-weight: bold;
font-size: 40rpx;
// margin-bottom: 13.33rpx;
}
.item_left_span{
text-align: center;
}
}
.coupons_item_right{
width: 480.67rpx;
height: 100%;
font-size: 20rpx;
font-weight: 400;
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
padding-left: 36rpx;
padding-right: 23.33rpx;
&:before{
content: "";
z-index: 99;
position: absolute;
left: -5rpx;
height: 120rpx;
border: dashed #F66C46 1rpx;
}
.coupons_item_right_select{
width: 34.67rpx;
height: 34.67rpx;
position: absolute;
top: 12.67rpx;
right: 15.33rpx;
}
.coupons_item_right_bg{
width: 82.67rpx;
height: 60.67rpx;
position: absolute;
top: 0;
right:116.67rpx;
}
.coupons_right_info{
.coupons_right_info_title{
font-size: 32rpx;
font-weight: bold;
}
.coupons_right_info_time{
font-size: 16rpx;
margin-top: 13.33rpx;
}
}
button{
background: none;
border-radius: 0;
margin: 0;
border: #F66C46 1px solid;
font-size: 25.33rpx;
height: 39.33rpx;
line-height: 39.33rpx;
color: #F66C46;
font-weight: bold;
white-space:nowrap;
padding:0 10rpx;
box-sizing: content-box;
overflow: inherit;
&::after{
content: none;
}
}
}
}
.login{
padding: 0 32rpx;
.login_input{
height: 97.33rpx;
border: 1px solid #323333;
border-radius: 48.67rpx;
font-size: 22.67rpx;
padding-left: 33.33rpx;
margin-bottom: 56rpx;
}
.tips{
color: #DA0303;
font-size: 18.67rpx;
font-weight: bold;
}
.forgot{
font-size: 22.67rpx;
color: #666666;
margin-top: 29.33rpx;
text-align: right;
margin-bottom: 34.67rpx;
}
.login_submit{
width: 100%;
height: 88rpx;
line-height: 88rpx;
background-color: #000000;
color: white;
// background-color: #e7e7e7;
// color: #666666;
border-radius: 6.67rpx;
margin-bottom: 52rpx;
font-weight: bold;
}
.login_submit1{
background-color: #000000;
color: white;
}
.agreement{
display: flex;
// align-items: center;
// padding: 0 33.33rpx;
font-size: 24rpx;
font-weight: bold;
.agreement_image{
width: 24rpx;
height: 24rpx;
margin-right: 13.33rpx;
padding-top: 4rpx;
}
.text{
color: #4F92F1;
display: inline-block;
margin: 0 4px;
}
}
}
// 商品展示
.good_info{
padding: 40rpx 0;
font-size: 22.67rpx;
color: #666666;
font-weight: bold;
border-bottom: 2.67rpx solid #F1F1F1;
&:last-child{
border-bottom: none;
}
.good_info_left{
display: flex;
align-items: center;
.good_info_image{
width: 200rpx ;
height: 200rpx;
background-color: #999999;
margin-right: 32.67rpx;
image{
width: 100%;
height: 100%;
}
}
.left_info{
.info_name{
font-size: 26.67rpx;
font-weight: 400;
width: 461.33rpx;
text-overflow: -o-ellipsis-lastline;
overflow: hidden; //溢出内容隐藏
text-overflow: ellipsis; //文本溢出部分用省略号表示
display: -webkit-box; //特别显示模式
-webkit-line-clamp: 2; //行数
line-clamp: 2;
-webkit-box-orient: vertical;
}
.left_info_bottom{
display: flex;
align-items: center;
justify-content: space-between;
font-size: 32rpx;
color: #909090;
margin-top: 24rpx;
.info_lable{
padding: 5.33rpx 20rpx;
font-size: 22.67rpx;
border-radius: 33.33rpx;
border: 1px solid #D3D3D3;
image{
width: 17.33rpx;
height: 17.33rpx;
margin-left: 14.67rpx;
}
}
}
.info_price{
font-size: 28rpx;
color: black;
font-weight: bold;
margin-top: 43.33rpx;
display: flex;
align-items: center;
justify-content: space-between;
button{
margin: 0;
height: 45.33rpx;
line-height: 45.33rpx;
border: #999999 solid 1px;
font-size: 17.33rpx;
color: #999999;
background: none;
&::after{
content: none;
}
}
}
}
}
}

261
common/scss/order.scss

@ -0,0 +1,261 @@
.order_popup_commodity{
padding:0 26rpx;
}
// 订单详情
.details_title{
height: 176.67rpx;
background-color: #2C2C38;
width: 100%;
color: white;
font-size: 18.67rpx;
font-weight: bold;
border-top: 14.67rpx #F6F5FA solid;
.shipped_right_text{
width: 497.33rpx;
font-size: 33.33rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.cancelled{
padding-left: 55.33rpx;
display: flex;
align-items: center;
height: 100%;
justify-content: space-between;
.cancelled_left{
display: flex;
align-items: center;
image{
width: 61.33rpx;
height: 61.33rpx;
}
.cancelled_left_info{
margin-left: 52.67rpx;
}
}
.cancelled_right{
image{
width: 34.67rpx;
height: 34.67rpx;
}
}
}
.transit{
padding-left: 74.67rpx;
padding-right: 16rpx;
.cancelled_left{
image{
width: 58.67rpx;
height: 58.67rpx;
}
.cancelled_left_info{
margin-left: 49.33rpx;
}
}
}
.completed{
padding-right: 20rpx;
}
.toPaid{
padding:0 31.33rpx;
}
.shipped{
padding-left: 47.33rpx;
display: flex;
align-items: center;
height: 100%;
.shipped_left{
background-image: url("@/static/img/order_bg.png");
background-size: 100% 100%;
width: 114rpx;
height: 158.67rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 30rpx;
image{
width: 62.67rpx;
height: 62.67rpx;
}
}
}
}
.order_popup_commodity{
border-bottom: 14.67rpx solid #F6F5FA;
}
.summary{
border-bottom: 14.67rpx solid #F6F5FA;
padding:0 26rpx;
padding-top: 44rpx;
padding-bottom: 47.33rpx;
font-size: 28rpx;
&:last-child{
border-bottom: none;
}
.summary_title{
font-weight: bold;
margin-bottom: 35.33rpx;
}
.summary_item{
display: flex;
align-items: center;
margin-bottom: 41.33rpx;
justify-content: space-between;
width: 100%;
&:last-child{
margin-bottom: 0;
}
.summary_item_text{
color: #777777;
}
.summary_item_text1{
color: #3C3B6E;
}
.summary_item_right{
color: #3C3B6E;
display: flex;
align-items: center;
button{
font-size: 20rpx;
color: black;
height: 28.67rpx;
border-radius: 0;
padding:0 15rpx;
line-height: 28.67rpx;
background:none;
margin-left: 15.33rpx;
}
}
.summary_item_right1{
color: #B22234;
}
}
.summary_tips{
display: flex;
align-items: center;
justify-content: flex-end;
color: #B22234;
font-size: 24rpx;
font-weight: 400;
image{
width: 28rpx;
height: 28rpx;
margin-right: 13.33rpx;
}
}
}
.details_footer{
padding: 34rpx 26rpx;
background-color: white;
display: flex;
align-items: center;
justify-content: flex-end;
position: fixed;
bottom: 0;
width: 100%;
box-sizing: border-box;
button{
height: 62.67rpx;
line-height:62.67rpx;
border-radius: 0;
margin: 0;
margin-left: 18rpx;
background-color: white;
border: none;
font-size: 22.67rpx;
&::after{
content: none;
}
}
.black{
color: white;
background-color: black;
}
.white{
border: 1px solid #666666;
color: #666666;
}
}
// 进度条
.logistics_details{
border-top: 14.67rpx #F6F5FA solid;
padding-left: 28rpx;
padding-right: 24rpx;
padding-top: 64rpx;
.logistics_step{
color: #999999;
font-size: 26.67rpx;
font-weight: 400;
padding-bottom: 74rpx;
padding-left: 33.33rpx;
position: relative;
&:before{
content: "";
width: 17.33rpx;
height: 17.33rpx;
background-color: #EDEDED;
position: absolute;
left: 0;
top: 0;
border-radius: 50%;
z-index: 99;
}
&::after{
content: "";
width: 1px;
height: 95%;
background-color: #EDEDED;
position: absolute;
left: 9.5rpx;
bottom: 0;
border-radius: 50%;
}
&:last-child{
&::after{
content: none;
}
}
.logistics_step_time{
font-size: 22rpx;
margin-top: 13.33rpx;
}
}
}
.step_active{
color: #333333 !important;
&:before{
background-color:#333333 !important;
}
}
.step_active1{
&::after{
background-color: #333333 !important;
}
}

5
config.js

@ -0,0 +1,5 @@
var weburl='en.meixx.com';
export default {
apiUri: 'https://'+weburl+'/',
imgUri: 'http://'+weburl+'/',
}

20
index.html

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
</body>
</html>

21
main.js

@ -0,0 +1,21 @@
import App from './App'
// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif

122
manifest.json

@ -0,0 +1,122 @@
{
"name" : "DOPE PLUS",
"appid" : "__UNI__C0E0831",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* */
"modules" : {
"Payment" : {}
},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios" : {},
/* SDK */
"sdkConfigs" : {
"ad" : {},
"payment" : {
"alipay" : {
"__platform__" : [ "ios", "android" ]
}
}
},
"splashscreen" : {
"androidStyle" : "default",
"android" : {
"hdpi" : "unpackage/res/icons/480_8001.9.png",
"xhdpi" : "unpackage/res/icons/720_1242.9.png",
"xxhdpi" : "unpackage/res/icons/1080_1882.9.png"
},
"useOriginalMsgbox" : false
},
"icons" : {
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
},
"ios" : {
"appstore" : "unpackage/res/icons/1024x1024.png",
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
}
}
}
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "2"
}

35
package-lock.json

@ -0,0 +1,35 @@
{
"name": "cnic_buyer",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"dependencies": {
"base-64": "^1.0.0",
"crypto-js": "^4.1.1"
}
},
"node_modules/base-64": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
"integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
},
"node_modules/crypto-js": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
}
},
"dependencies": {
"base-64": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
"integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
},
"crypto-js": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
"integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
}
}
}

6
package.json

@ -0,0 +1,6 @@
{
"dependencies": {
"base-64": "^1.0.0",
"crypto-js": "^4.1.1"
}
}

283
pages.json

@ -0,0 +1,283 @@
{
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "uni-app",
"app-plus":{
"titleNView":false
}
}
},
{
"path": "pages/index/search",
"style": {
"app-plus":{
"titleNView":false
}
}
},
{
"path": "pages/category/index",
"style": {
"app-plus":{
"titleNView":false
}
}
},
{
"path": "pages/account/index",
"style": {
"app-plus":{
"titleNView":false
}
}
},
{
"path": "pages/account/myProfile",
"style": {
"navigationBarTitleText": "My Profile",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/account/settings",
"style": {
"navigationBarTitleText": "Settings",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/account/wishlist",
"style": {
"titleNView":false
}
},
{
"path": "pages/account/favorites",
"style": {
"titleNView":false
}
},
{
"path": "pages/account/message",
"style": {
"titleNView":false
}
},
{
"path": "pages/login/index",
"style": {
"titleNView":false
}
},
{
"path": "pages/login/verifyEmail",
"style": {
"navigationBarTitleText": "Verify Email Address",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/login/changePwd",
"style": {
"navigationBarTitleText": "Change Password",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/account/myOrders",
"style": {
"navigationBarTitleText": "My orders",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/order/confirmation",
"style": {
"navigationBarTitleText": "0rder Confirmation",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/account/myCoupons",
"style": {
"titleNView":false
}
},
{
"path": "pages/index/pickUpCentre",
"style": {
"titleNView":false
}
},
{
"path": "pages/order/paySuccess",
"style": {
"navigationBarTitleText": "Pay success",
"navigationBarBackgroundColor":"#FFFFFF",
"enablePullDownRefresh":true
}
},
{
"path": "pages/account/address",
"style": {
"navigationBarTitleText": "Shipping Address",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/account/addAddress",
"style": {
"navigationBarTitleText": "Shipping Address",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/account/pointsDetails",
"style": {
"titleNView":false,
"enablePullDownRefresh":true
}
},
{
"path": "pages/order/details",
"style": {
"navigationBarTitleText": "Order details",
"navigationBarBackgroundColor":"#FFFFFF"
// "app-plus": {
// "titleNView": {
// "splitLine":{
// "color":"#F6F5FA",
// "height":"5px"
// }
// }
// }
}
},
{
"path": "pages/order/logisticsDetails",
"style": {
"navigationBarTitleText": "Logistics details",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/order/refund",
"style": {
"navigationBarTitleText": "Refund",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/order/refundDetails",
"style": {
"navigationBarTitleText": "Refund Details",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
// {
// "path": "pages/category/productList",
// "style": {
// "titleNView":false,
// "enablePullDownRefresh":true
// }
// },
{
"path": "pages/shippingCart/index",
"style": {
"titleNView":false,
"enablePullDownRefresh":true
}
},
{
"path": "pages/productDetails/index",
"style": {
"titleNView":false
}
},
{
"path": "pages/account/myReview",
"style": {
"navigationBarTitleText": "My Review",
"navigationBarBackgroundColor":"#FFFFFF"
}
},
{
"path": "pages/productDetails/review",
"style": {
"titleNView":false
}
},
{
"path": "pages/index/flashSale",
"style": {
"titleNView":false
}
}
,{
"path" : "pages/category/pets",
"style" :
{
"navigationBarTitleText": "",
"navigationStyle":"custom",
"enablePullDownRefresh": true
}
},
{
"path" : "pages/account/changeImg",
"style" :
{
"navigationStyle":"custom",
"enablePullDownRefresh": false
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "DOPE PLUS",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"borderStyle": "black",
"backgroundColor": "#FFFFFF",
"color": "#999999",
"selectedColor": "#000000",
"height":"60px",
"midButton":{
"width": "80px",
"height":"70px",
"iconWidth":"60px",
"iconPath":"static/img/tabbar_img.png"
},
"list": [{
"pagePath": "pages/index/index",
"iconPath": "static/img/home.png",
"selectedIconPath": "static/img/home1.png",
"text": "Home"
},
{
"pagePath": "pages/category/index",
"iconPath": "static/img/Category.png",
"selectedIconPath": "static/img/Category1.png",
"text": "Category"
},
{
"pagePath": "pages/shippingCart/index",
"iconPath": "static/img/Cart.png",
"selectedIconPath": "static/img/cart1.png",
"text": "Cart"
},
{
"pagePath": "pages/account/index",
"iconPath": "static/img/Account.png",
"selectedIconPath": "static/img/Account1.png",
"text": "Account"
}
]
}
}

453
pages/account/addAddress.vue

@ -0,0 +1,453 @@
<template>
<view>
<view class="address_serch">
<input type="text" placeholder="ADDRESS FINDER:Search by postcode">
</view>
<view class="address_info">
<view class="address_info_item address_info_item1">
<view class="info_item_title" >
<picker @change="bindPickerChange" :value="index" :range="countryList" range-key="region_name" class="info_item_title_pick">
<text>*Country/Region</text>
<view class="info_item_title_span">{{countryText}}</view>
</picker>
<image src="../../static/img/right1.png" mode=""></image>
</view>
</view>
<view class="address_info_item">
<view class="info_item_title">
<view>
<text>*Fall name</text>
</view>
</view>
<view class="info_item_input">
<input type="text" v-model="query.consignee.consignee">
</view>
</view>
<view class="address_info_item">
<view class="info_item_title">
<view>
<text>*Phone Number</text>
</view>
</view>
<view class="info_item_input">
<input type="number" v-model="query.consignee.mobile">
</view>
</view>
<view class="address_info_item">
<view class="info_item_title">
<view>
<text>*Stree adderss or P.O.Box</text>
</view>
</view>
<view class="info_item_input">
<input type="text" v-model="address">
</view>
</view>
<view class="address_info_item">
<view class="info_item_title">
<view>
<text>*Appartment,suite,unit,etc.</text>
</view>
</view>
<view class="info_item_input">
<input type="text" v-model="query.consignee.sign_building">
</view>
</view>
<view class="address_info_item address_info_item1">
<view class="info_item_title" v-if="isSelect1">
<picker @change="bindPickerChange2" :value="cityIndex" :range="cityList" range-key="region_name" class="info_item_title_pick">
<text >*City/Town</text>
<view class="info_item_title_span">{{cityText}}</view>
</picker>
<image src="../../static/img/right1.png" mode=""></image>
</view>
<template v-else>
<view class="info_item_title" >
<text >*City/Town</text>
</view>
<view class="info_item_input">
<input type="text" v-model="city">
</view>
</template>
<!-- <view class="info_item_title">
<view>
<text>*City/Town</text>
</view>
</view>
<view class="info_item_input">
<input type="text" v-model="city">
</view> -->
</view>
</view>
<view class="address_info">
<view class="address_info_item address_info_item1">
<view class="info_item_title" v-if="isSelect">
<picker @change="bindPickerChange1" :value="provinceIndex" :range="provinceList" range-key="region_name" class="info_item_title_pick">
<text >State/Province</text>
<view class="info_item_title_span">{{provinceText}}</view>
</picker>
<image src="../../static/img/right1.png" mode=""></image>
</view>
<template v-else>
<view class="info_item_title" >
<text >State/Province</text>
</view>
<view class="info_item_input">
<input type="text" v-model="province">
</view>
</template>
</view>
<view class="address_info_item">
<view class="info_item_title">
<view>
<text>Zip code/Postcode/PLZ/Eircode</text>
</view>
</view>
<view class="info_item_input">
<input type="text" v-model="query.consignee.zipcode">
</view>
</view>
</view>
<view class="address_switch">
<text>Make this my default address</text>
<switch :checked="query.is_default==1" color="#B22234" @change="isDefault"/>
</view>
<view class="address_submit">
<button @click="save">FINISH</button>
</view>
</view>
</template>
<script>
import {defaultRequest2,defaultRequest3} from '../../api/index.js'
export default {
data() {
return {
isSelect:false,
isSelect1:false,
countryList:[],
index:0,
countryText:'',
provinceList:[],
provinceIndex:0,
provinceText:'',
cityList:[],
cityIndex:0,
cityText:'',
query:{
_action:'saveconsignee',
consignee:{
address_id:0,
consignee:'',
country:0,
province:0,
city:0,
district:0,
address:'',
zipcode:'',
email:'',
tel:'',
mobile:'',
sign_building:'',
best_time:''
},
is_default:0
},
province:'',
city:'',
address:''
}
},
methods:{
//
save(){
if(this.query.consignee.consignee==''){
uni.showToast({
icon:'none',
title:'Please fill Fall name'
})
return
}
if(this.query.consignee.mobile==''){
uni.showToast({
icon:'none',
title:'Please fill Phone Number'
})
return
}
if(this.address==''){
uni.showToast({
icon:'none',
title:'Please fill Stree adderss or P.O.Box'
})
return
}
if(this.query.consignee.sign_building==''){
uni.showToast({
icon:'none',
title:'Please fill Appartment,suite,unit,etc.'
})
return
}
if(!this.isSelect1){
if(this.city==''){
uni.showToast({
icon:'none',
title:'Please fill in City/Town'
})
return
}
this.query.consignee.address=this.city+this.address
}else{
if(this.query.consignee.city==0){
uni.showToast({
icon:'none',
title:'Please Select City/Town'
})
return
}
}
if(!this.isSelect){
if(this.province==''){
uni.showToast({
icon:'none',
title:'Please fill in State/Province'
})
return
}
this.query.consignee.address=this.province+this.query.consignee.address
}else{
if(this.query.consignee.province==0){
uni.showToast({
icon:'none',
title:'Please Select State/Province'
})
return
}
}
if(this.query.consignee.zipcode==''){
uni.showToast({
icon:'none',
title:'Please fill Zip code/Postcode/PLZ/Eircode'
})
return
}
console.info(this.query)
defaultRequest3(this.query,'consignee').then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
icon:'none',
title:res.message
})
uni.navigateBack()
}
this.query.consignee.address=''
})
},
//
isDefault(e){
console.info(e)
if(e.detail.value){
this.query.is_default=1
}else{
this.query.is_default=0
}
},
//
getCountry(){
let data={_action:'getregions',parent_region_id:0}
defaultRequest2(data).then(res=>{
// console.info(res)
if(res.error==0){
this.countryList=res.data
}
})
},
//
bindPickerChange(e){
if(this.index!=e.detail.value){
this.provinceText=''
this.cityText=''
this.query.consignee.city=0
this.query.consignee.province=0
}
this.index=e.detail.value
if(this.countryList[this.index].regions){
this.isSelect=true
this.provinceList=this.countryList[this.index].regions
}else{
this.isSelect=false
this.isSelect1=false
}
this.query.consignee.country=this.countryList[this.index].region_id
this.countryText=this.countryList[this.index].region_name
},
//
bindPickerChange1(e){
if(this.provinceIndex!=e.detail.value){
this.cityText=''
this.query.consignee.city=0
}
this.provinceIndex=e.detail.value
if(this.provinceList[this.provinceIndex].regions){
this.isSelect1=true
this.cityList=this.provinceList[this.provinceIndex].regions
}else{
this.isSelect1=false
this.cityText=''
}
this.query.consignee.province=this.provinceList[this.provinceIndex].region_id
this.provinceText=this.provinceList[this.provinceIndex].region_name
},
//
bindPickerChange2(e){
this.cityIndex=e.detail.value
this.query.consignee.city=this.cityList[this.cityIndex].region_id
this.cityText=this.cityList[this.cityIndex].region_name
}
},
onLoad(e) {
console.info(e)
if(e.type==1){
e.data=JSON.parse(e.data)
this.query.consignee=e.data
this.address=this.query.consignee.address
if(e.data.default_address_id==e.data.address_id){
this.query.is_default=1
}
this.countryText=e.data.country_name
if(e.data.city!=0){
this.isSelect1=true
this.cityText=e.data.city_name
}else{
}
if(e.data.province!=0){
this.isSelect=true
this.provinceText=e.data.province_name
}
}
this.getCountry()
}
}
</script>
<style>
page{
background-color: #F6F5FA;
padding-bottom: 20rpx;
}
</style>
<style lang="scss" scoped>
.address_serch{
background-color: white;
padding: 26.67rpx 24rpx;
margin-top: 14.67rpx;
input{
font-size: 22.67rpx;
font-weight: 400;
border: 1px solid #E2E2E2;
padding: 23.33rpx 0;
padding-left: 64.67rpx;
position: relative;
&:before{
content: "";
background-image: url("@/static/img/address1.png");
background-size: 100% 100%;
width: 29.33rpx;
height: 29.33rpx;
position: absolute;
left: 20.67rpx;
}
}
}
.address_info{
background-color: white;
padding: 0 26.67rpx;
margin-top: 14.67rpx;
.address_info_item{
padding-top: 42.67rpx;
border-bottom: 1px solid #E2E2E2;
&:last-child{
border-bottom: none;
}
.info_item_title{
font-size: 24rpx;
color: #888888;
display: flex;
justify-content: space-between;
align-items: center;
font-weight: bold;
margin-bottom: 10rpx;
.info_item_title_pick{
width: 100%;
}
.info_item_title_span{
color: black;
margin-top: 15.33rpx;
}
image{
width: 25.33rpx;
height: 25.33rpx;
}
}
.info_item_input{
input{
font-size: 24rpx;
padding-left: 10rpx;
}
}
}
.address_info_item1{
padding-top: 32.67rpx;
padding-bottom: 27.33rpx;
}
}
.address_switch{
margin-top: 14.67rpx;
background-color: white;
padding: 17.33rpx 0;
padding-left: 32rpx;
padding-right: 52.67rpx;
font-size: 24rpx;
font-weight: bold;
display: flex;
align-items: center;
justify-content: space-between;
}
.address_submit{
padding: 0 32rpx;
margin-top: 112rpx;
button{
background-color: black;
color: white;
font-size: 26.67rpx;
margin: 0;
font-weight: bold;
height: 88rpx;
line-height: 88rpx;
}
}
</style>

197
pages/account/address.vue

@ -0,0 +1,197 @@
<template>
<view>
<view class="address_item" v-for="(item,index) in list" :key="index" @click="selectAddress(item)">
<view class="address_info">
<view class="address_info_title">
<view class="info_title_span">{{item.consignee}}</view>
<text>{{item.mobile}}</text>
</view>
<view class="address_info_content">
<view class="info_content_left">
<view>{{item.sign_building}} </view>
<text>{{item.country_name}} {{item.province_name}} {{item.city_name}} {{item.address}} {{item.mobile}}</text>
</view>
<image src="../../static/img/update.png" mode="" @click.stop="updateAddress(item)"></image>
</view>
</view>
<view class="address_default">
<view class="address_default_left">
<image src="../../static/img/select4.png" mode="" v-if="item.default_address_id==item.address_id"></image>
<image src="../../static/img/select2.png" mode="" v-else @click.stop="setDefault(item.address_id)"></image>
<text>Default address</text>
</view>
<text @click.stop="deleteAddress(item.address_id)">Delete</text>
</view>
</view>
<view class="address_foot">
<navigator url="/pages/account/addAddress" >
<button>ADD ADDRESS</button>
</navigator>
</view>
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="Close" confirmText="Delete" title="Tips" content="Whether to delete the address?"
@confirm="dialogConfirm" ></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
list:[],
address_id:'',
type:0
}
},
methods:{
//
selectAddress(item){
if(this.type==1){
uni.$emit('query' , {consignee : item,type:'address'});
uni.navigateBack()
}
},
//
updateAddress(item){
uni.navigateTo({
url:'./addAddress?type=1&data='+JSON.stringify(item)
})
},
//
deleteAddress(id){
this.address_id=id
this.$refs.alertDialog.open()
},
dialogConfirm(){
let data={_action:'dropconsignee',address_id:this.address_id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
icon:'none',
title:res.message
})
this.getList()
}
})
},
//
setDefault(id){
let data={_action:'setdefaultconsignee',address_id:id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
this.getList()
}
})
},
getList(){
let data={_action:'getconsignees'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
this.list=res.data
}
})
}
},
onShow() {
this.getList()
},
onLoad(e) {
if(e.type==1){
this.type=1
}
}
}
</script>
<style>
page{
background-color: #F6F5FA;
padding-bottom: 160rpx;
}
</style>
<style lang="scss" scoped>
.address_foot{
padding: 42rpx 24rpx;
background-color: white;
border-top: #E2E2E2 solid 1px;
position: fixed;
bottom: 0;
width: 100%;
box-sizing: border-box;
button{
color: white;
background-color: black;
font-size: 26.67rpx;
font-weight: bold;
margin: 0;
}
}
.address_item{
margin-top: 17.33rpx;
width: 100%;
background-color: white;
padding-top: 32rpx;
font-size: 24rpx;
color: #666666;
font-weight: bold;
.address_info{
padding: 0 26.67rpx;
padding-bottom: 33.33rpx;
border-bottom: 1px solid #E2E2E2;
.address_info_title{
display: flex;
align-items: center;
margin-bottom: 37.33rpx;
.info_title_span{
font-size: 28rpx;
color: black;
margin-right: 38.67rpx;
}
}
.address_info_content{
display: flex;
align-items: center;
width: 100%;
.info_content_left{
padding-right: 38.67rpx;
margin-right: 34rpx;
min-width: 80%;
border-right: 1px solid #E2E2E2;
}
image{
width: 34.67rpx;
height: 34.67rpx;
}
}
}
.address_default{
padding: 29.33rpx 0;
padding-left: 26.67rpx;
padding-right: 52.67rpx;
display: flex;
align-items: center;
justify-content: space-between;
.address_default_left{
display: flex;
align-items: center;
image{
width: 25.33rpx;
height: 25.33rpx;
margin-right: 13.33rpx;
}
}
}
}
</style>

165
pages/account/changeImg.vue

@ -0,0 +1,165 @@
<template>
<view>
<view class="foot fixed">
<uni-section title="左侧文字+右侧文字" subTitle="使用 left-text/right-text 设置左右文字" type="line"
style="margin-bottom: 3px;">
<view class="box-bg">
<uni-nav-bar border="false" title="" >
<block slot="left">
<!-- <view ><uni-icons type="back" size="30"></uni-icons></view> -->
<view class="icon-all"><image class="imgsize"src='../../static/icon/left.png'/></view>
</block>
<block slot="right">
<view class="text-bg" @click="Sub()">submit</view>
</block>
</uni-nav-bar>
</view>
</uni-section>
</view>
<view class="detail">
<view class="contain" v-for="(item,index) in imglist" :key="index">
<!-- <view class="icon imgsize" :style="{backgroundImage :'url(' + item +')'}"></view> -->
<view class="icon" @click="tabActive(index,item)">
<image class="imgsize":src="item"></image>
<radio class="main-icon-radio" v-show="current>0" :checked="index == current?true:false" />
</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
current:-1,
active_img:'',
query:{
_action:'getinfo'
},
query2:{
_action:'updateinfo',
nickname:'',
sex:'',
birthday:'',
user_head:'',
email:''
},
imglist:[]
}
},
onLoad() {
this.getimglist()
},
methods: {
getimglist(){
defaultRequest(this.query).then(res =>
{
// console.log(res.data.headicons,'')
this.imglist = res.data.headicons
console.log(res.data)
this.query2.nickname = res.data.nickname
// for(let i of this.imglist)
// console.log(i)
})
},
tabActive(index,item){
this.current = index
console.log(index)
this.active_img = item
},
//
Sub(){
console.log( this.active_img,'选择的图片')
this.query2.user_head = this.active_img;
defaultRequest(this.query2).then( res => {
console.log(res,'yyyy')
if(res.error==0){
uni.showToast({
title:'succuss',
duration: 2000,
icon:'none'
})
uni.navigateBack({
delta:1
})
}
})
},
}
}
</script>
<style>
.foot{
height:120rpx;
width: 100vw;
padding:50rpx 0 0 0;
background-color: #fff;
position: fixed;
}
.fixed{
position: fixed;
z-index: 99;
}
.icon-all{
height: 30rpx;
width:30rpx ;
}
.detail{
display: flex;
flex-wrap: wrap;
margin:10rpx 50rpx 10rpx 50rpx;
padding: 100rpx 0;
background-color: #fff;
}
.text-bg{
background-color: black;
color: aliceblue;
padding: 6rpx 10rpx;
border-radius: 15rpx;
}
.contain{
width: 180rpx;
height: 160rpx;
display: flex;
flex-direction: column;
margin: 50rpx 10rpx 10rpx 10rpx;
padding: 10rpx;
position: relative;
justify-content: center;
align-items: center;
}
.icon{
height: 160rpx;
width:160rpx;
margin: 12rpx;
display: flex;
justify-content: flex-end;
position: absolute;
align-items: center;
}
.imgsize{
width: 100%;
height: 100%;
}
.main-icon-radio {
position: absolute;
z-index: 9;
margin-top: 110rpx;
margin-left: 20rpx;
}
</style>

129
pages/account/favorites.vue

@ -0,0 +1,129 @@
<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="$refs.alertDialog.open()"/>
<view class="wishlist">
<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${{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>
<view class="wishlist_foot" v-show="isDelete">
<view class="wishlist_foot_left">
<image src="../../static/img/select2.png" mode=""></image>
<text>All</text>
</view>
<view class="wishlist_foot_right">
<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,
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>
<style lang="scss" scoped>
page{
}
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
.wishlist_item_bottom{
width: 220rpx;
box-sizing: border-box;
}
</style>

304
pages/account/index.vue

@ -0,0 +1,304 @@
<template>
<view>
<view class="status_bar"></view>
<view class="account_info">
<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,{{user_info.nickname!=''?user_info.nickname:user_info.email}}>
</navigator>
</view>
<view class="info_like">
<navigator url="/pages/account/myCoupons" class="info_like_item">
<text class="info_like_item_img">6</text>
<text class="info_like_item_span">Coupons</text>
</navigator>
<navigator url="/pages/account/pointsDetails" class="info_like_item">
<text class="info_like_item_img">25</text>
<text class="info_like_item_span">Points</text>
</navigator>
<navigator url="/pages/account/wishlist" class="info_like_item">
<image src="../../static/img/like.png" mode="" class="info_like_item_img"></image>
<text class="info_like_item_span">Wishlist</text>
</navigator>
<navigator url="/pages/account/favorites" class="info_like_item">
<image src="../../static/img/favorites.png" mode="" class="info_like_item_img"></image>
<text class="info_like_item_span">Favorites</text>
</navigator>
</view>
</view>
<view class="order">
<view class="order_title">My Orders</view>
<view class="order_info">
<navigator url="/pages/account/myOrders" class="order_info_item">
<image src="../../static/img/unpaid.png" mode="" class="info_img"></image>
<text>Unpaid</text>
</navigator>
<view class="order_info_item">
<image src="../../static/img/Processing.png" mode="" class="info_img"></image>
<text>Processing</text>
</view>
<view class="order_info_item">
<image src="../../static/img/Shipped.png" class="info_img" mode=""></image>
<text>Shipped</text>
</view>
<view class="order_info_item">
<image src="../../static/img/Returns.png" class="info_img" mode=""></image>
<text>Returns</text>
</view>
</view>
</view>
<view class="order">
<view class="order_title">My Service</view>
<view class="order_info">
<navigator url="/pages/account/message" class="order_info_item">
<image src="../../static/img/msg.png" class="info_img" mode=""></image>
<text>Message</text>
</navigator>
<navigator url="/pages/account/myReview" class="order_info_item">
<image src="../../static/img/My Review.png" class="info_img" mode=""></image>
<text>My Review</text>
</navigator>
<navigator url="/pages/account/address" class="order_info_item">
<image src="../../static/img/My Address.png" class="info_img" mode=""></image>
<text>My Address</text>
</navigator>
<view class="order_info_item">
<image src="../../static/img/Return Policy.png" class="info_img" mode=""></image>
<text>Return Policy</text>
</view>
<view class="order_info_item">
<image src="../../static/img/Help Center.png" class="info_img" mode=""></image>
<text>Help Center</text>
</view>
<view class="order_info_item">
<image src="../../static/img/Attention CHIC.png" class="info_img" mode=""></image>
<text>Attention CHIC</text>
</view>
<view class="order_info_item">
<image src="../../static/img/About CHIC.png" class="info_img" mode=""></image>
<text>About CHIC</text>
</view>
<navigator url="/pages/account/settings" class="order_info_item">
<!-- <view class="order_info_item"> -->
<image src="../../static/img/Setting.png" class="info_img" mode=""></image>
<text>Setting</text>
<!-- </view> -->
</navigator>
</view>
<image src="../../static/img/mine_banner.png" class="mine_banner" mode=""></image>
<view class="order_title">Recommend</view>
<scroll-view class="spike1" scroll-x="true" :show-scrollbar="false">
<view class="spike1_item" v-for="(item,index) in 8" :key="index">
<view class="spike1_item_img"></view>
<view class="spike1_item_bottom1">
<view class="spike1_item_text">Adidas Yeezy Boost 350 DazzlingBlue Black</view>
<text class="spike1_item_text1">US$314.00</text>
</view>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
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')
if(this.user_info){
this.getUserInfo()
}
}
}
</script>
<style lang="scss" scoped>
.account_info{
padding: 0 58rpx;
padding-top: 50rpx;
padding-bottom: 30rpx;
border-bottom: 13.33rpx #F7F7F7 solid;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.header_img{
width: 144rpx;
height: 144rpx;
border-radius: 50%;
margin-bottom: 36.67rpx;
background-color: #F7F7F7;
}
.info_name{
font-size: 36rpx;
font-weight: bold;
margin-bottom: 74.67rpx;
}
.info_like{
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
.info_like_item{
font-size: 40rpx;
font-weight: 400;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.info_like_item_img{
width: 40rpx;
height: 40rpx;
margin-bottom: 14.67rpx;
display: block;
}
.info_like_item_span{
font-size: 21.33rpx;
}
}
}
}
.order{
padding: 0 23.33rpx;
padding-top: 37.33rpx;
padding-bottom: 43.33rpx;
border-bottom: 13.33rpx #F7F7F7 solid;
.order_title{
font-size: 26.67rpx;
font-weight: bold;
}
.order_info{
width: 100%;
// padding: 0 35.33rpx;
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
flex-wrap: wrap;
.order_info_item{
width: 25%;
font-size: 21.33rpx;
font-weight: 400;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-top: 38.67rpx;
}
.info_img{
width: 40rpx;
height: 40rpx;
margin-bottom: 20rpx;
}
}
.mine_banner{
width: 100%;
height: 226.67rpx;
margin: 56rpx 0;
}
.spike1{
white-space: nowrap;
width: 100%;
margin-top: 46.67rpx;
::-webkit-scrollbar {
width: 0;
height: 0;
background-color: transparent;
}
.spike1_item{
color: #191919;
font-size: 24.67rpx;
margin-right: 16.67rpx;
width: 286.67rpx;
display: inline-block;
font-weight: 400;
.spike1_item_img{
width: 286.67rpx;
height: 286.67rpx;
background-color: #999999;
}
.spike1_item_bottom{
padding-left: 9.33rpx;
margin-top: 22.67rpx;
.spike1_item_text{
color: #9D9D9D;
font-size: 21.33rpx;
text-decoration: line-through;
}
.spike1_item_text1{
// color: #9D9D9D;
font-size: 27.33rpx !important;
font-weight: bold !important;
}
}
.spike1_item_bottom1{
padding-left: 9.33rpx;
margin-top: 19.33rpx;
font-weight: bold;
.spike1_item_text{
color: #000000;
font-size: 16rpx;
font-weight: 400;
margin-bottom: 20.67rpx;
white-space: break-spaces;
}
}
}
.spike1_item:last-child{
margin-right: 0;
}
}
}
</style>

103
pages/account/message.vue

@ -0,0 +1,103 @@
<template>
<view>
<uni-nav-bar left-icon="left" :statusBar="true" title="Message"
color="#000000" rightIcon="info" @clickLeft="back" @clickRight="isDelete=!isDelete" :border="false"/>
<view class="body">
<view class="msg_item" v-for="(item,index) in list" :key="index">
<view class="msg_time">{{item.start_time}}~{{item.end_time}}</view>
<view class="msg_title">{{item.act_name}}</view>
<view class="msg_content">{{item.act_range}}</view>
<!-- <view class="msg_img"></view> -->
</view>
<!-- <view class="msg_item">
<view class="msg_time">21/04/2022 14:42:31</view>
<view class="msg_title">Message heading</view>
<view class="msg_content">
estimated to be deliverd on estimated to be deliverd on estim
ated to be deliverd on estimated to be deliverd on
</view>
</view>
<view class="msg_item">
<view class="msg_time">21/04/2022 14:42:31</view>
<view class="msg_title">Message heading</view>
<view class="msg_content">
estimated to be deliverd on estimated to be deliverd on estim
ated to be deliverd on estimated to be deliverd on
</view>
<view class="msg_img"></view>
</view> -->
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
list:[]
}
},
methods:{
getList(){
let data={_action:'getfavourableactivities'}
defaultRequest(data).then(res=>{
console.info(res)
if(res.error==0){
this.list=res.data
}
})
},
back(){
uni.navigateBack()
}
},
onLoad() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
.body{
border-top: 13.33rpx #F7F7F7 solid;
padding:0 26.67rpx;
}
.msg_item{
padding-top: 42.67rpx;
padding-bottom: 28rpx;
border-bottom: 1px solid #E2E2E2;
.msg_time{
font-size: 25.33rpx;
font-weight: 400;
text-align: center;
margin-bottom: 41.33rpx;
}
.msg_title{
font-size: 28rpx;
margin-bottom: 20rpx;
}
.msg_content{
color: #555555;
font-size: 25.33rpx;
font-weight: 400;
}
.msg_img{
margin-top: 37.33rpx;
background-color: #FEF6F4;
width: 100%;
height: 281.33rpx;
}
}
.msg_item:last-child{
border-bottom: none;
}
</style>

67
pages/account/myCoupons.vue

@ -0,0 +1,67 @@
<template>
<view>
<uni-nav-bar left-icon="left" :statusBar="true" title="My Coupons" color="#000000" rightIcon="info" @clickLeft="back" @clickRight="goPage" :border="false"/>
<view class="body">
<view class="coupons_item" v-for="(item,index) in list " :key="item.bonus_id">
<view class="coupons_item_left">
<view class="item_left_prcie">${{item.type_money}}</view>
<text class="item_left_span">Min.spend</text>
<view>${{item.min_goods_amount}}</view>
</view>
<view class="coupons_item_right">
<view class="coupons_right_info">
<view class="coupons_right_info_title">{{item.type_name}}</view>
<text>The tide zone is available</text>
<view class="coupons_right_info_time">{{item.use_start_date}} - {{item.use_end_date}}</view>
</view>
<button>Use Now</button>
</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
list:[]
}
},
methods:{
getList(){
let data={_action:'getuserbonus'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
this.list=res.data
}
})
},
back(){
uni.navigateBack()
},
goPage(){
uni.navigateTo({
url:"/pages/index/pickUpCentre"
})
}
},
onShow() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
.body{
border-top: 14.67rpx #F7F7F7 solid;
padding:0 26rpx;
padding-top: 31.33rpx;
}
</style>

874
pages/account/myOrders.vue

@ -0,0 +1,874 @@
<template>
<view>
<view class="order_nav">
<scroll-view class="scroll-view_H" scroll-x="true" :show-scrollbar="false">
<view :class="scroll_active==index?'scroll_active':''" v-for="(item,index) in scrollList" @click="scrollChange(index)" :key="index">{{item.text}}</view>
</scroll-view>
</view>
<view class="body">
<!-- 全部订单 -->
<template v-if="isList==true && scroll_active==0">
<view class="" v-for="(item,idnex) in orderList" :key="item.order_id">
<view class="order" @click="goDetails(item,item.order_id)">
<view class="order_title">
<!-- 待支付订单 -->
<text v-if="item.pay_status_code==0 && item.order_status_code==0">Waiting for payment</text>
<!-- 已取消订单 -->
<text v-else-if="item.order_status_code==2">cancelled</text>
<!-- 待发货订单 -->
<text v-else-if="item.pay_status_code==2 && item.shipping_status_code==0">To be shipped</text>
<!-- 运输中订单 -->
<text v-else-if="item.pay_status_code==2 && item.shipping_status_code==1 || item.shipping_status_code==4">Shipped</text>
<!-- 已完成订单 -->
<text v-else-if="item.pay_status_code==2 && item.shipping_status_code==2">Completed</text>
<view class="order_title_right">
<text>order#{{item.order_sn}}</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<view class="order_content">
<template v-if="item.order_goods.length==1">
<view class="good_info" v-for="(item1,index1) in item.order_goods" :key="index1">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item1.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item1.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item1.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>×{{item1.goods_number}}</text>
</view>
</view>
</view>
</view>
</template>
<template v-else>
<view class="good_info" @click.stop="showGoods(item.order_goods,1)">
<view class="good_info_left">
<view class="good_info_image" v-for="(item1,index1) in item.order_goods" :key="index1">
<image :src="item1.goods_img" mode=""></image>
</view>
</view>
<view class="good_info_right">
<text>{{item.order_goods.length}} ltems</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</template>
<view class="good_price">total:US${{item.total_fee_o}}</view>
<view class="good_points" v-if="item.pay_status_code==0 && item.order_status_code==0">
<image src="/static/img/gantan1.png" mode=""></image>
<text>Reward 10 points</text>
</view>
<view class="order_button">
<!-- 待支付订单 -->
<template v-if="item.pay_status_code==0 && item.order_status_code==0">
<button class="cancel" @click.stop="openTips(item.order_id,0)">CANCEL ORDER</button>
<button class="pay" @click.stop="payNow(item.order_id,0)">PAY NOW</button>
</template>
<!-- 已取消订单 -->
<button v-if="item.order_status_code==2" class="cancel" @click.stop="openTips(item.order_id,1)">DELETE ORDER</button>
<!-- 待发货订单 -->
<template v-if="item.pay_status_code==2 && item.shipping_status_code==1 || item.shipping_status_code==4">
<button class="cancel" @click.stop="goLogistics(item.order_id)">LOGISTICS</button>
<button class="pay" @click.stop="openTips(item.order_id,2)">CONFIRM RECEIPT</button>
</template>
<!-- 已完成订单 -->
<template v-if="item.pay_status_code==2 && item.shipping_status_code==2">
<button class="cancel" @click.stop="openTips(item.order_id,1)">DELETE ORDER</button>
<button class="pay" @click.stop="goComment(item)" v-if="item.comment_status_code==0">COMMENT</button>
</template>
</view>
</view>
</view>
</view>
</template>
<!-- 待支付订单 -->
<template v-if="isList==true && scroll_active==1">
<view class="" v-for="(item,idnex) in orderList" :key="item.order_id">
<view class="order" @click="goDetails(item,item.order_id)" v-if="item.pay_status_code==0 && item.order_status_code==0">
<view class="order_title">
<text >Waiting for payment</text>
<view class="order_title_right">
<text>order#{{item.order_sn}}</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<view class="order_content">
<template v-if="item.order_goods.length==1">
<view class="good_info" v-for="(item1,index1) in item.order_goods" :key="index1">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item1.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item1.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item1.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>×{{item1.goods_number}}</text>
</view>
</view>
</view>
</view>
</template>
<template v-else>
<view class="good_info" @click.stop="showGoods(item.order_goods,1)">
<view class="good_info_left">
<view class="good_info_image" v-for="(item1,index1) in item.order_goods" :key="index1">
<image :src="item1.goods_img" mode=""></image>
</view>
</view>
<view class="good_info_right">
<text>{{item.order_goods.length}} ltems</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</template>
<view class="good_price">total:US${{item.total_fee_o}}</view>
<view class="good_points" v-if="item.pay_status_code==0 && item.order_status_code==0">
<image src="/static/img/gantan1.png" mode=""></image>
<text>Reward 10 points</text>
</view>
<view class="order_button">
<button class="cancel" @click.stop="openTips(item.order_id,0)">CANCEL ORDER</button>
<button class="pay" @click.stop="payNow(item.order_id,0)">PAY NOW</button>
</view>
</view>
</view>
</view>
</template>
<!-- 待发货订单 -->
<template v-if="isList==true && scroll_active==2">
<view class="order" v-if="item.pay_status_code==2 && item.shipping_status_code==0" @click="goDetails(0,item.order_id)">
<view class="order_title">
<text>To be shipped</text>
<view class="order_title_right">
<text>order#{{item.order_sn}}</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<view class="order_content">
<template v-if="item.order_goods.length==1">
<view class="good_info" v-for="(item1,index1) in item.order_goods" :key="index1">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item1.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item1.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item1.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>×{{item1.goods_number}}</text>
</view>
</view>
</view>
</view>
</template>
<template v-else>
<view class="good_info" @click.stop="showGoods(item.order_goods,1)">
<view class="good_info_left">
<view class="good_info_image" v-for="(item1,index1) in item.order_goods" :key="index1">
<image :src="item1.goods_img" mode=""></image>
</view>
</view>
<view class="good_info_right">
<text>{{item.order_goods.length}} ltems</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</template>
<view class="good_price">total:US${{item.total_fee_o}}</view>
</view>
</view>
</template>
<!-- 运输中订单 -->
<template v-if="isList==true && scroll_active==3">
<view class="order" v-if="item.pay_status_code==2 && item.shipping_status_code==1 || item.shipping_status_code==4" @click="goDetails(4,item.order_id)">
<view class="order_title">
<text>Shipped</text>
<view class="order_title_right">
<text>order#{{item.order_sn}}</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<view class="order_content">
<template v-if="item.order_goods.length==1">
<view class="good_info" v-for="(item1,index1) in item.order_goods" :key="index1">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item1.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item1.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item1.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>×{{item1.goods_number}}</text>
</view>
</view>
</view>
</view>
</template>
<template v-else>
<view class="good_info" @click.stop="showGoods(item.order_goods,1)">
<view class="good_info_left">
<view class="good_info_image" v-for="(item1,index1) in item.order_goods" :key="index1">
<image :src="item1.goods_img" mode=""></image>
</view>
</view>
<view class="good_info_right">
<text>{{item.order_goods.length}} ltems</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</template>
<view class="good_price">total:US${{item.total_fee_o}}</view>
<view class="order_button">
<button class="cancel" @click.stop="goLogistics(item.order_id)">LOGISTICS</button>
<button class="pay" @click.stop="openTips(item.order_id,2)">CONFIRM RECEIPT</button>
</view>
</view>
</view>
</template>
<!-- 已完成订单 -->
<template v-if="isList==true && scroll_active==4">
<view class="order " v-if="item.pay_status_code==2 && item.shipping_status_code==2" @click="goDetails(2,item.order_id)">
<view class="order_title">
<text>Completed</text>
<view class="order_title_right">
<text>order#{{item.order_sn}}</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<view class="order_content">
<template v-if="item.order_goods.length==1">
<view class="good_info" v-for="(item1,index1) in item.order_goods" :key="index1">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item1.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item1.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item1.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>×{{item1.goods_number}}</text>
</view>
</view>
</view>
</view>
</template>
<template v-else>
<view class="good_info" @click.stop="showGoods(item.order_goods,1)">
<view class="good_info_left">
<view class="good_info_image" v-for="(item1,index1) in item.order_goods" :key="index1">
<image :src="item1.goods_img" mode=""></image>
</view>
</view>
<view class="good_info_right">
<text>{{item.order_goods.length}} ltems</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</template>
<view class="good_price">total:US${{item.total_fee_o}}</view>
<view class="order_button">
<button class="cancel" @click.stop="openTips(item.order_id,1)">DELETE ORDER</button>
<button class="pay" @click.stop="goComment(item)" v-if="item.comment_status_code==0">COMMENT</button>
</view>
</view>
</view>
</template>
<!-- 退换货订单 -->
<template v-if="isList==true && scroll_active==5">
<view class="order" v-if="item.order_status_code==4" @click="goDetails(2,item.order_id)">
<view class="order_title">
<text>Return and exchange</text>
<view class="order_title_right">
<text>order#{{item.order_sn}}</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<view class="order_content">
<template v-if="item.order_goods.length==1">
<view class="good_info" v-for="(item1,index1) in item.order_goods" :key="index1">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item1.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item1.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item1.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>×{{item1.goods_number}}</text>
</view>
</view>
</view>
</view>
</template>
<template v-else>
<view class="good_info" @click.stop="showGoods(item.order_goods,1)">
<view class="good_info_left">
<view class="good_info_image" v-for="(item1,index1) in item.order_goods" :key="index1">
<image :src="item1.goods_img" mode=""></image>
</view>
</view>
<view class="good_info_right">
<text>{{item.order_goods.length}} ltems</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</template>
<view class="good_price">total:US${{item.total_fee_o}}</view>
<view class="order_button">
<button class="pay">CANCEL RETURN</button>
</view>
</view>
</view>
</template>
<!-- 已取消订单 -->
<template v-if="isList==true && scroll_active==6">
<view class="order" v-if="item.order_status_code==2" @click="goDetails(1,item.order_id)">
<view class="order_title">
<text>cancelled</text>
<view class="order_title_right">
<text>order#{{item.order_sn}}</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<view class="order_content">
<template v-if="item.order_goods.length==1">
<view class="good_info" v-for="(item1,index1) in item.order_goods" :key="index1">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item1.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item1.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item1.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>×{{item1.goods_number}}</text>
</view>
</view>
</view>
</view>
</template>
<template v-else>
<view class="good_info" @click.stop="showGoods(item.order_goods,1)">
<view class="good_info_left">
<view class="good_info_image" v-for="(item1,index1) in item.order_goods" :key="index1">
<image :src="item1.goods_img" mode=""></image>
</view>
</view>
<view class="good_info_right">
<text>{{item.order_goods.length}} ltems</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</template>
<view class="good_price">total:US${{item.total_fee_o}}</view>
<view class="order_button">
<button class="cancel" @click.stop="openTips(item.order_id,1)">DELETE ORDER</button>
</view>
</view>
</view>
</template>
<template v-if="isList==false">
<view class="order1">
<image src="../../static/img/order_nodate.png" mode=""></image>
<text>You made no order yet!</text>
<button>Continue shopping</button>
</view>
</template>
</view>
<view class="mask" v-show="isShow" @click="isShow=false"></view>
<!-- 支付 -->
<view class="order_popup" v-if="isShow && showType==0">
<view class="order_popup_title">
<text>
Payment Method
</text>
<image src="../../static/img/close1.png" mode="" @click="isPay=false"></image>
</view>
<view class="order_popup_pay" >
<view class="pay_item" @click="selectPay(0)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==0"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/pay_pal.png" mode=""></image>
<text>Pay Pal</text>
</view>
</view>
<view class="pay_item" @click="selectPay(1)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==1"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/card.png" mode=""></image>
<text>Credit/Debit Card</text>
</view>
</view>
<view class="pay_item" @click="selectPay(2)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==2"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/GPay.png" mode=""></image>
<text>Google Pay</text>
</view>
</view>
<view class="pay_item" @click="selectPay(3)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==3"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/APay.png" mode=""></image>
<text>Apple pay</text>
</view>
</view>
<button @click="getPayDate">PAY NOW</button>
</view>
</view>
<!-- 商品信息 -->
<view class="order_popup" v-show="isShow && showType==1">
<view class="order_popup_title">
<text>Commodity information</text>
</text>
<image src="../../static/img/close1.png" mode="" @click="isShow=false"></image>
</view>
<view class="order_popup_commodity" >
<view class="good_info" v-for="(item,index) in goods_list " :key="index">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>x{{item.goods_number}}</text>
</view>
<view class="info_price">US${{item.goods_price}}</view>
</view>
</view>
</view>
</view>
</view>
<!-- 删除取消弹框 -->
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="Close" :confirmText="tipsBut" title="Tips" :content="tipsInfo" @confirm="dialogConfirm" ></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
scrollList:[{text:'All'},{text:'Unpaid'},{text:'Processing'},{text:'Shipped'},{text:'Returns'},{text:'Completed'},{text:'Closed'}],
scroll_active:0,
isList:true,
orderList:[],
isShow:false,
// 0 1
showType:0,
payQuery:{
_action:'payorder',
order_id:'',
order_type:'GOODSBUY',
payment_method:'alipay.native'
},
pay_index:0,
cancelQuery:{
_action:'cancelorder',
order_id:''
},
// 0 1 2
tipsType:0,
tipsInfo:'',
tipsBut:'',
goods_list:[],
query:{_action:'getuserorders',page_index:1,page_size:10,payingstatus:'',status:'',shippingstatus:''}
}
},
methods:{
//
goComment(item){
uni.navigateTo({
url:'../productDetails/review?data='+JSON.stringify(item)
})
},
showGoods(goodsList,type){
this.isShow=true
this.showType=type
this.goods_list=goodsList
},
//
goLogistics(id){
uni.navigateTo({
url:'../order/logisticsDetails?order_id='+id
})
},
//
goDetails(item,id){
let index
if(item.pay_status_code==0 && item.order_status_code==0){
index=3
}else if(item.order_status_code==2){
index=1
}else if(item.pay_status_code==2 && item.shipping_status_code==0){
index=0
}else if(item.pay_status_code==2 && item.shipping_status_code==1 || item.shipping_status_code==4){
index=4
}else if(item.pay_status_code==2 && item.shipping_status_code==2){
index=2
}else if(item.order_status_code==4){
// 退
index=5
}
let url='../order/details?details_index='+index+'&id='+id
if(index==5){
url='../order/refundDetails'
}
uni.navigateTo({
url:url
})
},
//
selectPay(index){
this.pay_index=index
},
//
getPayDate(){
defaultRequest2(this.payQuery).then(res=>{
console.info(res)
if(res.error==0){
//
if(res.data.need_pay_amount==0) return
uni.requestPayment({
provider: 'alipay',
orderInfo: res.data.prepay_data.order_info, //
success: function (res) {
console.log('success:' + JSON.stringify(res));
uni.navigateTo({
url: 'paySuccess?order_id='+this.payQuery.order_id
});
},
fail: function (err) {
console.log('fail:' + JSON.stringify(err));
uni.showToast({
title:'Payment failed',
icon:'none'
})
}
});
}
})
},
payNow(id,type){
this.payQuery.order_id=id
this.isShow=true
this.showType=type
},
//
openTips(id,type){
this.tipsType=type
if(type==0){
this.tipsInfo='Are you sure you want to cancel this order? This order will be regarded as invalid after cancellation'
this.tipsBut='CancelOrder'
this.cancelQuery._action='cancelorder'
}else if(type==1){
this.tipsInfo='Are you sure you want to delete this order?'
this.tipsBut='DeleteOrder'
this.cancelQuery._action='deleteorder'
}else if(type==2){
this.tipsInfo='Are you sure you have received the products?'
this.tipsBut='Confirm'
this.cancelQuery._action='affirmorder'
}
this.cancelQuery.order_id=id
this.$refs.alertDialog.open()
},
//
dialogConfirm(){
defaultRequest2(this.cancelQuery).then(res=>{
console.info(res)
if(res.error==0){
this.getList()
}
})
},
getList(){
defaultRequest2(this.query).then(res=>{
console.info(res)
if(res.error==0){
this.orderList=res.data
}
})
},
scrollChange(index){
// {_action:'getuserorders',page_index:1,page_size:10,payingstatus:'',status:'',shippingstatus:''}
this.scroll_active=index
// if(index==0){
// this.query.payingstatus=''
// this.query.status=''
// }else if(index==1){
// this.query.payingstatus='1'
// this.query.status='0'
// this.query.shippingstatus='1'
// }
// this.getList()
},
},
onShow() {
this.getList()
},
filters:{
goodsAttr(e){
return e.replace(/\s\n/g,';');
}
}
}
</script>
<style lang="scss" scoped>
.body{
padding-top: 100rpx;
}
.order_nav{
padding:0 38.67rpx ;
border-bottom: 13.33rpx #F7F7F7 solid;
position: fixed;
width: 100%;
box-sizing: border-box;
z-index: 99;
background-color: white;
.scroll-view_H{
white-space: nowrap;
font-size: 28rpx;
color: #666666;
width: 100%;
::-webkit-scrollbar {
width: 0;
height: 0;
background-color: transparent;
}
view{
margin-left: 37.33rpx;
display: inline-block;
padding: 25.33rpx 0;
}
view:first-child{
margin-left: 0;
}
.scroll_active{
color: #000000;
font-size: 28rpx;
font-weight: bold;
border-bottom: 2px solid #000000;
}
}
}
.order{
border-bottom: 13.33rpx #F7F7F7 solid;
padding-bottom: 26.67rpx;
.order_title{
display: flex;
align-items: center;
justify-content: space-between;
padding-left: 34.67rpx;
padding-right: 25.33rpx;
font-size: 28rpx;
padding-top: 26.67rpx;
padding-bottom: 20rpx;
border-bottom: 1px solid #F1F1F1;
.order_title_right{
font-size: 22.67rpx;
font-weight: bold;
color: #666666;
image{
width: 16rpx;
height: 16rpx;
margin-left: 14.67rpx;
}
}
}
.order_content{
padding-left: 32rpx;
padding-right: 26.67rpx;
.good_info{
padding: 30.67rpx 0;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 22.67rpx;
color: #666666;
font-weight: bold;
border-bottom: 1px solid #F1F1F1;
.good_info_left{
display: flex;
align-items: center;
.good_info_image{
width: 133.33rpx;
height: 133.33rpx;
background-color: #999999;
margin-right: 8rpx;
image{
width: 100%;
height: 100%;
}
}
.left_info{
margin-left: 24rpx;
.info_name{
font-size: 26.67rpx;
font-weight: 400;
width: 477.33rpx;
}
.left_info_bottom{
width: 533.33rpx !important;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 32rpx;
color: #909090;
width: 100%;
margin-top: 24rpx;
.info_lable{
padding: 5.33rpx 20rpx;
font-size: 22.67rpx;
border-radius: 33.33rpx;
border: 1px solid #D3D3D3;
image{
width: 17.33rpx;
height: 17.33rpx;
margin-left: 14.67rpx;
}
}
}
}
}
.good_info_right{
display: flex;
align-items: center;
image{
width: 16rpx;
height: 16rpx;
margin-left: 20rpx;
}
}
}
.good_price{
font-size: 28rpx;
text-align: right;
margin: 24rpx 0;
}
.good_points{
display: flex;
align-items: center;
justify-content: flex-end;
font-size: 24rpx;
color: #B22234;
image{
width: 29.33rpx;
height: 29.33rpx;
margin-right: 13.33rpx;
}
}
.order_button{
margin-top: 33.33rpx;
display: flex;
justify-content: flex-end;
button{
height: 57.33rpx;
line-height: 57.33rpx;
font-weight: bold;
font-size: 22.67rpx;
border: none;
margin: 0;
border-radius: 0;
&:last-child{
margin-right: 0 !important;
}
}
.cancel{
color: #666666;
margin-right: 20rpx;
background-color: white;
}
.pay{
color: white;
background: black;
}
}
}
}
.order1{
padding-top: 90.67rpx;
font-size: 24rpx;
font-weight: 400;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
image{
width: 146.67rpx;
height: 146.67rpx;
margin-bottom: 36rpx;
}
button{
background-color: #000000;
font-size: 24rpx;
color: white;
border-radius: 13.33rpx;
height: 63.33rpx;
margin-top: 20rpx;
}
}
</style>

161
pages/account/myProfile.vue

@ -0,0 +1,161 @@
<template>
<view>
<view class="profile_item profile_item1">
<text>Photo</text>
<view class="profile_item_right" @click="gotochange()">
<image src="../../static/img/logo.png" mode="" class="head_img" v-show="!user_info.isLogin"></image>
<image :src="user_info.user_head?user_info.user_head:user_info.headicons[5]" mode="" class="head_img" v-if="user_info.isLogin"></image>
<image src="../../static/img/right1.png" alt="" class="right_img"></image>
</view>
</view>
<view class="profile_item " @click="$refs.inputDialog.open()">
<text>Name</text>
<view class="profile_item_right">
<text>{{user_info.nickname}}</text>
<image src="../../static/img/right1.png" alt="" class="right_img"></image>
</view>
</view>
<view class="profile_item ">
<text>Email</text>
<view class="profile_item_right">
<image src="../../static/img/gantan.png" alt="" class="right_img1" v-if="user_info.is_validated==0"></image>
<text>{{user_info.is_validated==0?'unverified':user_info.email}}</text>
<image src="../../static/img/right1.png" alt="" class="right_img"></image>
</view>
</view>
<navigator :url="'/pages/login/verifyEmail?type=0&email='+user_info.email" >
<view class="profile_item ">
<text>Change Password</text>
<view class="profile_item_right">
<image src="../../static/img/right1.png" alt="" class="right_img"></image>
</view>
</view>
</navigator>
<view class="profile_item ">
<text>Ship to</text>
<view class="profile_item_right">
<text>{{addressDate.country_name || 'United States'}}</text>
<image src="../../static/img/right1.png" alt="" class="right_img"></image>
</view>
</view>
<uni-popup ref="inputDialog" type="dialog">
<uni-popup-dialog ref="inputClose" mode="input" title="输入内容"
placeholder="请输入姓名" @confirm="dialogInputConfirm"></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
user_info:{
isLogin:false,
},
query:{
_action:'updateinfo',
nickname:''
},
addressDate:{}
}
},
methods:{
//
gotochange(){
uni.navigateTo({
url:'./changeImg'
})
},
//
getDefaultAddress(){
let data={_action:'getdefaultconsignee'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
this.addressDate=res.data
}
})
},
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')
}
})
},
dialogInputConfirm(val){
this.query.nickname=val
defaultRequest2(this.query).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:'修改成功',
icon:'none'
})
this.getUserInfo()
}
})
}
},
onLoad() {
this.user_info=uni.getStorageSync('user_info')
this.getUserInfo()
this.getDefaultAddress()
}
}
</script>
<style>
page{
border-top: 13.33rpx #F7F7F7 solid;
padding-left: 26.67rpx;
}
</style>
<style lang="scss" scoped>
.profile_item{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 24rpx;
font-weight: bold;
padding: 40rpx 0;
padding-right: 33.33rpx;
border-bottom: 1.33rpx #ECECEC solid;
box-sizing: border-box;
.profile_item_right{
display: flex;
align-items: center;
.head_img{
width: 112rpx;
height: 112rpx;
border-radius: 50%;
}
.right_img{
width: 18.67rpx;
height: 18.67rpx;
margin-left: 20rpx;
}
.right_img1{
width: 25.33rpx;
height: 25.33rpx;
margin-right: 9.33rpx;
}
}
}
.profile_item1{
padding: 17.33rpx 0;
padding-right: 33.33rpx;
}
</style>

74
pages/account/myReview.vue

@ -0,0 +1,74 @@
<template>
<view class="body">
<navigator url="/pages/productDetails/review">
<view class="reviews_item" v-for="(item,index) in 2" :key="index">
<view class="reviews_item_title">
<view class="reviews_title_user">
<text>e***8</text>
<uni-rate size="18" :disabled="true" disabledColor="red" :value="4" active-color="red" :is-fill="false"/>
</view>
<view class="reviews_title_time">07/03/2022</view>
</view>
<view class="reviews_item_color">Color:Multicolor</view>
<view class="reviews_item_content">So unique! Cant wait to wear these.</view>
<view class="reviews_item_image">
<view class="reviews_image_content" v-for="(item,index) in 3" :key="index"></view>
</view>
<view class="more">
<image src="../../static/img/more.png" mode="" @click="isShwo=true"></image>
<view class="more_delete" v-show="isShwo">delete</view>
</view>
</view>
</navigator>
<view class="mask" v-show="isShwo" @click="isShwo=false"></view>
</view>
</template>
<script>
export default {
data() {
return {
isShwo:false
}
},
methods:{
}
}
</script>
<style>
page{
border-top: 14.67rpx #F6F5FA solid;
}
</style>
<style lang="scss" scoped>
.body{
padding: 0 32rpx;
}
.more{
text-align: right;
position: relative;
// margin-top: 20rpx;
image{
width: 24rpx;
height: 6.67rpx;
}
.more_delete{
background-image: url(@/static/img/more_bf.png);
background-size: 100% 100%;
width: 102.67rpx;
height: 67.33rpx;
position: absolute;
right: 0;
bottom: 20rpx;
line-height: 50rpx;
text-align: center;
font-size: 24rpx;
z-index: 999;
}
}
.mask{
background-color: white;
opacity: 0;
}
</style>

60
pages/account/pointsDetails.vue

@ -0,0 +1,60 @@
<template>
<view>
<uni-nav-bar left-icon="left" title="Points Details" color="#000000" rightIcon="info" @clickLeft="back" :border="false" :statusBar="true" />
<view class="points">
<view class="points_item" v-for="(item,index) in 10" :key="index">
<view class="points_item_title">
<text>Order return</text>
<text class="item_title_price">+US$314.00</text>
</view>
<text>21/04/2022 15:42:31</text>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods:{
back(){
uni.navigateBack()
}
}
}
</script>
<style lang="scss" scoped>
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
border-bottom: 14.67rpx #F6F5FA solid;
}
.points{
padding: 0 25.33rpx;
.points_item{
padding: 37.33rpx 0;
color: #999999;
font-size: 24rpx;
font-weight: 400;
border-bottom: 1px solid #E2E2E2;
.points_item_title{
font-size: 28rpx;
display: flex;
justify-content: space-between;
margin-bottom: 18rpx;
color: black;
.item_title_price{
color: #B22234;
}
}
}
}
</style>

119
pages/account/settings.vue

@ -0,0 +1,119 @@
<template>
<view>
<view class="profile_item ">
<text>Country</text>
<image src="../../static/img/right1.png" mode="" class="right_img"></image>
</view>
<view class="profile_item ">
<text>Language</text>
<image src="../../static/img/right1.png" mode="" class="right_img"></image>
</view>
<view class="profile_item ">
<text>My account</text>
<image src="../../static/img/right1.png" mode="" class="right_img"></image>
</view>
<view class="profile_item ">
<text>Privacy policy</text>
<image src="../../static/img/right1.png" mode="" class="right_img"></image>
</view>
<view class="profile_item ">
<text>Legal</text>
<image src="../../static/img/right1.png" mode="" class="right_img"></image>
</view>
<view class="set_button">
<button @click="signOut">SIGN OUT</button>
</view>
<view class="edition">
<view class="edition_title">CHIC BUYER</view>
<text>Version 1.0</text>
</view>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
}
},
methods:{
signOut(){
let data={_action:'logout'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.clearStorageSync()
uni.reLaunch({
url:'../login/index'
})
}
})
}
}
}
</script>
<style lang="scss">
page{
border-top: 14.67rpx #F7F7F7 solid;
padding-left: 26.67rpx;
box-sizing: border-box;
}
</style>
<style lang="scss" scoped>
page{
}
.profile_item{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 24rpx;
font-weight: bold;
padding: 40rpx 0;
padding-right: 33.33rpx;
border-bottom: 1.33rpx #ECECEC solid;
box-sizing: border-box;
.right_img{
width: 18.67rpx;
height: 18.67rpx;
margin-left: 20rpx;
}
}
.profile_item:last-child{
border-bottom: none;
}
.set_button{
width: 686.67rpx;
height: 73.33rpx;
margin-top: 133.33rpx;
button{
background-color: #191919;
font-size: 26.67rpx;
color: white;
font-weight: bold;
height: 100%;
line-height: 73.33rpx;
border-radius: 0;
}
}
.edition{
position: fixed;
bottom: 0;
width: 100%;
text-align: center;
font-size: 20rpx;
font-weight: bold;
margin-bottom: 112rpx;
.edition_title{
font-size: 25.33rpx;
margin-bottom: 16rpx;
}
}
</style>

99
pages/account/wishlist.vue

@ -0,0 +1,99 @@
<template>
<view class="wishlist_body">
<view class="status_bar"></view>
<uni-nav-bar left-icon="left" :rightText="isDelete?'Done':'Delete'" title="Wishlist" color="#000000" @clickLeft="back" @clickRight="$refs.alertDialog.open()"/>
<view class="wishlist">
<view class="wishlist_item" v-for="(item,index) in goodsList" :key="index" @click="changeImage(item.id)">
<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 && 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${{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>
</view>
<view class="wishlist_foot" v-show="isDelete">
<view class="wishlist_foot_left">
<image src="../../static/img/select2.png" mode=""></image>
<text>All</text>
</view>
<view class="wishlist_foot_right">
<button @click="removeLike">DELETE</button>
</view>
</view>
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="Close" confirmText="Delete" title="Tips" content="Whether to delete all favorites?"
@confirm="removeLike(0)" ></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
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:id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.getList()
}
})
},
back(){
uni.navigateBack()
}
},
onLoad() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
page{
}
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
</style>

213
pages/category/index.vue

@ -0,0 +1,213 @@
<template>
<view class="body">
<view class="search">
<view class="status_bar"></view>
<view class="search1">
<navigator url="/pages/index/search">
<view class="navigation_seach">
<image src="../../static/img/seach.png" mode=""></image>
<text>search</text>
</view>
</navigator>
<view class="navigation_title_right">
<image src="../../static/img/like.png" mode=""></image>
<uni-badge :text="5" type="error" absolute="rightTop">
<image src="../../static/img/shop_cart.png" mode=""></image>
</uni-badge>
</view>
</view>
</view>
<view class="category">
<view class="category_left">
<view class="category_left_item" :class="categoryIndex==item.cat_id?'categoryActive':''" v-for="(item,index) in categoryList" :key="item.cat_id"
@click="changeCategory(item.cat_id)">
{{item.cat_name}}
</view>
</view>
<view class="good_body">
<view class="good_title">PICKS FOR YOU</view>
<view class="good_content" v-for="(item,index) in categoryList" :key="item.cat_id" v-show="categoryIndex==item.cat_id">
<view class="good_item" v-for="(item1,index1) in item.subcategories" :key="item1.cat_id" @click="goPets(item1.cat_id)">
<img :src="item1.first_goods_thumb" alt="" class="good_item_img">
<text>{{item1.cat_name}}</text>
</view>
</view>
<!-- <view class="good_title">YOU MAY ALSO LIKE</view>
<view class="good_content">
<view class="good_item" v-for="(item,index) in 5" :key="index">
<view class="good_item_img"></view>
<text>Women Drese</text>
</view>
</view> -->
</view>
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
categoryIndex:0,
categoryList:['CHOICE','WOMEN','MEN','KIDS','PETS','SWIMWEAR','LINGERUE&LOUNGEAR','DENIM&JEANS','ACTIVEWEAR','BEAUTY','SHOES']
}
},
methods:{
changeCategory(i){
this.categoryIndex=i
},
goPets(id){
// uni.navigateTo({
// url:"productList?cat_id="+id+'&type=0'
// })
uni.navigateTo({
url:"pets?cat_id="+id+'&type=0'
})
},
getList(){
let data={_action:'getcategorytree'}
defaultRequest(data).then(res=>{
console.info(res)
if(res.error==0){
this.categoryList=res.data
this.categoryIndex=res.data[0].cat_id
}
})
}
},
onShow() {
this.getList()
}
}
</script>
<style lang="scss">
page{
padding-top: 200rpx;
height: 100%;
}
</style>
<style lang="scss" scoped>
.body{
height: 100%;
}
.search{
width: 100%;
background-color: white;
box-sizing: border-box;
padding: 33.33rpx 26.67rpx;
position: fixed;
top: 0;
z-index: 99;
border-bottom: 1px solid #F5F6FA;
.search1{
display: flex;
align-items: center;
justify-content: space-between;
.navigation_seach{
width: 546.67rpx;
background-color: #F5F6FA;
border-radius: 6.67rpx;
height: 66.67rpx;
display: flex;
align-items: center;
color: #8F9094;
font-size: 26.67rpx;
padding-left: 22rpx;
box-sizing: border-box;
image{
width: 29.33rpx;
height: 29.33rpx;
margin-right: 22rpx;
}
}
.navigation_title_right{
display: flex;
align-items: center;
image{
width: 44rpx;
height: 44rpx;
}
>image:first-child{
margin-right: 32.67rpx;
}
}
}
}
.category{
height: 100%;
display: flex;
.category_left{
height: 100%;
background-color: #F5F6FA;
width: 197.33rpx;
.category_left_item{
width: 100%;
padding: 0 18rpx;
height: 96rpx;
font-size: 26.67rpx;
font-weight: 600;
box-sizing: border-box;
font-family: PingFang SC;
display: flex;
align-items: center;
word-wrap: break-word;
word-break: break-all;
}
.categoryActive{
background-color: black;
color: white;
}
}
.good_body{
margin-left: 36rpx;
width: 552.67rpx;
// padding-top: 39.33rpx;
.good_title{
height: 96rpx;
line-height: 96rpx;
font-size: 28rpx;
font-weight: 600;
}
.good_content{
display: flex;
flex-wrap: wrap;
.good_item{
font-size: 22.67rpx;
text-align: center;
margin-right: 25.33rpx;
margin-bottom: 51.33rpx;
.good_item_img{
display: block;
background-color: #999999;
width: 146.67rpx;
height: 146.67rpx;
margin-bottom: 22rpx;
}
}
.good_item:nth-child(3n+3){
margin-right: 0;
}
}
}
}
</style>

225
pages/category/pets.vue

@ -0,0 +1,225 @@
<template>
<view style="background-color: #fff;">
<view class="font fixed">
<uni-section type="line"
style="margin-bottom: 3px;">
<view class="box-bg">
<uni-nav-bar title="Pets" border="false">
<block slot="left" >
<!-- <view ><uni-icons type="back" size="30"></uni-icons></view> -->
<view class="icon-all" @click="goback()"><image class="imgsize"src='../../static/icon/left.png'/></view>
<view style="margin-left: 50rpx;" class="icon-all"><image class="imgsize"src='../../static/icon/search.png'/></view>
</block>
<block slot="right">
<uni-badge class="uni-badge-left-margin" type="info"absolute="rightTop" :offset="[-22, -10]" :text="num" size="small"/>
<view class="icon-b"><image class="imgsize"src='../../static/icon/cart.png'></view>
</block>
</uni-nav-bar>
</view>
</uni-section>
<!-- 分类 -->
<view class="classifity">
<scroll-view scroll-x class="scroll_view">
<view class="tab">
<view class="tab_item" v-for ="(item,index) in list" :key ="index" @click="tabActive(index)">
<view style="width: 100rpx;" :class="[index==tabNow?'select':'']">{{item.text}}</view>
<!-- <view><uni-icons :type="item.icon" :size="item.size"></uni-icons></view> -->
<view class="icon-a" :class="[index===3?'icon-b':'']"><image class="imgsize ":src="item.src"v-if="item.src!=''"/></view>
</view>
</view>
</scroll-view>
</view>
</view>
<view class="fg"></view>
<view class="tar" v-for="(item,index) in pets" :key="index">
<!-- 图片 -->
<view class="img"><image :src="item.goods_img" class="imgsize"/></view>
<!-- 文字 -->
<view class="flex">
<view class="tar_text">
{{ item.short_name }}
</view>
<view class="tar-text2">{{ item.goods_sn}}</view>
<view class="icon flex">
<view style="margin: 10rpx;font-weight: bold; width: 120rpx;">US${{ item.shop_price }}</view>
<!-- <view style="margin-left: 150rpx;"><uni-icons :type="heart" size="30" ></uni-icons></view>
<view style="margin-left: 20rpx;"><uni-icons type="cart" size="30"></uni-icons></view> -->
<view style="margin-left: 160rpx;"class="icon-b"><image class="imgsize" src="../../static/icon/heart.png"/></view>
<view style="margin-left: 30rpx;"><uni-icons type="cart" size="30"></uni-icons></view>
</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data(){
return{
list:[
{icon:'',text:'Synthesis',src:''},
{icon:'bottom',size:15,text:'Sales',src:'../../static/icon/back.png'},
{icon:'top',size:15,text:'Prise',src:'../../static/icon/back.png'},
{icon:'settings-filled',size:30,text:' | ',src:'../../static/icon/all.png'}
],
tabNow:0,
heart:'heart-filled',
num:13,
query:{
_action:'getgoods',
order_type:0,
page_index:1,
pagesize:10,
cat:'',
},
pets:[]
}
},
onLoad(e) {
console.log(e,'数据')
this.query.cat = e.cat_id
console.log(this.query.cat,'jjjjj')
this.getpets()
},
onPullDownRefresh() {
this.getpets()
setTimeout(function () {
uni.stopPullDownRefresh();
}, 1000);
},
methods:{
tabActive(i){
console.log(i)
this.tabNow = i
},
goback(){
console.log('ppppp')
uni.navigateBack({
delta:1
})
},
getpets(){
defaultRequest(this.query).then( res =>{
// console.log(res,'res')
this.pets = res.data
console.log(res.data,'res')
})
}
}
}
</script>
<style>
.flex{
display: flex;
flex-direction: column;
}
.bg-white{
background-color: #fff;
}
.font{
height: 200rpx;
background-color: #fff;
padding: 60rpx 5rpx 0 5rpx ;
}
.fixed{
position: fixed;
z-index: 99;
}
.icon-a{
height: 18rpx;
width: 18rpx;
}
.icon-b{
height: 40rpx;
width: 40rpx;
margin: 10rpx;
}
.icon-all{
height: 30rpx;
width:30rpx ;
}
.imgsize{
width: 100%;
height: 100%;
}
.scroll_view {
background-color: #fff;
white-space: nowrap;
}
.tab {
display: flex;
text-align: center;
}
.tab .tab_item {
height: 90rpx;
display: flex;
line-height: 90rpx;
margin:0 10rpx;
padding: 0 20rpx;
flex: 1;
}
.tab_item view:nth-child(1){
/* margin-left: 10rpx; */
text-align: center;
}
.fg{
height: 200rpx;
background-color: #fff;
}
.tar{
height: 240rpx;
background-color: #fff;
padding: 18rpx 15rpx 5rpx 15rpx;
display: flex;
margin: 20rpx 0;
}
.img{
height:200rpx ;
width:200rpx ;
margin: 20rpx 10rpx;
background-color: #ccc;
}
.tar_text{
width: 60vw;
height: 70rpx;
padding: 6rpx;
margin: 10rpx 20rpx;
font-size: 28rpx;
overflow: hidden;
white-space: wrap;
text-overflow: ellipsis;
}
.tar-text2{
color:#B22234;
line-height: 50rpx;
text-align: center;
width: 200rpx;
background:#fcf0f1;
border-radius: 10rpx;
font-size: 20rpx;
margin: 5rpx 2rpx;
}
.icon{
flex-direction: row;
/* justify-content: center; */
align-items: center;
margin: 10rpx 10rpx;
}
.select{
font-weight: 900;
}
</style>

134
pages/index/flashSale.vue

@ -0,0 +1,134 @@
<template>
<view>
<uni-nav-bar left-icon="left" :statusBar="true" title="Flash Sale"
color="#000000" rightIcon="info" @clickLeft="back" @clickRight="isDelete=!isDelete" :border="false"/>
<view class="body">
<view class="countDown">
<text>Ends in</text>
<uni-countdown :showDay="false" :hour="23" :minute="0" :second="0" color="#FFFFFF" background-color="#1B1B1B" class="countDown_assembly" />
</view>
<view class="tips">
Chic selects commodities from time to time to carry
out special price activities.
</view>
<view class="tips1">The quantity of special price commodities is limited and will be sold out</view>
<view class="recommend">
<view class="recommend_content">
<view class="recommend_content_item" v-for="(item,index) in list " :key="index">
<view class="recommend_content_item_image">
<image :src="item.goods_img" mode=""></image>
</view>
<view class="recommend_content_item_name">{{item.name}}</view>
<view class="recommend_item_operation">
<view>
<view class="recommend_content_item_pric">US${{item.promote_price?item.promote_price:item.shop_price}}</view>
<view class="recommend_content_item_pric1">US${{item.shop_price}}</view>
</view>
<image src="../../static/img/add.png" mode=""></image>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
list:[]
}
},
methods:{
getList(){
let data ={_action:'getseckillgoods',gid:'213'}
defaultRequest(data).then(res=>{
console.info(res)
if(res.error==0){
this.list=res.data
}
})
},
back(){
uni.navigateBack()
}
},
onLoad() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
.body{
border-top: 13.33rpx #F7F7F7 solid;
padding:0 26rpx;
padding-top: 34rpx;
}
.recommend{
padding: 0;
.recommend_item_operation{
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 10rpx;
.recommend_content_item_pric{
color: #B22234;
font-weight: 600;
font-size: 32rpx;
margin-top: 0;
}
.recommend_content_item_pric1{
font-size: 24rpx;
color: #666666;
text-decoration: line-through;
}
image{
width: 58.67rpx;
height: 58.67rpx;
}
}
}
.recommend_content_item_name{
overflow : hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2; /* 限制在一个块元素显示的文本的行数 */
-webkit-box-orient: vertical; /* 垂直排列 */
word-break: break-all; /* 内容自动换行 */
}
.countDown{
display: flex;
align-items: center;
font-size: 41.33rpx;
justify-content: center;
margin-bottom: 34rpx;
.countDown_assembly{
margin-left: 12.67rpx;
}
}
.tips{
width: 572.67rpx;
margin: 0 auto;
font-size: 24rpx;
margin-bottom: 14rpx;
text-align: center;
}
.tips1{
font-size: 20rpx;
color: #666666;
margin-bottom: 30rpx;
text-align: center;
}
</style>

736
pages/index/index.vue

@ -0,0 +1,736 @@
<template>
<view class="body" >
<!-- 头部导航栏 -->
<view class="navigation page_padding" >
<view class="status_bar"></view>
<view class="navigation_title" :class="isScrollShow?'isScrollShow':'' ">
<template v-if="!isScrollShow ">
<navigator url="/pages/account/message" class="order_info_item">
<uni-badge :text="5" type="error" absolute="rightTop">
<image src="../../static/img/msg.png" mode=""></image>
</uni-badge>
</navigator>
<!-- <text>Dope VIDEO</text> -->
<image src="/static/img/dope plus.png" mode="" class="index_logo"></image>
</template>
<view class="navigation_title_right">
<image src="../../static/img/like.png" mode=""></image>
<uni-badge :text="5" type="error" absolute="rightTop">
<image src="../../static/img/shop_cart.png" mode=""></image>
</uni-badge>
</view>
</view>
<navigator url="/pages/index/search">
<view class="navigation_seach" :class="isScrollShow?'isScrollShow1':'' ">
<image src="../../static/img/seach.png" mode=""></image>
<text>search</text>
</view>
</navigator>
<view class="navigation_scroll" :class="isScrollShow?'isScrollShow2':'' ">
<scroll-view class="scroll-view_H" scroll-x="true" :show-scrollbar="false">
<view :class="scroll_active==index?'scroll_active':''" v-for="(item,index) in scrollList" @click="scrollChange(index)" :key="index">{{item.text}}</view>
</scroll-view>
</view>
</view>
<view v-for="(item,index) in indexDate.zones" :key="item.zone_id">
<!-- 轮播图 -->
<view class="uni-margin-wrap page_padding" v-if="item.zone_code=='BANNER' && item.zone_status=='NORMAL'">
<swiper class="swiper" circular :indicator-dots="true" :autoplay="true" >
<swiper-item v-for="(item1,index1) in item.blocks" :key="item1.block_id">
<view class="swiper-item " v-if="item1.block_status=='NORMAL'">
<image :src="item1.block_pic" mode=""></image>
</view>
</swiper-item>
</swiper>
</view>
<!-- 宫格 -->
<uni-swiper-dot :info="info" :current="current" field="content" mode="default" class="page_padding"
v-if="item.zone_code=='ICON' && item.zone_status=='NORMAL' && item.zone_code!=indexDate.zones[index-1].zone_code">
<swiper class="grid_swiper" @change="gridSwiper">
<swiper-item v-for="(item1,index1) in info" :key="item1.zone_id">
<view class="grid_content">
<view class="grid_item" v-for="(item2, index2) in item1.blocks" :key="item2.block_id">
<template v-if="item2.block_status=='NORMAL'">
<view class="grid_item_img">
<image :src="item2.block_pic" mode=""></image>
</view>
<text>{{item2.block_title}}</text>
</template>
</view>
</view>
</swiper-item>
</swiper>
</uni-swiper-dot>
<!-- 打折 -->
<!-- class="discount page_padding" -->
<view class="ONEPIC" v-if="item.zone_code=='ONEPIC' && item.zone_status=='NORMAL'">
<image :src="item.blocks[0].block_pic" mode="" ></image>
</view>
<view class="TWOPIC" v-if="item.zone_code=='TWOPIC' && item.zone_status=='NORMAL'">
<image :src="item.blocks[0].block_pic" mode="" ></image>
</view>
<view class="THREEPIC" v-if="item.zone_code=='THREEPIC' && item.zone_status=='NORMAL'">
<image :src="item.blocks[0].block_pic" mode="" ></image>
</view>
<view class="FOURPIC" v-if="item.zone_code=='FOURPIC' && item.zone_status=='NORMAL'">
<image :src="item.blocks[0].block_pic" mode="" ></image>
</view>
<view class="FIVEPIC" v-if="item.zone_code=='FIVEPIC' && item.zone_status=='NORMAL'">
<image :src="item.blocks[0].block_pic" mode="" ></image>
</view>
<view class="SIXPIC" v-if="item.zone_code=='SIXPIC' && item.zone_status=='NORMAL'">
<image :src="item.blocks[0].block_pic" mode="" ></image>
</view>
<!-- 标题 -->
<navigator url="/pages/index/flashSale" v-if="item.zone_code=='SPIKE1' && item.zone_status=='NORMAL'">
<view class="index_title page_padding">
<text>Flash Sale</text>
<view class="title_right">
<uni-countdown :showDay="false" :hour="curEndTime |hours" :minute="curEndTime|minutes" :second="curEndTime|seconds" color="#FFFFFF" background-color="#1B1B1B" />
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
</navigator>
<!-- SPIKE 1 -->
<scroll-view class="spike1 page_padding_left" scroll-x="true" :show-scrollbar="false" v-if="item.zone_code=='SPIKE1' && item.zone_status=='NORMAL'">
<view class="spike1_item" v-for="(item1,index1) in item.blocks" :key="item1.block_id" @click="goPage">
<view class="spike1_item_img">
<image :src="item1.block_pic" mode=""></image>
</view>
<view class="spike1_item_bottom">
<text>US${{item1.block_price}}</text>
<view class="spike1_item_text">US${{item1.block_title}}</view>
</view>
</view>
</scroll-view>
<!-- 标题 -->
<view class="index_title page_padding" v-if="item.zone_code=='TITLE' && item.zone_status=='NORMAL'">
<text>{{item.blocks[0].block_title}}</text>
<view class="title_right">
<image src="../../static/img/right.png" mode=""></image>
</view>
</view>
<!-- HOT SELLS 1 -->
<view class="hotSells1 page_padding" v-if="item.zone_code=='GOODSTWO1' || item.zone_code=='GOODSTHREE1'">
<template v-if="item.zone_code=='GOODSTWO1' && item.zone_status=='NORMAL'">
<view class="hotSells1_item" v-for="(item1,index1) in item.blocks" :key="item1.block_id" >
<view class="hotSells1_item_img">
<image :src="item1.block_pic" mode=""></image>
</view>
<text>{{item1.block_title}}</text>
</view>
</template>
<template v-if="item.zone_code=='GOODSTHREE1' && item.zone_status=='NORMAL'">
<view class="hotSells2_item" v-for="(item1,index1) in item.blocks" :key="item1.block_id">
<view class="hotSells2_item_img">
<image :src="item1.block_pic" mode=""></image>
</view>
<text>{{item1.block_title}}</text>
</view>
</template>
</view>
<!-- 标题 -->
<!-- <view class="index_title page_padding">
<text>Hot Selle</text>
<view class="title_right">
<image src="../../static/img/right.png" mode=""></image>
</view>
</view> -->
<!-- HOT SELLS 2 -->
<scroll-view class="spike1 page_padding_left" scroll-x="true" :show-scrollbar="false" v-if="item.zone_code=='HONLIST2' && item.zone_status=='NORMAL'">
<view class="spike1_item" v-for="(item1,index1) in item.blocks" :key="item1.block_id">
<view class="spike1_item_img">
<image :src="item1.block_pic" mode=""></image>
</view>
</view>
</scroll-view>
<!-- 标题 -->
<!-- <view class="index_title page_padding">
<text>Hot Selle</text>
<view class="title_right">
<image src="../../static/img/right.png" mode=""></image>
</view>
</view> -->
<!-- HOT SELLS 3 -->
<scroll-view class="spike1 page_padding_left" scroll-x="true" :show-scrollbar="false" v-if="item.zone_code=='HONLIST3' && item.zone_status=='NORMAL'">
<view class="spike1_item" v-for="(item1,index1) in item.blocks" :key="item1.block_id">
<view class="spike1_item_img">
<image :src="item1.block_pic" mode=""></image>
</view>
<view class="spike1_item_bottom">
<text>US${{item1.block_price}}</text>
<view class="spike1_item_text1">{{item1.block_title}}</view>
</view>
</view>
</scroll-view>
<!-- GOODSTHREE 2 -->
<!-- <view class="goodsthree2">
<view class="goodsthree2_item" v-for="(item,index) in 3" :key="index"></view>
</view> -->
<!-- 轮播图 -->
<!-- <view class="uni-margin-wrap">
<swiper class="swiper" circular :indicator-dots="true" :autoplay="true" >
<swiper-item>
<view class="swiper-item uni-bg-red">A</view>
</swiper-item>
<swiper-item>
<view class="swiper-item uni-bg-green">B</view>
</swiper-item>
<swiper-item>
<view class="swiper-item uni-bg-blue">C</view>
</swiper-item>
</swiper>
</view> -->
<!-- SPIKE 1 -->
<!-- <scroll-view class="spike1 page_padding_left" scroll-x="true" :show-scrollbar="false">
<view class="spike1_item" v-for="(item,index) in 8" :key="index">
<view class="spike1_item_img"></view>
<view class="spike1_item_bottom1">
<view class="spike1_item_text">Adidas Yeezy Boost 350 DazzlingBlue Black</view>
<text>US$314.00</text>
</view>
</view>
</scroll-view> -->
<!-- 瀑布流标题 -->
<view class="index_title1" v-if="item.zone_code=='LIST1' && item.zone_status=='NORMAL'">PRODUCTS FRO YOU</view>
<view class="waterfall" v-if="item.zone_code=='LIST1' && item.zone_status=='NORMAL'">
<custom-waterfalls-flow :value="item.blocks" imageKey="block_pic">
<template v-slot:default="item1">
<view class="item">
<view class="title">{{item1.title}}</view>
<view class="desc">{{item1.block_price}}</view>
</view>
</template>
</custom-waterfalls-flow>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
isScrollShow:false,
scroll_active:0,
scrollList:[
{text:'DOPE'},{text:'VIDEO'},{text:'MEN'},{text:'KIDS'},{text:'PETS'},{text:'MEN'},{text:'PETS'},{text:'MEN'},
],
current:0,
list: [
{ image: 'https://via.placeholder.com/200x500.png/ff0000', title: 'Adidas Yeezy Boost 350 DazzlingBlue Black', desc: 'US$314.00' },
{ image: 'https://via.placeholder.com/200x200.png/2878ff', title: 'Adidas Yeezy Boost 350 DazzlingBlue Black', desc: 'US$314.00' }
],
indexDate:{},
info:[],
banner:{}
}
},
onLoad() {
this.getIndex()
console.info(this.curEndTime)
},
computed:{
//
curEndTime(){
const endtime = new Date(new Date().setHours(23,59,59,999)).getTime()
//
const nowtime=(new Date()).getTime();
var date3 = nowtime - endtime; //
date3 = Math.abs(date3)
return date3;
}
},
filters:{
hours (timestamp){
var leave1=timestamp%(24*3600*1000) //
var hours=Math.floor(leave1/(3600*1000))
return hours
},
minutes(timestamp){
var leave2=(timestamp%(24*3600*1000))%(3600*1000) //
var minutes=Math.floor(leave2/(60*1000))
return minutes
},
seconds(timestamp){
var leave3=((timestamp%(24*3600*1000))%(3600*1000))%(60*1000) //
var seconds=Math.round(leave3/1000)
return seconds
}
},
methods: {
//
getIndex(){
let data={_action:'getpagedata',pagecode:'HOME'}
defaultRequest(data).then(res=>{
console.info(res)
if(res.error==0){
this.indexDate=res.data
res.data.zones.map(item=>{
if(item.zone_code=='ICON'){
item.content=''
this.info.push(item)
}
})
}
})
},
goPage(){
uni.navigateTo({
url: '/pages/productDetails/index',
});
},
scrollChange(index){
this.scroll_active=index
},
gridSwiper(e){
this.current = e.detail.current
}
},
onPageScroll(res) {
if(res.scrollTop>40){
this.isScrollShow=true
}else if(res.scrollTop<40){
this.isScrollShow=false
}
},
}
</script>
<style lang="scss" scoped>
page{
background-color: white;
// position: relative;
}
.ONEPIC{
width: 100%;
height: auto;
image{
// height: auto;
width: 100%;
}
}
.TWOPIC{
width: 100%;
display: flex;
image{
width: 50%;
}
}
.THREEPIC{
width: 100%;
display: flex;
justify-content: space-between;
image{
width: 33%;
}
}
.FOURPIC{
width: 100%;
display: flex;
justify-content: space-between;
image{
width: 25%;
}
}
.FIVEPIC{
width: 100%;
display: flex;
justify-content: space-between;
image{
width: 20%;
}
}
.SIXPIC{
width: 100%;
display: flex;
justify-content: space-between;
image{
width: 16.6%;
}
}
.body{
padding-top: 361.33rpx;
}
.index_logo{
width: 270.33rpx !important;
height: 50rpx !important;
margin-left: 50rpx;
}
.isScrollShow{
float: right;
}
.isScrollShow1{
float: left;
margin-top: 20rpx;
width: 80% !important;
}
.isScrollShow2{
float: left;
}
.page_padding{
padding: 0 26.67rpx;
box-sizing: border-box;
}
.page_padding_left{
padding-left: 26.67rpx;
}
.navigation{
/* display: flex; */
position: fixed;
top: 0;
z-index: 99;
background: white;
width: 100%;
.navigation_title{
display: flex;
padding: 30rpx 0;
align-items: center;
justify-content: space-between;
image{
width: 44rpx;
height: 44rpx;
}
text{
font-family: Source Han Sans CN;
font-weight: 800;
font-style: italic;
font-size: 42.67rpx;
}
.navigation_title_right{
display: flex;
align-items: center;
>image:first-child{
margin-right: 32.67rpx;
}
}
}
.navigation_seach{
width: 100%;
background-color: #F5F6FA;
border-radius: 6.67rpx;
height: 66.67rpx;
display: flex;
align-items: center;
color: #8F9094;
font-size: 26.67rpx;
padding-left: 22rpx;
box-sizing: border-box;
image{
width: 29.33rpx;
height: 29.33rpx;
margin-right: 22rpx;
}
}
.navigation_scroll{
padding-top: 28rpx;
padding-bottom: 37.33rpx;
padding-left: 40rpx;
.scroll-view_H{
white-space: nowrap;
font-size: 26.67rpx;
color: #161616;
width: 100%;
// display: flex;
::-webkit-scrollbar {
width: 0;
height: 0;
background-color: transparent;
}
view{
margin-left: 46.67rpx;
display: inline-block;
font-weight: 600;
padding: 28.67rpx 0;
}
view:first-child{
margin-left: 0;
}
.scroll_active{
font-size: 32rpx;
border-bottom: 2.67rpx solid #000000;
}
}
}
}
.uni-margin-wrap{
width: 100%;
margin-bottom: 35.33rpx;
.swiper {
height: 373.33rpx;
.swiper-item {
display: block;
height: 373.33rpx;
line-height: 373.33rpx;
text-align: center;
color: white;
image{
width: 100%;
height: 100%;
}
}
.uni-bg-red{
background-color: red;
}
.uni-bg-green{
background-color: green;
}
.uni-bg-blue{
background-color: blue;
}
}
}
.grid_swiper {
height: 380rpx;
.grid_content{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
padding: 0 28rpx;
.grid_item{
width: 97.33rpx;
display: flex;
flex-direction: column;
align-items: center;
color: #1B1B1B;
font-size: 24rpx;
margin-bottom: 53.33rpx;
margin-right: 84rpx;
font-weight: 500;
.grid_item_img{
width: 100%;
height: 97.33rpx;
margin-bottom: 6.67rpx;
background-color: #8F9094;
image{
width: 100%;
height: 100%;
}
}
}
.grid_item:nth-child(n+4){
margin-right: 0;
}
}
}
.discount{
width: 100%;
height: 239.33rpx;
margin-bottom: 72.67rpx;
}
.index_title{
display: flex;
justify-content: space-between;
align-items: center;
font-size: 32rpx;
color: #161616;
font-weight: bold;
margin-bottom: 40rpx;
.title_right{
display: flex;
align-items: center;
image{
width: 22rpx;
height: 22rpx;
margin-left: 11.33rpx;
}
}
}
.spike1{
white-space: nowrap;
width: 100%;
margin-bottom: 70.67rpx;
::-webkit-scrollbar {
width: 0;
height: 0;
background-color: transparent;
}
.spike1_item{
color: #191919;
font-size: 26.67rpx;
margin-right: 16.67rpx;
width: 200rpx;
display: inline-block;
font-weight: 500;
.spike1_item_img{
width: 200rpx;
height: 200rpx;
// background-color: #999999;
image{
width: 100%;
height: 100%;
}
}
.spike1_item_bottom{
padding-left: 9.33rpx;
margin-top: 22.67rpx;
.spike1_item_text{
color: #9D9D9D;
font-size: 21.33rpx;
text-decoration: line-through;
}
.spike1_item_text1{
color: #9D9D9D;
font-size: 21.33rpx;
}
}
.spike1_item_bottom1{
padding-left: 9.33rpx;
margin-top: 19.33rpx;
font-weight: bold;
.spike1_item_text{
color: #000000;
font-size: 16rpx;
font-weight: 400;
margin-bottom: 20.67rpx;
white-space: break-spaces;
}
}
}
.spike1_item:last-child{
margin-right: 0;
}
}
.hotSells1{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
color: #000000;
font-size: 28rpx;
font-weight: 400;
margin-bottom: 69.33rpx;
.hotSells1_item{
width: 340rpx;
display: flex;
flex-direction: column;
.hotSells1_item_img{
width: 100%;
height: 266.67rpx;
background-color: #999999;
margin-bottom: 23.33rpx;
}
}
.hotSells2_item{
width: 224rpx;
display: flex;
flex-direction: column;
margin-top: 49.33rpx;
.hotSells2_item_img{
width: 100%;
height: 224rpx;
background-color: #999999;
margin-bottom: 25.33rpx;
}
}
}
.goodsthree2{
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 29.33rpx;
.goodsthree2_item{
width: 242.67rpx;
height: 204.67rpx;
background-color: #999999;
}
}
.index_title1{
text-align: center;
position: relative;
font-size: 29.33rpx;
font-weight: bold;
margin-top: 116rpx;
padding-bottom: 52rpx;
&:before{
content: '';
background-color: #000000;
height: 4rpx;
width: 53.33rpx;
position: absolute;
bottom: 13.33rpx;
left: 50%;
margin-left: -26.67rpx;
}
}
.waterfall{
background-color: #F8F7FB;
padding:0 25.33rpx;
box-sizing: border-box;
padding-top: 52.67rpx;
.item{
padding: 0 16.67rpx;
padding-bottom: 36.67rpx;
.title{
font-size: 29.33rpx;
font-weight: 400;
margin-top: 24.67rpx;
margin-bottom: 32.67rpx;
}
.desc{
font-size: 32rpx;
font-weight: 600;
}
}
}
</style>

92
pages/index/pickUpCentre.vue

@ -0,0 +1,92 @@
<template>
<view>
<uni-nav-bar left-icon="left" :statusBar="true" title="Pick up centre" color="#000000" @clickLeft="back" :border="false">
<block slot="right">
<view class="head_coupons">
<image src="../../static/img/coupons.png" mode=""></image>
</view>
</block>
</uni-nav-bar>
<view class="body">
<view class="coupons_item" v-for="(item,index) in list " :key="index">
<view class="coupons_item_left">
<view class="item_left_prcie">${{item.type_money}}</view>
<text class="item_left_span">Min.spend</text>
<view>${{item.min_goods_amount}}</view>
</view>
<view class="coupons_item_right">
<view class="coupons_right_info">
<view class="coupons_right_info_title">{{item.type_name}}</view>
<text>The tide zone is available</text>
<view class="coupons_right_info_time">{{item.send_start_date}} - {{item.send_end_date}}</view>
</view>
<button v-if="item.is_obtained==0" @click="obtainbonus(item.type_id)">Receive</button>
<image src="../../static/img/coupons_bg.png" mode="" class="coupons_item_right_bg" v-if="item.is_obtained==1"></image>
</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest,defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
list:[]
}
},
methods:{
obtainbonus(id){
let data={_action:'obtainbonus',type_id:id}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
icon:'none',
title:res.message
})
}
this.getList()
})
},
getList(){
let data={_action:'getbonuslist'}
defaultRequest(data).then(res=>{
console.info(res)
if(res.error==0){
this.list=res.data
}
})
},
back(){
uni.navigateBack()
},
},
onLoad() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
.body{
border-top: 14.67rpx #F7F7F7 solid;
padding:0 26rpx;
padding-top: 31.33rpx;
}
.head_coupons{
width: 34.67rpx;
height: 34.67rpx;
image{
width: 100%;
height: 100%;
}
}
</style>

168
pages/index/search.vue

@ -0,0 +1,168 @@
<template>
<view>
<view class="status_bar"></view>
<view class="search_title">
<navigator data="1" open-type="navigateBack">
<image src="../../static/img/left.png" mode=""></image>
</navigator>
<uni-search-bar @confirm="search" v-model="searchValue" class="search_title_input" cancelText="Cancel" placeholder="search"></uni-search-bar>
</view>
<view class="history">
<view class="history_title">
<text>Recently Searched</text>
<image src="../../static/img/delete.png" mode=""></image>
</view>
<view class="history_lable">
<view class="lable_item">Gold Necklaces</view>
<view class="lable_item">Push Up Swimsuit</view>
</view>
</view>
<view class="history">
<view class="history_title">
<text>Figured youd want it</text>
</view>
<view class="history_lable">
<view class="lable_item">Gold Necklaces</view>
<view class="lable_item">Push Up Swimsuit</view>
</view>
<scroll-view class="spike1 page_padding_left" scroll-x="true" :show-scrollbar="false">
<view class="spike1_item" v-for="(item,index) in 8" :key="index">
<view class="spike1_item_img"></view>
<view class="spike1_item_bottom">
<text>US$314.00</text>
<view class="spike1_item_text">US$12.5</view>
</view>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
searchValue:''
}
},
methods:{
search(){
if(this.searchValue=='')return
uni.navigateTo({
url:'../category/productList?keyword='+this.searchValue+'&type=1'
})
}
}
}
</script>
<style lang="scss" scoped>
.search_title{
width: 100%;
// height: 135.33rpx;
padding: 0 26.67rpx;
display: flex;
align-items: center;
image{
width: 36rpx;
height: 36rpx;
}
.search_title_input{
width: 85%;
}
}
.history{
margin-top: 62.67rpx;
padding: 0 26.67rpx;
margin-bottom: 85.33rpx;
.history_title{
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
font-weight: 500;
margin-bottom: 26.67rpx;
image{
width: 29.33rpx;
height: 29.33rpx;
}
}
.history_lable{
display: flex;
flex-wrap: wrap;
.lable_item{
padding: 13.33rpx 16rpx;
background-color: #F5F6FA;
color: #565656;
font-size: 24rpx;
margin-right: 24.67rpx;
border-radius: 5px;
}
.lable_item:last-child{
margin-right:0
}
}
.spike1{
white-space: nowrap;
width: 100%;
margin-bottom: 70.67rpx;
margin-top: 32rpx;
::-webkit-scrollbar {
width: 0;
height: 0;
background-color: transparent;
}
.spike1_item{
color: #191919;
font-size: 26.67rpx;
margin-right: 16.67rpx;
width: 200rpx;
display: inline-block;
font-weight: 500;
.spike1_item_img{
width: 200rpx;
height: 200rpx;
background-color: #999999;
}
.spike1_item_bottom{
padding-left: 9.33rpx;
margin-top: 22.67rpx;
.spike1_item_text{
color: #9D9D9D;
font-size: 21.33rpx;
text-decoration: line-through;
}
}
.spike1_item_bottom1{
padding-left: 9.33rpx;
margin-top: 19.33rpx;
font-weight: bold;
.spike1_item_text{
color: #000000;
font-size: 16rpx;
font-weight: 400;
margin-bottom: 20.67rpx;
white-space: break-spaces;
}
}
}
.spike1_item:last-child{
margin-right: 0;
}
}
}
</style>

73
pages/login/changePwd.vue

@ -0,0 +1,73 @@
<template>
<view>
<view class="login">
<input type="text" class="login_input" placeholder="New password" v-model="query.password1" @input="verificationLogin">
<input type="text" class="login_input" placeholder="Confirm password" v-model="query.password2" @input="verificationLogin">
<button class="login_submit" :disabled="isLogin" @click="submit">SUBMIT</button>
</view>
</view>
</template>
<script>
import {defaultRequest} from '../../api/index.js'
export default {
data() {
return {
query:{
_action:'resetuserpwd',
username:'',
password1:'',
password2:'',
resetcode:''
},
isLogin:true,
user_info:{}
}
},
methods:{
submit(){
defaultRequest(this.query).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
setTimeout(function() {
uni.navigateBack({
delta:2
})
},2000)
}
})
},
//
verificationLogin(){
if(this.query.password1&& this.query.password2){
this.isLogin=false
}else{
this.isLogin=true
}
},
},
onLoad(e) {
console.info(e)
this.query.username=e.username
this.query.resetcode=e.resetcode
this.user_info=uni.getStorageSync('user_info')
}
}
</script>
<style lang="scss">
page{
border-top: 13.33rpx #F7F7F7 solid;
padding-top: 48rpx;
}
</style>
<style lang="scss" scoped>
.login_submit{
font-size: 26.67rpx;
}
</style>

261
pages/login/index.vue

@ -0,0 +1,261 @@
<template>
<view class="login_body">
<view class="status_bar"></view>
<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="text" activeColor="#010101" class="select"></uni-segmented-control>
<view class="body">
<view class="login" v-show="current==0">
<input type="text" class="login_input" placeholder="eamil address" v-model="loginDate.username" @input="verificationLogin">
<input type="text" class="login_input" placeholder="password" v-model="loginDate.password" @input="verificationLogin">
<view class="tips" v-show="loginErr">{{errMsg}}</view>
<view class="forgot" @click="forgotPwd">Forgot your Password?</view>
<button class="login_submit" :disabled="isLogin" @click="login()">SIGN IN</button>
<view class="agreement">
<image src="../../static/img/select2.png" mode="" class="agreement_image" @click="loginSelect=!loginSelect,loginErr=false" v-show="!loginSelect"></image>
<image src="../../static/img/select1.png" mode="" class="agreement_image" @click="loginSelect=!loginSelect" v-show="loginSelect"></image>
<view class="agreement_right">
by continuong, you agree to be <text class="text"> terms of use </text> and <text class="text"> privacy policy</text>.
</view>
</view>
</view>
<view class="login" v-show="current==1">
<input type="text" class="login_input" placeholder="name" @input="verificationReg" v-model="regDate.username">
<input type="text" class="login_input" placeholder="eamil address" @input="verificationReg" v-model="regDate.email">
<input type="text" class="login_input" placeholder="password" @input="verificationReg" v-model="regDate.password1">
<view class="tips" v-show="regErr">{{errMsg}}</view>
<button class="login_submit" :disabled="isReg" @click="Reg()">REGISTER</button>
<view class="agreement">
<image src="../../static/img/select2.png" mode="" class="agreement_image" @click="regSelect=!regSelect" v-show="!regSelect"></image>
<image src="../../static/img/select1.png" mode="" class="agreement_image" @click="regSelect=!regSelect" v-show="regSelect"></image>
<view class="agreement_right">
by continuong, you agree to be <text class="text"> terms of use </text> and <text class="text"> privacy policy</text>.
</view>
</view>
</view>
<view class="mode">
<view class="mode_title">or continue with</view>
<view class="mode_content">
<image src="/static/img/facebook.png" class="mode_content_image"></image>
<image src="/static/img/gugei.png" class="mode_content_image"></image>
<image src="/static/img/apple.png" class="mode_content_image"></image>
</view>
</view>
</view>
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="Close" confirmText="Activation" title="Tips" content="Please activate the mailbox first"
@confirm="dialogConfirm" ></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest1,defaultRequest} from '../../api/index.js'
export default {
data() {
return {
items: ['SIGN IN', 'REGISTER'],
current: 0,
loginDate:{
username:'',
password:'',
_action:'loginbyun'
},
regDate:{
username:'',
email:'',
password1:'',
password2:'',
_action:'registerun'
},
//
isLogin:true,
isReg:true,
//
regSelect:false,
loginSelect:false,
//
loginErr:false,
regErr:false,
errMsg:'The email address or password you enterde is incorrect.',
query:{
_action:'sendmessagesforvalidation',
username:'',
}
}
},
methods:{
forgotPwd(){
if(this.loginDate.username==''){
uni.showToast({
title:'Please fill in the user email first',
icon:'none',
})
return
}
uni.navigateTo({
url:'./verifyEmail?email='+this.loginDate.username
})
},
onClickItem(e) {
if (this.current != e.currentIndex) {
this.current = e.currentIndex;
}
},
//
configuration(){
let data={_action:'getpagedata',pagecode:'PAGE-LOGIN'}
defaultRequest1(data).then(res=>{
console.info(res)
})
},
//
login(){
if(!this.loginSelect){
this.errMsg='Please read and tick the terms of service and privacy policy first.'
this.loginErr=true
return
}
defaultRequest1(this.loginDate).then(res=>{
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
}else{
this.loginErr=true
this.errMsg=res.message
}
}
})
},
//
dialogConfirm(){
defaultRequest(this.query).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none',
})
}
})
},
//
Reg(){
if(!this.regSelect){
uni.showToast({
title:'请先同意并勾选用户协议',
icon:'none',
})
return
}
this.regDate.password2=this.regDate.password1
defaultRequest1(this.regDate).then(res=>{
console.info(res)
if(res.error==0){
this.regErr=false
uni.showToast({
title:'注册成功,请进行邮箱验证!',
icon:'success',
})
}else{
this.regErr=true
this.errMsg=res.message
}
})
},
//
verificationLogin(){
if(this.loginDate.username && this.loginDate.password){
this.isLogin=false
}else{
this.isLogin=true
}
},
//
verificationReg(){
if(this.regDate.username && this.regDate.password1 && this.regDate.email){
this.isReg=false
}else{
this.isReg=true
}
}
},
onLoad() {
this.configuration()
}
}
</script>
<style lang="scss" scoped>
.login_body{
padding-top: 145.33rpx;
}
.select{
margin-bottom: 80rpx;
font-size: 33.33rpx;
font-weight: bold;
}
.mode{
position: fixed;
bottom: 138.67rpx;
width: 100%;
left: 0;
.mode_title{
font-size: 26.67rpx;
color: #666666;
position: relative;
text-align: center;
width: 100%;
&:before{
content: "";
height: 1px;
width: 89.33rpx;
background-color: #BCBCBC;
position: absolute;
left: 20%;
top: 50%;
}
&:after{
content: "";
height: 1px;
width: 89.33rpx;
background-color: #BCBCBC;
position: absolute;
right: 20%;
top: 50%;
}
}
.mode_content{
display: flex;
align-items: center;
justify-content: center;
margin-top: 50.67rpx;
.mode_content_image{
width: 54.67rpx;
height: 54.67rpx;
margin-right: 49.33rpx;
&:last-child{
margin-right: 0;
}
}
}
}
.agreement_right{
width: 582rpx;
}
</style>

159
pages/login/verifyEmail.vue

@ -0,0 +1,159 @@
<template>
<view>
<view class="login">
<view class="verify_tips">
To verify your email,we've send a verification code to {{username}}
</view>
<input type="text" class="login_input" placeholder="Enter code" v-model="resetcode" @input="verificationLogin">
<view class="tips" v-show="isErr">The code is incorrect.</view>
<button class="login_submit" :disabled="isLogin" @click="goPage">CONTINUE</button>
<view class="verify_text" @click="sendresetcode">Resend code</view>
</view>
<view class="mask" v-show="isShow" @click="isShow=false"></view>
<view class="verify_popup" v-show="isShow">
<view class="verify_popup_close">
<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 {{query.username}}</view>
<view class="verify_popup_btn">
<button @click="isShow=false">OKAY</button>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest,defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
isShow:false,
isErr:false,
isLogin:true,
username:'',
type:'',
resetcode:'',
query:{
_action:'sendresetcode',
username:'',
// password:'',
}
}
},
methods:{
goPage(){
console.info(this.username)
uni.navigateTo({
url:'changePwd?resetcode='+this.resetcode+'&username='+this.username
})
},
sendresetcode(){
defaultRequest(this.query).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
title:res.message,
icon:'none'
})
this.isShow=true
}
})
},
//
verificationLogin(){
if(this.resetcode){
this.isLogin=false
}else{
this.isLogin=true
}
},
},
onLoad(e) {
console.info(e)
this.type=e.type
if(e.type!=0){
// this.query.password=e.password
this.query.username=e.email
}else{
}
this.username=e.email
this.sendresetcode()
}
}
</script>
<style lang="scss">
page{
border-top: 13.33rpx #F7F7F7 solid;
padding-top: 49.33rpx;
}
</style>
<style lang="scss" scoped>
.verify_tips{
font-size: 28rpx;
font-weight: bold;
margin-bottom: 52rpx;
}
.tips{
margin: 44rpx 0;
}
.login_submit{
margin-bottom: 33.33rpx;
}
.verify_text{
font-size: 24rpx;
text-align: center;
font-weight: bold;
}
.verify_popup{
width: 540rpx;
height: 366.67rpx;
position: fixed;
left: 50%;
margin-left: -270rpx;
top: 50%;
margin-top: -190rpx;
background-color: white;
border-radius: 20rpx;
z-index: 999;
box-sizing: border-box;
padding:15rpx 22rpx;
.verify_popup_close{
text-align: right;
image{
width: 40rpx;
height: 40rpx;
}
}
.verify_popup_title{
font-size: 40rpx;
font-weight: 600;
text-align: center;
margin-bottom: 40rpx;
}
.verify_popup_msg{
font-size: 26.67rpx;
font-weight: 400;
margin-bottom: 40rpx;
text-align: center;
}
.verify_popup_btn{
text-align: center;
button{
width: 321.33rpx;
height: 56rpx;
border-radius: 28rpx;
background-color: black;
color: white;
border: none;
font-size: 26.67rpx;
font-weight: bold;
line-height: 56rpx;
}
}
}
</style>

540
pages/order/confirmation.vue

@ -0,0 +1,540 @@
<template>
<view>
<view class="address" @click="goAddress">
<view class="address_left">
<view class="address_title">
<image src="../../static/img/address.png" mode=""></image>
<view class="address_title_name">{{address.consignee}}</view>
<text>{{address.mobile}}</text>
</view>
<view class="address_content">
{{address.sign_building}}
{{address.country_name}}{{address.province_name}}{{address.city_name}}{{address.address}}{{address.zipcode}}
</view>
</view>
<image src="../../static/img/right.png" class="address_more"></image>
<image src="../../static/img/address_xian.png" class="address_xian" mode=""></image>
</view>
<view class="order_info" @click="openMore(0)">
<view class="info_title">
<text>Items in cart</text>
<view class="info_title_right">
<text>{{goods_list.length}} ltems</text>
<image src="../../static/img/right.png" class="address_more"></image>
</view>
</view>
<view class="info_image">
<image class="info_image_item" :src="item.goods_thumb" v-for="(item,index) in goods_list" :key="index"/>
</view>
</view>
<view class="method" v-if="shipping_list">
<view class="method_title">Shipping Method</view>
<view class="method_item" v-for="(item,index) in shipping_list " :key="index">
<view class="method_item_image" @click="cartselectshipping(item.shipping_id)">
<image src="../../static/img/select1.png" style="width: 30rpx;height: 30rpx;" v-if="order.shipping_id==item.shipping_id"></image>
<image src="../../static/img/select2.png" style="width: 30rpx;height: 30rpx;"v-else ></image>
</view>
<view class="method_item_right">
<view class="item_price">
<text>{{item.shipping_name}}:</text>
<text class="item_price_span">US${{item.shipping_fee}}</text>
</view>
<view class="item_time">
<text class="item_time_span">{{item.shipping_desc}} </text>
<!-- <text> 15/05/2022-04/05/2022</text> -->
</view>
</view>
</view>
</view>
<view class="discount">
<view class="discount_item" @click="openMore(1)">
<text>Coupons</text>
<view class="discount_item_right">
<text v-show="isCoupons">-US$12.5</text>
<image src="../../static/img/right.png" mode="" class="address_more"></image>
</view>
</view>
<view class="discount_item" @click="openMore(3)">
<view class="discount_item_left">
<text>Points</text>
<text class="discount_item_left_span">({{orderDate.your_integral || 0}})</text>
</view>
<view class="discount_item_right">
<text v-show="isPoints">-US$2.5</text>
<image src="../../static/img/right.png" mode="" class="address_more"></image>
</view>
</view>
</view>
<view class="settlement">
<view class="settlement_item">
<text>Subtotal:</text>
<text class="settlement_item_right">US${{total.goods_price}}</text>
</view>
<view class="settlement_item">
<text>Shipping fee:</text>
<text class="settlement_item_right">US${{total.shipping_fee}}</text>
</view>
<view class="settlement_item">
<text>Discount :</text>
<text class="settlement_item_right1">-US${{total.discount || 0}}</text>
</view>
</view>
<view class="total">
<text>Total: US${{total.amount}}</text>
<button @click="openMore(2)">PLACE ORDER</button>
</view>
<view class="mask" v-show="isShow" @click="isShow=false"></view>
<view class="order_popup" v-show="isShow">
<view class="order_popup_title">
<text>
{{popup_index==0?'Commodity information':popup_index==1?'Coupons':popup_index==2?'Payment Method':'Points'}}<text v-show="popup_index==3">(total:<text class="order_popup_title_span" >{{orderDate.your_integral || 0}}</text>)</text>
</text>
<image src="../../static/img/close1.png" mode="" @click="isShow=false"></image>
</view>
<view class="order_popup_commodity" v-show="popup_index==0">
<view class="good_info" v-for="(item,index) in goods_list " :key="index">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item.goods_thumb" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>x{{item.goods_number}}</text>
</view>
<view class="info_price">US${{item.goods_price}}</view>
</view>
</view>
</view>
</view>
<view class="order_popup_coupons" v-show="popup_index==1">
<view class="coupons_item" v-for="(item,index) in 3 " :key="index">
<view class="coupons_item_left">
<view class="item_left_prcie">$20.00</view>
<text class="item_left_span">Min.spend</text>
<view>$200.00</view>
</view>
<view class="coupons_item_right">
<view class="coupons_right_info">
<view class="coupons_right_info_title">All-purpose</view>
<text>The tide zone is available</text>
<view class="coupons_right_info_time">2022.09.23 10:37 - 2022.12.23 10:37</view>
</view>
<button>Use Now</button>
<image src="../../static/img/select3.png" mode="" class="coupons_item_right_select"></image>
</view>
</view>
</view>
<view class="order_popup_pay" v-show="popup_index==2">
<view class="pay_item" @click="selectPay(0)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==0"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/pay_pal.png" mode=""></image>
<text>Pay Pal</text>
</view>
</view>
<view class="pay_item" @click="selectPay(1)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==1"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/card.png" mode=""></image>
<text>Credit/Debit Card</text>
</view>
</view>
<view class="pay_item" @click="selectPay(2)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==2"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/GPay.png" mode=""></image>
<text>Google Pay</text>
</view>
</view>
<view class="pay_item" @click="selectPay(3)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==3"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/APay.png" mode=""></image>
<text>Apple pay</text>
</view>
</view>
<!-- <navigator url="/pages/order/paySuccess"> -->
<button @click="submitorder">PAY NOW</button>
<!-- </navigator> -->
</view>
<view class="order_popup_points" v-show="popup_index==3">
<view class="points_item">
<image src="../../static/img/select2.png" mode=""></image>
<text>Use points</text>
</view>
<view class="points_item">
<image src="../../static/img/select1.png" mode=""></image>
<text>Do not use points</text>
</view>
</view>
</view>
<!-- <pay :payShow="" :orderId=""></pay> -->
</view>
</template>
<script>
import {defaultRequest2,defaultRequest3} from '../../api/index.js'
export default {
data() {
return {
isShow:false,
popup_index:'',
isCoupons:false,
isPoints:false,
query:{
_action:'cartcheckout',
is_new:0,
direct_shopping:0,
consignee:''
},
orderDate:{},
address:{},
goods_list:[],
shipping_list:[],
bonus_list:[],
total:{},
order:{},
// : 0 1 2 4
pay_index:0
}
},
methods:{
//
getPayDate(id,will_get_integral){
let data={_action:'payorder',order_id:id,order_type:'GOODSBUY',payment_method:'alipay.native'}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
//
if(res.data.need_pay_amount==0) return
uni.requestPayment({
provider: 'alipay',
orderInfo: res.data.prepay_data.order_info, //
success: function (res) {
console.log('success:' + JSON.stringify(res));
uni.redirectTo({
url: 'paySuccess?type=0&order_id='+id+'&will_get_integral='+will_get_integral
});
},
fail: function (err) {
console.log('fail:' + JSON.stringify(err));
uni.redirectTo({
url: 'paySuccess?type=1&order_id='+id+'&will_get_integral='+will_get_integral
});
}
});
}
})
},
//
selectPay(index){
this.pay_index=index
},
goAddress(){
uni.navigateTo({
url:'../account/address?type=1'
})
},
//
submitorder(){
let data={
_action:'submitorder',
consignee:this.address,
postscript:'',
bonus:this.order.bonus,
surplus:this.order.surplus,
shipping_id:this.order.shipping_id,
directshopping:0,
}
defaultRequest3(data,'consignee').then(res=>{
console.info(res)
if(res.error==0){
this.getPayDate(res.data.order.order_id,res.data.will_get_integral)
}
})
},
//
cartselectshipping(id){
let data={_action:'cartselectshipping',shipping_id:id,consignee:this.address}
defaultRequest3(data,'consignee').then(res=>{
console.info(res)
if(res.error==0){
this.total=res.data.total
this.order=res.data.order
}
})
},
getList(){
defaultRequest3(this.query,'consignee').then(res=>{
console.info(res)
if(res.error==0){
this.orderDate=res.data
this.address=res.data.consignee
this.goods_list=res.data.goods_list
this.shipping_list=res.data.shipping_list
if(res.data.bonus_list){
this.bonus_list=res.data.bonus_list
}
this.total=res.data.total
this.order=res.data.order
}
})
},
openMore(i){
this.popup_index=i
if(i==1){
if(this.bonus_list.length==0){
uni.showToast({
icon:'none',
title:'No coupon available'
})
return
}
if(this.orderDate.allow_use_bonus==0){
uni.showToast({
icon:'none',
title:'Coupon cannot be used for this product'
})
return
}
}else if(i==3){
if(this.orderDate.allow_use_integral==0){
uni.showToast({
icon:'none',
title:'Points cannot be used for this product'
})
return
}
}
this.isShow=true
}
},
onLoad(e) {
this.query=JSON.parse(e.query)
this.getList()
},
onShow() {
uni.$once('query' ,(query)=>{
console.info(query)
if(query.type=='address'){
this.query.consignee=query.consignee
this.query.is_new=0
this.getList()
}
});
},
filters:{
goodsAttr(e){
return e.replace(/\s\n/g,';');
}
}
}
</script>
<style>
page{
border-top:14.67rpx #F6F5FA solid ;
padding-bottom: 140rpx;
}
</style>
<style lang="scss" scoped>
@import "@/common/scss/order.scss";
.order_info{
padding-left: 26.67rpx;
padding-right: 22.67rpx;
padding-top: 50.67rpx;
padding-bottom: 42.67rpx;
border-bottom:14.67rpx #F6F5FA solid ;
.info_title{
display: flex;
align-items: center;
justify-content: space-between;
font-weight: bold;
font-size: 26.67rpx;
.info_title_right{
display: flex;
align-items: center;
color: #666666;
font-size: 24rpx;
image{
margin-left: 33.33rpx;
}
}
}
.info_image{
display: flex;
margin-top: 26.67rpx;
.info_image_item{
width: 133.33rpx;
height: 133.33rpx;
margin-right: 12rpx;
background-color: #999999;
}
}
}
.method{
border-bottom:14.67rpx #F6F5FA solid ;
padding-top: 50rpx;
.method_title{
font-size: 26.67rpx;
font-weight: bold;
padding-left: 25.33rpx;
}
.method_item{
padding:41.33rpx 0 ;
border-bottom: 1px #E2E2E2 solid;
padding-left: 42.67rpx;
padding-right: 29.33rpx;
display: flex;
align-items: center;
&:last-child{
border-bottom: none;
}
.method_item_image{
width: 30rpx;
height: 30rpx;
image{
width: 100%;
height: 100%;
}
}
.method_item_right{
margin-left: 30.67rpx;
.item_price{
font-size: 28rpx;
margin-bottom: 14rpx;
.item_price_span{
color: #B22234;
}
}
.item_time{
font-size: 25.33rpx;
font-weight: 400;
.item_time_span{
color: #555555;
}
}
}
}
}
.discount{
border-bottom:14.67rpx #F6F5FA solid ;
padding-left: 26rpx;
padding-right: 22.67rpx;
padding-top: 42rpx;
padding-bottom: 45.33rpx;
.discount_item{
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
margin-bottom: 42rpx;
&:last-child{
margin-bottom: 0;
}
.discount_item_left{
.discount_item_left_span{
color: #666666;
}
}
.discount_item_right{
display: flex;
align-items: center;
color: #B22234;
font-weight: bold;
image{
margin-left: 14rpx;
}
}
}
}
.settlement{
border-bottom:14.67rpx #F6F5FA solid ;
padding: 44rpx 26rpx;
.settlement_item{
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
margin-bottom: 44rpx;
&:last-child{
margin-bottom: 0;
}
.settlement_item_right{
color: #3C3B6E;
font-weight: bold;
}
.settlement_item_right1{
color: #B22234;
font-weight: bold;
}
}
}
.total{
padding: 30.67rpx 0;
padding-left: 26rpx;
padding-right: 19.33rpx;
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
background-color: white;
z-index: 99;
box-sizing: border-box;
font-size: 36rpx;
font-weight: 600;
button{
font-size: 26.67rpx;
color: white;
height: 73.33rpx;
line-height: 73.33rpx;
border-radius: 0;
border: none;
background-color: black;
margin: 0;
}
}
</style>

393
pages/order/details.vue

@ -0,0 +1,393 @@
<template>
<view class="body">
<view class="details_title">
<view class="shipped" v-if="details_index==0">
<view class="shipped_left">
<image src="../../static/img/order_shipped.png" mode=""></image>
</view>
<view>
<text class="shipped_right_text">Ready for shipment</text>
<view>The buyer has paid,Waiting for the merchant to deliver</view>
</view>
</view>
<view class="cancelled" v-if="details_index==1">
<view class="cancelled_left">
<image src="../../static/img/close2.png" mode=""></image>
<view class="cancelled_left_info">
<text class="shipped_right_text">Deals off</text>
<view>The transaction has been closed, looking forward to your re-selection</view>
</view>
</view>
</view>
<view class="cancelled completed" v-if="details_index==2">
<view class="cancelled_left">
<image src="../../static/img/completed.png" mode=""></image>
<view class="cancelled_left_info">
<text class="shipped_right_text">Signed for</text>
<view>2022-04-27 21:15:55</view>
</view>
</view>
<view class="cancelled_right">
<image src="../../static/img/right2.png" mode=""></image>
</view>
</view>
<view class="cancelled toPaid" v-if="details_index==3">
<view class="cancelled_left">
<view >
<text class="shipped_right_text">Waiting for payment</text>
<view>The timeout order will be closed automatically</view>
</view>
</view>
<view class="cancelled_right">
<text class="shipped_right_text">23:59:58</text>
<view>T-minus payment</view>
</view>
</view>
<view class="cancelled transit" @click="goLogistics" v-if="details_index==4">
<view class="cancelled_left" >
<image src="../../static/img/transit.png" mode=""></image>
<view class="cancelled_left_info">
<view class="shipped_right_text">New YorkHas arrived statesHas arrived states</view>
<view>2022-04-27 21:15:55</view>
</view>
</view>
<view class="cancelled_right">
<image src="../../static/img/right2.png" mode=""></image>
</view>
</view>
</view>
<view class="address">
<view class="address_left">
<view class="address_title">
<image src="../../static/img/address.png" mode=""></image>
<view class="address_title_name">{{goodsDate.consignee}}</view>
<text>{{goodsDate.mobile}}</text>
</view>
<view class="address_content">
<text>{{goodsDate.sign_building}}</text>
<view >{{goodsDate.address_detail}}</view>
</view>
</view>
<image src="../../static/img/right.png" class="address_more"></image>
<image src="../../static/img/address_xian.png" class="address_xian" mode=""></image>
</view>
<view class="order_popup_commodity">
<view class="good_info" v-for="(item,index) in goods_list " :key="index">
<view class="good_info_left ">
<view class="good_info_image" >
<image :src="item.goods_thumb" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>x{{item.goods_number}}</text>
</view>
<view class="info_price">
<text>US${{item.subtotal}}</text>
<button v-if="details_index!=3 && details_index!=1">RREFUND</button>
</view>
</view>
</view>
</view>
</view>
<view class="summary">
<view class="summary_title">Order summary</view>
<view class="summary_item">
<view>
Subtotal
<text :class="details_index==4?'summary_item_text1':'summary_item_text'">Tax included</text>
</view>
<view class="summary_item_right">US${{goodsDate.goods_amount}}</view>
</view>
<view class="summary_item">
<view>Shipping</view>
<view class="summary_item_right">US${{goodsDate.shipping_fee}}</view>
</view>
<view class="summary_item">
<view>Coupon</view>
<view class="summary_item_right1">-US${{goodsDate.discount}}</view>
</view>
<view class="summary_item">
<view>Order total</view>
<view>US${{goodsDate.order_amount}}</view>
</view>
<view class="summary_tips" v-if="details_index==3">
<image src="../../static/img/gantan1.png" mode=""></image>
<text>Reward 10 points</text>
</view>
</view>
<view class="summary">
<view class="summary_title">Order information</view>
<view class="summary_item">
<view>Order id</view>
<view class="summary_item_right">
<text>{{goodsDate.order_sn}}</text>
<button>copy</button>
</view>
</view>
<view class="summary_item">
<view>Shipping</view>
<view class="summary_item_right">{{goodsDate.shipping_name}}</view>
</view>
<view class="summary_item">
<view>Order Time</view>
<view class="summary_item_right">{{goodsDate.formated_add_time}}</view>
</view>
<view class="summary_item" v-if="details_index!=3 && goodsDate.formated_pay_time">
<view>Payment time</view>
<view class="summary_item_right">{{goodsDate.formated_pay_time}}</view>
</view>
<view class="summary_item" v-if="details_index==4">
<view>Delivery time</view>
<view class="summary_item_right">{{goodsDate.formated_shipping_time}}</view>
</view>
<!-- 完成时间 -->
<view class="summary_item" v-if="details_index==2">
<view>Completion time</view>
<view class="summary_item_right"></view>
</view>
<!-- 取消时间 -->
<view class="summary_item" v-if="details_index==1">
<view>Cancel time</view>
<view class="summary_item_right"></view>
</view>
</view>
<view class="details_footer" v-if="details_index!=0">
<button class="white" v-if="details_index==2 || details_index==4" @click="goLogistics">LOGISTICS</button>
<button class="white" v-if="details_index==1 || details_index==2" @click.stop="openTips(1)">DELETE ORDER</button>
<button class="black" v-if="details_index==2 && goodsDate.comment_status_code==0" @click="goComment()">COMMENT</button>
<button class="white" v-if="details_index==3 " @click.stop="openTips(0)">CANCEL ORDER</button>
<button class="black" v-if="details_index==3" @click="isPay=true">PAY NOW</button>
<button class="black" v-if="details_index==4" @click.stop="openTips(2)">CONFIRM RECEIPT</button>
</view>
<!-- 支付 -->
<view class="mask" v-show="isPay" @click="isPay=false"></view>
<view class="order_popup" v-show="isPay">
<view class="order_popup_title">
<text>
Payment Method
</text>
<image src="../../static/img/close1.png" mode="" @click="isPay=false"></image>
</view>
<view class="order_popup_pay" >
<view class="pay_item" @click="selectPay(0)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==0"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/pay_pal.png" mode=""></image>
<text>Pay Pal</text>
</view>
</view>
<view class="pay_item" @click="selectPay(1)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==1"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/card.png" mode=""></image>
<text>Credit/Debit Card</text>
</view>
</view>
<view class="pay_item" @click="selectPay(2)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==2"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/GPay.png" mode=""></image>
<text>Google Pay</text>
</view>
</view>
<view class="pay_item" @click="selectPay(3)">
<image src="../../static/img/select1.png" mode="" class="pay_item_select" v-if="pay_index==3"></image>
<image src="../../static/img/select2.png" mode="" class="pay_item_select" v-else></image>
<view class="pay_item_right">
<image src="../../static/img/APay.png" mode=""></image>
<text>Apple pay</text>
</view>
</view>
<button @click="getPayDate">PAY NOW</button>
</view>
</view>
<!-- 删除取消弹框 -->
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="Close" :confirmText="tipsBut" title="Tips" :content="tipsInfo" @confirm="dialogConfirm" ></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
// 0 1 2 3 4
details_index:4,
query:{
_action:'getorder',
order_id:'',
order_sn:''
},
goodsDate:{},
goods_list:[],
isPay:false,
payQuery:{
_action:'payorder',
order_id:'',
order_type:'GOODSBUY',
payment_method:'alipay.native'
},
pay_index:0,
logisticsinfo:{},
// 0 1 2
tipsType:0,
tipsInfo:'',
tipsBut:'',
cancelQuery:{
_action:'cancelorder',
order_id:''
},
}
},
methods:{
//
goComment(){
let data=this.goodsDate
data.order_goods=this.goods_list
uni.navigateTo({
url:'../productDetails/review?data='+JSON.stringify(data)
})
},
//
openTips(type){
this.tipsType=type
if(type==0){
this.tipsInfo='Are you sure you want to cancel this order? This order will be regarded as invalid after cancellation'
this.tipsBut='CancelOrder'
this.cancelQuery._action='cancelorder'
}else if(type==1){
this.tipsInfo='Are you sure you want to delete this order?'
this.tipsBut='DeleteOrder'
this.cancelQuery._action='deleteorder'
}else if(type==2){
this.tipsInfo='Are you sure you have received the products?'
this.tipsBut='Confirm'
this.cancelQuery._action='affirmorder'
}
this.$refs.alertDialog.open()
},
//
dialogConfirm(){
defaultRequest2(this.cancelQuery).then(res=>{
console.info(res)
if(res.error==0){
this.getList()
}
})
},
goLogistics(){
uni.navigateTo({
url:'./logisticsDetails?order_id='+this.goodsDate.order_id
})
},
//
selectPay(index){
this.pay_index=index
},
//
getPayDate(){
defaultRequest2(this.payQuery).then(res=>{
console.info(res)
if(res.error==0){
//
if(res.data.need_pay_amount==0) return
uni.requestPayment({
provider: 'alipay',
orderInfo: res.data.prepay_data.order_info, //
success: function (res) {
console.log('success:' + JSON.stringify(res));
uni.redirectTo({
url: 'paySuccess?order_id='+this.payQuery.order_id
});
},
fail: function (err) {
console.log('fail:' + JSON.stringify(err));
uni.showToast({
title:'Payment failed',
icon:'none'
})
}
});
}
})
},
payNow(id){
this.payQuery.order_id=id
this.isPay=true
},
getDate(){
defaultRequest2(this.query).then(res=>{
console.info(res)
if(res.error==0){
this.goodsDate=res.data
this.goods_list=res.goods_list
if(this.details_index==4){
this.getLogistics()
}
}
})
},
getLogistics(){
let data ={_action:'getlogisticsinfo',order_id:this.goodsDate.order_id,order_sn:''}
defaultRequest2(data).then(res=>{
console.info(res)
if(res.error==0){
this.logisticsinfo=res.data[0]
}
})
}
},
onLoad(e){
console.info(e)
this.details_index=e.details_index
this.query.order_id=e.id
this.cancelQuery.order_id=e.id
this.getDate()
},
filters:{
goodsAttr(e){
return e.replace(/\s\n/g,';');
}
}
}
</script>
<style lang="scss" scoped>
@import "@/common/scss/order.scss";
page{
}
.body{
padding-bottom: 130rpx;
}
</style>

102
pages/order/logisticsDetails.vue

@ -0,0 +1,102 @@
<template>
<view>
<view class="logistics_info">
<view class="logistics_info_image">
<image :src="list.logo" mode=""></image>
</view>
<view class="logistics_info_right">
<view class="info_right_title">{{list.isreceived==1?'Signed for':'In Transit'}}</view>
<text>{{list.expname}}</text>
<view class="info_right_num">
<text>Order number : {{list.mailno}}</text>
<view class="copy">Copy</view>
</view>
</view>
</view>
<view class="logistics_details">
<view class="logistics_step " v-for="(item,index) in list.records" :key="index" :class="index==0?'step_active':''">
<text>{{item.context}}</text>
<view class="logistics_step_time">{{item.time}}</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest2} from '../../api/index.js'
export default {
data() {
return {
active: 0,
query:{
_action:'getlogisticsinfo',
order_id:'',
order_sn:''
},
list:[]
}
},
methods:{
getList(){
defaultRequest2(this.query).then(res=>{
console.info(res)
if(res.error==0){
this.list=res.data[0]
}
})
}
},
onLoad(e) {
this.query.order_id=e.order_id
this.getList()
}
}
</script>
<style lang="scss" scoped>
@import "@/common/scss/order.scss";
.logistics_info{
border-top: 14.67rpx #F6F5FA solid;
padding: 32rpx 0;
padding-left: 29.33rpx;
display: flex;
align-items: center;
.logistics_info_image{
width: 133.33rpx;
height: 133.33rpx;
background-color: #999999;
}
.logistics_info_right{
margin-left: 33.33rpx;
font-size: 28rpx;
font-weight: 400;
color: #333333;
.info_right_title{
color: #DE3139;
font-size: 29.33rpx;
font-weight: bold;
margin-bottom: 10.33rpx;
}
.info_right_num{
display: flex;
align-items: center;
margin-top: 9.67rpx;
.copy{
height: 41.33rpx;
line-height: 41.33rpx;
text-align: center;
background-color: #F6F5FA;
font-size: 24rpx;
border-radius: 20.67rpx;
margin-left: 26.67rpx;
padding: 0 18.67rpx ;
}
}
}
}
</style>

169
pages/order/paySuccess.vue

@ -0,0 +1,169 @@
<template>
<view>
<view class="success">
<image src="../../static/img/success.png" mode="" v-if="type==0"></image>
<image src="../../static/img/fail.png" mode="" v-else></image>
<text class="success_title">{{type==0?'Payment is successful':'Payment failed'}}</text>
<view >
This order will be rewarded with
<text class="success_span">{{will_get_integral || 0}} points</text>
after receipt.
</view>
<view class="success_button">
<button class="details" @click="goPage">Order details</button>
<button class="shop" @click="goCategory">Continue shopping</button>
</view>
</view>
<view class="recommend">
<view class="recommend_title" >RECOMMEND</view>
<view class="recommend_content">
<view class="recommend_content_item" v-for="(item,index) in catList " :key="index">
<view class="recommend_content_item_image">
<image :src="item.thumb" mode=""></image>
</view>
<view class="recommend_content_item_image_name">{{item.short_name}}</view>
<view class="recommend_content_item_pric">US${{item.is_promote==0? item.shop_price :item.promote_price}}</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest4} from '../../api/index.js'
export default {
data() {
return {
// 0 1
type:0,
id:'',
will_get_integral:0,
//
catQuery:{
_action:'getgoods',
page_index:1,
page_size:10
},
catList:[],
isReachBottom:true,
}
},
methods:{
//
getCatList(type){
defaultRequest4(this.catQuery).then(res=>{
console.info(res)
if(res.error==0){
if(res.data){
if(type==0){
this.catList=res.data
}else{
this.catList=this.catList.concat(res.data)
}
}else{
this.isReachBottom=false
uni.showToast({
title: 'No more data yet',
icon:'none'
})
this.catQuery.page_index--
}
}
uni.hideNavigationBarLoading();
})
},
goPage(){
let details_index
if(this.type==0){
details_index=0
}else{
details_index=3
}
uni.redirectTo({
url: './details?details_index='+details_index+'&'+'id='+this.id
});
},
goCategory(){
uni.switchTab({
url:'../category/index'
})
}
},
onLoad(e) {
this.id=e.order_id
this.will_get_integral=e.will_get_integral || 0
this.type=e.type
this.getCatList(0)
},
//
onReachBottom(){
if(!this.isReachBottom)return
this.catQuery.page_index++
this.getCatList(1)
},
onPullDownRefresh(){
uni.stopPullDownRefresh()
}
}
</script>
<style>
page{
border-top: 14.67rpx #F7F7F7 solid;
}
</style>
<style lang="scss" scoped>
.success{
display: flex;
align-items: center;
justify-content: center;
padding-top: 72rpx;
font-size: 24rpx;
color: #555555;
font-weight: 400;
flex-direction: column;
border-bottom: 14.67rpx #F7F7F7 solid;
padding-bottom: 81.33rpx;
image{
width: 160rpx;
height: 160rpx;
margin-bottom: 46.67rpx;
}
.success_title{
font-size: 32rpx;
color: black;
font-weight: 500;
margin-bottom: 13.33rpx;
}
.success_span{
color: #B22234;
display: inline-block;
margin: 0 5rpx;
}
.success_button{
display: flex;
margin-top: 70.67rpx;
align-items: center;
justify-content: center;
button{
height: 63.33rpx;
font-size: 24rpx;
margin: 0;
font-weight: 500;
}
.details{
background-color: white;
border: 1px solid #CBCBCB;
color: black;
}
.shop{
color: white;
background-color: black;
margin-left: 48rpx;
}
}
}
</style>

251
pages/order/refund.vue

@ -0,0 +1,251 @@
<template>
<view>
<view class="order_popup_commodity">
<view class="good_info" v-for="(item,index) in 1 " :key="index">
<view class="good_info_left ">
<view class="good_info_image" v-for="(item,index) in 1" :key="index"></view>
<view class="left_info">
<view class="info_name">Adidas Yeezy Boost 350 V2 DazzlingBlue Black GY7164 Men's</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>Multicolor;41</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>x1</text>
</view>
<view class="info_price">
<text>US$314.00</text>
</view>
</view>
</view>
</view>
</view>
<view class="goods">
<view class="goods_title">Refunded goods</view>
<view class="goods_content">
<view class="goods_item">
<image src="../../static/img/refund.png" mode=""></image>
<text>Refund only</text>
<view class="goods_item_text">I didn't receive the goods</view>
</view>
<view class="goods_item">
<image src="../../static/img/refund1.png" mode=""></image>
<text>Return&refund</text>
<view class="goods_item_text">I have received the goods</view>
</view>
</view>
</view>
<view class="refund_price">
<text>Refund amountï¼</text>
<text class="refund_price_text">US$6.5</text>
</view>
<view class="refund_reason">
<view class="reason_item">
<view class="reason_item_left">
<text>Refund reason </text>
<text class="reason_item_left_text">Please select 1 refund reason</text>
</view>
<image src="/static/img/right1.png" mode=""></image>
</view>
<view class="reason_item1">
<view class="">Notes on application</view>
<textarea placeholder="Please supplement the refund information"></textarea>
<view class="reason_upload">
<view class="reason_upload_item">
<image src="/static/img/camera.png" class="upload_item_camera" mode=""></image>
<view>Upload pictures</view>
</view>
<view class="reason_upload_item reason_upload_item1">
<image src="/static/img/logo.png" class="upload_item_image" mode=""></image>
</view>
</view>
<view class="reason_upload_tips">Up to last 5 pictures</view>
<navigator url="/pages/order/refundDetails">
<button class="refund_submit">SUBMIT</button>
</navigator>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
orderDate:{}
}
},
methods:{
},
onLoad(e) {
this.orderDate=JSON.parse(e.data)
console.info(this.orderDate)
}
}
</script>
<style>
page{
border-top: 14.67rpx #F6F5FA solid;
}
</style>
<style lang="scss" scoped>
@import "@/common/scss/order.scss";
.order_popup_commodity{
border-bottom: 14.67rpx solid #F6F5FA;
}
.goods{
padding: 34.67rpx 27.33rpx;
border-bottom: 14.67rpx solid #F6F5FA;
.goods_title{
font-size: 28.67rpx;
font-weight: bold;
margin-bottom: 34.67rpx;
}
.goods_content{
display: flex;
justify-content: space-between;
.goods_item{
width: 336.67rpx;
height: 169.33rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 32rpx;
border: 1px solid #D3D3D3;
border-radius: 16rpx;
image{
width: 40rpx;
height: 40rpx;
margin-bottom: 16.67rpx;
}
.goods_item_text{
margin-top: 8rpx;
font-size: 20rpx;
color: #666666;
font-weight: bold;
}
}
}
}
.refund_price{
padding: 38rpx 28rpx;
font-size: 28rpx;
border-bottom: 14.67rpx solid #F6F5FA;
.refund_price_text{
font-size: 32rpx;
}
}
.refund_reason{
font-size: 28rpx;
padding-left: 28rpx;
padding-right: 21.33rpx;
.reason_item{
padding:42.67rpx 0 ;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #E2E2E2;
.reason_item_left{
display: flex;
align-items: center;
.reason_item_left_text{
color: #D2D2D2;
font-weight: 400;
display: inline-block;
margin-left: 45.33rpx;
}
}
image{
width: 24rpx;
height: 24rpx;
}
}
.reason_item1{
padding: 42.67rpx 0;
textarea{
font-size: 28rpx;
font-weight: 400;
margin-top: 40rpx;
width: 100%;
height: 113.33rpx;
}
.reason_upload{
display: flex;
flex-wrap: wrap;
margin-bottom: 34.67rpx;
.reason_upload_item{
border: 1px dashed #D2D2D2;
border-radius: 15rpx;
width: 156rpx;
height: 156rpx;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
font-size: 12rpx;
color: #BFBCBC;
margin-right: 23.33rpx;
&:nth-child(3n+3){
margin-right: 0;
}
.upload_item_camera{
width: 72rpx;
height: 54.67rpx;
margin-bottom: 14rpx;
}
.upload_item_image{
width: 100%;
height: 100%;
border-radius: 15rpx;
}
}
.reason_upload_item1{
position: relative;
&::after{
content: "";
width: 30.67rpx;
height: 30.67rpx;
position: absolute;
right: -12rpx;
top: -12rpx;
z-index: 99;
background-image: url("@/static/img/close3.png");
background-size: 100% 100%;
}
}
}
.reason_upload_tips{
font-size: 20rpx;
color: #666666;
}
.refund_submit{
margin-top: 118rpx;
background-color: black;
color: white;
font-size: 26.67rpx;
font-weight: bold;
width: 100%;
height: 73.33rpx;
line-height: 73.33rpx;
}
}
}
</style>

328
pages/order/refundDetails.vue

@ -0,0 +1,328 @@
<template>
<view :class="details_index==0 ||details_index==6 ? 'body' :''">
<view class="details_title" :class="details_index==3?'refund_details_title':''">
<view class="cancelled toPaid" v-if="details_index==0 ||details_index==6">
<view class="cancelled_left">
<view >
<view class="shipped_right_text">{{details_index==0?'Cancelled':'Refunded'}}</view>
<view>Cancelled time24/04/2022 15:54:21</view>
</view>
</view>
</view>
<view class="cancelled" v-if="details_index==1 ">
<view class="cancelled_left">
<image src="../../static/img/time.png" mode=""></image>
<view class="cancelled_left_info">
<text class="shipped_right_text">Refund rejected</text>
<view>End in: 71:59:59</view>
</view>
</view>
</view>
<view class="cancelled" v-if="details_index==2 || details_index==4 || details_index==5">
<view class="cancelled_left">
<image src="../../static/img/time.png" mode=""></image>
<view class="cancelled_left_info">
<text class="shipped_right_text">To be returned</text>
<view>End in: 71:59:59</view>
</view>
</view>
</view>
<view class="cancelled refund_transit" v-if="details_index==3">
<view class="cancelled_left">
<image src="../../static/img/transit.png" mode=""></image>
<view class="cancelled_left_info">
<text class="shipped_right_text">To be returned</text>
</view>
</view>
</view>
</view>
<view class="refund_success" v-if="details_index==6">
<view class="refund_success_item">
<text>Refund amount</text>
<text class="refund_success_item_text">US$12.5</text>
</view>
<view class="refund_success_item">
<text>Points</text>
<text class="refund_success_item_text">2.5</text>
</view>
</view>
<view class="refund_address" v-if="details_index==2">
<view class="address_title">Return address</view>
<view class="address_content">
<view class="address_content_item">name: zhangsan</view>
<view class="address_content_item">phone: +8613800138000</view>
<view class="address_content_item">country: china</view>
<view class="address_content_item">state: 广东省 </view>
<view class="address_content_item">city深圳市 </view>
<view class="address_content_item">zipcode518000</view>
<view class="address_content_item">address line:详细地址(粤海街道深圳湾生态科技园9A3)</view>
</view>
</view>
<view class="negotiation_details" @click="isShow=true">
<text>Negotiation Details</text>
<image src="../../static/img/right.png" mode=""></image>
</view>
<view class="order_popup_commodity">
<view class="order_popup_commodity_title">Refund Information</view>
<view class="good_info" v-for="(item,index) in 2 " :key="index">
<view class="good_info_left ">
<view class="good_info_image" v-for="(item,index) in 1" :key="index"></view>
<view class="left_info">
<view class="info_name">Adidas Yeezy Boost 350 V2 DazzlingBlue Black GY7164 Men's</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>Multicolor;41</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>x1</text>
</view>
<view class="info_price">
<text>US$314.00</text>
<!-- <button>Rrefund</button> -->
</view>
</view>
</view>
</view>
</view>
<view class="summary">
<view class="summary_item">
<view>Refund ID</view>
<view class="summary_item_right">2013461121212</view>
</view>
<view class="summary_item">
<view>Refund Amount</view>
<view class="summary_item_right">US$12.5</view>
</view>
<view class="summary_item">
<view>Return Type</view>
<view class="summary_item_right">Refund Only</view>
</view>
<view class="summary_item">
<view>Application Time</view>
<view class="summary_item_right"> 21/04/2022 15:42:31</view>
</view>
<view class="summary_item" >
<view>Reason For Refund</view>
<view class="summary_item_right">Quality Problem</view>
</view>
</view>
<view class="details_footer" v-if="details_index!=0 && details_index!=6">
<button class="white" v-if="details_index==1">MODIFY REFUND</button>
<button class="white" v-if="details_index==1 || details_index==2 || details_index==3 || details_index==4 || details_index==5">CANCEL RETURN</button>
<button class="white" v-if="details_index==2 ">RETURN LOGISTICS</button>
<!-- <button class="black" v-if="details_index==4">CONFIRM RECEIPT</button> -->
</view>
<view class="mask" v-show="isShow" @click="isShow=false"></view>
<view class="order_popup" v-show="isShow">
<view class="order_popup_title">
<text>Negotiation Details</text>
<image src="../../static/img/close1.png" mode="" @click="isShow=false"></image>
</view>
<view class="logistics_details">
<view class="logistics_step step_active">
<view class="logistics_step_title">CHIC Has Refunded</view>
<text>Refund amount: US $12.5</text>
<view class="logistics_step_time">2020.12.13 23:54:12</view>
</view>
<view class="logistics_step">
<view class="logistics_step_title">CHIC Reject Goods</view>
<text>Reason: 驳回的内容 please modify the refund application or return information</text>
<view class="logistics_step_time">2020.12.13 23:54:12</view>
</view>
<view class="logistics_step">
<view class="logistics_step_title">Buyer Has Sent The Goods</view>
<text>Waiting for CHIC to receive the goods</text>
<view class="logistics_step_time">2020.12.13 23:54:12</view>
</view>
<view class="logistics_step">
<view class="logistics_step_title">CHIC Agrees To Refund</view>
<text>To be returned by the buyerPlease submit the return logistics order number within 7 days</text>
<view class="logistics_step_time">2020.12.13 23:54:12</view>
</view>
<view class="logistics_step">
<view class="logistics_step_title">Buyer Modifies Refund Application</view>
<text>Waiting for CHIC processing</text>
<view class="logistics_step_time">2020.12.13 23:54:12</view>
</view>
<view class="logistics_step">
<view class="logistics_step_title">CHIC Refund Rejected</view>
<text>Reason : 驳回的内容please modify the refund information</text>
<view class="logistics_step_time">2020.12.13 23:54:12</view>
</view>
<view class="logistics_step">
<view class="logistics_step_title">Buyer Submits Refund Application</view>
<text>Waiting for CHIC processing</text>
<view class="logistics_step_time">2020.12.13 23:54:12</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
// 0 1 2退 3 4退 5 6退
details_index:5,
isShow:false,
}
},
methods:{
}
}
</script>
<style>
</style>
<style lang="scss" scoped>
@import "@/common/scss/order.scss";
.body{
padding-bottom: 140rpx;
}
.order_popup_commodity_title{
font-size: 28.67rpx;
font-weight: bold;
margin-top: 37.33rpx;
}
.negotiation_details{
padding: 40.67rpx 0;
padding-left: 28rpx;
padding-right: 16rpx;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28.67rpx;
font-weight: bold;
border-bottom: 14.67rpx #F6F5FA solid;
image{
width: 20rpx;
height: 20rpx;
}
}
.toPaid{
.shipped_right_text{
margin-bottom: 14rpx;
}
}
.refund_details_title{
height: 126rpx !important;
}
.refund_transit{
height: 126rpx !important;
}
.summary{
border-bottom: 14.67rpx #F6F5FA solid;
padding-bottom: 44.67rpx;
}
.refund_address{
padding: 40rpx 0;
padding-left: 28rpx;
padding-right: 16.67rpx;
font-size: 24rpx;
color: #666666;
font-weight: bold;
border-bottom: 14.67rpx #F6F5FA solid;
.address_title{
font-size: 28.67rpx;
color: black;
margin-bottom: 22rpx;
}
.address_content{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.address_content_item{
width: 50%;
margin-bottom: 10.67rpx;
&:last-child{
width: 100%;
}
}
}
}
.refund_success{
padding: 40rpx 26.67rpx;
font-size: 28.67rpx;
font-weight: bold;
border-bottom: 14.67rpx #F6F5FA solid;
.refund_success_item{
margin-bottom: 20rpx;
&:last-child{
margin-bottom: 0;
}
.refund_success_item_text{
color: #B22234;
}
}
}
.order_popup{
padding: 0 28rpx;
box-sizing: border-box;
.order_popup_title{
justify-content: flex-start;
}
}
.logistics_details{
border-top: none;
padding: 26rpx 0;
padding-left: 0;
padding-right: 27.33rpx;
max-height: 1123.33rpx;
overflow-y: auto;
.logistics_step{
font-size: 24rpx;
color: #333333;
font-weight: bold;
&:before{
content: "";
width: 26.67rpx;
height: 26.67rpx;
background-color: #E2E2E2;
}
&::after{
background-color: #E2E2E2;
left: 12.5rpx;
}
.logistics_step_title{
font-size: 28rpx;
color: #000000;
margin-bottom: 10rpx;
font-weight: 500;
}
.logistics_step_time{
font-size: 20rpx;
color: #999999;
}
}
}
.step_active{
color: #333333 !important;
&:before{
background-image: url(@/static/img/yuan.png);
background-size: 100% 100%;
background-color: white !important;
}
}
</style>

1376
pages/productDetails/index.vue

File diff suppressed because it is too large

283
pages/productDetails/review.vue

@ -0,0 +1,283 @@
<template>
<view>
<uni-nav-bar :statusBar="true" left-icon="left" title="Review" color="#000000" :fixed="true" @clickLeft="back">
<block slot="right">
<view class="nav_right">
<button @click="reviewSub">Submit</button>
</view>
</block>
</uni-nav-bar>
<view class="body" v-for="(item,index) in orderDate.order_goods " :key="index">
<view class="order_popup_commodity">
<view class="good_info" >
<view class="good_info_left ">
<view class="good_info_image">
<image :src="item.goods_img" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item.goods_attr |goodsAttr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="review">
<view class="review_title">
<text>Score</text>
<uni-rate size="22" disabledColor="red" v-model="query.comment_rank" active-color="red" :is-fill="false" class="rate" v-if="reviewType==0"/>
<uni-rate size="22" disabledColor="red" v-model="query1.comments[index].comment_rank" active-color="red" :is-fill="false" class="rate" v-else/>
</view>
<view class="review_content">
<image src="../../static/img/write.png" mode=""></image>
<textarea placeholder="Write reviews" v-if="reviewType==0" v-model="query.comment"></textarea>
<textarea placeholder="Write reviews" v-else v-model="query1.comments[index].comment"></textarea>
</view>
<view class="reason_upload">
<view class="reason_upload_item">
<image src="/static/img/vedio.png" class="upload_item_camera1" mode=""></image>
<view>Upload the video</view>
</view>
<view class="reason_upload_item">
<image src="/static/img/camera.png" class="upload_item_camera" mode=""></image>
<view>Upload pictures</view>
</view>
<view class="reason_upload_item reason_upload_item1">
<image src="/static/img/logo.png" class="upload_item_image" mode=""></image>
</view>
</view>
<view class="reason_upload_tips">Upload JPG, PNG format, within 3M</view>
</view>
</view>
</view>
</template>
<script>
import {defaultRequest2,defaultRequest3} from '../../api/index.js'
export default {
data() {
return {
orderDate:{},
// 0 1
reviewType:0,
query:{
_action:'commentordergoods',
order_id:'',
order_sn:'',
rec_id:'',
goods_id:'',
comment:'',
comment_rank:'',
commentlabels:''
},
query1:{
_action:'commentorder',
order_id:'',
order_sn:'',
comments:[]
}
}
},
methods:{
//
reviewSub(){
let data
if(this.reviewType==0){
this.commentordergoods()
}else{
data=this.query1
}
console.info(data)
},
//
commentordergoods(){
defaultRequest2(this.query).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
icon:'none',
title:'Comment successful!'
})
setTimeout(function(){
uni.navigateBack()
},2000)
}
})
},
//
commentordergoods(){
defaultRequest2(this.query1,'comments').then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
icon:'none',
title:'Comment successful!'
})
setTimeout(function(){
uni.navigateBack()
},2000)
}
})
},
back(){
uni.navigateBack()
}
},
onLoad(e) {
let datas=JSON.parse(e.data)
this.orderDate=datas
if(datas.order_goods.length>1){
this.reviewType=1
this.query1.order_id=datas.order_id
this.query1.order_sn=datas.order_sn
datas.order_goods.map(item=>{
let data={
rec_id:item.rec_id,
goods_id:item.goods_id,
comment:'',
comment_rank:'',
commentlabels:item.goods_attr.replace(/\s\n/g,' ')
}
this.query1.comments.push(data)
})
}else{
this.query.order_id=datas.order_id
this.query.order_sn=datas.order_sn
this.query.rec_id=datas.order_goods[0].rec_id
this.query.goods_id=datas.order_goods[0].goods_id
this.commentlabels=datas.order_goods[0].goods_attr.replace(/\s\n/g,' ')
}
},
filters:{
goodsAttr(e){
return e.replace(/\s\n/g,';');
}
}
}
</script>
<style lang="scss" scoped>
.review{
padding: 0 26rpx;
padding-top: 35.33rpx;
.review_title{
display: flex;
align-items: center;
font-weight: bold;
font-size: 32rpx;
margin-bottom: 44rpx;
.rate{
margin-left: 24.67rpx;
}
}
.review_content{
display: flex;
image{
width: 29.33rpx;
height: 29.33rpx;
}
textarea{
font-size: 28rpx;
font-weight: 400;
width: 100%;
height: 113.33rpx;
margin-left: 4rpx;
}
}
.reason_upload{
display: flex;
flex-wrap: wrap;
margin-bottom: 34.67rpx;
.reason_upload_item{
border: 1px dashed #D2D2D2;
border-radius: 15rpx;
width: 156rpx;
height: 156rpx;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
font-size: 12rpx;
color: #BFBCBC;
margin-right: 23.33rpx;
&:nth-child(3n+3){
margin-right: 0;
}
.upload_item_camera{
width: 72rpx;
height: 54.67rpx;
margin-bottom: 14rpx;
}
.upload_item_camera1{
width: 72rpx;
height: 72rpx;
// margin-bottom: 14rpx;
}
.upload_item_image{
width: 100%;
height: 100%;
border-radius: 15rpx;
}
}
.reason_upload_item1{
position: relative;
&::after{
content: "";
width: 30.67rpx;
height: 30.67rpx;
position: absolute;
right: -12rpx;
top: -12rpx;
z-index: 99;
background-image: url("@/static/img/close3.png");
background-size: 100% 100%;
}
}
}
.reason_upload_tips{
font-size: 20rpx;
color: #666666;
}
}
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
.nav_right{
button{
width: 116.67rpx;
height: 48rpx;
background-color: black;
margin: 0;
line-height: 48rpx;
border-radius: 24rpx;
font-size: 24rpx;
font-weight: bold;
color: white;
padding-left: 0;
padding-right: 0;
}
}
.body{
border-top: 14.67rpx #F6F5FA solid;
}
.order_popup_commodity{
padding: 0 33.33rpx;
border-bottom: 14.67rpx #F6F5FA solid;
}
</style>

539
pages/shippingCart/index.vue

@ -0,0 +1,539 @@
<template>
<view>
<uni-nav-bar :statusBar="true" left-icon="left" title="Shipping Cart" color="#000000" :fixed="true" @clickLeft="back">
<block slot="right">
<view class="nav_right">
<image src="../../static/img/delete1.png" mode="" @click="deleteCart"></image>
</view>
</block>
</uni-nav-bar>
<view class="empty" v-if="goods_list.length==0">
<image src="/static/img/cart3.png" mode=""></image>
<text>Your cart is empty</text>
<button>Shop Now</button>
</view>
<template v-else>
<view class="cart_info">
<image src="/static/img/Shipped.png" mode=""></image>
<view class="cart_title_content">Buy US$32.00 more to enjoy FREE STANDARD SHIPPING!</view>
<view class="cart_title_right">Add</view>
</view>
<view class="cart">
<view class="cart_content">
<view class="good_info" v-for="(item,index) in goods_list" :key="item.rec_id">
<image src="../../static/img/select1.png" mode="" class="cart_select" v-show="item.is_check==1" @click="cartCheck(1,0,item.rec_id,index)"></image>
<image src="../../static/img/select2.png" mode="" class="cart_select" v-show="item.is_check==0" @click="cartCheck(1,1,item.rec_id,index)"></image>
<view class="good_info_left ">
<view class="good_info_image">
<image :src="item.goods_thumb" mode=""></image>
</view>
<view class="left_info">
<view class="info_name">{{item.goods_name}}</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>{{item.goods_attr}}</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
</view>
<view class="info_price">
<text>US${{item.goods_price}}</text>
<uni-number-box background="#FFFFFF" :min="1" :value="item.goods_number" @change="updateCart($event,item.rec_id)"></uni-number-box>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="cart">
<view class="cart_content">
<view class="good_info" v-for="(item,index) in 3 " :key="index">
<image src="../../static/img/select.png" mode="" class="cart_select"></image>
<view class="good_info_left ">
<view class="good_info_image">
<view class="good_info_image_tips">sold out</view>
</view>
<view class="left_info left_info1">
<view class="info_name">Adidas Yeezy Boost 350 V2 DazzlingBlue Black GY7164 Men's</view>
<view class="left_info_bottom">
<view class="info_lable">
<text>Multicolor;41</text>
<image src="/static/img/bottom.png" mode=""></image>
</view>
<text>x1</text>
</view>
<view class="info_price">
<text>US$314.00</text>
<image src="../../static/img/delete2.png" mode="" class="delete"></image>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<view class="recommend">
<view class="recommend_title">RECOMMEND</view>
<view class="recommend_content">
<view class="recommend_content_item" v-for="(item,index) in catList " :key="index" @click="goDetails(item.id)">
<view class="recommend_content_item_image">
<image :src="item.thumb" mode=""></image>
</view>
<view class="recommend_content_item_image_name">{{item.short_name}}</view>
<view class="recommend_content_item_pric">US${{item.is_promote==0? item.shop_price :item.promote_price}}</view>
</view>
</view>
</view>
<view class="footer">
<view class="footer_left">
<image src="../../static/img/select1.png" mode="" v-if="all_allno==1 && goods_list.length>0" @click="cartCheck(0,0)"></image>
<image src="../../static/img/select2.png" mode="" v-else @click="cartCheck(0,1)"></image>
<text>All</text>
</view>
<view class="footer_right">
<text>US${{total.goods_price}}</text>
<button @click="cartCheckOut">CHECKOUT({{total.goods_count}})</button>
</view>
</view>
<uni-popup ref="alertDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="Close" confirmText="Delete" title="Tips" content="Whether to delete goods?"
@confirm="dialogConfirm" ></uni-popup-dialog>
</uni-popup>
</view>
</template>
<script>
import {defaultRequest2,defaultRequest4} from '../../api/index.js'
export default {
data() {
return {
isEmpty:false,
//
total:{},
//
goods_list:[],
// 1-2-3-
all_allno:2,
deleteQuery:{
_action:'removecart'
},
//
catQuery:{
_action:'getgoods',
page_index:1,
page_size:10
},
catList:[],
isReachBottom:true,
}
},
methods:{
goDetails(id){
uni.navigateTo({
url:'/pages/productDetails/index?goods_id='+id
})
},
//
getCatList(type){
defaultRequest4(this.catQuery).then(res=>{
console.info(res)
if(res.error==0){
if(res.data){
if(type==0){
this.catList=res.data
}else{
this.catList=this.catList.concat(res.data)
}
}else{
this.isReachBottom=false
uni.showToast({
title: 'No more data yet',
icon:'none'
})
this.catQuery.page_index--
}
}
uni.hideNavigationBarLoading();
})
},
//
updateCart(e,id){
let data={_action:'updatecart',rec_id:id,goods_number:e}
defaultRequest4(data).then(res=>{
console.info(res)
if(res.error==0){
this.getList()
}
})
},
//
cartCheckOut(){
if(this.goods_list.length==0) return
if(this.all_allno==2){
uni.showToast({
icon:'none',
title:'Please select the product'
})
return
}
let data={_action:'cartcheckout',is_new:1,direct_shopping:0,consignee:''}
uni.navigateTo({
url:'../order/confirmation?query='+JSON.stringify(data)
})
},
//
deleteCart(){
if(this.goods_list.length==0) return
if(this.all_allno==2){
uni.showToast({
icon:'none',
title:'Please select the product to delete'
})
return
}else if(this.all_allno==3){
let selectNum=0,
rec_id=''
this.goods_list.map(item=>{
if(item.is_check==1){
rec_id=item.rec_id
selectNum++
}
})
if(selectNum>1){
uni.showToast({
icon:'none',
title:'Only one or all items can be deleted'
})
return
}else{
this.deleteQuery.rec_id=rec_id
}
}else{
// this.deleteQuery._action='clearcart'
}
this.$refs.alertDialog.open()
},
dialogConfirm(){
defaultRequest2(this.deleteQuery).then(res=>{
console.info(res)
if(res.error==0){
uni.showToast({
icon:'none',
title:'Successfully deleted!'
})
this.getList()
}
})
},
// -- type: 1 0
cartCheck(type,is_check,id,index){
if(this.goods_list.length==0) return
let data={}
if(type==1){
data={_action:'cartcheck',rec_id:id,is_check:is_check}
}else{
data={_action:'cartcheckall',is_check:is_check}
}
defaultRequest4(data).then(res=>{
console.info(res)
if(res.error==0){
this.getList()
// Object.assign(this.total,res.data)
// this.total.goods_price=res.data.price
// this.all_allno=res.data.all_allno
// if(type==1){
// if(is_check==0){
// this.goods_list[index].is_check=0
// }else{
// this.goods_list[index].is_check=1
// }
// }else{
// this.goods_list.map(item=>{
// if(is_check==0){
// item.is_check=0
// }else{
// item.is_check=1
// }
// })
// }
}
})
},
getList(){
let data={_action:'getcartgoods'}
defaultRequest4(data).then(res=>{
console.info(res)
if(res.error==0){
this.total=res.data.total
this.all_allno=res.data.all_allno
if(res.data.goods_list){
res.data.goods_list.map(item=>{
item.goods_attr=item.goods_attr.replace(/\s\n/g,';');
})
this.goods_list=res.data.goods_list
}else{
this.goods_list=[]
}
}
})
},
back(){
uni.switchTab({
url: '/pages/index/index'
});
}
},
onShow() {
uni.hideTabBar()
this.getList()
this.getCatList(0)
},
onHide(){
uni.showTabBar()
},
//
onReachBottom(){
if(!this.isReachBottom)return
this.catQuery.page_index++
this.getCatList(1)
},
onPullDownRefresh(){
uni.stopPullDownRefresh()
}
}
</script>
<style>
page{
background-color: #F6F5FA;
padding-bottom: 150rpx;
}
</style>
<style lang="scss" scoped>
.uni-navbar{
font-size: 32rpx;
font-weight: bold;
}
.uni-numbox{
border: 1px solid #999999;
border-radius: 14rpx;
height: 42.67rpx;
/deep/ .uni-numbox__minus{
border-radius: 14rpx;
}
/deep/.uni-numbox__plus{
border-radius: 14rpx;
}
/deep/.uni-numbox__value{
border-left: 1px solid #999999;
border-right: 1px solid #999999;
height: 100%;
width: 63.33rpx;
font-size: 21.33rpx;
}
}
.nav_right{
image{
width: 36rpx;
height: 36rpx;
}
}
.empty{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding-top: 136rpx;
font-size: 30.67rpx;
font-weight: 400;
image{
width: 125.33rpx;
height: 125.33rpx;
margin-bottom: 49.33rpx;
}
button{
font-size: 29.33rpx;
font-weight: 500;
background-color: black;
color: white;
height: 45.67rpx;
line-height: 45.67rpx;
border-radius: 0;
margin-top: 33.33rpx;
}
}
.recommend{
margin-top: 124rpx;
}
.cart_info{
background-color: white;
display: flex;
align-items: center;
justify-content: space-between;
padding: 36.67rpx 32rpx;
font-size: 24rpx;
font-weight: 400;
image{
width: 41.33rpx;
height: 41.33rpx;
}
.cart_title_content{
width: 510.67rpx;
}
.cart_title_right{
font-size: 26rpx;
font-weight: bold;
}
}
.cart{
background-color: white;
margin: 0 18rpx;
padding: 42rpx 12.67rpx;
margin-top: 16.67rpx;
.cart_title{
padding-left: 12.67rpx;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
margin-bottom: 76rpx;
}
.cart_content{
.good_info{
display: flex;
align-items: center;
color: #000000;
justify-content: space-between;
border-bottom: none;
padding: 0;
margin-bottom: 78.67rpx;
&:last-child{
margin-bottom: 0;
}
.good_info_image{
position: relative;
image{
width: 100%;
height: 100%;
}
.good_info_image_tips{
width: 117.33rpx;
height: 117.33rpx;
border-radius: 50%;
background: rgba(0, 0, 0, 0.3);
color: white;
font-size: 22rpx;
font-weight: 800;
display: flex;
align-items: center;
justify-content: center;
z-index: 99;
position: absolute;
top: 50%;
margin-top: -60rpx;
left: 50%;
margin-left: -60rpx;
}
}
.left_info1{
color: #C4C4C4;
.left_info_bottom{
color: #C4C4C4;
.info_lable{
border: 1px solid #C4C4C4;
}
}
.info_price{
color: #C4C4C4;
}
}
.cart_select{
width: 34.67rpx;
height: 34.67rpx;
}
.info_name{
width: 406.67rpx;
text-overflow: -o-ellipsis-lastline;
overflow: hidden; //
text-overflow: ellipsis; //
display: -webkit-box; //
-webkit-line-clamp: 2; //
line-clamp: 2;
-webkit-box-orient: vertical;
}
.delete{
width: 36rpx;
height: 36rpx;
}
}
}
}
.footer{
padding: 42rpx 0;
padding-left: 27.33rpx;
padding-right: 19.33rpx;
background-color: white;
position: fixed;
bottom: 0;
width: 100%;
box-sizing: border-box;
border-top: 2px solid #F6F5FA;
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 36rpx;
.footer_left{
font-weight: 400;
display: flex;
align-items: center;
image{
width: 34.67rpx;
height: 34.67rpx;
margin-right: 10rpx;
}
}
.footer_right{
display: flex;
align-items: center;
font-weight: 600;
button{
height: 73.33rpx;
line-height: 73.33rpx;
background-color: #191919;
margin: 0;
font-size: 26.67rpx;
font-weight: bold;
color: white;
margin-left: 23.33rpx;
border-radius: 0;
}
}
}
</style>

BIN
static/icon/1024.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
static/icon/all.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

BIN
static/icon/back.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

BIN
static/icon/cart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

BIN
static/icon/heart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

BIN
static/icon/heart1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
static/icon/left.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 B

BIN
static/icon/search.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

BIN
static/img/APay.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
static/img/About CHIC.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
static/img/Account.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
static/img/Account1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/img/Attention CHIC.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/img/Cart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
static/img/Category.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
static/img/Category1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
static/img/GPay.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
static/img/Help Center.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
static/img/My Address.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
static/img/My Review.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
static/img/Processing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
static/img/Return Policy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
static/img/Returns.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/img/Setting.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
static/img/Shipped.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
static/img/add.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
static/img/address.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
static/img/address1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
static/img/address_xian.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
static/img/apple.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
static/img/bottom.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

BIN
static/img/bottom1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

BIN
static/img/camera.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
static/img/card.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
static/img/cart1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
static/img/cart2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/img/cart3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
static/img/close.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
static/img/close1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 B

BIN
static/img/close2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
static/img/close3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
static/img/completed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
static/img/coupons.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/img/coupons_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
static/img/delete.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/img/delete1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
static/img/delete2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
static/img/dope plus.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
static/img/facebook.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
static/img/fail.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
static/img/favorites.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
static/img/gantan.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/img/gantan1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
static/img/goods_lable.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

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

Loading…
Cancel
Save