detail.vue 20 KB

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