classDetail.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  1. <template>
  2. <view class="content">
  3. <u-card :title="classInfo.name" :sub-title="classInfo.useLessonsType == 1 ? '体验班' : ''" :show-foot="false" title-size="32" margin="0px 0px 10px 0px" :head-style="cardStyle">
  4. <view slot="body">
  5. <view class="class-info-text">
  6. <u-icon name="clock"></u-icon>
  7. {{classInfo.classStartDate}}&nbsp;~&nbsp;{{classInfo.classEndDate}}
  8. </view>
  9. <view class="class-info-text" v-for="(item, index) in classInfo.classExtrasList" :key="index">
  10. <u-icon name="calendar" style="visibility: hidden;"></u-icon>
  11. <text>{{item.week}}&nbsp;{{item.startTime}}-{{item.endTime}}</text>
  12. </view>
  13. <view class="class-info-text">
  14. <u-icon name="map"></u-icon>
  15. {{classInfo.address}}
  16. </view>
  17. <!--<view style="display: flex;justify-content: flex-end;" v-if="classInfo.state != 0">-->
  18. <view style="display: flex;justify-content: flex-end;">
  19. <u-button type="warning" :custom-style="{background: mainColor}" size="mini" shape="circle" :ripple="true" @click="handleUpdateClassClick">修改</u-button>
  20. <u-button v-if="!classInfo.studentSignList.length" type="warning" :custom-style="{background: mainColor,marginLeft: '5px'}" size="mini" shape="circle" :ripple="true" @click="handleDeleteClick">删除</u-button>
  21. </view>
  22. </view>
  23. </u-card>
  24. <u-card :title="'学员信息(' + getStudentsNumber(1) + ')'" title-size="32" margin="0px 0px 10px 0px" :head-style="cardStyle">
  25. <u-grid :col="3" slot="body" :border="false">
  26. <u-grid-item v-for="(item, index) in classInfo.studentSignList" :key="index" :custom-style="gridCustomStyle" @click="goToStudentInfo(item)">
  27. <view class="class-student-col">
  28. {{item.name}}
  29. <u-icon :name="item.state == 1 ? 'bookmark-fill' : 'bookmark'" :color="mainColor" size="48"></u-icon>
  30. </view>
  31. </u-grid-item>
  32. </u-grid>
  33. </u-card>
  34. <u-card margin="0px 0px 10px 0px" :head-style="cardStyle" :show-head="false" @click="handleScanClick" v-if="classInfo.useLessonsType==1">
  35. <view slot="body" style="display: flex;justify-content: space-between;">
  36. <view style="font-size: 32rpx;font-weight: bold;color:#000000;">扫码</view>
  37. <u-icon name="scan" size="32"></u-icon>
  38. </view>
  39. </u-card>
  40. <u-card :title="'事假(' + getStudentsNumber(2) + ')'" title-size="32" margin="0px 0px 10px 0px" :head-style="cardStyle">
  41. <u-grid :col="3" slot="body" :border="false" v-if="classInfo.studentLeaveRecordList.length">
  42. <u-grid-item v-for="(item, index) in classInfo.studentLeaveRecordList" :key="index" :custom-style="gridCustomStyle">
  43. <view class="class-student-col" @click="handleleaveClick(item)">
  44. {{item.name}}
  45. <u-icon :name="item.agreeType == 1 ? 'bookmark-fill' : 'bookmark'" :color="mainColor" size="48"></u-icon>
  46. </view>
  47. </u-grid-item>
  48. </u-grid>
  49. </u-card>
  50. <u-card :title="'病假结束确认(' + getStudentsNumber(3) + ')'" title-size="32" margin="0px 0px 10px 0px" :head-style="cardStyle">
  51. <u-grid :col="3" slot="body" :border="false" v-if="classInfo.studentLeaveList.length">
  52. <u-grid-item v-for="(item, index) in classInfo.studentLeaveList" :key="index" :custom-style="gridCustomStyle">
  53. <view class="class-student-col" @click="handleOtherClick(item)">
  54. {{item.name}}
  55. <u-icon name="'bookmark" :color="mainColor" size="48"></u-icon>
  56. </view>
  57. </u-grid-item>
  58. </u-grid>
  59. </u-card>
  60. <u-card :title="'续费卡和自定义卡(' + getStudentsNumber(4) + ')'" title-size="32" margin="0px 0px 10px 0px" :head-style="cardStyle">
  61. <u-grid :col="3" slot="body" :border="false" v-if="classInfo.studentRenewList.length">
  62. <u-grid-item v-for="(item, index) in classInfo.studentRenewList" :key="index" :custom-style="gridCustomStyle">
  63. <view class="class-student-col" :class="item.state ? 'student-active' : ''" @click="handleVtCardClick(item)">
  64. {{item.name}}
  65. <u-icon name="bookmark" :color="mainColor" size="48"></u-icon>
  66. </view>
  67. </u-grid-item>
  68. </u-grid>
  69. </u-card>
  70. <u-card title="班级近况" :sub-title="imgEdit ? '完成' : '管理'" :sub-title-color="imgEdit ? '#19be6b' : '#909399'" :show-foot="false"
  71. title-size="32" margin="0px" :head-style="cardStyle" @sub-click="imgEdit = !imgEdit">
  72. <view class="class-show-box" slot="body">
  73. <view v-for="(item, index) in classShowList" :key="index" class="class-show-card">
  74. <u-image :src="item.url" mode="aspectFill" height="30vw" border-radius="10px" v-if="item.type == 0"></u-image>
  75. <view class="video-col" v-if="item.type == 1">
  76. <video :src="item.url" object-fit="cover" controls :id="'video' + index"></video>
  77. </view>
  78. <view class="class-show-name">{{item.name}}</view>
  79. <u-icon name="close-circle-fill" color="#fa3534" size="48" v-if="imgEdit" class="delete-icon" @click="deleteClassShow(item)"></u-icon>
  80. </view>
  81. <view class="class-show-card" style="width: calc(100% - 16px);text-align: center;" v-if="imgEdit">
  82. <u-icon name="plus-circle-fill" size="100" :color="mainColor" @click="uploadTypeShow = true"></u-icon>
  83. </view>
  84. </view>
  85. </u-card>
  86. <view class="handle-fix-box" v-if="classInfo.state==1">
  87. <u-button type="warning" shape="circle" :ripple="true" :custom-style="customStyle" @click="goToSignForm">立即签到</u-button>
  88. </view>
  89. <u-action-sheet :list="uploadTypeList" v-model="uploadTypeShow" @click="selectUploadType"></u-action-sheet>
  90. <!-- 事假 -->
  91. <u-popup v-model="leaveShow" mode="center" border-radius="30" width="600rpx">
  92. <view class="common-title">事假</view>
  93. <view class="menber-box">
  94. <u-form :model="leaveForm" ref="leaveFormRef" label-width="140">
  95. <u-form-item label="请假时间" prop="time">
  96. <u-input v-model="leaveForm.time" disabled type="text" />
  97. </u-form-item>
  98. <u-form-item label="请假理由" prop="leaveReason">
  99. <u-input v-model="leaveForm.leaveReason" disabled type="text" />
  100. </u-form-item>
  101. </u-form>
  102. <view style="height:20px;"></view>
  103. <u-button type="warning" shape="circle" :ripple="true" :custom-style="customStyle" @click="handleAgreeClick">同意</u-button>
  104. </view>
  105. </u-popup>
  106. <!-- 病假确认 -->
  107. <u-modal v-model="leaveOtherShow" content="提示" show-cancel-button @confirm="handleEndClick">
  108. <view style="text-align: center;margin: 10px 0;">
  109. 是否确认{{ studentName }}的病假结束?
  110. </view>
  111. </u-modal>
  112. <!-- 续费卡 -->
  113. <u-popup v-model="vtCardShow" mode="center" border-radius="30" width="600rpx">
  114. <view class="common-title">请选择</view>
  115. <view class="menber-box">
  116. <u-radio-group v-model="orderId">
  117. <u-radio class="menber-col" v-for="(item,index) in vtCardList" :key="index" :name="item.orderId">
  118. <view class="menber-label" >卡名:{{ item.cardName }}-{{item.cardType==4?'自定义卡':'续费卡'}}</view>
  119. <!-- <view class="menber-label">售价: ¥ 1111</view> -->
  120. <!-- <view class="menber-label">使用时间: 11111</view> -->
  121. <!-- <u-checkbox v-model="true" active-color="#ff6e3e">选择</u-checkbox> -->
  122. <!-- <view class="menber-icon iconfont iconzu4931"></view> -->
  123. </u-radio>
  124. </u-radio-group>
  125. <view style="height:20px;"></view>
  126. <u-button type="warning" shape="circle" :ripple="true" :custom-style="customStyle" @click="handleAffirmClick">确认</u-button>
  127. </view>
  128. </u-popup>
  129. <u-top-tips ref="uTips"></u-top-tips>
  130. </view>
  131. </template>
  132. <script>
  133. import {
  134. mapGetters
  135. } from 'vuex'
  136. const NET = require('@/utils/request')
  137. const API = require('@/config/api')
  138. export default {
  139. computed: {
  140. ...mapGetters([
  141. 'mainColor',
  142. 'customStyle',
  143. ])
  144. },
  145. data() {
  146. return {
  147. classId: '',
  148. studentId: '',
  149. studentName: '',
  150. recordId: '',
  151. classInfo: {
  152. name: '',
  153. classStartDate: '',
  154. classStartHours: '',
  155. classEndDate: '',
  156. classEndHours: '',
  157. residue: '',
  158. address: '',
  159. studentLeaveList: [],
  160. classExtrasList: [],
  161. studentSignList: [],
  162. showList: [],
  163. studentLeaveRecordList: [],
  164. studentRenewList: []
  165. },
  166. classShowList: [],
  167. uploadTypeShow: false,
  168. uploadTypeList: [{
  169. text: '图片'
  170. },
  171. {
  172. text: '视频'
  173. }
  174. ],
  175. imgEdit: false,
  176. cardStyle: {
  177. fontWeight: 'bold'
  178. },
  179. gridCustomStyle: {
  180. padding: '0 2px'
  181. },
  182. leaveShow: false,
  183. leaveForm: {},
  184. leaveOtherShow: false,
  185. vtCardShow: false,
  186. vtCardId: '',
  187. vtCardValue: '',
  188. orderId:'',
  189. cardId:'',
  190. vtCardList: [],
  191. trainList: [
  192. {
  193. id: 1,
  194. text: '一对一(或一对多)面授'
  195. },
  196. {
  197. id: 2,
  198. text: '大班额面授课'
  199. },
  200. {
  201. id: 3,
  202. text: '小班额面授课'
  203. },
  204. {
  205. id: 4,
  206. text: '本班开班不受最低人数限制'
  207. },
  208. {
  209. id: 5,
  210. text: '其他方式'
  211. },
  212. ],
  213. }
  214. },
  215. onLoad(options) {
  216. this.classId = options.id
  217. },
  218. onShow() {
  219. this.initialize()
  220. this.getClassShow()
  221. },
  222. onPullDownRefresh() {
  223. this.initialize()
  224. this.getClassShow()
  225. },
  226. methods: {
  227. // 获取初始化数据
  228. initialize() {
  229. NET.request(API.getClassDetail, {
  230. id: this.classId
  231. }, 'POST').then(res => {
  232. this.classInfo = res.data
  233. console.log(this.classInfo.venueId)
  234. uni.stopPullDownRefresh();
  235. }).catch(error => {
  236. this.$refs.uTips.show({
  237. title: error.message,
  238. type: 'warning',
  239. })
  240. })
  241. },
  242. // 扫码
  243. handleScanClick() {
  244. try {
  245. let that = this
  246. uni.scanCode({
  247. onlyFromCamera: true,
  248. success: function (res) {
  249. console.log(res)
  250. // const studentId = parseInt(res.result)
  251. if(res.result.indexOf("xinghuoclass66889955224477")==-1){
  252. that.$refs.uTips.show({
  253. title: "二维码错误",
  254. type: 'success',
  255. })
  256. return false;
  257. }
  258. const studentId = res.result.replace("xinghuoclass66889955224477",'')
  259. const classId = parseInt(that.classId)
  260. NET.request(API.classCourseWriteOff, {
  261. studentId,classId
  262. }, 'POST').then(res => {
  263. if(res.status == 10000) {
  264. that.initialize()
  265. that.$refs.uTips.show({
  266. title: res.message,
  267. type: 'success',
  268. })
  269. } else {
  270. that.$refs.uTips.show({
  271. title: res.message,
  272. type: 'warning',
  273. })
  274. }
  275. }).catch(error => {
  276. that.$refs.uTips.show({
  277. title: error.message,
  278. type: 'warning',
  279. })
  280. })
  281. },
  282. fail: function (res) {
  283. that.$refs.uTips.show({
  284. title: "调用摄像头失败",
  285. type: 'warning',
  286. })
  287. },
  288. });
  289. } catch {
  290. this.$refs.uTips.show({
  291. title: "调用摄像头失败",
  292. type: 'warning',
  293. })
  294. }
  295. },
  296. // 班级近况
  297. getClassShow() {
  298. NET.request(API.getClassDetailShowList, {
  299. id: this.classId,
  300. page: 0,
  301. size: 1000
  302. }, 'POST').then(res => {
  303. this.classShowList = res.data.row
  304. }).catch(error => {
  305. this.$refs.uTips.show({
  306. title: error.message,
  307. type: 'warning',
  308. })
  309. })
  310. },
  311. // 删除班级(班级内无学员)
  312. handleDeleteClick() {
  313. NET.request(API.deleteById, {
  314. id: parseInt(this.classId)
  315. }, 'POST').then( res=> {
  316. if(res.status == 10000) {
  317. uni.navigateBack({})
  318. }
  319. })
  320. },
  321. // 获取学生数量
  322. getStudentsNumber(num) {
  323. // 1 学生数晾 2 事假数量 3 续费卡数量
  324. switch (num){
  325. case 1:
  326. return this.classInfo.studentSignList.length
  327. case 2:
  328. return this.classInfo.studentLeaveRecordList.length
  329. case 3:
  330. return this.classInfo.studentLeaveList.length
  331. case 4:
  332. return this.classInfo.studentRenewList.length
  333. }
  334. },
  335. handleOtherClick(item) {
  336. this.studentId = item.id
  337. this.studentName = item.name
  338. this.recordId = item.leaveRecordId
  339. this.leaveOtherShow = true
  340. },
  341. // 病假知晓
  342. handleEndClick() {
  343. NET.request(API.leaveLessonsEndOk,{
  344. recordId:parseInt(this.recordId), studentId:parseInt(this.studentId)
  345. },'POST').then(res=> {
  346. if(res.status == 10000) {
  347. this.$refs.uTips.show({
  348. title: res.message,
  349. type: 'success',
  350. })
  351. this.initialize()
  352. this.getClassShow()
  353. } else {
  354. this.$refs.uTips.show({
  355. title: res.message,
  356. type: 'warning',
  357. })
  358. }
  359. })
  360. },
  361. // 事假信息
  362. handleleaveClick(item) {
  363. if(item.agreeType == 1) return
  364. NET.request(API.leaveLessonsInfo,{
  365. id: parseInt(item.leaveRecordId)
  366. },'POST').then(res=> {
  367. if(res.status == 10000) {
  368. this.leaveForm = { ...res.data }
  369. this.leaveShow = true
  370. } else {
  371. this.$refs.uTips.show({
  372. title: res.message,
  373. type: 'warning',
  374. })
  375. }
  376. })
  377. },
  378. // 事假信息->同意
  379. handleAgreeClick() {
  380. NET.request(API.leaveLessonsOk, {
  381. leaveId: parseInt(this.leaveForm.leaveId)
  382. }, 'POST').then(res => {
  383. if(res.status == 10000) {
  384. this.leaveShow = false
  385. this.leaveForm = {}
  386. this.initialize()
  387. } else {
  388. this.leaveShow = false
  389. this.$refs.uTips.show({
  390. title: res.message,
  391. type: 'warning',
  392. })
  393. }
  394. })
  395. },
  396. // 续费卡列表
  397. handleVtCardClick(item) {
  398. this.studentId = parseInt(item.id)
  399. const data = {
  400. studentId: parseInt(this.studentId),
  401. classId: parseInt(this.classId)
  402. }
  403. NET.request(API.stuRenewalCardList, data, 'POST').then(res=> {
  404. if(res.status == 10000) {
  405. this.vtCardList = res.data
  406. this.vtCardShow = true
  407. } else {
  408. this.$refs.uTips.show({
  409. title: res.message,
  410. type: 'warning',
  411. })
  412. this.vtCardShow = false
  413. }
  414. })
  415. },
  416. // 续费卡切换
  417. handleRadioChange(orderId) {
  418. this.vtCardId = this.vtCardList.find( item => item.orderId = orderId).cardId
  419. this.vtCardValue = this.vtCardList.find( item => item.orderId = orderId).cardName
  420. this.orderId=orderId
  421. console.log(this.orderId)
  422. },
  423. // 续费卡确认
  424. handleAffirmClick() {
  425. let that = this
  426. const data = {
  427. cardId: this.vtCardList.find( item => item.orderId == that.orderId).cardId,
  428. studentId: parseInt(this.studentId),
  429. classId: parseInt(this.classId),
  430. orderId:parseInt(this.orderId)
  431. }
  432. //console.log(that.orderId)
  433. //console.log(data)
  434. ///return false
  435. NET.request(API.openRenewalCard, data,'POST').then(res=> {
  436. console.log(res)
  437. if(res.status == 10000) {
  438. this.vtCardShow = false
  439. this.$refs.uTips.show({
  440. title: res.message,
  441. type: 'success',
  442. })
  443. this.initialize()
  444. } else {
  445. this.$refs.uTips.show({
  446. title: res.message,
  447. type: 'warning',
  448. })
  449. this.vtCardShow = false
  450. }
  451. }).catch(error => {
  452. this.$refs.uTips.show({
  453. title: error.message,
  454. type: 'warning',
  455. })
  456. })
  457. },
  458. // 选择上传文件类型
  459. selectUploadType(index) {
  460. if (index == 0) {
  461. uni.chooseImage({
  462. count: 1,
  463. success: (res) => {
  464. this.uploadFile(res.tempFilePaths[0])
  465. },
  466. fail: (error) => {
  467. }
  468. });
  469. } else if (index) {
  470. uni.chooseVideo({
  471. count: 1,
  472. success: (res) => {
  473. this.uploadFile(res.tempFilePath)
  474. },
  475. fail: (error) => {
  476. }
  477. });
  478. }
  479. },
  480. // 上传文件
  481. uploadFile(path) {
  482. let that = this
  483. uni.uploadFile({
  484. url: API.uploadFile,
  485. filePath: path,
  486. name: 'file',
  487. header: {
  488. Authorization: uni.getStorageSync('token')
  489. },
  490. success: (uploadFileRes) => {
  491. that.uploadSuccess(JSON.parse(uploadFileRes.data).data.id)
  492. }
  493. });
  494. },
  495. // 文件上传成功回调
  496. uploadSuccess(id) {
  497. NET.request(API.insertClassShow, {
  498. fileId: [id],
  499. id: this.classId,
  500. }, 'POST').then(res => {
  501. this.getClassShow()
  502. this.$refs.uTips.show({
  503. title: '班级近况发布成功',
  504. type: 'success',
  505. })
  506. }).catch(error => {
  507. this.$refs.uTips.show({
  508. title: error.message,
  509. type: 'warning',
  510. })
  511. })
  512. },
  513. // 删除班级近况
  514. deleteClassShow(site) {
  515. NET.request(API.deleteClassShow, {
  516. id: site.id,
  517. }, 'POST').then(res => {
  518. this.getClassShow()
  519. this.$refs.uTips.show({
  520. title: '删除成功',
  521. type: 'success',
  522. })
  523. }).catch(error => {
  524. this.$refs.uTips.show({
  525. title: error.message,
  526. type: 'warning',
  527. })
  528. })
  529. },
  530. // 跳转修改班级
  531. handleUpdateClassClick() {
  532. let getInfo = this.trainList.find(item => item.id == this.classInfo.classTypeDesc)
  533. let info = ''
  534. if(!getInfo) {
  535. info = '其他方式'
  536. this.classInfo.otherType = this.classInfo.classTypeDesc
  537. this.classInfo.classTypeDesc = 5
  538. } else {
  539. info = getInfo.text
  540. }
  541. const form = {
  542. classId: this.classId,
  543. name: this.classInfo.name,
  544. classTypeDesc: this.classInfo.classTypeDesc,
  545. classTypeInfo: info,
  546. otherType: this.classInfo.otherType,
  547. startDate: this.classInfo.classStartDate,
  548. endDate: this.classInfo.classEndDate,
  549. timeReqList: this.classInfo.classExtrasList,
  550. maxStudentCount: this.classInfo.maxStudentCount,
  551. }
  552. if(this.classInfo.state == 3 || this.classInfo.state == 1) {
  553. uni.navigateTo({
  554. url: '/pagesClass/updateClassForm?form=' + encodeURIComponent(JSON.stringify(form))
  555. });
  556. } else {
  557. uni.navigateTo({
  558. url: '/pagesClass/updateClassForm?classId=' + this.classId
  559. });
  560. }
  561. },
  562. // 跳转学生详情
  563. goToStudentInfo(item) {
  564. uni.navigateTo({
  565. url: '/pagesMain/studentInfo?type=1&id=' + item.id + '&classId=' + this.classId
  566. });
  567. },
  568. // 跳转签到表单
  569. goToSignForm() {
  570. uni.removeStorageSync('signUserList')
  571. uni.navigateTo({
  572. url: '/pagesClass/signForm?id=' + this.classId + '&status=' + this.classInfo.signStatus+'&venueId=' + this.classInfo.venueId
  573. });
  574. },
  575. // 跳转续费卡详情
  576. jumpVtCardPage(id) {
  577. uni.navigateTo({
  578. url: `/pagesClass/vtCardInfo?id=${id}`
  579. })
  580. }
  581. },
  582. }
  583. </script>
  584. <style>
  585. page {
  586. width: 100%;
  587. height: 100%;
  588. background-color: #f7f7f7;
  589. position: relative;
  590. }
  591. </style>
  592. <style lang="scss" scoped>
  593. @import "@/static/css/themes.scss";
  594. .content {
  595. width: 100%;
  596. float: left;
  597. padding-bottom: 60px;
  598. .class-info-text {
  599. color: #999999;
  600. line-height: 18px;
  601. u-icon {
  602. margin-right: 4px;
  603. }
  604. }
  605. .class-student-col {
  606. height: 28px;
  607. display: flex;
  608. padding: 0 10rpx;
  609. line-height: 28px;
  610. color: $mainColor;
  611. white-space: nowrap;
  612. border: 1px solid $mainColor;
  613. border-radius: 5px;
  614. /deep/u-icon {
  615. margin-left: 5px;
  616. }
  617. }
  618. .student-active {
  619. background-color: $mainColor;
  620. color: #FFFFFF;
  621. }
  622. .class-student-box {
  623. display: flex;
  624. justify-content: space-around;
  625. }
  626. .class-show-box {
  627. width: 100%;
  628. float: left;
  629. .class-show-card {
  630. width: calc(50% - 16px);
  631. margin: 0 8px 16px 8px;
  632. float: left;
  633. position: relative;
  634. .class-show-name {
  635. width: 100%;
  636. text-align: center;
  637. line-height: 20px;
  638. font-size: 14px;
  639. margin-top: 5px;
  640. }
  641. .delete-icon {
  642. position: absolute;
  643. right: -5px;
  644. top: -5px;
  645. }
  646. .video-col {
  647. width: 100%;
  648. height: 30vw;
  649. border-radius: 10px;
  650. video {
  651. width: 100%;
  652. height: 30vw;
  653. }
  654. }
  655. }
  656. }
  657. .menber-box {
  658. width: 100%;
  659. // float: left;
  660. padding: 10px 15px;
  661. margin-bottom: 10px;
  662. .menber-col {
  663. width: 100%;
  664. padding: 15px;
  665. margin-bottom: 10px;
  666. display: inline-block;
  667. background-color: #FFFFFF;
  668. border-radius: 15px;
  669. box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
  670. position: relative;
  671. overflow: hidden;
  672. box-sizing: border-box;
  673. .menber-label {
  674. width: 100%;
  675. margin-bottom: 5px;
  676. float: left;
  677. font-size: 14px;
  678. // line-height: 20px;
  679. }
  680. .menber-num {
  681. width: 100%;
  682. float: left;
  683. font-size: 26px;
  684. line-height: 28px;
  685. color: $mainColor;
  686. }
  687. .menber-icon {
  688. font-size: 100px;
  689. color: $mainColor;
  690. position: absolute;
  691. right: -5px;
  692. bottom: -30px;
  693. opacity: 0.5;
  694. }
  695. }
  696. }
  697. .common-title {
  698. width:100%;
  699. text-align: center;
  700. font-size: 20px;
  701. margin: 10px 0;
  702. }
  703. }
  704. </style>