海南旅游项目 前端仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

293 lines
8.2 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <template>
  2. <view>
  3. <view class="flex-direction justify-between align-center text-center lf-p-t-30 lf-p-b-30" style="height: 340rpx;position: relative;">
  4. <view>
  5. <image :src="userInfo.avatar" mode="aspectFill" style="width: 200rpx;height: 200rpx;border-radius: 50%;border: 2rpx solid #FFFFFF;" @click="lookImg('')"></image>
  6. </view>
  7. <view class="lf-font-36 align-center text-center text-white lf-m-t-30">
  8. {{userInfo.nickname}}
  9. </view>
  10. <image class="bg-img" :src="userInfo.avatar" mode="aspectFill" style="filter: blur(3px);"></image>
  11. </view>
  12. <view class="list">
  13. <view class="lf-row-between list-item" hover-class="lf-opacity" @click="$url('/pages/order/order')">
  14. <view class="lf-row-center">
  15. <image class="icon-img" src="../../static/center/order.png"></image>
  16. <text class="lf-text-vertical lf-m-l-20 lf-font-28 lf-color-black">我的订单</text>
  17. </view>
  18. <view>
  19. <text class="lf-iconfont lf-icon-xiangyou lf-text-vertical"></text>
  20. </view>
  21. </view>
  22. <view class="lf-row-between list-item" hover-class="lf-opacity" @click="$url('/pages/message/index')">
  23. <view class="lf-row-center">
  24. <image class="icon-img" src="../../static/center/message.png"></image>
  25. <text class="lf-text-vertical lf-m-l-16 lf-font-28 lf-color-black">消息中心</text>
  26. </view>
  27. <view>
  28. <text class="lf-iconfont lf-icon-xiangyou lf-text-vertical"></text>
  29. </view>
  30. </view>
  31. <view class="lf-row-between list-item" hover-class="lf-opacity">
  32. <view class="lf-row-center">
  33. <image class="icon-img" src="../../static/center/feedback.png"></image>
  34. <text class="lf-text-vertical lf-m-l-16 lf-font-28 lf-color-black">意见反馈</text>
  35. </view>
  36. <view>
  37. <text class="lf-iconfont lf-icon-xiangyou lf-text-vertical"></text>
  38. </view>
  39. <button class="feedback-btn" open-type="feedback"></button>
  40. </view>
  41. <view class="lf-row-between list-item" hover-class="lf-opacity" @click="$url('/pages/collect/index')">
  42. <view class="lf-row-center">
  43. <image class="icon-img" src="../../static/center/collect.png"></image>
  44. <text class="lf-text-vertical lf-m-l-16 lf-font-28 lf-color-black">我的收藏</text>
  45. </view>
  46. <view>
  47. <text class="lf-iconfont lf-icon-xiangyou lf-text-vertical"></text>
  48. </view>
  49. </view>
  50. <view class="lf-row-between list-item" hover-class="lf-opacity" @click="$url('/pages/about/index')">
  51. <view class="lf-row-center">
  52. <image class="icon-img" src="../../static/center/about.png"></image>
  53. <text class="lf-text-vertical lf-m-l-16 lf-font-28 lf-color-black">关于我们</text>
  54. </view>
  55. <view>
  56. <text class="lf-iconfont lf-icon-xiangyou lf-text-vertical"></text>
  57. </view>
  58. </view>
  59. <view class="lf-row-between list-item" hover-class="lf-opacity">
  60. <view class="lf-row-center">
  61. <image class="icon-img" src="../../static/center/service.png"></image>
  62. <text class="lf-text-vertical lf-m-l-16 lf-font-28 lf-color-black">联系客服</text>
  63. </view>
  64. <view>
  65. <text class="lf-iconfont lf-icon-xiangyou lf-text-vertical"></text>
  66. </view>
  67. <button class="feedback-btn" open-type="contact"></button>
  68. </view>
  69. </view>
  70. <!-- 商家工具 -->
  71. <view class="shop-list" v-if="userInfo.verifier == 1">
  72. <view class="lf-row-between">
  73. <view class="lf-font-36 lf-font-bold">商家工具</view>
  74. </view>
  75. <view class="lf-row-between list-item" hover-class="lf-opacity" @click="chargeOff">
  76. <view class="lf-row-center">
  77. <image class="icon-img" src="../../static/center/order.png"></image>
  78. <text class="lf-text-vertical lf-m-l-20 lf-font-28 lf-color-black">卡券核销</text>
  79. </view>
  80. <view>
  81. <text class="lf-iconfont lf-icon-xiangyou lf-text-vertical"></text>
  82. </view>
  83. </view>
  84. </view>
  85. <view class="lf-p-t-35" style="background-color: #F6F6F6;">
  86. <!-- <view class="lf-p-t-40 lf-p-b-20 text-center details-title">
  87. <view class="lf-font-32 details-text flex justify-between align-center text-center" style="color: #222;position: relative;left: 270rpx;">
  88. <view class="rhombus lf-m-l-30"></view>
  89. <view>为你推荐</view>
  90. <view class="rhombus lf-m-r-30"></view>
  91. </view>
  92. </view> -->
  93. <lf-title-line title="为你推荐"></lf-title-line>
  94. <lf-waterfall :list="list"></lf-waterfall>
  95. <view class="loading-more">
  96. <text :class="{'loading-more-text': loading_class}" v-if="list.length">{{ loading_text }}</text>
  97. <lf-nocontent v-else></lf-nocontent>
  98. </view>
  99. </view>
  100. <!-- 回到顶部 -->
  101. <u-back-top :scroll-top="pageScrollTop" :custom-style="{background: 'rgba(51, 51 51, 0.3)'}"></u-back-top>
  102. </view>
  103. </template>
  104. <script>
  105. import lfTitleLine from '@/components/lf-title-line/lf-title-line.vue';
  106. export default {
  107. components: {
  108. lfTitleLine
  109. },
  110. data() {
  111. return {
  112. loading_class: false,
  113. loading_text: '已加载全部数据~',
  114. list: [],
  115. page: 1,
  116. isPage: false,
  117. showLogin: true,
  118. userInfo: {
  119. avatar: '',
  120. nickname:'',
  121. id: ''
  122. }
  123. }
  124. },
  125. computed: {
  126. hidePhone(){
  127. return function(tel){
  128. if(tel.length == 11){
  129. var reg = /^(\d{3})\d{4}(\d{4})$/;
  130. var new_phone = tel.replace(reg, "$1****$2");
  131. return new_phone;
  132. }else{
  133. return tel;
  134. }
  135. }
  136. },
  137. isRight(){
  138. return function(val){
  139. return this.$shared.isRight(val);
  140. }
  141. }
  142. },
  143. methods: {
  144. // 卡券核销
  145. chargeOff(){
  146. uni.scanCode({
  147. complete: result => {
  148. console.log("resuly", result)
  149. if(result.errMsg == 'scanCode:ok'){
  150. let content = result.result; // 核销码
  151. this.$http(this.API.API_CONFIRM_CODE, {id: content}).then(res => {
  152. this.$msg('核销成功!');
  153. let order_id = res.data.id;
  154. time = setTimeout(() => {
  155. this.$url('/pages/shopOrder/order-details?order_id='+ order_id);
  156. }, 1000);
  157. });
  158. }
  159. }
  160. })
  161. },
  162. // 检查当前用户登录状态
  163. verifyUserInfo(){
  164. let userInfo = uni.getStorageSync('userinfo') || {};
  165. this.userInfo = uni.getStorageSync('userinfo') || {}
  166. if(!userInfo.id || !userInfo.nickname || !userInfo.avatar){
  167. if(this.showLogin){
  168. this.showLogin = false;
  169. this.$url('/pages/login/index?type=userinfo');
  170. }else{
  171. this.showLogin = true;
  172. this.$url('/pages/index/index', {type: 'switch'});
  173. }
  174. }
  175. },
  176. getRecommond() {
  177. this.$http(this.API.API_RECOMMOND,{page: this.page}).then(res => {
  178. let isPage = res.data.next_page_url == null?false:true;
  179. this.isPage = isPage;
  180. if(!isPage){
  181. this.loadingClass = false;
  182. this.loadingText = '没有更多数据啦~';
  183. }
  184. if(this.page == 1){
  185. this.list = res.data.data;
  186. }else{
  187. this.list.push(...res.data.data);
  188. }
  189. uni.stopPullDownRefresh();
  190. console.log(this.list)
  191. }).catch(err => {
  192. })
  193. },
  194. // 预览图片
  195. lookImg(img){
  196. this.$u.throttle(() => {
  197. uni.previewImage({
  198. urls: [img]
  199. })
  200. }, 200);
  201. },
  202. },
  203. onReachBottom(){
  204. if(this.isPage){
  205. this.page = this.page + 1;
  206. this.getRecommond();
  207. }
  208. },
  209. onShow() {
  210. this.verifyUserInfo()
  211. this.getRecommond()
  212. }
  213. }
  214. </script>
  215. <style lang="scss">
  216. .rhombus{
  217. width: 16rpx;
  218. height: 16rpx;
  219. transform: rotateZ(45deg);
  220. background: #222;
  221. }
  222. .details-title {
  223. position: relative;
  224. &::after {
  225. position: absolute;
  226. left: 144rpx;
  227. top: 60rpx;
  228. content: '';
  229. width: 69%;
  230. height: 1rpx;
  231. border-bottom: 1rpx solid rgba(0, 0, 0, 0.08)
  232. }
  233. .details-text {
  234. position: relative;
  235. // display: inline-block;
  236. width: 264rpx;
  237. background-color: #f5f5f9;
  238. z-index: 9;
  239. }
  240. }
  241. .list{
  242. margin-top: 20rpx;
  243. padding: 0 32rpx;
  244. background-color: #FFFFFF;
  245. width: 100%;
  246. height: auto;
  247. }
  248. .list-item{
  249. border-bottom: 1rpx solid #EEEEEE;
  250. height: 110rpx;
  251. box-sizing: border-box;
  252. position: relative;
  253. .icon-img{
  254. width: 50rpx;
  255. height: 50rpx;
  256. }
  257. .feedback-btn{
  258. position: absolute;
  259. width: 100%;
  260. height: 100%;
  261. z-index: 1;
  262. background: transparent;
  263. }
  264. &:last-child{
  265. border-bottom: none;
  266. }
  267. }
  268. .bg-img{
  269. width: 100%;
  270. height: 100%;
  271. position: absolute;
  272. top: 0;
  273. left: 0;
  274. z-index: -1;
  275. }
  276. .shop-list{
  277. margin-top: 20rpx;
  278. width: 750rpx;
  279. height: auto;
  280. background-color: #FFFFFF;
  281. padding: 0 32rpx;
  282. padding-bottom: 0;
  283. box-sizing: border-box;
  284. }
  285. </style>