courseSection.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. <template>
  2. <view
  3. style="display: flex; justify-content: space-between; align-items: center"
  4. @click="getVideo"
  5. >
  6. <view
  7. style="
  8. display: flex;
  9. justify-content: space-between;
  10. margin: 20rpx 0;
  11. width: 100%;
  12. "
  13. >
  14. <view style="display: flex; align-items: center; flex: 1">
  15. <view class="tag tagColor1" v-if="menuItem.sectionType == 1">录播</view>
  16. <view class="tag tagColor2" v-if="menuItem.sectionType == 2">直播</view>
  17. <view class="tag tagColor3" v-if="menuItem.sectionType == 3">回放</view>
  18. <view class="t_content">
  19. <view
  20. v-if="menuItem.sectionType == 1"
  21. :class="
  22. playSectionId == newId && playNextId == playId ? 'color1' : ''
  23. "
  24. >{{ menuItem.name || "" }}</view
  25. >
  26. <view
  27. v-if="menuItem.sectionType == 2"
  28. :class="
  29. playSectionId == newId && playNextId == playId ? 'color2' : ''
  30. "
  31. >{{ menuItem.name || "" }}</view
  32. >
  33. <view
  34. v-if="menuItem.sectionType == 3"
  35. :class="
  36. playSectionId == newId && playNextId == playId ? 'color3' : ''
  37. "
  38. >{{ menuItem.name || "" }}</view
  39. >
  40. <view
  41. style="font-size: 20rpx; color: #ff3b30"
  42. v-if="menuItem.sectionType == 2 && menuItem.liveStartTime"
  43. >
  44. <view v-if="menuItem.liveStartTime > nowTime || !isBuy">
  45. <text>{{
  46. $method.timestampToTime(menuItem.liveStartTime, (isDay = false))
  47. }}</text
  48. >-
  49. <text>{{
  50. $method.timestampToTime(menuItem.liveEndTime, (isDay = false))
  51. }}</text>
  52. </view>
  53. <template v-if="isLast()">
  54. <view v-if="liveLast.watchStatus == 'live'">
  55. <text>直播中</text>
  56. </view>
  57. <view v-if="liveLast.watchStatus == 'end'">
  58. <text>当前直播回放视频请稍后再查看</text>
  59. </view>
  60. </template>
  61. <!-- <view v-if="menuItem.liveStartTime<=nowTime&&menuItem.liveEndTime>nowTime">
  62. <text>直播中</text>
  63. </view>
  64. <view v-if="menuItem.liveEndTime<nowTime">
  65. <text>回放</text>
  66. </view> -->
  67. </view>
  68. <view
  69. style="font-size: 20rpx; color: #ff3b30"
  70. v-if="menuItem.sectionType == 3 && !menuItem.recordingUrl"
  71. >
  72. <view>
  73. <text>当前直播回放视频请稍后再查看</text>
  74. </view>
  75. </view>
  76. </view>
  77. <view v-if="menuItem.sectionType == null">{{
  78. menuItem.name || ""
  79. }}</view>
  80. </view>
  81. <view
  82. style="font-size: 20rpx; color: #ff3b30"
  83. v-if="menuItem.liveStartTime && menuItem.sectionType != 3 && isBuy"
  84. >
  85. <template v-if="!isLast() && !isLive">
  86. <view class="tagWillPlay" v-if="menuItem.liveStartTime > nowTime">
  87. <text>待开播</text>
  88. </view>
  89. <view
  90. class="tagPlaying"
  91. v-if="
  92. menuItem.liveStartTime <= nowTime &&
  93. menuItem.liveEndTime > nowTime
  94. "
  95. >
  96. <text>直播中</text>
  97. </view>
  98. <view class="tagPlayed" v-if="menuItem.liveEndTime < nowTime">
  99. <text>已结束</text>
  100. </view>
  101. </template>
  102. </view>
  103. <!-- 直播课程没有学习状态 -->
  104. <template v-if="!isLive">
  105. <view v-if="isRebuild || menuItem.rebuild > 0" class="tagRe"
  106. >待重修</view
  107. >
  108. <view v-else>
  109. <view v-if="menuItem.learning == 1" class="tagGreen">已看完</view>
  110. </view>
  111. </template>
  112. </view>
  113. <view v-if="menuItem.tryListen && !isBuy" class="tryBox"> 试看 </view>
  114. </view>
  115. </template>
  116. <script>
  117. import { mapGetters } from "vuex";
  118. import eventHub from "@/common/eventHub.js";
  119. import { WEBVIEW_URL } from "@/common/request.js";
  120. export default {
  121. name: "courseSection",
  122. props: {
  123. isLive: false, //是否是直播课
  124. orderGoodsId: {
  125. default: 0,
  126. },
  127. preItem: {
  128. default: undefined,
  129. },
  130. learningOrder: {
  131. //是否设置学习顺序 1 章节顺序 0不设置 2从头学到尾顺序
  132. type: Number,
  133. default: 0,
  134. },
  135. courseId: {
  136. type: Number,
  137. default: 0,
  138. },
  139. goodsId: {
  140. type: Number,
  141. default: 0,
  142. },
  143. menuItem: {
  144. type: Object,
  145. default: {},
  146. },
  147. isBuy: {
  148. type: Boolean,
  149. default: false,
  150. },
  151. levelId: {
  152. type: String,
  153. default: "",
  154. },
  155. isRebuild: {
  156. type: Boolean,
  157. default: false,
  158. },
  159. gradeId: {
  160. type: Number,
  161. default: 0,
  162. },
  163. nextMenuItem: {
  164. type: Object,
  165. default: {},
  166. },
  167. sectionMaxNum: {
  168. default: undefined,
  169. },
  170. },
  171. watch: {
  172. menuItem(val) {
  173. console.log(val, "val");
  174. },
  175. },
  176. data() {
  177. return {
  178. nowTime: 0,
  179. newId: 0,
  180. playId: "",
  181. clickLock: false, //点击锁,防止连续点击多次
  182. };
  183. },
  184. onLoad() {},
  185. created() {},
  186. mounted() {
  187. this.nowTime = Number(new Date().getTime() / 1000).toFixed(0);
  188. this.newId =
  189. this.menuItem.sectionId > 0
  190. ? this.menuItem.sectionId
  191. : this.menuItem.menuId;
  192. console.log(this.newId, "this.newId");
  193. console.log(this.playSectionId, "this.playSectionId");
  194. console.log(this.isRebuild);
  195. console.log(this.nextMenuItem, "nextMenuItem");
  196. console.log(this.menuItem, "this.menuItem");
  197. let moduleId = this.menuItem.moduleId || 0;
  198. let chapterId = this.menuItem.chapterId || 0;
  199. let sectionId = this.menuItem.sectionId || this.menuItem.menuId;
  200. let playNextId = `moduleId${moduleId}chapterId${chapterId}sectionId${sectionId}${
  201. this.isRebuild ? "isRebuild" : ""
  202. }`;
  203. this.playId = playNextId;
  204. uni.$off("playNext" + playNextId); //绑定前先移除之前的事件
  205. uni.$once("playNext" + playNextId, (data) => {
  206. //到时会触发每个节的监听事件,只允许当前节的接收
  207. let self = this;
  208. if (
  209. this.nextMenuItem.recordingUrl &&
  210. this.isRebuild &&
  211. this.newId == this.playSectionId &&
  212. data.fromRebuild
  213. ) {
  214. // fromRebuild 来自重修目录的点击才弹出播放下一节
  215. //重修存在下一节
  216. uni.showModal({
  217. title: "提示",
  218. content: "是否播放下一节",
  219. success: function (res) {
  220. if (res.confirm) {
  221. console.log("用户点击确定");
  222. let nextId =
  223. self.nextMenuItem.sectionId > 0
  224. ? self.nextMenuItem.sectionId
  225. : self.nextMenuItem.menuId;
  226. //设置播放的节ID
  227. self.$store.commit("setPlaySectionId", { playSectionId: nextId });
  228. self.$store.commit("setPlayVID", {
  229. playVID: self.nextMenuItem.recordingUrl,
  230. });
  231. let ids = self.levelId.split("-");
  232. ids[2] = nextId;
  233. uni.$emit("levelId", ids.join("-"));
  234. uni.$emit("getSection", self.nextMenuItem);
  235. self.$emit("playEnd", { isRebuild: self.isRebuild });
  236. // uni.$off('playend')
  237. // uni.$on('playend',res => {
  238. // console.log('playend2')
  239. // this.$emit('playEnd',{isRebuild:this.isRebuild})
  240. // })
  241. } else {
  242. let nextId =
  243. self.nextMenuItem.sectionId > 0
  244. ? self.nextMenuItem.sectionId
  245. : self.nextMenuItem.menuId;
  246. //设置播放的节ID
  247. self.$store.commit("setPlaySectionId", { playSectionId: nextId });
  248. self.$store.commit("setPlayVID", {
  249. playVID: self.nextMenuItem.recordingUrl,
  250. });
  251. let ids = self.levelId.split("-");
  252. ids[2] = nextId;
  253. self.$emit("playEnd", { isRebuild: self.isRebuild });
  254. }
  255. },
  256. });
  257. } else {
  258. this.$emit("playEnd", { isRebuild: this.isRebuild });
  259. }
  260. });
  261. },
  262. methods: {
  263. isLast() {
  264. console.log(this.liveLast, "this.liveLast");
  265. if (this.liveLast) {
  266. let sectionASame =
  267. this.liveLast.sectionId ==
  268. (this.menuItem.sectionId || this.menuItem.menuId);
  269. let chapterSame =
  270. this.liveLast.chapterId == (this.menuItem.chapterId || 0);
  271. let moduleSame =
  272. this.liveLast.moduleId == (this.menuItem.moduleId || 0);
  273. console.log(
  274. sectionASame && chapterSame && moduleSame,
  275. "sectionASame && chapterSame && moduleSame"
  276. );
  277. return sectionASame && chapterSame && moduleSame;
  278. } else {
  279. return false;
  280. }
  281. },
  282. studyRecordMenuAllList() {
  283. return new Promise((resolve) => {
  284. this.$api
  285. .studyRecordMenuAllList({
  286. courseId: this.courseId,
  287. gradeId: this.gradeId,
  288. goodsId: this.goodsId,
  289. })
  290. .then((res) => {
  291. if (res.data.code == 200) {
  292. resolve(res.data.data);
  293. }
  294. });
  295. });
  296. },
  297. gradeCheckGoodsStudy() {
  298. let moduleId = this.menuItem.moduleId || 0;
  299. let chapterId = this.menuItem.chapterId || 0;
  300. let sectionId = this.menuItem.sectionId || this.menuItem.menuId;
  301. return new Promise((resolve) => {
  302. this.$api
  303. .gradeCheckGoodsStudy({
  304. goodsId: this.goodsId,
  305. gradeId: this.gradeId,
  306. moduleId: this.menuItem.moduleId || 0,
  307. chapterId: this.menuItem.chapterId || 0,
  308. sectionId: this.menuItem.sectionId || this.menuItem.menuId,
  309. })
  310. .then((res) => {
  311. resolve(res.data.data);
  312. });
  313. });
  314. },
  315. goodsTodayStudySectionNum() {
  316. return new Promise((resolve) => {
  317. this.$api
  318. .goodsTodayStudySectionNum({
  319. goodsId: this.goodsId,
  320. gradeId: this.gradeId,
  321. })
  322. .then((res) => {
  323. if (res.data.code == 200) {
  324. resolve(res.data.data);
  325. }
  326. });
  327. });
  328. },
  329. async getVideo() {
  330. if (this.clickLock) {
  331. return;
  332. }
  333. this.clickLock = true;
  334. if (this.learningOrder == 2 && !this.menuItem.isRebuild && !this.isLive) {
  335. //要按从头到尾顺序学习, 且不是重修课程
  336. if (this.preItem) {
  337. let rows = await this.studyRecordMenuAllList();
  338. let newRows = [];
  339. for (let i = 0; i < rows.length; i++) {
  340. let moduleTrue =
  341. rows[i].moduleId == this.menuItem.moduleId ||
  342. rows[i].moduleId == 0;
  343. let chapterTrue =
  344. rows[i].chapterId == this.menuItem.chapterId ||
  345. rows[i].chapterId == 0;
  346. let sectionTrue =
  347. rows[i].sectionId == this.menuItem.sectionId ||
  348. rows[i].sectionId == this.menuItem.menuId;
  349. if (moduleTrue && chapterTrue && sectionTrue) {
  350. break;
  351. } else {
  352. if (rows[i].sectionType != 2) {
  353. newRows.push(rows[i]);
  354. }
  355. }
  356. }
  357. console.log(newRows);
  358. let isAllLearn = newRows.every((item) => {
  359. return item.studyStatus == 1;
  360. });
  361. if (isAllLearn) {
  362. this.playVideo();
  363. } else {
  364. uni.showToast({
  365. icon: "none",
  366. title: "请按顺序学习视频课程",
  367. });
  368. }
  369. // if(this.preItem.menuType == 3) { //上一个是节
  370. // if(this.preItem.learning == 1) { //上一节学完
  371. // this.playVideo();
  372. // } else {
  373. // uni.showToast({
  374. // icon:'none',
  375. // title:'请按顺序学习视频课程'
  376. // })
  377. // }
  378. // } else if(this.preItem.menuType == 2) { //上一个是章
  379. // this.$api.reSectionList({chapterId: this.preItem.menuId || this.preItem.chapterId,gradeId:this.gradeId,courseId:this.courseId,moduleId:this.preItem.moduleId || 0}).then(res => {
  380. // if(res.data.code==200){
  381. // let lastItem = res.data.data[res.data.data.length -1];
  382. // if(lastItem.learning == 1) {
  383. // this.playVideo();
  384. // } else {
  385. // uni.showToast({
  386. // icon:'none',
  387. // title:'请按顺序学习视频课程'
  388. // })
  389. // }
  390. // }
  391. // });
  392. // } else if(this.preItem.menuType == 1) { //上一个是模块
  393. // this.$api.reChapterList({moduleId:this.preItem.menuId,gradeId:this.gradeId,courseId:this.courseId}).then(res => {
  394. // if(res.data.code==200){
  395. // let lastChapterItem = res.data.data[res.data.data.length -1];
  396. // this.$api.reSectionList({chapterId:lastChapterItem.chapterId,gradeId:this.gradeId,courseId:this.courseId,moduleId:this.menuItem.menuId || this.menuItem.moduleId}).then(res => {
  397. // if(res.data.code==200){
  398. // let lastSectionItem = res.data.data[res.data.data.length -1];
  399. // if(lastSectionItem.learning == 1) {
  400. // this.playVideo();
  401. // } else {
  402. // uni.showToast({
  403. // icon:'none',
  404. // title:'请按顺序学习视频课程'
  405. // })
  406. // }
  407. // }
  408. // });
  409. // }
  410. // });
  411. // }
  412. } else {
  413. //第一章第一节
  414. this.playVideo();
  415. }
  416. } else {
  417. this.playVideo();
  418. }
  419. setTimeout(() => {
  420. this.clickLock = false;
  421. }, 3000);
  422. },
  423. studyRecordGetChannelBasicInfo(channelId) {
  424. return new Promise((resolve) => {
  425. this.$api
  426. .studyRecordGetChannelBasicInfo({
  427. channelId,
  428. })
  429. .then((res) => {
  430. resolve(res.data.data);
  431. });
  432. });
  433. },
  434. async playVideo() {
  435. if (this.menuItem.sectionType == 1 || this.menuItem.sectionType == 3) {
  436. //录播
  437. if (!this.isBuy) {
  438. //非购买
  439. if (!this.menuItem.tryListen) {
  440. //不允许试听
  441. this.clickLock = false;
  442. return;
  443. } else {
  444. this.$store.commit("setPlaySectionId", {
  445. playSectionId: this.newId,
  446. });
  447. this.$store.commit("setPlayVID", {
  448. playVID: this.menuItem.recordingUrl,
  449. });
  450. this.menuItem.courseId = this.courseId;
  451. uni.$emit("getSection", this.menuItem);
  452. return;
  453. }
  454. }
  455. let learnNum = await this.goodsTodayStudySectionNum();
  456. let hasLearn = await this.gradeCheckGoodsStudy();
  457. console.log(this.sectionMaxNum, "this.sectionMaxNum");
  458. console.log(learnNum, "learnNum");
  459. if (this.sectionMaxNum > 0) {
  460. if (learnNum >= this.sectionMaxNum && !hasLearn) {
  461. uni.showToast({
  462. icon: "none",
  463. title: `每天最多学习${this.sectionMaxNum}节`,
  464. });
  465. this.clickLock = false;
  466. return;
  467. }
  468. }
  469. if (!this.menuItem.recordingUrl) {
  470. uni.showToast({
  471. title: "暂无播放地址数据",
  472. icon: "none",
  473. });
  474. this.clickLock = false;
  475. return;
  476. }
  477. /* if(this.playSectionId==this.newId){
  478. //切换为同一节
  479. return
  480. } */
  481. if (this.playSectionId > 0) {
  482. //切换视频
  483. let oldSectionId = this.playSectionId;
  484. uni.$emit("changeSection", oldSectionId);
  485. }
  486. //设置播放的节ID
  487. this.$store.commit("setPlaySectionId", { playSectionId: this.newId });
  488. this.$store.commit("setPlayVID", {
  489. playVID: this.menuItem.recordingUrl,
  490. });
  491. this.$store.commit("updatePlayNextId", this.playId);
  492. uni.$emit("levelId", this.levelId);
  493. uni.$emit("getSection", this.menuItem);
  494. uni.$emit("isRebuild", this.isRebuild);
  495. console.log(this.menuItem, "menuItem");
  496. // uni.$off('playend')
  497. // uni.$on('playend',res => {
  498. // console.log('playend2')
  499. // this.$emit('playEnd',{isRebuild:this.isRebuild})
  500. // })
  501. console.log(999);
  502. }
  503. if (this.menuItem.sectionType == 2) {
  504. //直播
  505. if (!this.isBuy) {
  506. //非购买
  507. this.clickLock = false;
  508. return;
  509. }
  510. let learnNum = await this.goodsTodayStudySectionNum();
  511. let hasLearn = await this.gradeCheckGoodsStudy();
  512. console.log(this.sectionMaxNum, "this.sectionMaxNum");
  513. console.log(learnNum, "learnNum");
  514. if (this.sectionMaxNum > 0 && !this.isLive) {
  515. if (learnNum >= this.sectionMaxNum && !hasLearn) {
  516. uni.showToast({
  517. icon: "none",
  518. title: `每天最多学习${this.sectionMaxNum}节`,
  519. });
  520. this.clickLock = false;
  521. return;
  522. }
  523. }
  524. if (!this.menuItem.liveUrl) {
  525. uni.showToast({
  526. title: "暂无直播地址数据",
  527. icon: "error",
  528. });
  529. return;
  530. }
  531. let data = await this.studyRecordGetChannelBasicInfo(
  532. this.menuItem.liveUrl
  533. );
  534. let nowTime = +this.$method.timest();
  535. if (this.menuItem.liveStartTime > nowTime) {
  536. if (data.watchStatus == "end" || data.watchStatus == "playback") {
  537. this.clickLock = false;
  538. uni.showToast({
  539. title: "直播未开始",
  540. icon: "none",
  541. });
  542. return;
  543. }
  544. } else if (
  545. this.menuItem.liveStartTime < nowTime &&
  546. this.menuItem.liveEndTime > nowTime
  547. ) {
  548. if (data.watchStatus == "end" || data.watchStatus == "playback") {
  549. this.clickLock = false;
  550. uni.showToast({
  551. title: "暂无直播",
  552. icon: "none",
  553. });
  554. return;
  555. }
  556. } else if (this.menuItem.liveEndTime < nowTime) {
  557. if (data.watchStatus == "end" || data.watchStatus == "playback") {
  558. this.clickLock = false;
  559. uni.showToast({
  560. title: "直播已结束",
  561. icon: "none",
  562. });
  563. return;
  564. }
  565. }
  566. // if (data.watchStatus == "end" || data.watchStatus == "playback") {
  567. // this.clickLock = false;
  568. // uni.showToast({
  569. // title: '直播已结束',
  570. // icon: 'none'
  571. // });
  572. // return;
  573. // }
  574. // if (data.watchStatus == "waiting") {
  575. // this.clickLock = false;
  576. // uni.showToast({
  577. // title: '直播未开始',
  578. // icon: 'none'
  579. // });
  580. // return;
  581. // }
  582. // if(this.playSectionId==this.newId){
  583. // //切换为同一频道
  584. // this.clickLock = false;
  585. // return
  586. // }
  587. let moduleId = this.menuItem.moduleId || 0;
  588. let chapterId = this.menuItem.chapterId || 0;
  589. let sectionId = this.menuItem.sectionId || this.menuItem.menuId;
  590. let encode = encodeURIComponent(
  591. WEBVIEW_URL +
  592. "pages/live/index?token=" +
  593. uni.getStorageSync("token") +
  594. "&userInfo=" +
  595. JSON.stringify(this.userInfo) +
  596. "&channelId=" +
  597. this.menuItem.liveUrl +
  598. "&gradeId=" +
  599. this.gradeId +
  600. "&courseId=" +
  601. this.courseId +
  602. "&goodsId=" +
  603. this.goodsId +
  604. "&orderGoodsId=" +
  605. this.orderGoodsId +
  606. "&sectionId=" +
  607. sectionId +
  608. "&chapterId=" +
  609. chapterId +
  610. "&moduleId=" +
  611. moduleId
  612. );
  613. uni.navigateTo({
  614. url: `../../pages/webview/index?url=` + encode,
  615. });
  616. return;
  617. //设置播放的节ID
  618. // this.$store.commit('setPlaySectionId', {playSectionId :this.newId});
  619. // this.$store.commit('setPlayChannelId', {playChannelId :this.menuItem.liveUrl});
  620. // this.$store.commit('updatePlayNextId',this.playId)
  621. // uni.$emit('levelId', this.levelId)
  622. // uni.$emit('getChannel', this.menuItem)
  623. // uni.$emit('isRebuild',this.isRebuild)
  624. // console.log(this.menuItem,'menuItem')
  625. // uni.$off('playend')
  626. // uni.$on('playend',res => {
  627. // console.log('playend1')
  628. // this.$emit('playEnd',{isRebuild:this.isRebuild})
  629. // })
  630. console.log(888);
  631. }
  632. },
  633. },
  634. computed: {
  635. ...mapGetters([
  636. "playSectionId",
  637. "playChannelId",
  638. "playVID",
  639. "playNextId",
  640. "userInfo",
  641. "liveLast",
  642. ]),
  643. },
  644. };
  645. </script>
  646. <style scoped lang="scss">
  647. .tagGreen {
  648. width: 80rpx;
  649. height: 28rpx;
  650. background: #34c759;
  651. border-radius: 8rpx;
  652. font-size: 20rpx;
  653. color: #ffffff;
  654. text-align: center;
  655. }
  656. .tagWillPlay {
  657. width: 80rpx;
  658. height: 28rpx;
  659. background: #ebf4ff;
  660. border-radius: 8rpx;
  661. font-size: 20rpx;
  662. color: #007aff;
  663. text-align: center;
  664. }
  665. .tagPlaying {
  666. width: 80rpx;
  667. height: 28rpx;
  668. background: #fff7eb;
  669. border-radius: 8rpx;
  670. font-size: 20rpx;
  671. color: #ff9500;
  672. text-align: center;
  673. }
  674. .tagPlayed {
  675. width: 80rpx;
  676. height: 28rpx;
  677. background: #eeeeee;
  678. border-radius: 8rpx;
  679. font-size: 20rpx;
  680. color: #666666;
  681. text-align: center;
  682. }
  683. .tagRe {
  684. width: 80rpx;
  685. height: 28rpx;
  686. background: #ff3b30;
  687. border-radius: 8rpx;
  688. font-size: 20rpx;
  689. color: #ffffff;
  690. text-align: center;
  691. }
  692. .tryBox {
  693. width: 96rpx;
  694. height: 48rpx;
  695. background: #007aff;
  696. border-radius: 24rpx;
  697. color: #ffffff;
  698. font-size: 30rpx;
  699. line-height: 48rpx;
  700. text-align: center;
  701. }
  702. .icon_up {
  703. width: 24rpx;
  704. height: 24rpx;
  705. }
  706. .t_content3 {
  707. color: #007aff;
  708. }
  709. .t_content2 {
  710. color: #007aff;
  711. }
  712. .t_content1 {
  713. color: #007aff;
  714. }
  715. .t_content {
  716. font-size: 30rpx;
  717. margin-left: 10rpx;
  718. color: #666666;
  719. flex: 1;
  720. }
  721. .tagColor3 {
  722. border: 2rpx solid #ff9500;
  723. color: #ff9500;
  724. }
  725. .tagColor2 {
  726. border: 2rpx solid #ff3b30;
  727. color: #ff3b30;
  728. }
  729. .tagColor1 {
  730. border: 2rpx solid #007aff;
  731. color: #007aff;
  732. }
  733. .color3 {
  734. color: #ff9500;
  735. }
  736. .color2 {
  737. color: #ff3b30;
  738. }
  739. .color1 {
  740. color: #007aff;
  741. }
  742. .tag {
  743. border-radius: 8rpx;
  744. font-size: 20rpx;
  745. padding: 5rpx;
  746. }
  747. </style>