courseItem.vue 20 KB

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