user.vue 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473
  1. <template>
  2. <view class="container">
  3. <!-- 会员信息 上滑展示 start -->
  4. <view class="member_info_sliding" v-if="memberSliding">
  5. <view class="member_info_sliding_left">
  6. <image :src="userCenterData.memberAvatar != undefined ? userCenterData.memberAvatar : defaultAvatar"
  7. mode="aspectFill"></image>
  8. </view>
  9. <view class="member_info_sliding_center">
  10. {{$L('我的')}}
  11. </view>
  12. <view class="member_info_sliding_right">
  13. <view class="user_sets" @click="goSet()">
  14. <image :src="imgUrl + 'member/setting_icon1.png' " mode="" class="user_set_img"></image>
  15. </view>
  16. <view class="user_msg" @click="goMsg()">
  17. <image :src="imgUrl + 'member/msg_icon1.png'" mode="" class="user_msg_img"></image>
  18. <text
  19. v-if="userCenterData && userCenterData.msgNum > 0">{{userCenterData.msgNum > 9 ? '9+' : userCenterData.msgNum}}</text>
  20. </view>
  21. </view>
  22. </view>
  23. <view class="member_info_sliding" v-if="memberSliding">
  24. <view class="member_info_sliding_left">
  25. <image :src="userCenterData.memberAvatar != undefined ? userCenterData.memberAvatar : defaultAvatar"
  26. mode="aspectFill"></image>
  27. </view>
  28. <view class="member_info_sliding_center">
  29. {{$L('我的')}}
  30. </view>
  31. <view class="member_info_sliding_right">
  32. <view class="user_sets" @click="goSet()">
  33. <image :src="imgUrl + 'member/setting_icon1.png' " mode="" class="user_set_img"></image>
  34. </view>
  35. <view class="user_msg" @click="goMsg()">
  36. <image :src="imgUrl + 'member/msg_icon1.png'" mode="" class="user_msg_img"></image>
  37. <text
  38. v-if="userCenterData && userCenterData.msgNum > 0">{{userCenterData.msgNum > 9 ? '9+' : userCenterData.msgNum}}</text>
  39. </view>
  40. </view>
  41. </view>
  42. <!-- 会员信息 上滑展示 end -->
  43. <!-- 会员信息 start 未上滑 -->
  44. <view class="user-section">
  45. <view class="fixed_top_status_bar"></view>
  46. <image class="bg" :src="imgUrl+'member/member_bg.png'" mode="aspectFit"></image>
  47. <view class="user_set">
  48. <view class="user_msg" @click="goSet()">
  49. <image :src="imgUrl + 'member/setting_icon.png' " mode="" class="user_set_img"></image>
  50. </view>
  51. <view class="user_msg" @click="goMsg()">
  52. <image :src="imgUrl + 'member/msg_icon.png'" mode="" class="user_msg_img"></image>
  53. <text
  54. v-if="userCenterData && userCenterData.msgNum > 0">{{userCenterData.msgNum > 9 ? '9+' : userCenterData.msgNum}}</text>
  55. </view>
  56. </view>
  57. <view class="user-info-box">
  58. <view class="portrait-box">
  59. <view class="portrait-bgc">
  60. <image
  61. :src="userCenterData && userCenterData.memberAvatar != undefined ? userCenterData.memberAvatar : defaultAvatar"
  62. mode="aspectFill" class="portrait"></image>
  63. </view>
  64. </view>
  65. <view class="mem-info">
  66. <text class="nick-name"
  67. v-if="userCenterData && (userCenterData.memberName || userCenterData.memberNickName)"
  68. @click="navTo('/pages/user/info')">{{userCenterData.memberNickName||userCenterData.memberName}}</text>
  69. <!-- #ifdef MP-WEIXIN -->
  70. <button class="login_btn"
  71. v-if="(!userCenterData || (userCenterData && !userCenterData.memberName))&&canIUseGetUserProfile"
  72. @tap="getUserProfile">
  73. <text class="nick-name">{{$L('登录')}}</text>
  74. </button>
  75. <button class="login_btn" open-type="getUserInfo" @getuserinfo="getUser"
  76. v-if="(!userCenterData || (userCenterData && !userCenterData.memberName))&&!canIUseGetUserProfile">
  77. <text class="nick-name">{{$L('登录')}}</text>
  78. </button>
  79. <!-- #endif -->
  80. <!-- #ifdef H5||APP-PLUS -->
  81. <text class="nick-name" @tap="gotoLogin"
  82. v-if="!userCenterData || (userCenterData && !userCenterData.memberName)">{{$L('登录')}}</text>
  83. <!-- #endif -->
  84. <text class="member-name" @click="navTo('/pages/user/info')"
  85. v-if="userCenterData && userCenterData.memberName">{{$L('会员名:')}}{{userCenterData.memberName}}</text>
  86. </view>
  87. </view>
  88. <view v-if="isSignOpen" @click="navTo('/standard/signIn/signIn')">
  89. <view class="check-in">
  90. <image :src="imgUrl+ 'signIn/mine_time.png'" mode="widthFix"></image>
  91. {{isSign?'已签到':'去签到'}}
  92. </view>
  93. </view>
  94. </view>
  95. <!-- 会员信息 未上滑 end -->
  96. <!-- 关注店铺 我的收藏 我的足迹 start -->
  97. <view class="mine_record">
  98. <view class="mine_record_pre" @click="navTo('/pages/store/attentionStore')">
  99. <image :src="imgUrl + 'member/mine_stores.png'" mode=""></image>
  100. <text>{{$L('关注店铺')}}<text
  101. v-if="hasLogin && userCenterData && userCenterData.followStoreNum">({{userCenterData.followStoreNum ? userCenterData.followStoreNum : 0}})</text></text>
  102. </view>
  103. <view class="mine_record_pre" @click="navTo('/pages/member/collect')">
  104. <image :src="imgUrl + 'member/mine_collection.png'" mode=""></image>
  105. <text>{{$L('我的收藏')}}<text
  106. v-if="hasLogin && userCenterData && userCenterData.followProductNum">({{userCenterData.followProductNum ? userCenterData.followProductNum : 0}})</text></text>
  107. </view>
  108. <view class="mine_record_pre" @click="navTo('/pages/member/history')">
  109. <image :src="imgUrl + 'member/mine_footprint.png'" mode=""></image>
  110. <text>{{$L('我的足迹')}}<text
  111. v-if="hasLogin && userCenterData && userCenterData.lookLogNum">({{userCenterData.lookLogNum ? userCenterData.lookLogNum : 0}})</text></text>
  112. </view>
  113. </view>
  114. <!-- 关注店铺 我的收藏 我的足迹 end -->
  115. <view class="main-content">
  116. <!-- 我的订单 start-->
  117. <view class="order-part flex_column_start_start">
  118. <view class="title flex_row_between_center">
  119. <text class="left">{{$L('我的订单')}}</text>
  120. <view class="right flex_row_end_center" @click="navTo('/pages/order/list?state=0')">
  121. <text>{{$L('全部订单')}}</text>
  122. <image :src="imgUrl+'member/right_down.png'" />
  123. </view>
  124. </view>
  125. <view class="detail flex_row_around_center">
  126. <view class="wait-pay item flex_column_center_center" @click="navTo('/pages/order/list?state=1')">
  127. <image :src="imgUrl+'member/wait_pay_icon.png'" />
  128. <text class="show-text">{{$L('待付款')}}</text>
  129. <text class="nums" :class="{num:userCenterData.toPaidOrder <= 9}"
  130. v-if="userCenterData && userCenterData.toPaidOrder">{{userCenterData.toPaidOrder>99?'99+':userCenterData.toPaidOrder}}</text>
  131. </view>
  132. <view class="wait-pay item flex_column_center_center" @click="navTo('/pages/order/list?state=2')">
  133. <image :src="imgUrl+'member/wait_deliver_icon.png'" />
  134. <text class="show-text">{{$L('待发货')}}</text>
  135. <text v-if="userCenterData && userCenterData.toDeliverOrder" class="nums"
  136. :class="{num:userCenterData.toDeliverOrder <= 9}">{{userCenterData.toDeliverOrder>99?'99+':userCenterData.toDeliverOrder}}</text>
  137. </view>
  138. <view class="wait-pay item flex_column_center_center" @click="navTo('/pages/order/list?state=3')">
  139. <image :src="imgUrl+'member/wait_receive_icon.png'" />
  140. <text class="show-text">{{$L('待收货')}}</text>
  141. <text v-if="userCenterData && userCenterData.toReceivedOrder" class="nums"
  142. :class="{num:userCenterData.toReceivedOrder <= 9}">{{userCenterData.toReceivedOrder>99?'99+':userCenterData.toReceivedOrder}}</text>
  143. </view>
  144. <view class="wait-pay item flex_column_center_center" @click="navTo('/pages/order/list?state=4')">
  145. <image :src="imgUrl+'member/wait_evaluate_icon.png'" />
  146. <text class="show-text">{{$L('待评价')}}</text>
  147. <text v-if="userCenterData && userCenterData.toEvaluateOrder" class="nums"
  148. :class="{num:userCenterData.toEvaluateOrder <= 9}">{{userCenterData.toEvaluateOrder>99?'99+':userCenterData.toEvaluateOrder}}</text>
  149. </view>
  150. <view class="wait-pay item flex_column_center_center"
  151. @click="navTo('/pages/order/returnAndRefundList?state=0')">
  152. <image :src="imgUrl+'member/wait_service_icon.png'" />
  153. <text class="show-text">{{$L('退款/售后')}}</text>
  154. <text v-if="userCenterData && userCenterData.afterSaleNum" class="nums"
  155. :class="{num:userCenterData.afterSaleNum <= 9}">{{userCenterData.afterSaleNum>99?'99+':userCenterData.afterSaleNum}}</text>
  156. </view>
  157. </view>
  158. </view>
  159. <!-- 我的订单 end-->
  160. <view class="picture_adv_poster_con" @click="goMyVideo"
  161. v-if="(!hasLogin && setting.video_switch == '1') || hasLogin">
  162. <!-- <view class="video_poster" :style="'background-image:url('+imgUrl+ 'svideo/video_poster3x.png'+');'+bgStyle+';'+ bgStyle"> -->
  163. <image :src="imgUrl + 'svideo/video_poster3x.png'"></image>
  164. <!-- </view> -->
  165. </view>
  166. <!-- 开店横版广告展示 start -->
  167. <view class="picture_adv_poster_con" @click="sellerOpt" v-if="hasLogin&&userCenterData.sellerSwitch==1">
  168. <image :src="imgUrl+'store_poster.png'"></image>
  169. </view>
  170. <!-- 开店横版广告展示 end -->
  171. <!-- 常用服务 start -->
  172. <view class="common_services">
  173. <view class="common_services_title">{{$L('常用服务')}}</view>
  174. <view class="common_services_list">
  175. <view class="common_services_pre" @click="navTo('/pages/balance/balance')">
  176. <view class="common_serv_pre_left">
  177. <image :src="imgUrl + 'member/mine_wallet.png'" mode=""></image>
  178. <text>{{$L('我的钱包')}}</text>
  179. </view>
  180. <view class="common_serv_pre_right">
  181. <text
  182. v-if="userCenterData && userCenterData.memberBalance">¥{{userCenterData.memberBalance}}</text>
  183. <image :src="imgUrl+'member/right_down.png'" />
  184. </view>
  185. </view>
  186. <view class="common_services_pre" @click="toPointsPage">
  187. <view class="common_serv_pre_left">
  188. <image :src="imgUrl + 'member/mine_integral.png'" mode=""></image>
  189. <text>{{$L('我的积分')}}</text>
  190. </view>
  191. <view class="common_serv_pre_right">
  192. <text
  193. v-if="userCenterData && userCenterData.memberIntegral">{{userCenterData.memberIntegral}}</text>
  194. <image :src="imgUrl+'member/right_down.png'" />
  195. </view>
  196. </view>
  197. <view class="common_services_pre" @click="goMyCoupon">
  198. <view class="common_serv_pre_left">
  199. <image :src="imgUrl + 'member/my_coupon.png'" mode=""></image>
  200. <text>{{$L('我的优惠券')}}</text>
  201. </view>
  202. <view class="common_serv_pre_right">
  203. <text v-if="userCenterData && userCenterData.couponNum">{{userCenterData.couponNum}}</text>
  204. <image :src="imgUrl+'member/right_down.png'" />
  205. </view>
  206. </view>
  207. <view class="common_services_pre" @click="goMyPointOrder">
  208. <view class="common_serv_pre_left">
  209. <image :src="imgUrl + 'member/point_order.png'" mode=""></image>
  210. <text>{{$L('我的积分订单')}}</text>
  211. </view>
  212. <view class="common_serv_pre_right">
  213. <text v-if="pointOrderNums&&hasLogin">{{pointOrderNums}}</text>
  214. <image :src="imgUrl+'member/right_down.png'" />
  215. </view>
  216. </view>
  217. <view class="common_services_pre" @click="makeCall">
  218. <view class="common_serv_pre_left">
  219. <image :src="imgUrl + '/customer_help_icon.png'" mode=""></image>
  220. <text>平台客服</text>
  221. </view>
  222. <view class="common_serv_pre_right">
  223. <image :src="imgUrl+'member/right_down.png'" />
  224. </view>
  225. </view>
  226. <!-- <view class="common_services_pre" @click="sellerOpt" v-if="hasLogin&&userCenterData.sellerSwitch==1">
  227. <view class="common_serv_pre_left">
  228. <image :src="imgUrl + 'member/point_order.png'" mode=""></image>
  229. <text>商户中心</text>
  230. </view>
  231. </view> -->
  232. </view>
  233. </view>
  234. <!-- 常用服务 end -->
  235. </view>
  236. <!-- 推荐商品 start-->
  237. <recommendGoods ref='recomment_goods' />
  238. <!-- 推荐商品 end-->
  239. <!-- 开屏框 start -->
  240. <view class="open_screen" v-if="signOpenCookie&&!isSign">
  241. <view :style="{ width: width + 'rpx', 'height': height + 'rpx' }" class="open_screen_con"
  242. @click="navTo('/standard/signIn/signIn')">
  243. <view class="con_img" @click.stop="signOpenCookie = false">
  244. <image :src="imgUrl+'signIn/close_screen.png'"></image>
  245. </view>
  246. <image class="open_screen_con_img" :src="signNotice?signNotice:openscnImg" style="height:821rpx" mode="aspectFit"></image>
  247. </view>
  248. </view>
  249. <!-- 开屏框 end -->
  250. <uni-popup ref="popup" type="dialog">
  251. <uni-popup-dialog type="input" title="温馨提示" :content="sellerTip" :confirmText="'复制'" :duration="2000"
  252. @confirm="copyClipp"></uni-popup-dialog>
  253. </uni-popup>
  254. </view>
  255. </template>
  256. <script>
  257. import listCell from '@/components/mix-list-cell';
  258. import recommendGoods from "@/components/recommend-goods.vue"
  259. import uniPopup from '@/components/uni-popup/uni-popup.vue'
  260. import uniPopupDialog from '@/components/uni-popup/uni-popup-dialog.vue'
  261. import h5Copy from '@/utils/H5copy.js'
  262. import {
  263. mapState,
  264. mapMutations
  265. } from 'vuex';
  266. let startY = 0,
  267. moveY = 0,
  268. pageAtTop = true;
  269. export default {
  270. components: {
  271. listCell,
  272. recommendGoods,
  273. uniPopup,
  274. uniPopupDialog
  275. },
  276. data() {
  277. return {
  278. imgUrl: getApp().globalData.imgUrl,
  279. defaultAvatar: getApp().globalData.imgUrl + 'default/member-avatar.png', //默认头像
  280. coverTransform: 'translateY(0px)',
  281. coverTransition: '0s',
  282. moving: false,
  283. client: 1, //终端类型, 1、H5(微信内部浏览器) 2、H5(微信小程序);3、app
  284. oriUrl: '', //不带code的页面地址
  285. memberSliding: false, //页面上滑效果是否显示
  286. pointOrderNums: 0, //为完成积分订单数量
  287. videoNum: 0, //我的视频数量
  288. setting: {}, //平台配置信息
  289. bgStyle: 'background-size:contain;background-position:center center;background-repeat: no-repeat;',
  290. canIUseGetUserProfile: false, //是否可以使用getUserProfile获取用户信息,用于微信小程序,
  291. openscnImg: getApp().globalData.imgUrl + 'signIn/signner.png',
  292. width: 636,
  293. height: 821,
  294. signOpenCookie: false, //签到提醒flag,
  295. isSignOpen: false, //签到活动是否可用
  296. isSign: false, //是否签到,
  297. showState: false,
  298. signNotice: {},
  299. adminTel: '',
  300. sellerTip: ''
  301. }
  302. },
  303. onLoad(option) {
  304. this.client = this.$getLoginClient();
  305. //#ifdef MP-WEIXIN
  306. if (uni.getUserProfile) {
  307. this.canIUseGetUserProfile = true;
  308. }
  309. //#endif
  310. //#ifdef H5
  311. let code = this.$getQueryVariable('code');
  312. if (code) {
  313. let oriUrl = option.ori_url + 'pages/user/user';
  314. let tmp_data = '';
  315. for (let i in option) {
  316. if (i != 'ori_url') {
  317. tmp_data += i + '=' + option[i] + '&'
  318. }
  319. }
  320. oriUrl += '?' + tmp_data;
  321. this.oriUrl = oriUrl;
  322. if (this.$isWeiXinBrower()) {
  323. //微信浏览器的话要把浏览器地址里面的code去掉
  324. history.replaceState({}, '', this.oriUrl);
  325. }
  326. this.toLogin(code, '');
  327. }
  328. //#endif
  329. this.initData();
  330. this.getSetting();
  331. this.getSysSetting()
  332. if (this.hasLogin) {
  333. this.signOpenScreen();
  334. }
  335. },
  336. onShow() {
  337. if (this.showState) {
  338. this.initData();
  339. this.getSetting();
  340. this.signOpenScreen();
  341. }
  342. uni.pageScrollTo({
  343. scrollTop: 0,
  344. })
  345. },
  346. onHide() {
  347. this.signOpenCookie = false
  348. },
  349. // #ifndef MP
  350. onNavigationBarButtonTap(e) {
  351. const index = e.index;
  352. if (index === 0) {
  353. this.navTo('/pages/set/set');
  354. } else if (index === 1) {
  355. // #ifdef APP-PLUS
  356. const pages = getCurrentPages();
  357. const page = pages[pages.length - 1];
  358. const currentWebview = page.$getAppWebview();
  359. currentWebview.hideTitleNViewButtonRedDot({
  360. index
  361. });
  362. // #endif
  363. uni.navigateTo({
  364. url: '/pages/notice/noticeCenter'
  365. })
  366. }
  367. this.showState = true
  368. },
  369. // #endif
  370. computed: {
  371. ...mapState(['hasLogin', 'userInfo', 'userCenterData'])
  372. },
  373. onReachBottom() {
  374. this.$refs.recomment_goods.getMoreData();
  375. },
  376. //监听页面滚动,顶部上滑效果显示
  377. onPageScroll(res) {
  378. if (res.scrollTop > 191) {
  379. this.memberSliding = true;
  380. } else {
  381. this.memberSliding = false;
  382. }
  383. },
  384. methods: {
  385. ...mapMutations(['login', 'setUserCenterData']),
  386. //获取个人中心数据
  387. initData() {
  388. if (this.userInfo.access_token) {
  389. this.$request({
  390. url: 'v3/member/front/member/getInfo',
  391. }).then(res => {
  392. if (res.state == 200) {
  393. this.setUserCenterData(res.data);
  394. } else {
  395. this.$api.msg(res.msg);
  396. }
  397. }).catch((e) => {})
  398. //获取订单订单未完成数量
  399. this.$request({
  400. url: 'v3/integral/front/integral/order/orderCount',
  401. }).then(res => {
  402. if (res.state == 200) {
  403. this.pointOrderNums = res.data;
  404. }
  405. }).catch((e) => {})
  406. this.$request({
  407. url: 'v3/video/front/video/author/personPage'
  408. }).then(res => {
  409. if (res.state == 200) {
  410. this.videoNum = res.data.videoNum
  411. }
  412. })
  413. }
  414. },
  415. // 获取设置信息
  416. getSetting() {
  417. let param = {};
  418. param.url = 'v3/video/front/video/setting/getSettingList';
  419. param.method = 'GET';
  420. param.data = {};
  421. param.data.str = 'video_switch';
  422. this.$request(param).then(res => {
  423. if (res.state == 200) {
  424. let result = res.data;
  425. result && result.map(settingItem => {
  426. if (settingItem.name == 'video_switch') { //绑定商品数
  427. this.setting.video_switch = settingItem.value;
  428. }
  429. })
  430. }
  431. })
  432. },
  433. getSysSetting() {
  434. let param = {
  435. url: 'v3/system/front/setting/getSettings',
  436. data: {
  437. names: 'basic_site_phone'
  438. }
  439. };
  440. this.$request(param).then(res => {
  441. if (res.state == 200) {
  442. this.adminTel = res.data[0]
  443. }
  444. })
  445. },
  446. makeCall() {
  447. uni.makePhoneCall({
  448. phoneNumber: this.adminTel
  449. })
  450. },
  451. sellerOpt() {
  452. this.sellerTip = `请复制地址到电脑端操作:\n${this.userCenterData.sellerUrl}`
  453. this.$refs.popup.open()
  454. },
  455. copyClipp() {
  456. this.$refs.popup.close()
  457. // #ifdef H5
  458. const result = h5Copy(this.userCenterData.sellerUrl)
  459. if (result === false) {
  460. this.$api.msg('不支持')
  461. } else {
  462. this.$api.msg('已复制到剪贴板')
  463. }
  464. // #endif
  465. // #ifdef APP-PLUS || MP-WEIXIN
  466. uni.setClipboardData({
  467. data: this.userCenterData.sellerUrl,
  468. success: function () {
  469. this.$api.msg('已复制到剪贴板')
  470. }
  471. });
  472. // #endif
  473. },
  474. gotoLogin() {
  475. uni.setStorageSync('fromurl', '/pages/user/user');
  476. this.showState = true
  477. uni.navigateTo({
  478. url: '/pages/public/login'
  479. });
  480. return;
  481. // #ifdef H5
  482. let isWexin = this.$isWeiXinBrower();
  483. if (isWexin) {
  484. let tar_url = location.href;
  485. tar_url += location.href.indexOf('?') > -1 ? '&' : '?';
  486. tar_url += 'ori_url=' + location.href;
  487. let uricode = encodeURIComponent(tar_url)
  488. window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + getApp()
  489. .globalData.h5AppId +
  490. '&redirect_uri=' + uricode +
  491. '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
  492. } else {
  493. uni.navigateTo({
  494. url: '/pages/public/login'
  495. });
  496. }
  497. // #endif
  498. },
  499. getUser(e) {
  500. if (e.detail.errMsg == "getUserInfo:ok") {
  501. let userinfo = e.detail.userInfo;
  502. this.getWxXcxCoce(userinfo);
  503. }
  504. },
  505. getUserProfile(e) {
  506. // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
  507. // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
  508. uni.getUserProfile({
  509. desc: '用于完善个人信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  510. success: (res) => {
  511. if (res.errMsg == "getUserProfile:ok") {
  512. let userinfo = res.userInfo;
  513. this.getWxXcxCoce(userinfo);
  514. }
  515. }
  516. })
  517. },
  518. //微信小程序根据用户信息获取code
  519. getWxXcxCoce(userinfo) {
  520. uni.showLoading({
  521. title: '正在请求...',
  522. mask: true
  523. });
  524. uni.login({
  525. success: code => {
  526. this.toLogin(code.code, JSON.stringify(userinfo));
  527. }
  528. });
  529. },
  530. //登录 code为用户的code【微信小程序或者微信h5】 userInfo为获取到的微信用户信息
  531. toLogin(code, userInfo = '') {
  532. uni.setStorageSync('fromurl', '/pages/user/user');
  533. let {
  534. client,
  535. } = this;
  536. let _this = this;
  537. let param = {};
  538. param.url = 'v3/member/front/login/wechat/login';
  539. param.data = {};
  540. param.data.source = client;
  541. param.data.code = code;
  542. //如果有缓存的购物车数据,登录需要把数据同步,并清除本地缓存
  543. let local_cart_list = uni.getStorageSync('cart_list')
  544. let cartInfo = []
  545. if (local_cart_list) {
  546. local_cart_list.cartInfoList.map(item => {
  547. if (item.isChecked == 1) {
  548. cartInfo.push({
  549. goodsId: item.goodsId,
  550. productId: item.productId,
  551. buyNum: item.buyNum,
  552. productPrice: item.productPrice,
  553. checked: 1
  554. })
  555. }
  556. })
  557. param.data.cartInfo = JSON.stringify(cartInfo);
  558. }
  559. if (userInfo) {
  560. param.data.userInfo = userInfo;
  561. }
  562. param.method = 'POST';
  563. this.$request(param).then(res => {
  564. if (res.state == 200) {
  565. uni.removeStorage({
  566. key: 'cart_list'
  567. }); //清除购物车数据
  568. if (res.data.redirect == undefined) {
  569. uni.setStorage({
  570. key: 'userInfo',
  571. data: res.data,
  572. success() {
  573. //登录时间
  574. res.data.loginTime = Date.parse(new Date());
  575. _this.login(res.data);
  576. //登录成功 获取个人中心的数据
  577. _this.$request({
  578. url: 'v3/member/front/member/memberInfo',
  579. }).then(result => {
  580. _this.setUserCenterData(result.data);
  581. _this.$loginGoPage();
  582. _this.getSetting();
  583. }).catch((e) => {})
  584. }
  585. })
  586. } else if (res.data.redirect != undefined) {
  587. //用户未注册,需要绑定手机号进行注册
  588. this.showState = true
  589. uni.navigateTo({
  590. url: '/pages/public/bindMobile?code=' + res.data.bindKey
  591. })
  592. }
  593. } else {
  594. //错误提示
  595. _this.$api.msg(res.msg);
  596. }
  597. uni.hideLoading();
  598. }).catch((e) => {
  599. uni.hideLoading();
  600. })
  601. },
  602. /**
  603. * 统一跳转接口,拦截未登录路由
  604. * navigator标签现在默认没有转场动画,所以用view
  605. */
  606. navTo(url) {
  607. this.showState = true
  608. if (url == '') {
  609. this.$sldCommonTip()
  610. return
  611. }
  612. if (!this.hasLogin) {
  613. if (url == '/pages/user/info') {
  614. uni.navigateTo({
  615. url: '/pages/public/login'
  616. })
  617. } else {
  618. uni.showToast({
  619. title: '请登录',
  620. icon: 'none',
  621. duration: 700
  622. })
  623. }
  624. } else {
  625. if (url == "/standard/signIn/signIn") {
  626. this.signOpenCookie = false
  627. }
  628. uni.navigateTo({
  629. url
  630. })
  631. }
  632. },
  633. /**
  634. * 会员卡下拉和回弹
  635. * 1.关闭bounce避免ios端下拉冲突
  636. * 2.由于touchmove事件的缺陷(以前做小程序就遇到,比如20跳到40,h5反而好很多),下拉的时候会有掉帧的感觉
  637. * transition设置0.1秒延迟,让css来过渡这段空窗期
  638. * 3.回弹效果可修改曲线值来调整效果,推荐一个好用的bezier生成工具 http://cubic-bezier.com/
  639. */
  640. coverTouchstart(e) {
  641. if (pageAtTop === false) {
  642. return;
  643. }
  644. this.coverTransition = 'transform .1s linear';
  645. startY = e.touches[0].clientY;
  646. },
  647. coverTouchmove(e) {
  648. moveY = e.touches[0].clientY;
  649. let moveDistance = moveY - startY;
  650. if (moveDistance < 0) {
  651. this.moving = false;
  652. return;
  653. }
  654. this.moving = true;
  655. if (moveDistance >= 80 && moveDistance < 100) {
  656. moveDistance = 80;
  657. }
  658. if (moveDistance > 0 && moveDistance <= 80) {
  659. this.coverTransform = `translateY(${moveDistance}px)`;
  660. }
  661. },
  662. coverTouchend() {
  663. if (this.moving === false) {
  664. return;
  665. }
  666. this.moving = false;
  667. this.coverTransition = 'transform 0.3s cubic-bezier(.21,1.93,.53,.64)';
  668. this.coverTransform = 'translateY(0px)';
  669. },
  670. //去设置页面
  671. goSet() {
  672. if (!this.hasLogin) {
  673. uni.showToast({
  674. title: '请登录!',
  675. icon: 'none',
  676. duration: 700
  677. })
  678. } else {
  679. this.showState = true
  680. uni.navigateTo({
  681. url: '/pages/set/set'
  682. })
  683. }
  684. },
  685. //去消息页面
  686. goMsg() {
  687. if (!this.hasLogin) {
  688. uni.showToast({
  689. title: '请登录!',
  690. icon: 'none',
  691. duration: 700
  692. })
  693. } else {
  694. this.showState = true
  695. uni.navigateTo({
  696. url: '/pages/chat/list'
  697. })
  698. }
  699. },
  700. // 去我的积分页面
  701. toPointsPage() {
  702. if (!this.hasLogin) {
  703. uni.showToast({
  704. title: '请登录!',
  705. icon: 'none',
  706. duration: 700
  707. })
  708. } else {
  709. this.showState = true
  710. uni.navigateTo({
  711. url: '/pages/user/myIntegral'
  712. })
  713. }
  714. },
  715. //去我的优惠券页面
  716. goMyCoupon() {
  717. if (!this.hasLogin) {
  718. uni.showToast({
  719. title: '请登录!',
  720. icon: 'none',
  721. duration: 700
  722. })
  723. } else {
  724. this.showState = true
  725. uni.navigateTo({
  726. url: '/pages/coupon/myCoupon'
  727. })
  728. }
  729. },
  730. //去我的积分订单页面
  731. goMyPointOrder() {
  732. if (!this.hasLogin) {
  733. uni.showToast({
  734. title: '请登录!',
  735. icon: 'none',
  736. duration: 700
  737. })
  738. } else {
  739. this.showState = true
  740. uni.navigateTo({
  741. url: '/standard/point/order/list'
  742. })
  743. }
  744. },
  745. //去我的视频页面
  746. goMyVideo() {
  747. if (!this.hasLogin) {
  748. uni.showToast({
  749. title: '请登录!',
  750. icon: 'none',
  751. duration: 700
  752. })
  753. } else {
  754. this.showState = true
  755. uni.navigateTo({
  756. url: '/extra/svideo/myVideo'
  757. })
  758. }
  759. },
  760. /*
  761. * 活动签到提醒
  762. * 从签到信息接口获取是否提醒的字段(isRemind)
  763. * isRemind为1,则开启提醒,设置cookie存入提醒字段,每天只显示一次
  764. *
  765. */
  766. signOpenScreen() {
  767. this.$request({
  768. url: 'v3/promotion/front/sign/activity/detail'
  769. }).then(res => {
  770. console.log(new Date(new Date().toLocaleDateString()), 'kkkkk')
  771. if (res.state == 200) {
  772. this.signNotice = res.data.notice.imgUrl
  773. this.isSignOpen = true
  774. let isRemind = res.data.isRemind
  775. let signCookie = uni.getStorageSync('signCookie')
  776. this.isSign = res.data.isSign == 2 ? true : false
  777. if (isRemind == 1) {
  778. if (!signCookie) {
  779. this.signOpenCookie = true
  780. uni.setStorage({
  781. key: 'signCookie',
  782. data: new Date().getTime()
  783. })
  784. } else {
  785. if (new Date().getTime() > new Date(new Date().toLocaleDateString()).getTime() &&
  786. new Date().getTime() > signCookie) {
  787. this.signOpenCookie = false
  788. } else {
  789. this.signOpenCookie = true
  790. uni.setStorage({
  791. key: 'signCookie',
  792. data: new Date().getTime()
  793. })
  794. }
  795. }
  796. } else {
  797. this.signOpenCookie = false
  798. uni.removeStorage({
  799. key: 'signCookie'
  800. })
  801. }
  802. } else {
  803. this.isSignOpen = false
  804. }
  805. })
  806. }
  807. }
  808. }
  809. </script>
  810. <style lang='scss'>
  811. page {
  812. background: $bg-color-split;
  813. width: 750rpx;
  814. margin: 0 auto;
  815. position: relative;
  816. }
  817. .container {
  818. height: 100%;
  819. position: relative;
  820. }
  821. .picture_adv_poster_con image {
  822. width: 100%;
  823. height: 180rpx;
  824. display: block;
  825. cursor: pointer;
  826. }
  827. .picture_adv_poster_con{
  828. &:nth-child(2){
  829. margin-top: 20rpx;
  830. margin-bottom: 20rpx;
  831. }
  832. margin-top: 13rpx;
  833. margin-bottom: 16rpx;
  834. }
  835. .picture_adv_poster_con .video_poster {
  836. width: 100%;
  837. height: 100%;
  838. }
  839. %flex-center {
  840. display: flex;
  841. flex-direction: column;
  842. justify-content: center;
  843. align-items: center;
  844. }
  845. %section {
  846. display: flex;
  847. justify-content: space-around;
  848. align-content: center;
  849. background: #fff;
  850. border-radius: 10upx;
  851. }
  852. .check-in {
  853. position: absolute;
  854. /* #ifdef APP-PLUS */
  855. top: calc(var(--status-bar-height) + 160rpx);
  856. /* #endif */
  857. /* #ifndef APP-PLUS */
  858. top: 160rpx;
  859. /* #endif */
  860. right: 0;
  861. width: 140rpx;
  862. height: 48rpx;
  863. display: flex;
  864. align-items: center;
  865. justify-content: center;
  866. border-radius: 24rpx 0 0 24rpx;
  867. color: #fff;
  868. font-size: 24rpx;
  869. background: rgba(250, 250, 250, 0.2);
  870. z-index: 999;
  871. }
  872. .check-in image {
  873. width: 21rpx;
  874. height: 23rpx;
  875. margin-right: 5rpx;
  876. }
  877. /* 开屏 -- start */
  878. .open_screen {
  879. width: 750rpx;
  880. height: 100vh;
  881. position: absolute;
  882. top: 0;
  883. left: 0;
  884. background-color: rgba(0, 0, 0, 0.3);
  885. z-index: 99999;
  886. }
  887. .open_screen .open_screen_con {
  888. maring: 0 auto;
  889. position: absolute;
  890. top: 50%;
  891. left: 50%;
  892. transform: translate(-50%, -50%);
  893. border-radius: 15rpx;
  894. display: flex;
  895. align-items: center;
  896. flex-direction: column;
  897. }
  898. .open_screen .open_screen_con .open_screen_con_img {
  899. background-size: contain;
  900. border-radius: 15rpx;
  901. }
  902. .open_screen .open_screen_con .con_img {
  903. width: 58rpx;
  904. height: 58rpx;
  905. position: relative;
  906. top: 0;
  907. right: 0;
  908. z-index: 999;
  909. align-self: flex-end;
  910. }
  911. .open_screen_con .con_img image {
  912. width: 100%;
  913. height: 100%;
  914. }
  915. /* 开屏 -- end */
  916. /* 会员信息上滑 start */
  917. .member_info_sliding {
  918. width: 750rpx;
  919. height: 94rpx;
  920. background: linear-gradient(135deg, #FB3E31 0%, #FED600 0%, #FF4E00 0%, #FF001D 100%);
  921. display: flex;
  922. align-items: center;
  923. justify-content: space-between;
  924. padding: 0 30rpx 0 20rpx;
  925. box-sizing: border-box;
  926. position: fixed;
  927. top: 0;
  928. /* #ifdef APP-PLUS */
  929. top: var(--status-bar-height);
  930. /* #endif */
  931. left: 0;
  932. right: 0;
  933. margin: 0 auto;
  934. z-index: 10;
  935. .member_info_sliding_left {
  936. width: 78rpx;
  937. height: 78rpx;
  938. border: 4rpx solid rgba(255, 255, 255, .5);
  939. border-radius: 50%;
  940. image {
  941. width: 100%;
  942. height: 100%;
  943. border-radius: 50%;
  944. border: 4rpx solid #FFFFFF;
  945. }
  946. }
  947. .member_info_sliding_center {
  948. font-size: 36rpx;
  949. font-family: PingFang SC;
  950. font-weight: 500;
  951. color: #FFFFFF;
  952. line-height: 32rpx;
  953. }
  954. .member_info_sliding_right {
  955. display: flex;
  956. align-items: center;
  957. .user_sets {
  958. width: 42rpx;
  959. height: 42rpx;
  960. margin-right: 30rpx;
  961. image {
  962. width: 40rpx;
  963. height: 40rpx;
  964. }
  965. }
  966. .user_msg {
  967. position: relative;
  968. display: flex;
  969. align-items: center;
  970. .user_msg_img {
  971. width: 40rpx;
  972. height: 40rpx;
  973. }
  974. text {
  975. position: absolute;
  976. top: -10rpx;
  977. right: -10rpx;
  978. width: 30rpx;
  979. height: 30rpx;
  980. background: #FFFFFF;
  981. border-radius: 50%;
  982. font-size: 20rpx;
  983. font-family: PingFang SC;
  984. font-weight: 500;
  985. color: #FF152C;
  986. line-height: 30rpx;
  987. text-align: center;
  988. }
  989. }
  990. }
  991. }
  992. /* 会员信息上滑 end */
  993. .user-section {
  994. /* height: calc(418rpx + env(safe-area-inset-top));
  995. height: calc(418rpx + constant(safe-area-inset-top)); */
  996. height: 418rpx;
  997. position: relative;
  998. padding: 40rpx 30rpx 0;
  999. /* #ifdef APP-PLUS */
  1000. padding: 90rpx 30rpx 0;
  1001. padding-top: calc(30rpx + var(--status-bar-height));
  1002. /* #endif */
  1003. .bg {
  1004. position: absolute;
  1005. left: 0;
  1006. top: 0;
  1007. width: 100%;
  1008. height: 382rpx;
  1009. /* #ifdef APP-PLUS */
  1010. height: calc(382rpx + var(--status-bar-height));
  1011. /* #endif */
  1012. }
  1013. }
  1014. .user_set {
  1015. display: flex;
  1016. justify-content: flex-end;
  1017. .user_set_img {
  1018. width: 50rpx;
  1019. height: 50rpx;
  1020. margin-right: 31rpx;
  1021. }
  1022. .user_msg {
  1023. position: relative;
  1024. .user_msg_img {
  1025. width: 50rpx;
  1026. height: 50rpx;
  1027. }
  1028. text {
  1029. width: 30rpx;
  1030. height: 30rpx;
  1031. background: #FFFFFF;
  1032. border-radius: 50%;
  1033. font-size: 20rpx;
  1034. font-family: PingFang SC;
  1035. font-weight: 500;
  1036. color: #FF152C;
  1037. line-height: 30rpx;
  1038. text-align: center;
  1039. position: absolute;
  1040. top: -8rpx;
  1041. right: -10rpx;
  1042. }
  1043. }
  1044. }
  1045. .user-info-box {
  1046. height: 134rpx;
  1047. display: flex;
  1048. align-items: center;
  1049. position: relative;
  1050. z-index: 1;
  1051. /* #ifdef H5 */
  1052. margin-top: 25rpx;
  1053. /* #endif */
  1054. .portrait-box {
  1055. width: 128rpx;
  1056. height: 128rpx;
  1057. border-radius: 50%;
  1058. border: 8rpx solid rgba(255, 255, 255, .5);
  1059. box-sizing: border-box;
  1060. overflow: hidden;
  1061. display: flex;
  1062. align-items: center;
  1063. justify-content: center;
  1064. .portrait-bgc {
  1065. width: 124rpx;
  1066. height: 124rpx;
  1067. box-sizing: border-box;
  1068. border-radius: 50%;
  1069. overflow: hidden;
  1070. background-color: #ffffff;
  1071. display: flex;
  1072. align-items: center;
  1073. justify-content: center;
  1074. .portrait {
  1075. width: 100rpx;
  1076. height: 100rpx;
  1077. border-radius: 50%;
  1078. }
  1079. }
  1080. }
  1081. .mem-info {
  1082. display: flex;
  1083. flex-direction: column;
  1084. justify-content: center;
  1085. align-items: flex-start;
  1086. margin-left: 20rpx;
  1087. .nick-name {
  1088. color: #fff;
  1089. font-size: 40rpx;
  1090. line-height: 44rpx;
  1091. font-weight: bold;
  1092. width: 520rpx;
  1093. overflow: hidden;
  1094. text-overflow: ellipsis;
  1095. display: -webkit-box;
  1096. -webkit-line-clamp: 1; //文字上限行
  1097. -webkit-box-orient: vertical;
  1098. }
  1099. .member-name {
  1100. color: #fff;
  1101. font-size: 20rpx;
  1102. border-radius: 13rpx;
  1103. margin-top: 13rpx;
  1104. height: 28rpx;
  1105. display: flex;
  1106. justify-content: center;
  1107. align-items: center;
  1108. }
  1109. .login_btn {
  1110. background: transparent;
  1111. line-height: 44rpx;
  1112. height: 44rpx;
  1113. padding-left: 0;
  1114. &::after {
  1115. border: none;
  1116. }
  1117. text-align: left;
  1118. }
  1119. }
  1120. }
  1121. /* 我的记录 start */
  1122. .mine_record {
  1123. width: 710rpx;
  1124. background: #FFFFFF;
  1125. border-radius: 10rpx;
  1126. display: flex;
  1127. justify-content: space-around;
  1128. padding: 35rpx 20rpx 41rpx;
  1129. box-sizing: border-box;
  1130. margin: -127rpx auto 20rpx;
  1131. /* #ifdef APP-PLUS */
  1132. margin-top: calc(-127rpx + env(safe-area-inset-top));
  1133. /* #endif */
  1134. position: relative;
  1135. .mine_record_pre {
  1136. display: flex;
  1137. flex-direction: column;
  1138. align-items: center;
  1139. image {
  1140. width: 45rpx;
  1141. height: 45rpx;
  1142. margin-bottom: 30rpx;
  1143. }
  1144. text {
  1145. font-size: 26rpx;
  1146. font-family: PingFang SC;
  1147. font-weight: 500;
  1148. color: #666666;
  1149. line-height: 26rpx;
  1150. }
  1151. }
  1152. }
  1153. /* 我的记录 end */
  1154. .main-content {
  1155. width: 750rpx;
  1156. padding: 0 $com-v-border;
  1157. position: relative;
  1158. .order-part {
  1159. width: 100%;
  1160. height: 277rpx;
  1161. background: #fff;
  1162. box-shadow: 0px 0px 20px 0px rgba(153, 153, 153, 0.15);
  1163. border-radius: 15rpx;
  1164. .title {
  1165. width: 100%;
  1166. height: 90rpx;
  1167. border-bottom: 1px solid #F8F8F8;
  1168. padding-right: 30rpx;
  1169. box-sizing: border-box;
  1170. .left {
  1171. flex-shrink: 0;
  1172. padding-left: 29rpx;
  1173. color: #2D2D2D;
  1174. font-size: 34rpx;
  1175. line-height: 36rpx;
  1176. font-weight: bold;
  1177. }
  1178. .right {
  1179. text {
  1180. flex-shrink: 0;
  1181. color: #666;
  1182. font-size: 28rpx;
  1183. font-weight: 400;
  1184. margin-right: 20rpx;
  1185. }
  1186. image {
  1187. width: 11rpx;
  1188. height: 19rpx;
  1189. }
  1190. }
  1191. }
  1192. .detail {
  1193. flex: 1;
  1194. width: 100%;
  1195. .item {
  1196. position: relative;
  1197. .show-text {
  1198. color: #333333;
  1199. font-size: 28rpx;
  1200. line-height: 28rpx;
  1201. margin-top: 20rpx;
  1202. }
  1203. .nums {
  1204. position: absolute;
  1205. top: -5rpx;
  1206. right: -5rpx;
  1207. background: #FFFFFF;
  1208. border: 1rpx solid #FF0000;
  1209. border-radius: 11rpx;
  1210. padding: 0rpx 5rpx;
  1211. box-sizing: border-box;
  1212. font-size: 20rpx;
  1213. font-family: PingFang SC;
  1214. font-weight: 500;
  1215. color: #FF1D2E;
  1216. text-align: center;
  1217. height: 25rpx;
  1218. line-height: 25rpx;
  1219. display: flex;
  1220. align-items: center;
  1221. justify-content: center;
  1222. }
  1223. .num {
  1224. position: absolute;
  1225. top: -5rpx;
  1226. right: -5rpx;
  1227. width: 25rpx;
  1228. height: 25rpx;
  1229. background: #FFFFFF;
  1230. border: 1rpx solid #FF0000;
  1231. border-radius: 50%;
  1232. font-size: 20rpx;
  1233. font-family: PingFang SC;
  1234. font-weight: 500;
  1235. color: #FF1D2E;
  1236. line-height: 25rpx;
  1237. text-align: center;
  1238. display: flex;
  1239. align-items: center;
  1240. justify-content: center;
  1241. }
  1242. image {
  1243. width: 67rpx;
  1244. height: 58rpx;
  1245. }
  1246. }
  1247. }
  1248. }
  1249. /* 常用服务 start */
  1250. .common_services {
  1251. width: 710rpx;
  1252. min-height: 485rpx;
  1253. background: #FFFFFF;
  1254. border-radius: 15rpx;
  1255. margin: 20rpx auto 0;
  1256. .common_services_title {
  1257. width: 100%;
  1258. height: 92rpx;
  1259. border-bottom: 1rpx solid #F8F8F8;
  1260. font-size: 34rpx;
  1261. font-family: PingFang SC;
  1262. font-weight: bold;
  1263. color: #2D2D2D;
  1264. line-height: 92rpx;
  1265. padding-left: 30rpx;
  1266. }
  1267. .common_services_list {
  1268. display: flex;
  1269. flex-direction: column;
  1270. .common_services_pre {
  1271. height: 130rpx;
  1272. display: flex;
  1273. justify-content: space-between;
  1274. align-items: center;
  1275. margin: 0 30rpx;
  1276. border-bottom: 1rpx solid #F8F8F8;
  1277. &:nth-last-child(1) {
  1278. border-bottom: none;
  1279. }
  1280. .common_serv_pre_left {
  1281. display: flex;
  1282. align-items: center;
  1283. image {
  1284. width: 51rpx;
  1285. height: 51rpx;
  1286. }
  1287. text {
  1288. font-size: 28rpx;
  1289. font-family: PingFang SC;
  1290. font-weight: 500;
  1291. color: #2D2D2D;
  1292. line-height: 39rpx;
  1293. margin-left: 25rpx;
  1294. }
  1295. }
  1296. .common_serv_pre_right {
  1297. display: flex;
  1298. align-items: center;
  1299. text {
  1300. font-size: 28rpx;
  1301. font-family: PingFang SC;
  1302. font-weight: bold;
  1303. color: #333333;
  1304. line-height: 39rpx;
  1305. margin-right: 20rpx;
  1306. }
  1307. image {
  1308. width: 11rpx;
  1309. height: 19rpx;
  1310. }
  1311. }
  1312. }
  1313. }
  1314. }
  1315. /* 常用服务 end */
  1316. .recommend-title {
  1317. display: flex;
  1318. justify-content: center;
  1319. image {
  1320. width: 387rpx;
  1321. height: 34rpx;
  1322. margin: 30rpx 0;
  1323. }
  1324. }
  1325. .recommend-goods {
  1326. flex-wrap: wrap;
  1327. }
  1328. }
  1329. .fixed_top_status_bar {
  1330. position: fixed;
  1331. /* #ifdef APP-PLUS */
  1332. height: var(--status-bar-height);
  1333. /* #endif */
  1334. /* #ifndef APP-PLUS */
  1335. height: 0;
  1336. /* #endif */
  1337. top: 0;
  1338. left: 0;
  1339. right: 0;
  1340. z-index: 99;
  1341. background: #fff;
  1342. }
  1343. </style>