identify.vue 25 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138
  1. <template>
  2. <view class="identify">
  3. <!-- <view class="title bigtitle" style="padding-top:{{navTop}}px;">
  4. <view class="titles">商户</view>
  5. </view> -->
  6. <view class="top">
  7. <view class="select">
  8. <view class="option" :class="selectIndex == index?'active':''" v-for="(item,index) in selectList" :key="index"
  9. @click="selectJs(item.value,index)">
  10. {{item.name}}
  11. <!-- <view class="bgc" v-if="selectIndex == index"></view> -->
  12. </view>
  13. </view>
  14. <view class="call">
  15. <!-- <image src="/static/other/call.png" mode=""></image> -->
  16. <view class="phone">
  17. <image src="/static/identify/shop.png" mode=""></image> <text>本地商家客服电话:19935577015</text>
  18. <view class="call_btn" @click="call(19935577015)">
  19. <image src="/static/identify/call.png" mode=""></image>
  20. 拨打
  21. </view>
  22. </view>
  23. </view>
  24. <view class="search_box" style="background: #F7FFFF;">
  25. <!-- <view class="address" v-if="city == ''" @click="show = true">
  26. 选择市<image src="../../static/identify/down.png" mode=""></image>
  27. </view>
  28. <view class="address" v-else @click="show = true">
  29. <text>{{city}}</text>
  30. <image src="../../static/identify/down.png" mode=""></image>
  31. </view> -->
  32. <view class="weui-cells weui-cells_after-title">
  33. <!-- <u-select v-model="show" :list="citylist" @confirm="select"></u-select> -->
  34. <view class="address" @click="show = true" v-if="city == ''">
  35. <!-- 选择市<image src="../../static/identify/down.png" mode=""></image> -->
  36. </view>
  37. <view class="address" @click="show = true" v-else>
  38. {{city}}
  39. <!-- <image src="../../static/identify/down.png" mode=""></image> -->
  40. </view>
  41. </view>
  42. <view class="search">
  43. <u-search placeholder="请输入商家名称" v-model="jsName" @search="searList"></u-search>
  44. <!-- <input type="text" placeholder="请输入商家名称" v-model="jsName" @keydown.enter="getList"/> -->
  45. </view>
  46. </view>
  47. <!-- <view class="level">
  48. <view class="lv" :class="lvIndex == index?'selectLv':''" v-for="(item,index) in searchList" :key="index"
  49. @click="selectLv(item,index)">
  50. <image :src=item.src mode="" v-if="lvIndex == index"></image>
  51. {{item.name}}
  52. </view>
  53. </view> -->
  54. </view>
  55. <!-- <mescroll-body class="list" v-infinite-scroll="getlocaltion" :infinite-scroll-disabled="isInfiniteScrollDisabled"> -->
  56. <mescroll-uni class="list" :fixed="false" ref="mescrollRef" @up="getList" @init="mescrollInit">
  57. <view class="item" v-for="(item,index) in list" :key="index" @click.stop="godetails(item.id)">
  58. <view class="hot">
  59. <image src="../../static/identify/hot.png" mode="" />
  60. </view>
  61. <view class="itemL">
  62. <!-- <view class="hot" v-if="item.nB3 == 1"> -->
  63. <view class="img">
  64. <image :src="$globalData.publicUrl + item.cPortrait" />
  65. </view>
  66. <!-- <view class="new" v-if="item.nB2 == 1">
  67. new
  68. </view> -->
  69. <!-- <view class="status">{{item.nStatus ===1?'服务中' :'可服务'}}</view> -->
  70. </view>
  71. <view class="itemR">
  72. <view class="title">
  73. <view class="name">{{item.cNickName}}</view>
  74. <view class="intro_box">
  75. <view class="intro">
  76. 简介
  77. </view>
  78. <view class="intro_content">
  79. {{item.cJianjie}}
  80. </view>
  81. </view>
  82. <!-- <view class="address">
  83. <image src="../../static/identify/address.png" mode="" />{{item.distance}}km
  84. </view> -->
  85. </view>
  86. <view class="mark">
  87. <!-- 评分,默认5星 -->
  88. <view class="center">
  89. <image src="../../static/identify/star.png" mode="" />{{item.nStar}}分
  90. </view>
  91. <!-- 收藏数量 -->
  92. <view class=" center right">
  93. <image src="../../static/identify/my1.png" mode="" />
  94. <text>{{item.nZan}}</text> 人
  95. </view>
  96. <!-- 服务数量 -->
  97. <view class="right">
  98. <!-- <image src="../../static/identify/serve.png" mode="" /> -->
  99. 已服务: <text>{{item.nNum}}</text> 人
  100. </view>
  101. </view>
  102. <view class="num">
  103. <!-- <view class="free_box">
  104. <view class="free" v-if="free == 1">
  105. 07:30-20:00 &nbsp; {{item.daytimeMileage}}公里免出行费
  106. </view>
  107. <view class="free" v-if="free == 1">
  108. 20:00-07:30 &nbsp; {{item.nigthMileage}}公里免出行费
  109. </view>
  110. </view> -->
  111. <view class="free_box">
  112. <image src="../../static/identify/length.png" mode="" />
  113. {{item.distance}}km
  114. </view>
  115. <view class="btn" @click.stop="bookNow(item)">
  116. <!-- <view class="btn" @click="bookNow" data-id="{{item.id}}" data-fuwu="{{item.nStatus}}" data-distance="{{item.distance}}"> -->
  117. <text>立即预约</text>
  118. </view>
  119. </view>
  120. </view>
  121. </view>
  122. </mescroll-uni>
  123. <view class="dialog" v-if="dialogShow">
  124. <view class="back" @click="closeDialog">
  125. </view>
  126. <!-- <view class="closebox" @click="closeDialog"></view> -->
  127. <view class="dialog_content">
  128. <view class="box">
  129. <view class="lists" v-for="(item,index) in projects" :key="index">
  130. <view class="imgs">
  131. <image :src="$globalData.publicUrl + item.cCover" mode="" />
  132. </view>
  133. <view class="right">
  134. <view class="list_title">
  135. <view class="title">{{item.cTitle}}</view>
  136. <!-- <view class="time">{{item.nMinute}}分钟</view> -->
  137. <view class="price">
  138. <span>¥</span>{{item.dPrice}}
  139. </view>
  140. </view>
  141. <view class="num">
  142. {{item.cLdList}}
  143. <span>超{{item.nSaleNumber}}选择</span>
  144. </view>
  145. <view class="time">
  146. <view class="money">{{item.nMinute}}分钟</view>
  147. <view class="counter">
  148. <!-- <view @click="decrease(item,index)">-</view> -->
  149. <view class="minus" @click="decrease(item,index)">
  150. <image src="../../static/identify/minus.png" mode="" />
  151. </view>
  152. <text>{{item.number}}</text>
  153. <view class="minus" @click="increase(index)">
  154. <image src="../../static/identify/add.png" mode="" />
  155. </view>
  156. <!-- <view @click="increase(index)">+</view> -->
  157. </view>
  158. </view>
  159. </view>
  160. </view>
  161. </view>
  162. <view class="now" @click="nowYuyue"><text>立即预约</text></view>
  163. </view>
  164. </view>
  165. </view>
  166. </template>
  167. <script>
  168. // import infiniteScroll from 'vue-infinite-scroll'
  169. import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  170. import {
  171. engineer,
  172. engineerDetails,
  173. addOrder,
  174. getInfo,
  175. addList,
  176. getCityList
  177. } from '../../api/index'
  178. export default {
  179. mixins: [MescrollMixin], // 使用mixin
  180. // components: {
  181. // MescrollMixin
  182. // },
  183. data() {
  184. return {
  185. show: false,
  186. citylist: [],
  187. downOption: {
  188. use: false
  189. },
  190. lvIndex: 0,
  191. jsGrade: '',
  192. searchList: [{
  193. name: '全部',
  194. value: '',
  195. src: '../../static/identify/spa.png'
  196. },
  197. {
  198. name: '金牌',
  199. value: '1',
  200. src: '../../static/identify/gold.png'
  201. },
  202. {
  203. name: '银牌',
  204. value: '0',
  205. src: '../../static/identify/silver.png'
  206. },
  207. ],
  208. selectIndex: 0,
  209. selectList: [{
  210. name: '全部',
  211. value: '1'
  212. },
  213. {
  214. name: '可服务',
  215. value: '2'
  216. },
  217. {
  218. name: '新商家',
  219. value: '3'
  220. },
  221. // {
  222. // name: '免出行费',
  223. // value: '4'
  224. // },
  225. ],
  226. list: [],
  227. projects: [],
  228. dialogShow: false,
  229. count: 0,
  230. details: '',
  231. sum: 0,
  232. distance: 0,
  233. isAddress: false,
  234. latitude: '',
  235. longitude: '',
  236. projectId: '',
  237. nStatus: '',
  238. nB2: '',
  239. free: '',
  240. jsName: '',
  241. city: '',
  242. current: 1,
  243. total: 1,
  244. }
  245. },
  246. methods: {
  247. getCity() {
  248. getCityList().then(res => {
  249. this.citylist = res.data.data.map(({
  250. deptId,
  251. deptName
  252. }) => ({
  253. value: deptId,
  254. label: deptName
  255. }))
  256. });
  257. },
  258. select(e) {
  259. this.city = e[0].label
  260. this.list = []
  261. this.mescroll.resetUpScroll()
  262. },
  263. searList() {
  264. this.list = []
  265. this.mescroll.resetUpScroll()
  266. },
  267. selectLv(item, index) {
  268. // this.list = []
  269. // this.current = 0
  270. this.lvIndex = index
  271. this.jsGrade = item.value
  272. this.mescroll.resetUpScroll();
  273. },
  274. selectJs(value, index) {
  275. this.selectIndex = index
  276. this.list = []
  277. if (value == 1) {
  278. this.nStatus = ''
  279. this.free = ''
  280. this.nB2 = ''
  281. this.mescroll.resetUpScroll();
  282. } else if (value == 2) {
  283. this.nStatus = 0
  284. this.nB2 = ''
  285. this.free = ''
  286. this.mescroll.resetUpScroll();
  287. } else if (value == 3) {
  288. this.nStatus = ''
  289. this.nB2 = 1
  290. this.free = ''
  291. this.mescroll.resetUpScroll();
  292. } else if (value == 4) {
  293. this.nStatus = ''
  294. this.nB2 = ''
  295. this.free = 1
  296. this.mescroll.resetUpScroll();
  297. }
  298. },
  299. getList(page) {
  300. // let lastCity = this.city.charAt(this.city.length - 1)
  301. // let subcity = ''
  302. // lastCity =='市' ? subcity = this.city.slice(0,-1) : subcity = this.city
  303. let data = {
  304. cNickName: this.jsName,
  305. current: page.num,
  306. size: page.size,
  307. nTong: 1,
  308. nStatus2: 0,
  309. projectId: uni.getStorageSync('projectId'),
  310. longitude: uni.getStorageSync('longitude'),
  311. latitude: uni.getStorageSync('latitude'),
  312. nStatus: this.nStatus,
  313. nB2: this.nB2,
  314. free: this.free,
  315. jsGrade: this.jsGrade,
  316. city: this.city
  317. }
  318. engineer(data).then(res => {
  319. // let page_num = res.data.data.total / 10
  320. // page_num <= 1 ? this.total = 1 : this.total = page_num
  321. // this.mescroll.endBySize(curPageLen, res.data.data.total);
  322. this.mescroll.endSuccess(res.data.data.records.length,res.data.data.total);
  323. this.list = this.list.concat(res.data.data.records)
  324. // if(res.data.data.records.length == 0){
  325. // this.mescroll.endErr()
  326. // }
  327. // if (this.list == []) {
  328. // this.list = res.data.data.records
  329. // } else {
  330. // // this.list.push(...res.data.data.records)
  331. // }
  332. })
  333. .catch(() => {
  334. this.mescroll.endErr()
  335. })
  336. },
  337. //选择商户
  338. bookNow(item) {
  339. this.distance = item.distance
  340. if (!uni.getStorageSync('access-token')) {
  341. uni.showModal({
  342. title: '请先登录!',
  343. success: (res) => {
  344. if (res.confirm) {
  345. uni.switchTab({
  346. url: '/pages/my/my'
  347. })
  348. } else if (res.cancel) {
  349. return
  350. }
  351. }
  352. })
  353. return
  354. } else if (item.nStatus === 1) {
  355. uni.showToast({
  356. title: '该商户不可预约!',
  357. icon: 'none'
  358. })
  359. return
  360. }
  361. this.projects = []
  362. var id = {
  363. id: item.id
  364. }
  365. engineerDetails(id).then(res => {
  366. res.data.data.projects.forEach(element => {
  367. element.number = 0
  368. });
  369. this.details = res.data.data,
  370. this.projects = res.data.data.projects,
  371. console.log(this.projects)
  372. this.dialogShow = true
  373. })
  374. },
  375. godetails(id) {
  376. if (!uni.getStorageSync('access-token')) {
  377. uni.showModal({
  378. title: '请先登录!',
  379. success: (res) => {
  380. if (res.confirm) {
  381. this.list = []
  382. uni.switchTab({
  383. url: '/pages/my/my'
  384. })
  385. } else if (res.cancel) {
  386. return
  387. }
  388. }
  389. })
  390. return
  391. } else {
  392. uni.navigateTo({
  393. url: '/pages/identify/details?id=' + id
  394. })
  395. }
  396. },
  397. //弹窗关闭
  398. closeDialog() {
  399. this.dialogShow = false
  400. },
  401. // 选择项目加一
  402. decrease(item, index) {
  403. if (item.number == 0) {
  404. return
  405. }
  406. let list = this.projects
  407. this.projects[index].number--
  408. // this.projects = list
  409. },
  410. //选择项目减一
  411. increase(index) {
  412. this.projects[index].number++
  413. // let list = this.projects
  414. // console.log(list[index])
  415. // // list[index].number++;
  416. // this.projects=list
  417. },
  418. // 预约
  419. nowYuyue() {
  420. const allCountsZero = this.projects.every(item => item.number === 0);
  421. if (!uni.getStorageSync('access-token')) {
  422. uni.showModal({
  423. title: '请先登录!',
  424. })
  425. return
  426. } else if (allCountsZero) {
  427. uni.showToast({
  428. title: '请先选择项目!',
  429. duration: 1000,
  430. icon: 'none',
  431. })
  432. return
  433. } else if (!this.isAddress) {
  434. uni.showModal({
  435. title: '提示',
  436. content: '你还没有添加地址哦!是否去添加?',
  437. confirmText: '确定', // 确定按钮的文字
  438. cancelText: '取消', // 取消按钮的文字
  439. success(res) {
  440. if (res.confirm) {
  441. setTimeout(() => {
  442. uni.navigateTo({
  443. url: '../my/add_address'
  444. })
  445. }, 100)
  446. // 用户点击确定按钮后的操作
  447. } else if (res.cancel) {}
  448. }
  449. })
  450. return
  451. } else {
  452. // console.log(this.data.projects,"project")
  453. var list = []
  454. this.projects.forEach(element => {
  455. if (element.number > 0) {
  456. element.sum = element.number * element.dPrice
  457. list.push(element)
  458. }
  459. });
  460. var total = 0
  461. for (let i = 0; i < list.length; i++) {
  462. total += list[i].sum;
  463. }
  464. var data = {
  465. cJsId: this.details.id,
  466. cGoods: list,
  467. cOpenId: uni.getStorageSync('wx_copenid'),
  468. dTotalMoney: total,
  469. distance: this.distance
  470. }
  471. addOrder(data).then(res => {
  472. if (res.data.code == 200) {
  473. uni.navigateTo({
  474. url: './pay_order?orderNo=' + res.data.data.orderNo
  475. // url:''
  476. })
  477. this.dialogShow = true
  478. } else {
  479. uni.showModal({
  480. title: res.data.msg,
  481. })
  482. }
  483. })
  484. }
  485. },
  486. getAddress() {
  487. var that = this
  488. var data = {
  489. openId: uni.getStorageSync('wx_copenid'),
  490. }
  491. addList(data).then(res => {
  492. if (res.data.data[0]) {
  493. this.isAddress = true
  494. } else {
  495. this.isAddress = false
  496. }
  497. }).catch(err => {})
  498. },
  499. goCity() {
  500. this.list = []
  501. uni.navigateTo({
  502. url: '/pages/identify/city'
  503. })
  504. },
  505. getlocaltion() {
  506. uni.getLocation({
  507. type: 'wgs84', // 默认为 wgs84 返回 gps 坐标,可以设置为 gcj02 返回可用于 `uni.openLocation` 的坐标
  508. success: function(res) {
  509. this.latitude = res.latitude
  510. this.longitude = res.longitude
  511. // this.current = 0
  512. // this.city = res.address.city
  513. },
  514. });
  515. },
  516. //打电话
  517. call(phone){
  518. uni.makePhoneCall({
  519. phoneNumber: phone
  520. });
  521. }
  522. },
  523. onShow() {
  524. // this.getlocaltion()
  525. this.city = uni.getStorageSync('selectCity')
  526. this.getCity()
  527. this.getAddress()
  528. this.mescroll.resetUpScroll()
  529. // this.projectId = uni.getStorageSync('projectId');
  530. this.dialogShow = false
  531. uni.removeStorageSync('couponData');
  532. },
  533. mounted() {
  534. this.mescroll.optDown.use = false
  535. },
  536. onHide() {
  537. // this.dialogShow = false
  538. // this.current = 0
  539. this.list = []
  540. this.projectId = ''
  541. uni.removeStorage({
  542. key: 'projectId'
  543. });
  544. }
  545. }
  546. </script>
  547. <style lang="scss" scoped>
  548. .identify {
  549. width: 100vw;
  550. height: 100%;
  551. // overflow-y: auto;
  552. // background: radial-gradient(circle, #b1fffc, #fcfdff);
  553. background: #F7FFFF;
  554. display: flex;
  555. flex-direction: column;
  556. position: fixed;
  557. .top {
  558. position: sticky;
  559. top: 0;
  560. width: 100%;
  561. background: linear-gradient( 180deg, #C1FFF8 0%, #B8FFF3 34%, #F5FFFF 100%);
  562. // background: linear-gradient(to bottom right, #fcfdff, #d1fefd);
  563. // background: radial-gradient(circle, #b1fffc, #fcfdff);
  564. // background-color: #ffffff;
  565. z-index: 999;
  566. padding-bottom: 20rpx;
  567. .call{
  568. position: relative;
  569. height: 100rpx;
  570. background: #E2FFFD;
  571. .phone{
  572. width: 100%;
  573. height: 100%;
  574. display: flex;
  575. align-items: center;
  576. justify-content: space-around;
  577. font-size: 34rpx;
  578. color: #FFFFFF;
  579. // position: absolute;
  580. // top: 50%;
  581. // transform: translateY(-50%);
  582. // left: 24rpx;
  583. z-index: 99;
  584. font-size: 28rpx;
  585. color: #08C0B7;
  586. image{
  587. width: 48rpx;
  588. height: 48rpx;
  589. }
  590. text{
  591. font-size: 32rpx
  592. }
  593. .call_btn{
  594. display: flex;
  595. align-items: center;
  596. justify-content: center;
  597. width: 152rpx;
  598. height: 56rpx;
  599. background: #08C0B7;
  600. border-radius: 106rpx;
  601. font-size: 28rpx;
  602. color: #ffffff;
  603. box-sizing: border-box;
  604. image{
  605. width: 36rpx;
  606. height: 36rpx;
  607. margin-right: 10rpx;
  608. }
  609. }
  610. }
  611. }
  612. }
  613. .select {
  614. width: 100%;
  615. display: flex;
  616. height: 90rpx;
  617. padding:24rpx 32rpx;
  618. box-sizing: border-box;
  619. // margin-bottom: 20rpx;
  620. .option {
  621. margin-right: 20px;
  622. height: 100%;
  623. position: relative;
  624. z-index: 9;
  625. font-size: 30rpx;
  626. line-height: 35px;
  627. .bgc {
  628. margin-right: 20px;
  629. position: absolute;
  630. bottom: 0;
  631. width: 100%;
  632. height: 30%;
  633. background-color: #89dcdc;
  634. z-index: 0;
  635. opacity: 0.8;
  636. }
  637. }
  638. .active {
  639. color: #03C8BE;
  640. font-weight: 500;
  641. padding-bottom: 15rpx;
  642. border-bottom: 1px solid #03C8BE;
  643. }
  644. }
  645. .search_box {
  646. display: flex;
  647. justify-content: space-between;
  648. align-items: center;
  649. padding: 0 20rpx;
  650. box-sizing: border-box;
  651. .address {
  652. image {
  653. width: 20rpx;
  654. height: 20rpx;
  655. margin-left: 10rpx;
  656. }
  657. }
  658. .search {
  659. width: 70%;
  660. }
  661. }
  662. .level {
  663. display: flex;
  664. margin-top: 20rpx;
  665. // margin-bottom: 20rpx;
  666. padding-left: 20rpx;
  667. box-sizing: border-box;
  668. .lv {
  669. // width: 100rpx;
  670. height: 50rpx;
  671. background-color: #fff;
  672. border-radius: 10rpx;
  673. padding: 0 10px;
  674. margin-right: 20rpx;
  675. display: flex;
  676. align-items: center;
  677. justify-content: center;
  678. padding-top: 0;
  679. padding-bottom: 0;
  680. image {
  681. width: 30rpx;
  682. height: 30rpx;
  683. margin-right: 10rpx;
  684. }
  685. }
  686. .selectLv {
  687. background-color: #89dcdc;
  688. color: #ffffff;
  689. }
  690. }
  691. .bigtitle {
  692. font-size: 28rpx;
  693. text-align: center;
  694. line-height: 60rpx;
  695. background-color: #2cb8d4;
  696. color: #fff;
  697. }
  698. .list {
  699. flex: 1;
  700. overflow-y: auto;
  701. // height: 100%;
  702. padding: 0rpx 20rpx;
  703. // box-sizing: border-box;
  704. .item {
  705. width: 100%;
  706. // height: 208rpx;
  707. background: #FFFFFF;
  708. box-shadow: 0px 4rpx 12rpx 0px rgba(88, 209, 187, 0.1);
  709. border-radius: 24rpx 24rpx 24rpx 24rpx;
  710. display: flex;
  711. align-items: center;
  712. justify-content: center;
  713. // border: 1px solid rgb(212, 211, 211);
  714. margin-bottom: 20rpx;
  715. padding: 24rpx 32rpx;
  716. box-sizing: border-box;
  717. position: relative;
  718. .hot {
  719. position: absolute;
  720. top: 0;
  721. left: 0;
  722. width: 80rpx;
  723. height: 40rpx;
  724. z-index: 9;
  725. image {
  726. width: 100%;
  727. height: 100%;
  728. }
  729. }
  730. .itemL {
  731. position: relative;
  732. width: 160rpx;
  733. height: 100%;
  734. margin-right: 30rpx;
  735. display: flex;
  736. // flex-direction: column;
  737. align-items: center;
  738. justify-content: center;
  739. .img {
  740. width: 160rpx;
  741. height: 160rpx;
  742. // border-radius: 50%;
  743. // overflow: hidden;
  744. image {
  745. width: 100%;
  746. height: 100%;
  747. }
  748. }
  749. .status {
  750. font-size: 24rpx;
  751. position: absolute;
  752. bottom: 0px;
  753. background-color: #59b7b6;
  754. color: #fff;
  755. padding: 3px 10px;
  756. border-radius: 20px;
  757. // margin: 10px 0px;
  758. }
  759. .new {
  760. position: absolute;
  761. top: -20rpx;
  762. left: -16rpx;
  763. padding: 0rpx 5rpx;
  764. background-color: #f9792d;
  765. opacity: .8;
  766. border-radius: 10rpx;
  767. color: #f3f3f3;
  768. }
  769. }
  770. .itemR {
  771. flex: 1;
  772. height: 100%;
  773. .title {
  774. width: 100%;
  775. display: flex;
  776. justify-content: space-between;
  777. align-items: center;
  778. margin-bottom: 24rpx;
  779. .name {
  780. // width: 70rpx;
  781. font-size: 32rpx;
  782. font-weight: 500;
  783. overflow: hidden;
  784. white-space: nowrap;
  785. text-overflow: ellipsis;
  786. margin-right: 24rpx;
  787. }
  788. .intro_box {
  789. flex: 1;
  790. display: flex;
  791. align-items: center;
  792. .intro {
  793. width: 64rpx;
  794. height: 32rpx;
  795. background: #DCFFFD;
  796. border-radius: 4rpx 4rpx 4rpx 4rpx;
  797. font-size: 24rpx;
  798. color: #20CAC2;
  799. text-align: center;
  800. line-height: 32rpx;
  801. margin-right: 20rpx;
  802. }
  803. .intro_content {
  804. width: 280rpx;
  805. white-space: nowrap;
  806. overflow: hidden;
  807. text-overflow: ellipsis;
  808. font-size: 24rpx;
  809. color: #666666;
  810. }
  811. }
  812. .address {
  813. // width: 40%;
  814. font-size: 26rpx;
  815. color: #585858;
  816. image {
  817. width: 30rpx;
  818. height: 30rpx;
  819. vertical-align: text-bottom;
  820. }
  821. }
  822. .status {
  823. color: #fff;
  824. background-color: #0ec891;
  825. font-size: 18rpx;
  826. padding: 5rpx 15rpx;
  827. border-radius: 30px;
  828. height: 30rpx;
  829. line-height: 30rpx;
  830. }
  831. }
  832. .mark {
  833. display: flex;
  834. color: #666666;
  835. .right {
  836. font-size: 24rpx;
  837. color: #666666;
  838. text {
  839. color: #666666;
  840. margin-right: 5px;
  841. }
  842. }
  843. .center {
  844. display: flex;
  845. align-items: center;
  846. margin-right: 20rpx;
  847. font-size: 24rpx;
  848. color: #666666;
  849. image {
  850. width: 30rpx;
  851. height: 30rpx;
  852. margin-right: 4rpx;
  853. }
  854. }
  855. }
  856. .num {
  857. display: flex;
  858. align-items: center;
  859. justify-content: space-between;
  860. // padding-left: 30rpx;
  861. color: #9e9e9e;
  862. margin-top: 24rpx;
  863. .free_box {
  864. font-size: 24rpx;
  865. color: #999999;
  866. display: flex;
  867. align-items: center;
  868. image {
  869. width: 32rpx;
  870. height: 32rpx;
  871. }
  872. }
  873. .btn {
  874. font-size: 30rpx;line-height: 24rpx;
  875. padding: 16rpx 24rpx;
  876. background: linear-gradient( 135deg, #FF8B66 0%, #EE5B2D 100%);
  877. border-radius: 98rpx 98rpx 98rpx 98rpx;
  878. }
  879. }
  880. .items {
  881. display: flex;
  882. justify-content: space-between;
  883. padding: 10rpx 0;
  884. image {
  885. width: 30rpx;
  886. height: 30rpx;
  887. margin-right: 10rpx;
  888. vertical-align: text-top;
  889. }
  890. view {
  891. display: flex;
  892. align-items: center;
  893. }
  894. }
  895. .btn {
  896. font-size: 26rpx;
  897. background-color: #2cb8d4;
  898. border-radius: 30px;
  899. color: #fff;
  900. text-align: center;
  901. padding: 10rpx 0;
  902. }
  903. }
  904. }
  905. }
  906. .dialog {
  907. position: fixed;
  908. top: 0;
  909. left: 0;
  910. width: 100%;
  911. height: 100%;
  912. background: rgba(0, 0, 0, .5);
  913. z-index: 1000;
  914. transition: transform 0.3s ease-out;
  915. display: flex;
  916. flex-direction: column;
  917. .back {
  918. flex: 1;
  919. }
  920. .closebox {
  921. height: calc(50vh - 60rpx);
  922. width: 100%;
  923. }
  924. .dialog_content {
  925. background: #F3F3F3;
  926. position: absolute;
  927. bottom: 0;
  928. width: calc(100% - 60rpx);
  929. height: 50vh;
  930. border-top-left-radius: 20rpx;
  931. border-top-right-radius: 20rpx;
  932. padding: 30rpx;
  933. background-color: #f3f3f3;
  934. padding-bottom: 100rpx;
  935. display: flex;
  936. flex-direction: column;
  937. .box {
  938. height: 90%;
  939. overflow-y: auto;
  940. .lists {
  941. // height: 90%;
  942. background-color: #fff;
  943. margin-bottom: 20rpx;
  944. display: flex;
  945. justify-content: space-between;
  946. padding: 24rpx 32rpx;
  947. border-radius: 24rpx;
  948. // overflow-y: auto;
  949. .imgs {
  950. width: 160rpx;
  951. height: 160rpx;
  952. border-radius: 16rpx;
  953. overflow: hidden;
  954. image {
  955. width: 100%;
  956. height: 100%;
  957. }
  958. }
  959. .right {
  960. flex: 1;
  961. padding-left: 30rpx;
  962. display: flex;
  963. flex-direction: column;
  964. justify-content: space-between;
  965. .list_title {
  966. display: flex;
  967. justify-content: space-between;
  968. align-items: start;
  969. .title {
  970. width: 280rpx;
  971. font-size: 34rpx;
  972. // font-weight: bold;
  973. overflow: hidden;
  974. white-space: nowrap;
  975. text-overflow: ellipsis;
  976. }
  977. .price{
  978. font-size: 48rpx;
  979. color: #F53E54;
  980. display: flex;
  981. align-items: center;
  982. padding: 0;
  983. span{
  984. font-size: 24rpx
  985. }
  986. }
  987. }
  988. .num{
  989. display: flex;
  990. align-items: center;
  991. justify-content: space-between;
  992. font-size: 24rpx;
  993. color: #888888;
  994. }
  995. .time {
  996. // padding-top: 50rpx;
  997. display: flex;
  998. align-items: center;
  999. justify-content: space-between;
  1000. .money {
  1001. font-size: 26rpx;
  1002. color: #666666;
  1003. font-weight: bold;
  1004. }
  1005. .counter {
  1006. display: flex;
  1007. align-items: center;
  1008. .minus{
  1009. image{
  1010. width: 36rpx;
  1011. height: 36rpx;
  1012. }
  1013. }
  1014. text {
  1015. line-height: 24rpx;
  1016. font-size: 28rpx;
  1017. margin: 0px 24rpx;
  1018. }
  1019. }
  1020. }
  1021. }
  1022. }
  1023. }
  1024. .now {
  1025. height: 76rpx;
  1026. left: 0;
  1027. width: 100%;
  1028. text-align: center;
  1029. height: 100rpx;
  1030. padding-top: 10rpx;
  1031. text {
  1032. display: inline-block;
  1033. height: 80rpx;
  1034. line-height: 80rpx;
  1035. width: 90%;
  1036. color: #fff;
  1037. background: linear-gradient( 90deg, #1AD7CE 0%, #21C9C1 100%);
  1038. border-radius: 106rpx ;
  1039. }
  1040. }
  1041. }
  1042. }
  1043. }
  1044. ::v-deep .u-input{
  1045. background-color: #fff;
  1046. }
  1047. ::v-deep .u-content{
  1048. background-color: #fff;
  1049. }
  1050. </style>