index.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929
  1. <template>
  2. <mobile-frame>
  3. <view class="main">
  4. <view class="one">
  5. <view class="one_1" v-if="barActive=='0'">
  6. <scroll-view scroll-y="true" class="scroll-view">
  7. <view class="one_1_1">
  8. <image class="image" :src="info.logo&&info.logo.length>0?info.logo[0].url:''" mode="">
  9. </image>
  10. </view>
  11. <view class="one_1_2">
  12. <view class="pubu">
  13. <view class="list" v-for="(item,index) in shoplist" :key="index" @tap="toBuy(item)">
  14. <image class="image" :src="item.file&&item.file.length>0?item.file[0].url:''" mode=""></image>
  15. <view class="name textOver">
  16. {{item.name}}
  17. </view>
  18. <view class="other">
  19. <view class="money">
  20. <view class="money_1">
  21. <text>¥</text><text>{{item.sell_money||0}}</text>
  22. </view>
  23. <view class="money_2">
  24. <text>¥</text><text>{{item.flow_money||0}}</text>
  25. </view>
  26. </view>
  27. </view>
  28. <view class="acttags">
  29. <text v-for="i in item.actTagsShow" :key="i">{{i.label}}</text>
  30. </view>
  31. </view>
  32. </view>
  33. </view>
  34. </scroll-view>
  35. </view>
  36. <view class="one_3" v-else-if="barActive=='1'">
  37. <view class="first">
  38. <input type="text" v-model="searchInfo.name" @blur="toInput" placeholder="搜索商品">
  39. </view>
  40. <view class="second">
  41. <scroll-view scroll-y="true" class="scroll-view" @scrolltolower="toPage" @scroll="toScroll">
  42. <view class="list-scroll-view">
  43. <view class="second_1">
  44. <view :class="['list',condActive==index?'activeList':'']" v-for="(item,index) in condList" :key="index" @tap="toCond(index,item)">
  45. <view class="name">
  46. {{item.name}}
  47. </view>
  48. <view class="icon">
  49. <view class="icon_1">
  50. <text :class="['iconfont',item.shangActive]" v-if="condActive==index&&shang=='1'"></text>
  51. <text :class="['iconfont',item.shang]" v-else></text>
  52. </view>
  53. <view class="icon_1">
  54. <text :class="['iconfont', item.xiaActive]" v-if="condActive==index&&xia=='-1'"></text>
  55. <text :class="['iconfont', item.xia]" v-else></text>
  56. </view>
  57. </view>
  58. </view>
  59. </view>
  60. <view class="second_2">
  61. <view class="pubu">
  62. <view class="list" v-for="(item,index) in list" :key="index" @tap="toBuy(item)">
  63. <image class="image" :src="item.file&&item.file.length>0?item.file[0].url:''" mode="">
  64. </image>
  65. <view class="sale" v-if="item.is_sale==true">
  66. <text>已售尽</text>
  67. </view>
  68. <view class="name textOver">
  69. {{item.name}}
  70. </view>
  71. <view class="other">
  72. <view class="money">
  73. <view class="money_1">
  74. <text>¥</text><text>{{item.sell_money||0}}</text>
  75. </view>
  76. <view class="money_2">
  77. <text>¥</text><text>{{item.flow_money||0}}</text>
  78. </view>
  79. </view>
  80. </view>
  81. <view class="acttags">
  82. <text v-for="i in item.actTagsShow" :key="i">{{i.label}}</text>
  83. </view>
  84. </view>
  85. </view>
  86. </view>
  87. <view class="is_bottom" v-if="is_bottom">
  88. <text>{{config.bottom_title}}</text>
  89. </view>
  90. </view>
  91. </scroll-view>
  92. </view>
  93. </view>
  94. <view class="one_4" v-else-if="barActive=='2'">
  95. <view class="first">
  96. <image class="image" :src="info.logo&&info.logo.length>0?info.logo[0].url:''" mode=""></image>
  97. <view class="name">{{info.name}}</view>
  98. </view>
  99. <view class="second">
  100. <view class="second_1">
  101. <view class="grade">
  102. <view>{{info.goods_score||5}}</view>
  103. 商品
  104. </view>
  105. <view class="grade">
  106. <view>{{info.send_score||5}}</view>
  107. 发货
  108. </view>
  109. <view class="grade">
  110. <view>{{info.service_score||5}}</view>
  111. 服务
  112. </view>
  113. </view>
  114. <view class="qrcode_1">
  115. <uqrcode ref="uqrcode" canvas-id="qrcode" :value="uqrcodeInfo" :options="{ margin:10,backgroundColor:'#f1f1f1' }">
  116. </uqrcode>
  117. <view class="txt">
  118. 店铺二维码
  119. </view>
  120. </view>
  121. </view>
  122. <view class="collect">
  123. <text v-if="!collection" @click="toCollect" class="iconfont icon-yduishoucangkongxin"></text>
  124. <text v-else @click="toCollect" class="iconfont icon-yduishoucangshixin"></text>
  125. </view>
  126. </view>
  127. </view>
  128. <view class="two">
  129. <view class="list" v-for="(item,index) in barList" :key="index" @tap="barChange(index,item)">
  130. <view class="icon">
  131. <text :class="['iconfont',barActive==index?item.acticon:item.icon]"></text>
  132. </view>
  133. <view :class="['name',barActive==index?'activename':'']">
  134. {{item.name}}
  135. </view>
  136. </view>
  137. </view>
  138. </view>
  139. </mobile-frame>
  140. </template>
  141. <script>
  142. export default {
  143. data() {
  144. return {
  145. // 系统设置
  146. config: {},
  147. user: {},
  148. id: '',
  149. barActive: '0',
  150. barList: [ //底部菜单
  151. {
  152. icon: 'icon-shangdian',
  153. acticon: "icon-shangdian-copy",
  154. name: '微店首页'
  155. },
  156. {
  157. icon: 'icon-shangpinfenlei',
  158. acticon: "icon-shangpinfenlei-copy",
  159. name: '全部商品'
  160. },
  161. {
  162. icon: 'icon-qiyejianjie',
  163. acticon: "icon-qiyejianjie-copy",
  164. name: '店铺简介'
  165. }
  166. ],
  167. // 店铺信息
  168. info: {},
  169. // 店铺部分商品
  170. shoplist: [],
  171. // 收藏
  172. collection: false,
  173. // 全部商品
  174. searchInfo: {},
  175. list: [],
  176. total: 0,
  177. page: 0,
  178. skip: 0,
  179. limit: 10,
  180. condActive: 0,
  181. shang: '',
  182. xia: '',
  183. condList: [ // 筛选
  184. ],
  185. // 数据是否触底
  186. is_bottom: false,
  187. scrollTop: 0,
  188. // 二维码内容
  189. uqrcodeInfo: ''
  190. };
  191. },
  192. onLoad: async function(e) {
  193. const that = this;
  194. let id = '';
  195. if (e && e.id) id = e.id;
  196. else id = decodeURIComponent(e.q).split('id=')[1];
  197. that.$set(that, `id`, id);
  198. that.searchConfig();
  199. await that.searchOther();
  200. await that.watchLogin();
  201. await that.search();
  202. },
  203. onPullDownRefresh: async function() {
  204. const that = this;
  205. that.clearPages();
  206. await that.search();
  207. uni.stopPullDownRefresh();
  208. },
  209. methods: {
  210. // 查询基本设置
  211. searchConfig() {
  212. const that = this;
  213. uni.getStorage({
  214. key: 'config',
  215. success: function(res) {
  216. if (res.data) that.$set(that, `config`, res.data)
  217. },
  218. fail: function(err) {
  219. console.log(err);
  220. }
  221. })
  222. },
  223. // 查询其他信息
  224. async searchOther() {
  225. const that = this;
  226. let config = that.$config;
  227. if (config) {
  228. // 筛选条件
  229. that.$set(that, `condList`, config.condList)
  230. }
  231. let user = that.user;
  232. let shop = that.info;
  233. if (user && user._id && shop && shop._id) {
  234. // 商铺是否收藏
  235. let arr = await that.$api(`/storeShop/check`, `GET`, {
  236. customer: user._id,
  237. shop: shop._id
  238. });
  239. if (arr.errcode == '0') {
  240. that.$set(that, `collection`, arr.data)
  241. }
  242. }
  243. },
  244. // 监听用户是否登录
  245. watchLogin() {
  246. const that = this;
  247. uni.getStorage({
  248. key: 'token',
  249. success: function(res) {
  250. let user = that.$jwt(res.data);
  251. that.$set(that, `user`, user);
  252. },
  253. fail: function(err) {}
  254. })
  255. },
  256. // 查询信息
  257. async search() {
  258. const that = this;
  259. if (that.id) {
  260. // 查询店铺信息
  261. const res = await that.$api(`/shop/${that.id}`, 'GET');
  262. if (res.errcode == '0') that.$set(that, `info`, res.data);
  263. let arr = await that.$api(`/storeShop/check`, `GET`, {
  264. customer: that.user._id,
  265. shop: that.id
  266. });
  267. if (arr.errcode == '0') {
  268. that.$set(that, `collection`, arr.data)
  269. }
  270. // 查询店铺商品
  271. that.searchShopMarket();
  272. // 查询全部商品
  273. that.searchAll();
  274. }
  275. },
  276. // 查询店铺商品
  277. async searchShopMarket() {
  278. const that = this;
  279. const res = await that.$api(`/viewGoods/indexGoodsList`, 'GET', {
  280. shop: that.id,
  281. skip: 0,
  282. limit: 20
  283. })
  284. if (res.errcode == '0') that.$set(that, `shoplist`, res.data);
  285. },
  286. // 查询全部产品
  287. async searchAll() {
  288. const that = this;
  289. let info = {
  290. shop: that.id,
  291. skip: that.skip,
  292. limit: that.limit
  293. }
  294. const res = await that.$api(`/viewGoods/indexGoodsList`, `GET`, {
  295. ...info,
  296. ...that.searchInfo
  297. })
  298. if (res.errcode == '0') {
  299. let list = [...that.list, ...res.data];
  300. that.$set(that, `list`, list)
  301. that.$set(that, `total`, res.total)
  302. } else {
  303. uni.showToast({
  304. title: res.errmsg,
  305. });
  306. }
  307. },
  308. // 创建二维码
  309. createQrcode() {
  310. const that = this;
  311. if (that.id) {
  312. const url = `${that.$config.serverUrl}/shopinfo?id=${that.id}`;
  313. that.$set(that, `uqrcodeInfo`, url);
  314. that.$refs.uqrcode.make({
  315. enableDelay: true
  316. })
  317. .then(res => {
  318. console.log(res);
  319. })
  320. .finally(() => {
  321. console.log('2');
  322. })
  323. }
  324. },
  325. // 购买
  326. toBuy(item) {
  327. if (item && item._id) {
  328. uni.navigateTo({
  329. url: `/pagesHome/order/detail?id=${item._id}`
  330. })
  331. }
  332. },
  333. // 全部产品-分页
  334. async toPage() {
  335. const that = this;
  336. let list = that.list;
  337. let limit = that.limit;
  338. if (that.total > list.length) {
  339. uni.showLoading({
  340. title: '加载中',
  341. mask: true
  342. })
  343. let page = that.page + 1;
  344. that.$set(that, `page`, page)
  345. let skip = page * limit;
  346. that.$set(that, `skip`, skip)
  347. that.searchAll();
  348. uni.hideLoading();
  349. } else that.$set(that, `is_bottom`, true)
  350. },
  351. toScroll(e) {
  352. const that = this;
  353. let up = that.scrollTop;
  354. that.$set(that, `scrollTop`, e.detail.scrollTop);
  355. let num = Math.sign(up - e.detail.scrollTop);
  356. if (num == 1) that.$set(that, `is_bottom`, false);
  357. },
  358. // 输入框
  359. toInput(e) {
  360. const that = this;
  361. that.$set(that.searchInfo, `name`, e.detail.value);
  362. that.clearPage();
  363. that.searchAll();
  364. },
  365. // 筛选
  366. toCond(index, e) {
  367. const that = this;
  368. let condActive = that.condActive;
  369. that.$set(that, `condActive`, index);
  370. if (condActive != index && that.xia == '') {
  371. that.$set(that, `shang`, '0');
  372. that.$set(that, `xia`, '-1');
  373. } else if (condActive == index && that.xia == '-1') {
  374. that.$set(that, `shang`, '1');
  375. that.$set(that, `xia`, '0');
  376. } else if (condActive == index && that.shang == '1') {
  377. that.$set(that, `shang`, '0');
  378. that.$set(that, `xia`, '-1');
  379. } else if (condActive = index && that.shang == '1') {
  380. that.$set(that, `shang`, '0');
  381. that.$set(that, `xia`, '-1');
  382. }
  383. let value;
  384. if (index != 0) {
  385. value = that.shang == '0' ? that.xia : that.shang;
  386. }
  387. if (index == 1) {
  388. that.$set(that, `searchInfo`, {})
  389. that.$set(that.searchInfo, `sell_num`, value);
  390. } else if (index == 2) {
  391. that.$set(that, `searchInfo`, {})
  392. that.$set(that.searchInfo, `sell_money`, value);
  393. } else if (index == 3) {
  394. that.$set(that, `searchInfo`, {})
  395. that.$set(that.searchInfo, `view_num`, value);
  396. }
  397. that.clearPage();
  398. that.searchAll();
  399. },
  400. // 收藏
  401. async toCollect() {
  402. const that = this;
  403. let user = that.user;
  404. let shop = that.info;
  405. if (user && user._id && shop && shop._id) {
  406. let res = await that.$api(`/storeShop`, `POST`, {
  407. customer: user._id,
  408. shop: shop._id
  409. });
  410. if (res.errcode == '0') {
  411. uni.showToast({
  412. title: res.data.msg,
  413. icon: 'none'
  414. })
  415. that.$set(that, `collection`, res.data.result)
  416. }
  417. } else {
  418. uni.showToast({
  419. title: '缺少必要信息,无法收藏',
  420. icon: 'none'
  421. })
  422. }
  423. },
  424. // 选择底部菜单
  425. barChange(index, item) {
  426. const that = this;
  427. that.$set(that, `barActive`, index);
  428. uni.setNavigationBarTitle({
  429. title: item.name
  430. });
  431. // 店铺简介时,绘制二维码
  432. if (index == '2') that.createQrcode();
  433. },
  434. // 清空列表
  435. clearPage() {
  436. const that = this;
  437. that.$set(that, `list`, [])
  438. that.$set(that, `skip`, 0)
  439. that.$set(that, `limit`, 6)
  440. that.$set(that, `page`, 0)
  441. },
  442. // 清空总列表
  443. clearPages() {
  444. const that = this;
  445. that.$set(that, `info`, {})
  446. that.$set(that, `shoplist`, [])
  447. that.$set(that, `list`, [])
  448. that.$set(that, `skip`, 0)
  449. that.$set(that, `limit`, 6)
  450. that.$set(that, `page`, 0)
  451. }
  452. }
  453. }
  454. </script>
  455. <style lang="scss">
  456. .main {
  457. display: flex;
  458. flex-direction: column;
  459. width: 100vw;
  460. height: 100vh;
  461. .one {
  462. position: relative;
  463. flex-grow: 1;
  464. .one_1 {
  465. height: 92vh;
  466. background-color: var(--fFB1Color);
  467. .one_1_1 {
  468. padding: 2vw;
  469. .image {
  470. width: 100%;
  471. height: 50vw;
  472. }
  473. }
  474. .one_1_2 {
  475. padding: 0 2vw 2vw 2vw;
  476. .pubu {
  477. // column-count: 2;
  478. // column-gap: 2vw;
  479. display: flex;
  480. justify-content: space-between;
  481. flex-wrap: wrap;
  482. .list {
  483. // break-inside: avoid;
  484. position: relative;
  485. width: 43vw;
  486. background: #fff;
  487. padding: 2vw;
  488. border-radius: 5px;
  489. margin: 0 0 2vw 0;
  490. .image {
  491. width: 100%;
  492. height: 50vw;
  493. }
  494. .name {
  495. font-size: var(--font15Size);
  496. margin: 0 0 2vw 0;
  497. }
  498. .other {
  499. display: flex;
  500. flex-direction: row;
  501. justify-content: space-between;
  502. .money {
  503. display: flex;
  504. .money_1 {
  505. color: var(--fFB1Color);
  506. font-size: 12px;
  507. text:last-child {
  508. font-size: 16px;
  509. padding: 0 0 0 1vw;
  510. }
  511. }
  512. .money_2 {
  513. font-size: 12px;
  514. margin: 0 0 0 2vw;
  515. color: var(--f99Color);
  516. text {
  517. text-decoration: line-through;
  518. }
  519. text:last-child {
  520. font-size: 16px;
  521. padding: 0 0 0 1vw;
  522. }
  523. }
  524. }
  525. }
  526. .acttags {
  527. position: absolute;
  528. top: 2vw;
  529. width: 93%;
  530. text {
  531. display: inline-block;
  532. background-color: #ff0000;
  533. color: #fff;
  534. border-radius: 1vw;
  535. padding: 0.5vw;
  536. font-size: 12px;
  537. margin: 0 1vw 0 0;
  538. }
  539. }
  540. }
  541. }
  542. }
  543. }
  544. .one_2 {
  545. height: 91vh;
  546. display: flex;
  547. flex-direction: row;
  548. padding: 2vw;
  549. .first_1 {
  550. position: relative;
  551. width: 25vw;
  552. background-color: #fafafa;
  553. display: flex;
  554. flex-direction: column;
  555. .list {
  556. text-align: center;
  557. padding: 2.5vw 0;
  558. border-bottom: 1px solid var(--f1Color);
  559. text {
  560. font-size: var(--font14Size);
  561. }
  562. }
  563. .listActive {
  564. background-color: var(--fffColor);
  565. }
  566. }
  567. .first_2 {
  568. padding: 2vw;
  569. flex-grow: 1;
  570. position: relative;
  571. display: flex;
  572. flex-direction: column;
  573. .list {
  574. margin: 0 0 2vw 0;
  575. padding: 2vw;
  576. .title {
  577. font-size: var(--font16Size);
  578. margin: 0 0 2vw 0;
  579. }
  580. .market {
  581. display: flex;
  582. flex-direction: row;
  583. flex-wrap: wrap;
  584. .marketList {
  585. text-align: center;
  586. margin: 0 2vw 2vw 0;
  587. width: 22vw;
  588. .image {
  589. width: 100%;
  590. height: 15vw;
  591. }
  592. .name {
  593. font-size: var(--font14Size);
  594. }
  595. }
  596. .marketList:nth-child(3n) {
  597. margin: 0 0 2vw 0;
  598. }
  599. }
  600. }
  601. }
  602. }
  603. .one_3 {
  604. display: flex;
  605. flex-direction: column;
  606. width: 100vw;
  607. height: 92vh;
  608. .first {
  609. border-bottom: 1px solid var(--f85Color);
  610. padding: 2vw;
  611. input {
  612. padding: 2vw;
  613. background-color: var(--f1Color);
  614. font-size: var(--font14Size);
  615. border-radius: 5px;
  616. }
  617. }
  618. .second {
  619. position: relative;
  620. flex-grow: 1;
  621. .second_1 {
  622. width: 96vw;
  623. background-color: var(--fffColor);
  624. padding: 2vw;
  625. display: flex;
  626. flex-direction: row;
  627. justify-content: space-around;
  628. .list {
  629. display: flex;
  630. flex-direction: row;
  631. .icon {
  632. position: relative;
  633. top: -5px;
  634. left: 2px;
  635. .icon_1 {
  636. height: 10px;
  637. .iconfont {
  638. font-size: 12px;
  639. }
  640. }
  641. }
  642. }
  643. .activeList {
  644. .name {
  645. color: #ff0000;
  646. }
  647. }
  648. }
  649. .second_2 {
  650. padding: 2vw;
  651. background-color: var(--f1Color);
  652. .pubu {
  653. // column-count: 2;
  654. // column-gap: 2vw;
  655. display: flex;
  656. justify-content: space-between;
  657. flex-wrap: wrap;
  658. .list {
  659. // break-inside: avoid;
  660. width: 43vw;
  661. position: relative;
  662. margin: 0 0 2vw 0;
  663. padding: 2vw;
  664. border-radius: 10px;
  665. background-color: var(--fffColor);
  666. .image {
  667. width: 100%;
  668. height: 40vw;
  669. }
  670. .sale {
  671. position: absolute;
  672. top: 18vw;
  673. text-align: center;
  674. width: 43vw;
  675. text {
  676. background-color: #0000005f;
  677. border-radius: 90px;
  678. display: inline-block;
  679. width: 15vw;
  680. height: 15vw;
  681. color: var(--fffColor);
  682. text-align: center;
  683. line-height: 15vw;
  684. }
  685. }
  686. .name {
  687. font-size: var(--font16Size);
  688. margin: 0 0 1vw 0;
  689. }
  690. .other {
  691. display: flex;
  692. flex-direction: row;
  693. justify-content: space-between;
  694. .money {
  695. display: flex;
  696. .money_1 {
  697. color: var(--fFB1Color);
  698. font-size: 12px;
  699. text:last-child {
  700. font-size: 16px;
  701. padding: 0 0 0 1vw;
  702. }
  703. }
  704. .money_2 {
  705. font-size: 12px;
  706. margin: 0 0 0 2vw;
  707. color: var(--f99Color);
  708. text {
  709. text-decoration: line-through;
  710. }
  711. text:last-child {
  712. font-size: 16px;
  713. padding: 0 0 0 1vw;
  714. }
  715. }
  716. }
  717. }
  718. .acttags {
  719. position: absolute;
  720. top: 2vw;
  721. width: 93%;
  722. text {
  723. display: inline-block;
  724. background-color: #ff0000;
  725. color: #fff;
  726. border-radius: 1vw;
  727. padding: 0.5vw;
  728. font-size: 12px;
  729. margin: 0 1vw 0 0;
  730. }
  731. }
  732. }
  733. }
  734. }
  735. }
  736. }
  737. .one_4 {
  738. .first {
  739. display: flex;
  740. flex-direction: column;
  741. align-items: center;
  742. background-color: var(--fFB1Color);
  743. border-bottom-right-radius: 10vw;
  744. border-bottom-left-radius: 10vw;
  745. .image {
  746. width: 20vw;
  747. height: 20vw;
  748. border-radius: 20vw;
  749. }
  750. .name {
  751. margin: 2vw 0;
  752. font-size: var(--font16Szie);
  753. font-weight: bold;
  754. color: var(--mainColor);
  755. }
  756. }
  757. .second {
  758. margin: 2vw 0;
  759. position: relative;
  760. .second_1 {
  761. display: flex;
  762. justify-content: space-evenly;
  763. .grade {
  764. display: flex;
  765. flex-direction: column;
  766. align-items: center;
  767. color: var(--f85Color);
  768. font-size: var(--font13Size);
  769. view {
  770. margin: 1vw 0 0 0;
  771. color: var(--ff0Color);
  772. }
  773. }
  774. }
  775. .qrcode_1 {
  776. .uqrcode {
  777. top: 10vw;
  778. left: 20%;
  779. }
  780. .txt {
  781. margin: 2vw 0 0 0;
  782. position: absolute;
  783. text-align: center;
  784. width: 100vw;
  785. bottom: -22vw;
  786. }
  787. }
  788. }
  789. }
  790. .collect {
  791. position: fixed;
  792. top: 0;
  793. right: 2vw;
  794. .iconfont {
  795. font-size: 25px;
  796. }
  797. }
  798. }
  799. .two {
  800. display: flex;
  801. flex-direction: row;
  802. justify-content: space-around;
  803. border-top: 1px solid #f1f1f1;
  804. .list {
  805. padding: 1vw 0;
  806. text-align: center;
  807. .icon {}
  808. .name {
  809. font-size: 12px;
  810. }
  811. .activename {
  812. color: var(--fFB1Color);
  813. }
  814. }
  815. }
  816. }
  817. .scroll-view {
  818. position: absolute;
  819. top: 0;
  820. left: 0;
  821. right: 0;
  822. bottom: 0;
  823. .list-scroll-view {
  824. display: flex;
  825. flex-direction: row;
  826. flex-wrap: wrap;
  827. }
  828. }
  829. .is_bottom {
  830. text-align: center;
  831. width: 100%;
  832. text {
  833. padding: 2vw 0;
  834. display: inline-block;
  835. color: #858585;
  836. font-size: 14px;
  837. }
  838. }
  839. </style>