unified_list.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. {extend name="public/container"}
  2. {block name="title"}{$title}{/block}
  3. {block name="head_top"}
  4. <style>
  5. .course-list.index .swiper-list2 {
  6. padding-top: .26rem;
  7. padding-bottom: .26rem;
  8. }
  9. .course-list.index .swiper-list2 .item {
  10. padding-right: .2rem;
  11. padding-left: .2rem;
  12. }
  13. .course-list.index .swiper-list2 .item~.item {
  14. margin-top: .26rem;
  15. }
  16. .course-list.index .swiper-list2 .item .pictrue {
  17. position: relative;
  18. width: 2.5rem;
  19. height: 1.4rem;
  20. border-radius: .1rem;
  21. overflow: hidden;
  22. }
  23. .course-list.index .studyCourse .swiper-list3 .pictrue {
  24. position: relative;
  25. width: 7.1rem;
  26. height: 3.8rem;
  27. border-radius: .1rem;
  28. margin-right: auto;
  29. margin-left: auto;
  30. overflow: hidden;
  31. }
  32. .course-list.index .swiper-list2 .item .pictrue img {
  33. display: block;
  34. width: 100%;
  35. height: 100%;
  36. }
  37. .course-list.index .swiper-list2 .item .text {
  38. position: relative;
  39. -webkit-box-flex: 1;
  40. -webkit-flex: 1;
  41. flex: 1;
  42. min-width: 0;
  43. margin-left: .2rem;
  44. }
  45. .course-list.index .swiper-list2 .item .name {
  46. font-weight: 400;
  47. font-size: .28rem;
  48. line-height: .4rem;
  49. color: #333;
  50. }
  51. .course-list.index .swiper-list2 .item .bottom {
  52. margin-top: .1rem;
  53. }
  54. .course-list.index .swiper-list2 .item .bottom .num {
  55. height: .4rem;
  56. padding-right: .12rem;
  57. padding-left: .12rem;
  58. border-radius: .03rem;
  59. background-color: rgba(44, 142, 255, .06);
  60. font-weight: 400;
  61. font-size: .24rem;
  62. line-height: .4rem;
  63. color: #2c8eff;
  64. }
  65. .course-list.index .swiper-list2 .item .bottom .num~.num {
  66. margin-left: .14rem;
  67. }
  68. .course-list.index .swiper-list2 .item .group {
  69. position: absolute;
  70. bottom: 0;
  71. left: 0;
  72. width: 100%;
  73. }
  74. .course-list.index .swiper-list2 .item .free {
  75. font-weight: 400;
  76. font-size: .24rem;
  77. color: #ffba25;
  78. }
  79. .course-list.index .swiper-list2 .item .money {
  80. font-weight: 500;
  81. font-size: .24rem;
  82. color: #f55;
  83. }
  84. .course-list.index .swiper-list2 .item .money span {
  85. font-size: .32rem;
  86. line-height: .45rem;
  87. }
  88. .course-list.index .swiper-list2 .item .total {
  89. margin-left: .1rem;
  90. font-weight: 400;
  91. font-size: .22rem;
  92. color: #999;
  93. }
  94. .layout-first {
  95. display: -webkit-box;
  96. display: -webkit-flex;
  97. display: flex;
  98. -webkit-box-lines: multiple;
  99. -webkit-flex-wrap: wrap;
  100. flex-wrap: wrap;
  101. -webkit-box-pack: justify;
  102. -webkit-justify-content: space-between;
  103. justify-content: space-between;
  104. -webkit-box-align: center;
  105. -webkit-align-items: center;
  106. align-items: center;
  107. padding: .29rem .2rem;
  108. }
  109. .layout-first .item {
  110. width: 3.45rem;
  111. margin-top: .29rem;
  112. }
  113. .layout-first .item:nth-child(-n+2) {
  114. margin-top: 0;
  115. }
  116. .layout-first .item .image {
  117. position: relative;
  118. height: 1.92rem;
  119. border-radius: .1rem;
  120. overflow: hidden;
  121. }
  122. .layout-first .item .image .img {
  123. display: block;
  124. width: 100%;
  125. height: 100%;
  126. }
  127. .layout-first .item .text {
  128. position: relative;
  129. height: 1.61rem;
  130. padding-top: .14rem;
  131. }
  132. .layout-first .item .text .name {
  133. overflow: hidden;
  134. white-space: nowrap;
  135. text-overflow: ellipsis;
  136. font-weight: 400;
  137. font-size: .28rem;
  138. line-height: .4rem;
  139. color: #333;
  140. }
  141. .layout-first .item .text .label {
  142. display: -webkit-box;
  143. display: -webkit-flex;
  144. display: flex;
  145. -webkit-box-align: center;
  146. -webkit-align-items: center;
  147. align-items: center;
  148. margin-top: .12rem;
  149. }
  150. .layout-first .item .text .label .cell {
  151. height: .4rem;
  152. padding-right: .12rem;
  153. padding-left: .12rem;
  154. border-radius: .03rem;
  155. background-color: rgba(44, 142, 255, .06);
  156. font-weight: 400;
  157. font-size: .24rem;
  158. line-height: .4rem;
  159. color: #2c8eff;
  160. }
  161. .layout-first .item .text .label .cell~.cell {
  162. margin-left: .14rem;
  163. }
  164. .layout-first .item .text .group {
  165. position: absolute;
  166. bottom: 0;
  167. left: 0;
  168. display: -webkit-box;
  169. display: -webkit-flex;
  170. display: flex;
  171. -webkit-box-align: center;
  172. -webkit-align-items: center;
  173. align-items: center;
  174. width: 100%;
  175. }
  176. .layout-first .item .text .group .money {
  177. font-weight: 500;
  178. font-size: .24rem;
  179. color: #f55;
  180. }
  181. .layout-first .item .text .group .money span {
  182. font-size: .32rem;
  183. line-height: .45rem;
  184. }
  185. .layout-first .item .text .group .free {
  186. font-weight: 400;
  187. font-size: .24rem;
  188. line-height: .45rem;
  189. color: #ffba25;
  190. }
  191. .layout-first .item .text .group .total {
  192. margin-left: .1rem;
  193. font-weight: 400;
  194. font-size: .22rem;
  195. color: #999;
  196. }
  197. </style>
  198. {/block}
  199. {block name="content"}
  200. <div class="course-list index" id="app" v-cloak="" ref="index" style="-webkit-overflow-scrolling: touch;">
  201. <div class="header slider-banner" v-if="swiperlist.length">
  202. <ul class="swiper-wrapper">
  203. <li class="swiper-slide" v-for="(swiper,index) in swiperlist">
  204. <a v-if="swiper.url" :href="swiper.url">
  205. <img :src="swiper.pic" />
  206. </a>
  207. <img v-else :src="swiper.pic" />
  208. </li>
  209. </ul>
  210. <div class="swiper-pagination"></div>
  211. </div>
  212. <div class="nav" v-if="Recommendlist.length">
  213. <div class="item" :class="where.subject_id==0 ? 'on':''" @click="where.subject_id=0">推荐</div>
  214. <div class="item" v-for="item in Recommendlist" :class="where.subject_id==item.id ? 'on':''"
  215. @click="where.subject_id=item.id">{{item.title}}</div>
  216. </div>
  217. <div class="studyCourse" ref="list">
  218. <!--宫图-->
  219. <div v-if="where.typesetting==2" class="layout-first">
  220. <a v-for="(item, index) in updateList" :key="index" class="item" :href="getDetails(item.id)">
  221. <div class="image">
  222. <img :src="item.image" class="img">
  223. </div>
  224. <div class="text">
  225. <div class="name">{{ item.title }}</div>
  226. <div class="label">
  227. <template v-for="(itm, idx) in item.label">
  228. <div v-if="idx < 2" :key="idx" class="cell">{{ itm }}</div>
  229. </template>
  230. </div>
  231. <div class="group">
  232. <template v-if="where.type==0">
  233. <template v-if="item.is_pink">
  234. <div v-if="item.pink_money <= 0" class="free">免费</div>
  235. <div v-else class="money">¥<span>{{item.pink_money}}</span></div>
  236. <span v-if="item.special_type!=4" class="total">共{{item.count}}节</span>
  237. </template>
  238. <template v-else>
  239. <div v-if="item.money == 0" class="free">免费</div>
  240. <div v-else class="money">¥<span>{{item.money}}</span></div>
  241. <span v-if="item.special_type!=4" class="total">共{{item.count}}节</span>
  242. </template>
  243. </template>
  244. </div>
  245. </div>
  246. </a>
  247. </div>
  248. <!--大图-->
  249. <div class="swiper-list2 swiper-list3" v-else-if="where.typesetting==1">
  250. <a class="item acea-row row-between-wrapper" v-for="vo in updateList" :href="getDetails(vo.id)">
  251. <div class="pictrue">
  252. <img :src="vo.image">
  253. <div class="label">{{ vo.type }}</div>
  254. </div>
  255. <div class="text-pic acea-row row-column">
  256. <div class="name line1" v-text="vo.title"></div>
  257. <div class="bottom acea-row row-between-wrapper">
  258. <div class="acea-row row-middle">
  259. <div class="num acea-row row-center-wrapper" v-for="(lab,index) in vo.label"
  260. v-if="index < max" v-text="lab"></div>
  261. </div>
  262. <template v-if="where.type==0">
  263. <template v-if="vo.is_pink">
  264. <div v-if="vo.pink_money <= 0" class="free">免费<span
  265. style="font-size:.24rem;color:#333;margin-left:.1rem"
  266. v-if="vo.special_type!=4">{{vo.count}}节</span></div>
  267. <div v-else class="money">¥<span>{{vo.pink_money}}</span><span
  268. style="font-size:.24rem;color:#333;margin-left:.1rem"
  269. v-if="vo.special_type!=4">{{vo.count}}节</span></div>
  270. </template>
  271. <template v-else>
  272. <div v-if="vo.money == 0" class="free">免费<span
  273. style="font-size:.24rem;color:#333;margin-left:.1rem"
  274. v-if="vo.special_type!=4">{{vo.count}}节</span></div>
  275. <div v-else class="money">¥<span>{{vo.money}}</span><span
  276. style="font-size:.24rem;color:#333;margin-left:.1rem"
  277. v-if="vo.special_type!=4">{{vo.count}}节</span></div>
  278. </template>
  279. </template>
  280. </div>
  281. </div>
  282. </a>
  283. </div>
  284. <!--小图-->
  285. <div class="swiper-list2" v-else-if="where.typesetting==3">
  286. <a class="item acea-row" v-for="vo in updateList" :href="getDetails(vo.id)">
  287. <div class="pictrue">
  288. <img :src="vo.image">
  289. <div class="label">{{ vo.type }}</div>
  290. </div>
  291. <div class="text">
  292. <div class="name line1" v-text="vo.title">非常语文课</div>
  293. <div class="bottom acea-row row-middle">
  294. <div class="num" v-for="(lab,index) in vo.label" v-if="index < max" v-text="lab"></div>
  295. </div>
  296. <div class="group acea-row row-middle">
  297. <template v-if="vo.is_pink">
  298. <div v-if="vo.pink_money == 0" class="free">免费</div>
  299. <div v-else class="money">¥<span>{{vo.pink_money}}</span></div>
  300. <span v-if="vo.special_type!=4" class="total">共{{vo.count}}节</span>
  301. </template>
  302. <template v-else>
  303. <div v-if="vo.money == 0" class="free">免费</div>
  304. <div v-else class="money">¥<span>{{vo.money}}</span></div>
  305. <span v-if="vo.special_type!=4" class="total">共{{vo.count}}节</span>
  306. </template>
  307. </div>
  308. </div>
  309. </a>
  310. </div>
  311. <!--纯图-->
  312. <div class="list" v-else-if="where.typesetting==4">
  313. <a class="item" v-for="vo in List" :href="getDetails(vo.id)" style="display: inherit"><img
  314. :src="vo.image"></a>
  315. </div>
  316. </div>
  317. <p class="loading-line" style="background-color: #ffffff" v-cloak="">
  318. <span v-show="loading==true" class="fa fa-spinner loadingpic" style="font-size: 0.4rem"></span>
  319. <span v-text="loadTitle">加载更多</span>
  320. </p>
  321. <shortcut></shortcut>
  322. </div>
  323. {/block}
  324. {block name='foot'}
  325. <script>
  326. var type={$type},recommend_id={$recommend_id},typesetting={$typesetting},banner={$banner},Recommendlist={$Recommendlist},grade_id={$grade_id};
  327. require(['vue','helper','store', '{__WAP_PATH}zsff/js/shortcut.js'],function(Vue,$h,storeApi) {
  328. new Vue({
  329. el: '#app',
  330. data: {
  331. where:{
  332. type:type,
  333. recommend_id:recommend_id,
  334. page:1,
  335. limit:10,
  336. typesetting:typesetting,
  337. subject_id:0,
  338. },
  339. Recommendlist:Recommendlist,
  340. swiperlist:banner,
  341. loading: false,
  342. loadend: false,
  343. loadTitle: '上拉加载更多',
  344. List:[],
  345. max:2
  346. },
  347. computed: {
  348. updateList: function () {
  349. return this.List.map(function (value) {
  350. value.special_type=value.type;
  351. switch (value.type) {
  352. case 1:
  353. value.type = '图文';
  354. break;
  355. case 2:
  356. value.type = '音频';
  357. break;
  358. case 3:
  359. value.type = '视频';
  360. break;
  361. case 4:
  362. value.type = '直播';
  363. break;
  364. case 5:
  365. value.type = '专栏';
  366. break;
  367. case 6:
  368. value.type = '其他';
  369. break;
  370. }
  371. return value;
  372. });
  373. }
  374. },
  375. watch:{
  376. 'where.subject_id':function (n) {
  377. this.where.page=1;
  378. this.loadend=false;
  379. this.$set(this,'List',[]);
  380. this.get_unifiend_list();
  381. }
  382. },
  383. methods:{
  384. getDetails:function(id){
  385. return this.where.type == 1 ? $h.U({c:'article',a:'details',q:{id:id}}) : $h.U({c:'special',a:'details',q:{id:id}});
  386. },
  387. get_unifiend_list:function () {
  388. if(this.loading) return;
  389. if(this.loadend) return;
  390. this.loadTitle='';
  391. this.loading=true;
  392. storeApi.baseGet($h.U({c:'index',a:'get_unifiend_list',q:this.where}),function (res) {
  393. var list=res.data.data.list;
  394. var List=$h.SplitArray(list,this.List);
  395. this.loading=false;
  396. this.where.page=res.data.data.page;
  397. this.loadend=list.length < this.where.limit;
  398. this.loadTitle=this.loadend ? '我是有底线的': '上拉加载更多';
  399. this.$set(this,'List',List);
  400. this.$nextTick(function () {
  401. this.EventUtil();
  402. }.bind(this))
  403. }.bind(this),function (res) {
  404. this.loadTitle='加载更多';
  405. this.loading=false;
  406. }.bind(this));
  407. },
  408. EventUtil:function () {
  409. var that=this;
  410. $h.EventUtil.listenTouchDirection(document,function (){
  411. that.loading == false && that.get_unifiend_list();
  412. },false);
  413. }
  414. },
  415. mounted:function () {
  416. this.get_unifiend_list();
  417. this.$nextTick(function () {
  418. var myBanner = new Swiper('.header', {
  419. pagination: '.swiper-pagination',
  420. paginationClickable: false,
  421. autoplay:2500,
  422. speed: 1000,
  423. autoplayDisableOnInteraction: false
  424. });
  425. })
  426. console.log(this.List);
  427. }
  428. })
  429. })
  430. </script>
  431. {/block}