detail.vue 21 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  1. <template>
  2. <mobile-frame>
  3. <view class="main">
  4. <view class="one">
  5. <scroll-view scroll-y="true" class="scroll-view">
  6. <view class="list-scroll-view">
  7. <view class="one_1">
  8. <swiper class="swiper" circular :indicator-dots="true" indicator-color="#ffffff" indicator-active-color="#FB1438" :autoplay="true" :interval="3000" :duration="1000">
  9. <swiper-item class="list" v-for="(item,index) in info.goods.file" :key="index">
  10. <image class="image" :src="item.url" mode="aspectFit">
  11. </image>
  12. </swiper-item>
  13. </swiper>
  14. <!-- 是否关注商品 -->
  15. <view class="goodsColect">
  16. <text @tap="toGoodscolect" :class="['iconfont',goodsColect?'icon-yduishoucangshixin-copy':'icon-yduishoucangkongxin']"></text>
  17. </view>
  18. </view>
  19. <view class="one_2">
  20. <text class="money"><text>¥</text>{{info.specs&&info.specs.length>0?info.specs[0].sell_money:0}}</text>
  21. <text class="money"><text>¥</text>{{info.specs&&info.specs.length>0?info.specs[0].flow_money:0}}</text>
  22. </view>
  23. <view class="one_3">
  24. <view class="name">
  25. {{info.goods.name}}
  26. </view>
  27. <view class="brief">
  28. {{info.goods.shot_brief||''}}
  29. </view>
  30. <view class="money">
  31. <text>运费{{info.specs&&info.specs.length>0?info.specs[0].freight:0}}元</text>
  32. <text>{{info.goods.send_time}}内发货</text>
  33. </view>
  34. </view>
  35. <view class="one_4" @tap="toSpec">
  36. <view class="l">
  37. 选择规格
  38. </view>
  39. <view class="r">
  40. <text class="iconfont icon-jiantouyou"></text>
  41. </view>
  42. </view>
  43. <view class="one_5" @tap="toEvaluate">
  44. <view class="l">
  45. <text>{{evaluate_num>0?`商品评价(${evaluate_num})`:`暂无评价`}}</text>
  46. </view>
  47. <view class="r">
  48. <text class="iconfont icon-jiantouyou"></text>
  49. </view>
  50. </view>
  51. <view class="one_6">
  52. <view class="one_6_1">
  53. <view class="shop_1">
  54. <image class="image" :src="info.shop.logo&&info.shop.logo.length>0?info.shop.logo[0].url:''" mode="aspectFit"></image>
  55. </view>
  56. <view class="shop_2">
  57. <view class="name">{{info.shop.name}}</view>
  58. <view class="num"><text>宝贝数:</text>{{info.shop.goods_num||0}}</view>
  59. </view>
  60. </view>
  61. <view class="one_6_2">
  62. <view class="score_1">
  63. <text>商品:</text>
  64. <text>{{info.shop.goods_score||5}}</text>
  65. <text>|</text>
  66. </view>
  67. <view class="score_1">
  68. <text>发货:</text>
  69. <text>{{info.shop.send_score||5}}</text>
  70. <text>|</text>
  71. </view>
  72. <view class="score_1">
  73. <text>服务:</text>
  74. <text>{{info.shop.service_score||5}}</text>
  75. </view>
  76. </view>
  77. <view class="one_6_3">
  78. <button size="mini" @tap="toShop">进入店铺</button>
  79. <button size="mini" @tap="toShopcolect">{{shopColect==true?'已关注':'关注'}}</button>
  80. </view>
  81. </view>
  82. <view class="one_7">
  83. <rich-text :nodes="info.goods.brief"></rich-text>
  84. </view>
  85. </view>
  86. </scroll-view>
  87. </view>
  88. <view class="two">
  89. <uni-goods-nav :options="options" :button-group="buttonGroup" @click="toNavleft" @buttonClick="toNavright" />
  90. </view>
  91. </view>
  92. <!-- 跳转菜单 -->
  93. <view class="bar_1">
  94. <text @tap="toMenubar" class="iconfont icon-gengduo"></text>
  95. </view>
  96. <view class="bar_2" v-if="is_menu">
  97. <view class="list" v-for="(item,index) in barList" :key="index" v-if="item.is_use=='0'" @click="toPath(item)">
  98. <image class="image" :src="item.normal&&item.normal.length>0?item.normal[0].url:''"></image>
  99. <text class="name"> {{item.name}}</text>
  100. </view>
  101. </view>
  102. <!-- 规格 -->
  103. <uni-popup ref="specShow" background-color="#fff" type="bottom" :is-mask-click="false">
  104. <view class="popup">
  105. <view class="close">
  106. <text @click="toClose" class="iconfont icon-shanchu"></text>
  107. </view>
  108. <view class="info_1" v-if="popupShow=='1'">
  109. <view class="info_1">
  110. <scroll-view scroll-y="true" class="scroll-view">
  111. <view class="list-scroll-view">
  112. <view class="one">
  113. <view class="one_1">
  114. <view class="l">
  115. <image class="image" :src="specsInfo.file.length>0?specsInfo.file[0].url:info.goods.file[0].url" mode="aspectFill" @tap="imageView(specsInfo.file)"></image>
  116. </view>
  117. <view class="r">
  118. <view class="money">
  119. <text class="money_1"><text>¥</text>{{specsInfo.sell_money}}</text>
  120. <text class="money_1"><text>¥</text>{{specsInfo.flow_money}}</text>
  121. </view>
  122. <view class="other_1">
  123. <text>已选:</text>
  124. <text>{{specsInfo.name}}</text>
  125. </view>
  126. </view>
  127. </view>
  128. <view class="one_2">
  129. <view class="one_2_1">
  130. 规格
  131. </view>
  132. <view class="one_2_2">
  133. <view :class="['list',`${item.num==0?'zero_list':''}`,`${is_specs==index?'one_list':''}`]" v-for="(item,index) in info.specs" :key="index" @tap="toSpecs(item)">
  134. <text>{{item.name}}</text>
  135. </view>
  136. </view>
  137. </view>
  138. <view class="one_3">
  139. <view class="one_3_1">
  140. <text>数量</text>
  141. </view>
  142. <view class="one_3_1">
  143. <uni-number-box v-model="buy_num" @change="toCount" :min="1" :max="specsInfo.num">
  144. </uni-number-box>
  145. </view>
  146. <view class="one_3_1">
  147. <text>库存{{specsInfo.num||0}}</text>
  148. </view>
  149. </view>
  150. </view>
  151. </view>
  152. </scroll-view>
  153. </view>
  154. <view class="info_2">
  155. <button size="mini" v-if="btn_type==''||btn_type=='0'" @tap="toMarket">加入购物车</button>
  156. <button size="mini" v-if="btn_type==''||btn_type=='1'" @tap="toBuy">立即购买</button>
  157. <button size="mini" v-if="specsInfo.can_group=='0'" @tap="toGroup">参团</button>
  158. </view>
  159. </view>
  160. </view>
  161. </uni-popup>
  162. </mobile-frame>
  163. </template>
  164. <script>
  165. export default {
  166. data() {
  167. return {
  168. // 系统设置
  169. config: {},
  170. // 商品id
  171. id: '',
  172. // 分享人id
  173. inviter: '',
  174. // 当前用户信息
  175. user: {},
  176. // 是否关注商品
  177. goodsColect: false,
  178. // 是否关注店铺
  179. shopColect: false,
  180. // 评价数
  181. evaluate_num: 2,
  182. // 商品详情
  183. info: {},
  184. // 底部菜单
  185. options: [ //
  186. {
  187. icon: 'shop',
  188. text: '店铺',
  189. type: 'shop',
  190. route: 'pagesHome/shop/index',
  191. },
  192. {
  193. icon: 'cart',
  194. text: '购物车',
  195. type: 'market',
  196. route: 'pages/market/index',
  197. },
  198. ],
  199. buttonGroup: [ //
  200. {
  201. text: '加入购物车',
  202. backgroundColor: 'linear-gradient(90deg, #FFCD1E, #FF8A18)',
  203. color: '#fff',
  204. type: '0'
  205. },
  206. {
  207. text: '立即购买',
  208. backgroundColor: 'linear-gradient(90deg, #FE6035, #EF1224)',
  209. color: '#fff',
  210. type: '1'
  211. }
  212. ],
  213. // 系统菜单
  214. barList: [],
  215. is_menu: false,
  216. // 规格
  217. popupShow: '1',
  218. // 规格信息
  219. is_specs: 0,
  220. btn_type: '',
  221. specsInfo: {},
  222. // 购买数量
  223. buy_num: 1,
  224. };
  225. },
  226. onLoad: async function(e) {
  227. const that = this;
  228. that.$set(that, `id`, e.id || '');
  229. that.$set(that, `inviter`, e.inviter || '');
  230. await that.searchConfig();
  231. await that.search();
  232. },
  233. onShow: async function() {
  234. const that = this;
  235. await that.watchLogin();
  236. that.configShare();
  237. },
  238. onUnload: function() {
  239. // 页面卸载,重新部署分享内容
  240. const that = this;
  241. if (that.config) {
  242. // 赋值默认值
  243. that.$config.share = {
  244. title: that.config.title,
  245. path: '/pages/index/index',
  246. imageUrl: that.config.config.share[0].url
  247. }
  248. }
  249. },
  250. methods: {
  251. // 查询系统设置
  252. searchConfig() {
  253. const that = this;
  254. uni.getStorage({
  255. key: 'config',
  256. success: function(res) {
  257. let data = res.data;
  258. that.$set(that, `config`, data);
  259. if (data.bottom_menu && data.bottom_menu.list.length > 0) {
  260. let list = data.bottom_menu.list.sort((a, b) => {
  261. return a.sort - b.sort
  262. });
  263. that.$set(that, `barList`, list)
  264. }
  265. }
  266. })
  267. },
  268. // 查询用户信息
  269. watchLogin() {
  270. const that = this;
  271. uni.getStorage({
  272. key: 'token',
  273. success: async function(res) {
  274. let user = that.$jwt(res.data);
  275. if (user) that.$set(that, `user`, user);
  276. await that.searchOther();
  277. },
  278. fail: function(err) {
  279. console.log('暂无用户信息');
  280. }
  281. })
  282. },
  283. // 查询其他信息
  284. async searchOther() {
  285. const that = this;
  286. let user = that.user;
  287. let res;
  288. // 是否关注商品
  289. res = await that.$api(`/storeGoods/check`, `GET`, {
  290. customer: user._id,
  291. goods: that.id
  292. });
  293. if (res.errcode == '0') that.$set(that, `goodsColect`, res.data);
  294. // 是否关注店铺
  295. res = await that.$api(`/storeShop/check`, `GET`, {
  296. customer: user._id,
  297. shop: that.info?.shop?._id
  298. });
  299. if (res.errcode == '0') that.$set(that, `shopColect`, res.data)
  300. },
  301. // 查询商品信息
  302. async search() {
  303. const that = this;
  304. let id = that.id;
  305. if (id) {
  306. let res;
  307. res = await that.$api(`/viewGoods/goodsDetail`, `POST`, {
  308. id: id
  309. });
  310. if (res.errcode == '0') {
  311. let data = res.data;
  312. if (data.goods.brief) data.goods.brief = data.goods.brief.replace(/\<img/gi,
  313. '<img class="rich-img"');
  314. let specs = data.specs.sort((a, b) => {
  315. return a.sell_money - b.sell_money
  316. })
  317. data.specs = specs;
  318. that.$set(that, `info`, data);
  319. // 查询规格
  320. that.searchSpecs(data.specs);
  321. // 查询评价数
  322. that.searchRate(data);
  323. }
  324. } else {
  325. uni.showToast({
  326. title: '暂无商品信息',
  327. icon: 'none'
  328. })
  329. }
  330. },
  331. // 查询规格
  332. searchSpecs(e) {
  333. const that = this;
  334. if (e.length > 0) {
  335. let data = e.find(i => i.num > 0);
  336. let dataIndex = e.findIndex(i => i.id == data.id);
  337. if (data) {
  338. that.$set(that, `specsInfo`, data);
  339. that.$set(that, `is_specs`, dataIndex);
  340. }
  341. }
  342. },
  343. // 选择规格
  344. toSpecs(e) {
  345. const that = this;
  346. let specs = that.info.specs;
  347. if (e.num > 0) {
  348. let dataIndex = specs.findIndex(i => i.id == e.id);
  349. that.$set(that, `is_specs`, dataIndex);
  350. that.$set(that, `specsInfo`, e)
  351. that.$set(that, `buy_num`, 1);
  352. } else {
  353. uni.showToast({
  354. title: '库存量不足',
  355. icon: 'none'
  356. })
  357. }
  358. },
  359. // 计数器
  360. toCount(e) {
  361. const that = this;
  362. that.$set(that, `buy_num`, e)
  363. },
  364. // 查询评价数
  365. async searchRate(e) {
  366. const that = this;
  367. let res = await that.$api(`/goodsRate`, `GET`, {
  368. goods: e.goods._id
  369. })
  370. if (res.errcode == '0') that.$set(that, `evaluate_num`, res.total);
  371. },
  372. // 关注商品
  373. async toGoodscolect() {
  374. const that = this;
  375. let user = that.user;
  376. if (user && user._id) {
  377. let res = await that.$api(`/storeGoods`, `POST`, {
  378. customer: user._id,
  379. goods: that.id
  380. });
  381. if (res.errcode == '0') {
  382. uni.showToast({
  383. title: res.data.msg,
  384. icon: 'none'
  385. })
  386. that.$set(that, `goodsColect`, res.data.result)
  387. }
  388. } else {
  389. uni.showToast({
  390. title: '暂无账号,无法收藏商品',
  391. icon: 'none'
  392. })
  393. }
  394. },
  395. // 选择规格
  396. toSpec() {
  397. const that = this;
  398. this.$set(that, `popupShow`, '1')
  399. that.$refs.specShow.open();
  400. },
  401. // 加入购物车
  402. async toMarket() {
  403. const that = this;
  404. let user = that.user;
  405. let info = that.info;
  406. let specsInfo = that.specsInfo;
  407. if (user && user._id) {
  408. let obj = {
  409. customer: user._id,
  410. shop: info.shop._id,
  411. goods: info.goods._id,
  412. goodsSpec: specsInfo._id,
  413. num: that.buy_num,
  414. inviter: that.inviter
  415. }
  416. let res = await that.$api(`/cart`, 'POST', obj)
  417. if (res.errcode == '0') {
  418. uni.showToast({
  419. title: `加入购物车成功`,
  420. icon: 'none'
  421. })
  422. that.toClose();
  423. } else {
  424. uni.showToast({
  425. title: res.errmsg,
  426. icon: 'none'
  427. })
  428. }
  429. } else {
  430. uni.navigateTo({
  431. url: `/pages/login/index`
  432. })
  433. }
  434. },
  435. // 立即购买
  436. async toBuy() {
  437. const that = this;
  438. let user = that.user;
  439. let info = that.info;
  440. let specsInfo = that.specsInfo;
  441. if (user && user._id) {
  442. let obj = {
  443. customer: user._id,
  444. shop: info.shop._id,
  445. goods: info.goods._id,
  446. goodsSpec: specsInfo._id,
  447. num: that.buy_num,
  448. inviter: that.inviter
  449. }
  450. let res = await that.$api(`/util/checkCanBuy`, 'POST', obj)
  451. if (res.errcode == '0') {
  452. if (res.data.result == true) {
  453. uni.navigateTo({
  454. url: `/pagesHome/order/order?key=${res.data.key}`
  455. })
  456. } else {
  457. uni.showToast({
  458. title: res.data.msg,
  459. icon: 'none'
  460. })
  461. }
  462. } else {
  463. uni.showToast({
  464. title: res.errmsg,
  465. icon: 'none'
  466. })
  467. }
  468. } else {
  469. uni.navigateTo({
  470. url: `/pages/login/index`
  471. })
  472. }
  473. },
  474. // 参团
  475. toGroup() {
  476. const that = this;
  477. let specs_id = that.specsInfo._id;
  478. let id = that.id;
  479. uni.navigateTo({
  480. url: `/pagesHome/group/index?specs_id=${specs_id}&goods_id=${id}`
  481. })
  482. },
  483. // 关闭弹框
  484. toClose() {
  485. const that = this;
  486. that.$set(that, `btn_type`, '');
  487. that.$refs.specShow.close();
  488. },
  489. // 评价
  490. toEvaluate() {
  491. const that = this;
  492. uni.navigateTo({
  493. url: `/pagesHome/order/appraise?id=${that.info.goods._id}`
  494. })
  495. },
  496. // 进入店铺
  497. toShop() {
  498. const that = this;
  499. let info = that.info;
  500. uni.navigateTo({
  501. url: `/pagesHome/shop/index?id=${info.shop._id}`
  502. })
  503. },
  504. // 关注店铺
  505. async toShopcolect() {
  506. const that = this;
  507. let user = that.user;
  508. if (user && user._id) {
  509. let res = await that.$api(`/storeShop`, `POST`, {
  510. customer: user._id,
  511. shop: that.info.shop._id
  512. });
  513. if (res.errcode == '0') {
  514. uni.showToast({
  515. title: res.data.msg,
  516. icon: 'none'
  517. })
  518. that.$set(that, `shopColect`, res.data.result)
  519. }
  520. } else {
  521. uni.showToast({
  522. title: '暂无账号,无法关注商铺',
  523. icon: 'none'
  524. })
  525. }
  526. },
  527. // 店铺,购物车
  528. toNavleft(e) {
  529. const that = this;
  530. if (e.content.type == 'shop') {
  531. that.toShop();
  532. } else if (e.content.type == 'market') {
  533. let obj = {
  534. route: e.content.route
  535. }
  536. that.toPath(obj)
  537. }
  538. },
  539. // 加入购物车,立即购买
  540. toNavright(e) {
  541. const that = this;
  542. this.$set(that, `popupShow`, '1');
  543. that.$set(that, `btn_type`, e.content.type);
  544. that.$refs.specShow.open();
  545. },
  546. // 右侧菜单
  547. toMenubar() {
  548. const that = this;
  549. that.$set(that, `is_menu`, that.is_menu ? false : true)
  550. },
  551. toPath(e) {
  552. let url = `/${e.route}`;
  553. uni.reLaunch({
  554. url
  555. })
  556. },
  557. // 配置分享内容
  558. configShare() {
  559. const that = this;
  560. let id = that.id;
  561. let inviter = that.user && that.user._id ? that.user._id : '';
  562. let title = that.info && that.info.goods ? that.info.goods.name : '';
  563. let imageUrl = that.info && that.info.goods ? that.info.goods.file[0].url : '';
  564. that.$config.share = {
  565. title: title,
  566. path: `/pagesHome/order/detail?id=${id}&inviter=${inviter}`,
  567. imageUrl: imageUrl
  568. }
  569. },
  570. // 图片预览
  571. imageView(e) {
  572. const that = this;
  573. let goods = that.info.goods;
  574. let file = [];
  575. if (e && e.length > 0) file = e;
  576. else file = goods.file;
  577. file = file.map(i => i.url);
  578. uni.previewImage({
  579. current: 0,
  580. urls: file,
  581. })
  582. }
  583. }
  584. }
  585. </script>
  586. <style lang="scss">
  587. .main {
  588. display: flex;
  589. flex-direction: column;
  590. width: 100vw;
  591. height: 100vh;
  592. .one {
  593. position: relative;
  594. flex-grow: 1;
  595. .one_1 {
  596. border-bottom: 0.5vw solid var(--f9Color);
  597. swiper {
  598. height: 44vh !important;
  599. }
  600. .list {
  601. border-radius: 5px;
  602. .image {
  603. width: 100%;
  604. height: 100%;
  605. border-radius: 5px;
  606. background-color: #fff;
  607. }
  608. }
  609. .goodsColect {
  610. position: fixed;
  611. top: 2vw;
  612. right: 3vw;
  613. background-color: #858585;
  614. border-radius: 90px;
  615. text {
  616. font-size: 30px;
  617. }
  618. }
  619. }
  620. .one_2 {
  621. border-bottom: 0.5vw solid var(--f9Color);
  622. padding: 2vw;
  623. .money {
  624. font-size: 20px;
  625. padding: 0 1vw 0 0;
  626. color: #ff0000;
  627. font-weight: bold;
  628. text {
  629. font-size: 14px;
  630. }
  631. }
  632. .money:last-child {
  633. font-size: 16px;
  634. color: #858585;
  635. text-decoration: line-through;
  636. }
  637. }
  638. .one_3 {
  639. border-bottom: 0.5vw solid var(--f9Color);
  640. padding: 2vw;
  641. .name {
  642. font-size: 17px;
  643. font-weight: bold;
  644. margin: 0 0 2vw 0;
  645. }
  646. .brief {
  647. font-size: 14px;
  648. color: #858585;
  649. margin: 0 0 1vw 0;
  650. }
  651. .money {
  652. font-size: 13px;
  653. color: #858585;
  654. text {
  655. padding: 0 2vw 0 0;
  656. }
  657. }
  658. }
  659. .one_4 {
  660. display: flex;
  661. justify-content: space-between;
  662. padding: 2vw;
  663. border-bottom: 0.5vw solid var(--f9Color);
  664. font-size: 14px;
  665. }
  666. .one_5 {
  667. display: flex;
  668. justify-content: space-between;
  669. padding: 2vw;
  670. border-bottom: 0.5vw solid var(--f9Color);
  671. font-size: 14px;
  672. }
  673. .one_6 {
  674. padding: 2vw;
  675. border-bottom: 0.5vw solid var(--f9Color);
  676. .one_6_1 {
  677. margin: 0 0 1vw 0;
  678. display: flex;
  679. .shop_1 {
  680. width: 15vw;
  681. height: 15vw;
  682. border: 1px solid #f1f1f1;
  683. .image {
  684. width: 100%;
  685. height: 100%;
  686. }
  687. }
  688. .shop_2 {
  689. width: 78vw;
  690. padding: 0 0 0 2vw;
  691. .name {
  692. font-size: 14px;
  693. margin: 0 0 1vw 0;
  694. }
  695. .num {
  696. font-size: 12px;
  697. color: #858585;
  698. text:last-child {
  699. color: #000;
  700. }
  701. }
  702. }
  703. }
  704. .one_6_2 {
  705. margin: 0 0 1vw 0;
  706. display: flex;
  707. justify-content: space-between;
  708. padding: 2vw 0;
  709. .score_1 {
  710. width: 33vw;
  711. text-align: center;
  712. font-size: 14px;
  713. color: #858585;
  714. text:nth-child(2) {
  715. color: #ff0000;
  716. }
  717. text:nth-child(3) {
  718. float: right;
  719. }
  720. }
  721. }
  722. .one_6_3 {
  723. text-align: center;
  724. button {
  725. margin: 0 2vw;
  726. }
  727. }
  728. }
  729. .one_7 {
  730. padding: 2vw;
  731. .rich-img {
  732. width: 100% !important;
  733. display: block;
  734. }
  735. }
  736. }
  737. .two {
  738. width: 100vw;
  739. height: 8vh;
  740. overflow: hidden;
  741. }
  742. }
  743. .scroll-view {
  744. position: absolute;
  745. top: 0;
  746. left: 0;
  747. right: 0;
  748. bottom: 0;
  749. .list-scroll-view {
  750. display: flex;
  751. flex-direction: column;
  752. }
  753. }
  754. .bar_1 {
  755. position: fixed;
  756. right: 2vw;
  757. bottom: 20vw;
  758. text {
  759. background-color: #858585;
  760. border-radius: 90px;
  761. font-size: 30px;
  762. }
  763. }
  764. .bar_2 {
  765. position: fixed;
  766. right: 2vw;
  767. bottom: 28vw;
  768. width: 27vw;
  769. background: #ffffff;
  770. padding: 0 2vw;
  771. box-shadow: 0 0 5px #858585;
  772. .list {
  773. display: flex;
  774. border-bottom: 1px solid #f1f1f1;
  775. padding: 1vw 0;
  776. .image {
  777. width: 8vw;
  778. height: 8vw;
  779. }
  780. .name {
  781. font-size: 14px;
  782. position: relative;
  783. top: 2vw;
  784. left: 2vw;
  785. }
  786. }
  787. .list:last-child {
  788. border-bottom: none;
  789. }
  790. }
  791. .uni-popup {
  792. z-index: 9999 !important;
  793. }
  794. .popup {
  795. display: flex;
  796. flex-direction: column;
  797. width: 100vw;
  798. height: 60vh;
  799. .close {
  800. text-align: right;
  801. padding: 2vw;
  802. }
  803. .info_1 {
  804. position: relative;
  805. display: flex;
  806. flex-direction: column;
  807. height: 54vh;
  808. .info_1 {
  809. position: relative;
  810. flex-grow: 1;
  811. .one {
  812. padding: 2vw;
  813. .one_1 {
  814. display: flex;
  815. margin: 0 0 2vw 0;
  816. padding: 0 0 2vw 0;
  817. border-bottom: 0.5vw solid var(--f9Color);
  818. .l {
  819. width: 25vw;
  820. height: 25vw;
  821. .image {
  822. width: 100%;
  823. height: 100%;
  824. border-radius: 5px;
  825. }
  826. }
  827. .r {
  828. width: 70vw;
  829. padding: 0 0 0 2vw;
  830. .money {
  831. margin: 0 0 2vw 0;
  832. .money_1 {
  833. font-size: 20px;
  834. color: #ff0000;
  835. padding: 0 2vw 0 0;
  836. text {
  837. font-size: 14px;
  838. }
  839. }
  840. .money_1:last-child {
  841. font-size: 16px;
  842. color: #858585;
  843. text-decoration: line-through;
  844. }
  845. }
  846. .other_1 {
  847. font-size: 15px;
  848. color: #858585;
  849. text:last-child {
  850. color: #000000;
  851. }
  852. }
  853. }
  854. }
  855. .one_2 {
  856. margin: 0 0 2vw 0;
  857. border-bottom: 0.5vw solid var(--f9Color);
  858. .one_2_1 {
  859. font-size: 14px;
  860. margin: 0 0 2vw 0;
  861. }
  862. .one_2_2 {
  863. display: flex;
  864. flex-wrap: wrap;
  865. .list {
  866. background-color: #f9f9f9;
  867. margin: 0 2vw 2vw 0;
  868. padding: 0.5vw 1vw;
  869. border-radius: 5px;
  870. text {
  871. font-size: 14px;
  872. color: #000;
  873. }
  874. }
  875. .zero_list {
  876. background-color: #f5f5f5;
  877. text {
  878. color: #858585;
  879. }
  880. }
  881. .one_list {
  882. background-color: red;
  883. text {
  884. color: #fff;
  885. }
  886. }
  887. }
  888. }
  889. .one_3 {
  890. display: flex;
  891. .one_3_1 {
  892. margin: 0 2vw 0 0;
  893. text {
  894. font-size: 14px;
  895. color: #858585;
  896. }
  897. }
  898. }
  899. }
  900. }
  901. .info_2 {
  902. text-align: center;
  903. height: 7vh;
  904. padding: 2vw 0;
  905. border-top: 0.5vw solid var(--f9Color);
  906. button {
  907. line-height: 3;
  908. margin: 0 2vw;
  909. padding: 0.3vw 6vw;
  910. background-color: #ff0000;
  911. color: #fff;
  912. font-weight: bold;
  913. }
  914. }
  915. }
  916. }
  917. </style>