details.html 73 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340
  1. {extend name="public/container"}
  2. {block name="title"}{$title}{/block}
  3. {block name="head_top"}
  4. <link rel="stylesheet" type="text/css" href="{__WAP_PATH}zsff/css/video-js.min.css"/>
  5. <script src="{__WAP_PATH}zsff/js/video.min.js"></script>
  6. <script src="{__WAP_PATH}zsff/js/zh-CN.js"></script>
  7. <style>
  8. body{padding-bottom:1rem;}
  9. .thematic-details{background-color:#f5f5f5;}
  10. .video-js .vjs-big-play-button{top: 50%;left: 50%;transform: translate(-50%,-50%);}
  11. .layui-layer-shade{background-image: url("/wap/first/zsff/images/close.png")!important;background-repeat: no-repeat!important;background-size: 0.8rem 0.8rem;background-position: 50% 88%;}
  12. .navCon{position: relative;padding: 0 0.3rem;}
  13. .swiper-details .swiper-nav .free{position:absolute;font-size: 0.2rem;color: #fff;left:67%;top: 0;margin-top: -0.5rem;animation: stone linear 1s infinite alternate;-webkit-animation: free linear 1s infinite alternate;}
  14. .swiper-details .swiper-nav .free .freeCon{width:1.1rem;height:0.4rem;border-radius:0.05rem;background-color:#ea2f2f;position:relative;left:0.5rem}
  15. .swiper-details .swiper-nav .free .freeCon:after{content: "";width: 0;height: 0;border-left: 0.1rem solid transparent;border-right: 0.1rem solid transparent;border-top: 0.13rem solid #ea2f2f;position:absolute;bottom: -0.1rem;left: 50%;margin-left: -0.1rem;}
  16. @keyframes free
  17. {
  18. from {transform:scale(1);}
  19. to {transform:scale(0.9);}
  20. }
  21. @-webkit-keyframes stone
  22. {
  23. from {transform:scale(1);}
  24. to {transform:scale(0.9);}
  25. }
  26. /*这里开始*/
  27. .video_footer_img{width:0.4rem;height:0.4rem;margin-right:auto;margin-left:auto;}
  28. .video_footer_img img{width: 100%;height: 100%;display: block;}
  29. .video_footer_img2{width:0.4rem;height:0.4rem;margin-right:auto;margin-left:auto;}
  30. .video_footer_img2 img{width: 100%;height: 100%;display: block;}
  31. .video_footer_tit{font-weight:400;font-size: 0.18rem;line-height:.36rem;color: #666;}
  32. .video_footer_left{width:.9rem;height:1rem;line-height:1rem;text-align:center;}
  33. .video_footer_left .cont{display:inline-block;vertical-align:middle;font-weight:400;font-size:.18rem;line-height:.36rem;color:#666;}
  34. .video_footer_btn{-webkit-flex:1;flex:1;height: 0.76rem;border-radius:37px;}
  35. .video_footer_btn_left{width: 50%;height: 100%;border-radius:37px 0px 0px 37px;background:linear-gradient(90deg,rgba(248,162,1,1) 0%,rgba(255,186,37,1) 100%);}
  36. .video_footer_btn_right{width: 50%;height: 100%;border-radius:0px 37px 37px 0px;background:linear-gradient(90deg,rgba(64,157,255,1) 0%,rgba(30,133,251,1) 100%);}
  37. .video_footer_btn_left_pic{font-size: 0.28rem;line-height:.22rem; color: #fff;text-align: center;}
  38. .video_footer_btn_left_num{font-size: 0.2rem;line-height:.2rem; color: #fff;text-align: center;}
  39. .video_footer_btn_left_pic + .video_footer_btn_left_num{margin-top:.09rem;}
  40. footer .video_footer_btn .on{width: 100% !important;border-radius: 37px !important;}
  41. video{width: 100%}
  42. .labelItem {
  43. font-size: 0.24rem;
  44. color: #999;
  45. font-weight: 400;
  46. background-color: #F2F8FF;
  47. padding: 0.04rem 0.1rem;
  48. border-radius: 0.06rem;
  49. color: #2C8EFF;
  50. }
  51. .catalogue{background-color:#fff;}
  52. .video-listn{background-color:#fff;}
  53. .teacher{margin-top:.16rem;background-color:#fff;}
  54. .teacher .teacher-hd{padding:.2rem .3rem 0;font-weight:bold;font-size:.3rem;line-height:.42rem;color:#333;}
  55. .teacher .teacher-bd{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:.28rem .3rem .3rem;}
  56. .teacher .teacher-bd .img{width:1.1rem;height:1.1rem;border-radius:50%;object-fit:cover;}
  57. .teacher .teacher-bd .text{-webkit-box-flex:1;-webkit-flex:1;flex:1;min-width:0;margin-right:.08rem;margin-left:.2rem;}
  58. .teacher .teacher-bd .name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:bold;font-size:.3rem;line-height:.42rem;color:#282828;}
  59. .teacher .teacher-bd .label{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;margin-top:.06rem;}
  60. .teacher .teacher-bd .label .cell{height:.34rem;padding:0 .12rem;border-radius:.04rem;background-color:#fff7e6;font-size:.22rem;line-height:.34rem;color:#feb720;}
  61. .teacher .teacher-bd .label .cell ~ .cell{margin-left:.1rem;}
  62. .teacher .teacher-bd .attr{margin-top:.09rem;font-size:.22rem;line-height:.37rem;color:#385270;}
  63. .teacher .teacher-bd .knowledge{font-size:.2rem;color:#999;}
  64. .teacher-section {
  65. margin-top: 0.14rem;
  66. background-color: #fff;
  67. }
  68. .teacher-table {
  69. display: -webkit-box;
  70. display: -webkit-flex;
  71. display: flex;
  72. -webkit-box-align: center;
  73. -webkit-align-items: center;
  74. align-items: center;
  75. height: 1.5rem;
  76. }
  77. .teacher-table .item {
  78. -webkit-box-flex: 1;
  79. -webkit-flex: 1;
  80. flex: 1;
  81. position: relative;
  82. min-width: 0;
  83. font-size: 0.24rem;
  84. text-align: center;
  85. color: #999999;
  86. }
  87. .teacher-table .item:last-child::before {
  88. content: "";
  89. position: absolute;
  90. top: 50%;
  91. left: 0;
  92. width: 0.02rem;
  93. height: 0.4rem;
  94. background-color: #e8e8e8;
  95. -webkit-transform: translateY(-50%);
  96. transform: translateY(-50%);
  97. }
  98. .teacher-table >div:last-child > div:first-child {
  99. margin-bottom: 0.06rem;
  100. }
  101. .teacher-table .num {
  102. font-size: 0.38rem;
  103. color: #333333;
  104. }
  105. .teacher-table img {
  106. width: 0.5rem;
  107. height: 0.5rem;
  108. border: 0.06rem solid #FFFFFF;
  109. border-radius: 50%;
  110. margin-left: -0.15rem;
  111. box-sizing: border-box;
  112. vertical-align: middle;
  113. }
  114. .teacher-detail {
  115. padding: 0 0.3rem 0.3rem;
  116. }
  117. .teacher-detail a {
  118. display: block;
  119. padding: 0.3rem;
  120. border-radius: 0.04rem;
  121. background-color: #f9fafc;
  122. }
  123. .teacher-detail .knowledge {
  124. color: #666666;
  125. }
  126. .teacher-detail .detail-hd {
  127. display: -webkit-box;
  128. display: -webkit-flex;
  129. display: flex;
  130. -webkit-box-align: center;
  131. -webkit-align-items: center;
  132. align-items: center;
  133. }
  134. .teacher-detail .detail-hd .head {
  135. width: 0.9rem;
  136. height: 0.9rem;
  137. border-radius: 50%;
  138. overflow: hidden;
  139. }
  140. .teacher-detail .detail-hd img {
  141. display: block;
  142. width: 100%;
  143. height: 100%;
  144. object-fit: cover;
  145. }
  146. .teacher-detail .detail-hd .text {
  147. -webkit-box-flex: 1;
  148. -webkit-flex: 1;
  149. flex: 1;
  150. min-width: 0;
  151. margin: 0 0.18rem;
  152. font-weight: bold;
  153. font-size: 0.3rem;
  154. color: #282828;
  155. }
  156. .teacher-detail .detail-hd span {
  157. display: inline-block;
  158. height: 0.34rem;
  159. padding: 0 0.12rem;
  160. border-radius: 0.04rem;
  161. background-color: #FFF7E6;
  162. font-weight: normal;
  163. font-size: 0.22rem;
  164. line-height: 0.34rem;
  165. color: #FEB720;
  166. }
  167. .teacher-detail .detail-bd {
  168. margin-top: 0.2rem;
  169. font-size: 0.26rem;
  170. line-height: 0.38rem;
  171. color: #666666;
  172. }
  173. .scroll-section {
  174. display: -webkit-box;
  175. display: -webkit-flex;
  176. display: flex;
  177. -webkit-box-align: center;
  178. -webkit-align-items: center;
  179. align-items: center;
  180. margin-top: 0.14rem;
  181. background-color:rgba(255,186,37,0.3);
  182. font-size: 0.24rem;
  183. }
  184. .scroll-section .label {
  185. width: 2rem;
  186. padding-left: 0.75rem;
  187. background: url("data:image/png;base64,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") 0.3rem center/0.26rem 0.22rem no-repeat;
  188. color: #E93323;
  189. }
  190. .scroll-section .swiper-container {
  191. position: relative;
  192. -webkit-box-flex: 1;
  193. -webkit-flex: 1;
  194. flex: 1;
  195. min-width: 0;
  196. height: 0.62rem;
  197. padding-left: 0.16rem;
  198. line-height: 0.62rem;
  199. }
  200. .scroll-section .swiper-container::before {
  201. content: "";
  202. position: absolute;
  203. top: 50%;
  204. left: 0;
  205. width: 1px;
  206. height: 0.24rem;
  207. border-left: 1px solid #999999;
  208. -webkit-transform: translateY(-50%);
  209. transform: translateY(-50%);
  210. }
  211. </style>
  212. {/block}
  213. {block name="content"}
  214. <div v-cloak id="app" class="thematic-details">
  215. {if !$subscribe}
  216. <div class="follow acea-row row-between-wrapper" v-if="topFocus">
  217. <div class="picTxt">点击“立即关注”即可关注公众号</div>
  218. <div>
  219. <div class="followBnt" @click="is_code=true">立即关注</div>
  220. <span class="iconfont iconguanbi2" @click="topFocus = false"></span>
  221. </div>
  222. </div>
  223. {/if}
  224. <!--分享拼团专题展示-->
  225. <div class="initiate-group2" v-if="is_partake">
  226. <div class="list acea-row row-center-wrapper">
  227. <div class="pictrue">
  228. <img src="{__WAP_PATH}zsff/images/king.png" class="king">
  229. <img :src="pinkInfo.pinkT.avatar">
  230. </div>
  231. <div class="pictrue" v-for="item in pinkInfo.pinkAll"><img :src="item.avatar"></div>
  232. <div class="pictrue" v-for="item in pinkInfo.count"><img src="{__WAP_PATH}zsff/images/symbol.png"></div>
  233. </div>
  234. <div class="tiptime">还差{{pinkInfo.count}}人,和我们一起参加吧</div>
  235. <div class="tiptime tiptime2">剩余时间<span class="time" v-if="pinkInfo.pinkT">{{pinkInfo.pinkT.difftime.hour}}:
  236. {{pinkInfo.pinkT.difftime.minute}}: {{pinkInfo.pinkT.difftime.second}}</span></div>
  237. </div>
  238. <!--END-->
  239. <div class="swiper-details">
  240. <div class="banner slider-banner">
  241. <ul class="swiper-wrapper" v-cloak="">
  242. <li class="swiper-slide" v-for="swiper in swiperlist">
  243. <img :src="swiper" />
  244. </li>
  245. </ul>
  246. <div class="swiper-pagination"></div>
  247. </div>
  248. <div class="successTip" v-if="barrageStatus == true">
  249. <div class="picTxt acea-row row-middle" v-for="(item,index) in Barragelist" v-show="num==index?true:false">
  250. <div class="pictrue"><img :src="item.avatar"></div>
  251. <div class="acea-row row-middle" style="flex: 1;overflow: hidden;white-space: nowrap;">
  252. <div class="name line1">{{item.nickname}}</div>
  253. <div v-text="item.status_name" style="flex: 1;overflow: hidden;text-overflow: ellipsis;"></div>
  254. </div>
  255. </div>
  256. </div>
  257. <div class="swiper">
  258. <div class="name" v-text="special.title" style="padding:0.2rem 0.3rem 0;font-size:0.36rem;line-height:0.48rem;color:#333333;">加载中</div>
  259. <div class="swiper-int">
  260. <div class="swiper-int-top">
  261. <div class="swiper-int-top-left">
  262. <div v-if="special.label.length" class="attr">
  263. <div v-for="item in special.label">{{item}}</div>
  264. </div>
  265. </div>
  266. <div class="acea-row row-middle">
  267. <div class="pin-money" v-if="is_pay==false && is_partake==false">
  268. <span class="price">¥<b>{{ special.is_pink ? special.pink_money : special.money }}</b></span>
  269. <span class="vip-price">¥{{ special.member_money }}</span>
  270. <img class="vip-price-icon" src="{__WAP_PATH}zsff/images/vip.png">
  271. <!-- <span class="total" v-if="special.type != 4">共{{count}}节</span>-->
  272. </div>
  273. <div class="pin-money" v-else v-show="is_pay==false">拼课价<span class="money">¥{{special.pink_money}}</span></div>
  274. <!-- <div class="collect">已有{{special.browse_count + 1}}人学习</div>-->
  275. </div>
  276. </div>
  277. <div class="collect" @click="collect">
  278. <div :class="['knowledge', special.collect ? 'iconshoucang2' : 'iconshoucang11']"></div>
  279. <div>{{special.collect ? '已收藏': '收藏'}}</div>
  280. </div>
  281. </div>
  282. <!-- <div class="peopleNum acea-row row-middle line1" v-if="pinkUser.length">-->
  283. <!-- <div class="pictrue">-->
  284. <!-- <img v-for="(item,key) in pinkUser" :src="item.avatar">-->
  285. <!-- </div>-->
  286. <!-- <div class="text">{{pinkUser.length}}人参加</div>-->
  287. <!-- </div>-->
  288. </div>
  289. <div class="pinTip2 acea-row row-between-wrapper" v-if="is_pay || isMember && special.member_pay_type==0">
  290. <div class="reminder line1">和小伙伴一起学习,有老师答疑哦~</div>
  291. <div class="chatBnt acea-row row-center-wrapper" @click=" open = false ">加入群聊</div>
  292. </div>
  293. <!-- 拼团 -->
  294. <!-- <div class="pinTip line1" v-if="pinkIngList.length && is_pay==false">以下小伙伴正在发起团购,您可以直接参加</div>-->
  295. <div v-if="pinkIngList.length && is_pay==false" class="scroll-section">
  296. <div class="label">已拼{{ scrollData.length }}件</div>
  297. <div id="scroll" class="swiper-container">
  298. <div class="swiper-wrapper">
  299. <div v-for="(item, index) in scrollData" :key="index" class="swiper-slide">{{ item.nickname }}拼团成功</div>
  300. </div>
  301. </div>
  302. </div>
  303. <div class="list" v-if="pinkIngList.length && is_pay==false">
  304. <div class="item acea-row row-middle" v-for="item in pinkIngList">
  305. <div class="pictrue"><img :src="item.avatar"></div>
  306. <div class="name line1" v-html="item.nickname"></div>
  307. <div class="left">
  308. <div>还差<span>{{item.num}}人</span>成团</div>
  309. <div class="time">剩余{{item.difftime.hour}}:{{item.difftime.minute}}:{{item.difftime.second}}</div>
  310. </div>
  311. <a class="acea-row row-center-wrapper link" :href="getAttendUrl(item.id,item.cid)">
  312. 去参团
  313. <span class="knowledge iconxiangyou"></span>
  314. </a>
  315. </div>
  316. </div>
  317. <div class="teacher-section">
  318. <div class="teacher-table">
  319. <div class="item">
  320. <div class="num">{{ count }}</div>
  321. <div>总节数</div>
  322. </div>
  323. <div class="item">
  324. <div>
  325. <template v-for="(item, index) in record">
  326. <img v-if="index < 5" :key="index" :src="item.avatar">
  327. </template>
  328. </div>
  329. <div>已有<span style="font-weight:bold;font-size:0.28rem;vertical-align:middle;">{{ record.length }}</span>人学习</div>
  330. </div>
  331. </div>
  332. <div v-if="lecturer" class="teacher-detail">
  333. <a :href="$h.U({c:'special',a:'teacher_detail'})+'?id=' + special.lecturer_id">
  334. <div class="detail-hd">
  335. <div class="head">
  336. <img :src="lecturer.lecturer_head">
  337. </div>
  338. <div class="text">
  339. <div>{{ lecturer.lecturer_name }}</div>
  340. <div v-if="lecturer.label.length">
  341. <template v-for="(item, index) in lecturer.label">
  342. <span v-if="index < 3" :key="index">{{ item }}</span>
  343. </template>
  344. </div>
  345. </div>
  346. <div class="knowledge iconxiangyou"></div>
  347. </div>
  348. <div class="detail-bd">{{ lecturer.explain }}</div>
  349. </a>
  350. </div>
  351. </div>
  352. <div class="swiper-nav" ref="list">
  353. <div class="navCon acea-row row-middle">
  354. <div v-if="special.type == 5" class="item" :class="active==index?'on':''" v-for="(nav,index) in cloumnNavlist" @click=" active = index">
  355. {{nav.title}}
  356. </div>
  357. <div v-if="special.type == 4" class="item" :class="active==index?'on':''" v-for="(nav,index) in liveNavlist" @click=" active = index">
  358. {{nav.title}}
  359. </div>
  360. <div v-if="special.type != 5 && special.type != 4" class="item" :class="active==index?'on':''" v-for="(nav,index) in otherNavlist" @click=" active = index">
  361. {{nav.title}}
  362. </div>
  363. </div>
  364. </div>
  365. <!-- 通用详情 -->
  366. <div class="swiper-conter" v-show="active==0" v-html="special.content"></div>
  367. <!-- 专题目录/专栏目录 -->
  368. <div v-show="active==1 && special.type != 4">
  369. <div ref="list">
  370. <!-- 专栏目录 -->
  371. <ul v-if="special.type === 5" class="parent-catalogue">
  372. <template v-for="(item, index) in otherTaskList">
  373. <li :key="item.id" :class="{ active: item.active }" @click="show(item)">
  374. <div class="parent-title">
  375. <div class="name">{{item.title}}</div>
  376. <div :class="[item.active ? 'iconxiangshang' : 'iconxiangxia', 'knowledge']"></div>
  377. </div>
  378. <ul v-if="item.special_task.length" class="catalogue">
  379. <li v-for="(itm, idx) in item.special_task" :key="itm.id" :class="{ gray: itm.taskTrue }" @click="play(itm)">
  380. <div class="image">
  381. <img v-if="item.type === 1" class="img" src="{__WAP_PATH}zsff/images/media1.png">
  382. <img v-else-if="item.type === 2" class="img" src="{__WAP_PATH}zsff/images/media2.png">
  383. <img v-else-if="item.type === 3 || item.type === 4" class="img" src="{__WAP_PATH}zsff/images/media3.png">
  384. </div>
  385. <div class="title">{{idx < 9 ? '0' + (idx + 1) : idx + 1}} | {{itm.title}}</div>
  386. <template v-if="itm.is_free">
  387. <div v-if="itm.pay_status" class="knowledge iconsuozi"></div>
  388. <div v-else class="knowledge iconziyuan2"></div>
  389. </template>
  390. <div v-else class="free">免费</div>
  391. </li>
  392. </ul>
  393. </li>
  394. </template>
  395. </ul>
  396. <!-- 专题目录 -->
  397. <ul v-else class="catalogue">
  398. <li v-for="(item, index) in otherTaskList" :key="item.id" :class="{ gray: item.taskTrue }" @click="play(item)">
  399. <div class="image">
  400. <img v-if="item.type === 1" class="img" src="{__WAP_PATH}zsff/images/media1.png">
  401. <img v-else-if="item.type === 2" class="img" src="{__WAP_PATH}zsff/images/media2.png">
  402. <img v-else-if="item.type === 3 || item.type === 4" class="img" src="{__WAP_PATH}zsff/images/media3.png">
  403. </div>
  404. <div class="title">{{index < 9 ? '0' + (index + 1) : index + 1}} | {{item.title}}</div>
  405. <template v-if="item.is_free">
  406. <div v-if="item.pay_status" class="knowledge iconsuozi"></div>
  407. <div v-else class="knowledge iconziyuan2"></div>
  408. </template>
  409. <div v-else class="free">免费</div>
  410. </li>
  411. </ul>
  412. </div>
  413. <p class="loading-line" style="background-color: #ffffff" v-cloak="">
  414. <span v-show="otherLoading==true" class="fa fa-spinner loadingpic" style="font-size: 0.4rem"></span>
  415. <span v-text="otherLoadTitle">加载更多</span>
  416. </p>
  417. </div>
  418. <!-- 直播回放目录 -->
  419. <div v-if="special.type === 4 && active" class="replay-directory">
  420. <ul v-if="liveTaskList.length">
  421. <li v-for="(item, index) in liveTaskList" :key="index" :class="{ active: RecordId === item.RecordId }" class="item" @click="playBackRecord(item.RecordId)">
  422. <div class="label">回放</div>
  423. <div class="name">{{ index | serial }} | {{item.playback_name ? item.playback_name : special.title }}</div>
  424. <div></div>
  425. </li>
  426. </ul>
  427. <div class="foot">
  428. <span v-show="liveLoading" class="fa fa-spinner loadingpic"></span>
  429. </div>
  430. </div>
  431. <div class="video-list" v-show="active==2 && special.type == 5" style="-webkit-overflow-scrolling: touch;">
  432. <div v-if="columnTaskList.length && active==2" ref="list">
  433. <div class="video-listn" style="padding:0.3rem 0;">
  434. <div class="item acea-row row-between-wrapper" v-for="vo in otherTaskList" @click="play(vo)">
  435. <div class="pictrue" @click="play(vo)" style="position: relative">
  436. <img :src="vo.image">
  437. <div class="label">{{specialType[vo.type]}}</div>
  438. </div>
  439. <div class="underline">
  440. <div class="text acea-row row-between row-column">
  441. <div class="name line1" v-text="vo.title" @click="play(vo)"></div>
  442. <div v-if="vo.label.length" class="attr">
  443. <div v-for="item in vo.label">{{item}}</div>
  444. </div>
  445. <template v-if="special.pay_type">
  446. <template v-if="vo.pay_status">
  447. <template v-if="isMember">
  448. <div v-if="vo.member_pay_type" class="price">
  449. ¥{{vo.member_money === '0.00' ? vo.money : vo.member_money}}</div>
  450. <div v-else class="free">去学习</div>
  451. </template>
  452. <div v-else class="price">¥<span>{{vo.money}}</span></div>
  453. </template>
  454. <div v-else class="free">去学习</div>
  455. </template>
  456. <div v-else class="free">去学习</div>
  457. </div>
  458. </div>
  459. </div>
  460. </div>
  461. </div>
  462. <p class="loading-line" style="background-color: #ffffff">
  463. <span v-show="columnLoading==true" class="fa fa-spinner loadingpic" style="font-size: 0.4rem"></span>
  464. </p>
  465. </div>
  466. </div>
  467. <footer class="acea-row row-middle" ref="storeMenu" v-if="is_pay==false && is_partake==false && is_gift==false && isPink==false">
  468. <a class="link" href="{:Url('wap/index/index')}">
  469. <div class="cont">
  470. <img src="{__WAP_PATH}zsff/images/special01.png">
  471. <div>首页</div>
  472. </div>
  473. </a>
  474. <a class="link" href="javascript:;" @click="customerService">
  475. <div class="cont">
  476. <img src="{__WAP_PATH}zsff/images/special02.png">
  477. <div>客服</div>
  478. </div>
  479. </a>
  480. <a v-if="(special.pay_type == 1 && special.type == 4) || special.money > 0" class="link" href="javascript:;"
  481. @click="OpenPay(1)">
  482. <div class="cont">
  483. <img src="{__WAP_PATH}zsff/images/special03.png">
  484. <div>送朋友</div>
  485. </div>
  486. </a>
  487. <div class="wrap">
  488. <div class="video_footer_btn acea-row" :class="special.pay_type == 1 ? '': 'item2'">
  489. <div class="video_footer_btn_left acea-row row-column row-center-wrapper" v-if="(special.is_pink && ((special.member_pay_type == 1 && isMember == 1) || isMember == 0))" @click="OpenPay(3)">
  490. <span class="video_footer_btn_left_pic">¥{{special.pink_money}}</span>
  491. <span class="video_footer_btn_left_num">{{special.pink_number}}人团</span>
  492. </div>
  493. <div class="video_footer_btn_right acea-row" :class="(special.is_pink == 0 || (special.is_pink && isMember == 1 && special.member_pay_type == 0)) ? 'on':''" v-if="special.type == 4">
  494. <span class="acea-row row-center-wrapper video_footer_btn_left_pic" style="flex: 1;" @click="OpenPay(6)" v-if="special.pay_type == 0 || (special.member_pay_type == 0 && isMember) || is_pay">进入直播间</span>
  495. <span class="acea-row row-center-wrapper video_footer_btn_left_pic" style="flex: 1;" @click="OpenPay(2)" v-if="isMember == 1 && special.member_pay_type == 1">¥{{special.member_money}}</span>
  496. <span class="acea-row row-center-wrapper video_footer_btn_left_pic" style="flex: 1;" @click="OpenPay(2)" v-if="isMember == 0 && special.pay_type == 1">¥{{special.money}}</span>
  497. </div>
  498. <div class="video_footer_btn_right acea-row" :class="(special.is_pink == 0 || (special.is_pink && isMember == 1 && special.member_pay_type == 0)) ? 'on':''" v-if="special.type != 4">
  499. <span v-if="special.pay_type == 0 || (special.member_pay_type == 0 && isMember) || is_pay" @click="OpenPay(5)" class="acea-row row-center-wrapper video_footer_btn_left_pic" style="flex: 1;">免费学习</span>
  500. <span v-if="isMember == 1 && special.member_pay_type == 1" @click="OpenPay(2)" class="acea-row row-center-wrapper video_footer_btn_left_pic" style="flex: 1;">¥{{special.member_money}}</span>
  501. <span v-if="isMember == 0 && special.pay_type == 1" @click="OpenPay(2)" class="acea-row row-center-wrapper video_footer_btn_left_pic" style="flex: 1;">¥{{special.money}}</span>
  502. </div>
  503. </div>
  504. </div>
  505. </footer>
  506. <footer class="acea-row row-wrap-all" ref="storeMenu" v-if="is_pay==true && is_partake==false && is_gift==false && paid && isPink==false">
  507. <a class="link" href="{:Url('wap/index/index')}">
  508. <div class="cont">
  509. <img src="{__WAP_PATH}zsff/images/special01.png">
  510. <div>首页</div>
  511. </div>
  512. </a>
  513. <a class="link" href="javascript:;" @click="customerService">
  514. <div class="cont">
  515. <img src="{__WAP_PATH}zsff/images/special02.png">
  516. <div>客服</div>
  517. </div>
  518. </a>
  519. <a v-if="(special.pay_type == 1 && special.type == 4) || special.money > 0" class="link" href="javascript:;" @click="OpenPay(1)">
  520. <div class="cont">
  521. <img src="{__WAP_PATH}zsff/images/special03.png">
  522. <div>送朋友</div>
  523. </div>
  524. </a>
  525. <div class="wrap">
  526. <div class="video_footer_btn acea-row">
  527. <div class="video_footer_btn_right acea-row row-column row-center-wrapper on" v-if="special.type != 4" @click="OpenPay(5)">
  528. <span class="video_footer_btn_left_pic">去学习</span>
  529. </div>
  530. <div class="video_footer_btn_right acea-row row-column row-center-wrapper on" v-if="special.type == 4" @click="OpenPay(6)">
  531. <span class="video_footer_btn_left_pic">进入直播间</span>
  532. </div>
  533. </div>
  534. </div>
  535. </footer>
  536. <footer class="acea-row row-wrap-all" v-if="isPink" ref="storeMenu">
  537. <a class="link" href="{:Url('wap/index/index')}">
  538. <div class="cont">
  539. <img src="{__WAP_PATH}zsff/images/special01.png">
  540. <div>首页</div>
  541. </div>
  542. </a>
  543. <a class="link" href="javascript:;" @click="customerService">
  544. <div class="cont">
  545. <img src="{__WAP_PATH}zsff/images/special02.png">
  546. <div>客服</div>
  547. </div>
  548. </a>
  549. <a class="link" href="javascript:;" @click="OpenPay(1)">
  550. <div class="cont">
  551. <img src="{__WAP_PATH}zsff/images/special03.png">
  552. <div>送朋友</div>
  553. </div>
  554. </a>
  555. <div class="wrap">
  556. <div class="video_footer_btn acea-row">
  557. <a class="video_footer_btn_right acea-row row-column row-center-wrapper on" :href="goPink()">
  558. <span class="video_footer_btn_left_pic">查看拼课详情</span>
  559. </a>
  560. </div>
  561. </div>
  562. </footer>
  563. <footer class="acea-row row-wrap-all" v-if="is_partake" ref="storeMenu">
  564. <a class="link" href="{:Url('wap/index/index')}">
  565. <div class="cont">
  566. <img src="{__WAP_PATH}zsff/images/special01.png">
  567. <div>首页</div>
  568. </div>
  569. </a>
  570. <a class="link" href="javascript:;" @click="customerService">
  571. <div class="cont">
  572. <img src="{__WAP_PATH}zsff/images/special02.png">
  573. <div>客服</div>
  574. </div>
  575. </a>
  576. <div class="wrap">
  577. <div class="video_footer_btn acea-row item2">
  578. <a class="video_footer_btn_left acea-row row-column row-center-wrapper" :href="getPartakePinkUrl()">
  579. <span class="video_footer_btn_left_pic">开团</span>
  580. </a>
  581. <div class="video_footer_btn_right acea-row row-column row-center-wrapper" @click="OpenPay(3)">
  582. <span class="video_footer_btn_left_pic">参团</span>
  583. </div>
  584. </div>
  585. </div>
  586. </footer>
  587. <footer class="acea-row row-middle" v-if="is_gift" ref="storeMenu">
  588. <a class="link" href="{:Url('wap/index/index')}">
  589. <div class="cont">
  590. <img src="{__WAP_PATH}zsff/images/special01.png">
  591. <div>首页</div>
  592. </div>
  593. </a>
  594. <a class="link" href="javascript:;" @click="customerService">
  595. <div class="cont">
  596. <img src="{__WAP_PATH}zsff/images/special02.png">
  597. <div>客服</div>
  598. </div>
  599. </a>
  600. <div class="wrap">
  601. <div class="video_footer_btn acea-row">
  602. <div class="video_footer_btn_right acea-row row-column row-center-wrapper on" @click="OpenPay(4)">
  603. <span class="video_footer_btn_left_pic">领取课程</span>
  604. </div>
  605. </div>
  606. </div>
  607. </footer>
  608. <div class="groupCode" :hidden="open">
  609. <div class="code"><img :src="special.service_code"></div>
  610. <div class="codeTip">长按扫一扫<br>加客服好友进群哦</div>
  611. </div>
  612. <div class="mask" style="align-items:center;display: flex;" v-show="is_code" @click="is_code=false">
  613. <img :src="wechat_qrcode" alt="" style="width: 5rem;height: 5rem;margin: 0 auto;">
  614. </div>
  615. <div class="mask" @touchmove.prevent :hidden="open" @click="open=true"></div>
  616. <payment @change="changeVal" :payment="payment" :money="money" :special_id="special.id" :iswechat="isWechat" :isYue="is_yue" :now_money="now_money" :isAlipay="is_alipay" :link_pay_uid="link_pay_uid" :pay_type_num="pay_type_num" :pink-id="pinkId"></payment>
  617. <enter :appear="appear" @change="changeVal" :url="url" :site_name="site_name"></enter>
  618. <div class="password" :class="password?'on':''">
  619. <div class="title">请输入密码</div>
  620. <input type="password" v-model="qr_password" autocomplete="off">
  621. <input type="hidden" v-model="studio_pwd" autocomplete="off">
  622. <div class="psdBnt" @click="goLive">确定</div>
  623. </div>
  624. <div class="mask" v-show="password" @touchmove.prevent @click="password = false "></div>
  625. </div>
  626. {/block}
  627. {block name='foot'}
  628. <script type="text/javascript">
  629. var swiperlist={$swiperlist},special={$special},record={$record},count={$count},pinkUser={$pinkUser},pinkIngList={$pinkIngList},pinkId={$pinkId},
  630. orderId='{$orderId ? $orderId : ""}',link_pay_uid={$link_pay_uid},wechat_qrcode='{$code_url}',is_yue={$is_yue ? 'true' : 'false'},is_alipay={$is_alipay ? 'true' : 'false'},
  631. isWechat={$isWechat ? 'true' : 'false'},isPay={$isPay ? 'true':'false'},partake={$partake},gift={$gift},now_money={$now_money},
  632. link_pay={$link_pay},isPink={$isPink ? 'true':'false'},BarrageShowTime={$BarrageShowTime ? $BarrageShowTime : 5},
  633. barrage_index={$barrage_index ? $barrage_index : 0},uid={$userInfo['uid'] ? $userInfo['uid']:0},liveInfo={$liveInfo},site_name = '{$Auth_site_name}',isMember={$is_member};
  634. window.overallShare = false;
  635. require(['vue', 'helper', 'store', 'special-type', 'reg-verify', '{__WAP_PATH}zsff/js/payment.js', '{__WAP_PATH}zsff/js/enter.js', '{__WAP_PATH}zsff/js/shortcut.js'], function (Vue, $h, app, specialType) {
  636. new Vue({
  637. el: '#app',
  638. filters: {
  639. serial: function (value) {
  640. return value < 9 ? '0' + (value + 1) : value + 1;
  641. }
  642. },
  643. data: {
  644. parentActive: 0,
  645. site_name: site_name,
  646. RecordId: '',
  647. count: count,
  648. special: special,
  649. pinkUser: pinkUser,
  650. swiperlist: swiperlist,
  651. pinkIngList: pinkIngList,
  652. otherTaskList: [],
  653. columnTaskList: [],
  654. liveTaskList: [],
  655. cloumnNavlist: [{ 'title': '详情' }, { 'title': '目录' }, { 'title': '套餐' }],
  656. otherNavlist: [{ 'title': '详情' }, { 'title': '目录' }],
  657. liveNavlist: [{ 'title': '直播介绍' }, { 'title': '回放目录' }],
  658. active: 0,
  659. open: true,
  660. payment: true,
  661. appear: true,
  662. is_pay: isPay,
  663. isMember: isMember,
  664. otherLoading: false,
  665. columnLoading: false,
  666. liveLoading: false,
  667. otherLoadend: false,
  668. columnLoadend: false,
  669. liveLoadend: false,
  670. otherLoaded:false,
  671. columnLoaded:false,
  672. liveLoaded:false,
  673. pay_type_num: -1,
  674. pinkId: pinkId || 0,
  675. pinkInfo: {
  676. pinkT: {
  677. difftime: { hour: "00", minute: "00", second: "00" }
  678. }
  679. },
  680. Barragelist: [],
  681. otherLoadTitle: '上拉加载更多',
  682. columnLoadTitle: '上拉加载更多',
  683. liveLoadTitle: '上拉加载更多',
  684. money: special.money,
  685. where: {
  686. page: 1,
  687. limit: 10,
  688. special_id: special.id || 0,
  689. source_id: 0,
  690. },
  691. orderId: null,
  692. is_partake: false,
  693. is_gift: false,
  694. paid: isPay,
  695. link_pay_uid: 0,
  696. wechat_qrcode: wechat_qrcode,
  697. is_code: false,
  698. isWechat: isWechat,
  699. is_live: special.is_live,
  700. url: isWechat ? $h.U({ c: 'index', a: 'login' }) : $h.U({ c: 'login', a: 'phone_check' }),
  701. isPink: isPink,
  702. barrageStatus: true,
  703. num: barrage_index,
  704. stream_name: liveInfo.stream_name || '',
  705. password: false,
  706. liveInfo: liveInfo,
  707. qr_password: '',
  708. studio_pwd: liveInfo.studio_pwd,
  709. is_alipay: is_alipay, //支付宝是否开启
  710. is_yue: is_yue, //余额是否开启
  711. now_money: now_money, //余额
  712. lecturer: null,
  713. specialType: specialType,
  714. topFocus: true,
  715. record: record,
  716. scrollData: []
  717. },
  718. watch: {
  719. active: function (n) {
  720. var that = this;
  721. if (n == 1 && that.special.type != 4 && that.special.type != 5) {
  722. this.getCourseList();
  723. }
  724. if (n == 1 && that.special.type == 4) {
  725. this.getLiveTask();
  726. }
  727. }
  728. },
  729. created: function () {
  730. this.CountDown({ name: 'pinkIngList', time_name: "stop_time" });
  731. this.getLecturer();
  732. },
  733. mounted: function () {
  734. var that = this;
  735. this.$nextTick(function () {
  736. $h.EventUtil.listenTouchDirection(document, function () {
  737. if (this.active == 1) {
  738. if (this.special.type == 4) {
  739. this.getLiveTask();
  740. } else if (this.special.type == 5) {
  741. this.getCourseList();
  742. }
  743. } else if (this.active == 2) {
  744. this.getCourseList();
  745. }
  746. }.bind(this));
  747. mapleWx($jssdk(), function () {
  748. this.onMenuShareAll({
  749. title: that.special.title,
  750. desc: that.special.abstract,
  751. imgUrl: that.special.image,
  752. link: location.href.indexOf('?') == -1 ? location.href + '?spread_uid=' + uid : location.href + '&spread_uid=' + uid,
  753. });
  754. });
  755. $('.swiper-conter').append('<div style="height:1.5rem"></div>');
  756. setTimeout(function () {
  757. new Swiper('.banner', {
  758. pagination: '.swiper-pagination',
  759. paginationClickable: false,
  760. autoplay: 2500,
  761. speed: 1000,
  762. autoplayDisableOnInteraction: false,
  763. observer: true,
  764. observeParents: true,
  765. });
  766. }, 500);
  767. switch (location.hash) {
  768. case '#tash':
  769. if (that.special.type != 4) that.active = 1;
  770. $('body,html').animate({ scrollTop: $(that.$refs.list).offset().top }, 800);
  771. break;
  772. case '#act1':
  773. that.active = 0;
  774. $('body,html').animate({ scrollTop: $(that.$refs.list).offset().top }, 800);
  775. break;
  776. case '#act2':
  777. if (that.special.type != 4) that.active = 1;
  778. $('body,html').animate({ scrollTop: $(that.$refs.list).offset().top }, 800);
  779. break;
  780. case '#partake':
  781. that.is_partake = true;
  782. break;
  783. case '#gift':
  784. that.is_gift = true;
  785. break;
  786. case '#link_pay':
  787. that.link_pay_uid = link_pay_uid;
  788. break;
  789. }
  790. if (partake) that.is_partake = true;
  791. if (gift) that.is_gift = true;
  792. if (link_pay) that.link_pay_uid = link_pay_uid;
  793. that.barrage();
  794. });
  795. switch (this.special.type) {
  796. case 5:
  797. this.getCourseList();
  798. this.getCloumnTask();
  799. break;
  800. case 4:
  801. this.getLiveTask();
  802. break;
  803. case 1:
  804. case 2:
  805. case 3:
  806. case 6:
  807. this.getCourseList();
  808. break;
  809. }
  810. if (that.pinkId) {
  811. app.baseGet($h.U({ c: 'special', a: 'get_pink_info', q: { pinkId: that.pinkId } }), function (res) {
  812. that.pinkInfo = res.data.data;
  813. that.CountDown({ name: 'pinkInfo.pinkT', time_name: 'stop_time' });
  814. }, function (msg) {
  815. $h.showMsg(msg, function () {
  816. window.location.href = $h.U({ c: 'special', a: 'details', q: { id: that.special.id } });
  817. });
  818. });
  819. }
  820. app.baseGet($h.U({ c: 'special', a: 'groupLists', q: { special_id: special.id } }), function (res) {
  821. console.log('123456',res);
  822. that.scrollData = res.data.data;
  823. that.$nextTick(function () {
  824. new Swiper('#scroll', {
  825. direction: "vertical",
  826. speed: 1000,
  827. autoplay: 2500,
  828. loop: true,
  829. observer: true,
  830. observeParents: true,
  831. autoplayDisableOnInteraction: false
  832. });
  833. });
  834. }, function (err) {
  835. console.log(err);
  836. });
  837. var width = $('.swiper-conter').width();
  838. $('.video-ue').each(function (index) {
  839. var id = "video-ue-" + index, videoUrl = $(this).attr('src');
  840. $(this).attr('id', id);
  841. $(this).children('video').attr('src', videoUrl);
  842. $(this).append("<source src='" + videoUrl + "' type='video/mp4' />")
  843. $(this).addClass("video-js");
  844. videojs(id, {}, function () {
  845. this.width(width);
  846. this.src(videoUrl);
  847. });
  848. });
  849. },
  850. methods: {
  851. show: function(item) {
  852. item.active = !item.active
  853. },
  854. // 讲师详情
  855. getLecturer: function () {
  856. var that = this;
  857. $h.loadFFF();
  858. app.baseGet($h.U({
  859. c: 'Special',
  860. a: 'lecturerDetails',
  861. q: {
  862. id: that.special.lecturer_id
  863. }
  864. }), function (res) {
  865. var obj = res.data.data;
  866. $h.loadClear();
  867. that.lecturer = obj;
  868. });
  869. },
  870. goLive: function () {
  871. if (!this.qr_password) return $h.showMsg('请输入密码');
  872. if (this.qr_password != this.studio_pwd) return $h.showMsg('密码不正确');
  873. document.cookie = this.stream_name + "studio_pwd" + "=" + this.studio_pwd + ";expires=7200" + ";path=/";
  874. console.log(this.stream_name + "stuido_pwd" + "=" + this.studio_pwd);
  875. window.location.href = $h.U({ c: 'live', a: 'index', q: { stream_name: this.stream_name } });
  876. },
  877. barrage: function () {
  878. var that = this;
  879. if (typeof BarrageShowTime == 'string') BarrageShowTime = parseInt(BarrageShowTime);
  880. BarrageShowTime = BarrageShowTime * 1000;
  881. app.baseGet($h.U({ c: 'special', a: 'get_barrage_list', q: { special_id: special.id } }), function (res) {
  882. that.$set(that, 'Barragelist', res.data.data);
  883. that.Barragelist=that.Barragelist || [];
  884. var len = that.Barragelist.length;
  885. if (!len) return;
  886. setInterval(function () {
  887. that.num= that.num +1;
  888. that.num= that.num >= len ? 0 : that.num;
  889. that.num= that.num < 0 ? 0 : that.num;
  890. that.barrageStatus = !that.barrageStatus;
  891. app.baseGet($h.U({ c: 'special', a: 'set_barrage_index', q: { index: that.num } }));
  892. }, BarrageShowTime);
  893. });
  894. },
  895. goPink: function () {
  896. return $h.U({ c: 'special', a: 'order_pink', q: { pink_id: pinkId } });
  897. },
  898. follow: function () {
  899. return $h.openImage(wechat_qrcode);
  900. },
  901. getPartakePinkUrl: function () {
  902. return $h.U({ c: 'special', a: 'details', q: { id: this.special.id } });
  903. },
  904. pay_order: function (data) {
  905. this.orderId = data.result.orderId || '';
  906. switch (data.status) {
  907. case "PAY_ERROR": case 'ORDER_EXIST': case 'ORDER_ERROR':
  908. this.extendOrder(data.msg);
  909. break;
  910. case 'WECHAT_PAY':
  911. this.wechatPay(data.result.jsConfig);
  912. break;
  913. case 'SUCCESS':
  914. this.successOrder(data.msg);
  915. break;
  916. case 'ZHIFUBAO_PAY':
  917. window.location.href = $h.U({ c: 'Alipay', a: 'index', q: { info: data.result, params: 'special' } });
  918. break;
  919. }
  920. },
  921. wechatPay: function (config) {
  922. var that = this;
  923. mapleWx($jssdk(), function () {
  924. this.chooseWXPay(config, function () {
  925. that.successOrder();
  926. }, {
  927. fail: that.extendOrder,
  928. cancel: that.extendOrder
  929. });
  930. });
  931. },
  932. successOrder: function (msg) {
  933. var that = this;
  934. $h.showMsg({
  935. title: msg ? msg : '支付成功',
  936. icon: 'success',
  937. success: function () {
  938. switch (parseInt(that.pay_type_num)) {
  939. case 1:
  940. window.location.href = $h.U({ c: 'special', a: 'gift_special', q: { orderId: that.orderId } });
  941. break;
  942. case 2:
  943. that.paid = true;
  944. that.is_pay = true;
  945. that.payment = true;
  946. that.updateMaterialStatus();
  947. break;
  948. case 3:
  949. window.location.href = $h.U({ c: 'special', a: 'pink', q: { orderId: that.orderId } });
  950. break;
  951. }
  952. }
  953. });
  954. },
  955. updateMaterialStatus:function(){
  956. var that=this;
  957. that.otherLoading=false;
  958. that.otherLoaded=false;
  959. that.where.page=1;
  960. that.$set(that, 'otherTaskList', []);
  961. that.getCourseList();
  962. },
  963. extendOrder: function (msg) {
  964. var that = this;
  965. var msg = msg ? msg : '支付失败';
  966. $h.showMsg({
  967. title: typeof msg == 'object' ? '支付失败' : msg,
  968. success: function () {
  969. if (that.orderId) app.baseGet($h.U({ c: 'special', a: 'del_order', q: { orderId: that.orderId } }));
  970. }
  971. })
  972. },
  973. play: function (item) {
  974. if (item.pay_status == 1 && this.is_pay == false) return $h.showMsg('请先购买~');
  975. if (item.is_pay == 2) {
  976. this.password = true;
  977. this.studio_pwd = item.studio_pwd;
  978. this.stream_name = item.stream_name;
  979. return;
  980. }
  981. var that = this;
  982. if (that.special.type == 5) {
  983. switch (that.active) {
  984. case 1:
  985. this.goPlayTsak(item);
  986. break;
  987. case 2:
  988. location.href = $h.U({ c: "special", a: "details", q: { id: item.id } });
  989. break;
  990. }
  991. } else {
  992. this.goPlayTsak(item);
  993. }
  994. },
  995. //获取课程列表
  996. getCourseList: function () {
  997. var that = this;
  998. if (this.otherLoading) return;
  999. if (this.otherLoaded) return;
  1000. this.otherLoadTitle = '';
  1001. this.otherLoading = true;
  1002. app.baseGet($h.U({ c: 'special', a: 'get_course_list', q: this.where }), function (res) {
  1003. var data = res.data.data,
  1004. list = data.list || [],
  1005. taskList = [];
  1006. list.forEach(function (item, index) {
  1007. item.active = index ? false : true;
  1008. })
  1009. taskList = $h.SplitArray(list, that.otherTaskList);
  1010. that.where.page = data.page;
  1011. that.otherLoaded = list.length < that.where.limit;
  1012. that.otherLoadTitle = that.otherLoaded ? '我也是有底线的' : '上拉加载更多';
  1013. that.otherLoading = false;
  1014. that.$set(that, 'otherTaskList', taskList);
  1015. that.$nextTick(function () {
  1016. that.bScrollInit();
  1017. });
  1018. }, function (res) {
  1019. that.otherLoading = false;
  1020. that.otherLoadTitle = '加载更多';
  1021. });
  1022. },
  1023. //获取专栏专题素材列表
  1024. getCloumnTask: function () {
  1025. var that = this;
  1026. if (this.columnLoading) return;
  1027. if (this.columnLoaded) return;
  1028. this.columnLoadTitle = '';
  1029. this.columnLoading = true;
  1030. app.baseGet($h.U({ c: 'special', a: 'get_cloumn_task', q: this.where }), function (res) {
  1031. var data = res.data.data;
  1032. var list = data.list || [];
  1033. var taskList = $h.SplitArray(list, that.columnTaskList);
  1034. that.where.page = data.page;
  1035. that.columnLoaded = list.length < that.where.limit;
  1036. that.columnLoadTitle = that.columnLoaded ? '我也是有底线的' : '上拉加载更多';
  1037. that.columnLoading = false;
  1038. that.$set(that, 'columnTaskList', taskList);
  1039. that.$nextTick(function () {
  1040. that.bScrollInit();
  1041. });
  1042. }, function (res) {
  1043. that.columnLoading = false;
  1044. that.columnLoadTitle = '加载更多';
  1045. });
  1046. },
  1047. //获取直播回放
  1048. getLiveTask: function () {
  1049. var that = this;
  1050. if (this.liveLoading) return;
  1051. if (this.liveLoaded) return;
  1052. this.liveLoadTitle = '';
  1053. this.liveLoading = true;
  1054. app.baseGet($h.U({ c: 'live', a: 'get_live_record_list', q: { special_id: that.special.id,page:that.where.page,limit:that.where.limit } }), function (res) {
  1055. var data = res.data.data.data;
  1056. var list = data || [];
  1057. var taskList = $h.SplitArray(list, that.liveTaskList);
  1058. that.where.page = that.where.page + 1;
  1059. that.liveLoaded = list.length < that.where.limit;
  1060. that.liveLoadTitle = that.liveLoaded ? '我也是有底线的' : '上拉加载更多';
  1061. that.liveLoading = false;
  1062. that.$set(that, 'liveTaskList', taskList);
  1063. that.$nextTick(function () {
  1064. that.bScrollInit();
  1065. });
  1066. }, function (res) {
  1067. that.liveLoading = false;
  1068. that.liveLoadTitle = '加载更多';
  1069. });
  1070. },
  1071. //播放素材
  1072. goPlayTsak: function (item) {
  1073. var that = this;
  1074. app.baseGet($h.U({ c: 'special', a: 'get_task_link', q: { task_id: item.id, special_id: item.special_id } }), function (res) {
  1075. if (that.special.type == 4) {
  1076. window.location.href = $h.U({ c: 'live', a: 'index', q: { stream_name: item.stream_name, special_id: item.special_id, live_id: item.live_id } });
  1077. } else {
  1078. app.baseGet($h.U({ c: 'special', a: 'play_num', q: { task_id: item.id, special_id: item.special_id } }),function (res) {
  1079. if(res.data.code==200){
  1080. if (that.special.type == 1 || item.type==1) {
  1081. window.location.href = $h.U({ c: "special", a: "task_text_info", q: { id: item.id, specialId: item.special_id } });
  1082. } else {
  1083. window.location.href = $h.U({ c: "special", a: "task_info", q: { id: item.id, specialId: item.special_id } });
  1084. }
  1085. }else{
  1086. return $h.showMsg('更新数据有误!');
  1087. }
  1088. });
  1089. }
  1090. }, function (err) {
  1091. return $h.pushMsgOnce(err);
  1092. })
  1093. },
  1094. //滑动底部加载
  1095. bScrollInit: function () {
  1096. var that = this;
  1097. $h.EventUtil.listenTouchDirection(document, function () {
  1098. if (that.special.type == 5) {
  1099. that.columnLoading == false && that.getCloumnTask();
  1100. } else {
  1101. that.otherLoading == false && that.getCourseList();
  1102. }
  1103. }, false);
  1104. },
  1105. //获取参加拼团跳转链接
  1106. getAttendUrl: function (pink_id, special_id) {
  1107. return $h.U({ c: 'special', a: 'details', q: { id: special_id, pinkId: pink_id } }) + '#partake';
  1108. },
  1109. //收藏和取消收藏
  1110. collect: function () {
  1111. app.baseGet($h.U({ c: 'special', a: 'collect', q: { id: this.special.id } }), function (res) {
  1112. if (this.special.collect)
  1113. $h.pushMsgOnce('取消收藏成功');
  1114. else
  1115. $h.pushMsgOnce('收藏成功');
  1116. this.special.collect = this.special.collect ? false : 1;
  1117. }.bind(this));
  1118. },
  1119. customerService:function(){
  1120. app.baseGet($h.U({ c: 'index', a: 'user_login' }), function (res) {
  1121. window.location.href = $h.U({ c: 'service', a: 'service_list' });
  1122. }.bind(this), function (res) {
  1123. this.appear = false;
  1124. }.bind(this));
  1125. },
  1126. //打开支付插件,并检测登录状态,没有登录,打开登录插件
  1127. OpenPay: function (is_pink) {
  1128. this.pay_type_num = is_pink;
  1129. app.baseGet($h.U({ c: 'index', a: 'user_login' }), function (res) {
  1130. switch (is_pink) {
  1131. case 1:
  1132. this.money = (this.isMember && this.special.member_pay_type == 1) ? this.special.member_money : this.special.money;
  1133. this.payment = false;
  1134. break;
  1135. case 2:
  1136. if (this.isMember) {
  1137. this.money = this.special.member_pay_type ? this.special.member_money : 0;
  1138. } else {
  1139. this.money = this.special.money;
  1140. }
  1141. this.payment = false;
  1142. break;
  1143. case 3:
  1144. this.money = this.special.pink_money;
  1145. this.payment = false;
  1146. break;
  1147. case 4:
  1148. this.payment = true;
  1149. app.baseGet($h.U({ c: 'special', a: 'receive_gift', q: { orderId: orderId } }), function (res) {
  1150. $h.showMsg({
  1151. title: res.data.msg,
  1152. icon: 'success',
  1153. success: function () {
  1154. window.location.href = $h.U({ c: 'index', c: 'index' });
  1155. }
  1156. })
  1157. });
  1158. break;
  1159. case 5:
  1160. location.hash = '#tash';
  1161. $('body,html').animate({ scrollTop: $(this.$refs.list).offset().top }, 800);
  1162. this.is_pay = true;
  1163. this.paid = false;
  1164. this.active = 1;
  1165. break;
  1166. case 6:
  1167. if (this.liveInfo.studio_pwd && this.special.pay_type == 2) {
  1168. this.password = true;
  1169. } else {
  1170. window.location.href = $h.U({
  1171. c: 'live',
  1172. a: 'index',
  1173. q: { stream_name: this.stream_name, record_id: this.RecordId }
  1174. });
  1175. }
  1176. break;
  1177. }
  1178. }.bind(this), function (res) {
  1179. this.appear = false;
  1180. }.bind(this));
  1181. },
  1182. ReceiveGift: function () {
  1183. var that = this;
  1184. if (!orderId) return;
  1185. app.baseGet($h.U({ c: 'special', a: 'receive_gift', q: { orderId: orderId } }), function (res) {
  1186. $h.showMsg({
  1187. title: res.data.msg,
  1188. icon: 'success',
  1189. success: function () {
  1190. window.location.href = $h.U({ c: 'index', a: 'index' });
  1191. }
  1192. })
  1193. });
  1194. },
  1195. //关闭登录
  1196. loginClose: function (value) {
  1197. this.appear = value;
  1198. },
  1199. //关闭支付
  1200. payClose: function (value) {
  1201. this.payment = value;
  1202. },
  1203. //登录完成回调事件
  1204. logComplete: function () {
  1205. var that=this;
  1206. that.appear = true;
  1207. app.baseGet($h.U({ c: 'special', a: 'isMember' }), function (res) {
  1208. var isMember=res.data.data.is_member;
  1209. that.isMember=isMember;
  1210. that.now_money=res.data.data.now_money;
  1211. switch (that.pay_type_num) {
  1212. case 1:
  1213. that.money = (isMember && that.special.member_pay_type == 1) ? that.special.member_money : that.special.money;
  1214. break;
  1215. case 2:
  1216. if (isMember) {
  1217. that.money = that.special.member_pay_type ? that.special.member_money : 0;
  1218. } else {
  1219. that.money = that.special.money;
  1220. }
  1221. break;
  1222. case 3:
  1223. that.money = that.special.pink_money;
  1224. break;
  1225. }
  1226. });
  1227. if (that.pay_type_num != 4) that.payment = false;
  1228. if (that.pay_type_num == 6) that.payment = true;
  1229. },
  1230. //所有插件回调处理事件
  1231. changeVal: function (opt) {
  1232. if (typeof opt != 'object') opt = {};
  1233. var action = opt.action || '';
  1234. var value = opt.value || '';
  1235. this[action] && this[action](value);
  1236. },
  1237. CountDown: function (opt, that) {
  1238. if (typeof opt != 'object') opt = {};
  1239. var name = opt.name || '', value = null, that = that ? that : this;
  1240. if (name.indexOf('.') === -1)
  1241. value = that[name];
  1242. else {
  1243. var nameArray = name.split('.');
  1244. value = that[nameArray[0]][nameArray[1]];
  1245. }
  1246. var tiem = opt.time || 1000, timeName = opt.time_name || 'datatime', strName = { hour: "00", minute: "00", second: "00" },
  1247. outputName = opt.output || 'difftime';
  1248. if (!name) return false;
  1249. if (value === undefined) return false;
  1250. opt.nowTime = function () {
  1251. if (Array.isArray(value)) {
  1252. for (var i = 0; i < value.length; i++) {
  1253. var intDiff = value[i][timeName] - Date.parse(new Date()) / 1000;//获取数据中的时间戳的时间差;
  1254. var days = 0, hour = 0, minute = 0, second = 0;
  1255. if (intDiff > 0) {
  1256. hour = Math.floor(intDiff / (60 * 60)) - (days * 24);
  1257. minute = Math.floor(intDiff / 60) - (hour * 60);
  1258. second = Math.floor(intDiff) - (hour * 60 * 60) - (minute * 60);
  1259. if (hour <= 9) hour = '0' + hour;
  1260. if (minute <= 9) minute = '0' + minute;
  1261. if (second <= 9) second = '0' + second;
  1262. strName = {
  1263. hour: hour,
  1264. minute: minute,
  1265. second: second
  1266. };
  1267. } else {
  1268. strName = {
  1269. hour: "00",
  1270. minute: "00",
  1271. second: "00"
  1272. };
  1273. }
  1274. value[i][outputName] = strName;
  1275. }
  1276. that.$set(that, name, value);
  1277. } else {
  1278. var intDiff = value[timeName] - Date.parse(new Date()) / 1000;
  1279. var days = 0, hour = 0, minute = 0, second = 0;
  1280. if (intDiff > 0) {
  1281. hour = Math.floor(intDiff / (60 * 60)) - (days * 24);
  1282. minute = Math.floor(intDiff / 60) - (hour * 60);
  1283. second = Math.floor(intDiff) - (hour * 60 * 60) - (minute * 60);
  1284. if (hour <= 9) hour = '0' + hour;
  1285. if (minute <= 9) minute = '0' + minute;
  1286. if (second <= 9) second = '0' + second;
  1287. strName = {
  1288. hour: hour,
  1289. minute: minute,
  1290. second: second
  1291. };
  1292. } else {
  1293. strName = {
  1294. hour: "00",
  1295. minute: "00",
  1296. second: "00"
  1297. };
  1298. }
  1299. if (name.indexOf('.') === -1)
  1300. that.$set(that[name], outputName, strName);
  1301. else {
  1302. var nameArray = name.split('.');
  1303. that.$set(that[nameArray[0]][nameArray[1]], outputName, strName);
  1304. }
  1305. }
  1306. };
  1307. opt.nowTime();
  1308. setInterval(opt.nowTime, tiem);
  1309. },
  1310. //播放回放
  1311. playBackRecord: function (item) {
  1312. this.RecordId = item;
  1313. this.OpenPay(6);
  1314. },
  1315. },
  1316. });
  1317. })
  1318. </script>
  1319. {/block}