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.

1743 lines
44 KiB

2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
  1. <template>
  2. <view class="home-content">
  3. <NewUserCoupon v-if="isNewUser" @close="closeNewUserPopup" @getCoupon="handleGetCoupon"></NewUserCoupon>
  4. <view class="banner">
  5. <uni-swiper-dot class="uni-swiper-dot-box" field="content">
  6. <swiper class="swiper" indicator-dots indicator-color="rgba(255, 255, 255, 0.50)"
  7. indicator-active-color="#ffffff" autoplay interval="5000">
  8. <swiper-item v-for="(item,i) in bannerList" :key="i">
  9. <image :src="item&&item.dictValue" style="width: 100%;" mode="widthFix" />
  10. </swiper-item>
  11. </swiper>
  12. </uni-swiper-dot>
  13. </view>
  14. <view style="margin: -250px 20rpx 0 20rpx;">
  15. <image style="width: 710rpx; height: 176rpx;" slot='cover'
  16. src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/TopDetail.png" />
  17. </view>
  18. <view class="card-container">
  19. <uni-card :is-shadow="false" padding="40rpx 20rpx 40rpx 20rpx" margin="20rpx">
  20. <view class="normal-bolb-text">
  21. <view @click="getLocationInfo"
  22. style="display: flex; align-items: center; justify-content: space-between;">
  23. <text v-if="isCheckLocation"
  24. style="color: #333333 ;font-size: 32rpx;font-weight: 600; font-style: normal; width: 450rpx; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">{{locationName}}</text>
  25. <text v-else
  26. style="color: #C4C4C4 ;font-size: 32rpx;font-weight: 500; font-style: normal;">请选择宠物上门服务地址</text>
  27. <uni-icons type="location-filled" size="20" color="#FFB13F"></uni-icons>
  28. </view>
  29. </view>
  30. <view class="line" style="background-color: #EFEFEF;"></view>
  31. <view class="content-container">
  32. <view class="example-body hideOnPc">
  33. <view class="normal-bolb-text">
  34. <view @click="toggleCalendar('bottom')">
  35. <view v-if="isCheckTime"
  36. style="display: flex; align-items: center; justify-content: space-between;">
  37. <text
  38. style="color: #333333 ;font-size: 32rpx;font-weight: 600; font-style: normal; width: 450rpx; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">{{selectedDateShowText}}</text>
  39. <text
  40. style="color: #333333 ;font-size: 32rpx;font-weight: 600; font-style: normal;">共选择
  41. <text style="color: #FFB13F;">{{selectedDate.length}}</text>
  42. </text>
  43. </view>
  44. <view v-else
  45. style="display: flex; align-items: center; justify-content: space-between;">
  46. <text
  47. style="color: #C4C4C4 ;font-size: 32rpx;font-weight: 500; font-style: normal;">请选择宠物上门服务时间</text>
  48. <uni-icons type="right" size="20" color="#FFB13F"></uni-icons>
  49. </view>
  50. </view>
  51. </view>
  52. </view>
  53. <view>
  54. <uni-popup ref="popup" background-color="#fff" @change="changePopup">
  55. <view class="popupBottom">
  56. <uni-calendar ref="calendar" class="uni-calendar--hook" :selected="selectedDate"
  57. :startDate="startDate" :endDate="endDate" :showMonth="false"
  58. @change="changeCalendar" @confirm="changeCalendar" @close="close" />
  59. <view style="display: flex; justify-content: center; align-items: center;">
  60. <image @click="closePopup" style="width: 670rpx; height: 80rpx;" slot='cover' src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/yesButton.png" />
  61. </view>
  62. </view>
  63. </uni-popup>
  64. </view>
  65. </view>
  66. <view class="line" style="background-color: #EFEFEF;"></view>
  67. <view>
  68. <view style="display: flex;">
  69. <view @click="getOrder(true)" style="margin-right: 20rpx;">
  70. <image style="width: 304rpx; height: 100rpx;" slot='cover'
  71. src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/OrderByCompanion.png" />
  72. </view>
  73. <view @click="getOrder(false)">
  74. <image style="width: 304rpx; height: 100rpx;"
  75. src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/OrderBySystem.png" />
  76. </view>
  77. </view>
  78. </view>
  79. </uni-card>
  80. </view>
  81. <view class="coupon-list">
  82. <uni-card :is-shadow="false" padding=0 margin="10px">
  83. <view class="coupon-title" slot="title">
  84. <view class="coupon-title-left">
  85. <view class="coupon-flag"></view>
  86. <view>领券中心</view>
  87. </view>
  88. <view class="coupon-title-right">
  89. <view @click="getAllCoupon">
  90. 更多 <uni-icons type="right" size="14px" color="#AAAAAA"></uni-icons>
  91. </view>
  92. </view>
  93. </view>
  94. <view class="split-line"></view>
  95. <view class="coupon-content">
  96. <view v-for="(item,index) in couponData" style="padding:20rpx;" :key="index">
  97. <view style="border: 1px solid #FFBF60; border-radius: 8px;">
  98. <view class="card">
  99. <view class="card-left">{{switchType(item.stockType)}}</view>
  100. <view class="card-center">
  101. <view class="card-center-top"></view>
  102. <view class="card-center-bottom"></view>
  103. </view>
  104. <view class="card-right">
  105. <view class="card-content">
  106. <view class="card-info">{{item.stockName}}</view>
  107. <view class="card-type">可用于
  108. <text class="card-type-text">专业喂养</text>
  109. <text class="card-type-text">专业遛狗</text>
  110. </view>
  111. <view class="card-time">有效期至: {{item && item.availableEndTime ? item.availableEndTime.slice(0, 16) : ''}}</view>
  112. </view>
  113. <view>
  114. <view style="width: 132rpx;height: 52rpx;background-color: #FFAA48; display: flex;align-items: center;justify-content: center;border-radius: 56rpx;">
  115. <text @click="receiveCoupon(item.id)" style="font-size: 24rpx; font-weight: 500; color: #FFFFFF;">立即领取</text>
  116. </view>
  117. </view>
  118. </view>
  119. </view>
  120. <view class="card-bottom">
  121. <view class="card-bottom-text">
  122. 优惠券不可兑换现金
  123. </view>
  124. <view class="card-bottom-text" @click="showRulePopup(item)">
  125. 查看详细规则>
  126. </view>
  127. </view>
  128. </view>
  129. </view>
  130. </view>
  131. </uni-card>
  132. </view>
  133. <view class="companion-list">
  134. <uni-card :is-shadow="false" padding=0 margin="10px">
  135. <view class="companion-title" slot="title">
  136. <view class="companion-title-left">
  137. <view class="companion-flag"></view>
  138. <view>周边伴宠师</view>
  139. </view>
  140. <view class="companion-title-right" @click="getAllCompanion">
  141. <view>
  142. 更多 <uni-icons type="right" size="14px" color="#AAA"></uni-icons>
  143. </view>
  144. </view>
  145. </view>
  146. <view class="split-line"></view>
  147. <view class="companion-content"
  148. v-for="(item,index) in companionList" :key="index"
  149. v-if="index < 1">
  150. <view class="companion-item">
  151. <view class="companion-info">
  152. <image class="companion-img" slot='cover'
  153. :src="item.userImage">
  154. </image>
  155. <view class="companion-info-1">
  156. <view class="companion-info-2">
  157. <view class="companion-info-title">
  158. <view class="companion-name">
  159. {{ item.userName || '匿名' }}
  160. </view>
  161. <view class="companion-sex">
  162. <img :src="item.appletUsersTeacher.sex == 0?'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/sex_m.png':
  163. 'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/pet/sex_f.png'" alt="sex"
  164. style="width: 20px;height: 20px;" />
  165. </view>
  166. </view>
  167. <view class="companion-info-star">
  168. <text style="color: #FFB13F;">点赞数{{ item.appletUsersTeacher.thumbsUp || 0 }}</text>
  169. <uni-icons type="hand-up-filled" size="20" color="#FFB13F"></uni-icons>
  170. </view>
  171. </view>
  172. <view class="companion-info-3" style="width: 100%;">
  173. <view class="ellipsis" v-if="item.distanceText">
  174. 距离{{ item.distanceText }}km
  175. </view>
  176. <view class="ellipsis" v-else>
  177. {{ '<' }}1km
  178. </view>
  179. </view>
  180. <view class="companion-info-4" style="width: 100%;">
  181. <view class="ellipsis" style="max-width: 225px;">
  182. 简介{{ item.appletUsersTeacher.userBrief || '暂无' }}
  183. </view>
  184. </view>
  185. </view>
  186. </view>
  187. </view>
  188. <view>
  189. <view class="companion-item-bottom">
  190. <text class="companion-item-bottom-text">养宠{{ item.experience || 0 }} | 评价{{ item.commentNum || 0 }} | 服务小结{{ item.serviceSummaryNum || 0 }}</text>
  191. </view>
  192. </view>
  193. </view>
  194. <view class="no-data" v-if="companionList.length == 0">
  195. <view class="no-data-text">
  196. 您周边没有伴宠师呢
  197. </view>
  198. </view>
  199. </uni-card>
  200. </view>
  201. <view class="history-record">
  202. <uni-card :is-shadow="false" padding=0 margin="10px">
  203. <view class="history-record-title" slot="title">
  204. <view class="history-record-title-left">
  205. <view class="history-record-flag"></view>
  206. <view>历史记录</view>
  207. </view>
  208. <view class="history-record-title-right">
  209. <view @click="getAllRecord">
  210. 查看服务记录和评价详情 <uni-icons type="right" size="14px" color="#AAAAAA"></uni-icons>
  211. </view>
  212. </view>
  213. </view>
  214. <view class="split-line"></view>
  215. <view class="history-record-content">
  216. <view class="history-record-content-image">
  217. <view class="history-record-content-image-1">
  218. <view class="history-record-content-image-1-text">
  219. <view class="history-record-content-image-1-text-1">{{historyRecord.dog}}</view>
  220. <view class="history-record-content-image-1-text-2">{{historyRecord.dogTime}}</view>
  221. </view>
  222. </view>
  223. <view class="history-record-content-image-2">
  224. <view class="history-record-content-image-2-text">
  225. <view class="history-record-content-image-2-text-1">{{historyRecord.cat}}</view>
  226. <view class="history-record-content-image-2-text-2">至2{{historyRecord.catTime}}</view>
  227. </view>
  228. </view>
  229. <view class="history-record-content-image-3">
  230. <view class="history-record-content-image-3-text">
  231. <view class="history-record-content-image-3-text-1">{{historyRecord.num}}</view>
  232. <view class="history-record-content-image-3-text-2">{{historyRecord.numTime}}</view>
  233. </view>
  234. </view>
  235. </view>
  236. <view class="history-record-content-text">
  237. <text>*数据来源于布丁猫妈狗爸平台</text>
  238. </view>
  239. </view>
  240. </uni-card>
  241. </view>
  242. <view class="service-content">
  243. <image src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/second_stage/ysbz.png"
  244. style="width: 100%;" mode="widthFix" alt="service" />
  245. </view>
  246. <!-- <view class="card-container">
  247. <uni-card :is-shadow="false" padding="0px" margin="10px">
  248. <view class="title-img4"></view>
  249. <uni-row class="demo-uni-row">
  250. <uni-col :span="12" v-for="(item,index) in peopleList" :key="index">
  251. <uni-card :is-shadow="false" margin="5px" padding="0" spacing="0" :border="false"
  252. shadow="0px 0px 0px 0px rgba(0, 0, 0, 0.08)">
  253. <image class="people-img" slot='cover' style="width: 100%;"
  254. :src="item&&item.staffImages&&item.staffImages.length>0?item.staffImages[0].url:defaultStaffIamge">
  255. </image>
  256. <text class="people-year">{{item.serviceAge}}年从业经验</text>
  257. <text class="show-text-1">姓名{{item.nickName}}</text>
  258. <text class="show-text-2">简介{{item.shortDescription}}</text>
  259. </uni-card>
  260. </uni-col>
  261. </uni-row>
  262. </uni-card>
  263. </view> -->
  264. <view>
  265. <image style="height: 132rpx; width: 710rpx; margin: 0 20rpx 20rpx 20rpx;"
  266. slot='cover'
  267. src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/joinus.png" />
  268. </view>
  269. <Kefu></Kefu>
  270. <view class="coupon_wrap" v-if="envVersion == 'dev'">
  271. <view class="details-subscribe">
  272. <view @click="getCoupon" class="details-btn">点击领取到卡包</view>
  273. </view>
  274. <view v-if="showMask" @closeMask="closeMask">
  275. <view class="mask-coupon" @click="closeMask">
  276. <view class="wx-coupon">
  277. <view class="title">
  278. 领取优惠券
  279. <i>*</i>
  280. </view>
  281. <view class="content">
  282. 优惠券列表显示
  283. </view>
  284. <view class="" v-for="(item,index) in couponList" :key="index">
  285. <send-coupon @sendcoupon="getSendCoupon" @userconfirm="redirectuser" :sign="item.sign"
  286. :send_coupon_params="item.sendCouponParams"
  287. :send_coupon_merchant="item.send_coupon_merchant">
  288. <view class="text-button">{{item.wechatStock.stockName}}</view>
  289. </send-coupon>
  290. </view>
  291. </view>
  292. </view>
  293. </view>
  294. </view>
  295. <!-- 优惠券详细规则弹窗 -->
  296. <uni-popup ref="rulePopup" type="center">
  297. <view class="rule-popup">
  298. <view class="rule-popup-title">优惠券详细规则</view>
  299. <view class="rule-popup-content">
  300. <view class="rule-item">
  301. <view class="rule-label">名称</view>
  302. <view class="rule-value">{{currentCoupon && currentCoupon.stockName || ''}}</view>
  303. </view>
  304. <view class="rule-item">
  305. <view class="rule-label">折扣</view>
  306. <view class="rule-value">{{getDiscountText(currentCoupon)}}</view>
  307. </view>
  308. <view class="rule-item">
  309. <view class="rule-label">使用规则</view>
  310. <view class="rule-value">可用于专业喂养和专业遛狗服务</view>
  311. </view>
  312. <view class="rule-item">
  313. <view class="rule-label">有效日期</view>
  314. <view class="rule-value">{{currentCoupon && currentCoupon.availableEndTime ? currentCoupon.availableEndTime.slice(0, 16) : ''}}</view>
  315. </view>
  316. <view class="rule-item">
  317. <view class="rule-label">特别说明</view>
  318. <view class="rule-value">单笔订单仅限使用1张优惠券优惠券仅限用户本人使用不可赠送不可提现不得找零</view>
  319. </view>
  320. </view>
  321. <view class="rule-popup-close" @click="closeRulePopup">关闭</view>
  322. </view>
  323. </uni-popup>
  324. </view>
  325. </template>
  326. <script>
  327. import {
  328. getStaffList,
  329. getProductList,
  330. getBannerList,
  331. getCouponList,
  332. getCouponListNoAuth,
  333. getOpenId,
  334. receiveCoupon,
  335. } from "@/api/system/user"
  336. import {
  337. setToken,
  338. getToken,
  339. getOpenIdKey,
  340. setOpenIdKey
  341. } from '@/utils/auth'
  342. // import { getTeacherListIndex } from '@/api/home'
  343. import {
  344. getTeacherList,
  345. } from "@/api/order/order"
  346. import Kefu from './common/kefu.vue'
  347. import uniPopup from '@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue';
  348. import NewUserCoupon from './components/NewUserCoupon.vue';
  349. import positionMixin from '@/mixins/position.js';
  350. export default {
  351. mixins: [positionMixin],
  352. data() {
  353. return {
  354. current: 0,
  355. swiperDotIndex: 0,
  356. defaultSkuImage: 'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/banner/%E5%96%82%E5%85%BB.png',
  357. defaultStaffIamge: 'https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/banner/gold_people.png',
  358. defaultLink: '/pages/details/feed',
  359. skuData: [],
  360. peopleList: [],
  361. cover: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/shuijiao.jpg',
  362. bannerList: [],
  363. couponList: [],
  364. showMask: false,
  365. envVersion: 'develop',
  366. isNewUser: false,
  367. selectedDate: [],
  368. startDate: '',
  369. endDate: '',
  370. isCheckTime: false,
  371. selectedDateShowText: '',
  372. isCheckLocation: false,
  373. locationName: '',
  374. locationLatitude: '',
  375. locationLongitude: '',
  376. locationAddress: '',
  377. allInfo: {
  378. isCheckLocation: false,
  379. locationName: '',
  380. locationLatitude: '',
  381. locationLongitude: '',
  382. locationAddress: '',
  383. selectedDate: [],
  384. isCheckTime: false,
  385. selectedDateShowText: '',
  386. },
  387. defaultCompanion: {
  388. name: '宠小二',
  389. gender: 0,
  390. star: 560,
  391. distance: 1.5,
  392. shortDescription: '有一只三岁蓝猫叫憨憨,热爱小宠物,心地善良,喜欢动物',
  393. staffImages: [{
  394. url: "https://catmdogf.oss-cn-shanghai.aliyuncs.com/2024/01/2634af25c5bf294f39b795ecc9d3c4eefa微信图片_20240126125100.png"
  395. }],
  396. year: 4,
  397. record: 11,
  398. serviceNum: 13,
  399. },
  400. couponData: [],
  401. historyRecord: {
  402. dog: "47131",
  403. dogTime: "2024.12.12",
  404. cat: "47131",
  405. catTime: "2024.12.12",
  406. num: "47131",
  407. numTime: "2024.12.12",
  408. },
  409. currentCoupon: null,
  410. companionList: [],
  411. }
  412. },
  413. components: {
  414. Kefu,
  415. uniPopup,
  416. NewUserCoupon
  417. },
  418. mounted() {
  419. this.getCalendarDate();
  420. this.checkNewUser();
  421. },
  422. methods: {
  423. checkNewUser() {
  424. const isFirstVisit = !uni.getStorageSync('hasVisited');
  425. if (isFirstVisit) {
  426. this.isNewUser = true;
  427. uni.setStorageSync('hasVisited', true);
  428. }
  429. },
  430. closeNewUserPopup() {
  431. this.isNewUser = false;
  432. },
  433. handleGetCoupon() {
  434. if (getToken()) {
  435. this.getCoupon();
  436. } else {
  437. uni.navigateTo({
  438. url: '/pages/personalCenter/index'
  439. });
  440. }
  441. },
  442. getAllCoupon() {
  443. uni.navigateTo({
  444. url: '/pages/companionPetList/couponList'
  445. });
  446. },
  447. getAllCompanion() {
  448. if (!this.isCheckLocation) {
  449. uni.showToast({
  450. title: '请先选择地址',
  451. duration: 1500,
  452. icon: "none"
  453. })
  454. } else {
  455. uni.navigateTo({
  456. url: `/pages/companionPetList/companionPetList?info=` + encodeURIComponent(JSON
  457. .stringify(this.allInfo))
  458. });
  459. }
  460. },
  461. getAllRecord () {
  462. },
  463. toggleCalendar(type) {
  464. this.type = type
  465. uni.hideTabBar()
  466. this.$refs.popup.open(type)
  467. },
  468. closePopup() {
  469. this.$refs.popup.close()
  470. setTimeout(() => {
  471. uni.showTabBar()
  472. }, 300)
  473. },
  474. changePopup(e) {
  475. console.log('当前模式:' + e.type + ',状态:' + e.show);
  476. if (e.show) {
  477. uni.hideTabBar()
  478. } else {
  479. setTimeout(() => {
  480. uni.showTabBar()
  481. }, 300)
  482. }
  483. },
  484. close() {
  485. console.log('弹窗关闭');
  486. },
  487. confirm(e) {
  488. console.log('confirm 返回:', e)
  489. },
  490. changeCalendar(e) {
  491. console.log('change 返回:', e)
  492. this.selectedDateShowText = ''
  493. const selectedValue = this.selectedDate.find(item => item.date === e.fulldate)
  494. console.log('const selectedValue', selectedValue)
  495. if (selectedValue) {
  496. this.selectedDate = this.selectedDate.filter(item => item.date !== e.fulldate);
  497. this.allInfo.selectedDate = this.selectedDate;
  498. } else {
  499. this.selectedDate.push({
  500. date: e.fulldate,
  501. info: 'time'
  502. })
  503. this.allInfo.selectedDate = this.selectedDate
  504. console.log('this.selectedDate', this.selectedDate)
  505. }
  506. console.log("this.selectedDate.length", this.selectedDate.length)
  507. console.log("this.selectedDate", this.selectedDate)
  508. if (this.selectedDate.length > 0) {
  509. this.isCheckTime = true
  510. this.allInfo.isCheckTime = this.isCheckTime
  511. if (this.selectedDate.length == 1) {
  512. this.selectedDateShowText = this.selectedDate[0].date + ''
  513. this.selectedDateShowText = this.selectedDateShowText.replace(/-/g, "/");
  514. this.allInfo.selectedDateShowText = this.selectedDateShowText
  515. } else if (this.selectedDate.length == 2) {
  516. this.selectedDateShowText = this.selectedDate[0].date + "," + this.selectedDate[1].date
  517. this.selectedDateShowText = this.selectedDateShowText.replace(/-/g, "/");
  518. this.allInfo.selectedDateShowText = this.selectedDateShowText
  519. } else if (this.selectedDate.length > 2) {
  520. this.selectedDateShowText = this.selectedDate[0].date + '...' + this.selectedDate[this.selectedDate
  521. .length - 1].date
  522. this.selectedDateShowText = this.selectedDateShowText.replace(/-/g, "/");
  523. this.allInfo.selectedDateShowText = this.selectedDateShowText
  524. }
  525. } else {
  526. this.isCheckTime = false
  527. this.allInfo.isCheckTime = this.isCheckTime
  528. }
  529. },
  530. getCalendarDate() {
  531. let tomorrow = new Date()
  532. tomorrow.setDate(tomorrow.getDate() + 2);
  533. this.startDate = this.formatDate(tomorrow);
  534. let threeMonthsLater = new Date();
  535. threeMonthsLater.setMonth(threeMonthsLater.getMonth() + 3);
  536. this.endDate = this.formatDate(threeMonthsLater);
  537. },
  538. formatDate(date) {
  539. let year = date.getFullYear();
  540. let month = (date.getMonth() + 1).toString().padStart(2, '0');
  541. let day = date.getDate().toString().padStart(2, '0');
  542. return year + '-' + month + '-' + day;
  543. },
  544. getLocationInfo() {
  545. wx.chooseLocation({
  546. type: 'gcj02',
  547. success: (res) => {
  548. this.isCheckLocation = true
  549. this.locationName = res.address
  550. this.locationLongitude = res.longitude
  551. this.locationLatitude = res.latitude
  552. this.locationAddress = res.address
  553. console.log('选择的位置:', res);
  554. this.allInfo.isCheckLocation = true
  555. this.allInfo.locationName = res.address
  556. this.allInfo.locationLongitude = res.longitude
  557. this.allInfo.locationLatitude = res.latitude
  558. this.allInfo.locationAddress = res.address
  559. // 保存位置信息到Vuex
  560. this.$store.commit('setPosition', {
  561. address: res.address,
  562. longitude: res.longitude,
  563. latitude: res.latitude
  564. });
  565. // 获取周边伴宠师
  566. this.getCompanionList();
  567. },
  568. fail: (err) => {
  569. console.error('选择位置失败:', err);
  570. }
  571. });
  572. },
  573. getLocationFirst() {
  574. wx.chooseLocation({
  575. type: 'gcj02',
  576. success: (res) => {
  577. this.isCheckLocation = true
  578. this.locationName = res.address
  579. this.locationLongitude = res.longitude
  580. this.locationLatitude = res.latitude
  581. this.locationAddress = res.address
  582. this.allInfo.isCheckLocation = true
  583. this.allInfo.locationName = res.address
  584. this.allInfo.locationLongitude = res.longitude
  585. this.allInfo.locationLatitude = res.latitude
  586. this.allInfo.locationAddress = res.address
  587. // 保存位置信息到Vuex
  588. this.$store.commit('setPosition', {
  589. address: res.address,
  590. longitude: res.longitude,
  591. latitude: res.latitude
  592. });
  593. // 获取周边伴宠师
  594. this.getCompanionList();
  595. },
  596. fail: (err) => {
  597. console.error('选择位置失败:', err);
  598. }
  599. });
  600. },
  601. getLocation(){
  602. return new Promise((resolve, reject) => {
  603. uni.getLocation({
  604. type: 'gcj02',
  605. success: (res) => {
  606. resolve(res)
  607. }
  608. })
  609. })
  610. },
  611. async getCompanionList() {
  612. // 构建参数,使用当前位置坐标
  613. let data = {
  614. latitude: this.position.latitude,
  615. longitude: this.position.longitude,
  616. }
  617. if(!data.latitude){
  618. let res = await this.getLocation()
  619. data.latitude = res.latitude
  620. data.longitude = res.longitude
  621. }
  622. getTeacherList(data).then(response => {
  623. if (response.code == 200) {
  624. this.companionList = response.rows
  625. this.calculateTeacherListDistance()
  626. }
  627. console.log(response);
  628. })
  629. },
  630. calculateTeacherListDistance(){
  631. this.companionList.forEach(item => {
  632. item.distanceText = this.calculateDistanceAddress(item.appletAddresseList)
  633. })
  634. this.companionList.sort((a,b) => a.distanceText - b.distanceText)
  635. },
  636. getOrder(value) {
  637. if (value) {
  638. if (!this.isCheckLocation) {
  639. uni.showToast({
  640. title: '请先选择地址',
  641. duration: 1500,
  642. icon: "none"
  643. })
  644. } else {
  645. this.$store.commit('setPosition', {
  646. address: this.locationAddress,
  647. longitude: this.locationLongitude,
  648. latitude: this.locationLatitude,
  649. date: this.selectedDateShowText
  650. })
  651. uni.navigateTo({
  652. url: `/pages/companionPetList/companionPetList?info=`
  653. + encodeURIComponent(JSON
  654. .stringify(this.allInfo))
  655. });
  656. }
  657. } else {
  658. this.$store.commit('setPosition', {})
  659. this.buyInfo.teacher = null
  660. uni.navigateTo({
  661. url: '/pages/newOrder/serviceNew',
  662. });
  663. }
  664. },
  665. getCoupon() {
  666. // getCouponList().then(res => {
  667. // if (res.code == 200) {
  668. // this.couponList = res.rows
  669. // this.showMask = true
  670. // } else {
  671. // this.$modal.showToast('获取优惠券失败')
  672. // }
  673. // })
  674. },
  675. getCouponListAuth() {
  676. getCouponList().then(res => {
  677. if (res.code == 200) {
  678. this.couponData.push(res.data[0])
  679. console.log("this.couponData", this.couponData)
  680. } else {
  681. this.$modal.showToast('获取优惠券失败')
  682. }
  683. })
  684. },
  685. switchType(type) {
  686. if (type == 'PNORMAL') {
  687. return '满减券'
  688. }
  689. if (type == 'PDISCOUNT') {
  690. return '折扣券'
  691. }
  692. if (type == 'PTRAIL') {
  693. return '体验券'
  694. }
  695. return '优惠券'
  696. },
  697. receiveCoupon(id) {
  698. let data = {
  699. stockId: id
  700. }
  701. receiveCoupon(data).then(res => {
  702. console.log("this.receiveCoupon", res)
  703. if (res.code == 200) {
  704. this.$modal.showToast('优惠券领取成功')
  705. } else {
  706. this.$modal.showToast('领取优惠券失败')
  707. }
  708. })
  709. },
  710. getCouponListNoAuth() {
  711. // console.log('进入 getCouponListNoAuth:');
  712. // getCouponListNoAuth().then(res => {
  713. // if (res.code == 200) {
  714. // if (res.rows && Array.isArray(res.rows)) {
  715. // this.couponData = res.rows.filter(item => item !== null);
  716. // console.log("优惠券数据加载成功:", this.couponData);
  717. // } else if (res.data && Array.isArray(res.data)) {
  718. // this.couponData = res.data.filter(item => item !== null);
  719. // console.log("优惠券数据加载成功:", this.couponData);
  720. // } else {
  721. // console.log("获取优惠券数据格式异常:", res);
  722. // }
  723. // } else {
  724. // this.$modal.showToast('获取优惠券失败')
  725. // }
  726. // }).catch(err => {
  727. // console.error("获取优惠券列表出错:", err);
  728. // })
  729. },
  730. closeMask() {
  731. this.showMask = false
  732. },
  733. getSendCoupon(res) {
  734. let that = this
  735. console.log('res', res)
  736. if (res.detail.errcode == 'OK') {
  737. console.log(222)
  738. if (res.detail.send_coupon_result[0].code == 'SUCCESS') {
  739. that.showMask = false
  740. uni.showToast({
  741. title: '领取成功',
  742. icon: 'success',
  743. duration: 2000,
  744. })
  745. } else {
  746. uni.showModal({
  747. title: '领取失败',
  748. content: res.detail.send_coupon_result[0].message,
  749. showCancel: false,
  750. success: function(res) {
  751. that.showMask = false
  752. }
  753. })
  754. }
  755. } else {
  756. uni.showToast({
  757. title: '领取失败',
  758. icon: 'none'
  759. })
  760. that.showMask = false
  761. }
  762. },
  763. redirectuser() {},
  764. getBanner() {
  765. getBannerList().then(res => {
  766. if (res.code == 200) {
  767. this.bannerList = res.data
  768. } else {
  769. this.$modal.showToast('获取Banner失败')
  770. }
  771. })
  772. },
  773. changeSwiper(e) {
  774. this.current = e.detail.current
  775. },
  776. getPeopleList() {
  777. getStaffList().then(response => {
  778. if (response.code == 200) {
  779. this.peopleList = response.rows
  780. }
  781. console.log(response);
  782. })
  783. },
  784. getProductList() {
  785. getProductList({
  786. "publishStatus": 1,
  787. "categoryId": 76
  788. }).then(response => {
  789. if (response && response.content && response.content.length > 0) {
  790. this.skuData = response.content;
  791. }
  792. console.log(response);
  793. })
  794. },
  795. goDetails(item) {
  796. if (item) {
  797. uni.navigateTo({
  798. url: `/pages/details/detail?id=${item.id}`
  799. });
  800. } else {
  801. this.$modal.showToast('数据有误,请联系管理员')
  802. }
  803. },
  804. init() {
  805. this.$globalData.itemPrice = []
  806. this.$globalData.submitData = {
  807. "phone": "",
  808. "wechatId": "",
  809. "note": "",
  810. "totalPrice": "",
  811. "address": {
  812. "province": "",
  813. "city": "",
  814. "district": "",
  815. "detailAddress": ""
  816. },
  817. "skuList": [],
  818. "service": {
  819. "serviceFrequency": "once_a_day",
  820. "serviceDate": [],
  821. "serviceTimeFirst": "",
  822. "serviceTimeSecond": "",
  823. "pet": []
  824. }
  825. }
  826. },
  827. login() {
  828. uni.login({
  829. provider: 'weixin',
  830. success: (loginRes) => {
  831. console.log("login", loginRes)
  832. this.getOpenId(loginRes.code)
  833. },
  834. fail: function(error) {
  835. uni.showToast('授权失败,请授权后再试')
  836. }
  837. });
  838. },
  839. getOpenId(code) {
  840. getOpenId(code).then(res => {
  841. if (res.code == 200 && res.data) {
  842. let resData = JSON.parse(res.data)
  843. let token = resData.token;
  844. let openId = resData.openId;
  845. setOpenIdKey(openId)
  846. if (token) {
  847. setToken(token)
  848. }
  849. }
  850. })
  851. },
  852. showRulePopup(coupon) {
  853. if (!coupon) {
  854. console.warn('尝试显示空优惠券详情');
  855. return;
  856. }
  857. this.currentCoupon = coupon;
  858. this.$refs.rulePopup.open();
  859. },
  860. closeRulePopup() {
  861. this.$refs.rulePopup.close();
  862. },
  863. getDiscountText(coupon) {
  864. if (!coupon || !coupon.stockType) return '';
  865. if (coupon.stockType === 'PNORMAL') {
  866. return '满100可减10元';
  867. } else if (coupon.stockType === 'PDISCOUNT') {
  868. return '打8折';
  869. } else if (coupon.stockType === 'PTRAIL') {
  870. return '免费体验一次';
  871. }
  872. return '';
  873. },
  874. },
  875. onShow() {
  876. if (!getToken() || !getOpenIdKey()) {
  877. this.login()
  878. }
  879. if(this.$globalData.mainSku.length < 1 || !this.$globalData.mainSku[0].price){
  880. // 获取主产品
  881. this.getProductList()
  882. }
  883. this.currentAddress = this.$globalData.newOrderData.currentAddress
  884. if(this.currentAddress&&this.currentAddress.name){
  885. this.isAddressSelected=true
  886. }
  887. this.currentPets = this.$globalData.newOrderData.currentPets
  888. if(this.currentPets&&this.currentPets.length>0){
  889. this.isPetSelected=true
  890. }
  891. this.needPreFamiliarize = this.$globalData.newOrderData.needPreFamiliarize
  892. // 初始化伴宠师等级
  893. if(this.$globalData.newOrderData.companionLevel) {
  894. this.companionLevel = this.$globalData.newOrderData.companionLevel
  895. }
  896. // 获取周边伴宠师数据
  897. this.getCompanionList();
  898. },
  899. onLoad: function() {
  900. this.init()
  901. this.getPeopleList()
  902. this.getProductList()
  903. this.getBanner()
  904. const accountInfo = wx.getAccountInfoSync();
  905. this.envVersion = accountInfo.miniProgram.envVersion;
  906. if (!getToken() || !getOpenIdKey()) {
  907. this.login()
  908. } else {
  909. this.getCouponListAuth()
  910. }
  911. // 设置默认位置,这样即使用户不选择位置也能显示一些伴宠师
  912. this.$store.commit('setPosition', {
  913. address: "上海市浦东新区浦东南路150弄",
  914. longitude: 121.49857,
  915. latitude: 31.22514
  916. });
  917. }
  918. }
  919. </script>
  920. <style lang="scss">
  921. page {
  922. background-color: #F5F5F7 !important;
  923. }
  924. .no-data{
  925. width: 100%;
  926. height: 100%;
  927. display: flex;
  928. align-items: center;
  929. justify-content: center;
  930. .no-data-text{
  931. font-size: 24rpx;
  932. color: #999;
  933. }
  934. }
  935. .home-content {
  936. position: relative;
  937. .swiper {
  938. height: calc(100vw * 1098/1125);
  939. }
  940. .banner {
  941. height: calc(100vw * 1098/1125 + 250px);
  942. background-image: linear-gradient(180deg, #FFBF60 0%, #FFBF60 90%, #F5F5F7 99.41%);
  943. }
  944. .uni-card {
  945. border-radius: 16rpx;
  946. }
  947. .float-button {
  948. position: fixed;
  949. bottom: 150px;
  950. right: 10px;
  951. width: 50px;
  952. height: 50px;
  953. .kf-btn {
  954. background-color: rgba(255, 255, 255, 1);
  955. height: 52px;
  956. width: 52px;
  957. border-radius: 50%;
  958. display: flex;
  959. align-items: center;
  960. }
  961. }
  962. .coupon-list {
  963. width: 100%;
  964. .coupon-title {
  965. display: flex;
  966. line-height: 33rpx;
  967. margin: 42rpx 0 30rpx;
  968. justify-content: space-between;
  969. .coupon-title-left {
  970. display: flex;
  971. align-items: center;
  972. font-weight: 900;
  973. font-size: 30rpx;
  974. color: #333333;
  975. .coupon-flag {
  976. width: 8rpx;
  977. height: 33rpx;
  978. background: #FFBF60;
  979. border-radius: 30rpx 30rpx 30rpx 30rpx;
  980. margin-right: 10rpx;
  981. }
  982. }
  983. .coupon-title-right {
  984. color: #7D8196;
  985. font-size: 24rpx;
  986. font-style: normal;
  987. font-weight: 500;
  988. line-height: 28rpx;
  989. }
  990. }
  991. .split-line {
  992. width: 100%;
  993. height: 1rpx;
  994. background: #EFEFEF;
  995. }
  996. .coupon-content {
  997. .card {
  998. display: flex;
  999. align-items: center;
  1000. width: 100%;
  1001. padding: 10px 0;
  1002. border-radius: 8px 8px 0 0;
  1003. }
  1004. .card-bottom {
  1005. display: flex;
  1006. background-color: #FFF1E0;
  1007. height: 50rpx;
  1008. align-items: center;
  1009. justify-content: space-between;
  1010. padding: 0 20rpx 0 20rpx;
  1011. border-radius: 0 0 8px 8px;
  1012. .card-bottom-text {
  1013. color: #AAAAAA;
  1014. font-size: 24rpx;
  1015. font-weight: 400;
  1016. }
  1017. }
  1018. .card-left {
  1019. width: 88px;
  1020. text-align: center;
  1021. color: #FF530A;
  1022. font-size: 28rpx;
  1023. font-weight: 900;
  1024. }
  1025. .card-center {
  1026. display: flex;
  1027. flex-direction: column;
  1028. .card-center-top {
  1029. width: 40rpx;
  1030. height: 20rpx;
  1031. border-radius: 0 0 20rpx 20rpx;
  1032. background-color: #fff;
  1033. line-height: 20rpx;
  1034. border-bottom: 1px solid #FDA714;
  1035. border-left: 1px solid #FDA714;
  1036. border-right: 1px solid #FDA714;
  1037. margin-top: -22rpx;
  1038. margin-bottom: 20rpx;
  1039. margin-left: -19rpx;
  1040. }
  1041. .card-center-bottom {
  1042. border-right: 1px dashed #AAAAAA;
  1043. width: 1px;
  1044. height: 120rpx;
  1045. }
  1046. }
  1047. .card-right {
  1048. padding: 0 16rpx 0 0;
  1049. display: flex;
  1050. flex: 1;
  1051. justify-content: space-between;
  1052. align-items: center;
  1053. height: 60px;
  1054. font-size: 24rpx;
  1055. .card-content {
  1056. width: 77%;
  1057. }
  1058. .card-icon {
  1059. position: relative;
  1060. right: -10px;
  1061. top: -10px;
  1062. }
  1063. }
  1064. }
  1065. }
  1066. .companion-list {
  1067. width: 100%;
  1068. .companion-title {
  1069. display: flex;
  1070. line-height: 33rpx;
  1071. margin: 42rpx 0 30rpx;
  1072. justify-content: space-between;
  1073. .companion-title-left {
  1074. display: flex;
  1075. align-items: center;
  1076. font-weight: 900;
  1077. font-size: 30rpx;
  1078. color: #333333;
  1079. .companion-flag {
  1080. width: 8rpx;
  1081. height: 33rpx;
  1082. background: #FFBF60;
  1083. border-radius: 30rpx 30rpx 30rpx 30rpx;
  1084. margin-right: 10rpx;
  1085. }
  1086. }
  1087. .companion-title-right {
  1088. color: #7D8196;
  1089. font-size: 24rpx;
  1090. font-style: normal;
  1091. font-weight: 500;
  1092. line-height: 28rpx;
  1093. }
  1094. }
  1095. .split-line {
  1096. width: 100%;
  1097. height: 1rpx;
  1098. background: #EFEFEF;
  1099. }
  1100. .companion-content {
  1101. .companion-item {
  1102. padding: 10px 0px 0px 0;
  1103. .companion-info {
  1104. display: flex;
  1105. align-items: center;
  1106. justify-content: flex-start;
  1107. .companion-img {
  1108. width: 168rpx;
  1109. height: 168rpx;
  1110. border: #FEA714 5rpx solid;
  1111. border-radius: 20rpx;
  1112. }
  1113. .companion-info-1 {
  1114. margin-left: 10px;
  1115. width: 80%;
  1116. .companion-info-2 {
  1117. display: flex;
  1118. flex-wrap: wrap;
  1119. .companion-info-title {
  1120. display: flex;
  1121. flex-wrap: wrap;
  1122. width: 60%;
  1123. }
  1124. .companion-name {
  1125. color: #333;
  1126. font-size: 32rpx;
  1127. margin-right: 10rpx;
  1128. font-weight: 900;
  1129. font-style: normal;
  1130. }
  1131. .companion-info-star {
  1132. color: #FFAA48;
  1133. font-size: 24rpx;
  1134. font-weight: 400;
  1135. line-height: 28rpx;
  1136. display: flex;
  1137. align-items: center;
  1138. }
  1139. }
  1140. .companion-info-3 {
  1141. display: flex;
  1142. align-items: baseline;
  1143. font-size: 28rpx;
  1144. line-height: 32rpx;
  1145. margin-top: 5px;
  1146. color: #FFAA48;
  1147. font-weight: 900;
  1148. }
  1149. .companion-info-4 {
  1150. display: flex;
  1151. align-items: baseline;
  1152. font-size: 24rpx;
  1153. margin-top: 10px;
  1154. color: #7D8196;
  1155. font-weight: 400;
  1156. line-height: 32rpx;
  1157. }
  1158. }
  1159. }
  1160. }
  1161. .companion-item-bottom {
  1162. height: 60rpx;
  1163. background-color: #FFF4E5;
  1164. margin: 20rpx 0 20rpx 0;
  1165. display: flex;
  1166. align-items: center;
  1167. justify-content: center;
  1168. border-radius: 8rpx;
  1169. .companion-item-bottom-text {
  1170. color: #A94F20;
  1171. margin: 14rpx;
  1172. font-size: 24rpx;
  1173. font-weight: 400;
  1174. }
  1175. }
  1176. }
  1177. }
  1178. .history-record {
  1179. width: 100%;
  1180. .history-record-title {
  1181. display: flex;
  1182. line-height: 33rpx;
  1183. margin: 42rpx 0 30rpx;
  1184. justify-content: space-between;
  1185. .history-record-title-left {
  1186. display: flex;
  1187. align-items: center;
  1188. font-weight: 900;
  1189. font-size: 30rpx;
  1190. color: #333333;
  1191. .history-record-flag {
  1192. width: 8rpx;
  1193. height: 33rpx;
  1194. background: #FFBF60;
  1195. border-radius: 30rpx 30rpx 30rpx 30rpx;
  1196. margin-right: 10rpx;
  1197. }
  1198. }
  1199. .history-record-title-right {
  1200. color: #7D8196;
  1201. font-size: 24rpx;
  1202. font-style: normal;
  1203. font-weight: 500;
  1204. line-height: 28rpx;
  1205. }
  1206. }
  1207. .split-line {
  1208. width: 100%;
  1209. height: 1rpx;
  1210. background: #EFEFEF;
  1211. }
  1212. .history-record-content {
  1213. padding: 20rpx 0 20rpx 0;
  1214. .history-record-content-image {
  1215. display: flex;
  1216. flex-wrap: nowrap;
  1217. margin-bottom: 10rpx;
  1218. .history-record-content-image-1 {
  1219. background-image: url("https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/catNum.png");
  1220. background-size: cover;
  1221. width: 208rpx;
  1222. height: 260rpx;
  1223. margin-right: 20rpx;
  1224. .history-record-content-image-1-text {
  1225. .history-record-content-image-1-text-1 {
  1226. width: 100%;
  1227. display: flex;
  1228. justify-content: center;
  1229. height: 156rpx;
  1230. align-items: flex-end;
  1231. color: #FF8D00;
  1232. font-size: 32rpx;
  1233. font-weight: 900;
  1234. }
  1235. .history-record-content-image-1-text-2 {
  1236. width: 100%;
  1237. display: flex;
  1238. justify-content: center;
  1239. height: 90rpx;
  1240. align-items: flex-end;
  1241. color: #AAAAAA;
  1242. font-size: 24rpx;
  1243. font-weight: 400;
  1244. }
  1245. }
  1246. }
  1247. .history-record-content-image-2 {
  1248. background-image: url("https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/dogNum.png");
  1249. background-size: cover;
  1250. width: 208rpx;
  1251. height: 260rpx;
  1252. margin-right: 20rpx;
  1253. .history-record-content-image-2-text {
  1254. .history-record-content-image-2-text-1 {
  1255. width: 100%;
  1256. display: flex;
  1257. justify-content: center;
  1258. height: 156rpx;
  1259. align-items: flex-end;
  1260. color: #FF8D00;
  1261. font-size: 32rpx;
  1262. font-weight: 900;
  1263. }
  1264. .history-record-content-image-2-text-2 {
  1265. width: 100%;
  1266. display: flex;
  1267. justify-content: center;
  1268. height: 90rpx;
  1269. align-items: flex-end;
  1270. color: #AAAAAA;
  1271. font-size: 24rpx;
  1272. font-weight: 400;
  1273. }
  1274. }
  1275. }
  1276. .history-record-content-image-3 {
  1277. background-image: url("https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/petServiceOrder/goodNum.png");
  1278. background-size: cover;
  1279. width: 208rpx;
  1280. height: 260rpx;
  1281. .history-record-content-image-3-text {
  1282. .history-record-content-image-3-text-1 {
  1283. width: 100%;
  1284. display: flex;
  1285. justify-content: center;
  1286. height: 156rpx;
  1287. align-items: flex-end;
  1288. color: #FF8D00;
  1289. font-size: 32rpx;
  1290. font-weight: 900;
  1291. }
  1292. .history-record-content-image-3-text-2 {
  1293. width: 100%;
  1294. display: flex;
  1295. justify-content: center;
  1296. height: 90rpx;
  1297. align-items: flex-end;
  1298. color: #AAAAAA;
  1299. font-size: 24rpx;
  1300. font-weight: 400;
  1301. }
  1302. }
  1303. }
  1304. }
  1305. .history-record-content-text {
  1306. font-size: 24rpx;
  1307. font-weight: 400;
  1308. color: #A94F20;
  1309. }
  1310. }
  1311. }
  1312. }
  1313. page {
  1314. display: flex;
  1315. flex-direction: column;
  1316. box-sizing: border-box;
  1317. background-color: #fff;
  1318. min-height: 100%;
  1319. height: auto;
  1320. }
  1321. .text {
  1322. text-align: center;
  1323. font-size: 26rpx;
  1324. margin-top: 10rpx;
  1325. }
  1326. .popupBottom {
  1327. height: 950rpx;
  1328. overflow: hidden;
  1329. position: fixed;
  1330. bottom: 0;
  1331. left: 0;
  1332. right: 0;
  1333. padding: 10rpx 20rpx;
  1334. border-radius: 20rpx 20rpx 0 0;
  1335. background-color: #fff;
  1336. .bottom-btn {
  1337. width: 100%;
  1338. border-radius: 120rpx;
  1339. background: #FFB13F;
  1340. font-size: 32rpx;
  1341. color: #FFFFFF;
  1342. }
  1343. }
  1344. .line {
  1345. height: 1px;
  1346. width: 100%;
  1347. margin: 16px 0;
  1348. }
  1349. .swiper-item {
  1350. display: flex;
  1351. flex-direction: column;
  1352. justify-content: center;
  1353. align-items: center;
  1354. color: #fff;
  1355. height: 500rpx;
  1356. line-height: 300rpx;
  1357. }
  1358. .card-container {
  1359. margin: 0;
  1360. padding: 0;
  1361. }
  1362. .title-img1 {
  1363. height: 30px;
  1364. width: 104px;
  1365. background-repeat: no-repeat;
  1366. background-position: left;
  1367. background-size: 104px 30px;
  1368. background-image: url('/static/images/pages/cwfw.png');
  1369. }
  1370. .service-content-img {
  1371. padding: 5px;
  1372. margin-top: 5px;
  1373. border-radius: 8px;
  1374. }
  1375. #myVideo {
  1376. width: 100%;
  1377. border-radius: 5px;
  1378. }
  1379. .service-content {
  1380. width: 100%;
  1381. padding: 0 10px;
  1382. }
  1383. .title-img4 {
  1384. height: 30px;
  1385. width: 202px;
  1386. background-repeat: no-repeat;
  1387. background-position: center;
  1388. background-size: 202px 30px;
  1389. background-image: url('/static/images/pages/jppcs.png');
  1390. margin: 10px 0;
  1391. }
  1392. .demo-uni-row {
  1393. margin: 0;
  1394. padding: 0;
  1395. }
  1396. .people-img {
  1397. width: 190px;
  1398. height: 163px;
  1399. border: #FFBF60 1px solid;
  1400. border-radius: 5px;
  1401. }
  1402. .people-year {
  1403. display: flex;
  1404. width: 68px;
  1405. padding: 1px 4px;
  1406. justify-content: space-between;
  1407. align-items: center;
  1408. border-radius: 0px 10px 10px 0px;
  1409. background: linear-gradient(90deg, #FDA714 0%, #FD8B04 99.41%);
  1410. color: #FFF;
  1411. font-family: PingFang SC;
  1412. font-size: 10px;
  1413. font-style: normal;
  1414. line-height: 14px;
  1415. position: absolute;
  1416. top: 15px;
  1417. left: 0;
  1418. }
  1419. .service-people {
  1420. display: flex;
  1421. }
  1422. .service-people-text {
  1423. display: flex;
  1424. align-items: center;
  1425. line-height: 24px;
  1426. }
  1427. .service-people-text::before {
  1428. content: "";
  1429. background-color: black;
  1430. border-radius: 50%;
  1431. display: inline-block;
  1432. height: 5px;
  1433. width: 5px;
  1434. margin-right: 5px;
  1435. }
  1436. .show-text-1 {
  1437. display: block;
  1438. color: var(--Color-, #222229);
  1439. font-family: PingFang SC;
  1440. font-size: 14px;
  1441. font-style: normal;
  1442. font-weight: 600;
  1443. line-height: 24px;
  1444. }
  1445. .show-text-2 {
  1446. display: block;
  1447. color: var(--Color-, #222229);
  1448. font-family: PingFang SC;
  1449. font-size: 12px;
  1450. font-style: normal;
  1451. line-height: 18px;
  1452. }
  1453. .image-wrapper {
  1454. position: relative;
  1455. }
  1456. .text-wrapper {
  1457. position: absolute;
  1458. bottom: 83px;
  1459. left: 10px;
  1460. color: #fff;
  1461. font-size: 10px;
  1462. font-weight: blod;
  1463. font-family: PingFang SC;
  1464. }
  1465. .coupone_wrap {
  1466. margin-top: 200px;
  1467. }
  1468. .details-subscribe {
  1469. background-color: #FFFFFF;
  1470. padding: 10px;
  1471. width: 100%;
  1472. height: 58px;
  1473. position: fixed;
  1474. bottom: 0;
  1475. z-index: 100;
  1476. .details-btn {
  1477. width: 100%;
  1478. border-radius: 6px;
  1479. background: #FFB13F;
  1480. font-size: 16px;
  1481. color: #FFFFFF;
  1482. }
  1483. }
  1484. .text-button {
  1485. height: 100rpx;
  1486. border-radius: 0px 0px 6rpx 0;
  1487. background: rgba(255, 208, 0, 1);
  1488. font-weight: 500;
  1489. font-size: 36rpx;
  1490. display: flex;
  1491. align-items: center;
  1492. justify-content: center;
  1493. }
  1494. .couponItem {
  1495. width: 100%;
  1496. padding: 0 30rpx;
  1497. margin-top: 24rpx;
  1498. -webkit-overflow-scrolling: touch;
  1499. }
  1500. .couponItem:last-child {
  1501. margin-bottom: 24rpx;
  1502. }
  1503. .mask-coupon {
  1504. background: rgba(0, 0, 0, .5);
  1505. width: 100vw;
  1506. height: 100vh;
  1507. position: fixed;
  1508. left: 0;
  1509. top: 0;
  1510. padding-bottom: 120rpx;
  1511. .wx-coupon {
  1512. background: #F2F2F2;
  1513. min-height: 300px;
  1514. position: fixed;
  1515. bottom: 0;
  1516. left: 0;
  1517. width: 100%;
  1518. }
  1519. .title {
  1520. font-size: 24px;
  1521. display: flex;
  1522. align-items: center;
  1523. justify-content: center;
  1524. padding: 20rpx 0 10rpx;
  1525. }
  1526. .content {
  1527. height: 80%;
  1528. overflow-y: auto;
  1529. }
  1530. .text-button {
  1531. height: 100rpx;
  1532. border-radius: 0px 0px 6rpx 0;
  1533. background: rgba(255, 208, 0, 1);
  1534. font-weight: 500;
  1535. font-size: 36rpx;
  1536. display: flex;
  1537. align-items: center;
  1538. justify-content: center;
  1539. }
  1540. }
  1541. @media screen and (min-width: 500px) {
  1542. .uni-swiper-dot-box {
  1543. width: 400px;
  1544. margin: 0 auto;
  1545. margin-top: 8px;
  1546. }
  1547. .image {
  1548. width: 100%;
  1549. }
  1550. }
  1551. /* 优惠券规则弹窗样式 */
  1552. .rule-popup {
  1553. width: 600rpx;
  1554. background-color: #FFFFFF;
  1555. border-radius: 16rpx;
  1556. overflow: hidden;
  1557. }
  1558. .rule-popup-title {
  1559. height: 100rpx;
  1560. line-height: 100rpx;
  1561. text-align: center;
  1562. font-size: 32rpx;
  1563. font-weight: 600;
  1564. color: #FFFFFF;
  1565. background-color: #FFAA48;
  1566. }
  1567. .rule-popup-content {
  1568. padding: 30rpx;
  1569. }
  1570. .rule-item {
  1571. display: flex;
  1572. margin-bottom: 20rpx;
  1573. }
  1574. .rule-label {
  1575. width: 140rpx;
  1576. font-size: 28rpx;
  1577. color: #666666;
  1578. flex-shrink: 0;
  1579. }
  1580. .rule-value {
  1581. flex: 1;
  1582. font-size: 28rpx;
  1583. color: #333333;
  1584. line-height: 40rpx;
  1585. }
  1586. .rule-popup-close {
  1587. height: 90rpx;
  1588. line-height: 90rpx;
  1589. text-align: center;
  1590. font-size: 30rpx;
  1591. color: #FFAA48;
  1592. border-top: 1px solid #EEEEEE;
  1593. }
  1594. </style>