teacher_detail.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. <!-- +---------------------------------------------------------------------- -->
  2. <!-- | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -->
  3. <!-- +---------------------------------------------------------------------- -->
  4. <!-- | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved. -->
  5. <!-- +---------------------------------------------------------------------- -->
  6. <!-- | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -->
  7. <!-- +---------------------------------------------------------------------- -->
  8. <!-- | Author: CRMEB Team <admin@crmeb.com> -->
  9. <!-- +---------------------------------------------------------------------- -->
  10. {extend name="public/container" /}
  11. {block name="title"}讲师详情{/block}
  12. {block name="head"}
  13. <style>
  14. .problem {
  15. padding: .3rem;
  16. }
  17. .problem .item {
  18. display: block;
  19. padding: .3rem;
  20. border-radius: .12rem;
  21. margin-top: .3rem;
  22. box-shadow: 0 .03rem .2rem 1px rgba(0, 0, 0, 0.07);
  23. }
  24. .problem .item:first-child {
  25. margin-top: 0;
  26. }
  27. .problem .title {
  28. overflow: hidden;
  29. white-space: nowrap;
  30. text-overflow: ellipsis;
  31. font-size: .3rem;
  32. line-height: .42rem;
  33. color: #282828;
  34. }
  35. .problem .attribute {
  36. display: flex;
  37. justify-content: space-between;
  38. align-items: center;
  39. margin-top: .3rem;
  40. font-size: .22rem;
  41. color: #999999;
  42. }
  43. .problem .button {
  44. width: 1.2rem;
  45. height: .42rem;
  46. border-radius: .21rem;
  47. background-color: #191C6E;
  48. text-align: center;
  49. line-height: .42rem;
  50. color: #FFFFFF;
  51. }
  52. .question {
  53. padding: .3rem;
  54. }
  55. .question .item {
  56. display: flex;
  57. padding: .3rem .3rem .36rem;
  58. border-radius: .12rem;
  59. margin-top: .3rem;
  60. box-shadow: 0 .03rem .2rem 1px rgba(0, 0, 0, 0.07);
  61. }
  62. .question .item:first-child {
  63. margin-top: 0;
  64. }
  65. .question .image {
  66. width: 2.4rem;
  67. height: 1.35rem;
  68. border-radius: .1rem;
  69. }
  70. .question .text {
  71. flex: 1;
  72. display: flex;
  73. flex-direction: column;
  74. justify-content: space-between;
  75. margin-left: .2rem;
  76. }
  77. .question .title {
  78. display: -webkit-box;
  79. -webkit-box-orient: vertical;
  80. -webkit-line-clamp: 2;
  81. overflow: hidden;
  82. font-size: .3rem;
  83. line-height: .41rem;
  84. color: #333333;
  85. }
  86. .question .attribute {
  87. display: flex;
  88. justify-content: space-between;
  89. align-items: center;
  90. font-size: .22rem;
  91. color: #FF6B00;
  92. }
  93. .question .button {
  94. width: 1.2rem;
  95. height: .42rem;
  96. border-radius: .21rem;
  97. background-color: #191C6E;
  98. text-align: center;
  99. line-height: .42rem;
  100. color: #FFFFFF;
  101. }
  102. .teacher-detail .nav::-webkit-scrollbar {
  103. width: 0;
  104. }
  105. </style>
  106. {/block}
  107. {block name="content"}
  108. <div v-cloak id="app" class="teacher-detail">
  109. <div class="header">
  110. <div class="avatar">
  111. <img :src="lecturer.lecturer_head">
  112. </div>
  113. <a v-if="merId === lecturer.mer_id && lecturer.mer_id" :href="'{:url('spread/withdraw')}?mer_id=' + lecturer.mer_id" class="withdraw"><i
  114. class="iconfont icontixian"></i>提现</a>
  115. <!-- <button v-if="!(merId === lecturer.mer_id && lecturer.mer_id)" :class="{ followed: isFollow }" class="follow" @click="follow"><i v-show="!isFollow" class="iconfont icontianjia"></i>{{ isFollow ? '已关注' : '关注' }}</button> -->
  116. <div class="name">{{ lecturer.lecturer_name }}<a v-if="merId === lecturer.mer_id && lecturer.mer_id" :href="'{:url('merchant/info')}?mer_id=' + lecturer.mer_id">查看信息<i
  117. class="iconfont iconxiangyou"></i></a></div>
  118. <div class="info">{{ lecturer.explain }}</div>
  119. <div class="tags">
  120. <div v-for="label in lecturer.label" :key="label" class="tag">{{ label }}</div>
  121. </div>
  122. <ul v-if="merId === lecturer.mer_id && lecturer.mer_id">
  123. <li>
  124. <div>{{ total }}</div>
  125. <a :href="'{:url('merchant/income')}?mer_id=' + lecturer.mer_id">总收益<i class="iconfont iconxiangyou"></i></a>
  126. </li>
  127. <li>
  128. <div>{{ today }}</div>
  129. <div>今日收益</div>
  130. </li>
  131. <li>
  132. <div>{{ extract }}</div>
  133. <a :href="'{:url('merchant/income')}?active=2&mer_id=' + lecturer.mer_id">累计提现<i class="iconfont iconxiangyou"></i></a>
  134. </li>
  135. <li>
  136. <div>{{ gold }}</div>
  137. <a :href="'{:url('merchant/income')}?active=3&mer_id=' + lecturer.mer_id">金币收益<i class="iconfont iconxiangyou"></i></a>
  138. </li>
  139. </ul>
  140. </div>
  141. <div class="main">
  142. <div ref="nav" :class="{ fixed: isFixed }" class="nav">
  143. <div v-for="item in navList" :key="item.value" :class="{ active: navActive === item.value }" class="item" @click="navActive = item.value">
  144. {{ item.name }}</div>
  145. </div>
  146. <div v-show="navActive === 1" class="panel1" v-html="lecturer.introduction"></div>
  147. <div v-if="navActive === 2 && list.length" class="panel2">
  148. <a v-for="item in list" :key="item.id" :href="(item.is_light ? '{:url('special/single_details')}' : '{:url('special/details')}') + '?id=' + item.id" class="item">
  149. <div class="item-hd">
  150. <img :src="item.image">
  151. <div v-if="item.type === 1 || item.light_type === 1" class="tag">图文</div>
  152. <div v-else-if="item.type === 2 || item.light_type === 2" class="tag">音频</div>
  153. <div v-else-if="item.type === 3 || item.light_type === 3" class="tag">视频</div>
  154. <div v-else-if="item.type === 4" class="tag">直播</div>
  155. <div v-else-if="item.type === 5" class="tag">专栏</div>
  156. </div>
  157. <div class="item-bd">
  158. <div class="title">{{ item.title }}</div>
  159. <div class="tag-group"><span v-for="label in item.label" :key="label" class="tag">{{ label }}</span></div>
  160. <div class="money">¥<span>{{ item.money }}</span></div>
  161. </div>
  162. </a>
  163. </div>
  164. <div v-if="navActive === 3 && list.length" class="panel3">
  165. <a v-for="item in list" :key="item.id" :href="'{:url('special/data_details')}?id=' + item.id" class="item">
  166. <div class="item-hd">
  167. <img :src="item.image">
  168. </div>
  169. <div class="item-bd">
  170. <div class="title">{{ item.title }}</div>
  171. <div class="money">¥<span>{{ item.money }}</span></div>
  172. <div class="wrap">
  173. <div class="people">{{ item.ficti + item.sales }}人已下载</div>
  174. <div class="button">去下载</div>
  175. </div>
  176. </div>
  177. </a>
  178. </div>
  179. <div v-if="navActive === 4 && list.length" class="panel4">
  180. <a v-for="item in list" :key="item.id" :href="'{:url('special/activity_details')}?id=' + item.id" class="item">
  181. <div class="item-hd">
  182. <img :src="item.image">
  183. </div>
  184. <div class="item-bd">
  185. <div class="title">{{ item.title }}</div>
  186. <div class="time"><i class="iconfont iconshijian"></i>{{ item.time }}</div>
  187. <div class="wrap">
  188. <div class="money">¥<span>{{ item.price }}</span></div>
  189. <div class="people">{{ item.count }}人已报名</div>
  190. </div>
  191. </div>
  192. </a>
  193. </div>
  194. <div v-if="navActive === 5 && list.length" class="panel5">
  195. <a v-for="item in list" :key="item.id" :href="'{:url('store/detail')}?id=' + item.id" class="item">
  196. <div class="item-hd">
  197. <img :src="item.image">
  198. </div>
  199. <div class="item-bd">
  200. <div class="title">{{ item.store_name }}</div>
  201. <div class="wrap">
  202. <div class="money">¥<span>{{ item.price }}</span></div>
  203. <div class="sales">已售{{ item.sales }}件</div>
  204. </div>
  205. </div>
  206. </a>
  207. </div>
  208. <!-- 练习 -->
  209. <div v-if="navActive === 6" class="problem">
  210. <a v-for="item in problemList" :key="item.id" :href="'{:url('topic/problem_index')}?id=' + item.id" class="item">
  211. <div class="title">{{ item.title }}</div>
  212. <div class="attribute">
  213. <div>{{ item.fake_sales + item.answer }}人已答题</div>
  214. <div class="button">练习</div>
  215. </div>
  216. </a>
  217. <div v-if="!problemList.length && problemFinished" class="empty">
  218. <img src="{__WAP_PATH}zsff/images/empty.png">
  219. <div>暂无{{ navCurrent }}</div>
  220. </div>
  221. </div>
  222. <!-- 考试 -->
  223. <div v-if="navActive === 7" class="question">
  224. <a v-for="item in questionList" :key="item.id" :href="'{:url('special/question_index')}?id=' + item.id" class="item">
  225. <div>
  226. <img :src="item.image" class="image">
  227. </div>
  228. <div class="text">
  229. <div class="title">{{ item.title }}</div>
  230. <div class="attribute">
  231. <div>共{{ item.item_number }}题</div>
  232. <div class="button">答题</div>
  233. </div>
  234. </div>
  235. </a>
  236. <div v-if="!questionList.length && questionFinished" class="empty">
  237. <img src="{__WAP_PATH}zsff/images/empty.png">
  238. <div>暂无{{ navCurrent }}</div>
  239. </div>
  240. </div>
  241. <div v-if="!list.length && finished" class="empty">
  242. <img src="{__WAP_PATH}zsff/images/empty.png">
  243. <div>暂无{{ navCurrent }}</div>
  244. </div>
  245. </div>
  246. <base-login :login-show="loginShow" :site-name="site_name" @login-close="loginClose"></base-login>
  247. <quick-menu></quick-menu>
  248. </div>
  249. {/block}
  250. {block name="foot"}
  251. <script>
  252. require(['vue', 'helper', 'store', 'components/base-login/index', 'quick'], function (Vue, $h, store, BaseLogin) {
  253. var isWechat = '{$isWechat}';
  254. var uid = {$uid};
  255. var site_name = "{$Auth_site_name}";
  256. new Vue({
  257. el: '#app',
  258. components: {
  259. 'base-login': BaseLogin
  260. },
  261. data: {
  262. lecturer: {$lecturer},
  263. business: {$business},
  264. merId: {$mer_id},
  265. extract: 0,
  266. today: 0,
  267. total: 0,
  268. gold: 0,
  269. navList: [
  270. {
  271. name: '简介',
  272. value: 1
  273. },
  274. {
  275. name: '课程',
  276. value: 2
  277. },
  278. // {
  279. // name: '资料',
  280. // value: 3
  281. // },
  282. // {
  283. // name: '活动',
  284. // value: 4
  285. // },
  286. // {
  287. // name: '商品',
  288. // value: 5
  289. // },
  290. // {
  291. // name: '练习',
  292. // value: 6
  293. // },
  294. // {
  295. // name: '考试',
  296. // value: 7
  297. // },
  298. ],
  299. navActive: 1,
  300. page: 1,
  301. limit: 16,
  302. list: [],
  303. finished: false,
  304. isFixed: false,
  305. ticking: false,
  306. isFollow: false,
  307. loginShow: false,
  308. site_name: site_name,
  309. problemPage: 1,
  310. problemList: [],
  311. problemFinished: false,
  312. questionPage: 1,
  313. questionList: [],
  314. questionFinished: false
  315. },
  316. computed: {
  317. navCurrent: function () {
  318. for (var i = 0; i < this.navList.length; i++) {
  319. if (this.navList[i].value === this.navActive) {
  320. return this.navList[i].name;
  321. }
  322. }
  323. }
  324. },
  325. watch: {
  326. navActive: function (value) {
  327. this.page = 1;
  328. this.list = [];
  329. this.finished = false;
  330. switch (value) {
  331. case 2:
  332. this.lecturer_special_list();
  333. break;
  334. case 3:
  335. //this.lecturer_download_list();
  336. break;
  337. case 4:
  338. ///this.lecturer_event_list();
  339. break;
  340. case 5:
  341. //this.lecturer_store_list();
  342. break;
  343. case 6:
  344. //this.getProblemList();
  345. break;
  346. case 7:
  347. //this.getQuestionList();
  348. break;
  349. }
  350. }
  351. },
  352. created: function () {
  353. var vm = this;
  354. this.lecturer_income();
  355. if (isWechat) {
  356. mapleWx($jssdk(), function () {
  357. this.onMenuShareAll({
  358. title: vm.lecturer.lecturer_name,
  359. title: vm.lecturer.label.join(),
  360. imgUrl: vm.lecturer.lecturer_head,
  361. link: window.location.href + (window.location.search ? '&' : '?') + 'spread_uid=' + uid
  362. });
  363. });
  364. }
  365. $h.EventUtil.listenTouchDirection(document, function () {
  366. switch (vm.navActive) {
  367. case 2:
  368. vm.lecturer_special_list();
  369. break;
  370. case 3:
  371. //vm.lecturer_download_list();
  372. break;
  373. case 4:
  374. //vm.lecturer_event_list();
  375. break;
  376. case 5:
  377. //vm.lecturer_store_list();
  378. break;
  379. case 6:
  380. //vm.getProblemList();
  381. break;
  382. case 7:
  383. // vm.getQuestionList();
  384. break;
  385. }
  386. });
  387. window.addEventListener('scroll', function () {
  388. if (!vm.ticking) {
  389. window.requestAnimationFrame(function () {
  390. vm.ticking = false;
  391. vm.isFixed = document.documentElement.scrollTop >= vm.offsetTop
  392. });
  393. }
  394. vm.ticking = true;
  395. });
  396. store.baseGet($h.U({
  397. c: 'index',
  398. a: 'user_login'
  399. }), function () {
  400. vm.getIsFollow();
  401. }, function () {
  402. }, true);
  403. },
  404. mounted: function () {
  405. this.$nextTick(function () {
  406. this.offsetTop = this.$refs.nav.offsetTop;
  407. })
  408. },
  409. methods: {
  410. // 讲师名下课程
  411. lecturer_special_list: function () {
  412. var vm = this;
  413. if (this.finished) {
  414. return;
  415. }
  416. $h.loadFFF();
  417. store.baseGet($h.U({
  418. c: 'merchant',
  419. a: 'lecturer_special_list',
  420. q: {
  421. mer_id: this.lecturer.mer_id,
  422. id: this.lecturer.id,
  423. page: this.page,
  424. limit: this.limit
  425. }
  426. }), function (res) {
  427. $h.loadClear();
  428. var data = res.data.data;
  429. vm.list = vm.list.concat(data);
  430. vm.finished = vm.limit > data.length;
  431. });
  432. },
  433. // 讲师名下资料
  434. lecturer_download_list: function () {
  435. var vm = this;
  436. if (this.finished) {
  437. return;
  438. }
  439. $h.loadFFF();
  440. store.baseGet($h.U({
  441. c: 'merchant',
  442. a: 'lecturer_download_list',
  443. q: {
  444. mer_id: this.lecturer.mer_id,
  445. page: this.page,
  446. limit: this.limit
  447. }
  448. }), function (res) {
  449. $h.loadClear();
  450. var data = res.data.data;
  451. vm.list = vm.list.concat(data);
  452. vm.finished = vm.limit > data.length;
  453. });
  454. },
  455. // 讲师名下活动
  456. lecturer_event_list: function () {
  457. var vm = this;
  458. if (this.finished) {
  459. return;
  460. }
  461. $h.loadFFF();
  462. store.baseGet($h.U({
  463. c: 'merchant',
  464. a: 'lecturer_event_list',
  465. q: {
  466. mer_id: this.lecturer.mer_id,
  467. page: this.page,
  468. limit: this.limit
  469. }
  470. }), function (res) {
  471. $h.loadClear();
  472. var data = res.data.data;
  473. vm.list = vm.list.concat(data);
  474. vm.finished = vm.limit > data.length;
  475. });
  476. },
  477. // 讲师名下商品
  478. lecturer_store_list: function () {
  479. // var vm = this;
  480. // if (this.finished) {
  481. // return;
  482. // }
  483. // $h.loadFFF();
  484. // store.baseGet($h.U({
  485. // c: 'merchant',
  486. // a: 'lecturer_store_list',
  487. // q: {
  488. // mer_id: this.lecturer.mer_id,
  489. // page: this.page,
  490. // limit: this.limit
  491. // }
  492. // }), function (res) {
  493. // $h.loadClear();
  494. // var data = res.data.data;
  495. // vm.list = vm.list.concat(data);
  496. // vm.finished = vm.limit > data.length;
  497. // });
  498. },
  499. // 收益及提现统计
  500. lecturer_income: function () {
  501. // var vm = this;
  502. // store.baseGet($h.U({
  503. // c: 'merchant',
  504. // a: 'lecturer_income',
  505. // q: {
  506. // mer_id: this.lecturer.mer_id
  507. // }
  508. // }), function (res) {
  509. // var data = res.data.data;
  510. // vm.extract = data.extract;
  511. // vm.today = data.today;
  512. // vm.total = data.total;
  513. // vm.gold = data.gold;
  514. // });
  515. },
  516. getIsFollow: function () {
  517. var vm = this;
  518. // store.baseGet($h.U({
  519. // c: 'merchant',
  520. // a: 'is_follow',
  521. // q: {
  522. // mer_id: this.lecturer.mer_id
  523. // }
  524. // }), function (res) {
  525. // vm.isFollow = res.data.data;
  526. // });
  527. },
  528. // 关注
  529. follow: function () {
  530. var vm = this;
  531. store.baseGet($h.U({
  532. c: 'index',
  533. a: 'user_login'
  534. }), function () {
  535. store.baseGet($h.U({
  536. c: 'merchant',
  537. a: 'user_follow',
  538. q: {
  539. mer_id: vm.lecturer.mer_id,
  540. is_follow: Number(!vm.isFollow)
  541. }
  542. }), function (res) {
  543. vm.isFollow = !vm.isFollow;
  544. $h.pushMsg(vm.isFollow ? '关注成功' : '取消关注成功');
  545. });
  546. }, function () {
  547. vm.loginShow = true;
  548. });
  549. },
  550. //关闭登录
  551. loginClose: function (value) {
  552. this.loginShow = false;
  553. },
  554. getProblemList: function () {
  555. var vm = this;
  556. if (this.problemFinished) {
  557. return;
  558. }
  559. store.basePost($h.U({
  560. c: 'merchant',
  561. a: 'lecturer_test_list'
  562. }), {
  563. mer_id: this.lecturer.mer_id,
  564. page: this.problemPage,
  565. limit: this.limit,
  566. type: 1
  567. }, function (res) {
  568. var problemList = res.data.data;
  569. vm.problemList = vm.problemList.concat(problemList);
  570. vm.problemFinished = vm.limit > problemList.length;
  571. }, function () {
  572. });
  573. },
  574. getQuestionList: function () {
  575. var vm = this;
  576. if (this.questionFinished) {
  577. return;
  578. }
  579. store.basePost($h.U({
  580. c: 'merchant',
  581. a: 'lecturer_test_list'
  582. }), {
  583. mer_id: this.lecturer.mer_id,
  584. page: this.questionPage,
  585. limit: this.limit,
  586. type: 2
  587. }, function (res) {
  588. var questionList = res.data.data;
  589. vm.questionList = vm.questionList.concat(questionList);
  590. vm.questionFinished = vm.limit > questionList.length;
  591. }, function () {
  592. });
  593. },
  594. }
  595. });
  596. });
  597. </script>
  598. {/block}