杨豪 3 years ago
parent
commit
af3ebe928f
  1. 13
      api/knowledge.js
  2. 23
      assets/css/base.less
  3. 62
      assets/css/style.less
  4. 2
      config/index.js
  5. 249
      pages.json
  6. 580
      pages/course/detail.vue
  7. 285
      pages/course/index.vue
  8. 76
      pages/home/index.vue
  9. 5
      pages/knowledge/components/secondMenu.vue
  10. 9
      pages/knowledge/index.vue
  11. 188
      pages/shop/GoodsClass/index.vue
  12. 199
      pages/shop/GoodsEvaluate/index.vue
  13. 78
      pages/study/bangdanRecord.vue
  14. 359
      pages/study/dabang.vue
  15. 307
      pages/study/detail.vue
  16. 93
      pages/study/editDabang.vue
  17. 298
      pages/user/User/index.vue
  18. 55
      pages/user/feedBack/index.vue
  19. 8
      pages/user/joinUs/index.vue
  20. 98
      pages/user/myBangdan/index.vue
  21. 202
      pages/user/myCourses/index.vue
  22. 0
      pagesB/pages/activity/BargainRecord/index.vue
  23. 0
      pagesB/pages/activity/DargainDetails/index.vue
  24. 0
      pagesB/pages/activity/GoodsBargain/index.vue
  25. 0
      pagesB/pages/activity/GoodsGroup/children/activity-card.vue
  26. 0
      pagesB/pages/activity/GoodsGroup/index.vue
  27. 0
      pagesB/pages/activity/GoodsSeckill/index.vue
  28. 0
      pagesB/pages/activity/GoodsSeckill/index2.vue
  29. 0
      pagesB/pages/activity/GroupDetails/index.vue
  30. 0
      pagesB/pages/activity/GroupRule/index.vue
  31. 0
      pagesB/pages/activity/Poster/index.vue
  32. 0
      pagesB/pages/activity/SeckillDetails/index.vue
  33. 0
      pagesB/pages/map/index.vue
  34. 0
      pagesB/pages/orderAdmin/AdminOrder/index.vue
  35. 0
      pagesB/pages/orderAdmin/AdminOrderList/index.vue
  36. 0
      pagesB/pages/orderAdmin/GoodsDeliver/index.vue
  37. 0
      pagesB/pages/orderAdmin/OrderCancellation/index.vue
  38. 0
      pagesB/pages/orderAdmin/OrderIndex/index.vue
  39. 0
      pagesB/pages/orderAdmin/Statistics/index.vue
  40. 0
      pagesB/pages/shop/EvaluateList/index.vue
  41. 0
      pagesB/pages/shop/GoodsCollection/index.vue
  42. 196
      pagesB/pages/shop/GoodsEvaluate/index.vue
  43. 0
      pagesB/pages/shop/GoodsFoot/index.vue
  44. 0
      pagesB/pages/shop/GoodsList/index.vue
  45. 0
      pagesB/pages/shop/GoodsPromotion/index.vue
  46. 0
      pagesB/pages/shop/HotNewGoods/index.vue
  47. 0
      pagesB/pages/shop/IntegralGoodsCon/index.vue
  48. 0
      pagesB/pages/shop/Live/LiveList/index.vue
  49. 0
      pagesB/pages/shop/StoreList/index.vue
  50. 0
      pagesB/pages/shop/news/NewsDetail/index.vue
  51. 0
      pagesB/pages/shop/news/NewsList/index.vue
  52. 0
      pagesB/pages/user/BindingPhone/index.vue
  53. 0
      pagesB/pages/user/ChangePassword/index.vue
  54. 0
      pagesB/pages/user/CustomerList/index.vue
  55. 0
      pagesB/pages/user/Login/index.vue
  56. 0
      pagesB/pages/user/Recharge/index.vue
  57. 65
      pagesB/pages/user/Register/index.vue
  58. 0
      pagesB/pages/user/RetrievePassword/index.vue
  59. 0
      pagesB/pages/user/UserAccount/index.vue
  60. 0
      pagesB/pages/user/UserBill/index.vue
  61. 0
      pagesB/pages/user/UserVip/index.vue
  62. 202
      pagesB/pages/user/address/AddAddress/index.vue
  63. 223
      pagesB/pages/user/address/AddressManagement/index.vue
  64. 0
      pagesB/pages/user/coupon/GetCoupon/index.vue
  65. 0
      pagesB/pages/user/coupon/UserCoupon/index.vue
  66. 0
      pagesB/pages/user/promotion/CashAudit/index.vue
  67. 0
      pagesB/pages/user/promotion/CashRecord/index.vue
  68. 0
      pagesB/pages/user/promotion/CommissionDetails/index.vue
  69. 0
      pagesB/pages/user/promotion/Poster/index.vue
  70. 0
      pagesB/pages/user/promotion/PromoterList/index.vue
  71. 0
      pagesB/pages/user/promotion/PromoterOrder/index.vue
  72. 0
      pagesB/pages/user/promotion/UserCash/index.vue
  73. 0
      pagesB/pages/user/promotion/UserPromotion/index.vue
  74. 0
      pagesB/pages/user/signIn/Integral/index.vue
  75. 0
      pagesB/pages/user/signIn/Sign/index.vue
  76. 0
      pagesB/pages/user/signIn/SignRecord/index.vue
  77. BIN
      static/article1.png
  78. BIN
      static/call-icon.png
  79. BIN
      static/course-icon1.png
  80. BIN
      static/course-icon2.png
  81. BIN
      static/course-icon3.png
  82. BIN
      static/course-icon4.png
  83. BIN
      static/error-icon.png
  84. BIN
      static/home-banner.png
  85. BIN
      static/myorder-icon1.png
  86. BIN
      static/myorder-icon2.png
  87. BIN
      static/myorder-icon3.png
  88. BIN
      static/myorder-icon4.png
  89. BIN
      static/myorder-icon5.png
  90. BIN
      static/saoyisao.png
  91. BIN
      static/titleL-icon.png
  92. BIN
      static/titleR-icon.png
  93. BIN
      static/user-index-bg.png
  94. BIN
      static/user-menu1.png
  95. BIN
      static/user-menu2.png
  96. BIN
      static/user-menu3.png
  97. BIN
      static/user-menu4.png
  98. BIN
      static/user-menu5.png
  99. BIN
      static/zan.png
  100. 2
      utils/index.js
  101. Some files were not shown because too many files have changed in this diff Show More

13
api/knowledge.js

@ -20,3 +20,16 @@ export function getArticle(data) {
export function getArticleDetails(data) { export function getArticleDetails(data) {
return request.get("/article/details/"+data); return request.get("/article/details/"+data);
} }
/**
* 获取学习榜单列表
*/
export function getStudyList(data) {
return request.post("/api/StudyList/listStudyList",data);
}
/**
* 获取课程列表
*/
export function getCourses(data) {
return request.post("/api/cyCourse/listCourses",data);
}

23
assets/css/base.less

@ -31,6 +31,7 @@
.pad30 { .pad30 {
padding: 0 0.3*100rpx; padding: 0 0.3*100rpx;
} }
/* layout */ /* layout */
.acea-row-nowrap { .acea-row-nowrap {
display: flex; display: flex;
@ -41,48 +42,48 @@
flex-wrap: wrap; flex-wrap: wrap;
/* 辅助类 */ /* 辅助类 */
} }
.acea-row.row-middle { .acea-row.row-middle,.acea-row-nowrap.row-middle{
align-items: center; align-items: center;
} }
.acea-row.row-top { .acea-row.row-top,.acea-row-nowrap.row-top {
align-items: flex-start; align-items: flex-start;
} }
.acea-row.row-bottom { .acea-row.row-bottom {
align-items: flex-end; align-items: flex-end;
} }
.acea-row.row-center { .acea-row.row-center,.acea-row-nowrap.row-center {
justify-content: center; justify-content: center;
} }
.acea-row.row-right { .acea-row.row-right,.acea-row-nowrap.row-right {
justify-content: flex-end; justify-content: flex-end;
} }
.acea-row.row-left { .acea-row.row-left,.acea-row-nowrap.row-left {
justify-content: flex-start; justify-content: flex-start;
} }
.acea-row.row-between { .acea-row.row-between,.acea-row-nowrap.row-between {
justify-content: space-between; justify-content: space-between;
} }
.acea-row.row-around { .acea-row.row-around, .acea-row-nowrap.row-around{
justify-content: space-around; justify-content: space-around;
} }
.acea-row.row-column-around { .acea-row.row-column-around,.acea-row-nowrap.row-column-around {
flex-direction: column; flex-direction: column;
justify-content: space-around; justify-content: space-around;
} }
.acea-row.row-column { .acea-row.row-column {
flex-direction: column; flex-direction: column;
} }
.acea-row.row-column-between { .acea-row.row-column-between,.acea-row-nowrap.row-column-between {
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
} }
/* 上下左右垂直居中 */ /* 上下左右垂直居中 */
.acea-row.row-center-wrapper { .acea-row.row-center-wrapper,.acea-row-nowrap.row-center-wrapper {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
/* 上下两边居中对齐 */ /* 上下两边居中对齐 */
.acea-row.row-between-wrapper { .acea-row.row-between-wrapper,.acea-row-nowrap.row-between-wrapper {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }

62
assets/css/style.less

@ -2273,16 +2273,16 @@ page {
} }
.user .header:after { .user .header:after {
position: absolute; // position: absolute;
left: 0; // left: 0;
right: 0; // right: 0;
bottom: -0.98 * 100rpx; // bottom: -0.98 * 100rpx;
z-index: -1; // z-index: -1;
content: ''; // content: '';
height: 1 * 100rpx; // height: 1 * 100rpx;
width: 100%; // width: 100%;
border-radius: 0 0 50% 50%; // border-radius: 0 0 50% 50%;
background-color: #eb3729; // background-color: #eb3729;
} }
.user .header .picTxt .pictrue { .user .header .picTxt .pictrue {
@ -2396,7 +2396,7 @@ page {
padding: 0 0.3 * 100rpx; padding: 0 0.3 * 100rpx;
border-bottom: 1px dashed #eee; border-bottom: 1px dashed #eee;
font-size: 0.3 * 100rpx; font-size: 0.3 * 100rpx;
color: #282828; color: #222;
} }
.user .wrapper .myOrder .title .allOrder { .user .wrapper .myOrder .title .allOrder {
@ -2414,8 +2414,8 @@ page {
} }
.user .wrapper .myOrder .orderState .item { .user .wrapper .myOrder .orderState .item {
font-size: 0.26 * 100rpx; font-size: 0.24 * 100rpx;
color: #454545; color: #222;
flex: 1; flex: 1;
-o-flex: 1; -o-flex: 1;
-ms-flex: 1; -ms-flex: 1;
@ -2423,8 +2423,8 @@ page {
} }
.user .wrapper .myOrder .orderState .item .pictrue { .user .wrapper .myOrder .orderState .item .pictrue {
width: 0.49 * 100rpx; width: 0.52 * 100rpx;
height: 0.42 * 100rpx; height: 0.52* 100rpx;
margin: 0 auto 0.18 * 100rpx auto; margin: 0 auto 0.18 * 100rpx auto;
} }
@ -2440,35 +2440,37 @@ page {
} }
.user .wrapper .myService .serviceList { .user .wrapper .myService .serviceList {
padding: 0.08 * 100rpx 0 0.27 * 100rpx 0; // padding: 0.08 * 100rpx 0 0.27 * 100rpx 0;
padding: 0.2 * 100rpx 0.3 * 100rpx;
} }
.user .wrapper .myService .serviceList .item { .user .wrapper .myService .serviceList .item {
width: 100%; width: 100%;
text-align: left; text-align: left;
font-size: 0.26 * 100rpx; font-size: 0.32 * 100rpx;
color: #333; color: #222;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0.2 * 100rpx 0.3 * 100rpx; padding: 0.3 * 100rpx 0;
position: relative; position: relative;
border-bottom: 1px solid #ECECEC;
.iconfont { .iconfont {
font-size: 0.26 * 100rpx; font-size: 0.26 * 100rpx;
color: #666; color: #666;
} }
&::after { // &::after {
content: ''; // content: '';
display: block; // display: block;
position: absolute; // position: absolute;
left: 0.3 * 100rpx; // left: 0.3 * 100rpx;
right: 0; // right: 0;
bottom: 0; // bottom: 0;
border-bottom: 1rpx solid #f5f5f5; // border-bottom: 1rpx solid #f5f5f5;
z-index: 99; // z-index: 99;
height: 1rpx; // height: 1rpx;
} // }
} }
.user .wrapper .myService .serviceList .item .pictrue { .user .wrapper .myService .serviceList .item .pictrue {

2
config/index.js

@ -1,7 +1,7 @@
// export const VUE_APP_API_URL = 'http://natapp.xinxintuan.co/api'; // export const VUE_APP_API_URL = 'http://natapp.xinxintuan.co/api';
// export const VUE_APP_API_URL = 'https://wxapi.yixiang.co/api' // export const VUE_APP_API_URL = 'https://wxapi.yixiang.co/api'
// export const VUE_APP_API_URL = 'http://139.186.134.205:9006/api' // export const VUE_APP_API_URL = 'http://139.186.134.205:9006/api'
export const VUE_APP_API_URL = 'http://192.168.0.109:8088/api' export const VUE_APP_API_URL = 'http://192.168.0.110:8088/api'
// export const VUE_APP_API_URL = 'http://natapp.xinxintuan.co/api'; // export const VUE_APP_API_URL = 'http://natapp.xinxintuan.co/api';
// export const VUE_APP_API_URL = 'https://thapi.xinxintuan.co/api' // export const VUE_APP_API_URL = 'https://thapi.xinxintuan.co/api'
// export const VUE_APP_API_URL = 'https://h5api.xinxintuan.co/api'; // export const VUE_APP_API_URL = 'https://h5api.xinxintuan.co/api';

249
pages.json

@ -12,24 +12,19 @@
"navigationBarTitleText": "微信授权" "navigationBarTitleText": "微信授权"
} }
}, },
{ // {
"path": "pages/user/Login/index", // "path": "pages/user/Login/index",
"style": { // "style": {
"navigationBarTitleText": "登录" // "navigationBarTitleText": "登录"
} // }
}, // },
{ {
"path": "pages/user/Register/index", "path": "pages/user/Register/index",
"style": { "style": {
"navigationBarTitleText": "注册" "navigationBarTitleText": "注册"
} }
}, },
{
"path": "pages/user/RetrievePassword/index",
"style": {
"navigationBarTitleText": "重置密码"
}
},
{ {
"path": "pages/launch/index", "path": "pages/launch/index",
"style": { "style": {
@ -60,6 +55,24 @@
"navigationBarTitleText": "打榜详情" "navigationBarTitleText": "打榜详情"
} }
}, },
{
"path": "pages/study/editDabang",
"style": {
"navigationBarTitleText": "打卡"
}
},
{
"path": "pages/study/dabang",
"style": {
"navigationBarTitleText": "打榜"
}
},
{
"path": "pages/study/bangdanRecord",
"style": {
"navigationBarTitleText": "我的打榜记录"
}
},
{ {
"path": "pages/knowledge/index", "path": "pages/knowledge/index",
"style": { "style": {
@ -91,17 +104,13 @@
} }
}, },
{ {
"path": "pages/shop/StoreList/index", "path": "pages/shop/GoodsCon/index",
"style": {
"navigationBarTitleText": "商家列表"
}
},
{
"path": "pages/shop/GoodsList/index",
"style": { "style": {
"navigationBarTitleText": "商品列表" "navigationBarTitleText": "商品详情"
} }
}, },
{ {
"path": "pages/NotDefined/index", "path": "pages/NotDefined/index",
"style": { "style": {
@ -114,30 +123,123 @@
"navigationBarTitleText": "我的" "navigationBarTitleText": "我的"
} }
}, },
{ {
"path": "pages/shop/GoodsCollection/index", "path": "pages/user/myCourses/index",
"style": { "style": {
"navigationBarTitleText": "商品收藏" "navigationBarTitleText": "我的课程"
} }
}, },
{ {
"path": "pages/shop/GoodsFoot/index", "path": "pages/user/myBangdan/index",
"style": { "style": {
"navigationBarTitleText": "我的足迹" "navigationBarTitleText": "我的打卡榜"
} }
}, },
{ {
"path": "pages/shop/news/NewsDetail/index", "path": "pages/user/joinUs/index",
"style": { "style": {
"navigationBarTitleText": "新闻详情" "navigationBarTitleText": "招贤纳士"
} }
}, },
{ {
"path": "pages/shop/news/NewsList/index", "path": "pages/user/feedBack/index",
"style": { "style": {
"navigationBarTitleText": "新闻列表" "navigationBarTitleText": "意见反馈"
}
},
{
"path": "pages/user/PersonalData/index",
"style": {
"navigationBarTitleText": "个人资料"
}
},
{
"path": "pages/order/MyOrder/index",
"style": {
"navigationBarTitleText": "我的订单"
}
},
{
"path": "pages/order/Logistics/index",
"style": {
"navigationBarTitleText": "查看物流"
}
},
{
"path": "pages/order/OrderDetails/index",
"style": {
"navigationBarTitleText": "订单详情"
}
},
{
"path": "pages/order/OrderSubmission/index",
"style": {
"navigationBarTitleText": "提交订单"
}
},
{
"path": "pages/order/PaymentStatus/index",
"style": {
"navigationBarTitleText": "支付状态"
}
},
{
"path": "pages/order/GoodsReturn/index",
"style": {
"navigationBarTitleText": "商品退货"
}
},
{
"path": "pages/order/ReturnList/index",
"style": {
"navigationBarTitleText": "退货列表"
}
}
// {
// "path": "pages/activity/GoodsGroup/index",
// "style": {
// "navigationBarTitleText": "团购商品列表"
// }
// },
// {
// "path": "pages/orderAdmin/OrderIndex/index",
// "style": {
// "navigationBarTitleText": "商家订单统计"
// }
// }
],
"subPackages": [
{
"root": "pagesB",
"pages": [
{
"path": "pages/shop/StoreList/index",
"style": {
"navigationBarTitleText": "商家列表"
} }
}, },
{
"path": "pages/shop/GoodsList/index",
"style": {
"navigationBarTitleText": "商品列表"
}
},
{
"path": "pages/shop/GoodsCollection/index",
"style": {
"navigationBarTitleText": "商品收藏"
}
},
{
"path": "pages/shop/GoodsFoot/index",
"style": {
"navigationBarTitleText": "我的足迹"
}
},
{ {
"path": "pages/shop/EvaluateList/index", "path": "pages/shop/EvaluateList/index",
"style": { "style": {
@ -162,16 +264,29 @@
"navigationBarTitleText": "热门商品" "navigationBarTitleText": "热门商品"
} }
}, },
{ {
"path": "pages/shop/GoodsCon/index", "path": "pages/shop/IntegralGoodsCon/index",
"style": { "style": {
"navigationBarTitleText": "商品详情" "navigationBarTitleText": "积分商品详情"
} }
}, },
{ {
"path": "pages/shop/IntegralGoodsCon/index", "path": "pages/user/RetrievePassword/index",
"style": { "style": {
"navigationBarTitleText": "积分商品详情" "navigationBarTitleText": "重置密码"
}
},
{
"path": "pages/shop/news/NewsDetail/index",
"style": {
"navigationBarTitleText": "新闻详情"
}
},
{
"path": "pages/shop/news/NewsList/index",
"style": {
"navigationBarTitleText": "新闻列表"
} }
}, },
{ {
@ -270,12 +385,6 @@
"navigationBarTitleText": "用户vip" "navigationBarTitleText": "用户vip"
} }
}, },
{
"path": "pages/user/PersonalData/index",
"style": {
"navigationBarTitleText": "个人资料"
}
},
{ {
"path": "pages/user/coupon/UserCoupon/index", "path": "pages/user/coupon/UserCoupon/index",
"style": { "style": {
@ -306,54 +415,7 @@
"navigationBarTitleText": "充值" "navigationBarTitleText": "充值"
} }
}, },
{
"path": "pages/order/MyOrder/index",
"style": {
"navigationBarTitleText": "我的订单"
}
},
{
"path": "pages/order/Logistics/index",
"style": {
"navigationBarTitleText": "查看物流"
}
},
{
"path": "pages/order/OrderDetails/index",
"style": {
"navigationBarTitleText": "订单详情"
}
},
{
"path": "pages/order/OrderSubmission/index",
"style": {
"navigationBarTitleText": "提交订单"
}
},
{
"path": "pages/order/PaymentStatus/index",
"style": {
"navigationBarTitleText": "支付状态"
}
},
{
"path": "pages/order/GoodsReturn/index",
"style": {
"navigationBarTitleText": "商品退货"
}
},
{
"path": "pages/order/ReturnList/index",
"style": {
"navigationBarTitleText": "退货列表"
}
},
{
"path": "pages/orderAdmin/OrderIndex/index",
"style": {
"navigationBarTitleText": "商家订单统计"
}
},
{ {
"path": "pages/orderAdmin/AdminOrderList/index", "path": "pages/orderAdmin/AdminOrderList/index",
"style": { "style": {
@ -390,6 +452,12 @@
"navigationBarTitleText": "推广海报" "navigationBarTitleText": "推广海报"
} }
}, },
{
"path": "pages/activity/GoodsGroup/index",
"style": {
"navigationBarTitleText": "团购商品列表"
}
},
{ {
"path": "pages/activity/DargainDetails/index", "path": "pages/activity/DargainDetails/index",
"style": { "style": {
@ -408,12 +476,7 @@
"navigationBarTitleText": "砍价记录" "navigationBarTitleText": "砍价记录"
} }
}, },
{
"path": "pages/activity/GoodsGroup/index",
"style": {
"navigationBarTitleText": "团购商品列表"
}
},
{ {
"path": "pages/activity/GroupDetails/index", "path": "pages/activity/GroupDetails/index",
"style": { "style": {
@ -450,6 +513,8 @@
"navigationBarTitleText": "直播列表" "navigationBarTitleText": "直播列表"
} }
} }
]
}
], ],
"easycom": { "easycom": {
"autoscan": true, "autoscan": true,

580
pages/course/detail.vue

@ -0,0 +1,580 @@
<template>
<view class="course-detail-index">
<view class="swiper-box">
<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000">
<swiper-item>
<view class="swiper-item"></view>
</swiper-item>
<swiper-item>
<view class="swiper-item"></view>
</swiper-item>
</swiper>
</view>
<view class="course-info-box">
<view class="course-title">一代天骄王者少年禪易课程教学</view>
<view class="tips-box">
<view class="tip-item blue">国学</view>
<view class="tip-item orange">国学院</view>
</view>
</view>
<view class="tab-box acea-row row-around" :class="isFixedTop?'fixed':''">
<view class="tab-item" :class="active == '0' ? 'tab-item-active' : ''" @click="handelScroll('content1','0')">简介</view>
<view class="tab-item" :class="active == '1' ? 'tab-item-active' : ''" @click="handelScroll('content2','1')">课程安排</view>
<view class="tab-item" :class="active == '2' ? 'tab-item-active' : ''" @click="handelScroll('content3','2')">相关推荐</view>
</view>
<view class="content-box" bindscroll="scroll">
<scroll-view scroll-y="true" scroll-with-animation="true" style="height:100%;" :scroll-into-view="toView" >
<view class="teacher-info-box content" id="content1">
<view class="title-box acea-row row-middle">
<view class="left-line"></view>
<span>主讲人介绍</span>
</view>
<view class="info-box">
<image src="../../static/img1.png"></image>
<view class="name">刘老师</view>
<view class="tip">禪易能量高级讲师</view>
<view class="desc">抱朴书院孕育自华夏优秀传统文化博学致用抱朴含虚为院训弘扬国粹利益社会为动力</view>
</view>
</view>
<view class="course-desc-box">
<view class="title-box acea-row row-middle">
<view class="left-line"></view>
<span>课程简介</span>
</view>
<text class="desc">
抱朴书院孕育自华夏优秀传统文化博学致用抱朴含虚为院训弘扬国粹利益社会为动力\n
抱朴书院孕育自华夏优秀传统文化博学致用抱朴含虚为院训弘扬国粹利益社会为动力
</text>
</view>
<view class="course-desc-box content" id="content2">
<view class="title-box acea-row row-middle">
<view class="left-line"></view>
<span>课程表</span>
</view>
<view class="course-card-list">
<view class="course-card-item acea-row row-middle">
<image src="../../static/course-icon1.png"></image>
<view class="label">课程时间</view>
<view class="info">2021.5.31 - 2021.6.3</view>
</view>
<view class="course-card-item acea-row row-middle">
<image src="../../static/course-icon2.png"></image>
<view class="label">课程地点</view>
<view class="info">湖北 武汉</view>
</view>
<view class="course-card-item acea-row row-middle">
<image src="../../static/course-icon3.png"></image>
<view class="label">签到时间</view>
<view class="info">2021.5.31 - 2021.6.3</view>
</view>
<view class="course-card-item acea-row row-middle">
<image src="../../static/course-icon4.png"></image>
<view class="label">报名截止</view>
<view class="info">2021.5.31 - 2021.6.3</view>
</view>
</view>
</view>
<view class="course-desc-box" >
<view class="title-box acea-row row-middle">
<view class="left-line"></view>
<span>课程安排</span>
</view>
<text class="desc">
1.1如何设定自己的吸财守财的银行卡密码
1.2如何设定自己的吸财守财的银行卡号
1.3如何设定自己的利财运利婚姻利子孙名利双收手机号
1.4如何选择自己用不发生车祸的车牌号
1.5如何选择家族兴旺的门牌号
1.6如何运用数字进行预测
</text>
</view>
<view class="recommend-box content" id="content3">
<view class="title-box acea-row row-middle row-center">
<view class="row-line"></view>
<view class="title">相关推荐</view>
<view class="row-line"></view>
</view>
<view class="knowledge-list">
<view class="knowledge-item acea-row" v-for="item in articleList" @click="toDetail(item.id)">
<view class="img-box">
<image :src="item.imageInput" mode=""></image>
</view>
<view class="knowledge-info-box">
<view class="title line1">{{item.title}}</view>
<view class="intro line2">{{item.synopsis}}</view>
<view class="type-box acea-row">
<view class="tip blue">{{item.chargeType == 0 ? '免费' : item.articleCharge}}</view>
<view class="time">{{item.addTime}}</view>
</view>
</view>
</view>
<view class="knowledge-item acea-row">
<view class="img-box">
<image src="../../static/img1.png" mode=""></image>
</view>
<view class="knowledge-info-box">
<view class="title line1">阴阳五行一个人的阴阳五的阴阳五行</view>
<view class="time">2021-5-31-6.3 8:30-18:30</view>
<view class="address">中国 武汉</view>
<view class="type-box acea-row row-between row-middle">
<view class="price">3000</view>
<view class="signin-btn red">去报名</view>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
<view class="footer-box acea-row row-between-wrapper">
<view class="footer-left">
<view class="price"><span class="fz24"></span>199</view>
</view>
<view class="footer-right">
<view class="btn-box acea-row row-between-wrapper">
<view class="count-down">
<view>距离截止时间还剩</view>
<view class="colR">03:23:28</view>
</view>
<view class="signin-btn" @click="signInClick">立即报名</view>
</view>
<!-- <view class="signin-btn call-btn" @click="call">联系服务老师</view> -->
</view>
</view>
<view class="mask-box" v-if="dialog">
<view class="dialog-box">
<view class="close" @click="dialog = false">×</view>
<view class="dialog-top acea-row-nowrap row-center-wrapper">
<image src="../../static/error-icon.png"></image>
<view class="word">很遗憾您的会员等级较低无法报名该课程请联系服务老师进行升级</view>
</view>
<view class="dialog-btm">
<view class="l-box acea-row row-between-wrapper">
<view class="acea-row row-middle">
<image src="../../static/img1.png"></image>
<view>
<view>王小明</view>
<view>15007992828</view>
</view>
</view>
<view class="call-btn">拨打电话</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
// import WucTab from '@/components/wuc-tab/wuc-tab.vue';
export default {
data() {
return {
active: '0',
toView: '',
heightArr:[],
tabInitTop:'',
isFixedTop: false,
dialog:false
}
},
onLoad() {
//
uni.createSelectorQuery().select('.tab-box').boundingClientRect((res) => {
console.log(res);
if (res && res.top > 0) {
var tabInitTop= res.top;
this.tabInitTop= tabInitTop
}
}).exec();
},
mounted() {
this.getHeightArr()
},
methods: {
signInClick(){
this.dialog = true
},
handelScroll(id,idx){
uni.createSelectorQuery().select('#'+id).boundingClientRect(function(res){
uni.pageScrollTo({
scrollTop:res.top,
duration: 300
});
}).exec()
this.active = idx;
this.toView = id
},
getHeightArr(){
let h=0;
let heightArr = [];
//selectAll
uni.createSelectorQuery().selectAll('.content').boundingClientRect((rect) => {
}).exec((res) => {
console.log(res)
res[0].forEach((item)=>{
h+=item.height;
heightArr.push(h);
})
this.heightArr = heightArr;
})
},
onPageScroll(res) {
let scrollTop = res.scrollTop;
let scrollArr = this.heightArr;
for  (let  i = 0; i < scrollArr.length; i++) {
if  (scrollTop >= 0  && scrollTop < scrollArr[0]) {
this.active = 0;
} else if (scrollTop >= (scrollArr[i - 1]) && scrollTop < scrollArr[i]) {
this.active= i;
}
}
var isSatisfy = scrollTop >= this.tabInitTop? true : false;
//
if (this.isFixedTop === isSatisfy) {
return false;
}
this.isFixedTop = isSatisfy
},
}
}
</script>
<style scoped lang="less">
.course-detail-index{
width: 100%;
box-sizing: border-box;
.mask-box{
width: 100%;
height: 100%;
background: rgba(0,0,0,.6);
position: fixed;
top: 0;
.dialog-box{
width: 600rpx;
border-radius: 12rpx;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
.close{
width: 38rpx;
height: 38rpx;
position: absolute;
right: 12rpx;
top: 12rpx;
font-size: 36rpx;
}
.dialog-top{
width: 100%;
height: 212rpx;
box-sizing: border-box;
padding: 30rpx 38rpx 0;
background: linear-gradient(180deg, #FFE8E8 0%, #FFFFF8 100%);
image{
width: 154rpx;
height: 162rpx;
margin-right: 12rpx;
}
.word{
width: calc(100% - 164rpx);
height: 108rpx;
font-size: 28rpx;
color: #666;
}
}
.dialog-btm{
background-color: #fff;
padding: 30rpx 32rpx;
color: #666;
font-size: 28rpx;
image{
width: 100rpx;
height: 100rpx;
border-radius: 25px;
margin-right: 20rpx;
}
.call-btn{
width: 192rpx;
height: 60rpx;
background: #ECEFFD;
border-radius: 12rpx;
text-align: center;
line-height: 60rpx;
color: #6E85EB;
}
}
}
}
.swiper-box{
width: 100%;
height: 340rpx;
swiper{
height: 100%;
}
}
.course-info-box{
box-sizing: border-box;
padding: 30rpx 30rpx 50rpx;
background: #fff;
.course-title{
font-size: 40rpx;
font-weight: 500;
color: #333333;
line-height: 56rpx;
margin: 0rpx 0 20rpx;
}
.tips-box{
display: flex;
.tip-item{
min-width: 60rpx;
height: 34rpx;
text-align: center;
line-height: 34rpx;
font-size: 24rpx;
margin-left: 20rpx;
padding: 0 5rpx;
}
.blue{
color: #6E85EB;
border: 1px solid #6E85EB;
background: #EDEFF8;
}
.orange{
color: #EF644E;
border: 1px solid #EF644E;
background: #FFF4F2;
}
}
}
.tab-box{
white-space: nowrap;
width: 100%;
background: #fff;
padding: 18rpx 34rpx 0;
.tab-item{
width: 33%;
text-align: center;
display: inline-block;
padding-bottom: 18rpx;
font-size: 32rpx;
color: #222;
}
.tab-item-active{
font-size: 40rpx;
font-weight: bold;
border-bottom: 4rpx solid #EB5744;
}
}
.fixed{
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 99;
}
.content-box{
width: 100%;
box-sizing: border-box;
background: #F5F6F7;
padding: 24rpx 22rpx;
.teacher-info-box,.course-desc-box{
width: 100%;
background:#fff;
border-radius: 8rpx;
padding: 18rpx 24rpx 30rpx;
margin-bottom: 20rpx;
}
.desc{
text-indent: 2em;
font-size: 28rpx;
color: #666666;
line-height: 24px;
}
.info-box{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
image{
width: 100rpx;
height: 100rpx;
border-radius: 25px;
}
.name{
font-size: 32rpx;
color: #3C464F;
line-height: 44rpx;
}
.tip{
font-size: 24rpx;
color: #999999;
line-height: 34px;
}
}
.title-box{
font-size: 36rpx;
font-weight: bold;
color: #3C464F;
line-height: 50rpx;
margin-bottom: 20rpx;
.left-line{
width: 6rpx;
height: 32rpx;
background-color: #EB5744;
margin-right: 16rpx;
}
}
.course-card-item{
font-size: 32rpx;
image{
width: 30rpx;
height: 30rpx;
}
.label{
color: #999999;
line-height: 34rpx;
margin: 0 32rpx 0 18rpx;
}
.info{
color: #666666;
line-height: 34px;
}
}
.recommend-box{
.title-box{
font-size: 32rpx;
color: #EB5744;
.title{
margin: 0 10rpx;
}
.row-line{
width: 36rpx;
height: 2rpx;
border: 2rpx solid #EB5744;
}
}
.knowledge-list {
width: 100%;
.knowledge-item {
background: #fff;
padding: 32rpx;
.img-box {
width: 204rpx;
height: 200rpx;
margin-right: 30rpx;
image {
width: 100%;
height: 100%;
}
}
.knowledge-info-box {
width: calc(100% - 234rpx);
.title {
font-size: 28rpx;
color: #333;
font-size: 500;
line-height: 40rpx;
}
.time,.address{
color: #999;
font-size: 24rpx;
margin-top: 5rpx;
line-height: 34rpx;
}
.intro {
font-size: 28rpx;
color: #999999;
line-height: 40rpx;
margin: 8rpx 0 36rpx;
}
.type-box {
font-size: 24rpx;
color: #999;
margin-top: 28rpx;
.price{
font-size: 36rpx;
color: #EA533E;
font-weight: 600;
}
.signin-btn{
width: 156rpx;
height: 60rpx;
text-align: center;
line-height: 60rpx;
background: #FFEAE7;
border-radius: 12rpx;
font-size: 32rpx;
}
.red{
background: #FFEAE7;
color: #EE7060;
}
.blue {
color: #6E85EB;
background: #ECEFFD;
}
.yellow {
color: #F99C10;
background: #FFEDCC;
}
}
}
}
}
}
}
.footer-box{
width: 100%;
padding: 24rpx 26rpx 66rpx 44rpx;
background: #fff;
.price{
font-size: 44rpx;
color: #EA533E;
}
.fz24{
font-size: 24rpx;
}
.footer-right{
.btn-box{
text-align: center;
width: 410rpx;
height: 80rpx;
border-radius: 44px;
border: 2rpx solid #EB5744;
box-sizing: border-box;
overflow: hidden;
.count-down{
width: calc(100% - 178rpx);
text-align: center;
font-size: 24rpx;
color: #999;
}
.colR{
color: #EB5744;
}
.signin-btn{
width: 178rpx;
height: 100%;
line-height: 84rpx;
font-size: 32rpx;
color: #fff;
background: #EB5744;
}
}
.call-btn{
width: 268rpx;
height: 80rpx;
background: #F99C10;
border-radius: 44rpx;
text-align: center;
line-height: 80rpx;
color: #fff;
}
}
}
}
</style>

285
pages/course/index.vue

@ -12,28 +12,57 @@
<!-- #endif --> <!-- #endif -->
</view> </view>
<view class="content-box"> <view class="content-box">
<wuc-tab <view class="tab-box">
:tab-list="tabList" <wuc-tab :tab-list="tabList" :tabCur.sync="TabCur" @change="tabChange"
:tabCur.sync="TabCur"
@change="tabChange"
tab-class="text-center text-black bg-white" select-class="text-orange text-xl"> tab-class="text-center text-black bg-white" select-class="text-orange text-xl">
</wuc-tab> </wuc-tab>
<SecondMenu <SecondMenu :menuList="secondMenu" :active.sync="active" @secondMenuClick="secondMenuClick">
:menuList="secondMenu"
:active.sync="active"
@secondMenuClick="secondMenuClick">
</SecondMenu> </SecondMenu>
</view>
<view class="bangdan-box">
<view class="bangdan-list">
<scroll-view class="scroll-view_H" scroll-x="true">
<view class="bangdan-item"
:class="index%2 !== 0 ? 'bgR' : ''"
v-for="(item,index) in 6" :key="index"
@click="toStudyDetail(item.id)">
<view>连续11天打卡站桩</view>
<view class="time">2021.5.28-2021.6.18</view>
<view class="acea-row row-between-wrapper">
<view class="jifen">30积分</view>
<view class="signin-btn">报名参加</view>
</view>
</view>
</scroll-view>
</view>
</view>
<view class="knowledge-list"> <view class="knowledge-list">
<view class="knowledge-item acea-row" v-for="item in articleList" @click="toDetail(item.id)"> <view class="active-word">国学·</view>
<view class="knowledge-item acea-row" v-for="item in courseList" @click="toDetail(item.id)">
<view class="img-box">
<image :src="item.imageArr[0]" mode=""></image>
</view>
<view class="knowledge-info-box">
<view class="title line1">{{item.courseName}}</view>
<view class="time">{{utils.spl(item.courseStartTime)[0]}}~{{utils.spl(item.courseEndTime)[0]}}</view>
<view class="address">{{item.coursePlace}}</view>
<view class="type-box acea-row row-between row-middle">
<view class="price">{{item.courseCharge}}</view>
<view class="signin-btn red">去报名</view>
</view>
</view>
</view>
<view class="knowledge-item acea-row">
<view class="img-box"> <view class="img-box">
<image :src="item.imageInput" mode=""></image> <image src="../../static/img1.png" mode=""></image>
</view> </view>
<view class="knowledge-info-box"> <view class="knowledge-info-box">
<view class="title line1">{{item.title}}</view> <view class="title line1">阴阳五行一个人的阴阳五的阴阳五行</view>
<view class="intro line2">{{item.synopsis}}</view> <view class="time">2021-5-31-6.3 8:30-18:30</view>
<view class="type-box acea-row"> <view class="address">中国 武汉</view>
<view class="tip blue">{{item.chargeType == 0 ? '免费' : item.articleCharge}}</view> <view class="type-box acea-row row-between row-middle">
<view class="time">{{item.addTime}}</view> <view class="price">3000</view>
<view class="signin-btn red" @click="toDetail(1)">去报名</view>
</view> </view>
</view> </view>
</view> </view>
@ -41,185 +70,237 @@
</view> </view>
</view> </view>
</template> </template>
<script module="utils" lang="wxs" src="../../utils/subutil.wxs"></script>
<script> <script>
import WucTab from '@/components/wuc-tab/wuc-tab.vue'; import WucTab from '@/components/wuc-tab/wuc-tab.vue';
import SecondMenu from '../knowledge/components/secondMenu.vue'; import SecondMenu from '../knowledge/components/secondMenu.vue';
import { getCategory,getArticle } from '@/api/knowledge'; import {
getCategory,
getArticle,
getStudyList,
getCourses
} from '@/api/knowledge';
export default { export default {
data() { data() {
return { return {
TabCur: null, TabCur: null,
tabList: [{categoryName:'七雅',id:10},{categoryName:'武当',id:12},], tabList: [],
secondMenu:[], secondMenu: [],
active:null, active: null,
articleList:[] courseList: [],
studyList:[]
} }
}, },
components: { WucTab,SecondMenu }, components: {
WucTab,
SecondMenu
},
onLoad() { onLoad() {
return false getCategory().then((res) => {
getCategory().then((res)=>{
this.tabList = res.data this.tabList = res.data
this.$set(this, 'tabList', res.data) this.$set(this, 'tabList', res.data)
this.$set(this, 'secondMenu', res.data[0].categoryList) this.$set(this, 'secondMenu', res.data[0].categoryList)
this.$set(this, 'TabCur', res.data[0].id) this.$set(this, 'TabCur', res.data[0].id)
if(res.data[0].categoryList.length > 0){ if (res.data[0].categoryList.length > 0) {
this.$set(this, 'active', res.data[0].categoryList[0].id) this.$set(this, 'active', res.data[0].categoryList[0].id)
} }
}).then(()=>{ }).then(() => {
this.getArticle() this.getStudyList()
this.getCourses()
}) })
}, },
methods: { methods: {
toDetail(id){ toStudyDetail(id) {
this.$yrouter.push({
path: '/pages/study/detail',
query: {
id: id,
},
})
},
toDetail(id) {
this.$yrouter.push({ this.$yrouter.push({
path: '/pages/knowledge/detail', path: '/pages/course/detail',
query: { query: {
id: id, id: id,
}, },
}) })
}, },
getArticle(){ getStudyList() {
var cid = null;
this.active == null ? cid = this.TabCur : cid = this.active
getStudyList({categoryId: cid,listState:0}).then((res) => {
if (res.success) {
this.studyList = res.data
}
})
},
getCourses() {
var cid = null; var cid = null;
this.active == null ? cid = this.TabCur : cid = this.active this.active == null ? cid = this.TabCur : cid = this.active
getArticle({cid:cid}).then((res)=>{ getCourses({categoryId: cid,listState:0}).then((res) => {
if(res.success){ if (res.success) {
this.articleList = res.data this.courseList = res.data
} }
}) })
}, },
tabChange(item) { tabChange(item) {
if(item.categoryList.length > 0){ if (item.categoryList.length > 0) {
this.$set(this, 'active', item.categoryList[0].id) this.$set(this, 'active', item.categoryList[0].id)
} }
this.secondMenu = item.categoryList; this.secondMenu = item.categoryList;
this.TabCur = item.id; this.TabCur = item.id;
this.getArticle() this.getStudyList()
this.getCourses()
}, },
secondMenuClick(item){ secondMenuClick(item) {
this.active = item.id; this.active = item.id;
this.getArticle() this.getStudyList()
this.getCourses()
} }
} }
} }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
.header-search { .header-search {
transition: all linear 0.3s; transition: all linear 0.3s;
background: #fff; background: #fff;
.search{ .search {
border: 2rpx solid #EA533E; border: 2rpx solid #EA533E;
background-color: #fff; background-color: #fff;
} }
} }
.konwledge-index{ .content-box{
background: #fff;
min-height: 100%;
.content-box{
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
padding: 0 24rpx; .tab-box{
box-shadow: 0px 6px 12px 0px rgba(227,227,227,0.29);
}
/deep/.second-menu-box{
padding: 30rpx 32rpx;
} }
.introduce-box{ }
.bangdan-box{
width: 100%;
box-sizing: border-box;
padding-left: 30rpx;
.scroll-view_H{
white-space: nowrap;
width: 100%; width: 100%;
height: 328rpx;
box-shadow: 0px 6rpx 14rpx 8rpx rgba(255,234,231,0.2);
border-radius: 8px;
overflow: hidden;
margin: 30rpx 0;
.left-box{
width: 16rpx;
height: 100%;
background: #FAEFED;
} }
.right-box{ .bangdan-item{
width: calc(100% - 16rpx); width: 514rpx;
padding: 30rpx 50rpx 0 24rpx; height: 234rpx;
font-size: 26rpx; box-sizing: border-box;
color: #999; padding: 20rpx;
.title-txt{ color: #fff;
font-size: 36rpx; display: inline-block;
background: linear-gradient(165deg, #3ABFB8 0%, #7CE1DD 100%);
border-radius: 10rpx;
font-size: 34rpx;
margin-right: 20rpx;
.time{
font-size: 24rpx;
color: #FFFFFF;
line-height: 40rpx;
margin:10rpx 0 18rpx;
}
.jifen{
font-size: 46rpx;
font-weight: 500; font-weight: 500;
color: #3C464F;
line-height: 50rpx;
font-weight: 600;
margin-bottom: 20rpx;
} }
.desc{ .signin-btn{
text-indent: 1em; width: 180rpx;
height: 68rpx;
background: #FFFFFF;
border-radius: 40rpx;
text-align: center;
line-height: 68rpx;
color: #222222;
font-size: 26rpx;
} }
} }
.bgR{
background: linear-gradient(165deg, #FF7563 0%, #FEABA0 100%);
} }
}
.knowledge-list{ .konwledge-index {
min-height: 100%;
width: 100%;
background: #fff;
.knowledge-list {
width: 100%; width: 100%;
.knowledge-item{ padding:0 32rpx;
margin-top: 50rpx;
.knowledge-item {
background: #fff;
padding: 32rpx 0;
border-bottom: 1px solid #ECECEC; border-bottom: 1px solid #ECECEC;
padding-bottom: 20rpx; .img-box {
margin-bottom: 20rpx;
.img-box{
width: 204rpx; width: 204rpx;
height: 200rpx; height: 200rpx;
margin-right: 30rpx; margin-right: 30rpx;
image{ image {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
.knowledge-info-box{ .knowledge-info-box {
width: calc(100% - 234rpx); width: calc(100% - 234rpx);
.title{ .title {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
font-size: 500; font-size: 500;
line-height: 40rpx; line-height: 40rpx;
} }
.intro{ .time,.address{
color: #999;
font-size: 24rpx;
margin-top: 5rpx;
line-height: 34rpx;
}
.intro {
font-size: 28rpx; font-size: 28rpx;
color: #999999; color: #999999;
line-height: 40rpx; line-height: 40rpx;
margin: 8rpx 0 36rpx; margin: 8rpx 0 36rpx;
} }
.type-box{ .type-box {
font-size: 24rpx; font-size: 24rpx;
color: #999; color: #999;
.tip{ margin-top: 28rpx;
width: 60rpx; .price{
height: 34rpx; font-size: 36rpx;
line-height: 32rpx; color: #EA533E;
font-weight: 600;
}
.signin-btn{
width: 156rpx;
height: 60rpx;
text-align: center; text-align: center;
background: #EDEFF8; line-height: 60rpx;
border-radius: 4rpx; background: #FFEAE7;
border: 1px solid #6E85EB; border-radius: 12rpx;
padding: 0 6rpx; font-size: 32rpx;
font-size: 22rpx; }
margin-right: 20rpx; .red{
box-sizing: border-box; background: #FFEAE7;
color: #EE7060;
} }
.blue{ .blue {
color: #6E85EB; color: #6E85EB;
background: #EDEFF8; background: #ECEFFD;
border-color: #6E85EB;
} }
.yellow{ .yellow {
color: #F99C10; color: #F99C10;
background: #FFEDCC; background: #FFEDCC;
border-color: #F99C10;
} }
} }
} }
} }
} }
} }
.text-black{
font-size: 32rpx;
}
.text-orange{
color: #EB5744;
font-size: 40rpx !important;
border-color: #EB5744;
}
</style> </style>

76
pages/home/index.vue

@ -7,7 +7,7 @@
</view> </view>
<!-- #ifndef H5 --> <!-- #ifndef H5 -->
<view class="qr" @click="startQr()" v-if="$deviceType !== 'weixin'"> <view class="qr" @click="startQr()" v-if="$deviceType !== 'weixin'">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/qr.png`" /> <image src="../../static/saoyisao-icon.png" />
</view> </view>
<!-- #endif --> <!-- #endif -->
</view> </view>
@ -23,11 +23,11 @@
</view> </view>
<view class="date-box acea-row row-middle"> <view class="date-box acea-row row-middle">
<view class="date-btn prev-btn"><image src="../../static/prev.png"></image></view> <view class="date-btn prev-btn"><image src="../../static/prev.png"></image></view>
<view class="time-box">四月二十四</view> <view class="time-box">{{todayDate}}</view>
<view class="date-btn next-btn"><image src="../../static/next.png"></image></view> <view class="date-btn next-btn"><image src="../../static/next.png"></image></view>
</view> </view>
<view class="week-box"> <view class="week-box">
<span class="week">星期一</span> <span class="week">{{week}}</span>
<span>辛丑牛年 甲午月 丙戌日</span> <span>辛丑牛年 甲午月 丙戌日</span>
</view> </view>
<view class="fortune-detail"> <view class="fortune-detail">
@ -67,10 +67,10 @@
<view class="recommend-box p30"> <view class="recommend-box p30">
<view class="title-box acea-row row-between-wrapper"> <view class="title-box acea-row row-between-wrapper">
<view class="title">今日推荐</view> <view class="title">今日推荐</view>
<view class="more">查看全部课程</view> <view class="more" @click="toCourse">查看全部课程</view>
</view> </view>
<view class="recommend-list-box acea-row"> <view class="recommend-list-box acea-row">
<view class="recommend-item" v-for="item in 4" :key="index"> <view class="recommend-item" v-for="(item,index) in 4" :key="index" @click="toCourseDetail(item.id)">
<view class="img-box"><image src="../../static/img2.png"></image></view> <view class="img-box"><image src="../../static/img2.png"></image></view>
<view class="course-content"> <view class="course-content">
<view class="course-title line1">一代天骄·王者少年</view> <view class="course-title line1">一代天骄·王者少年</view>
@ -91,11 +91,11 @@
<view class="study-list-box"> <view class="study-list-box">
<view class="title-box acea-row row-between-wrapper"> <view class="title-box acea-row row-between-wrapper">
<view class="title">学习榜单</view> <view class="title">学习榜单</view>
<view class="more">查看全部榜单</view> <view class="more" @click="toCourse">查看全部榜单</view>
</view> </view>
<view class="study-list uni-padding-wrap uni-common-mt"> <view class="study-list uni-padding-wrap uni-common-mt">
<scroll-view class="scroll-view_H" scroll-x="true"> <scroll-view class="scroll-view_H" scroll-x="true">
<view class="study-item scroll-view-item_H" v-for="(item,index) in 6" :key="index"> <view class="study-item scroll-view-item_H" v-for="(item,index) in 6" :key="index" @click="toStudyDetail(item.id)">
<view class="day-box acea-row row-middle"> <view class="day-box acea-row row-middle">
<image src="../../static/date-icon.png" mode="" v-if="index%2 == 0"></image> <image src="../../static/date-icon.png" mode="" v-if="index%2 == 0"></image>
<image src="../../static/date-icon2.png" mode="" v-if="index%2 != 0"></image> <image src="../../static/date-icon2.png" mode="" v-if="index%2 != 0"></image>
@ -116,7 +116,7 @@
<view class="readyarticle-box"> <view class="readyarticle-box">
<view class="title-box acea-row row-between-wrapper"> <view class="title-box acea-row row-between-wrapper">
<view class="title">大家都在看</view> <view class="title">大家都在看</view>
<view class="more">查看全部文章</view> <view class="more" @click="toKnowledge">查看全部文章</view>
</view> </view>
<view class="article-list"> <view class="article-list">
<view class="article-item"> <view class="article-item">
@ -203,7 +203,6 @@ export default {
info: { info: {
fastList: [], fastList: [],
bastBanner: [], bastBanner: [],
bastList: [], bastList: [],
}, },
likeInfo: [], likeInfo: [],
@ -265,6 +264,10 @@ export default {
observeParents: true, observeParents: true,
}, },
bgImage: '', bgImage: '',
chinese: ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九'],
weeks: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
week:'',
todayDate:'',
} }
}, },
computed: { computed: {
@ -284,14 +287,11 @@ export default {
onLoad: function() { onLoad: function() {
this.getLocation() this.getLocation()
let that = this let that = this
// uni.showLoading({ this.getDate();
// title: "",
// });
getCanvas() getCanvas()
.then(res => {}) .then(res => {})
.catch(error => { .catch(error => {
this.homeData = JSON.parse(error.data.json) this.homeData = JSON.parse(error.data.json)
console.log(this.homeData)
}) })
getHomeData().then(res => { getHomeData().then(res => {
that.logoUrl = res.data.logoUrl that.logoUrl = res.data.logoUrl
@ -312,6 +312,30 @@ export default {
}, },
methods: { methods: {
...mapActions(['getLocation']), ...mapActions(['getLocation']),
getDate(){
var today = new Date();
var m = (today.getMonth()+1).toString();
var d = today.getDate().toString();
var day = today.getDay();
this.week = this.weeks[day]
if (m.length == 2) {
if (m.charAt(0) == "0") {
this.todayDate += (this.chinese[m.charAt(1)] + "月");
}
if (m.charAt(0) == "1") {
this.todayDate += ("十" + this.chinese[m.charAt(1)] + "月");
}
} else {
this.todayDate += (this.chinese[m.charAt(0)] + "月");
}
//
if (d.length == 2) {
this.todayDate += (this.chinese[d.charAt(0)] + "十" + this.chinese[d.charAt(1)]);
}
else {
this.todayDate += (this.chinese[d.charAt(0)]);
}
},
onShareTimeline: function() { onShareTimeline: function() {
return { return {
title: this.miniHomeRemark, title: this.miniHomeRemark,
@ -326,6 +350,32 @@ export default {
path: 'pages/home/index?spread=' + uni.getStorageSync('uid'), path: 'pages/home/index?spread=' + uni.getStorageSync('uid'),
} }
}, },
toCourseDetail(id){
this.$yrouter.push({
path: '/pages/course/detail',
query: {
id:id,
},
})
},
toStudyDetail(id){
this.$yrouter.push({
path: '/pages/study/detail',
query: {
id:id,
},
})
},
toKnowledge(){
uni.switchTab({
url: "/pages/knowledge/index"
})
},
toCourse(){
uni.switchTab({
url: "/pages/course/index"
})
},
goRoll(item) { goRoll(item) {
if (item.uniapp_url) { if (item.uniapp_url) {
this.$yrouter.push(item.uniapp_url) this.$yrouter.push(item.uniapp_url)

5
pages/knowledge/components/secondMenu.vue

@ -46,12 +46,15 @@
.second-menu-box{ .second-menu-box{
width: 100%; width: 100%;
margin-bottom: 40rpx; margin-bottom: 40rpx;
padding-top: 34rpx;
background: #fff;
padding-bottom: 20rpx;
.menu-item{ .menu-item{
min-width: 76rpx; min-width: 76rpx;
height: 62rpx; height: 62rpx;
box-sizing: border-box; box-sizing: border-box;
padding: 6rpx 20rpx; padding: 6rpx 20rpx;
font-size: 32rpx; font-size: 28rpx;
background: #F6F7F8; background: #F6F7F8;
border-radius: 14rpx; border-radius: 14rpx;
color: #222; color: #222;

9
pages/knowledge/index.vue

@ -22,7 +22,7 @@
@secondMenuClick="secondMenuClick"> @secondMenuClick="secondMenuClick">
</SecondMenu> </SecondMenu>
<view class="knowledge-list"> <view class="knowledge-list">
<view class="knowledge-item acea-row" v-for="item in articleList" @click="toDetail(item.id)"> <view class="knowledge-item acea-row" v-if="articleList.length > 0" v-for="item in articleList" @click="toDetail(item.id)">
<view class="img-box"> <view class="img-box">
<image :src="item.imageInput" mode=""></image> <image :src="item.imageInput" mode=""></image>
</view> </view>
@ -35,6 +35,7 @@
</view> </view>
</view> </view>
</view> </view>
<view class="no-content" v-if="articleList.length == 0">暂无内容...</view>
</view> </view>
</view> </view>
</view> </view>
@ -144,6 +145,12 @@
.knowledge-list{ .knowledge-list{
width: 100%; width: 100%;
.no-content{
font-size: 28rpx;
color: #666666;
text-align: center;
padding: 30rpx 0;
}
.knowledge-item{ .knowledge-item{
border-bottom: 1px solid #ECECEC; border-bottom: 1px solid #ECECEC;
padding-bottom: 20rpx; padding-bottom: 20rpx;

188
pages/shop/GoodsClass/index.vue

@ -7,7 +7,75 @@
</view> </view>
</view> </view>
</div> </div>
<view class="aside"> <view class="banner-box">
<swiper class="swiper-box" :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000">
<swiper-item>
<view class="swiper-item">1</view>
</swiper-item>
<swiper-item>
<view class="swiper-item">2</view>
</swiper-item>
</swiper>
</view>
<view class="userInfo-box acea-row row-between row-middle">
<view class="userInfo-l acea-row row-center-wrapper">
<image src="../../../static/img1.png"></image>
<view class="userInfo">
<view>亲爱的下午好</view>
<view class="name">慵懒的猫</view>
</view>
</view>
<view class="userInfo-r">
<view>
<text>2000</text>积分
</view>
<view class="tips">您还有积分未使用</view>
</view>
</view>
<view class="goods-list-box">
<view class="goods-list-item">
<view class="goods-type-box acea-row row-center row-middle">
<view class="icon-l"><image src="../../../static/titleL-icon.png"></image></view>
<view class="t-word">禅意能量</view>
<view class="icon-l"><image src="../../../static/titleR-icon.png"></image></view>
</view>
<view class="goods-list acea-row">
<view class="goods-item" @click="toGoodsDetail(1)">
<image src="../../../static/img1.png"></image>
<view class="goods-desc-box">
<view class="goods-name">禅易香囊 纯手工制作提神</view>
<view class="price">199+100积分</view>
<view class="buy-count">51人购买</view>
</view>
</view>
<view class="goods-item">
<image src="../../../static/img1.png"></image>
<view class="goods-desc-box">
<view class="goods-name">禅易香囊 纯手工制作提神</view>
<view class="price">199+100积分</view>
<view class="buy-count">51人购买</view>
</view>
</view>
<view class="goods-item">
<image src="../../../static/img1.png"></image>
<view class="goods-desc-box">
<view class="goods-name">禅易香囊 纯手工制作提神</view>
<view class="price">199+100积分</view>
<view class="buy-count">51人购买</view>
</view>
</view>
<view class="goods-item">
<image src="../../../static/img1.png"></image>
<view class="goods-desc-box">
<view class="goods-name">禅易香囊 纯手工制作提神</view>
<view class="price">199+100积分</view>
<view class="buy-count">51人购买</view>
</view>
</view>
</view>
</view>
</view>
<!-- <view class="aside">
<view <view
class="item acea-row row-center-wrapper" class="item acea-row row-center-wrapper"
:class="categoryDivindex === navActive ? 'on' : ''" :class="categoryDivindex === navActive ? 'on' : ''"
@ -41,8 +109,8 @@
</view> </view>
</view> </view>
</view> </view>
</view> </view> -->
<view style="height:100rpx;"></view> <!-- <view style="height:100rpx;"></view> -->
</view> </view>
</template> </template>
<script> <script>
@ -82,6 +150,12 @@ export default {
query: { id: child.id, title: child.cateName } query: { id: child.id, title: child.cateName }
}); });
}, },
toGoodsDetail(id){
this.$yrouter.push({
path: "/pages/shop/GoodsCon/index",
query: { id: id }
});
},
activeCateId(n) { activeCateId(n) {
let index = 0; let index = 0;
n = parseInt(n); n = parseInt(n);
@ -124,8 +198,114 @@ export default {
}; };
</script> </script>
<style > <style lang="less" scoped>
.productSort { .productSort {
height: 100%; height: 100%;
background: #F5F6F7 !important;
}
.index{
height: 96rpx;
}
.banner-box{
width: 100%;
height: 386rpx;
margin: 20rpx 0;
background: #fff;
.swiper-box{
width: 100%;
height: 100%;
}
}
.header .search{
border: 2rpx solid #EA533E;
background-color: #fff;
}
.userInfo-box{
width: 100%;
padding: 30rpx;
font-size: 28rpx;
color: #222;
background: #fff;
.userInfo-l{
image{
width: 80rpx;
height: 80rpx;
border-radius: 25px;
}
.userInfo{
line-height: 40rpx;
margin-left: 20rpx;
.name{
font-size: 24rpx;
color: #999;
line-height: 34rpx;
}
}
}
.userInfo-r{
font-size: 36rpx;
text{
color: #F99C10;
font-size: 36rpx;
display: inline-block;
margin-right: 12rpx;
}
.tips{
font-size: 24rpx;
color: #999;
line-height: 34rpx;
}
}
}
.goods-list-box{
width: 100%;
padding: 0 30rpx;
.goods-list-item{
width: 100%;
.goods-type-box{
image{
width: 94rpx;
height: 94rpx;
}
.t-word{
font-size: 36rpx;
color: #222;
font-weight: 600;
}
}
.goods-list{
width: 100%;
.goods-item{
width: 335rpx;
background: #fff;
margin-right: 18rpx;
margin-bottom: 30rpx;
border-radius: 10rpx;
overflow: hidden;
image{
width: 100%;
height: 336rpx;
}
}
.goods-item:nth-child(2n){
margin-right: 0;
}
.goods-desc-box{
width: 100%;
padding: 16rpx;
font-size: 24rpx;
.goods-name{
line-height: 34rpx;
}
.price{
font-size: 28rpx;
color: #E5270F;
line-height: 40rpx;
margin-bottom: 26rpx;
}
}
}
}
} }
</style> </style>

199
pages/shop/GoodsEvaluate/index.vue

@ -1,199 +0,0 @@
<template>
<view class="evaluate-con">
<view class="goodsStyle acea-row row-between" v-if="orderCon.productInfo">
<view class="pictrue">
<image :src="orderCon.productInfo.image" class="image" />
</view>
<view class="text acea-row row-between">
<view class="name line2">{{ orderCon.productInfo.storeName }}</view>
<view class="money">
<view>{{ orderCon.productInfo.price }}</view>
<view class="num">x{{ orderCon.cartNum }}</view>
</view>
</view>
</view>
<view class="score">
<view
class="item acea-row row-middle"
v-for="(item, scoreListIndexw) in scoreList"
:key="scoreListIndexw"
>
<view>{{ item.name }}</view>
<view class="starsList">
<text
@click="stars(starsIndexn, scoreListIndexw)"
v-for="(itemn, starsIndexn) in item.stars"
:key="starsIndexn"
class="iconfont"
:class="item.index >= starsIndexn ? 'icon-shitixing font-color-red': 'icon-kongxinxing'"
></text>
</view>
<text class="evaluate">{{item.index === -1 ? "" : item.index + 1 + "分"}}</text>
</view>
<view class="textarea">
<textarea placeholder="商品满足你的期待么?说说你的想法,分享给想买的他们吧~" v-model="expect"></textarea>
<view class="list acea-row row-middle">
<view
class="pictrue"
v-for="(item, uploadPicturesIndex) in uploadPictures"
:key="uploadPicturesIndex"
>
<image :src="item" />
<text
class="iconfont icon-guanbi1 font-color-red"
@click="uploadPictures.splice(uploadPicturesIndex, 1)"
></text>
</view>
<view class="pictrue uploadBnt acea-row row-center-wrapper row-column" @tap="chooseImage">
<text class="iconfont icon-icon25201"></text>
<view>上传图片</view>
</view>
</view>
</view>
<view class="evaluateBnt bg-color-red" @click="submit">立即评价</view>
</view>
</view>
</template>
<style scoped lang="less">
.evaluate-con .score .textarea .list .pictrue.uploadBnt {
border: 1px solid #ddd;
}
</style>
<script>
import { postOrderProduct, postOrderComment } from "@/api/store";
import { trim, chooseImage } from "@/utils";
import { VUE_APP_API_URL } from "@/config";
import { required } from "@/utils/validate";
import { validatorDefaultCatch } from "@/utils/dialog";
const NAME = "GoodsEvaluate";
export default {
name: NAME,
components: {
// VueCoreImageUpload
},
props: {},
data: function() {
return {
orderCon: {
cartProduct: {
productInfo: {}
}
},
scoreList: [
{
name: "商品质量",
stars: ["", "", "", "", ""],
index: -1
},
{
name: "服务态度",
stars: ["", "", "", "", ""],
index: -1
}
],
uploadPictures: [],
expect: "",
unique: ""
};
},
mounted: function() {
this.unique = this.$yroute.query.id;
this.getOrderProduct();
},
watch: {
$yroute(n) {
if (n.name === NAME && this.unique !== n.params.id) {
this.unique = n.params.id;
this.$set(this.scoreList[0], "index", -1);
this.$set(this.scoreList[1], "index", -1);
this.expect = "";
this.uploadPictures = [];
this.getOrderProduct();
}
}
},
methods: {
getOrderProduct: function() {
let that = this,
unique = that.unique;
postOrderProduct(unique).then(res => {
that.orderCon = res.data;
});
},
stars: function(indexn, indexw) {
this.scoreList[indexw].index = indexn;
},
chooseImage() {
chooseImage(img => {
this.uploadPictures.push(img);
});
},
async submit() {
const expect = trim(this.expect),
product_score =
this.scoreList[0].index + 1 === 0 ? "" : this.scoreList[0].index + 1,
service_score =
this.scoreList[1].index + 1 === 0 ? "" : this.scoreList[1].index + 1;
try {
await this.$validator({
product_score: [
required("请选择商品质量分数", {
type: "number"
})
],
service_score: [
required("请选择服务态度分数", {
type: "number"
})
]
}).validate({
product_score,
service_score
});
} catch (e) {
return validatorDefaultCatch(e);
}
postOrderComment({
productScore: product_score,
serviceScore: service_score,
unique: this.unique,
pics: this.uploadPictures.join(","),
comment: expect
})
.then(() => {
uni.showToast({
title: "评价成功",
icon: "success",
duration: 2000
});
// ?
this.$yrouter.back();
// ?
// this.$yrouter.push({
// path: "/pages/order/OrderDetails/index",
// query: {
// id: this.orderCon.orderId
// }
// });
// ?
// this.$yrouter.reLaunch({
// path: "/pages/home/index",
// });
})
.catch(err => {
uni.showToast({
title:
err.msg || err.response.data.msg || err.response.data.message,
icon: "none",
duration: 2000
});
});
}
}
};
</script>

78
pages/study/bangdanRecord.vue

@ -0,0 +1,78 @@
<template>
<view class="dabang-share-box" v-else>
<view class="dabang-share-item" v-for="(item,index) in 6" :key="index">
<view class="user-info-box acea-row row-middle">
<view class="header-img">
<image src="../../static/img1.png" mode=""></image>
</view>
<view class="acea-row row-column row-center">
<view class="name">失宠的猫咪</view>
<view class="create-time">5小时前</view>
</view>
</view>
<view class="share-word">
抱朴书院孕育自华夏优秀传统文化博学致用朴含虚为院训弘扬国粹
</view>
<view class="img-box acea-row row-around">
<image src="../../static/img1.png"></image>
<image src="../../static/img1.png"></image>
<image src="../../static/img1.png"></image>
</view>
<view class="zan-box acea-row row-middle row-right">
<image src="../../static/zan.png"></image>
<text class="zan-conunt">55</text>
</view>
</view>
</view>
</template>
<script>
</script>
<style lang="less" scoped>
.dabang-share-box{
width: 100%;
padding: 30rpx;
background-color: #fff;
.dabang-share-item{
color: #222;
padding:20rpx 0;
border-bottom: 1px solid #ececec;
.header-img{
width: 76rpx;
height: 76rpx;
border-radius: 50%;
overflow: hidden;
margin-right: 10rpx;
}
.name{
font-size: 28rpx;
line-height: 40rpx;
}
.create-time{
font-size: 24rpx;
color: #999;
line-height: 34rpx;
}
.share-word{
font-size: 28rpx;
line-height: 46rpx;
margin: 22rpx 0 30rpx;
}
.img-box{
image{
width: 224rpx;
height: 206rpx;
}
}
.zan-box{
margin-top: 20rpx;
image{
width: 30rpx;
height: 32rpx;
margin-right: 20rpx;
}
}
}
}
</style>

359
pages/study/dabang.vue

@ -0,0 +1,359 @@
<template>
<view class="dabang-index">
<view class="top-box">
<view class="dabang-name">连续21天打榜站桩</view>
<view class="desc">抱朴书院孕育自华夏优秀传统文化博学致用朴含虚为院训弘扬国粹利益社会为动力</view>
<view class="time-box">
<span>时间2021年5月31日 - 2021年6月20日共21天</span>
<view class="sanjiao"></view>
</view>
</view>
<view class="join-num">参与人数231</view>
<view class="my-progress-box">
<view class="t-word acea-row row-between-wrapper">
<text>我的进度</text>
<view>
<text class="to-more" @click="toMyBangdan">我的打榜日记</text>
<text class="iconfont icon-jiantou"></text>
</view>
</view>
<view class="progress-info-box acea-row-nowrap row-between">
<view class="acea-row">
<view class="user-headerimg">
<image src="../../static/img1.png" mode=""></image>
</view>
<view class="user-progress">
<view class="name">失宠的猫咪</view>
<view class="progress">
<view class="pro-icon"><image src="../../static/course-icon2.png" mode=""></image></view>
已坚持<text class="colO">7</text>/21
</view>
<view class="progress">
<view class="pro-icon"><image src="../../static/course-icon4.png" mode=""></image></view>
完成进度<text class="colO">33</text>%
</view>
<view class="progress">
<view class="pro-icon"><image src="../../static/course-icon3.png" mode=""></image></view>
全榜排名<text class="colO">12</text>
</view>
</view>
</view>
<view class="progress-r acea-row row-column row-center-wrapper">
<text>今日未打榜</text>
<view class="dabang-btn" @click="toEdit">立即打卡</view>
</view>
</view>
</view>
<view class="tab-box acea-row row-middle">
<view class="tab-item" :class="active == 0 ? 'tab-item-a' : ''" @click="tabClick(0)">打榜分享</view>
<view class="tab-item" :class="active == 1 ? 'tab-item-a' : ''" @click="tabClick(1)">排行榜</view>
</view>
<!-- 排行榜 -->
<view class="rank-list" v-if="active == 1">
<view class="rank-item acea-row row-between-wrapper" v-for="(item,index) in 6" :key="index">
<view class="acea-row row-middle">
<view class="ranking">{{index+1}}</view>
<view class="header-img"><image src="../../static/img1.png" mode=""></image></view>
<view class="name">失宠的猫咪</view>
</view>
<view class="acea-row row-column row-center-wrapper">
<view>完成打榜30项</view>
<view class="jifen">3000积分</view>
</view>
</view>
</view>
<!-- 打榜分享 -->
<view class="dabang-share-box" v-else>
<view class="dabang-share-item" v-for="(item,index) in 6" :key="index">
<view class="user-info-box acea-row row-middle">
<view class="header-img">
<image src="../../static/img1.png" mode=""></image>
</view>
<view class="acea-row row-column row-center">
<view class="name">失宠的猫咪</view>
<view class="create-time">5小时前</view>
</view>
</view>
<view class="share-word">
抱朴书院孕育自华夏优秀传统文化博学致用朴含虚为院训弘扬国粹
</view>
<view class="img-box acea-row row-around">
<image src="../../static/img1.png"></image>
<image src="../../static/img1.png"></image>
<image src="../../static/img1.png"></image>
</view>
<view class="zan-box acea-row row-middle row-right">
<image src="../../static/zan.png"></image>
<text class="zan-conunt">55</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return {
active: 0
}
},
methods:{
tabClick(idx){
this.active = idx;
},
toMyBangdan(){
this.$yrouter.push({
path:'/pages/study/bangdanRecord'
})
},
toEdit(){
this.$yrouter.push({
path:'/pages/study/editDabang'
})
},
}
}
</script>
<style lang="less" scoped>
.dabang-index{
min-height: 100vh;
background: #fff;
padding-bottom: 100rpx;
.top-box{
width: 100%;
height: 396rpx;
background: linear-gradient(135deg, #E5B964 0%, #CE9F45 100%);
box-sizing: border-box;
padding: 40rpx 0;
color: #fff;
position: relative;
.dabang-name{
width: 80%;
font-size: 50rpx;
font-weight: 600;
color: #FFFFFF;
line-height: 72rpx;
margin: 40rpx auto;
}
.desc{
width: 80%;
margin: 0 auto;
font-size: 24rpx;
color: #FFFFFF;
line-height: 36rpx;
text-indent: 2em;
}
.time-box{
width: 100%;
height: 78rpx;
line-height: 78rpx;
background: rgba(0,0,0,.1);
font-size: 28rpx;
position: absolute;
bottom: 0;
text-indent: 1em;
}
.sanjiao{
width:0;
height:0;
border-right:14rpx solid transparent;
border-left:14rpx solid transparent;
border-bottom:16rpx solid #fff;
position: absolute;
left: 50%;
top: 64rpx;
transform: translateX(-50%);
}
}
.join-num{
width: 406rpx;
height: 58rpx;
background: #FFF2DA;
border-radius: 46rpx;
margin: 30rpx auto;
text-align: center;
line-height: 58rpx;
color: #E49600;
}
.my-progress-box{
width: 100%;
box-sizing: border-box;
padding: 30rpx;
font-size: 36rpx;
color: #222;
.t-word{
font-size: 36rpx;
color: #222;
font-weight: 600;
.to-more{
font-size: 28rpx;
color: #666;
font-weight: normal;
}
.iconfont{
font-size: 30rpx;
}
}
.progress-info-box{
margin-top: 30rpx;
width: 690rpx;
height: 280rpx;
background: #FFFFFF;
box-shadow: 0px 4px 8px 0px rgba(239,239,239,0.5);
border-radius: 10rpx;
padding: 30rpx;
.user-headerimg{
width: 130rpx;
height: 130rpx;
margin-right: 20rpx;
image{
width: 100%;
height: 100%;
border-radius: 50px;
}
}
.user-progress{
font-size: 28rpx;
.name{
font-size: 32rpx;
font-weight: 500;
color: #222222;
line-height: 44rpx;
}
.colO{
font-size: 40rpx;
color: #F36F5E;
}
.progress{
display: flex;
align-items: center;
.pro-icon{
width: 32rpx;
height: 32rpx;
margin-right: 10rpx;
image{
width: 100%;
height: 100%;
}
}
}
}
.progress-r{
font-size: 24rpx;
color: #666;
.dabang-btn{
width: 160rpx;
height: 56rpx;
background: linear-gradient(180deg, #F7D08E 0%, #E2B35D 100%);
border-radius: 35rpx;
text-align: center;
line-height: 56rpx;
color: #fff;
font-size: 28rpx;
margin-top: 10rpx;
}
}
}
}
.tab-box{
width: 100%;
padding: 0rpx 30rpx;
font-size: 36rpx;
color: #222;
.tab-item{
width: 50%;
text-align: center;
border-bottom: 1px solid #ECECEC;
padding: 20rpx 0;
}
.tab-item-a{
color: #EA533E;
border-bottom: 1px solid #EA533E;
}
}
.rank-list{
width: 100%;
padding: 0rpx 30rpx;
.rank-item{
width: 100%;
padding: 32rpx 0;
border-bottom: 1px solid #ececec;
font-size: 28rpx;
color: #222;
.ranking{
width: 32rpx;
height: 32rpx;
border-radius: 50%;
line-height: 32rpx;
text-align: center;
color: #fff;
font-size: 24rpx;
background: #EA533E;
}
.header-img{
width: 82rpx;
height: 82rpx;
border-radius: 50px;
overflow: hidden;
margin: 0 30rpx 0 22rpx;
}
.jifen{
color: #E5B764;
}
}
}
.dabang-share-box{
width: 100%;
padding: 30rpx;
.dabang-share-item{
color: #222;
padding:20rpx 0;
border-bottom: 1px solid #ececec;
.header-img{
width: 76rpx;
height: 76rpx;
border-radius: 50%;
overflow: hidden;
margin-right: 10rpx;
}
.name{
font-size: 28rpx;
line-height: 40rpx;
}
.create-time{
font-size: 24rpx;
color: #999;
line-height: 34rpx;
}
.share-word{
font-size: 28rpx;
line-height: 46rpx;
margin: 22rpx 0 30rpx;
}
.img-box{
image{
width: 224rpx;
height: 206rpx;
}
}
.zan-box{
margin-top: 20rpx;
image{
width: 30rpx;
height: 32rpx;
margin-right: 20rpx;
}
}
}
}
image{
width: 100%;
height: 100%;
}
}
</style>

307
pages/study/detail.vue

@ -1,8 +1,313 @@
<template> <template>
<view class="course-detail-index">
<view class="banner-box">
<image src="../../static/article1.png"></image>
</view>
<view class="tab-box acea-row row-around" :class="isFixedTop?'fixed':''">
<view class="tab-item" :class="active == '0' ? 'tab-item-active' : ''" @click="handelScroll('content1','0')">榜单介绍</view>
<view class="tab-item" :class="active == '1' ? 'tab-item-active' : ''" @click="handelScroll('content2','1')">时间安排</view>
<view class="tab-item" :class="active == '2' ? 'tab-item-active' : ''" @click="handelScroll('content3','2')">奖惩规则</view>
</view>
<view class="content-box" bindscroll="scroll">
<scroll-view scroll-y="true" scroll-with-animation="true" style="height:100%;" :scroll-into-view="toView" >
<view class="course-desc-box" id="content1">
<view class="title-box acea-row row-middle">
<view class="left-line"></view>
<span>课程简介</span>
</view>
<text class="desc">
抱朴书院孕育自华夏优秀传统文化博学致用抱朴含虚为院训弘扬国粹利益社会为动力\n
抱朴书院孕育自华夏优秀传统文化博学致用抱朴含虚为院训弘扬国粹利益社会为动力
</text>
</view>
<view class="course-desc-box content" id="content2">
<view class="title-box acea-row row-middle">
<view class="left-line"></view>
<span>时间安排</span>
</view>
<view class="course-card-list">
<view class="course-card-item acea-row row-middle">
<view class="label">开始时间</view>
<view class="info">2021.5.31 - 2021.6.3</view>
</view>
<view class="course-card-item acea-row row-middle">
<view class="label">截止时间</view>
<view class="info">2021.5.31 - 2021.6.3</view>
</view>
<view class="course-card-item acea-row row-middle">
<view class="label">打榜周期</view>
<view class="info">每日打卡七天/</view>
</view>
<view class="course-card-item acea-row row-middle">
<view class="label">打卡时间</view>
<view class="info">06:00-22:00</view>
</view>
</view>
</view>
<view class="course-desc-box" >
<view class="title-box acea-row row-middle">
<view class="left-line"></view>
<span>奖惩规则</span>
</view>
<view class="course-card-list">
<view class="course-card-item acea-row-nowrap row-middle">
<view class="label">积分奖惩</view>
<view class="info">30积分</view>
</view>
<view class="course-card-item acea-row-nowrap row-middle row-top">
<view class="label">积分用途</view>
<view class="info">可用于兑换积分商城内商品并抵扣一定款项1积分=1</view>
</view>
<view class="course-card-item acea-row-nowrap row-middle row-top">
<view class="label">奖惩机制</view>
<view class="info">积极打卡满21天可获得全部积分消极应对无积分奖励积极打卡满21天可获得全部积分消极应对无积分奖励积极打卡满21天可获得全部积分消极应对无积分奖励</view>
</view>
</view>
</view>
</scroll-view>
</view>
<view class="signin-btn" @click="submitSignin">立即报名</view>
</view>
</template> </template>
<script> <script>
// import WucTab from '@/components/wuc-tab/wuc-tab.vue';
export default {
data() {
return {
active: '0',
toView: '',
heightArr:[],
tabInitTop:'',
isFixedTop: false,
dialog:false
}
},
onLoad() {
//
uni.createSelectorQuery().select('.tab-box').boundingClientRect((res) => {
console.log(res);
if (res && res.top > 0) {
var tabInitTop= res.top;
this.tabInitTop= tabInitTop
}
}).exec();
},
mounted() {
this.getHeightArr()
},
methods: {
signInClick(){
this.dialog = true
},
submitSignin(){
this.$yrouter.push({
path:'/pages/study/dabang'
})
},
handelScroll(id,idx){
uni.createSelectorQuery().select('#'+id).boundingClientRect(function(res){
uni.pageScrollTo({
scrollTop:res.top,
duration: 300
});
}).exec()
this.active = idx;
this.toView = id
},
getHeightArr(){
let h=0;
let heightArr = [];
//selectAll
uni.createSelectorQuery().selectAll('.content').boundingClientRect((rect) => {
}).exec((res) => {
console.log(res)
res[0].forEach((item)=>{
h+=item.height;
heightArr.push(h);
})
this.heightArr = heightArr;
})
},
onPageScroll(res) {
let scrollTop = res.scrollTop;
let scrollArr = this.heightArr;
for  (let  i = 0; i < scrollArr.length; i++) {
if  (scrollTop >= 0  && scrollTop < scrollArr[0]) {
this.active = 0;
} else if (scrollTop >= (scrollArr[i - 1]) && scrollTop < scrollArr[i]) {
this.active= i;
}
}
var isSatisfy = scrollTop >= this.tabInitTop? true : false;
//
if (this.isFixedTop === isSatisfy) {
return false;
}
this.isFixedTop = isSatisfy
},
}
}
</script> </script>
<style> <style scoped lang="less">
.course-detail-index{
width: 100%;
background: #fff;
padding-bottom: 70rpx;
box-sizing: border-box;
.banner-box{
width: 100%;
height: 286rpx;
image{
width: 100%;
height: 100%;
}
}
.course-info-box{
box-sizing: border-box;
padding: 30rpx 30rpx 50rpx;
background: #fff;
.course-title{
font-size: 40rpx;
font-weight: 500;
color: #333333;
line-height: 56rpx;
margin: 0rpx 0 20rpx;
}
.tips-box{
display: flex;
.tip-item{
min-width: 60rpx;
height: 34rpx;
text-align: center;
line-height: 34rpx;
font-size: 24rpx;
margin-left: 20rpx;
padding: 0 5rpx;
}
.blue{
color: #6E85EB;
border: 1px solid #6E85EB;
background: #EDEFF8;
}
.orange{
color: #EF644E;
border: 1px solid #EF644E;
background: #FFF4F2;
}
}
}
.tab-box{
white-space: nowrap;
width: 100%;
background: #fff;
padding: 18rpx 34rpx 0;
.tab-item{
width: 33%;
text-align: center;
display: inline-block;
padding-bottom: 18rpx;
font-size: 32rpx;
color: #222;
}
.tab-item-active{
font-size: 40rpx;
font-weight: bold;
border-bottom: 4rpx solid #EB5744;
}
}
.fixed{
position: -webkit-sticky;
position: sticky;
top: 0;
z-index: 99;
}
.content-box{
width: 100%;
box-sizing: border-box;
background: #F5F6F7;
padding: 24rpx 22rpx;
.teacher-info-box,.course-desc-box{
width: 100%;
background:#fff;
border-radius: 8rpx;
padding: 18rpx 24rpx 30rpx;
margin-bottom: 20rpx;
}
.desc{
text-indent: 2em;
font-size: 28rpx;
color: #666666;
line-height: 24px;
}
.info-box{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
image{
width: 100rpx;
height: 100rpx;
border-radius: 25px;
}
.name{
font-size: 32rpx;
color: #3C464F;
line-height: 44rpx;
}
.tip{
font-size: 24rpx;
color: #999999;
line-height: 34px;
}
}
.title-box{
font-size: 36rpx;
font-weight: bold;
color: #3C464F;
line-height: 50rpx;
margin-bottom: 20rpx;
.left-line{
width: 6rpx;
height: 32rpx;
background-color: #EB5744;
margin-right: 16rpx;
}
}
.course-card-item{
font-size: 32rpx;
color: #666666;
margin-bottom: 10rpx;
image{
width: 30rpx;
height: 30rpx;
}
.label{
width: 160rpx;
line-height: 34rpx;
}
.info{
width: calc(100% - 160rpx);
line-height: 46rpx;
}
}
}
.signin-btn{
width: 680rpx;
height: 88rpx;
background: linear-gradient(180deg, #F7D08E 0%, #E2B35D 100%);
border-radius: 44rpx;
text-align: center;
line-height: 88rpx;
margin: 78rpx auto 0;
color: #fff;
}
}
</style> </style>

93
pages/study/editDabang.vue

@ -0,0 +1,93 @@
<template>
<view class="editdabang-box">
<view class="edit-box">
<textarea v-model="expect" placeholder="请在此输入文字..." />
</view>
<view class="upload-img-box acea-row row-middle">
<view class="pictrue" v-for="(item, uploadPicturesIndex) in uploadPictures"
:key="uploadPicturesIndex">
<image :src="item" />
<text class="reduce iconfont icon-guanbi1 font-color-red"
@click="uploadPictures.splice(uploadPicturesIndex, 1)"></text>
</view>
<view class="pictrue uploadBnt acea-row row-center-wrapper row-column" @tap="chooseImage">
<text class="iconfont icon-icon25201"></text>
<view>上传图片</view>
</view>
</view>
<view class="submit-btn">发布</view>
</view>
</template>
<script>
import {
chooseImage
} from "@/utils";
export default {
components: {
// VueCoreImageUpload
},
data: function() {
return {
uploadPictures: [],
expect: "",
unique: ""
};
},
methods:{
chooseImage() {
chooseImage(img => {
this.uploadPictures.push(img);
});
},
}
}
</script>
<style lang="less" scoped>
.editdabang-box{
width: 100%;
height: 100vh;
padding: 0 30rpx;
background: #fff;
}
.edit-box{
width: 100%;
padding: 50rpx 0;
border-bottom: 1px solid #ececec;
}
.upload-img-box{
margin-top: 50rpx;
.pictrue{
width: 200rpx;
height: 200rpx;
border-radius: 10rpx;
background: #F6F6F6;
color: #E2B35D;
position: relative;
margin-right: 20rpx;
font-size: 28rpx;
image{
width: 100%;
height: 100%;
}
.reduce{
position: absolute;
top: -12rpx;
right: -12rpx;
}
}
}
.submit-btn{
width: 340rpx;
height: 88rpx;
background: linear-gradient(180deg, #F7D08E 0%, #E2B35D 100%);
border-radius: 44rpx;
text-align: center;
line-height: 88rpx;
font-size: 32rpx;
color: #fff;
margin: 72rpx auto;
}
</style>

298
pages/user/User/index.vue

@ -1,7 +1,8 @@
<template> <template>
<view class="user"> <view class="user">
<view v-if="$store.getters.token || userInfo.uid"> <view v-if="$store.getters.token || userInfo.uid" class="content">
<view class="header bg-color-red acea-row row-between-wrapper"> <view class="header acea-row row-between-wrapper">
<image src="../../../static/user-index-bg.png" mode="" class="header-bg"></image>
<view class="picTxt acea-row row-between-wrapper"> <view class="picTxt acea-row row-between-wrapper">
<view class="pictrue"> <view class="pictrue">
<image :src="userInfo.avatar" /> <image :src="userInfo.avatar" />
@ -9,8 +10,8 @@
<view class="text"> <view class="text">
<view class="acea-row row-middle"> <view class="acea-row row-middle">
<view class="name line1">{{ userInfo.nickname }}</view> <view class="name line1">{{ userInfo.nickname }}</view>
<view class="member acea-row row-middle" v-if="userInfo.vip"> <view class="member acea-row row-middle">
<image :src="userInfo.vipIcon" /> <!-- <image :src="userInfo.vipIcon" /> -->
<text>{{ userInfo.vipName }}</text> <text>{{ userInfo.vipName }}</text>
</view> </view>
</view> </view>
@ -31,10 +32,49 @@
<!-- #endif --> <!-- #endif -->
</view> </view>
</view> </view>
<text class="iconfont icon-shezhi" @click="goPersonalData()"></text> <view class="jifen-box">积分2000</view>
<!-- <text class="iconfont icon-shezhi" @click="goPersonalData()"></text> -->
</view>
<view class="teacher-box acea-row-nowrap row-between row-middle">
<view class=" teacher-box-l acea-row-nowrap row-between row-middle">
<image src="../../../static/call-icon.png" class="call-icon"></image>
<text>服务老师</text>
<view class="vertical-line"></view>
</view>
<view class="teacher-box-r acea-row row-between row-middle">
<text>王老师</text>
<image src="../../../static/img1.png"></image>
</view>
</view>
<view class="myjoin-box">
<view class="t-word">我参与的</view>
<view class="course-box">
<view class="course-info">
<view class="course-name line1">阴阳五行一个人的阴阳五行</view>
<view class="time">2021 5 31-6.3 8:30-18:30</view>
</view>
<view class="address-box acea-row row-between row-middle">
<view class="address">地点中国·武汉</view>
<view class="btn">去签到</view>
</view>
</view>
<view class="bangdan-box">
<view class="bangdan-list">
<scroll-view class="scroll-view_H" scroll-x="true">
<view class="bangdan-item" v-for="(item,index) in 6" :key="index">
<view class="bangdan-name">连续11天打卡站桩</view>
<!-- <view class="time">2021.5.28-2021.6.18</view> -->
<view class="acea-row row-between-wrapper">
<view class="signin-day">已连续12天</view>
<view class="signin-btn">立即打榜</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view> </view>
<view class="wrapper"> <view class="wrapper">
<view class="nav acea-row row-middle"> <!-- <view class="nav acea-row row-middle">
<view @click="goUserAccount()" class="item"> <view @click="goUserAccount()" class="item">
<text>我的余额</text> <text>我的余额</text>
<text class="num">{{ userInfo.nowMoney || 0 }}</text> <text class="num">{{ userInfo.nowMoney || 0 }}</text>
@ -51,7 +91,7 @@
<text>优惠券</text> <text>优惠券</text>
<text class="num">{{ userInfo.couponCount || 0 }}</text> <text class="num">{{ userInfo.couponCount || 0 }}</text>
</view> </view>
</view> </view> -->
<view class="myOrder"> <view class="myOrder">
<view class="title acea-row row-between-wrapper"> <view class="title acea-row row-between-wrapper">
<text>我的订单</text> <text>我的订单</text>
@ -63,35 +103,36 @@
<view class="orderState acea-row row-middle"> <view class="orderState acea-row row-middle">
<view @click="goMyOrder(0)" class="item"> <view @click="goMyOrder(0)" class="item">
<view class="pictrue"> <view class="pictrue">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/dfk.png`" /> <!-- <image :src="`${$VUE_APP_RESOURCES_URL}/images/dfk.png`" /> -->
<image src="../../../static/myorder-icon1.png" />
<text class="order-status-num" v-if="userInfo.orderStatusNum.unpaidCount > 0">{{ userInfo.orderStatusNum.unpaidCount }}</text> <text class="order-status-num" v-if="userInfo.orderStatusNum.unpaidCount > 0">{{ userInfo.orderStatusNum.unpaidCount }}</text>
</view> </view>
<view>待付款</view> <view>待付款</view>
</view> </view>
<view @click="goMyOrder(1)" class="item"> <view @click="goMyOrder(1)" class="item">
<view class="pictrue"> <view class="pictrue">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/dfh.png`" /> <image src="../../../static/myorder-icon2.png" />
<text class="order-status-num" v-if="userInfo.orderStatusNum.unshippedCount > 0">{{ userInfo.orderStatusNum.unshippedCount }}</text> <text class="order-status-num" v-if="userInfo.orderStatusNum.unshippedCount > 0">{{ userInfo.orderStatusNum.unshippedCount }}</text>
</view> </view>
<view>待发货</view> <view>待发货</view>
</view> </view>
<view @click="goMyOrder(2)" class="item"> <view @click="goMyOrder(2)" class="item">
<view class="pictrue"> <view class="pictrue">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/dsh.png`" /> <image src="../../../static/myorder-icon3.png" />
<text class="order-status-num" v-if="userInfo.orderStatusNum.receivedCount > 0">{{ userInfo.orderStatusNum.receivedCount }}</text> <text class="order-status-num" v-if="userInfo.orderStatusNum.receivedCount > 0">{{ userInfo.orderStatusNum.receivedCount }}</text>
</view> </view>
<text>待收货</text> <text>待收货</text>
</view> </view>
<view @click="goMyOrder(3)" class="item"> <view @click="goMyOrder(3)" class="item">
<view class="pictrue"> <view class="pictrue">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/dpj.png`" /> <image src="../../../static/myorder-icon4.png" />
<text class="order-status-num" v-if="userInfo.orderStatusNum.evaluatedCount > 0">{{ userInfo.orderStatusNum.evaluatedCount }}</text> <text class="order-status-num" v-if="userInfo.orderStatusNum.evaluatedCount > 0">{{ userInfo.orderStatusNum.evaluatedCount }}</text>
</view> </view>
<text>待评价</text> <text>待评价</text>
</view> </view>
<view @click="goReturnList()" class="item"> <view @click="goReturnList()" class="item">
<view class="pictrue"> <view class="pictrue">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/sh.png`" /> <image src="../../../static/myorder-icon5.png" />
<text class="order-status-num" v-if="userInfo.orderStatusNum.refundCount > 0">{{ userInfo.orderStatusNum.refundCount }}</text> <text class="order-status-num" v-if="userInfo.orderStatusNum.refundCount > 0">{{ userInfo.orderStatusNum.refundCount }}</text>
</view> </view>
<text>售后/退款</text> <text>售后/退款</text>
@ -100,7 +141,42 @@
</view> </view>
<view class="myService"> <view class="myService">
<view class="serviceList acea-row row-middle"> <view class="serviceList acea-row row-middle">
<template v-for="(item, MyMenusIndex) in MyMenus"> <view class="item" @click="goUserCourse()">
<view class="pictrue">
<image src="../../../static/user-menu1.png" />
</view>
<view class="cell">我的课程</view>
<text class="iconfont icon-jiantou"></text>
</view>
<view class="item" @click="goUserBangdan()">
<view class="pictrue">
<image src="../../../static/user-menu2.png" />
</view>
<view class="cell">学习帮打卡</view>
<text class="iconfont icon-jiantou"></text>
</view>
<view class="item" @click="goUserFeedBack()">
<view class="pictrue">
<image src="../../../static/user-menu3.png" />
</view>
<view class="cell">建议反馈</view>
<text class="iconfont icon-jiantou"></text>
</view>
<view class="item" @click="goUserJoinUs()">
<view class="pictrue">
<image src="../../../static/user-menu4.png" />
</view>
<view class="cell">企业招聘</view>
<text class="iconfont icon-jiantou"></text>
</view>
<view class="item" @click="goAddressManagement()">
<view class="pictrue">
<image src="../../../static/user-menu5.png" />
</view>
<view class="cell">收货地址</view>
<text class="iconfont icon-jiantou"></text>
</view>
<!-- <template v-for="(item, MyMenusIndex) in MyMenus">
<view class="item" :key="MyMenusIndex" @click="goPages(MyMenusIndex)"> <view class="item" :key="MyMenusIndex" @click="goPages(MyMenusIndex)">
<view class="pictrue"> <view class="pictrue">
<image :src="item.pic" /> <image :src="item.pic" />
@ -108,13 +184,8 @@
<view class="cell">{{ item.name }}</view> <view class="cell">{{ item.name }}</view>
<text class="iconfont icon-jiantou"></text> <text class="iconfont icon-jiantou"></text>
</view> </view>
</template> </template> -->
</view>
</view>
</view> </view>
<view class="by">
<view>
<text class="by-text">www.yixiang.co提供技术支持</text>
</view> </view>
</view> </view>
<!-- <SwitchWindow <!-- <SwitchWindow
@ -153,9 +224,24 @@ export default {
computed: mapGetters(['userInfo']), computed: mapGetters(['userInfo']),
methods: { methods: {
...mapMutations(['updateAuthorizationPage']), ...mapMutations(['updateAuthorizationPage']),
goUserCourse() {
this.$yrouter.push('/pages/user/myCourses/index')
},
goUserBangdan() {
this.$yrouter.push('/pages/user/myBangdan/index')
},
goUserFeedBack() {
this.$yrouter.push('/pages/user/feedBack/index')
},
goUserJoinUs() {
this.$yrouter.push('/pages/user/joinUs/index')
},
goReturnList() { goReturnList() {
this.$yrouter.push('/pages/order/ReturnList/index') this.$yrouter.push('/pages/order/ReturnList/index')
}, },
goAddressManagement(){
this.$yrouter.push('/pages/user/address/AddressManagement/index')
},
goMyOrder(type) { goMyOrder(type) {
this.$yrouter.push({ this.$yrouter.push({
path: '/pages/order/MyOrder/index', path: '/pages/order/MyOrder/index',
@ -357,6 +443,180 @@ export default {
</script> </script>
<style lang="less"> <style lang="less">
.header{
width: 100%;
height: 336rpx !important;
padding: 0 !important;
position: relative !important;
.header-bg{
width: 100%;
height: 100%;
position: absolute;
top: 0;
z-index: 2;
}
.picTxt{
position: absolute !important;
left: 32rpx;
z-index: 3;
.text {
.name {
font-size: 36rpx;
max-width: 260rpx;
color: #A8873D;
}
}
.binding{
background: #BF922B !important;
border-color: #BF922B !important;
}
}
.jifen-box{
width: 200rpx;
height: 62rpx;
background: #BF922B;
border-radius: 31rpx;
text-align: center;
line-height: 62rpx;
position: absolute;
right: 50rpx;
z-index: 4;
color: #fff;
font-size: 28rpx;
}
}
.teacher-box{
width: 690rpx;
height: 112rpx;
padding-left: 28rpx;
padding-right: 40rpx;
background: linear-gradient(180deg, #332810 0%, #4E4229 100%);
border-radius: 10rpx;
position: relative;
left: 50%;
top: -56rpx;
margin-left: -345rpx;
z-index: 7;
.teacher-box-l {
color: #FFFADD;
font-size: 28rpx;
.call-icon{
width: 56rpx;
height: 56rpx;
}
text{
display: inline-block;
margin-left:20rpx;
margin-right:14rpx;
}
.vertical-line{
width: 2rpx;
height: 34rpx;
background: #FFFADD;
}
}
.teacher-box-r{
color: #F9EDCC;
font-size: 24rpx;
image{
width: 88rpx;
height: 88rpx;
border: 1px solid #fff;
border-radius: 25px;
margin-left: 30rpx;
}
}
}
.myjoin-box{
width: 690rpx;
height: 506rpx;
background: #FFFFFF;
border-radius: 10rpx;
padding: 30rpx;
margin: -26rpx auto 0;
.t-word{
font-size: 32rpx;
color: #222;
margin-bottom: 30rpx;
}
.course-box{
width: 100%;
height: 190rpx;
background: #FFF5DE;
border-radius: 10rpx;
padding: 26rpx 20rpx 20rpx 42rpx;
color: #C89560;
font-size: 24rpx;
.course-info{
margin-bottom: 10rpx;
.course-name{
color: #C89560;
font-size: 28rpx;
line-height: 40rpx;
margin-bottom: 4rpx;
font-weight: 500;
}
}
.address-box{
.btn{
width: 172rpx;
height: 56rpx;
background: linear-gradient(180deg, #FFCC5D 0%, #FCA535 100%);
border-radius: 28rpx;
text-align: center;
line-height: 56rpx;
font-size: 32rpx;
color: #fff;
}
}
}
.bangdan-box{
width: 100%;
box-sizing: border-box;
margin-top: 30rpx;
.scroll-view_H{
white-space: nowrap;
width: 100%;
}
.bangdan-item{
width: 310rpx;
height: 152rpx;
box-sizing: border-box;
padding: 20rpx;
color: #fff;
display: inline-block;
background: linear-gradient(143deg, #FDAF97 0%, #ED5E48 100%);
border-radius: 10rpx;
font-size: 28rpx;
margin-right: 20rpx;
.bangdan-name{
margin-bottom: 28rpx;
}
.signin-day{
font-size: 24rpx;
}
.signin-btn{
width: 122rpx;
height: 48rpx;
background: linear-gradient(180deg, #FEECCB 0%, #FCAB3B 100%);
border-radius: 8px;
border-radius: 8rpx;
text-align: center;
line-height: 48rpx;
color: #C71A00;
font-size: 24rpx;
}
}
}
}
.content{
padding-bottom: 100rpx;
}
.user .wrapper {
background:#F5F6F7;
padding: 0 30rpx;
}
.footer-line-height { .footer-line-height {
height: 1 * 100rpx; height: 1 * 100rpx;
} }

55
pages/user/feedBack/index.vue

@ -0,0 +1,55 @@
<template>
<view class="index">
<view class="inp-box">
<textarea @input="sumfontnum" maxlength="100" @blur="bindTextAreaBlur" placeholder-style="color:#999999;" placeholder="请填写您宝贵的反馈意见" />
<view class="fontnum">{{fontnum}}/100</view>
</view>
<view class="submit-btn">提交</view>
</view>
</template>
<script>
export default{
data(){
return {
feedBack:'',
fontnum:0
}
},
methods:{
bindTextAreaBlur: function (e) {
console.log(e.detail.value)
},
sumfontnum(e){
this.fontnum = e.detail.value.length
}
}
}
</script>
<style lang="less" scoped>
.inp-box{
width: 100%;
background: #fff;
padding: 24rpx;
font-size: 28rpx;
position: relative;
.fontnum{
font-size: 24rpx;
color: #999;
position: absolute;
right: 28rpx;
bottom: 16rpx;
}
}
.submit-btn{
width: 208rpx;
height: 80rpx;
background: #6E85EB;
color: #fff;
text-align: center;
line-height: 80rpx;
border-radius: 4rpx;
margin: 30rpx auto;
}
</style>

8
pages/user/joinUs/index.vue

@ -0,0 +1,8 @@
<template>
</template>
<script>
</script>
<style>
</style>

98
pages/user/myBangdan/index.vue

@ -0,0 +1,98 @@
<template>
<view class="index">
<view class="tabs-box acea-row row-around row-middle">
<view class="tab-item" :class="active == 0 ? 'tab-item-active' : ''" @click="tabClick(0)">打卡中</view>
<view class="tab-item" :class="active == 1 ? 'tab-item-active' : ''" @click="tabClick(1)">已完成</view>
</view>
<view class="dabang-list-box">
<view class="dabang-item">
<view class="dabang-info">
<view class="bangdan-name line1">连续21天打卡站桩</view>
<view class="time">2021.5.28-2021.618</view>
<view class="time">30积分</view>
</view>
<view class="dabang-btm acea-row row-between-wrapper">
<view>+30积分</view>
<view>打榜成功</view>
</view>
</view>
<view class="dabang-item">
<view class="dabang-info">
<view class="bangdan-name line1">连续21天打卡站桩</view>
<view class="time">2021.5.28-2021.618</view>
<view class="time">30积分</view>
</view>
<view class="dabang-btm colR acea-row row-between-wrapper">
<view>-30积分</view>
<view>打榜失败</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return {
active : 0
}
},
methods:{
tabClick(idx){
this.active = idx
}
}
}
</script>
<style lang="less" scoped>
.tabs-box{
width: 100%;
height:98rpx;
font-size: 32rpx;
color: #222;
background: #fff;
border-top: 1px solid #f2f2f2;
.tab-item{
height: 100%;
line-height: 98rpx;
}
.tab-item-active{
font-size: 40rpx;
font-size: 500;
border-bottom: 4rpx solid #EB5744;
}
}
.dabang-list-box{
width: 100%;
padding: 0 32rpx;
.dabang-item{
width: 100%;
background: #fff;
color: #fff;
margin-top: 28rpx;
font-size: 28rpx;
border-radius: 10rpx;
overflow: hidden;
.dabang-info{
height: 200rpx;
padding-left: 24rpx;
padding-top: 24rpx;
background: linear-gradient(148deg, #B4B6C4 0%, #C5CAD6 100%);
.bangdan-name{
font-size: 50rpx;
line-height: 80rpx;
}
}
.dabang-btm{
padding: 0 56rpx 0 24rpx;
height: 80rpx;
color: #8FB85B;
}
.colR{
color:#EB5744;
}
}
}
</style>

202
pages/user/myCourses/index.vue

@ -0,0 +1,202 @@
<template>
<view class="index">
<view class="tabs-box acea-row row-around row-middle">
<view class="tab-item" :class="active == 0 ? 'tab-item-active' : ''" @click="tabClick(0)">已报名</view>
<view class="tab-item" :class="active == 1 ? 'tab-item-active' : ''" @click="tabClick(1)">已完成</view>
<view class="tab-item" :class="active == 2 ? 'tab-item-active' : ''" @click="tabClick(2)">可报名</view>
</view>
<view class="course-list-box" v-if="active == 0 || active == 1">
<view class="course-item acea-row row-between">
<view class="course-item-l">
<view class="course-info">
<view class="course-name line1">一代天骄王者少年禪易课程教学易课程教学</view>
<view class="info-box">
<view class="">时间2021.5.25-5.28 8:30-18:30</view>
<view class="">地点湖北 武汉</view>
<view class="">座位号8排8号</view>
<view class="">酒店安排江汉区江汉路22号武汉大酒店0801号房</view>
</view>
</view>
</view>
<view class="course-item-r acea-row ">
<view class="saoyisao"><image src="../../../static/saoyisao-icon.png"></image></view>
<text>去签到</text>
</view>
</view>
</view>
<view class="knowledge-list" v-else>
<view class="knowledge-item acea-row" v-for="item in courseList" @click="toDetail(item.id)">
<view class="img-box">
<image :src="item.imageArr[0]" mode=""></image>
</view>
<view class="knowledge-info-box">
<view class="title line1">{{item.courseName}}</view>
<view class="time">{{utils.spl(item.courseStartTime)[0]}}~{{utils.spl(item.courseEndTime)[0]}}</view>
<view class="address">{{item.coursePlace}}</view>
<view class="type-box acea-row row-between row-middle">
<view class="price">{{item.courseCharge}}</view>
<view class="signin-btn red">去报名</view>
</view>
</view>
</view>
<view class="knowledge-item acea-row">
<view class="img-box">
<image src="../../static/img1.png" mode=""></image>
</view>
<view class="knowledge-info-box">
<view class="title line1">阴阳五行一个人的阴阳五的阴阳五行</view>
<view class="time">2021-5-31-6.3 8:30-18:30</view>
<view class="address">中国 武汉</view>
<view class="type-box acea-row row-between row-middle">
<view class="price">3000</view>
<view class="signin-btn red">去报名</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return {
active : 0
}
},
methods:{
tabClick(idx){
this.active = idx
}
}
}
</script>
<style lang="less" scoped>
.tabs-box{
width: 100%;
height:98rpx;
font-size: 32rpx;
color: #222;
background: #fff;
border-top: 1px solid #f2f2f2;
.tab-item{
height: 100%;
line-height: 98rpx;
}
.tab-item-active{
font-size: 40rpx;
font-size: 500;
border-bottom: 4rpx solid #EB5744;
}
}
.course-list-box{
width: 100%;
.course-item{
width: 100%;
background: #fff;
padding: 24rpx 0 26rpx 30rpx;
margin-top: 28rpx;
.course-item-l{
width: 526rpx;
.info-box{
font-size: 26rpx;
color: #666666;
view{
line-height: 34rpx;
}
}
.course-name{
color: #333;
font-size: 32rpx;
font-weight: 500;
line-height: 44rpx;
margin-bottom: 22rpx;
}
}
.course-item-r{
width: 182rpx;
flex-direction: column;
justify-content: center;
align-items: center;
color: #EB5744;
border-left: 1px solid #d8d8d8;
image{
width: 50rpx;
height: 50rpx;
margin-bottom: 6rpx;
}
}
}
}
.knowledge-list {
width: 100%;
margin-top: 50rpx;
.knowledge-item {
background: #fff;
padding: 32rpx;
margin-top: 28rpx;
.img-box {
width: 204rpx;
height: 200rpx;
margin-right: 30rpx;
image {
width: 100%;
height: 100%;
}
}
.knowledge-info-box {
width: calc(100% - 234rpx);
.title {
font-size: 28rpx;
color: #333;
font-size: 500;
line-height: 40rpx;
}
.time,.address{
color: #999;
font-size: 24rpx;
margin-top: 5rpx;
line-height: 34rpx;
}
.intro {
font-size: 28rpx;
color: #999999;
line-height: 40rpx;
margin: 8rpx 0 36rpx;
}
.type-box {
font-size: 24rpx;
color: #999;
margin-top: 28rpx;
.price{
font-size: 36rpx;
color: #EA533E;
font-weight: 600;
}
.signin-btn{
width: 156rpx;
height: 60rpx;
text-align: center;
line-height: 60rpx;
background: #FFEAE7;
border-radius: 12rpx;
font-size: 32rpx;
}
.red{
background: #FFEAE7;
color: #EE7060;
}
.blue {
color: #6E85EB;
background: #ECEFFD;
}
.yellow {
color: #F99C10;
background: #FFEDCC;
}
}
}
}
}
</style>

0
pages/activity/BargainRecord/index.vue → pagesB/pages/activity/BargainRecord/index.vue

0
pages/activity/DargainDetails/index.vue → pagesB/pages/activity/DargainDetails/index.vue

0
pages/activity/GoodsBargain/index.vue → pagesB/pages/activity/GoodsBargain/index.vue

0
pages/activity/GoodsGroup/children/activity-card.vue → pagesB/pages/activity/GoodsGroup/children/activity-card.vue

0
pages/activity/GoodsGroup/index.vue → pagesB/pages/activity/GoodsGroup/index.vue

0
pages/activity/GoodsSeckill/index.vue → pagesB/pages/activity/GoodsSeckill/index.vue

0
pages/activity/GoodsSeckill/index2.vue → pagesB/pages/activity/GoodsSeckill/index2.vue

0
pages/activity/GroupDetails/index.vue → pagesB/pages/activity/GroupDetails/index.vue

0
pages/activity/GroupRule/index.vue → pagesB/pages/activity/GroupRule/index.vue

0
pages/activity/Poster/index.vue → pagesB/pages/activity/Poster/index.vue

0
pages/activity/SeckillDetails/index.vue → pagesB/pages/activity/SeckillDetails/index.vue

0
pages/map/index.vue → pagesB/pages/map/index.vue

0
pages/orderAdmin/AdminOrder/index.vue → pagesB/pages/orderAdmin/AdminOrder/index.vue

0
pages/orderAdmin/AdminOrderList/index.vue → pagesB/pages/orderAdmin/AdminOrderList/index.vue

0
pages/orderAdmin/GoodsDeliver/index.vue → pagesB/pages/orderAdmin/GoodsDeliver/index.vue

0
pages/orderAdmin/OrderCancellation/index.vue → pagesB/pages/orderAdmin/OrderCancellation/index.vue

0
pages/orderAdmin/OrderIndex/index.vue → pagesB/pages/orderAdmin/OrderIndex/index.vue

0
pages/orderAdmin/Statistics/index.vue → pagesB/pages/orderAdmin/Statistics/index.vue

0
pages/shop/EvaluateList/index.vue → pagesB/pages/shop/EvaluateList/index.vue

0
pages/shop/GoodsCollection/index.vue → pagesB/pages/shop/GoodsCollection/index.vue

196
pagesB/pages/shop/GoodsEvaluate/index.vue

@ -0,0 +1,196 @@
<template>
<view class="evaluate-con">
<view class="goodsStyle acea-row row-between" v-if="orderCon.productInfo">
<view class="pictrue">
<image :src="orderCon.productInfo.image" class="image" />
</view>
<view class="text acea-row row-between">
<view class="name line2">{{ orderCon.productInfo.storeName }}</view>
<view class="money">
<view>{{ orderCon.productInfo.price }}</view>
<view class="num">x{{ orderCon.cartNum }}</view>
</view>
</view>
</view>
<view class="score">
<view class="item acea-row row-middle" v-for="(item, scoreListIndexw) in scoreList" :key="scoreListIndexw">
<view>{{ item.name }}</view>
<view class="starsList">
<text @click="stars(starsIndexn, scoreListIndexw)" v-for="(itemn, starsIndexn) in item.stars"
:key="starsIndexn" class="iconfont"
:class="item.index >= starsIndexn ? 'icon-shitixing font-color-red': 'icon-kongxinxing'"></text>
</view>
<text class="evaluate">{{item.index === -1 ? "" : item.index + 1 + "分"}}</text>
</view>
<view class="textarea">
<textarea placeholder="商品满足你的期待么?说说你的想法,分享给想买的他们吧~" v-model="expect"></textarea>
<view class="list acea-row row-middle">
<view class="pictrue" v-for="(item, uploadPicturesIndex) in uploadPictures"
:key="uploadPicturesIndex">
<image :src="item" />
<text class="iconfont icon-guanbi1 font-color-red"
@click="uploadPictures.splice(uploadPicturesIndex, 1)"></text>
</view>
<view class="pictrue uploadBnt acea-row row-center-wrapper row-column" @tap="chooseImage">
<text class="iconfont icon-icon25201"></text>
<view>上传图片</view>
</view>
</view>
</view>
<view class="evaluateBnt bg-color-red" @click="submit">立即评价</view>
</view>
</view>
</template>
<style scoped lang="less">
.evaluate-con .score .textarea .list .pictrue.uploadBnt {
border: 1px solid #ddd;
}
</style>
<script>
import {
postOrderProduct,
postOrderComment
} from "@/api/store";
import {
trim,
chooseImage
} from "@/utils";
import {
VUE_APP_API_URL
} from "@/config";
import {
required
} from "@/utils/validate";
import {
validatorDefaultCatch
} from "@/utils/dialog";
const NAME = "GoodsEvaluate";
export default {
name: NAME,
components: {
// VueCoreImageUpload
},
props: {},
data: function() {
return {
orderCon: {
cartProduct: {
productInfo: {}
}
},
scoreList: [{
name: "商品质量",
stars: ["", "", "", "", ""],
index: -1
},
{
name: "服务态度",
stars: ["", "", "", "", ""],
index: -1
}
],
uploadPictures: [],
expect: "",
unique: ""
};
},
mounted: function() {
this.unique = this.$yroute.query.id;
this.getOrderProduct();
},
watch: {
$yroute(n) {
if (n.name === NAME && this.unique !== n.params.id) {
this.unique = n.params.id;
this.$set(this.scoreList[0], "index", -1);
this.$set(this.scoreList[1], "index", -1);
this.expect = "";
this.uploadPictures = [];
this.getOrderProduct();
}
}
},
methods: {
getOrderProduct: function() {
let that = this,
unique = that.unique;
postOrderProduct(unique).then(res => {
that.orderCon = res.data;
});
},
stars: function(indexn, indexw) {
this.scoreList[indexw].index = indexn;
},
chooseImage() {
chooseImage(img => {
this.uploadPictures.push(img);
});
},
async submit() {
const expect = trim(this.expect),
product_score =
this.scoreList[0].index + 1 === 0 ? "" : this.scoreList[0].index + 1,
service_score =
this.scoreList[1].index + 1 === 0 ? "" : this.scoreList[1].index + 1;
try {
await this.$validator({
product_score: [
required("请选择商品质量分数", {
type: "number"
})
],
service_score: [
required("请选择服务态度分数", {
type: "number"
})
]
}).validate({
product_score,
service_score
});
} catch (e) {
return validatorDefaultCatch(e);
}
postOrderComment({
productScore: product_score,
serviceScore: service_score,
unique: this.unique,
pics: this.uploadPictures.join(","),
comment: expect
})
.then(() => {
uni.showToast({
title: "评价成功",
icon: "success",
duration: 2000
});
// ?
this.$yrouter.back();
// ?
// this.$yrouter.push({
// path: "/pages/order/OrderDetails/index",
// query: {
// id: this.orderCon.orderId
// }
// });
// ?
// this.$yrouter.reLaunch({
// path: "/pages/home/index",
// });
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg || err.response.data.message,
icon: "none",
duration: 2000
});
});
}
}
};
</script>

0
pages/shop/GoodsFoot/index.vue → pagesB/pages/shop/GoodsFoot/index.vue

0
pages/shop/GoodsList/index.vue → pagesB/pages/shop/GoodsList/index.vue

0
pages/shop/GoodsPromotion/index.vue → pagesB/pages/shop/GoodsPromotion/index.vue

0
pages/shop/HotNewGoods/index.vue → pagesB/pages/shop/HotNewGoods/index.vue

0
pages/shop/IntegralGoodsCon/index.vue → pagesB/pages/shop/IntegralGoodsCon/index.vue

0
pages/shop/Live/LiveList/index.vue → pagesB/pages/shop/Live/LiveList/index.vue

0
pages/shop/StoreList/index.vue → pagesB/pages/shop/StoreList/index.vue

0
pages/shop/news/NewsDetail/index.vue → pagesB/pages/shop/news/NewsDetail/index.vue

0
pages/shop/news/NewsList/index.vue → pagesB/pages/shop/news/NewsList/index.vue

0
pages/user/BindingPhone/index.vue → pagesB/pages/user/BindingPhone/index.vue

0
pages/user/ChangePassword/index.vue → pagesB/pages/user/ChangePassword/index.vue

0
pages/user/CustomerList/index.vue → pagesB/pages/user/CustomerList/index.vue

0
pages/user/Login/index.vue → pagesB/pages/user/Login/index.vue

0
pages/user/Recharge/index.vue → pagesB/pages/user/Recharge/index.vue

65
pagesB/pages/user/Register/index.vue

@ -0,0 +1,65 @@
<template>
<view class="register absolute">
<view class="shading">
<view class="pictrue acea-row row-center-wrapper">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/logo.png`" />
</view>
</view>
<view class="whiteBg">
<view class="title">注册账号</view>
<view class="list">
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-phone_" />
</svg> -->
<input name="phone" type="text" placeholder="输入手机号码" />
</view>
</view>
<view class="item">
<view class="align-left">
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-code_1" />
</svg> -->
<input name="" type="text" placeholder="填写验证码" class="codeIput" />
<button class="verifyCode" :disabled="disabled" :class="disabled === true ? 'on' : ''"
@click="code">{{ text }}</button>
</view>
</view>
<view class="item">
<view>
<!-- <svg class="icon" aria-hidden="true">
<use xlink:href="#icon-code_" />
</svg> -->
<input type="text" placeholder="填写您的登录密码" />
</view>
</view>
</view>
<view class="logon">注册</view>
<view class="tip">
已有账号?
<text @click="goLogin()" class="font-color-red">立即登录</text>
</view>
</view>
<view class="bottom"></view>
</view>
</template>
<script>
import sendVerifyCode from "@/mixins/SendVerifyCode";
export default {
name: "Register",
mixins: [sendVerifyCode],
methods: {
code: function () {
this.sendCode();
},
goLogin() {
this.$yrouter.push({
path: "/pages/user/Login/index"
});
}
}
};
</script>

0
pages/user/RetrievePassword/index.vue → pagesB/pages/user/RetrievePassword/index.vue

0
pages/user/UserAccount/index.vue → pagesB/pages/user/UserAccount/index.vue

0
pages/user/UserBill/index.vue → pagesB/pages/user/UserBill/index.vue

0
pages/user/UserVip/index.vue → pagesB/pages/user/UserVip/index.vue

202
pagesB/pages/user/address/AddAddress/index.vue

@ -0,0 +1,202 @@
<template>
<view class="addAddress absolute">
<view class="list">
<view class="item acea-row row-between-wrapper">
<view class="name">姓名</view>
<input type="text" placeholder="请输入姓名" v-model="userAddress.realName" required />
</view>
<view class="item acea-row row-between-wrapper">
<view class="name">联系电话</view>
<input type="text" placeholder="请输入联系电话" v-model="userAddress.phone" required />
</view>
<view class="item acea-row row-between-wrapper">
<view class="name">所在地区</view>
<view class="picker acea-row row-between-wrapper select-value form-control">
<view class="address">
<CitySelect ref="cityselect" :defaultValue="addressText" @callback="result" :items="district"></CitySelect>
</view>
<view class="iconfont icon-dizhi font-color-red"></view>
</view>
</view>
<view class="item acea-row row-between-wrapper">
<view class="name">详细地址</view>
<input type="text" placeholder="请填写具体地址" v-model="userAddress.detail" required />
</view>
</view>
<view class="default acea-row row-middle">
<view class="select-btn">
<view class="checkbox-wrapper">
<checkbox-group @change="ChangeIsDefault">
<label class="well-check">
<checkbox :value="userAddress.isDefault==1?'checked':''" :checked="userAddress.isDefault ? true : false"></checkbox>
<text class="def">设置为默认地址</text>
</label>
</checkbox-group>
</view>
</view>
</view>
<view></view>
<view class="keepBnt bg-color-red" @tap="submit">立即保存</view>
<view class="wechatAddress" v-if="isWechat && !id" @click="getAddress">导入微信地址</view>
</view>
</template>
<script type="text/babel">
import CitySelect from "@/components/CitySelect";
import { getAddress, postAddress, getCity } from "@/api/user";
import attrs, { required, chs_phone } from "@/utils/validate";
import { validatorDefaultCatch } from "@/utils/dialog";
// import { openAddress } from "@/libs/wechat";
import { isWeixin } from "@/utils";
export default {
name: "AddAddress",
components: {
CitySelect
},
data() {
return {
district: [],
id: 0,
userAddress: { isDefault: 0 },
address: {},
isWechat: isWeixin(),
addressText: ""
};
},
mounted: function() {
let id = this.$yroute.query.id;
this.id = id;
this.getUserAddress();
this.getCityList();
},
watch: {
addressText(nextModel2) {
console.log(nextModel2, 8585858585);
}
},
methods: {
getCityList: function() {
let that = this;
getCity()
.then(res => {
that.district = res.data;
that.ready = true;
})
.catch(err => {
uni.showToast({
title: err.msg,
icon: "none",
duration: 2000,
});
});
},
getUserAddress: function() {
if (!this.id) return false;
let that = this;
getAddress(that.id).then(res => {
that.userAddress = res.data;
that.addressText =
res.data.province + " " + res.data.city + " " + res.data.district;
that.address.province = res.data.province;
that.address.city = res.data.city;
that.address.district = res.data.district;
});
},
getAddress() {},
async submit() {
console.log(this);
console.log(this.address);
console.log(this.addressText);
let name = this.userAddress.realName,
phone = this.userAddress.phone,
addressText = this.addressText,
detail = this.userAddress.detail,
isDefault = this.userAddress.isDefault;
try {
await this.$validator({
name: [
required(required.message("姓名")),
attrs.range([2, 16], attrs.range.message("姓名"))
],
phone: [
required(required.message("联系电话")),
chs_phone(chs_phone.message())
],
addressText: [required("请选择地址")],
detail: [required(required.message("具体地址"))]
}).validate({ name, phone, addressText, detail });
} catch (e) {
return validatorDefaultCatch(e);
}
try {
let that = this,
data = {
id: that.id,
real_name: name,
phone: phone,
address: this.address,
detail: detail,
is_default: isDefault ? true : false,
post_code: ""
};
postAddress(data).then(function() {
if (that.id) {
uni.showToast({
title: "修改成功",
icon: "none",
duration: 2000
});
} else {
uni.showToast({
title: "操作成功",
icon: "none",
duration: 2000
});
// uni.showToast({
// title: "",
// icon: "none",
// duration: 2000
// });
// that.$yrouter.replace({
// path: "/pages/user/PersonalData/index"
// });
}
that.$yrouter.back();
});
} catch (err) {
uni.showToast({
title: err.msg || err.response.data.msg || err.response.data.message,
icon: "none",
duration: 2000
});
}
},
ChangeIsDefault: function() {
this.userAddress.isDefault = !this.userAddress.isDefault;
},
result(values) {
console.log(this);
console.log(values);
this.address = {
province: values.province.name || "",
city: values.city.name || "",
district: values.district.name || "",
city_id: values.city.id
};
this.addressText = `${this.address.province}${this.address.city}${this.address.district}`;
// this.addressText =
// this.address.province + this.address.city + this.address.district;
}
}
};
</script>
<style lang="less">
.address {
text {
width: 100%;
display: block;
}
}
</style>

223
pagesB/pages/user/address/AddressManagement/index.vue

@ -0,0 +1,223 @@
<template>
<view
class="address-management"
:class="addressList.length < 1 && page > 1 ? 'on' : ''"
ref="container"
>
<view class="line" v-if="addressList.length > 0">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/line.jpg`" />
</view>
<view class="item" v-for="(item, addressListIndex) in addressList" :key="addressListIndex">
<view class="address">
<view class="consignee">
收货人{{ item.realName }}
<text class="phone">{{ item.phone }}</text>
</view>
<view>
收货地址{{ item.province }}{{ item.city }}{{ item.district
}}{{ item.detail }}
</view>
</view>
<view class="operation acea-row row-between-wrapper">
<view class="select-btn">
<view class="checkbox-wrapper">
<checkbox-group @change="radioChange(item.id)">
<label class="well-check">
<checkbox :value="item.isDefault==1?'checked':''" :checked="item.isDefault||item.isDefault=='1' ? true : false"></checkbox>
<text class="default">设为默认</text>
</label>
</checkbox-group>
<!-- <label class="well-check">
<input
type="radio"
name="default"
value
:checked="item.isDefault ? true : false"
@click="radioChange(addressListIndex)"
/>
<i class="icon"></i>
<text class="default">设为默认</text>
</label>-->
</view>
</view>
<view class="acea-row row-middle">
<view @click="editAddress(addressListIndex)">
<text class="iconfont icon-bianji"></text>编辑
</view>
<view @click="delAddress(addressListIndex)">
<text class="iconfont icon-shanchu"></text>删除
</view>
</view>
</view>
</view>
<Loading :loaded="loadend" :loading="loading"></Loading>
<view class="noCommodity" v-if="addressList.length < 1 && page > 1">
<view class="noPictrue">
<image :src="`${$VUE_APP_RESOURCES_URL}/images/noAddress.png`" class="image" />
</view>
</view>
<view style="height:100rpx;"></view>
<view class="footer acea-row row-between-wrapper">
<view class="addressBnt bg-color-red" v-if="isWechat" @click="addAddress">
<text class="iconfont icon-tianjiadizhi"></text>添加新地址
</view>
<view class="addressBnt on bg-color-red" v-else @click="addAddress">
<text class="iconfont icon-tianjiadizhi"></text>添加新地址
</view>
<!--<view class="addressBnt wxbnt" v-if="isWechat" @click="getAddress">-->
<!--<text class="iconfont icon-weixin2"></text>导入微信地址-->
<!--</view>-->
</view>
</view>
</template>
<style scoped lang="less">
.address-management.on {
background-color: #fff;
height: 100vh;
}
</style>
<script type="text/babel">
import {
getAddressList,
getAddressRemove,
getAddressDefaultSet,
postAddress
} from "@/api/user";
import Loading from "@/components/Loading";
import { isWeixin } from "@/utils";
// import { openAddress } from "@/libs/wechat";
export default {
components: {
Loading
},
data() {
return {
page: 1,
limit: 20,
addressList: [],
loadTitle: "",
loading: false,
loadend: false,
isWechat: isWeixin()
};
},
mounted: function() {
this.AddressList();
},
onReachBottom() {
!this.loading && this.AddressList();
},
onShow: function() {
this.refresh();
},
methods: {
refresh: function() {
this.addressList = [];
this.page = 1;
this.loadend = false;
this.AddressList();
},
/**
* 获取地址列表
*
*/
AddressList: function() {
let that = this;
if (that.loading) return; //false
if (that.loadend) return; //false
that.loading = true;
getAddressList({ page: that.page, limit: that.limit }).then(res => {
that.loading = false;
//apply();js;
that.addressList.push.apply(that.addressList, res.data);
that.loadend = res.data.length < that.limit; //
that.page = that.page + 1;
});
},
/**
* 编辑地址
*/
editAddress: function(index) {
this.$yrouter.push({
path: "/pages/user/address/AddAddress/index",
query: { id: this.addressList[index].id }
});
},
/**
* 删除地址
*/
delAddress: function(index) {
let that = this;
let address = this.addressList[index];
let id = address.id;
getAddressRemove(id).then(function() {
uni.showToast({
title: "删除成功!",
icon:"success",
duration: 2000,
complete: () => {
that.addressList.splice(index, 1);
that.$set(that, "addressList", that.addressList);
}
});
});
},
/**
* 设置默认地址
*/
radioChange: function(id) {
getAddressDefaultSet(id).then(res => {
this.refresh();
uni.showToast({ title: res.msg, icon: "none", duration: 2000 });
});
},
/**
* 新增地址
*/
addAddress: function() {
this.$yrouter.push({
path: "/pages/user/address/AddAddress/index"
});
},
getAddress() {
// openAddress().then(userInfo => {
// uni.showLoading({ title: "" });
// postAddress({
// real_name: userInfo.userName,
// phone: userInfo.telNumber,
// address: {
// province: userInfo.provinceName,
// city: userInfo.cityName,
// district: userInfo.countryName
// },
// detail: userInfo.detailInfo,
// post_code: userInfo.postalCode,
// wx_export: 1
// })
// .then(() => {
// this.page = 1;
// this.loading = false;
// this.loadend = false;
// this.addressList = [];
// this.AddressList();
// uni.hideLoading();
// uni.showToast({
// title: "",
// icon: 'success',
// duration: 2000
// });
// })
// .catch(err => {
// uni.hideLoading();
// uni.showToast({
// title: err.msg || err.response.data.msg|| err.response.data.message,
// icon: 'none',
// duration: 2000
// });
// });
// });
}
}
};
</script>

0
pages/user/coupon/GetCoupon/index.vue → pagesB/pages/user/coupon/GetCoupon/index.vue

0
pages/user/coupon/UserCoupon/index.vue → pagesB/pages/user/coupon/UserCoupon/index.vue

0
pages/user/promotion/CashAudit/index.vue → pagesB/pages/user/promotion/CashAudit/index.vue

0
pages/user/promotion/CashRecord/index.vue → pagesB/pages/user/promotion/CashRecord/index.vue

0
pages/user/promotion/CommissionDetails/index.vue → pagesB/pages/user/promotion/CommissionDetails/index.vue

0
pages/user/promotion/Poster/index.vue → pagesB/pages/user/promotion/Poster/index.vue

0
pages/user/promotion/PromoterList/index.vue → pagesB/pages/user/promotion/PromoterList/index.vue

0
pages/user/promotion/PromoterOrder/index.vue → pagesB/pages/user/promotion/PromoterOrder/index.vue

0
pages/user/promotion/UserCash/index.vue → pagesB/pages/user/promotion/UserCash/index.vue

0
pages/user/promotion/UserPromotion/index.vue → pagesB/pages/user/promotion/UserPromotion/index.vue

0
pages/user/signIn/Integral/index.vue → pagesB/pages/user/signIn/Integral/index.vue

0
pages/user/signIn/Sign/index.vue → pagesB/pages/user/signIn/Sign/index.vue

0
pages/user/signIn/SignRecord/index.vue → pagesB/pages/user/signIn/SignRecord/index.vue

BIN
static/article1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

BIN
static/call-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
static/course-icon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

BIN
static/course-icon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

BIN
static/course-icon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

BIN
static/course-icon4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

BIN
static/error-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
static/home-banner.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

BIN
static/myorder-icon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
static/myorder-icon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/myorder-icon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/myorder-icon4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
static/myorder-icon5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/saoyisao.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 B

BIN
static/titleL-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
static/titleR-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
static/user-index-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
static/user-menu1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/user-menu2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
static/user-menu3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/user-menu4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/user-menu5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
static/zan.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

2
utils/index.js

@ -733,7 +733,9 @@ export function back() {
export function switchTab(location, complete, fail, success) { export function switchTab(location, complete, fail, success) {
handleLoginStatus(location, complete, fail, success) handleLoginStatus(location, complete, fail, success)
.then(params => { .then(params => {
console.log('params',params)
uni.switchTab(params) uni.switchTab(params)
}) })
.catch(error => { .catch(error => {

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

Loading…
Cancel
Save