courseItem.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. <template>
  2. <view class="courselist-item" style="height: 100%;">
  3. <view class="courselist-con x-start" @click="toCourseDetail(info)">
  4. <view class="courselist-img">
  5. <!-- <view class="status">进行中</view> -->
  6. <image :src="info.thumbnail" mode="aspectFill"></image>
  7. </view>
  8. <view class="courselist-con-r">
  9. <view @click.passive.stop>
  10. <text class="more-t ">{{info.title}}</text>
  11. <view class="btn_icon" style="margin-left: 5px;" @click="copyId">ID
  12. <image :src="imgpath+'/app/images/copy_icon.png'" mode="aspectFill"></image>
  13. </view>
  14. </view>
  15. <view class="courselist-desc one-t" v-show="from != 'course'">{{info.courseName}}</view>
  16. <view :class="from == 'course' ? 'courselist-con-timebox ':'courselist-con-timebox x-f'" @click.passive.stop>
  17. <view class="x-f acea-row"><u-icon class="icon" name="hourglass" color="#999"
  18. size="20"></u-icon>开始时间:{{info.startDateTime?info.startDateTime:''}}</view>
  19. <view class="x-f acea-row"><u-icon class="icon" name="hourglass-half-fill" color="#999"
  20. size="20"></u-icon>结束时间:{{info.endDateTime?info.endDateTime:''}}</view>
  21. <view class="justify-between align-center">
  22. <view class="x-f acea-row"><u-icon class="icon" name="clock" color="#999"
  23. size="16"></u-icon>{{$formatSeconds(info.duration,1)}}</view>
  24. <view class="u-border radius50 ptb8 plr18 base-color-6" style="width: fit-content;"
  25. @click="showtime=!showtime">调整看课时间</view>
  26. </view>
  27. <u-modal :show="showtime" :title="titletime" @confirm="confirmtime" @close="showtime=!showtime"
  28. @cancel="showtime=!showtime" :closeOnClickOverlay="true" :showCancelButton="true">
  29. <view class="slot-content">
  30. <view class="justify-start align-center">
  31. <view class="mr20">开始时间:</view>
  32. <u-input v-model="startTimevalue" placeholder="请选择开始时间" @focus="startTime=!startTime"></u-input>
  33. </view>
  34. <view class="justify-start align-center mt20">
  35. <view class="mr20">结束时间:</view>
  36. <u-input v-model="endTimevalue" placeholder="请选择结束时间" @focus="endtime=!endtime"></u-input>
  37. </view>
  38. </view>
  39. </u-modal>
  40. <u-datetime-picker :show="startTime" v-model="value1" mode="time" @cancel="startTime=!startTime"
  41. @confirm="confirmstart"></u-datetime-picker>
  42. <u-datetime-picker :show="endtime" v-model="value2" mode="time" @cancel="endtime=!endtime"
  43. @confirm="confirmend"></u-datetime-picker>
  44. </view>
  45. </view>
  46. </view>
  47. <view class="courselist-footer x-f ">
  48. <!--#ifdef MP-WEIXIN-->
  49. <view class="courselist-footer-item x-c " @click="handleClick()"><u-icon
  50. name="share-square" color="#1677ff" size="18"></u-icon>分享课程</view>
  51. <!--#endif-->
  52. <!--#ifdef H5-->
  53. <view class="courselist-footer-item x-c " @click="handleShare"><u-icon
  54. name="share-square" color="#1677ff" size="18"></u-icon>分享课程</view>
  55. <!--#endif-->
  56. <view class="courselist-footer-item x-c shishi" v-show="activeTab == 1" @click="handleStatistics"><u-icon
  57. name="share-square" color="#1677ff" size="18"></u-icon>课程统计</view>
  58. <view class="courselist-footer-item x-c shuju" v-show="activeTab == 2" @click="handleStatistics"><u-icon
  59. name="share-square" color="#1677ff" size="18"></u-icon>数据统计</view>
  60. </view>
  61. <!-- 分享弹窗 -->
  62. <u-popup :show="showShare" :closeOnClickOverlay="true" :round='20' @close="closeShare" @open="openShare">
  63. <view class="sharePop x-ac">
  64. <!--#ifdef MP-WEIXIN-->
  65. <view class="sharePop-item y-f card-share" >
  66. <image :src="imgPath+'/app/images/card_icon.png'" mode="aspectFill"
  67. style="width: 80rpx; height: 80rpx;margin-top: 20rpx;"></image>
  68. <view style="font-weight: bold;margin-bottom: 4px;">生成卡片</view>
  69. <view style="font-size: 12px;color: #888;">指导分享轻松转发</view>
  70. </view>
  71. <!--#endif-->
  72. <!--#ifdef H5-->
  73. <view class="sharePop-item y-f" @click="buildimg">
  74. <image :src="imgPath+'/app/images/poster_icon.png'" mode="aspectFill"></image>
  75. <view style="font-weight: bold;margin-bottom: 4px;">生成海报</view>
  76. <view style="font-size: 12px;color: #888;">保存海报美观宣传</view>
  77. </view>
  78. <view class="sharePop-item y-f" @click="copyLink">
  79. <image :src="imgPath+'/app/images/link_icon.png'" mode="aspectFill"></image>
  80. <view style="font-weight: bold;margin-bottom: 4px;">复制链接</view>
  81. <view style="font-size: 12px;color: #888;">生成链接一键复制</view>
  82. </view>
  83. <!--#endif-->
  84. </view>
  85. </u-popup>
  86. <!-- 设置链接有效时长弹窗 -->
  87. <u-modal :show="setTimeShow" content='content' class="model" @confirm="confirmTime" :closeOnClickOverlay='true'
  88. @close="closetext">
  89. <view class="setTimebox">
  90. <view class="timetip">不传默认以系统参数为准</view>
  91. <view class="x-f">
  92. <text style="margin-right: 20px;">链接有效时长(分钟)</text>
  93. <u-input fontSize="14px" placeholder="链接有效时长" border="none" v-model="time" maxlength="5"></u-input>
  94. </view>
  95. </view>
  96. </u-modal>
  97. <u-notify ref="uNotify" message=""></u-notify>
  98. <!-- 生成海报 -->
  99. <u-popup :show="setImg" @close="closeimg" :round="12" style="z-index: 999;">
  100. <view class="w100 h540 center">
  101. <image :src="codeLink.url" mode="aspectFill" ></image>
  102. </view>
  103. <view class="justify-around mb40">
  104. <!-- <view class="column justify-center align-center" @click="shareimg">
  105. <image :src=:src="imgPath+'/app/image/wechat.png'" class="w80 h80"></image>
  106. <view class="mt10">微信好友</view>
  107. </view> -->
  108. <view class="column justify-center align-center" @click="downimg">
  109. <image :src="imgPath+'/app/image/downicon.png'" class="w80 h80"></image>
  110. <view class=" mb10">长按图片保存</view>
  111. </view>
  112. </view>
  113. </u-popup>
  114. <u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999;">
  115. <view class="point-box">
  116. <view class="imgshe">
  117. <image :src="imgPath+'/app/image/point.png'" class="w300 h300"></image>
  118. </view>
  119. <view class="column colorf fs32 xu-box fs40
  120. align-center justify-center">
  121. <view class="justify-center">点击右上角
  122. <image :src=:src="imgPath+'/app/image/wxmore.png'" class="w50 h50 mlr10"></image>
  123. </view>
  124. <view class="mt20">选择 “转发给朋友”</view>
  125. <view style="color: #cbcbcb;" class="fs28 mt40">点击任意位置关闭弹窗</view>
  126. </view>
  127. </view>
  128. </u-overlay>
  129. </view>
  130. </template>
  131. <script>
  132. import {
  133. sharecourselink,
  134. buildCode,
  135. getSDK,
  136. updataTime
  137. } from '@/api/courseManage'
  138. import html2canvas from 'html2canvas'
  139. import wx from 'weixin-js-sdk'
  140. export default {
  141. props: {
  142. activeTab: {
  143. type: [Number, String],
  144. default: 0
  145. },
  146. // 来源
  147. from: {
  148. type: String,
  149. default: 'live'
  150. },
  151. info: {
  152. type: Object,
  153. default: () => {
  154. return {}
  155. }
  156. },
  157. parentMethod:{
  158. type: Function
  159. }
  160. },
  161. data() {
  162. return {
  163. cavansimg: false,
  164. showShare: false,
  165. setTimeShow: false,
  166. time: "",
  167. user: [],
  168. type: 1,
  169. copylink: '',
  170. setImg: '',
  171. codeLink: '',
  172. setImg: false,
  173. painterId: 'myPainter',
  174. isLongPress: false,
  175. painterSrc: '',
  176. showzhidao: false,
  177. // imgPath:this.$store.state.imgpath,
  178. imgs:this.$store.state.imgpath+'/app/image/logoshare.png',
  179. showtime:false,
  180. titletime:'调整看课时间',
  181. endTimevalue:'',
  182. startTimevalue:'',
  183. startTime:false,
  184. endtime:false,
  185. value1:'00:00',
  186. value2:"23:59"
  187. }
  188. },
  189. computed: {
  190. imgPath() {
  191. return this.$store.state.imgpath
  192. }
  193. },
  194. onLoad() {},
  195. mounted() {
  196. this.user = uni.getStorageSync("companyUserInfo") ? JSON.parse(uni.getStorageSync("companyUserInfo")) : {}
  197. },
  198. methods: {
  199. confirmstart(e){
  200. this.startTimevalue=e.value
  201. this.startTime=!this.startTime
  202. console.log(e)
  203. },
  204. confirmend(e){
  205. this.endTimevalue=e.value
  206. this.endtime=!this.endtime
  207. console.log(e)
  208. },
  209. confirmtime(){
  210. if(this.startTimevalue==''){
  211. uni.showToast({
  212. title: '请选择开始时间',
  213. icon: 'none',
  214. duration: 1000
  215. });
  216. return
  217. }
  218. if(this.endTimevalue==''){
  219. uni.showToast({
  220. title: '请选择结束时间',
  221. icon: 'none',
  222. duration: 1000
  223. });
  224. return
  225. }
  226. this.showtime=!this.showtime
  227. const data={
  228. periodId:this.info.periodId,
  229. courseId:this.info.courseId,
  230. videoId:this.info.videoId,
  231. startDateTime:this.info.startDateTime.substring(0, 10)+' '+this.startTimevalue+":00",
  232. endDateTime:this.info.endDateTime.substring(0, 10)+' '+this.endTimevalue+":59"
  233. }
  234. updataTime([data]).then(res=>{
  235. if(res.code==200){
  236. uni.showToast({
  237. title: '完成看课时间调整!',
  238. icon: 'none',
  239. duration: 1000
  240. });
  241. this.$emit('retime',1)
  242. }else{
  243. uni.showToast({
  244. title: res.msg,
  245. icon: 'none',
  246. duration: 1000
  247. });
  248. }
  249. })
  250. },
  251. handleClick(){
  252. this.parentMethod();
  253. this.$emit('trigger-share', {
  254. title: this.info.courseName+this.info.title,
  255. path: "pages_course/videovip",
  256. onshow:true,
  257. params: { companyId: this.user.companyId, companyUserId: this.user.userId,id:this.info.id,
  258. courseId:this.info.courseId,videoId:this.info.videoId,periodId:this.info.periodId},
  259. img:this.info.thumbnail||this.imgs
  260. });
  261. },
  262. // 获取jssdk
  263. getjssdklist() {
  264. const param = {
  265. url: window.location.href.split('#')[0] // 注意去除 hash
  266. }
  267. getSDK(param).then(res => {
  268. wx.config({
  269. debug: false,
  270. appId: res.data.appId, // 必填,公众号的唯一标识
  271. timestamp: res.data.timestamp, // 必填,生成签名的时间戳
  272. nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
  273. signature: res.data.signature, // 必填,签名
  274. jsApiList: ["updateAppMessageShareData", "onMenuShareAppMessage", ] // 必填,需要使用的JS接口列表
  275. });
  276. })
  277. },
  278. shareimg() {
  279. let self = this
  280. //分享好友
  281. // 配置--配置全局
  282. console.log(self.info.thumbnail + self.copylink, 11111)
  283. wx.ready(function() { //需在用户可能点击分享按钮前就先调用
  284. wx.updateAppMessageShareData({
  285. title: self.info.courseName + self.info.title, // 分享标题
  286. desc: self.info.description, // 分享描述
  287. // link: self.copylink,
  288. link: self.copylink,
  289. // 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
  290. imgUrl: self.info.thumbnail||self.imgs, // 分享图标
  291. success: function(res) {
  292. console.log(self.info, '456');
  293. self.showzhidao = true
  294. self.setImg = false
  295. self.showShare = false
  296. // 设置成功
  297. uni.showToast({
  298. title: '卡片已生成',
  299. icon: 'none',
  300. duration: 1000
  301. });
  302. },
  303. })
  304. // 另外一个方法·
  305. wx.onMenuShareAppMessage({
  306. title: self.info.courseName + self.info.title, // 分享标题
  307. desc: self.info.title, // 分享描述
  308. link: self.copylink,
  309. // 分享链接,该链接域名或路径必须与当前页面对应的公众 号JS安全域名一致
  310. imgUrl: self.info.thumbnail, // 分享图标
  311. success: function(res) {
  312. console.log(self.info, '456');
  313. self.showzhidao = true
  314. self.setImg = false
  315. self.showShare = false
  316. // 设置成功
  317. uni.showToast({
  318. title: '卡片已生成',
  319. icon: 'none',
  320. duration: 1000
  321. });
  322. },
  323. // complete: function(res) {
  324. // uni.showToast({
  325. // title: JSON.stringify(res),
  326. // icon: 'none',
  327. // duration: 2000
  328. // })
  329. // }
  330. })
  331. // wx.error((res) => {
  332. // console.log('wx.error:', res);
  333. // })
  334. });
  335. },
  336. downimg() {
  337. },
  338. handleLongPress() {
  339. this.isLongPress = true;
  340. // 延时执行保存操作,避免误触
  341. setTimeout(() => {
  342. if (this.isLongPress) {
  343. this.saveImage();
  344. }
  345. }, 1000); // 1000毫秒后执行保存操作
  346. },
  347. saveImage() {
  348. const painter = this.$painter.getPainter(this.painterId);
  349. painter.saveImage('jpg', (path) => {
  350. uni.saveImageToPhotosAlbum({
  351. filePath: path,
  352. success: () => {
  353. uni.showToast({
  354. title: '保存成功'
  355. });
  356. },
  357. fail: () => {
  358. uni.showToast({
  359. title: '保存失败',
  360. icon: 'none'
  361. });
  362. }
  363. });
  364. }, 'myCanvas');
  365. },
  366. closeimg() {
  367. this.setImg = false
  368. this.showShare = false
  369. },
  370. closetext() {
  371. this.setTimeShow = false
  372. },
  373. buildimg() {
  374. this.buildimgAcode()
  375. },
  376. //生成海报和二维码
  377. buildimgAcode() {
  378. uni.showLoading({
  379. title: '正在生成中...'
  380. })
  381. buildCode({
  382. companyId: this.user.companyId,
  383. companyUserId: this.user.userId,
  384. courseId: this.info.courseId,
  385. effectiveDuration: this.time,
  386. videoId: this.info.videoId,
  387. imgUrl:this.info.thumbnail,
  388. title:this.info.title,
  389. duration:this.info.duration,
  390. periodId:this.info.periodId,
  391. id:this.info.id
  392. }).then(res => {
  393. if (res.code == 200) {
  394. this.codeLink = res.posterImage
  395. this.setImg = true
  396. this.getlink()
  397. console.log(this.codeLink)
  398. } else {
  399. uni.showToast({
  400. icon: 'none',
  401. title: res.msg
  402. })
  403. }
  404. })
  405. },
  406. toCourseDetail(info) {
  407. uni.navigateTo({
  408. // url: '/pages/courseManage/course/learning?course='+JSON.stringify(info)
  409. // url: `/pages/courseManage/course/learning?course=${JSON.stringify(info)}&isvip=1`
  410. url:'/pages_course/course/courseVideo?videoId='+info.videoId+'&id='+info.id+'&periodId='+info.periodId
  411. })
  412. },
  413. handleShare() {
  414. // #ifdef H5
  415. this.getjssdklist()
  416. this.showShare = true
  417. // #endif
  418. // this.getlink('preload'); // 提前加载链接
  419. },
  420. closeShare() {
  421. this.showShare = false
  422. // console.log('open');
  423. },
  424. openShare() {
  425. // this.showShare = false
  426. // console.log('close');
  427. },
  428. copyLink() {
  429. this.setTimeShow = true
  430. },
  431. confirmTime() {
  432. this.setTimeShow = !this.setTimeShow
  433. this.showShare = !this.showShare
  434. const params = {
  435. companyId: this.user.companyId,
  436. companyUserId: this.user.userId,
  437. courseId: this.info.courseId,
  438. effectiveDuration: this.time,
  439. videoId: this.info.videoId,
  440. periodId:this.info.periodId,
  441. id:this.info.id
  442. }
  443. sharecourselink(params).then(res => {
  444. if (res.code == 200) {
  445. this.copylink = res.url
  446. // if (this.copylink.startsWith('http://')) {
  447. // this.copylink = this.copylink.replace('http://', 'https://');
  448. // }
  449. // console.log(this.copylink)
  450. setTimeout(() => {
  451. uni.setClipboardData({
  452. data: this.copylink,
  453. success: () => {
  454. uni.showToast({
  455. title: '链接已复制',
  456. icon: 'none',
  457. duration: 2000
  458. });
  459. },
  460. fail: () => {
  461. uni.showToast({
  462. title: '复制失败',
  463. icon: 'none'
  464. });
  465. }
  466. });
  467. }, 100)
  468. console.log(this.copylink)
  469. } else {
  470. uni.showToast({
  471. icon: 'none',
  472. title: res.msg
  473. })
  474. }
  475. })
  476. },
  477. getlink(type) {
  478. const params = {
  479. companyId: this.user.companyId,
  480. companyUserId: this.user.userId,
  481. courseId: this.info.courseId,
  482. time: this.time,
  483. periodId:this.info.periodId,
  484. id:this.info.id,
  485. // type: this.type,
  486. videoId: this.info.videoId,
  487. }
  488. sharecourselink(params).then(res => {
  489. if (res.code == 200) {
  490. this.copylink = res.url
  491. // 强制使用 HTTPS
  492. // if (this.copylink.startsWith('http://')) {
  493. // this.copylink = this.copylink.replace('http://', 'https://');
  494. // }
  495. } else {
  496. uni.showToast({
  497. icon: 'none',
  498. title: res.msg
  499. })
  500. }
  501. })
  502. },
  503. handleStatistics() {
  504. const info = {
  505. courseId: this.info.courseId,
  506. title: this.info.title,
  507. thumbnail: this.info.thumbnail,
  508. createTime: this.info.createTime,
  509. duration: this.info.duration,
  510. fileId: this.info.fileId,
  511. courseName: this.info.courseName,
  512. videoId:this.info.videoId,
  513. periodId:this.info.periodId
  514. }
  515. console.log()
  516. uni.navigateTo({
  517. url: '/pages/courseManage/statistics?info=' + JSON.stringify(info)
  518. })
  519. },
  520. copyId() {
  521. uni.setClipboardData({
  522. data: this.info.title,
  523. success: () => {
  524. // this.$refs.uNotify.show({
  525. // top: 0,
  526. // type: 'success',
  527. // // color: '#000',
  528. // // bgColor: '#e8e8e8',
  529. // message: '复制课程标题成功',
  530. // duration: 1000 * 2,
  531. // fontSize: 20,
  532. // safeAreaInsetTop: true
  533. // })
  534. uni.showToast({
  535. icon: 'none',
  536. title: '复制课程标题成功'
  537. })
  538. }
  539. });
  540. }
  541. }
  542. }
  543. </script>
  544. <style scoped lang="scss">
  545. .card-share{
  546. position: relative;
  547. }
  548. .share{
  549. display: inline-block;
  550. position: absolute;
  551. top: 0;
  552. left: 0;
  553. width: 100%;
  554. height: 100%;
  555. opacity: 0;
  556. }
  557. .imgshe {
  558. display: flex;
  559. flex-direction: row-reverse
  560. }
  561. .point-box {
  562. height: 100%;
  563. width: 100%;
  564. .xu-box {
  565. border: #f5f5f5 4rpx dashed;
  566. padding: 20rpx 20rpx;
  567. }
  568. }
  569. #codeurl {
  570. position: relative;
  571. }
  572. ::v-deep {
  573. .model .u-fade-enter-active {
  574. z-index: 10075 !important;
  575. }
  576. }
  577. .sharePop {
  578. background-color: #fff;
  579. padding: 30rpx 0;
  580. border-radius: 20px 20px 0 0;
  581. /* #ifdef MP-WEIXIN */
  582. /* #endif */
  583. /* #ifdef H5 */
  584. padding-bottom: 100px;
  585. /* #endif */
  586. &-item {
  587. padding: 0 10px;
  588. box-sizing: border-box;
  589. font-family: PingFang SC, PingFang SC;
  590. font-weight: 400;
  591. font-size: 14px;
  592. display: inline-flex !important;
  593. image {
  594. height: 48px;
  595. width: 48px;
  596. margin-bottom: 10px;
  597. }
  598. }
  599. }
  600. .setTimebox {
  601. font-family: PingFang SC, PingFang SC;
  602. font-weight: 400;
  603. font-size: 14px;
  604. }
  605. .timetip {
  606. font-family: PingFang SC, PingFang SC;
  607. font-weight: 400;
  608. font-size: 14px;
  609. color: #2979ff;
  610. text-align: center;
  611. margin-bottom: 5px;
  612. }
  613. .courselist {
  614. font-family: PingFang SC, PingFang SC;
  615. font-weight: 400;
  616. font-size: 14px;
  617. &-item {
  618. width: 100%;
  619. border-radius: 14px;
  620. background-color: #fff;
  621. overflow: hidden;
  622. margin-bottom: 10px;
  623. }
  624. &-con {
  625. padding: 10px 10px 5px 10px;
  626. font-size: 12px;
  627. color: #777;
  628. }
  629. &-con-r {
  630. flex: 1;
  631. overflow: hidden;
  632. .more-t {
  633. flex: 1;
  634. font-size: 14px;
  635. color: #222;
  636. display: inline;
  637. }
  638. image {
  639. width: 20px;
  640. height: 20px;
  641. }
  642. .btn_icon {
  643. font-size: 14px;
  644. color: #1677ff;
  645. display: inline-flex;
  646. align-items: center;
  647. }
  648. }
  649. &-img {
  650. width: 110px;
  651. height: 70px;
  652. border-radius: 10px;
  653. overflow: hidden;
  654. flex-shrink: 0;
  655. margin-right: 10px;
  656. position: relative;
  657. image {
  658. height: 100%;
  659. width: 100%;
  660. }
  661. .status {
  662. position: absolute;
  663. top: 0;
  664. left: 0;
  665. z-index: 2;
  666. height: 21px;
  667. padding: 0 5px;
  668. box-sizing: border-box;
  669. line-height: 21px;
  670. border-radius: 10px 0 10px 0;
  671. text-align: center;
  672. color: #fff;
  673. background-color: #08ce36;
  674. }
  675. }
  676. &-desc {
  677. flex: 1;
  678. margin-top: 7px;
  679. }
  680. &-con-timebox {
  681. margin-top: 7px;
  682. flex-wrap: wrap;
  683. .acea-row {
  684. margin-right: 12px;
  685. margin-bottom: 5px;
  686. flex-wrap: nowrap;
  687. }
  688. .icon {
  689. margin-right: 5px;
  690. }
  691. }
  692. &-footer {
  693. padding: 5px;
  694. font-size: 14px;
  695. &-item {
  696. flex: 1;
  697. text-align: center;
  698. color: #1677ff;
  699. padding: 6px;
  700. box-sizing: border-box;
  701. }
  702. .shishi {
  703. border-left: 1px solid #f5f5f5;
  704. }
  705. .shuju {
  706. border-radius: 5px;
  707. border: 1px solid #1677ff;
  708. }
  709. }
  710. }
  711. </style>