product.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762
  1. <template>
  2. <view class="container">
  3. <!-- 轮播图 -->
  4. <top-swiper :imgList="imgList"></top-swiper>
  5. <!-- 标题 -->
  6. <product-content :goodsObjact="goodsObjact"></product-content>
  7. <view class="c-list">
  8. <view class="c-row b-b" @click="toggleSpec">
  9. <text class="tit">购买数量</text>
  10. <view class="con">
  11. <text class="selected-text">{{ goodsNumber }}</text>
  12. </view>
  13. <text class="iconfont iconenter"></text>
  14. </view>
  15. <!-- <view class="c-row b-b" v-if="goodsObjact.white_integral != 0">
  16. <text>每购买一个送{{ goodsObjact.white_integral }}肥料</text>
  17. </view>
  18. <view class="c-row b-b" v-if="goodsObjact.give_integral != 0">
  19. <text>每购买一个送{{ goodsObjact.give_integral }}商城积分</text>
  20. </view>
  21. <view class="c-row b-b" v-if="goodsObjact.business_integral != 0">
  22. <text>每购买一个送{{ goodsObjact.business_integral }}商家积分</text>
  23. </view> -->
  24. </view>
  25. <!-- 拼货时间及优惠 -->
  26. <!-- <discounts @clickCoupon="Getcoupon" :Info="goodsObjact.store_info" :showCoupon="true"></discounts> -->
  27. <!-- 评价 -->
  28. <estimate @navTo="navTo('/pages/product/reply?id=' + goodsid)" v-if="reply" :reply="reply" :list="list"></estimate>
  29. <!-- 规格信息 -->
  30. <fresh-detail :goodsObjact="goodsObjact"></fresh-detail>
  31. <!-- 图文详情 -->
  32. <content-text :description="description"></content-text>
  33. <!-- 底部高度撑开 -->
  34. <view class="contentBottomHeight"></view>
  35. <!-- 底部操作菜单 -->
  36. <product-bottom @buy="buy" :goodsObjact="goodsObjact" :goodsid="goodsid" @specOPne="specOPne"></product-bottom>
  37. <!-- 规格-模态层弹窗 -->
  38. <view class="popup spec" :class="specClass" @touchmove.stop.prevent="stopPrevent" @click="toggleSpec">
  39. <!-- 遮罩层 -->
  40. <view class="mask"></view>
  41. <view class="layer attr-content" @click.stop="stopPrevent">
  42. <view class="a-t">
  43. <image :src="actionImage"></image>
  44. <view class="right">
  45. <view class="good-name clamp">{{ goodsObjact.store_name }}</view>
  46. <text class="price" v-if="actionIntegral != 0">¥{{ actionPrice }}+{{ actionIntegral }}阳光</text>
  47. <text class="price" v-else>¥{{ actionPrice }}</text>
  48. <!-- <text class="stock">库存:{{ goodsObjact.stock }}件</text> -->
  49. <!-- <view class="selected" v-if="goodsType == 0">
  50. 已选:
  51. <text class="selected-text" v-for="(sItem, sIndex) in specSelected" :key="sIndex">{{ sItem }}</text>
  52. </view> -->
  53. </view>
  54. </view>
  55. <view v-for="(item, index) in specList" :key="index" class="attr-list">
  56. <text>{{ item.attr_name }}</text>
  57. <view class="item-list">
  58. <text
  59. v-for="(childItem, childIndex) in item.attr_value"
  60. :key="childIndex"
  61. class="tit"
  62. :class="{ selected: childItem.check }"
  63. @click="selectSpec(childItem, item, index)"
  64. >
  65. {{ childItem.attr }}
  66. </text>
  67. </view>
  68. </view>
  69. <view class="flex">
  70. <view>购买数量</view>
  71. <view class="item-list">
  72. <uni-number-box class="step" :isMin="true" :value="goodsNumber" :min="1" :max="goodsNumberMax" @eventChange="numberChange"></uni-number-box>
  73. </view>
  74. </view>
  75. <button class="btn" @click.stop="buy">确定</button>
  76. </view>
  77. </view>
  78. </view>
  79. </template>
  80. <script>
  81. import uniNumberBox from '@/components/uni-number-box.vue';
  82. import { goodsDetail, cartAdd } from '@/api/product.js';
  83. import { mapState } from 'vuex';
  84. import store from '@/store/index.js';
  85. import { orderData, userinfo } from '@/api/user.js';
  86. import { saveUrl } from '@/utils/loginUtils.js';
  87. // #ifdef H5
  88. import { weixindata, shareLoad } from '@/utils/wxAuthorized';
  89. // #endif
  90. // 头部轮播图
  91. import topSwiper from './common/topSwiper.vue';
  92. // 标题
  93. import productContent from './common/productContent.vue';
  94. // 到货时间及优惠
  95. import discounts from './common/discounts.vue';
  96. // 规格信息
  97. import freshDetail from './common/freshDetail.vue';
  98. // 图文详情
  99. import contentText from './common/contentText.vue';
  100. // 底部按钮
  101. import productBottom from './common/productBottom.vue';
  102. // 猜你喜欢
  103. import guessLike from './common/guessLike.vue';
  104. // 评价
  105. import estimate from './common/estimate.vue';
  106. export default {
  107. components: {
  108. uniNumberBox,
  109. guessLike,
  110. topSwiper,
  111. productContent,
  112. discounts,
  113. freshDetail,
  114. contentText,
  115. productBottom,
  116. estimate
  117. },
  118. data() {
  119. return {
  120. goodsStore: 0, //选中库存
  121. specList: [],
  122. buys_show: true,
  123. buys_shows: false,
  124. specSelected: [], //选中的分类
  125. specClass: 'none', //显示隐藏弹窗
  126. many: 1, //1是单规格 2是多规格
  127. reply: '', //评论
  128. list: '', //商品详情的数据
  129. type: 1, //默认支付方式add为
  130. goodsType: 0,
  131. goodsNumber: 1, //购买数量
  132. goodsid: '', //商品id
  133. description: '', //商品描述
  134. goodsObjact: {
  135. percent: 1
  136. }, //保存商品数据
  137. //图片循环
  138. imgList: [],
  139. // 对比对象
  140. actionPrice: 0, //默认选中商品价格
  141. actionIntegral: 0, //默认选中商品积分
  142. actionImage: '', //默认选中图片
  143. good_list: '', //猜你喜欢列表
  144. goodsNumberMax: 0, //最大可购买数量
  145. // 倒计时数据保存
  146. seckillObj: {
  147. stopTime: 0, //结束时间
  148. stop: false, //是否结束
  149. stopTimeH: 0, //小时
  150. stopTimeM: 0, //分钟
  151. stopTimeS: 0, //秒钟
  152. stopTimeD: 0, //天
  153. upTime: 0 //更新组件内部组件用
  154. },
  155. // 拼团数据保存
  156. pink: {
  157. id: '', //拼团编号
  158. uid: '', //用户编号
  159. people: '', //拼团人数
  160. price: '', //拼团价格
  161. stop_time: '', //拼团结束时间
  162. nickname: '', //团长昵称
  163. avatar: '', //团长头像
  164. count: '', //拼团剩余人数
  165. h: '', //时
  166. i: '', //分
  167. s: '' //秒
  168. },
  169. userInfo: '',
  170. isVip: '0'
  171. };
  172. },
  173. filters: {
  174. parseIntTo(percent) {
  175. percent = +percent * 100;
  176. if (percent % 1 === 0) {
  177. return percent;
  178. } else {
  179. percent = percent.toFixed(1);
  180. return percent;
  181. }
  182. }
  183. },
  184. async onLoad(options) {
  185. let obj = this;
  186. userinfo({}).then(({ data }) => {
  187. obj.userInfo = data;
  188. console.log(data, '123456');
  189. });
  190. //保存商品id
  191. this.goodsid = options.id;
  192. this.goodsType = options.type;
  193. // 判断有无人邀请
  194. if (options.spread) {
  195. // 存储邀请人
  196. uni.setStorageSync('spread', options.spread);
  197. }
  198. if (options.isVip) {
  199. obj.isVip = options.isVip;
  200. }
  201. console.log(obj.isVip, 'vip');
  202. saveUrl();
  203. this.goodsDetail();
  204. // 注册邀请信息
  205. // #ifdef H5
  206. let bool = uni.getStorageSync('weichatBrowser') || '';
  207. if (bool) {
  208. weixindata();
  209. }
  210. // #endif
  211. },
  212. computed: {
  213. ...mapState(['weichatObj', 'baseURL', 'urlFile'])
  214. },
  215. methods: {
  216. //选择规格
  217. selectSpec(item, arr, ind) {
  218. arr.attr_value.forEach(function(e) {
  219. e.check = false;
  220. });
  221. item.check = true;
  222. let obj = this;
  223. obj.specSelected[ind] = item.attr;
  224. let str = obj.specSelected.join(',');
  225. // 获取当前选中的对象
  226. if (obj.productValue[str]) {
  227. obj.buys_show = true;
  228. obj.buys_shows = false;
  229. obj.actionPrice = obj.productValue[str].price;
  230. obj.actionIntegral = obj.productValue[str].integral; //保存默认选中商品积分
  231. obj.goodsNumberMax = obj.productValue[str].stock;
  232. obj.actionImage = obj.productValue[str].image;
  233. obj.uniqueId = obj.productValue[str].unique;
  234. obj.goodsStore = obj.productValue[str].stock;
  235. } else {
  236. (obj.buys_show = false), (obj.buys_shows = true);
  237. }
  238. if (obj.goodsStore == 0) {
  239. obj.buys_show = false;
  240. obj.buys_shows = true;
  241. }
  242. obj.specSelected[ind] = item.attr;
  243. },
  244. // 打開彈窗
  245. specOPne(type = 1) {
  246. let obj = this;
  247. obj.specClass = 'show';
  248. obj.type = type;
  249. },
  250. //规格弹窗开关
  251. toggleSpec(str) {
  252. if (this.specClass === 'show') {
  253. this.specClass = 'hide';
  254. setTimeout(() => {
  255. this.specClass = 'none';
  256. }, 250);
  257. } else if (this.specClass === 'none') {
  258. this.specClass = 'show';
  259. }
  260. // 保存当前购买类型
  261. this.type = str;
  262. },
  263. // 购买数量变化
  264. numberChange(e) {
  265. this.goodsNumber = e.number;
  266. },
  267. // #ifdef H5
  268. // 加载微信html5页面分享方法
  269. shareDate() {
  270. let obj = this;
  271. // 保存分享人id链接
  272. let url = window.location.href + '&spread=' + this.userInfo.uid;
  273. // 判断是否微信浏览器
  274. let bool = uni.getStorageSync('weichatBrowser') || '';
  275. if (bool) {
  276. // 过滤微信强制添加的链接地址
  277. url = url.replace(/[\?,&]from=singlemessage/g, '');
  278. let data = {
  279. link: url, // 分享链接
  280. imgUrl: obj.goodsObjact.image, // 分享图标
  281. desc: obj.goodsObjact.store_info,
  282. title: obj.goodsObjact.store_name,
  283. success: function(e) {
  284. console.log(e);
  285. }
  286. };
  287. console.log(data, '分享');
  288. shareLoad(data);
  289. }
  290. },
  291. // #endif
  292. // 跳转页面
  293. navTo(url) {
  294. uni.navigateTo({
  295. url: '/pages/product/reply?id=' + this.goodsid
  296. });
  297. },
  298. //加入购物车
  299. Addcar(item) {
  300. let obj = this;
  301. cartAdd({
  302. cartNum: '1', //商品数量
  303. uniqueId: '', //商品标签
  304. new: 0, //商品是否新增加到购物车1为不加入0为加入
  305. mer_id: '',
  306. productId: item.id //商品编号
  307. })
  308. .then(function(e) {
  309. uni.showToast({
  310. title: '成功加入购物车',
  311. type: 'top',
  312. duration: 500,
  313. icon: 'none'
  314. });
  315. obj.goodsDetail();
  316. })
  317. .catch(e => {
  318. console.log(e);
  319. });
  320. },
  321. goodsDetail() {
  322. let obj = this;
  323. // 获取普通商品信息
  324. goodsDetail({}, this.goodsid).then(function({ data }) {
  325. obj.list = data;
  326. obj.good_list = data.good_list; //保存猜你喜欢列表
  327. obj.reply = data.reply; //保存评论列表
  328. let goods = data.storeInfo;
  329. goods.integral = data.integral;
  330. obj.goodsObjact = goods;
  331. console.log(obj.goodsObjact, 'obj.goodsObjact');
  332. if (obj.goodsObjact.description != null) {
  333. obj.description = obj.goodsObjact.description.replace(/\<img/gi, '<img class="rich-img"');
  334. } //小程序商品详情图超出屏幕问题
  335. obj.imgList = goods.slider_image; //保存轮播图
  336. obj.specList = data.productAttr; //保存分类列表
  337. if (Array.isArray(data.productValue) != true) {
  338. obj.many = 2;
  339. obj.specList = data.productAttr; //保存产品属性
  340. obj.productValue = data.productValue; //保存属性值
  341. obj.specSelected = []; //初始化默认选择对象
  342. for (let i = 0; i < obj.specList.length; i++) {
  343. // 设置默认数据
  344. let attrValue = obj.specList[i].attr_value[0];
  345. attrValue.check = true;
  346. obj.specSelected.push(attrValue.attr);
  347. }
  348. let str = obj.specSelected.join(',');
  349. console.log(str, 'str');
  350. // 设置默认值
  351. obj.actionPrice = obj.productValue[str].price;
  352. obj.actionIntegral = obj.productValue[str].integral; //保存默认选中商品积分
  353. obj.goodsNumberMax = obj.productValue[str].stock;
  354. obj.actionImage = obj.productValue[str].image;
  355. obj.uniqueId = obj.productValue[str].unique;
  356. obj.goodsStore = obj.productValue[str].quota;
  357. } else {
  358. obj.many = 1;
  359. obj.productValue = data.productValue; //保存分类查询数据
  360. obj.actionPrice = goods.price; //保存默认选中商品价格
  361. obj.actionIntegral = goods.integral; //保存默认选中商品积分
  362. obj.actionImage = goods.image_base; //保存默认选中商品图片
  363. obj.goodsNumberMax = goods.stock; //保存默认选中最大可购买商品数量
  364. }
  365. obj.shopId = data.mer_id; //保存商店id
  366. // #ifdef H5
  367. obj.shareDate();
  368. // #endif
  369. });
  370. },
  371. // #ifdef H5
  372. // 加载微信html5页面分享方法
  373. shareDate() {
  374. let obj = this;
  375. // 保存分享人id链接
  376. let url = window.location.href + '&spread=' + this.userInfo.uid;
  377. // 判断是否微信浏览器
  378. let bool = uni.getStorageSync('weichatBrowser') || '';
  379. if (bool) {
  380. // 过滤微信强制添加的链接地址
  381. url = url.replace(/[\?,&]from=singlemessage/g, '');
  382. let data = {
  383. link: url, // 分享链接
  384. imgUrl: obj.goodsObjact.image, // 分享图标
  385. desc: obj.goodsObjact.store_info,
  386. title: obj.goodsObjact.store_name,
  387. success: function(e) {
  388. console.log(e);
  389. }
  390. };
  391. shareLoad(data);
  392. }
  393. },
  394. // #endif
  395. // 立即购买
  396. buy() {
  397. let obj = this;
  398. // 创建传值对象
  399. let data = {
  400. cartNum: obj.goodsNumber, //商品数量
  401. new: 1,
  402. productId: obj.goodsid, //商品编号
  403. uniqueId: obj.uniqueId
  404. };
  405. if (obj.type == 2) {
  406. data.new = 0;
  407. }
  408. cartAdd(data)
  409. .then(function(e) {
  410. let da = e.data;
  411. if (obj.type == 1) {
  412. // 跳转到支付页
  413. uni.navigateTo({
  414. url: '/pages/order/createOrder?id=' + da.cartId
  415. });
  416. }
  417. if (obj.type == 2) {
  418. uni.showToast({
  419. title: '成功加入购物车',
  420. type: 'top',
  421. duration: 2000,
  422. icon: 'none'
  423. });
  424. obj.goodsDetail();
  425. }
  426. obj.toggleSpec();
  427. })
  428. .catch(e => {
  429. console.log(e);
  430. });
  431. },
  432. buy1() {
  433. let obj = this;
  434. let data = {
  435. cartNum: obj.goodsNumber, //商品数量
  436. new: 1,
  437. productId: obj.goodsid, //商品编号
  438. uniqueId: obj.uniqueId
  439. };
  440. if (obj.type == 2) {
  441. data.new = 0;
  442. }
  443. cartAdd(data)
  444. .then(function(e) {
  445. let da = e.data;
  446. if (obj.type == 1) {
  447. // 跳转到支付页
  448. uni.navigateTo({
  449. url: '/pages/order/createOrder?id=' + da.cartId
  450. });
  451. }
  452. if (obj.type == 2) {
  453. uni.showToast({
  454. title: '成功加入购物车',
  455. type: 'top',
  456. duration: 2000,
  457. icon: 'none'
  458. });
  459. obj.goodsDetail();
  460. }
  461. obj.toggleSpec();
  462. })
  463. .catch(e => {
  464. console.log(e);
  465. });
  466. },
  467. // 阻止触发上级事件
  468. stopPrevent() {}
  469. }
  470. };
  471. </script>
  472. <style lang="scss">
  473. /* 弹出层 */
  474. .popup {
  475. position: fixed;
  476. left: 0;
  477. top: 0;
  478. right: 0;
  479. bottom: 0;
  480. z-index: 99;
  481. &.show {
  482. display: block;
  483. .mask {
  484. animation: showPopup 0.2s linear both;
  485. }
  486. .layer {
  487. animation: showLayer 0.2s linear both;
  488. }
  489. }
  490. &.hide {
  491. .mask {
  492. animation: hidePopup 0.2s linear both;
  493. }
  494. .layer {
  495. animation: hideLayer 0.2s linear both;
  496. }
  497. }
  498. &.none {
  499. display: none;
  500. }
  501. .mask {
  502. position: fixed;
  503. top: 0;
  504. width: 100%;
  505. height: 100%;
  506. z-index: 1;
  507. background-color: rgba(0, 0, 0, 0.4);
  508. }
  509. .layer {
  510. position: fixed;
  511. z-index: 99;
  512. bottom: 0;
  513. width: 100%;
  514. min-height: 30vh;
  515. border-radius: 10rpx 10rpx 0 0;
  516. background-color: #fff;
  517. .btn {
  518. height: 66rpx;
  519. line-height: 66rpx;
  520. border-radius: 100rpx;
  521. // background: $uni-color-primary;
  522. background: #ff4c4c;
  523. font-size: $font-base + 2rpx;
  524. color: #fff;
  525. margin: 30rpx auto 20rpx;
  526. }
  527. }
  528. @keyframes showPopup {
  529. 0% {
  530. opacity: 0;
  531. }
  532. 100% {
  533. opacity: 1;
  534. }
  535. }
  536. @keyframes hidePopup {
  537. 0% {
  538. opacity: 1;
  539. }
  540. 100% {
  541. opacity: 0;
  542. }
  543. }
  544. @keyframes showLayer {
  545. 0% {
  546. transform: translateY(120%);
  547. }
  548. 100% {
  549. transform: translateY(0%);
  550. }
  551. }
  552. @keyframes hideLayer {
  553. 0% {
  554. transform: translateY(0);
  555. }
  556. 100% {
  557. transform: translateY(120%);
  558. }
  559. }
  560. }
  561. /* 规格选择弹窗 */
  562. .attr-content {
  563. padding: 10rpx 30rpx;
  564. .a-t {
  565. display: flex;
  566. image {
  567. width: 170rpx;
  568. height: 170rpx;
  569. flex-shrink: 0;
  570. border-radius: 8rpx;
  571. }
  572. .right {
  573. display: flex;
  574. flex-direction: column;
  575. padding-left: 24rpx;
  576. font-size: $font-sm + 2rpx;
  577. color: $font-color-base;
  578. line-height: 42rpx;
  579. .good-name {
  580. padding-top: 20rpx;
  581. max-width: 320rpx;
  582. font-size: 30rpx;
  583. font-family: PingFang SC;
  584. font-weight: bold;
  585. color: #1d2023;
  586. line-height: 42rpx;
  587. margin-bottom: 15rpx;
  588. }
  589. .price {
  590. font-size: 40rpx;
  591. font-family: PingFang SC;
  592. font-weight: bold;
  593. color: #ff6f0f;
  594. // font-size: $font-lg;
  595. // color: $uni-color-primary;
  596. // margin-bottom: 10rpx;
  597. }
  598. .selected-text {
  599. margin-right: 10rpx;
  600. }
  601. }
  602. }
  603. .attr-list {
  604. display: flex;
  605. flex-direction: column;
  606. font-size: $font-base + 2rpx;
  607. color: $font-color-base;
  608. padding-top: 30rpx;
  609. padding-left: 10rpx;
  610. }
  611. .item-list {
  612. padding: 20rpx 0 0;
  613. display: flex;
  614. flex-wrap: wrap;
  615. .tit {
  616. display: flex;
  617. align-items: center;
  618. justify-content: center;
  619. background: #eee;
  620. // margin-left: 10rpx;
  621. margin-right: 20rpx;
  622. margin-bottom: 20rpx;
  623. border-radius: 100rpx;
  624. min-width: 60rpx;
  625. height: 60rpx;
  626. padding: 0 20rpx;
  627. font-size: $font-base;
  628. color: $font-color-dark;
  629. }
  630. .selected {
  631. background: #fceff1;
  632. border: 1px solid #ef041f;
  633. color: #ef041f;
  634. }
  635. }
  636. }
  637. //默认商品底部高度
  638. .goodsBottom {
  639. height: 160rpx;
  640. }
  641. page {
  642. background: #f0f0f0;
  643. }
  644. //秒杀、拼团底部高度
  645. .contentBottomHeight {
  646. height: 110rpx;
  647. }
  648. //默认商品底部高度
  649. .goodsBottom {
  650. height: 160rpx;
  651. }
  652. /deep/ .iconenter {
  653. font-size: $font-base + 2rpx;
  654. color: #888;
  655. }
  656. /deep/ .con_image {
  657. width: 130rpx;
  658. height: 130rpx;
  659. display: inline-block;
  660. padding: 15rpx;
  661. image {
  662. width: 100%;
  663. height: 100%;
  664. }
  665. }
  666. /* 商品详情中限制图片大小 */
  667. /deep/ .rich-img {
  668. width: 100% !important;
  669. height: auto;
  670. }
  671. .c-list {
  672. margin-top: 20rpx;
  673. font-size: $font-sm + 2rpx;
  674. color: $font-color-base;
  675. background: #fff;
  676. .c-row {
  677. display: flex;
  678. align-items: center;
  679. padding: 20rpx 30rpx;
  680. position: relative;
  681. }
  682. .tit {
  683. width: 140rpx;
  684. }
  685. .con {
  686. flex: 1;
  687. color: $font-color-dark;
  688. .selected-text {
  689. margin-right: 10rpx;
  690. }
  691. }
  692. .bz-list {
  693. height: 40rpx;
  694. font-size: $font-sm + 2rpx;
  695. color: $font-color-dark;
  696. text {
  697. display: inline-block;
  698. margin-right: 30rpx;
  699. }
  700. }
  701. .con-list {
  702. flex: 1;
  703. display: flex;
  704. flex-direction: column;
  705. color: $font-color-dark;
  706. line-height: 40rpx;
  707. }
  708. .red {
  709. color: $uni-color-primary;
  710. }
  711. }
  712. </style>