Main.vue 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211
  1. <template>
  2. <div class="container">
  3. <div class="lt">
  4. <div class="top">
  5. <ul>
  6. <li @click="goPage('member')">
  7. <img src="../assets/img/main/member.png" height="54" width="54" />
  8. <div class="liRight">
  9. <h5>会员人数</h5>
  10. <span>{{ AllCount }}</span>
  11. </div>
  12. <div class="btLine">
  13. <em class="emlt">
  14. <i class="el-icon-caret-top"></i>
  15. 今日新增 {{ NowCount }}
  16. </em>
  17. <em class="emrt">
  18. <i class="el-icon-caret-top"></i>
  19. 昨日新增 {{ YesterdayCount }}
  20. </em>
  21. </div>
  22. </li>
  23. <li @click="goPage('record')">
  24. <img src="../assets/img/main/appoint.png" height="54" width="54" />
  25. <div class="liRight">
  26. <h5>今日预约人数</h5>
  27. <span>{{ TodayOrderNum }}</span>
  28. </div>
  29. <div class="btLine">
  30. <em class="emlt">
  31. <i class="el-icon-caret-top"></i>
  32. 昨日预约 {{ YestodayOrderNum }}
  33. </em>
  34. <em class="emrt">
  35. <i class="el-icon-caret-top"></i>
  36. 较昨日新增 {{ TodayIncreaseNum }}
  37. </em>
  38. </div>
  39. </li>
  40. <li @click="goPage('lesson')" v-if="userLevel != 3">
  41. <img src="../assets/img/main/lesson.png" height="54" width="54" />
  42. <div class="liRight">
  43. <h5>课程数量</h5>
  44. <span>{{ ClassNum }}</span>
  45. </div>
  46. <div class="btLine">
  47. <em class="emlt">
  48. <i class="el-icon-caret-top"></i>
  49. 已预约课程 {{ TodayOrderSttNum }}
  50. </em>
  51. </div>
  52. </li>
  53. <li @click="goPage('lesson')" v-if="userLevel == 3">
  54. <img src="../assets/img/main/lesson.png" height="54" width="54" />
  55. <div class="liRight">
  56. <h5>剩余课时</h5>
  57. <span>{{ TotalRemainNormalhour + TotalRemainGifthour }}</span>
  58. </div>
  59. <div class="btLine">
  60. <em class="emlt">
  61. <i class="el-icon-caret-top"></i>
  62. 正常课时 {{ TotalRemainNormalhour }}
  63. </em>
  64. <em class="emlt">
  65. <i class="el-icon-caret-top"></i>
  66. 赠送课时 {{ TotalRemainGifthour }}
  67. </em>
  68. </div>
  69. </li>
  70. </ul>
  71. </div>
  72. <div class="finish">
  73. <div class="title">
  74. <h5>课程管理</h5>
  75. <!-- <span>{{getNowDate}}</span>-->
  76. </div>
  77. <ul>
  78. <li v-for="c in PreFinishList">
  79. <div class="finListTitle" :style="{ background: c.ClassColor }">
  80. <em>{{ c.ClassName }}</em>
  81. <s>{{ c.BeginTime | parseDate }}</s>
  82. </div>
  83. <div class="context">
  84. <div class="ctl">
  85. <span>上课时间:{{ c.BeginStr }} - {{ c.EndStr }}</span>
  86. <span>预约人数:{{ c.OrderNum }} 人</span>
  87. </div>
  88. <em></em>
  89. <el-button type="primary" plain @click="goFinish(c)" v-if="c.FinishClass == 0">上课
  90. </el-button>
  91. <!--<el-button type="danger" plain @click="goFinish(c)" v-if="c.FinishClass == 0">关课-->
  92. <!--</el-button>-->
  93. <el-button type="primary" plain @click="checkClassOverPrepare(c)" v-if="c.FinishClass == 2">
  94. 管理</el-button>
  95. <el-button type="primary" plain @click="goFinish(c)" v-if="c.FinishClass == 3">编辑
  96. </el-button>
  97. </div>
  98. </li>
  99. <span class="tips" v-if="PreFinishList == 0">
  100. <img src="../assets/img/main/empty.jpg" height="116" width="92" />
  101. <br />暂无下课课程
  102. </span>
  103. </ul>
  104. </div>
  105. <div class="appoint">
  106. <div class="title">
  107. <h5>预约课程</h5>
  108. <span>{{ getNowDate }}</span>
  109. </div>
  110. <div class="appointCard">
  111. <el-card class="box-card" v-for="c in classList" @click.native="goLesson">
  112. <div class="cardTitle">{{ c.ClassName }}</div>
  113. <span>{{ c.BeginStr }}</span>
  114. <em>
  115. 最大预约人数
  116. <i>{{ c.OrderToplimit }}</i>
  117. </em>
  118. <em>
  119. 已预约人数
  120. <i>{{ c.OrderNum }}</i>
  121. </em>
  122. <em>
  123. 预约状态
  124. <s class="blue" v-if="c.WxOrder > 0">可预约</s>
  125. <s class="red" v-if="c.WxOrder == 0">不可预约</s>
  126. </em>
  127. </el-card>
  128. <span class="tips" v-if="classList == 0">
  129. <img src="../assets/img/main/empty.jpg" height="116" width="92" />
  130. <br />暂无预约课程,请先添加
  131. <router-link to="/lessonManage">课程表</router-link>
  132. </span>
  133. </div>
  134. </div>
  135. </div>
  136. <div class="rt">
  137. <div class="rtContext">
  138. <div class="rtTitle">
  139. <h5>最新预约</h5>
  140. <span @click="goPage('appoint', 'second')">查看全部</span>
  141. </div>
  142. <ul>
  143. <!-- TodayVipOrder-->
  144. <li v-for="(as ,index) in appointList" @click="goAppointDetail(as.UserName)" v-if="index < 6">
  145. <div class="asTitle">
  146. <span>
  147. <img :src="as.Head" alt v-if="as.Head" width="25px" height="25px" />
  148. <img src="../assets/img/nav/head.png" alt v-else width="25px" height="25px" />
  149. <div>{{ as.UserName }} {{ as.Phone }}</div>
  150. </span>
  151. <span>
  152. <div>预约时间:</div>
  153. {{ as.Base.CreatedAt | parseDate }}
  154. </span>
  155. </div>
  156. <div class="asContent">
  157. <span>
  158. <div>上课时间:</div>
  159. <em>{{ as.CurrentDate.substr(5, 6) }} {{ as.BeginStr }}</em>
  160. </span>
  161. <span>
  162. <div>预约状态:</div>
  163. <em v-if="as.Status == 1" class="green">已预约</em>
  164. <em v-if="as.Status == 2" class="red">已取消</em>
  165. <em v-if="as.Status == 3" class="yellow">预约未到</em>
  166. <em v-if="as.Status == 4">已完成</em>
  167. </span>
  168. <span>
  169. <div>预约课程:</div>
  170. <s class="blue" :style="{ background: as.ClassColor }">{{ as.ClassName }}</s>
  171. </span>
  172. <span v-if="as.RemainHour != ''">
  173. <div>剩余课时:</div>
  174. <em :class="[{ 'red': as.RemainHour == 0 }]">{{ as.RemainHour }}课时</em>
  175. </span>
  176. <span v-else>
  177. <div>用户类型:</div>
  178. <em>跨店用户</em>
  179. </span>
  180. </div>
  181. </li>
  182. <span class="tips middleTips" v-if="appointList == 0">
  183. <img src="../assets/img/main/empty.jpg" height="116" width="92" />
  184. <br />暂无预约,可进入
  185. <router-link to="/appoint">预约管理</router-link>
  186. </span>
  187. </ul>
  188. </div>
  189. </div>
  190. </div>
  191. </template>
  192. <script>
  193. import {
  194. ClassPreFinishListQuery,
  195. WaitingBeginClassList,
  196. ClassOngoingList,
  197. OrderStatistics,
  198. VipUserStatistics,
  199. ClassStatistics,
  200. ClassOverPrepare,
  201. VipUserOrderQuery,
  202. ClassHourStatistics,
  203. LastOrderQuery,
  204. } from "../api/getApiRes";
  205. let qs = require('qs');
  206. export default {
  207. data() {
  208. return {
  209. editableTabsValue: '1',
  210. getNowDate: getNowDate(),
  211. classList: [],
  212. PreFinishList: [],
  213. appointList: [],
  214. TodayClassOrder: [],
  215. TodayVipOrder: [],
  216. AllCount: 0,
  217. YesterdayCount: 0,
  218. YestodayOrderNum: 0,
  219. NowCount: 0,
  220. CountAdd: 0,
  221. TodayIncreaseNum: 0,
  222. TodayOrderNum: 0,
  223. ClassNum: 0,
  224. TodayOrderSttNum: 0,
  225. TotalRemainNormalhour: 0,
  226. TotalRemainGifthour: 0,
  227. userLevel: localStorage.userLevel,
  228. isCollapse: document.body.clientWidth < 1367,
  229. // clientWidth:document.body.clientWidth
  230. }
  231. },
  232. mounted() {
  233. let that = this;
  234. // 下课管理
  235. this.getVipUserStatistics();
  236. this.getClassStatistics();
  237. this.ClassQuery();
  238. this.getClassHourStatistics();
  239. this.getVipUserOrderQuery();
  240. // 预约统计
  241. this.getOrderStatistics();
  242. this.getWaitingBeginClassList();
  243. this.timer = setInterval(() => {
  244. that.getVipUserOrderQuery();
  245. this.getVipUserStatistics();
  246. this.getClassStatistics();
  247. this.ClassQuery();
  248. this.getOrderStatistics();
  249. this.getWaitingBeginClassList();
  250. }, 10000);
  251. },
  252. watch: {
  253. $route(to) {
  254. if (to.name == 'Main') {
  255. this.getVipUserStatistics();
  256. this.getClassStatistics();
  257. this.ClassQuery();
  258. this.getClassHourStatistics();
  259. this.getVipUserOrderQuery();
  260. this.getOrderStatistics();
  261. this.getWaitingBeginClassList();
  262. } else {
  263. clearInterval(this.timer);//页面销毁时清除定时器
  264. }
  265. },
  266. },
  267. destroyed() {
  268. clearInterval(this.timer);//页面销毁时清除定时器
  269. },
  270. methods: {
  271. goLesson() {
  272. this.$router.push({
  273. path: '/appoint',
  274. })
  275. },
  276. goAppointDetail(name) {
  277. this.$router.push({
  278. path: '/appoint',
  279. query: {
  280. page: 'second',
  281. name: name
  282. }
  283. })
  284. },
  285. goPage(url, page) {
  286. this.$router.push({
  287. path: '/' + url,
  288. query: {
  289. page: page
  290. }
  291. })
  292. },
  293. // 会员统计
  294. getVipUserStatistics() {
  295. let that = this;
  296. let param = {
  297. token: localStorage.token,
  298. };
  299. let postdata = qs.stringify(param);
  300. VipUserStatistics(postdata).then(res => {
  301. let json = res;
  302. if (json.Code == 0) {
  303. that.AllCount = json.Rs.AllCount;
  304. that.YesterdayCount = json.Rs.YesterdayCount;
  305. that.NowCount = json.Rs.NowCount;
  306. that.CountAdd = json.Rs.CountAdd;
  307. } else {
  308. if (json.Code == 1010) {
  309. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  310. that.$router.push({ path: '/login', query: { status: 1 } });
  311. return false
  312. } else {
  313. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  314. }
  315. }
  316. })
  317. },
  318. // 课程统计
  319. getClassStatistics() {
  320. let that = this;
  321. let param = {
  322. token: localStorage.token,
  323. };
  324. let postdata = qs.stringify(param);
  325. ClassStatistics(postdata).then(res => {
  326. let json = res;
  327. if (json.Code == 0) {
  328. that.ClassNum = json.Rs.ClassNum;
  329. that.TodayOrderSttNum = json.Rs.TodayOrderSttNum;
  330. } else {
  331. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  332. }
  333. })
  334. },
  335. getOrderStatistics() {
  336. let that = this;
  337. that.loading = true;
  338. let param = {
  339. token: localStorage.token,
  340. };
  341. let postdata = qs.stringify(param);
  342. OrderStatistics(postdata).then(res => {
  343. let json = res;
  344. if (json.Code == 0) {
  345. that.loading = false;
  346. if (json.Rs) {
  347. that.TodayIncreaseNum = json.Rs.TodayIncreaseNum;
  348. that.TodayOrderNum = json.Rs.TodayOrderNum;
  349. that.YestodayOrderNum = json.Rs.YestodayOrderNum;
  350. }
  351. } else {
  352. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  353. }
  354. })
  355. },
  356. checkClassOverPrepare(row) {
  357. let that = this;
  358. // courseEdit
  359. this.$router.push({
  360. path: '/courseEdit', query: {
  361. StdId: row.StdId,
  362. ClassName: row.ClassName,
  363. BeginStr: row.BeginStr,
  364. EndStr: row.EndStr,
  365. FinishClass: row.FinishClass,
  366. }
  367. });
  368. },
  369. goFinish(row) {
  370. this.$router.push({
  371. path: '/courses', query: {
  372. // id: row.StdId,
  373. // classId: row.ClassId,
  374. // ClassName: row.ClassName,
  375. // BeginTime: row.BeginTime,
  376. }
  377. });
  378. },
  379. getWaitingBeginClassList() {
  380. let that = this;
  381. that.loading = true;
  382. let param = {
  383. token: localStorage.token,
  384. };
  385. let postdata = qs.stringify(param);
  386. WaitingBeginClassList(postdata).then(res => {
  387. let json = res;
  388. if (json.Code == 0) {
  389. that.loading = false;
  390. that.classList = json.Rs;
  391. //ipad显示内容减少
  392. if (that.isCollapse) {
  393. that.classList = [];
  394. for (var i = 0; i < 3; i++) {
  395. that.classList.push(json.Rs[i]);
  396. }
  397. }
  398. } else {
  399. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  400. }
  401. })
  402. },
  403. // 下课管理
  404. ClassQuery() {
  405. let that = this;
  406. that.loading = true;
  407. let param = {
  408. token: localStorage.token,
  409. };
  410. let postdata = qs.stringify(param);
  411. ClassOngoingList(postdata).then(res => {
  412. let json = res;
  413. if (json.Code == 0) {
  414. that.loading = false;
  415. if (json.Rs) {
  416. that.PreFinishList = json.Rs;
  417. }
  418. } else {
  419. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  420. }
  421. })
  422. },
  423. getClassHourStatistics() {
  424. let that = this;
  425. let param = {
  426. token: localStorage.token,
  427. };
  428. let postdata = qs.stringify(param);
  429. ClassHourStatistics(postdata).then(res => {
  430. let json = res;
  431. if (json.Code == 0) {
  432. that.TotalRemainNormalhour = json.Rs.TotalRemainNormalhour;
  433. that.TotalRemainGifthour = json.Rs.TotalRemainGifthour;
  434. } else {
  435. that.$message.error(json.Memo);
  436. }
  437. })
  438. },
  439. // 最新预约
  440. getVipUserOrderQuery() {
  441. let that = this;
  442. that.loading = true;
  443. let param = {
  444. token: localStorage.token,
  445. classId: 0,
  446. orderDate: globalcurrent(),
  447. stdId: 0,
  448. };
  449. let postdata = qs.stringify(param);
  450. // VipUserOrderQuery(postdata).then(res => {
  451. LastOrderQuery(postdata).then(res => {
  452. let json = res;
  453. if (json.Code == 0) {
  454. that.loading = false;
  455. if (json.Rs) {
  456. that.appointList = json.Rs;
  457. }
  458. } else {
  459. that.$message.error(json.Memo + ' 错误码:' + json.Code);
  460. }
  461. })
  462. }
  463. },
  464. filters: {
  465. parseDate: function (value) {
  466. if (!value) {
  467. return false
  468. } else {
  469. let res = nonTfmtDatetoLength(value, 10).substr(5, 10);
  470. return res;
  471. }
  472. },
  473. },
  474. }
  475. </script>
  476. <style scoped>
  477. ul,
  478. li {
  479. list-style: none;
  480. margin: 0;
  481. padding: 0;
  482. }
  483. em {
  484. font-style: normal;
  485. }
  486. .container {
  487. width: 100%;
  488. /* height: 760px;*/
  489. overflow: hidden;
  490. overflow-y: scroll;
  491. display: block;
  492. margin: 0 auto;
  493. padding-bottom: 60px;
  494. }
  495. .container>.lt {
  496. width: 1173px;
  497. float: left;
  498. margin-top: 0px;
  499. }
  500. .container>.rt {
  501. /*width: 436px;*/
  502. width: 26%;
  503. height: 100%;
  504. float: right;
  505. }
  506. .lt .top {
  507. width: 100%;
  508. overflow: hidden;
  509. display: block;
  510. margin: 0 auto;
  511. }
  512. .lt .top li {
  513. width: 377px;
  514. height: 140px;
  515. float: left;
  516. background: #fff;
  517. border-radius: 12px;
  518. margin-right: 20px;
  519. cursor: pointer;
  520. }
  521. .lt .top li:nth-child(3) {
  522. margin-right: 0;
  523. }
  524. .top li img {
  525. float: left;
  526. margin-top: 17px;
  527. margin-left: 30px;
  528. margin-right: 24px;
  529. }
  530. .top li .liRight {
  531. width: 200px;
  532. float: left;
  533. margin-top: 17px;
  534. }
  535. .top .liRight h5 {
  536. margin: 0;
  537. padding: 0;
  538. text-align: left;
  539. }
  540. .top .liRight span {
  541. width: 100%;
  542. overflow: hidden;
  543. display: block;
  544. margin: 0 auto;
  545. text-align: left;
  546. font-size: 26px;
  547. font-family: Arial;
  548. margin-top: 7px;
  549. margin-bottom: 20px;
  550. }
  551. .liRight em {
  552. font-size: 14px;
  553. text-align: right;
  554. }
  555. .btLine {
  556. width: 84%;
  557. overflow: hidden;
  558. display: block;
  559. margin: 0 auto;
  560. border-top: 1px solid #f0f2f5;
  561. padding-top: 17px;
  562. }
  563. .btLine em {
  564. font-size: 14px;
  565. }
  566. .btLine .emlt {
  567. width: 50%;
  568. float: left;
  569. text-align: left;
  570. }
  571. .btLine i {
  572. font-size: 18px;
  573. color: #bdbdbd;
  574. }
  575. .emlt i {
  576. float: left;
  577. }
  578. .finish {
  579. width: 100%;
  580. min-height: 358px;
  581. overflow: hidden;
  582. display: block;
  583. margin: 0 auto;
  584. background: #fff;
  585. margin-top: 15px;
  586. border-radius: 12px;
  587. padding-top: 15px;
  588. padding-bottom: 0px;
  589. }
  590. .finish .title {
  591. overflow: hidden;
  592. display: block;
  593. margin: 0 auto;
  594. padding-left: 30px;
  595. }
  596. .finish .title h5 {
  597. margin: 0;
  598. float: left;
  599. font-size: 18px;
  600. }
  601. .finish .title span {
  602. float: right;
  603. margin-right: 43px;
  604. font-size: 14px;
  605. color: #717171;
  606. }
  607. .finish ul {
  608. overflow: hidden;
  609. display: block;
  610. margin: 0 auto;
  611. padding-left: 30px;
  612. padding-right: 30px;
  613. margin: 0 auto;
  614. margin-top: 10px;
  615. }
  616. .finish ul li {
  617. width: 347px;
  618. height: 149px;
  619. overflow: hidden;
  620. float: left;
  621. margin-bottom: 14px;
  622. }
  623. .finish ul li:nth-child(2) {
  624. margin-left: 24px;
  625. margin-right: 24px;
  626. }
  627. .finish ul li:nth-child(5) {
  628. margin-left: 24px;
  629. margin-right: 24px;
  630. }
  631. .finish li .finListTitle {
  632. width: 100%;
  633. height: 35px;
  634. line-height: 35px;
  635. overflow: hidden;
  636. display: block;
  637. margin: 0 auto;
  638. background-color: #3799ff;
  639. border-top-left-radius: 7px;
  640. border-top-right-radius: 7px;
  641. color: #000;
  642. }
  643. li .finListTitle em {
  644. float: left;
  645. color: #fff;
  646. padding-left: 5%;
  647. }
  648. li .finListTitle s {
  649. float: right;
  650. text-decoration: none;
  651. color: #fff;
  652. padding-right: 5%;
  653. }
  654. .finish li .context {
  655. width: 344px;
  656. overflow: hidden;
  657. display: block;
  658. margin: 0 auto;
  659. border: 1px solid #e8e8e8;
  660. border-top: none;
  661. padding-top: 16px;
  662. padding-bottom: 16px;
  663. border-bottom-left-radius: 7px;
  664. border-bottom-right-radius: 7px;
  665. }
  666. .finish .context em {
  667. width: 85px;
  668. overflow: hidden;
  669. display: block;
  670. margin: 0 auto;
  671. height: 40px;
  672. line-height: 30px;
  673. color: #bdbdbd;
  674. }
  675. .context button {
  676. height: 30px;
  677. line-height: 30px;
  678. padding-top: 0;
  679. }
  680. .context .ctl {
  681. width: 211px;
  682. float: left;
  683. padding-left: 16px;
  684. margin-right: 20px;
  685. }
  686. .ctl span {
  687. width: 100%;
  688. height: 30px;
  689. line-height: 30px;
  690. overflow: hidden;
  691. display: block;
  692. margin: 0 auto;
  693. background-color: #f8f8f8;
  694. color: #404040;
  695. font-size: 14px;
  696. text-align: left;
  697. padding-left: 20px;
  698. margin-bottom: 15px;
  699. }
  700. .ctl span:nth-child(2) {
  701. margin-bottom: 0px;
  702. }
  703. /deep/ .el-button--primary.is-plain {
  704. background-color: #fff;
  705. }
  706. /deep/ .el-button--primary.is-plain:hover {
  707. color: #005ea2 !important;
  708. }
  709. .blue {
  710. color: #3799ff;
  711. }
  712. .appoint {
  713. width: 100%;
  714. overflow: hidden;
  715. display: block;
  716. margin: 0 auto;
  717. background: #fff;
  718. margin-top: 15px;
  719. border-radius: 12px;
  720. padding-top: 15px;
  721. padding-bottom: 1px;
  722. }
  723. .appoint .title {
  724. overflow: hidden;
  725. display: block;
  726. margin: 0 auto;
  727. padding-left: 30px;
  728. }
  729. .appoint .title h5 {
  730. margin: 0;
  731. float: left;
  732. font-size: 18px;
  733. }
  734. .appoint .title span {
  735. float: right;
  736. margin-right: 43px;
  737. font-size: 14px;
  738. color: #717171;
  739. }
  740. .appoint .appointCard {
  741. min-height: 195px;
  742. overflow: hidden;
  743. display: block;
  744. margin: 0 auto;
  745. padding-top: 25px;
  746. padding-bottom: 25px;
  747. padding-left: 30px;
  748. padding-right: 30px;
  749. }
  750. /deep/ .el-card {
  751. width: 150px;
  752. float: left;
  753. margin-right: 31px;
  754. padding: 0;
  755. border-radius: 12px;
  756. }
  757. /deep/ .el-card:nth-child(last) {
  758. margin-right: 0;
  759. }
  760. /deep/ .el-card__body {
  761. padding: 0;
  762. }
  763. .cardTitle {
  764. width: 100%;
  765. overflow: hidden;
  766. display: block;
  767. margin: 0 auto;
  768. height: 40px;
  769. line-height: 40px;
  770. background: #f0f2f5;
  771. }
  772. .appointCard span {
  773. width: 100%;
  774. overflow: hidden;
  775. display: block;
  776. margin: 0 auto;
  777. color: #777777;
  778. font-family: Arial;
  779. margin-top: 10px;
  780. margin-bottom: 10px;
  781. font-size: 16px;
  782. }
  783. .appointCard em {
  784. overflow: hidden;
  785. display: block;
  786. margin: 0 auto;
  787. font-size: 12px;
  788. margin-bottom: 14px;
  789. text-align: left;
  790. padding-left: 16px;
  791. padding-right: 16px;
  792. }
  793. .appointCard em i {
  794. float: right;
  795. color: #000000;
  796. padding-right: 3px;
  797. }
  798. .appointCard em s {
  799. /*width: 47px;*/
  800. height: 20px;
  801. line-height: 20px;
  802. text-align: center;
  803. font-style: normal;
  804. text-decoration: none;
  805. float: right;
  806. border-radius: 3px;
  807. padding: 0 3px;
  808. }
  809. .appointCard em s.blue {
  810. background-color: #e5f2ff;
  811. color: #3799ff;
  812. }
  813. .appointCard em s.red {
  814. background-color: #e5f2ff;
  815. color: rgb(204, 2, 2);
  816. }
  817. .rtContext {
  818. width: 100%;
  819. height: 100%;
  820. overflow: hidden;
  821. overflow-y: hidden;
  822. display: block;
  823. margin: 0 auto;
  824. margin-top: 0px;
  825. background: #fff;
  826. padding: 0;
  827. border-radius: 12px;
  828. min-height: 826px;
  829. background: #fff;
  830. }
  831. .rtContext .rtTitle {
  832. overflow: hidden;
  833. display: block;
  834. margin: 0 auto;
  835. padding: 10px 30px;
  836. }
  837. .rtTitle h5 {
  838. margin: 0;
  839. float: left;
  840. font-size: 18px;
  841. }
  842. .rtTitle span {
  843. float: right;
  844. font-size: 14px;
  845. color: #bdbdbd;
  846. cursor: pointer;
  847. }
  848. .rtContext ul {
  849. width: 100%;
  850. overflow: hidden;
  851. display: block;
  852. height: 100%;
  853. overflow: hidden;
  854. overflow-y: scroll;
  855. margin: 0 auto;
  856. padding-left: 30px;
  857. padding-right: 30px;
  858. }
  859. .rtContext li {
  860. width: 100%;
  861. overflow: hidden;
  862. display: block;
  863. margin: 0 auto;
  864. border-bottom: 1px solid #f0f2f5;
  865. padding-top: 30px;
  866. padding-bottom: 10px;
  867. cursor: pointer;
  868. }
  869. .asTitle {
  870. height: 30px;
  871. overflow: hidden;
  872. display: block;
  873. margin: 0 auto;
  874. text-align: left;
  875. line-height: 20px;
  876. color: #000000;
  877. font-size: 14px;
  878. }
  879. .asTitle span div {
  880. margin-left: 8px;
  881. }
  882. .asTitle img {
  883. float: left;
  884. margin-right: 5px;
  885. }
  886. .asTitle span {
  887. width: 50%;
  888. height: 30px;
  889. line-height: 26px;
  890. float: left;
  891. margin-right: 0px;
  892. }
  893. .asTitle em {
  894. width: 50%;
  895. float: left;
  896. text-align: right;
  897. }
  898. .asTitle span div {
  899. float: left;
  900. }
  901. .asContent {
  902. width: 100%;
  903. overflow: hidden;
  904. display: block;
  905. margin: 0 auto;
  906. }
  907. .asContent span {
  908. width: 50%;
  909. float: left;
  910. font-size: 14px;
  911. color: #bdbdbd;
  912. margin-bottom: 10px;
  913. text-align: left;
  914. text-indent: 8px;
  915. }
  916. .asContent span em {
  917. color: #000;
  918. text-align: left;
  919. float: left;
  920. }
  921. .asContent span s {
  922. text-decoration: none;
  923. color: #000;
  924. border-radius: 250px;
  925. padding: 3px 5px;
  926. text-align: center;
  927. }
  928. .asContent span div {
  929. float: left;
  930. }
  931. .asContent span s.blue {
  932. background-color: #e5f2ff;
  933. }
  934. .box-card {
  935. cursor: pointer;
  936. }
  937. .box-card em {
  938. font-style: normal;
  939. }
  940. i {
  941. font-style: normal;
  942. }
  943. .asContent .green {
  944. color: #25cc42;
  945. }
  946. .asContent .red {
  947. color: red;
  948. }
  949. .asContent .yellow {
  950. color: #ffdd00;
  951. }
  952. /deep/ a {
  953. color: #03b1ff;
  954. }
  955. .tips {
  956. color: #333;
  957. font-size: 14px !important;
  958. overflow: hidden;
  959. display: block;
  960. margin: 0 auto;
  961. margin-top: 10px;
  962. line-height: 30px;
  963. }
  964. .middleTips {
  965. margin-top: 180px;
  966. }
  967. .esmall {
  968. float: right;
  969. font-size: 14px;
  970. text-align: right;
  971. }
  972. /*ipad only*/
  973. @media only screen and (max-width: 1366px) {
  974. .container {
  975. /*height: 600px;*/
  976. padding-top: 6px;
  977. }
  978. .container .lt {
  979. width: 80%;
  980. }
  981. .asTitle {
  982. height: 60px;
  983. }
  984. .asTitle img {
  985. display: none;
  986. }
  987. .asTitle span {
  988. width: 100%;
  989. }
  990. .lt .top {
  991. width: 96%;
  992. /* float: left; */
  993. margin-bottom: 1px;
  994. }
  995. .lt .top li {
  996. width: 32%;
  997. margin-right: 2%;
  998. }
  999. .top li .liRight {
  1000. width: 40%;
  1001. }
  1002. .btLine {
  1003. width: 96%;
  1004. }
  1005. .btLine em {
  1006. font-size: 12px;
  1007. /* float: left; */
  1008. line-height: 22px;
  1009. }
  1010. .finish {
  1011. /* float: left; */
  1012. }
  1013. .finish ul li {
  1014. width: 30%;
  1015. /*height: 159px;*/
  1016. overflow: hidden;
  1017. padding-bottom: 20px;
  1018. }
  1019. .finish li .context {
  1020. width: 99%;
  1021. overflow: hidden;
  1022. display: block;
  1023. margin: 0;
  1024. padding: 0px;
  1025. height: auto !important;
  1026. padding-bottom: 5px;
  1027. border-top-left-radius: 0;
  1028. border-top-right-radius: 0;
  1029. }
  1030. .finish li .context .ctl {
  1031. width: 100%;
  1032. overflow: hidden;
  1033. display: block;
  1034. margin: 0;
  1035. padding: 0;
  1036. padding-top: 6px;
  1037. margin-bottom: 3px;
  1038. }
  1039. .ctl span {
  1040. width: 80%;
  1041. padding: 0;
  1042. font-size: 12px;
  1043. text-align: center;
  1044. }
  1045. .finish {
  1046. width: 97%;
  1047. }
  1048. .appoint {
  1049. width: 97%;
  1050. }
  1051. .finish .context em {
  1052. height: 30px;
  1053. line-height: 40px;
  1054. font-size: 12px;
  1055. float: left;
  1056. }
  1057. .finish .context {
  1058. height: auto !important;
  1059. padding-bottom: 5px;
  1060. }
  1061. .el-main>.container {
  1062. /*height: 772px;*/
  1063. }
  1064. .container .rt {
  1065. width: 20%;
  1066. }
  1067. .rtTitle span {
  1068. font-size: 12px;
  1069. line-height: 30px;
  1070. }
  1071. .rtContext ul {
  1072. padding: 2px !important;
  1073. font-size: 12px;
  1074. }
  1075. .appoint {
  1076. /* float: left; */
  1077. margin-top: 9px;
  1078. }
  1079. .asTitle {
  1080. float: left;
  1081. }
  1082. .asContent {
  1083. width: 100%;
  1084. }
  1085. .asContent span {
  1086. width: 100%;
  1087. overflow: hidden;
  1088. display: block;
  1089. margin: 0 auto;
  1090. font-size: 12px;
  1091. height: 20px;
  1092. }
  1093. .appoint .appointCard {
  1094. padding-top: 4px;
  1095. padding-bottom: 4px;
  1096. }
  1097. }
  1098. </style>