catList.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. <template>
  2. <view class="root">
  3. <view class="content dfsb">
  4. <view class="secTop">
  5. <scroll-view :scroll-top="0" scroll-y="true" class="scroll-Y">
  6. <view @tap="choose(item.id)" :class="['topLi', leftSel == item.id ? 'topsel' : '']"
  7. v-for="(item, index) in dataList" :key="index">
  8. {{ item.name }}
  9. </view>
  10. </scroll-view>
  11. </view>
  12. <view class="topInfo">
  13. <view class="topCInfo">
  14. <scroll-view :scroll-top="0" scroll-y="true" class="scroll-Y" >
  15. <view class="box">
  16. <view v-if="newsInfo.banner" class="swipe">
  17. <u-swiper :autoplay="false" :list="newsInfo.banner" keyName="img" height="84"
  18. border-radius="20" @click="bannerClick"></u-swiper>
  19. </view>
  20. <view class="goodLi dfsb dfsb" v-for="(item, index) in newsInfo.list" :key="index">
  21. <view @click="navTo(item)" class="boxli dffd">
  22. <view class="textmain">
  23. {{item.name||''}}
  24. </view>
  25. <view class="monli dfsb">
  26. <text class="textgrey fontmid">SHIPIN</text>
  27. <text class="red">¥{{item.price||''}}</text>
  28. </view>
  29. <view class="monli dfsb">
  30. <text class="promain">共{{item.number||''}}节,{{item.sales||''}}人购买</text>
  31. <view class="mempri promain dffs">
  32. 会员价:
  33. <text class="red">¥{{item.vip_price||''}}</text>
  34. </view>
  35. </view>
  36. </view>
  37. <view @click="creadOrd(item)" class="libuy" :class="item.my_is_pay==1?'libuyOK':''">
  38. {{item.my_is_pay==1?'已购买':'立即购买'}}
  39. </view>
  40. </view>
  41. </view>
  42. </scroll-view>
  43. </view>
  44. </view>
  45. </view>
  46. <y-modal ref='popup' title="提示" text='您确认付费购买此课程吗' @onConfirm='onConfirm'></y-modal>
  47. </view>
  48. </template>
  49. <script>
  50. import { mixin } from './mixin.js'
  51. export default {
  52. mixins: [mixin],
  53. data() {
  54. return {
  55. dataList: [], //一层
  56. newsInfo: {}, //商品
  57. leftSel: 0, //一层分类选中
  58. // status: 'loadmore',
  59. // page: 1,
  60. // pagnum: 15
  61. };
  62. },
  63. async onLoad(opt) {
  64. uni.setNavigationBarTitle({
  65. title:opt.title
  66. })
  67. await this.loadData();
  68. },
  69. onPullDownRefresh() {
  70. this.page = 1;
  71. this.leftSel = 0;
  72. this.dataList = [];
  73. this.newsInfo = {};
  74. this.loadData();
  75. setTimeout(function() {
  76. uni.stopPullDownRefresh();
  77. }, 800);
  78. },
  79. // onReachBottom() {
  80. // if (this.status == 'nomore') return;
  81. // this.status = 'loadmore';
  82. // this.page = ++this.page;
  83. // this.loadData();
  84. // },
  85. onShow() {},
  86. methods: {
  87. getSecList() {
  88. this.$api
  89. .request('new_cate/getTwoCate', {
  90. id: this.leftSel || '',
  91. })
  92. .then(data => {
  93. if (data.code == 200) {
  94. this.newsInfo = data.data;
  95. } else {
  96. this.$api.toast(data.msg);
  97. }
  98. });
  99. },
  100. // 轮播
  101. bannerClick(e) {
  102. console.log(e);
  103. let item = this.dataList.banner[e];
  104. if (item.goods_id != 0) {
  105. if (item.type == 1) {
  106. uni.navigateTo({
  107. url: '/pages/index/video/videoInfo?id=' + item.goods_id
  108. });
  109. } else {
  110. uni.navigateTo({
  111. url: '/pages/index/navInfo?id=' + item.goods_id
  112. });
  113. }
  114. }
  115. },
  116. navTo(item) {
  117. uni.navigateTo({
  118. url: `/pagesA/catList/catli?cat_id=${item.id}`
  119. });
  120. },
  121. choose(index) {
  122. console.log('leftSel: ', index);
  123. this.leftSel = index;
  124. console.log('this.leftSel', this.leftSel);
  125. this.getSecList();
  126. },
  127. loadData() {
  128. this.status = 'loadmore';
  129. this.$api
  130. .request('new_cate/getOneCate')
  131. .then(data => {
  132. console.log(data);
  133. if (data.code == 200) {
  134. this.dataList = data.data;
  135. this.leftSel = this.dataList[0].id;
  136. this.getSecList();
  137. } else {
  138. this.$api.toast(data.msg);
  139. }
  140. });
  141. }
  142. }
  143. };
  144. </script>
  145. <style lang="scss" scoped>
  146. page {
  147. height: 100vh;
  148. }
  149. .content {
  150. background-color: #fff;
  151. align-items: flex-start;
  152. .topBox {
  153. background-color: #fff;
  154. }
  155. .secTop {
  156. .scroll-Y {
  157. height: calc(100vh - 120rpx);
  158. flex-wrap: wrap;
  159. }
  160. .topLi {
  161. font-size: 26rpx;
  162. width: 168rpx;
  163. padding: 26rpx 0;
  164. line-height: 37rpx;
  165. text-align: center;
  166. background: #f4f4f4;
  167. color: #666;
  168. }
  169. .topsel {
  170. font-size: 28rpx;
  171. box-sizing: border-box;
  172. background-color: #fff;
  173. color: $promain;
  174. font-weight: 600;
  175. }
  176. }
  177. .topInfo {
  178. width: 582rpx;
  179. padding-right: 30rpx;
  180. padding-left: 12rpx;
  181. background-color: #f5f5f5;
  182. // background-color: #fff;
  183. .swipe {
  184. width: 540rpx;
  185. height: 166rpx;
  186. margin: 20rpx 0;
  187. }
  188. .topClass {
  189. position: fixed;
  190. z-index: 1;
  191. background-color: #fff;
  192. padding-left: 12rpx;
  193. width: 556rpx;
  194. .topClaBox {
  195. flex: 1;
  196. height: 98rpx;
  197. line-height: 98rpx;
  198. display: -webkit-box;
  199. overflow-x: auto;
  200. /*适应苹果*/
  201. -webkit-overflow-scrolling: touch;
  202. //父盒子隐藏滚动条
  203. &::-webkit-scrollbar {
  204. display: none;
  205. }
  206. .topClasLi {
  207. font-size: 28rpx;
  208. padding: 0 15rpx;
  209. }
  210. .topClasel {
  211. color: $promain;
  212. }
  213. }
  214. .classDown {
  215. height: 98rpx;
  216. width: 70rpx;
  217. box-shadow: -2rpx -5rpx 2rpx 5rpx rgba($color: #000000, $alpha: 0.05);
  218. background-color: #fff;
  219. .xuanz {
  220. transform: translate(180deg);
  221. }
  222. }
  223. }
  224. .topCInfo {
  225. flex: 1;
  226. height: calc(100vh - 120rpx);
  227. .maskbg {
  228. position: fixed;
  229. top: 170rpx;
  230. left: 200rpx;
  231. width: calc(100% - 200rpx);
  232. height: calc(100% - 100rpx);
  233. background-color: rgba(0, 0, 0, 0.65);
  234. z-index: 2;
  235. }
  236. /* #ifdef MP */
  237. .maskbg {
  238. position: fixed;
  239. top: 70rpx;
  240. }
  241. /* #endif */
  242. .scroll-Y {
  243. height: calc(100vh - 120rpx);
  244. }
  245. .box {
  246. width: 100%;
  247. flex-wrap: wrap;
  248. }
  249. .goodLi {
  250. width: 100%;
  251. margin-top: 40rpx;
  252. .boxli {
  253. flex: 1;
  254. margin-right: 20rpx;
  255. padding: 20rpx 20rpx 10rpx 28rpx;
  256. .monli {
  257. width: 100%;
  258. .red {
  259. font-size: 20rpx;
  260. }
  261. .promain {
  262. font-size: 18rpx;
  263. }
  264. }
  265. .monli {
  266. width: 100%;
  267. .red {
  268. font-size: 20rpx;
  269. }
  270. }
  271. }
  272. &:nth-of-type(3n-2) {
  273. .boxli {
  274. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAACGCAMAAAD3jvGAAAAAAXNSR0IArs4c6QAAAYlQTFRFAAAA////////////3///6Oj/6+v/7u7/4fD/////5OT/////6Oj/////3+r/4uv/5OT/5ub/9/f/4Oj34un44+P45eX4+Pj/4ef54uj54+P55OT6+vr/4eb64uf64+P64OT79vb/4eX74ub74+P34OT34eX3+Pj/4ub44+P44OT44eX49fX/4uX54OP54eT54eT54uX54OP54eT64eT64uX34OX34eP34uT44uX44OX44eP44uT44OT44OX44eP54uT54OT54eX54eP34uT34OT34eX34eP44uP44OT44eT44eP44OP44eT44eT44eP44OP54eT54eT34eP34OP34eT34eT44OP44OP44eT44eT44OP44eP44eT44eT44OT44eP34eT34eT34OT34eP34eP34OT44OT44eP44eP44OT49Pb+9vf/9vf/6+769vf/8/X+9fb/8vP+9fb/4OP45+j64OT49vf/4eT44OP44OP49vf/4eT44eT44eT45Of55un67vD99vf/Yx4bvgAAAH50Uk5TAAIEBggLDQ8RERMUFhcYGhwfHyEjJScnKiwuMDAzNTc5Ojs+QEJERUdJS01OT1JUVlhbXV9hY2ZoamxvcXN1d3p8foCDhYeJi46QkpSXmZudn6Kkpqirra+xs7a4ury/wcPFx8rMztDT1dfY2Nne4OTo7u7w8fLz9Pf5+fv96tGGfAAAAWdJREFUeNrt17FKQmEcxmGP6BByME/oWVycXLoR9ygIomjxLrwT76oLaXHVBheJTiD0vYk8v/XbHv68eqpNT3/e53bX/djnU6C79Q3ycLe/mCMvU/NeIw/XvtXIw01fa+ThZh3myEuaN8jT5i8N8vT/85/MkcfNkcfNkRc3b5GnzZ9b5OEm38yRx82RR8znyNPmT3Pk4cYn5sjj5sjj5shz5gvkafPHBfJwo6M58rg58qz5Enna/OG+N8BQoH3V9TJcfSAv0eHQ/WRY0vWRI7/6KuTIDYtcOXKdb44cOXIhRy7kyIX8/7/4kSNHLluOXMhtuVw5cuSy5a5cyJHLlrtyIUduy+XKkQs5cvn5dOXIhdyWy5UjF3LkQo4cuZAjF3LkQo4cuZAjF3LkQo5cyJEjF3LkQo5cyJEjF3LkQo5cyJELOXLkQo5cyJELOXLkQo5cyJELOXIhR45cyJELOXIhvyRyBPG+ACG3FwEV1LKsAAAAAElFTkSuQmCC) no-repeat;
  275. background-size: 100% 100%;
  276. }
  277. }
  278. &:nth-of-type(3n-1) {
  279. .boxli {
  280. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAACGCAMAAAD3jvGAAAAAAXNSR0IArs4c6QAAAYxQTFRFAAAA///////////U///////f///R///q///Y///M///S///w///X///R///0//TU//XO//bR//fO///v//fR//jM//jP//jR///r//nO//nR//TN//TP///v//XN//XP//bM//bO//vt//bP//fO//fP//fN//fO//vt//TN//XO//XM//XN//XP//zs//bN//bO//bN//bO//fN//TO//TM//TN//XO//XN//XO//XM//bN//bM//bN//bM//TN//TO//XN//XO//XM//XN//vt//XM//XN//bM//bN//TN//TN//TN//XM//XN//XM//XN//XM//XN//XN//TN//TN//TM//TN//XM//XN//XM//XN//XN//XN//XN//TM//vs//TN//TM//TN//XM//XM//XN//vs//XN//XN//XN//XM//rr//XN//TM//TN//TM//rs//rs//vr//TN//rn//vs//TM//TM//vr//XN//XM//vr//XN//XM//vs//XN//XN//nm//vsfHMuigAAAIF0Uk5TAAIEBgcICwwNDxERExYXGBocHx8hIyUnJyosLjAwMzU3OTo7PkBCREVHSUtNT1FSVFZYW11fYWNmaGpsb3FzdXd6fH6AgYOFh4mLjpCSlJeZm52foqSmqKutr7Gztri6ury/wcPExcXHyszOz9DT1dfY4Oju7u7w8vP09/j5+/v9EeGL8AAAAX9JREFUeNrt2k9KAnEcxuH8AwOJYrlIMDe6mZV3EQSJghJP4l28h3foBC26grvAllE4u/m9EDyf7eweXr6zmOkcbtR6nx+nr8aHfT4FehzPjo3mXT4lGi5fKuThlm8V8vRxaTJHXtB8gDxtvhsgD/dw1Rx5WfMR8rT5foQ83P1+gjxt/jpBHu7urznygPkUedr8eYo83PiXOfKM+Rx52vxpjjzc8Mccecx8gTxtvl0gD3e7rZGnzTc18nDVpkYeN18hT5uvV34dCtdfIy/T5dL05PzusITrueXpOsjTdZFbuZXLyq1cVv4PzJEjR67W35/IrdzKZeXI5bBYuazcypELuVsuK0cu5G65rBw5crnlVi7kyOWWWzlyIUcur08rF3LkQu71aeVCjlzIkQs5cuRCjlzIkQs5ciFHjlzIkQs5cl3PF34rRy7kyIUcuZAjRy7kyIUcuZAjF3LkyIUcuZAjF3LkyJXI31pWjlzI3XIhd1iEHLlbLitHrhbIEcT7Bji0GCzVYAigAAAAAElFTkSuQmCC) no-repeat;
  281. background-size: 100% 100%;
  282. }
  283. }
  284. &:nth-of-type(3n) {
  285. .boxli {
  286. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXIAAACGCAMAAAD3jvGAAAAAAXNSR0IArs4c6QAAAYlQTFRFAAAA/////////////////+jo/+vr/+7u//Dw//////Lk//////Po///0/+rq/+vr/+3t/+/m//f3//Do/+np/+rq/+vl//j4/+3n/+7o/+np/+rq//r0/+vm/+zn/+zo/+3p//b2/+nl/+rm/+vn/+zo/+zl//j0/+nm/+rn/+vn/+vo//Xy/+zl/+nm/+rn/+rn/+vl/+vm/+nm/+rn/+rn/+rl/+vm/+nm/+nn/+rl/+rm/+vm/+vn/+nn/+rl/+rm/+rm/+vn/+nl/+rm/+rm/+rm/+vl/+nl/+nm/+rm/+rn/+rl/+nm/+nm/+rm/+rl/+rl/+nm/+nm/+nm/+rl/+rm/+rm/+nm/+nl/+rl/+rm/+rm/+nm/+nl/+rm/+rm/+rm/+nl/+nl/+rm/+rm/+rl/+rl/+nm/+nm/+rm//T0//b0//b0//Du//b1//T0//X0//Pz//X0/+rl/+3q/+rm//b1/+nm/+nl/+nl//b1/+rm/+rm/+rm/+zp/+3q//Hw//b1aTKk/wAAAH50Uk5TAAIEBggLDQ8RERMUFhcYGhwfHyEjJScnKiwuMDAzNTc5Ojs+QEJERUdJS01OT1JUVlhbXV9hY2ZoamxvcXN1d3p8foCDhYeJi46QkpSXmZudn6Kkpqirra+xs7a4ury/wcPFx8rMztDT1dfY2Nne4OTo7u7w8fLz9Pf5+fv96tGGfAAAAWdJREFUeNrt17FKQmEcxmGP6BByME/oWVycXLoR9ygIomjxLrwT76oLaXHVBheJTiD0vYk8v/XbHv68eqpNT3/e53bX/djnU6C79Q3ycLe/mCMvU/NeIw/XvtXIw01fa+ThZh3myEuaN8jT5i8N8vT/85/MkcfNkcfNkRc3b5GnzZ9b5OEm38yRx82RR8znyNPmT3Pk4cYn5sjj5sjj5shz5gvkafPHBfJwo6M58rg58qz5Enna/OG+N8BQoH3V9TJcfSAv0eHQ/WRY0vWRI7/6KuTIDYtcOXKdb44cOXIhRy7kyIX8/7/4kSNHLluOXMhtuVw5cuSy5a5cyJHLlrtyIUduy+XKkQs5cvn5dOXIhdyWy5UjF3LkQo4cuZAjF3LkQo4cuZAjF3LkQo5cyJEjF3LkQo5cyJEjF3LkQo5cyJELOXLkQo5cyJELOXLkQo5cyJELOXIhR45cyJELOXIhvyRyBPG+ACG3FwEV1LKsAAAAAElFTkSuQmCC) no-repeat;
  287. background-size: 100% 100%;
  288. }
  289. }
  290. .libuy {
  291. width: 147rpx;
  292. height: 64rpx;
  293. text-align: center;
  294. line-height: 64rpx;
  295. background: rgba(205, 222, 222, 0.39);
  296. color: #26565A;
  297. font-size: 26rpx;
  298. border-radius: 34rpx;
  299. }
  300. .libuyOK {
  301. background: #f5f5f5;
  302. color: #999;
  303. }
  304. }
  305. }
  306. }
  307. }
  308. .cartBox {
  309. width: 710rpx;
  310. position: fixed;
  311. bottom: 10rpx;
  312. /* #ifdef H5 */
  313. bottom: 128rpx;
  314. /* #endif */
  315. left: 0;
  316. z-index: 999;
  317. margin: 0 20rpx;
  318. .leftbox {
  319. height: 100rpx;
  320. flex: 1;
  321. background: #000000;
  322. border-radius: 200rpx 0px 0px 200rpx;
  323. padding-left: 30rpx;
  324. .imgBox {
  325. position: relative;
  326. image {
  327. width: 90rpx;
  328. height: 82rpx;
  329. }
  330. }
  331. .priceInfo {
  332. position: relative;
  333. margin-left: 60rpx;
  334. .price {
  335. color: #fff;
  336. }
  337. }
  338. }
  339. .rightbox {
  340. height: 100rpx;
  341. line-height: 100rpx;
  342. text-align: center;
  343. color: #fff;
  344. background: #d8d8d8 linear-gradient(90deg, #6fd237 0%, #57c32a 100%);
  345. border-radius: 0px 200rpx 200rpx 0px;
  346. width: 194rpx;
  347. }
  348. .ordbox {
  349. font-size: 24rpx;
  350. text-align: center;
  351. margin-bottom: 10rpx;
  352. text {
  353. font-size: 30rpx;
  354. }
  355. // height: 100rpx;
  356. // line-height: 100rpx;
  357. // text-align: center;
  358. // color: #fff;
  359. // background: linear-gradient(90deg, #6fd237 0%, #57c32a 100%);
  360. // border-radius: 200rpx ;
  361. // margin-right: 15rpx;
  362. // padding: 0 20rpx;
  363. }
  364. .rightBlack {
  365. background: #000;
  366. color: #999;
  367. }
  368. }
  369. .ordbtn {
  370. position: fixed;
  371. bottom: 130rpx;
  372. right: 0;
  373. z-index: 999;
  374. width: 150rpx;
  375. height: 150rpx;
  376. line-height: 150rpx;
  377. border-radius: 50%;
  378. color: #fff;
  379. text-align: center;
  380. vertical-align: middle;
  381. font-size: 30rpx;
  382. background: radial-gradient(#68e670 0%, #5dce2c 100%);
  383. }
  384. </style>