TeamworkScheduling.vue 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384
  1. <!-- 活动解析 -->
  2. <template>
  3. <div>
  4. <!-- table 表格 -->
  5. <el-col :span="18" class="main">
  6. <el-row :gutter="20" class="main-header">
  7. <el-col :span="8" :offset="0">
  8. <div
  9. @click="handApor()"
  10. :class="{Apporvalactive:Activeindex == false,ApporStyles:true}"
  11. >批改老师</div>
  12. <div
  13. @click="AutoApor()"
  14. :class="{Apporvalactive:Activeindex == true,ApporStyles:true}"
  15. >匹配知识点老师</div>
  16. </el-col>
  17. <el-col :span="6">
  18. <div class="main-header-item" style="color:red;">
  19. 小组实时在岗率:
  20. <span>{{FindTeamTeacherList.dutyRatio}}%</span>
  21. </div>
  22. </el-col>
  23. <el-col :span="4" :offset="0">
  24. <div @click="SelectgroupDetail()" class="NextMonthList">{{showSelectCodeWord}}</div>
  25. </el-col>
  26. <el-col :span="6">
  27. <div class="teach-block">
  28. <div class="Dayteach-Allot">
  29. <input
  30. type="text"
  31. placeholder="请输入老师名字"
  32. v-model="filters1.inputValue"
  33. class="Dayinput-with-Allot"
  34. />
  35. <span
  36. v-if="this.Activeindex == false"
  37. @click="SearchGetFindTeamTeacherListInfo()"
  38. class="DaySeachIcon el-icon-search"
  39. ></span>
  40. <span
  41. v-if="this.Activeindex == true"
  42. @click="SearchGetFindTeamTeacherListInfo()"
  43. class="DaySeachIcon el-icon-search"
  44. ></span>
  45. </div>
  46. </div>
  47. </el-col>
  48. <el-col :span="24">
  49. <div class="table">
  50. <div class="table-head">
  51. <div>头像</div>
  52. <div>姓名</div>
  53. <div>本月排班时段数</div>
  54. <div>出勤率</div>
  55. <div>科目</div>
  56. </div>
  57. <div class="tr" v-for="(v, k) of FindTeamTeacherList.list" :key="k">
  58. <div class="tr-first" :class="{BgcColor:k%2 !== 1}">
  59. <div>
  60. <img :src="BASE_URL + v.photo" v-if="v.photo" alt class="table-img" />
  61. <img v-if="!v.photo" src="../assets/img/attt.png" alt class="table-img" />
  62. </div>
  63. <div>{{v.teacherName}}</div>
  64. <div>{{v.haveCount}}</div>
  65. <div :class="{grayRed:v.attendanceRatio <80}">{{v.attendanceRatio}}%</div>
  66. <div>{{v.subject}}</div>
  67. <div class="tr-seconds">
  68. <span
  69. @click="groupDetail(v)"
  70. style="cursor: pointer;"
  71. class="tr-second-check"
  72. >查看排班表</span>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. <!-- 分页显示 -->
  78. <el-pagination
  79. background
  80. @size-change="handleSizeChange1"
  81. @current-change="pageChange1"
  82. :page-sizes="[10]"
  83. layout="total, prev, pager, next"
  84. :total="parseInt(FindTeamTeacherList.totalElements)"
  85. :hide-on-single-page="true"
  86. ></el-pagination>
  87. <div style="clear:both;"></div>
  88. </el-col>
  89. </el-row>
  90. </el-col>
  91. <!-- </el-row> -->
  92. <div class="showModel" @click="updateIsShowCarouselPictureModal()" v-if="NoAllotManagerModel">
  93. <div class="modal-cancel" @click="updateIsShowCarouselPictureModal()">X</div>
  94. <div class="detailinfo">
  95. <el-col :span="24">
  96. <h1 class="tiplog">{{TeacherThisMonthDutyList.month}}月排班情况</h1>
  97. <div class="RatyMonth">
  98. 当月出勤率
  99. <span
  100. style="color:#333333;font-size:16px;margin-left:10px;"
  101. >{{TeacherThisMonthDutyList.dutyRate}}%</span>
  102. </div>
  103. <div class="canlender" id="canlender">
  104. <div class="tablebox1">
  105. <el-row :gutter="24">
  106. <el-col :span="24" :offset="0">
  107. <!-- 日期 -->
  108. <div class="date">
  109. <div class="calendar-week">
  110. <div class="week-item" v-for="item of daynamearr" :key="item">
  111. <span :class="[item == '六' || item == '日'?'grayRed':'']">{{item}}</span>
  112. </div>
  113. </div>
  114. <div
  115. class="calendar-inner"
  116. v-if="TeacherThisMonthDutyList.dayList && TeacherThisMonthDutyList.dayList.length>0"
  117. >
  118. <div
  119. v-for="(item, index) of calendarList"
  120. :class="[item.pastDay ? 'psatchecked' : 'calendar-item']"
  121. :key="index"
  122. >
  123. <div slot="reference" class="day-setting">
  124. <div class="date-day">{{ item.date }}</div>
  125. <div class="people" v-if="item.dateList && item.dateList.timeVoList">
  126. <div class="people-items" v-show="item.dateList.isOpen ==1">
  127. <div
  128. :class="[item.pastDay ? 'Past-items-text' : 'people-items-text']"
  129. v-for="(v, k) of item.dateList.timeVoList"
  130. :key="k"
  131. >
  132. <span v-if="v.timeState ==1">{{v.startInterval}}-{{v.endInterval}}</span>
  133. <span
  134. class="selectIng"
  135. v-if="v.timeState ==2 && !item.pastDay"
  136. >{{v.startInterval}}-{{v.endInterval}}</span>
  137. <span
  138. class="MuchselectIng"
  139. v-if="v.timeState ==2 && item.pastDay"
  140. >{{v.startInterval}}-{{v.endInterval}}</span>
  141. <span
  142. class="LostselectIng"
  143. v-if="v.timeState ==4"
  144. >{{v.startInterval}}-{{v.endInterval}}</span>
  145. <span
  146. class="MuchselectIng"
  147. v-if="v.timeState ==3"
  148. >{{v.startInterval}}-{{v.endInterval}}</span>
  149. </div>
  150. </div>
  151. <div
  152. class="people-items"
  153. style="color:#999999;backgroung-color:#F9F9F9"
  154. v-show="item.dateList.isOpen ==0"
  155. >
  156. <div>不开放</div>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. </el-col>
  164. </el-row>
  165. </div>
  166. </div>
  167. </el-col>
  168. </div>
  169. </div>
  170. <!-- 筛选排班时段 -->
  171. <div class="showModel" v-if="SelectTeacherworkListModel">
  172. <div class="modal-cancel" @click="updateIsShowSelectWorkListModal()">X</div>
  173. <div class="detailinfo">
  174. <div
  175. class="Selcetmodel-btn-items model-grdeen"
  176. style="float:right"
  177. @click="saveOpenCloseDAys()"
  178. >确定</div>
  179. <el-col :span="24">
  180. <!-- <h1 class="tiplog">{{TeacherThisMonthDutyList.month}}月排班情况</h1> -->
  181. <div class="canlender" id="canlender">
  182. <div class="tablebox1">
  183. <el-row :gutter="24">
  184. <el-col :span="24" :offset="0">
  185. <!-- 日期 -->
  186. <div class="date">
  187. <div class="calendar-week">
  188. <div class="week-item" v-for="item of daynamearr" :key="item">
  189. <span :class="[item == '六' || item == '日'?'grayRed':'']">{{item}}</span>
  190. </div>
  191. </div>
  192. <div
  193. class="calendar-inner"
  194. v-if="FindArrangeTemplateIntervalList.list && FindArrangeTemplateIntervalList.list.length>0"
  195. >
  196. <div
  197. v-for="(item, index) of setCalendarList"
  198. :class="[item.pastDay ? 'psatchecked' : 'calendar-item']"
  199. :key="index"
  200. >
  201. <div slot="reference" class="day-setting">
  202. <div class="date-day">{{ item.date }}</div>
  203. <div class="people" v-if="item.dateList && item.dateList.intervalList">
  204. <div class="people-items" v-show="item.dateList.isOpen ==1">
  205. <div
  206. :class="[item.pastDay ? 'Past-items-text' : 'people-items-text']"
  207. v-for="(v, k) of item.dateList.intervalList"
  208. :key="k"
  209. >
  210. <a
  211. v-if="item.pastDay"
  212. href="javaScript:;"
  213. class="selectIngHovernomal"
  214. >
  215. <span>{{v.startInterval}}-{{v.endInterval}}</span>
  216. </a>
  217. <a
  218. v-if="!item.pastDay"
  219. :class="[v.id == SelectSearchId ? 'selectIngTimeCode' : '']"
  220. href="javaScript:;"
  221. @click="SelectActiveindex(v)"
  222. class="selectIngHover"
  223. >
  224. <span>{{v.startInterval}}-{{v.endInterval}}</span>
  225. </a>
  226. </div>
  227. </div>
  228. <div
  229. class="people-items"
  230. style="color:#999999;backgroung-color:#F9F9F9"
  231. v-show="item.dateList.isOpen ==0"
  232. >
  233. <div>不开放</div>
  234. </div>
  235. </div>
  236. </div>
  237. </div>
  238. </div>
  239. </div>
  240. </el-col>
  241. </el-row>
  242. </div>
  243. </div>
  244. </el-col>
  245. </div>
  246. </div>
  247. </div>
  248. </template>
  249. <script>
  250. import { mapGetters, mapActions } from "vuex";
  251. import { IMG_BASE_URL } from "@/config";
  252. export default {
  253. components: {},
  254. name: "actvResolveLabel",
  255. props: {},
  256. data() {
  257. return {
  258. daynamearr: ["一", "二", "三", "四", "五", "六", "日"],
  259. //本月的本期构成
  260. dayarr: [],
  261. managerId: "",
  262. year: new Date().getFullYear(),
  263. D: new Date().getDate() + " ",
  264. // month: new Date().getMonth() + 1,
  265. NewDay: "",
  266. SelectSearchId: "",
  267. showSelectCodeWord: "筛选时段",
  268. BASE_URL: IMG_BASE_URL,
  269. accessToken: localStorage.getItem("accessToken"),
  270. NoAllotManagerModel: false, //token
  271. SelectTeacherworkListModel: false,
  272. Activeindex: false,
  273. TEACHERTYPE: 8,
  274. current: {}, // 当前时间
  275. calendarList: [], // 排班列表
  276. setCalendarList: [], // 排班设置列表
  277. shareDate: new Date(), // 享元模式,用来做优化的
  278. month: "",
  279. today: "",
  280. filters1: {
  281. pageNo: 1,
  282. pageSize: 10,
  283. inputValue: ""
  284. },
  285. pictureIndex: 0
  286. };
  287. },
  288. created() {
  289. const managerId = this.$route.query.managerId;
  290. this.managerId = managerId;
  291. },
  292. watch: {
  293. TeacherThisMonthDutySucess(val, oldVal) {
  294. //保存排班设置成功的watch监听回调
  295. this.init();
  296. },
  297. FindArrangeTemplateIntervalListStatus(val, oldVal) {
  298. this.init();
  299. }
  300. },
  301. computed: {
  302. ...mapGetters([
  303. "TeacherThisMonthDutyList",
  304. "FindTeamTeacherList",
  305. "TeacherThisMonthDutySucess",
  306. "FindArrangeTemplateIntervalList",
  307. "FindArrangeTemplateIntervalListStatus"
  308. ])
  309. },
  310. methods: {
  311. ...mapActions(["setUser"]),
  312. // 获取校区管理员监控数据
  313. async InfoWatch() {},
  314. // 数据监控手动批改
  315. handApor() {
  316. this.Activeindex = false;
  317. this.filters1.pageNo = 1;
  318. this.filters1.inputValue = "";
  319. this.showSelectCodeWord = "筛选时段";
  320. this.SelectSearchId = "";
  321. this.TEACHERTYPE = 8;
  322. this.GetFindTeamTeacherListInfo();
  323. },
  324. // 数据监控匹配知识点老师
  325. AutoApor() {
  326. this.Activeindex = true;
  327. this.filters1.pageNo = 1;
  328. this.filters1.inputValue = "";
  329. this.showSelectCodeWord = "筛选时段";
  330. this.SelectSearchId = "";
  331. this.TEACHERTYPE = 13;
  332. this.GetFindTeamTeacherListInfo();
  333. },
  334. // 查询当月日历时间列表
  335. async GetFindArrangeTemplateIntervalListInfo() {
  336. this.$store.dispatch("GetFindArrangeTemplateIntervalList", {});
  337. },
  338. SearchGetFindTeamTeacherListInfo() {
  339. this.SelectSearchId = "";
  340. this.showSelectCodeWord = "筛选时段";
  341. this.GetFindTeamTeacherListInfo();
  342. },
  343. // 组内排班老师列表
  344. async GetFindTeamTeacherListInfo() {
  345. this.$store.dispatch("GetFindTeamTeacherList", {
  346. managerId: this.managerId,
  347. type: this.TEACHERTYPE,
  348. pageSize: this.filters1.pageSize,
  349. pageNo: this.filters1.pageNo,
  350. id: this.SelectSearchId,
  351. teacherName: this.filters1.inputValue
  352. });
  353. },
  354. handleSizeChange1(val) {
  355. this.filters1.pageSize = val;
  356. this.GetFindTeamTeacherListInfo();
  357. },
  358. pageChange1(val) {
  359. this.filters1.pageNo = val;
  360. this.GetFindTeamTeacherListInfo();
  361. },
  362. updateIsShowCarouselPictureModal() {
  363. this.NoAllotManagerModel = false;
  364. },
  365. updateIsShowSelectWorkListModal() {
  366. this.SelectTeacherworkListModel = false;
  367. },
  368. //老师排班详情
  369. groupDetail(str) {
  370. this.pictureIndex = 0;
  371. this.NoAllotManagerModel = true;
  372. this.$store.dispatch("GetTeacherThisMonthDutyList", {
  373. teacherId: str.teacherId
  374. });
  375. // this.init();
  376. },
  377. //筛选时段
  378. SelectgroupDetail() {
  379. // this.pictureIndex = 0;
  380. this.SelectTeacherworkListModel = true;
  381. this.GetFindArrangeTemplateIntervalListInfo();
  382. },
  383. SelectActiveindex(v) {
  384. this.SelectSearchId = v.id;
  385. this.showSelectCodeWord =
  386. v.arrangeDate + "-" + v.startInterval + "-" + v.endInterval;
  387. },
  388. //确定提交所选中时段
  389. saveOpenCloseDAys() {
  390. this.SelectTeacherworkListModel = false;
  391. this.filters1.inputValue = "";
  392. this.GetFindTeamTeacherListInfo();
  393. },
  394. // 日期处理
  395. init() {
  396. // 初始化当前时间
  397. this.setCurrent();
  398. this.calendarCreator();
  399. },
  400. // 判断当前月有多少天
  401. getDaysByMonth(year, month) {
  402. return new Date(year, month + 1, 0).getDate();
  403. },
  404. getFirstDayByMonths(year, month) {
  405. return new Date(year, month, 1).getDay();
  406. },
  407. getLastDayByMonth(year, month) {
  408. return new Date(year, month + 1, 0).getDay();
  409. },
  410. // 对小于 10 的数字,前面补 0
  411. pad(str) {
  412. return str < 10 ? `0${str}` : str;
  413. },
  414. // 点击上一月
  415. prevMonth() {
  416. this.current.month--;
  417. // 因为 month的变化 会超出 0-11 的范围, 所以需要重新计算
  418. this.correctCurrent();
  419. // 生成新日期
  420. this.calendarCreator();
  421. },
  422. // 点击下一月
  423. nextMonth() {
  424. this.current.month++;
  425. // 因为 month的变化 会超出 0-11 的范围, 所以需要重新计算
  426. this.correctCurrent();
  427. // 生成新日期
  428. this.calendarCreator();
  429. },
  430. // 格式化时间,与主逻辑无关
  431. stringify(year, month, date) {
  432. let str = [year, this.pad(month + 1), this.pad(date)].join("-");
  433. return str;
  434. },
  435. // 设置或初始化 current
  436. setCurrent(d = new Date()) {
  437. let year = d.getFullYear();
  438. let month = d.getMonth();
  439. let date = d.getDate();
  440. this.current = {
  441. year,
  442. month,
  443. date
  444. };
  445. },
  446. // 修正 current
  447. correctCurrent() {
  448. let { year, month, date } = this.current;
  449. let maxDate = this.getDaysByMonth(year, month);
  450. // 预防其他月跳转到2月,2月最多只有29天,没有30-31
  451. date = Math.min(maxDate, date);
  452. let instance = new Date(year, month, date);
  453. this.setCurrent(instance);
  454. },
  455. // 生成日期
  456. calendarCreator() {
  457. // 一天有多少毫秒
  458. const oneDayMS = 24 * 60 * 60 * 1000;
  459. let list = [];
  460. let setList = [];
  461. let { year, month } = this.current;
  462. // 当前月份第一天是星期几, 0-6
  463. let firstDay = this.getFirstDayByMonths(year, month);
  464. // 填充多少天
  465. let prefixDaysLen = firstDay === 0 ? 6 : firstDay - 1;
  466. // 毫秒数
  467. let begin = new Date(year, month, 1).getTime() - oneDayMS * prefixDaysLen;
  468. // 当前月份最后一天是星期几, 0-6
  469. let lastDay = this.getLastDayByMonth(year, month);
  470. // 填充多少天, 和星期的排放顺序有关
  471. let suffixDaysLen = lastDay === 0 ? 0 : 7 - lastDay;
  472. // 毫秒数
  473. let end =
  474. new Date(year, month + 1, 0).getTime() + oneDayMS * suffixDaysLen;
  475. // 计算今天几号
  476. let today = new Date().getDate();
  477. // 饱和度
  478. // console.log(today)
  479. while (begin <= end) {
  480. // 享元模式,避免重复 new Date
  481. this.shareDate.setTime(begin);
  482. let year = this.shareDate.getFullYear();
  483. let curMonth = this.shareDate.getMonth();
  484. let date = this.shareDate.getDate();
  485. // console.log(FindCalendarList)
  486. // || date < today
  487. // 排班
  488. list.push({
  489. year: year,
  490. month: curMonth,
  491. date: date,
  492. disable: curMonth !== month,
  493. pastDay: date < today && curMonth == month,
  494. status: false,
  495. value: this.stringify(year, curMonth, date)
  496. });
  497. // 排班设置
  498. setList.push({
  499. year: year,
  500. month: curMonth,
  501. date: date,
  502. status: false,
  503. disable: curMonth !== month,
  504. pastDay: date < today && curMonth == month,
  505. value: this.stringify(year, curMonth, date)
  506. });
  507. begin += oneDayMS;
  508. }
  509. var that = this;
  510. // debugger
  511. if (
  512. that.TeacherThisMonthDutyList.dayList &&
  513. that.TeacherThisMonthDutyList.dayList.length > 0
  514. ) {
  515. for (let i = 0; i < list.length; i++) {
  516. if (!list[i].disable) {
  517. const dateValue = list[i].date;
  518. // debugger
  519. for (
  520. let t = 0;
  521. t < that.TeacherThisMonthDutyList.dayList.length;
  522. t++
  523. ) {
  524. if (dateValue == that.TeacherThisMonthDutyList.dayList[t].day) {
  525. list[i].dateList = that.TeacherThisMonthDutyList.dayList[t];
  526. }
  527. }
  528. } else {
  529. list[i].dateList = {
  530. timeVoList: []
  531. };
  532. }
  533. }
  534. }
  535. if (
  536. that.FindArrangeTemplateIntervalList.list &&
  537. that.FindArrangeTemplateIntervalList.list.length > 0
  538. ) {
  539. for (let i = 0; i < setList.length; i++) {
  540. if (!setList[i].disable) {
  541. const dateValue = setList[i].value;
  542. for (
  543. let t = 0;
  544. t < that.FindArrangeTemplateIntervalList.list.length;
  545. t++
  546. ) {
  547. if (
  548. dateValue ==
  549. that.FindArrangeTemplateIntervalList.list[t].arrangeDate
  550. ) {
  551. setList[i].dateList =
  552. that.FindArrangeTemplateIntervalList.list[t];
  553. }
  554. }
  555. } else {
  556. setList[i].dateList = {};
  557. }
  558. }
  559. }
  560. this.calendarList = list;
  561. this.setCalendarList = setList;
  562. }
  563. },
  564. mounted() {
  565. this.GetFindTeamTeacherListInfo();
  566. }
  567. };
  568. </script>
  569. <!-- Add "scoped" attribute to limit CSS to this component only -->
  570. <style scoped>
  571. .showModel {
  572. width: 100%;
  573. height: 100%;
  574. position: fixed;
  575. top: 0;
  576. left: 0;
  577. background-color: rgba(5, 5, 5, 0.5);
  578. opacity: 1 !important;
  579. overflow: hidden !important;
  580. /* color: #fff; */
  581. }
  582. .modal-cancel {
  583. position: absolute;
  584. top: 20px;
  585. right: 40px;
  586. width: 50px;
  587. height: 50px;
  588. text-align: center;
  589. line-height: 50px;
  590. background-color: rgba(66, 56, 56, 0.5);
  591. border-radius: 100px;
  592. font-size: 16;
  593. color: #eee;
  594. cursor: pointer;
  595. }
  596. .detailinfo {
  597. position: absolute;
  598. left: 10%;
  599. /* margin-left: 15%; */
  600. top: 10%;
  601. width: 70%;
  602. height: 800px;
  603. background: #fff;
  604. text-align: center;
  605. line-height: 50px;
  606. font-size: 16;
  607. overflow: auto;
  608. z-index: 9999;
  609. opacity: 1 !important;
  610. color: #000000;
  611. padding: 50px !important;
  612. }
  613. /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
  614. ::-webkit-scrollbar {
  615. width: 5px; /*滚动条宽度*/
  616. height: 15px; /*滚动条高度*/
  617. }
  618. /*定义滚动条轨道 内阴影+圆角*/
  619. ::-webkit-scrollbar-track {
  620. -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
  621. border-radius: 10px; /*滚动条的背景区域的圆角*/
  622. background-color: #fff; /*滚动条的背景颜色*/
  623. }
  624. /*定义滑块 内阴影+圆角*/
  625. ::-webkit-scrollbar-thumb {
  626. border-radius: 10px; /*滚动条的圆角*/
  627. -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
  628. background-color: #bcbaba; /*滚动条的背景颜色*/
  629. }
  630. .detailImg {
  631. background: #000000;
  632. position: absolute;
  633. left: 0;
  634. top: 20px;
  635. width: 600px;
  636. height: 700px;
  637. text-align: center;
  638. line-height: 50px;
  639. border-radius: 15px;
  640. font-size: 16;
  641. color: rgb(0, 0, 0);
  642. opacity: 1 !important;
  643. /* cursor: pointer; */
  644. }
  645. .detailword {
  646. background: #eee;
  647. position: absolute;
  648. right: 0;
  649. top: 20px;
  650. width: 600px;
  651. height: 700px;
  652. text-align: center;
  653. line-height: 50px;
  654. border-radius: 15px;
  655. font-size: 16;
  656. color: #000000;
  657. opacity: 1 !important;
  658. /* cursor: pointer; */
  659. }
  660. .detailImg img {
  661. width: 600px;
  662. height: 700px;
  663. border-radius: 15px;
  664. }
  665. .tipsesson {
  666. font-size: 18px;
  667. font-weight: 700;
  668. position: absolute;
  669. left: 10px;
  670. top: 20px;
  671. }
  672. .tipsessonWord {
  673. width: 100%;
  674. height: 400px;
  675. font-size: 14px;
  676. position: absolute;
  677. left: 10px;
  678. top: 50px;
  679. padding: 0 20px;
  680. line-height: 20px;
  681. text-align: left;
  682. }
  683. .BgcColor {
  684. background-color: #f7fbfc;
  685. }
  686. .managertip {
  687. font-size: 20px;
  688. font-weight: 700;
  689. }
  690. .timeAndteacher {
  691. height: 200px;
  692. position: absolute;
  693. right: 50px;
  694. bottom: 50px;
  695. }
  696. .nextPrveBtn {
  697. width: 400px;
  698. left: 50%;
  699. margin-left: -200px;
  700. height: 200px;
  701. position: absolute;
  702. bottom: 50px;
  703. }
  704. .timeset {
  705. color: #5de26c;
  706. font-size: 16px;
  707. }
  708. .Nextebtn {
  709. height: 100px;
  710. position: absolute;
  711. right: 50px;
  712. bottom: 50px;
  713. }
  714. .prvebtn {
  715. height: 100px;
  716. position: absolute;
  717. left: 50px;
  718. bottom: 50px;
  719. }
  720. .el-pagination.is-background .el-pager li:not(.disabled).active {
  721. background-color: #52cc60 !important;
  722. color: #fff;
  723. }
  724. html,
  725. body {
  726. height: 100%;
  727. overflow: hidden;
  728. }
  729. ul {
  730. text-align: center;
  731. margin: 0 !important;
  732. }
  733. .aside {
  734. /* background-color: #fbfbfb; */
  735. margin-top: 16px;
  736. padding: 0;
  737. min-height: 880px;
  738. }
  739. .main {
  740. background-color: #fff;
  741. margin: 16px;
  742. padding: 0 !important;
  743. /* margin-left: 180px; */
  744. min-height: 980px;
  745. }
  746. .table-aside {
  747. color: #666666;
  748. font-size: 18px;
  749. text-align: center;
  750. line-height: 60px;
  751. cursor: pointer;
  752. }
  753. el-table {
  754. color: #999999;
  755. font-size: 18px;
  756. }
  757. .main-items {
  758. color: #393939;
  759. text-align: center;
  760. line-height: 80px;
  761. }
  762. .main-header-item {
  763. font-size: 16px;
  764. }
  765. .model-manager {
  766. display: flex;
  767. justify-content: space-between;
  768. margin: 30px;
  769. color: #393939;
  770. font-size: 24px;
  771. }
  772. .main-header-link {
  773. color: #52cc60;
  774. font-size: 18px;
  775. margin-left: 10px;
  776. cursor: pointer;
  777. text-decoration: underline;
  778. }
  779. .el-select {
  780. width: 100px;
  781. margin: 0 5px;
  782. }
  783. .input-with-select .el-input-group__prepend {
  784. background-color: #fff;
  785. }
  786. .input-with-new {
  787. border: 1px solid #cccccc;
  788. border-radius: 15px;
  789. height: 30px;
  790. line-height: 30px;
  791. padding: 10px;
  792. font-size: 12px;
  793. color: #eeeeee;
  794. width: 180px;
  795. }
  796. .active {
  797. background-color: #52cc60;
  798. color: #fff;
  799. }
  800. .el-input__inner {
  801. height: 32px;
  802. }
  803. .table-img {
  804. width: 36px;
  805. height: 36px;
  806. border-radius: 6px;
  807. margin-left: 14px;
  808. cursor: pointer;
  809. }
  810. .table {
  811. width: 94.5%;
  812. border-top: 1px solid #e5e5e5;
  813. margin: 0 43px;
  814. }
  815. .table-head {
  816. margin-right: 24%;
  817. color: #999999;
  818. font-size: 18px;
  819. text-align: center;
  820. display: flex;
  821. justify-content: space-around;
  822. }
  823. .table-heads {
  824. margin-left: 15%;
  825. width: 60%;
  826. color: #3ab548;
  827. font-size: 14px;
  828. text-align: center;
  829. display: flex;
  830. justify-content: space-around;
  831. }
  832. .table-heads > div {
  833. width: 13.528%;
  834. }
  835. .table-head > div {
  836. width: 13.528%;
  837. }
  838. .tr {
  839. width: 100%;
  840. color: #393939;
  841. text-align: center;
  842. /* font-weight: 700; */
  843. font-family: "PingFang-SC-Bold";
  844. font-size: 16px;
  845. }
  846. .tr-first {
  847. margin-right: 2%;
  848. display: flex;
  849. justify-content: space-around;
  850. }
  851. .tr-first > div {
  852. width: 14.528%;
  853. }
  854. .psatchecked {
  855. background-color: #f9f9f9;
  856. float: left;
  857. width: 14.28%;
  858. height: 250px;
  859. line-height: 130px;
  860. text-align: center;
  861. color: #aaaaaa;
  862. border: 10px solid #fff;
  863. padding: 4px;
  864. font-weight: 700;
  865. cursor: pointer;
  866. border-radius: 20px;
  867. /* gackgroudcolor: rgba(243, 10, 10, 0.007); */
  868. }
  869. .tr-s {
  870. display: flex;
  871. justify-content: space-around;
  872. }
  873. .tr-set {
  874. background-color: #fbfbfb;
  875. display: flex;
  876. justify-content: space-around;
  877. color: #393939;
  878. font-size: 12px;
  879. margin: 20px;
  880. }
  881. .tr-setNo {
  882. display: flex;
  883. justify-content: space-around;
  884. color: #000000f1;
  885. font-size: 16px;
  886. margin: 20px;
  887. }
  888. .tr-secon {
  889. font-size: 12px;
  890. text-align: center;
  891. word-wrap: break-word;
  892. width: 40px;
  893. }
  894. .tr-second {
  895. background-color: #fbfbfb;
  896. display: flex;
  897. color: #393939;
  898. font-size: 20px;
  899. word-wrap: break-word;
  900. }
  901. .tr-seconds {
  902. text-align: center;
  903. font-size: 14px;
  904. word-wrap: break-word;
  905. margin: 0 50px;
  906. /* height: 30px; */
  907. }
  908. .width40 {
  909. width: 60px;
  910. }
  911. .tr-sw180 {
  912. width: 230px;
  913. text-align: center;
  914. }
  915. .tr-secondsA {
  916. text-align: center;
  917. font-size: 14px;
  918. word-wrap: break-word;
  919. width: 200px;
  920. }
  921. .tr-w120 {
  922. width: 160px;
  923. text-align: left;
  924. display: inline-block;
  925. /*height: 80px;*/
  926. /*line-height: 80px;*/
  927. }
  928. .tr-second-check {
  929. color: #7297ff;
  930. font-size: 17px;
  931. text-decoration: underline;
  932. }
  933. .Online {
  934. display: inline-block;
  935. }
  936. .Onlinename {
  937. display: inline-block;
  938. }
  939. .tr-active {
  940. color: #3ab548;
  941. }
  942. .model {
  943. z-index: 10000;
  944. width: 60%;
  945. height: auto;
  946. position: fixed;
  947. top: 15%;
  948. left: 30%;
  949. margin: auto;
  950. background: #fff;
  951. border-radius: 10px;
  952. text-align: center;
  953. }
  954. .model-text {
  955. background: rgba(255, 255, 255, 1);
  956. border-radius: 10px;
  957. }
  958. .model-items-first {
  959. padding: 0 34px;
  960. width: 100%;
  961. display: flex;
  962. justify-content: space-between;
  963. }
  964. .model-items-first-img {
  965. width: 68px;
  966. height: 68px;
  967. border-radius: 8px;
  968. position: relative;
  969. bottom: 20px;
  970. }
  971. .model-items-first-left {
  972. display: inline-block;
  973. color: #393939;
  974. font-size: 24px;
  975. margin-left: 14px;
  976. text-align: left;
  977. }
  978. .model-items-first-left-down {
  979. color: #7e7e7e;
  980. font-size: 18px;
  981. }
  982. .model-text-head {
  983. padding: 40px 50px;
  984. display: flex;
  985. color: #393939;
  986. font-size: 24px;
  987. justify-content: space-between;
  988. }
  989. .model-items-other {
  990. height: 60px;
  991. line-height: 60px;
  992. color: #393939;
  993. font-size: 20px;
  994. text-align: left;
  995. padding: 0 34px;
  996. }
  997. .model-active {
  998. background-color: #f6f7fb;
  999. }
  1000. .model-active-last {
  1001. border-radius: 0 0 30px 30px;
  1002. background-color: #f6f7fb;
  1003. }
  1004. .model-items-left {
  1005. width: 100%;
  1006. color: #393939;
  1007. font-size: 24px;
  1008. }
  1009. .buttonAppoval {
  1010. display: inline-block;
  1011. }
  1012. .model-items-left-top {
  1013. display: flex;
  1014. justify-content: space-between;
  1015. }
  1016. .model-items {
  1017. padding: 20px 0;
  1018. display: flex;
  1019. justify-content: space-between;
  1020. display: inline-block;
  1021. width: 100%;
  1022. }
  1023. .model-itemss {
  1024. padding: 10px 0;
  1025. display: flex;
  1026. justify-content: space-between;
  1027. display: inline-block;
  1028. }
  1029. .model-items-left-top-img {
  1030. width: 68px;
  1031. height: 68px;
  1032. border-radius: 8px;
  1033. position: relative;
  1034. bottom: 25px;
  1035. }
  1036. .model-items-left-top-number {
  1037. color: #7e7e7e;
  1038. font-size: 18px;
  1039. margin-left: 10px;
  1040. }
  1041. .today-time {
  1042. color: #7e7e7e;
  1043. font-size: 18px;
  1044. margin: 0 20px;
  1045. }
  1046. .el-pagination {
  1047. padding: 30px;
  1048. }
  1049. .no-homework {
  1050. width: 16.5%;
  1051. height: 328px;
  1052. background: rgba(255, 255, 255, 1);
  1053. box-shadow: 0px 0px 14px 0px rgba(228, 228, 228, 1);
  1054. border-radius: 10px;
  1055. margin: auto;
  1056. position: fixed;
  1057. top: 27%;
  1058. left: 41.75%;
  1059. text-align: center;
  1060. padding: 35px;
  1061. z-index: 1000;
  1062. display: none;
  1063. }
  1064. .no-homework > div {
  1065. margin-bottom: 25px;
  1066. font-size: 24px;
  1067. }
  1068. .no-homework > img {
  1069. width: 226px;
  1070. height: 203px;
  1071. }
  1072. .allocation-items {
  1073. width: 45%;
  1074. display: inline-block;
  1075. margin-right: 20px;
  1076. margin-bottom: 30px;
  1077. }
  1078. .ApporStyles {
  1079. display: inline-block;
  1080. width: 200px;
  1081. height: 40px;
  1082. line-height: 40px;
  1083. background-color: #fff;
  1084. border-radius: 20px;
  1085. font-size: 16px;
  1086. color: #7c819d;
  1087. cursor: pointer;
  1088. }
  1089. .Apporvalactive {
  1090. background-color: #52cc60;
  1091. color: #fff;
  1092. }
  1093. .tiplog {
  1094. height: 30px;
  1095. width: 200px;
  1096. /* margin: 10px; */
  1097. font-size: 25px;
  1098. font-weight: 700;
  1099. text-align: left;
  1100. /* margin: 0 auto; */
  1101. }
  1102. .RatyMonth {
  1103. height: 20px;
  1104. width: 200px;
  1105. color: #999999;
  1106. font-size: 16px;
  1107. text-align: left;
  1108. font-weight: 700;
  1109. margin-bottom: 100px;
  1110. }
  1111. .canlender {
  1112. width: 1200px;
  1113. height: 400px;
  1114. margin: 0 auto;
  1115. }
  1116. .Selcetmodel-btn-items {
  1117. width: 154px;
  1118. height: 50px;
  1119. line-height: 50px;
  1120. text-align: center;
  1121. font-size: 18px;
  1122. border-radius: 50px;
  1123. z-index: 99999999999 !important;
  1124. cursor: pointer !important;
  1125. }
  1126. .model-grdeen {
  1127. background-color: #52cc60;
  1128. color: #fff;
  1129. }
  1130. table {
  1131. border-collapse: collapse;
  1132. width: 100%;
  1133. }
  1134. table.bgtable thead tr th {
  1135. height: 30px;
  1136. text-align: center;
  1137. cursor: pointer;
  1138. color: #999999;
  1139. }
  1140. .menu_bgc {
  1141. margin: 10px !important;
  1142. }
  1143. .grayRed {
  1144. color: red;
  1145. }
  1146. table.bgtable tbody tr td {
  1147. height: 100px;
  1148. box-sizing: border-box;
  1149. text-align: center;
  1150. vertical-align: top;
  1151. border: 20px solid #fff;
  1152. padding: 4px;
  1153. font-weight: 700;
  1154. cursor: pointer;
  1155. border-radius: 50px;
  1156. background-color: #f6f7fb;
  1157. }
  1158. table.bgtable tbody tr td.gray {
  1159. color: #fff;
  1160. background: #ffff;
  1161. }
  1162. .number {
  1163. color: #7297ff;
  1164. width: 100%;
  1165. height: 150px;
  1166. }
  1167. .grayBlue {
  1168. color: #fff;
  1169. }
  1170. .number .numberItem {
  1171. width: 100%;
  1172. height: 30px;
  1173. }
  1174. .number .numberItem span {
  1175. display: inline-block;
  1176. width: 120px;
  1177. height: 15px;
  1178. /* background-color: #FF6465; */
  1179. border-radius: 10px;
  1180. }
  1181. .date {
  1182. margin-top: 68px;
  1183. }
  1184. .calendar-week {
  1185. /* border: 1px solid #e5e5e5; */
  1186. text-align: center;
  1187. border-right: none;
  1188. display: flex;
  1189. }
  1190. .week-item {
  1191. display: inline-block;
  1192. background: #ffff;
  1193. width: 14.28%;
  1194. /* border-right: 1px solid #e5e5e5; */
  1195. }
  1196. .calendar-inner {
  1197. border-left: 1px solid #e5e5e5;
  1198. }
  1199. .calendar-item {
  1200. float: left;
  1201. width: 14.28%;
  1202. height: 250px;
  1203. line-height: 130px;
  1204. text-align: center;
  1205. background-color: #f6f7fb;
  1206. border: 10px solid #fff;
  1207. padding-bottom: 4px;
  1208. font-weight: 700;
  1209. cursor: pointer;
  1210. border-radius: 20px;
  1211. /* padding:15px; */
  1212. }
  1213. .timeGone {
  1214. background-color: #f9f9f9;
  1215. }
  1216. .day-setting {
  1217. /* height: 130px; */
  1218. line-height: 130px;
  1219. }
  1220. .calendar-item.disabled {
  1221. color: #ffff;
  1222. }
  1223. .checked {
  1224. background: #f6f7fb;
  1225. }
  1226. .date-day {
  1227. font-size: 16px;
  1228. line-height: 60px;
  1229. color: #aaa;
  1230. }
  1231. .people {
  1232. width: 100%;
  1233. display: flex;
  1234. justify-content: space-around;
  1235. font-size: 14px;
  1236. }
  1237. .people-items {
  1238. width: 100%;
  1239. display: inline-block;
  1240. line-height: 70px;
  1241. margin: 0 auto;
  1242. }
  1243. .people-items span {
  1244. display: block;
  1245. height: 30px;
  1246. line-height: 30px;
  1247. /* width: 100%; */
  1248. text-align: center;
  1249. font-size: 12px;
  1250. border-radius: 10px;
  1251. margin: 10px;
  1252. }
  1253. .people-items-num {
  1254. line-height: 15px;
  1255. padding: 3px 8px;
  1256. }
  1257. .people-items-text {
  1258. width: 100%;
  1259. line-height: 30px;
  1260. font-size: 14px;
  1261. color: #7297ff;
  1262. font-weight: normal;
  1263. }
  1264. .Past-items-text {
  1265. width: 100%;
  1266. line-height: 30px;
  1267. font-size: 14px;
  1268. color: #aaaaaa;
  1269. font-weight: normal;
  1270. }
  1271. .selectIng {
  1272. display: block;
  1273. background-color: #7297ff;
  1274. color: #fff;
  1275. height: 30px;
  1276. line-height: 30px;
  1277. width: 120px;
  1278. font-size: 12px;
  1279. border-radius: 10px;
  1280. margin: 10px;
  1281. }
  1282. .selectIngHover {
  1283. color: #999999;
  1284. text-decoration: none;
  1285. }
  1286. .selectIngHovernomal {
  1287. color: #999999;
  1288. text-decoration: none;
  1289. }
  1290. .selectIngHover :hover {
  1291. display: block;
  1292. background-color: #7297ff;
  1293. color: #fff;
  1294. height: 30px;
  1295. line-height: 30px;
  1296. width: 120px;
  1297. font-size: 12px;
  1298. border-radius: 10px;
  1299. margin: 10px;
  1300. }
  1301. .selectIngTimeCode {
  1302. display: block;
  1303. background-color: #7297ff;
  1304. color: #fff;
  1305. height: 30px;
  1306. line-height: 30px;
  1307. font-size: 12px;
  1308. border-radius: 10px;
  1309. }
  1310. .MuchselectIng {
  1311. display: block;
  1312. background-color: #bbbbbb;
  1313. color: #fff;
  1314. height: 30px;
  1315. line-height: 30px;
  1316. width: 120px;
  1317. font-size: 12px;
  1318. border-radius: 10px;
  1319. margin: 10px;
  1320. }
  1321. .LostselectIng {
  1322. display: block;
  1323. background-color: #ff6465;
  1324. color: #fff;
  1325. height: 30px;
  1326. line-height: 30px;
  1327. width: 120px;
  1328. font-size: 12px;
  1329. border-radius: 10px;
  1330. margin: 10px;
  1331. }
  1332. .Dayinput-with-Allot {
  1333. border: #b6b6b6;
  1334. border-radius: 20px;
  1335. height: 40px;
  1336. width: 300px;
  1337. font-size: 8px;
  1338. color: #b6b6b6;
  1339. text-align: left;
  1340. line-height: 40px;
  1341. background: #f1f2f4;
  1342. padding: 0 10px;
  1343. float: left;
  1344. outline: none !important;
  1345. box-shadow: none;
  1346. }
  1347. .Dayteach-Allot {
  1348. width: 400px;
  1349. position: relative;
  1350. height: 40px;
  1351. top: 15px;
  1352. }
  1353. .DaySeachIcon {
  1354. position: absolute;
  1355. font-size: 20px;
  1356. color: #b6b6b6;
  1357. right: 30%;
  1358. margin-top: 10px;
  1359. cursor: pointer;
  1360. }
  1361. .NextMonthList {
  1362. float: right;
  1363. cursor: pointer;
  1364. margin-top: 20px;
  1365. width: 250px;
  1366. height: 40px;
  1367. border-radius: 20px;
  1368. line-height: 40px;
  1369. background-color: #7297ff;
  1370. color: #fff;
  1371. font-size: 12px;
  1372. }
  1373. </style>