ComposeType.vue 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756
  1. <!-- 活动解析 -->
  2. <template>
  3. <div>
  4. <!-- table 表格 -->
  5. <el-row :gutter="20" class="main-items">
  6. <el-col class="aside" :span="3" :offset="2" style="padding: 0 !important;">
  7. <div
  8. class="table-aside"
  9. v-for="(v, k) in ItemList"
  10. :key="k"
  11. :class="{active:k == modelindex}"
  12. @click="selectTitle(k)"
  13. >{{v.text}}</div>
  14. </el-col>
  15. <!--排班表-->
  16. <!-- {{NextOrNewMonthStatus.NextOrNewMonthStatus}} -->
  17. <el-col
  18. :span="17"
  19. class="main"
  20. v-if="modelindex == 0 && NextOrNewMonthStatus.NextOrNewMonthStatus == false"
  21. >
  22. <el-row :gutter="20">
  23. <!-- {{NextOrNewMonthStatus}} -->
  24. <el-col :span="8" :offset="2">
  25. <div class="selectBox">
  26. <div
  27. class="Ageclass"
  28. @click="choiceclass()"
  29. @mouseover="selectStyle()"
  30. @mouseout="outStyle()"
  31. >
  32. <span class="age-tip">{{selecttitlepag}}</span>
  33. <span :class="[gardeListDown ?'el-icon-caret-top':'el-icon-caret-bottom']"></span>
  34. </div>
  35. <div
  36. class="class-download"
  37. v-show="gardeListDown"
  38. @mouseover="selectStyle()"
  39. @mouseout="outStyle()"
  40. >
  41. <ul v-for="(item, k) in options" :key="k">
  42. <li @click="selectTip(item)">{{item.label}}</li>
  43. </ul>
  44. </div>
  45. </div>
  46. <div class="selectBox">
  47. <div
  48. class="Ageclass"
  49. @click="choiceclass()"
  50. @mouseover="selectStyle1()"
  51. @mouseout="outStyle1()"
  52. >
  53. <span class="age-tip">{{selecttitleage}}</span>
  54. <span :class="[gardeListDownage ?'el-icon-caret-top':'el-icon-caret-bottom']"></span>
  55. </div>
  56. <div
  57. class="class-download"
  58. v-show="gardeListDownage"
  59. @mouseover="selectStyle1()"
  60. @mouseout="outStyle1()"
  61. >
  62. <ul v-for="(item, k) in grades" :key="k">
  63. <li @click="selectTipage(item)">{{item.label}}</li>
  64. </ul>
  65. </div>
  66. </div>
  67. </el-col>
  68. <el-col :span="4" class="month">
  69. <span class="tiplog">{{currentDateStr }}排班情况</span>
  70. <!-- {{DutyTemplateListSTUS}} -->
  71. </el-col>
  72. <el-col :span="8" class="month">
  73. <div
  74. v-if="FindCalendarList.isNextMonth ==1"
  75. @click="shoeNextOrlastMOntlist(1)"
  76. class="NextMonthList"
  77. >
  78. 查看下月排班情况
  79. <span class="el-icon-arrow-right"></span>
  80. </div>
  81. <div
  82. v-if="FindCalendarList.isNextMonth ==0"
  83. class="NextMonthList"
  84. style="width:300px;"
  85. >25号至月底前一天可查看老师下月排班</div>
  86. </el-col>
  87. </el-row>
  88. <el-row :gutter="24">
  89. <el-col :span="20" :offset="2">
  90. <!-- 日期 -->
  91. <div class="date">
  92. <div class="calendar-week">
  93. <div class="week-item" v-for="item of weekList" :key="item">
  94. <span :class="[item == '六' || item == '日'?'grayRed':'']">{{item}}</span>
  95. </div>
  96. </div>
  97. <div
  98. class="calendar-inner"
  99. v-if="FindCalendarList.list && FindCalendarList.list.length >0"
  100. >
  101. <div
  102. class="calendar-item"
  103. v-for="(item, index) of calendarList"
  104. :key="index"
  105. :class="[item.disable ? 'disabled' : '']"
  106. >
  107. <el-popover placement="top" width="500" trigger="click">
  108. <div class="month-day">{{month}}月{{today}}日</div>
  109. <el-table
  110. :data="gridData"
  111. :header-cell-style="{
  112. 'color': '#393939',
  113. 'font-size': '14px'
  114. }"
  115. >
  116. <el-table-column width="150" label="日期" header-align="center" align="center">
  117. <template slot-scope="scope">
  118. <span
  119. :class="[DaytimeFn(scope.row.arrangeDate) >0 ||timeFn(Nowyear+'-'+Nowmonth+'-' + D +scope.row.startInterval+':' + '00') >= -4 && DaytimeFn(scope.row.arrangeDate)>=0?'date-time-active':'']"
  120. >{{scope.row.startInterval}}-{{scope.row.endInterval}}</span>
  121. </template>
  122. </el-table-column>
  123. <el-table-column width="60" label="最少" header-align="center" align="center">
  124. <template slot-scope="scope">
  125. <span
  126. :class="[DaytimeFn(scope.row.arrangeDate) >0 ||timeFn(Nowyear+'-'+Nowmonth+'-' + D +scope.row.startInterval+':' + '00') >= -4 && DaytimeFn(scope.row.arrangeDate)>=0?'date-time-active':'']"
  127. >{{scope.row.miniNum}}</span>
  128. </template>
  129. </el-table-column>
  130. <el-table-column width="60" label="饱和" header-align="center" align="center">
  131. <template slot-scope="scope">
  132. <span
  133. :class="[DaytimeFn(scope.row.arrangeDate) >0 ||timeFn(Nowyear+'-'+Nowmonth+'-' + D +scope.row.startInterval+':' + '00') >= -4 && DaytimeFn(scope.row.arrangeDate)>=0?'date-time-active':'']"
  134. >{{scope.row.maxNum}}</span>
  135. </template>
  136. </el-table-column>
  137. <!-- {{NowHours}} -->
  138. <el-table-column width="60" label="已选" header-align="center" align="center">
  139. <template slot-scope="scope">
  140. <span
  141. :class="[DaytimeFn(scope.row.arrangeDate) >0 ||timeFn(Nowyear+'-'+Nowmonth+'-' + D +scope.row.startInterval+':' + '00') >= -4 && DaytimeFn(scope.row.arrangeDate)>=0?'date-time-active':'']"
  142. >{{scope.row.haveNum}}</span>
  143. </template>
  144. </el-table-column>
  145. <el-table-column
  146. width="130"
  147. property
  148. label
  149. header-align="center"
  150. align="center"
  151. >
  152. <template slot-scope="scope">
  153. <div
  154. :class="[DaytimeFn(scope.row.arrangeDate) >0 ||timeFn(Nowyear+'-'+Nowmonth+'-' + D +scope.row.startInterval+':' + '00') >= -4 && DaytimeFn(scope.row.arrangeDate)>=0?'date-btn-active':'Buttonhole']"
  155. @click="isShow(1,scope.row.id,timeFn(Nowyear+'-'+Nowmonth+'-' + D +scope.row.startInterval+':' + '00'),DaytimeFn(scope.row.arrangeDate))"
  156. >排班</div>
  157. </template>
  158. </el-table-column>
  159. </el-table>
  160. <div
  161. slot="reference"
  162. @click="classSet(index,item.date,item.month,item.dateList.intervalList)"
  163. :class="[item.pastDay ? 'psatchecked' : '']"
  164. class="day-setting"
  165. >
  166. <!-- {{FindCalendarList}} -->
  167. <div class="date-day">{{ item.date }}</div>
  168. <div class="people" v-if="item.dateList && item.dateList.intervalList && item.dateList.isOpen ==0">
  169. <div class="people-items">
  170. <div style="color:#999999" class="people-items-text">不开放</div>
  171. </div>
  172. </div>
  173. <div class="people" v-if="item.dateList && item.dateList.intervalList && item.dateList.isOpen ==1">
  174. <div class="people-items">
  175. <div class="people-items-num">{{item.dateList.miniNum}}</div>
  176. <div class="people-items-text">最少</div>
  177. </div>
  178. <div class="people-items">
  179. <div class="people-items-num">{{item.dateList.maxNum}}</div>
  180. <div class="people-items-text">饱和</div>
  181. </div>
  182. <div class="people-items">
  183. <div
  184. class="people-items-num"
  185. :class="[item.dateList.haveNum < item.dateList.miniNum?'num-red':'']"
  186. >{{item.dateList.haveNum}}</div>
  187. <div class="people-items-text">已选</div>
  188. </div>
  189. </div>
  190. </div>
  191. </el-popover>
  192. </div>
  193. </div>
  194. </div>
  195. </el-col>
  196. </el-row>
  197. </el-col>
  198. <!--排班设置-->
  199. <el-col :span="17" class="main" v-if="modelindex == 1">
  200. <el-row :gutter="20">
  201. <el-col :span="18" class="month" :offset="4">
  202. <span class="tiplog">{{currentDateStr }}排班设置</span>
  203. <div
  204. v-if="this.D <=24"
  205. class="model-btn-items-save model-grdeen"
  206. style="float:right; cursor: pointer; "
  207. @click="saveOpenCloseDAys()"
  208. >保存</div>
  209. <div v-if="this.D >24" class="tiplogPb" style="float:right; cursor: pointer; ">
  210. 请在每月
  211. <span style="color:#52CC60;">24号</span>之前设置排班,当前时间已关闭!
  212. </div>
  213. </el-col>
  214. </el-row>
  215. <el-row :gutter="24">
  216. <el-col :span="20" :offset="2">
  217. <div class="date">
  218. <div class="calendar-week">
  219. <div class="week-item" v-for="item of weekList" :key="item">
  220. <span :class="[item == '六' || item == '日'?'grayRed':'']">{{item}}</span>
  221. </div>
  222. </div>
  223. <div
  224. class="calendar-inner"
  225. v-if="DutyTemplateListInfo.dayList && DutyTemplateListInfo.dayList.length>0"
  226. >
  227. <div
  228. class="calendar-item"
  229. v-for="(item, index) of setCalendarList"
  230. :key="index"
  231. :class="[item.disable ? 'disabled' : '']"
  232. >
  233. <el-popover placement="bottom" width="108" trigger="click">
  234. <div class="date-set" v-if="!item.disable">
  235. <div @click="UnOrWaitOpen(item,1,index)">待开放</div>
  236. <div @click="UnOrWaitOpen(item,2,index)">不开放</div>
  237. </div>
  238. <div class="date-set" v-if="item.disable">当前时段不可操作!</div>
  239. <div
  240. slot="reference"
  241. @click="settingClick(index)"
  242. :class="[item.status ? 'checked' : '']"
  243. class="day-setting"
  244. >
  245. <div class="date-day-set-num">{{ item.date }}</div>
  246. <div>
  247. <div class="date-day-set" v-if="item.dateList.isOpen == 1">待开放</div>
  248. <div
  249. class="date-day-set"
  250. style="color:#FF6465"
  251. v-if="item.dateList.isOpen == 0"
  252. >不开放</div>
  253. </div>
  254. </div>
  255. </el-popover>
  256. </div>
  257. </div>
  258. </div>
  259. </el-col>
  260. </el-row>
  261. </el-col>
  262. <!-- 下个月排班实施动态 -->
  263. <NextMonthList v-if="modelindex == 0 && NextOrNewMonthStatus.NextOrNewMonthStatus == true"></NextMonthList>
  264. </el-row>
  265. <!-- 添加移除老师弹框 -->
  266. <div class="showModel" @click="allShowModel(3)" v-if="isApporTeacher"></div>
  267. <div
  268. class="model min-widthScrol"
  269. style="width:40%; top:10%;min-width: 300px;"
  270. v-if="isApporTeacher"
  271. >
  272. <div class="model-text">
  273. <div class="model-text-head">
  274. <div class="teach-block">
  275. <div class="Daylog">
  276. <span>{{month}}月{{today}}日</span>
  277. <!-- {{FindHaveTeacherList}} -->
  278. <span>{{FindHaveTeacherList.arrangeDetail.startInterval}}-{{FindHaveTeacherList.arrangeDetail.endInterval}}</span>
  279. </div>
  280. <div class="Dayteach-Allot">
  281. <input
  282. type="text"
  283. placeholder="请输入老师名字"
  284. v-model="HaveTeacherList.teacherName"
  285. class="Dayinput-with-Allot"
  286. />
  287. <span @click="SearchFindHaveTeacher()" class="DaySeachIcon el-icon-search"></span>
  288. </div>
  289. <div>
  290. <span class="tr-slogn">最少:{{FindHaveTeacherList.arrangeDetail.miniNum}}</span>
  291. <span class="tr-slogn">已选:{{FindHaveTeacherList.arrangeDetail.haveNum}}</span>
  292. <span class="tr-slogn">饱和:{{FindHaveTeacherList.arrangeDetail.maxNum}}</span>
  293. </div>
  294. </div>
  295. <div>
  296. <img src="../../assets/img/del@2x.png" alt @click="allShowModel(3)" />
  297. </div>
  298. </div>
  299. <div>
  300. <div class="tr-set table-heads2">
  301. <div class="tr-secon1">老师</div>
  302. <div class="tr-secon1">科目</div>
  303. <div class="tr-secon1">出勤率</div>
  304. <div class="tr-secon1">在岗率</div>
  305. <div class="tr-secon1" style="width:30%;">当月已选时段</div>
  306. </div>
  307. <div class="abbTeachers" @click="showAddTeacherModel">
  308. <span class="addLogicon">+</span> 添加老师
  309. </div>
  310. <div
  311. class="scrollBox"
  312. v-if="FindHaveTeacherList.list && FindHaveTeacherList.list.length >0"
  313. >
  314. <div
  315. class="tr-set"
  316. :class="{BgcColor:index%2 !== 1}"
  317. v-for="(item, index) of FindHaveTeacherList.list"
  318. :key="index"
  319. >
  320. <div class="tr-secon">
  321. <img :src="BASE_URL + item.photo" alt class="table-img" v-if="item.photo" />
  322. <img src="../../assets/img/attt.png" alt v-if="item.photo ==''" class="table-img" />
  323. </div>
  324. <div class="tr-secon tr-sw200">{{item.teacherName}}</div>
  325. <div class="tr-secon tr-sw100">{{item.subject}}</div>
  326. <div class="tr-secon tr-sw100">{{item.attendanceRatio}}%</div>
  327. <div class="tr-secon tr-sw100">{{item.dutyRatio}}%</div>
  328. <div class="tr-secon tr-sw100" style="color:#7297FF">{{item.haveCount }}</div>
  329. <div v-if="item.isEdit==1" class="Buttonhole" @click="detailTeacherTeam(item)">移除</div>
  330. <div v-if="item.isEdit==0" class="NoButtonhole"></div>
  331. </div>
  332. </div>
  333. <div
  334. class="scrollBox"
  335. v-if="FindHaveTeacherList.list && FindHaveTeacherList.list.length <=0"
  336. >
  337. <div class="tr-set">暂无可移除老师!</div>
  338. </div>
  339. </div>
  340. </div>
  341. </div>
  342. <!-- 添加老师弹框 -->
  343. <div class="showModel" @click="allShowModel(4)" v-if="AddTeacherModel"></div>
  344. <div class="model" style="width:40%; top:10%;" v-if="AddTeacherModel">
  345. <div class="model-text">
  346. <div class="model-text-head">
  347. <div class="selectTeacher">选择老师</div>
  348. <div class="teach-block1">
  349. <div class="Dayteach-Allot1">
  350. <input
  351. type="text"
  352. placeholder="请输入老师名字"
  353. v-model="NoHaveTeacherList.teacherName"
  354. class="Dayinput-with-Allot"
  355. />
  356. <span @click="SearchNoHaveTeacher()" class="DaySeachIcon el-icon-search"></span>
  357. </div>
  358. <div class="tiplogslogn">
  359. <span class="tr-slogn1">最少:{{FindNoHaveTeacherList.arrangeDetail.miniNum}}</span>
  360. <span class="tr-slogn1">饱和:{{FindNoHaveTeacherList.arrangeDetail.maxNum}}</span>
  361. <span class="tr-slogn1">已选:{{FindNoHaveTeacherList.arrangeDetail.haveNum}}</span>
  362. </div>
  363. </div>
  364. <div>
  365. <img src="../../assets/img/del@2x.png" alt @click="allShowModel(4)" />
  366. </div>
  367. </div>
  368. <div>
  369. <div class="tr-set table-heads3">
  370. <div class="tr-secon1">老师</div>
  371. <div class="tr-secon1">科目</div>
  372. <div class="tr-secon1">出勤率</div>
  373. <div class="tr-secon1">在岗率</div>
  374. <div class="tr-secon1" style="width:30%;">当月已选时段</div>
  375. </div>
  376. <div
  377. class="scrollBox"
  378. v-if="FindNoHaveTeacherList.list && FindNoHaveTeacherList.list.length >0"
  379. >
  380. <div
  381. class="tr-setMargin"
  382. :class="{BgcColor:index%2 !== 1}"
  383. v-for="(item, index) of FindNoHaveTeacherList.list"
  384. :key="index"
  385. >
  386. <div class="tr-secon">
  387. <img :src="BASE_URL + item.photo" alt class="table-img" v-if="item.photo" />
  388. <img src="../../assets/img/attt.png" alt v-if="item.photo ==''" class="table-img" />
  389. </div>
  390. <div class="tr-secon tr-sw100">{{item.teacherName}}</div>
  391. <div class="tr-secon tr-sw100">{{item.subject}}</div>
  392. <div class="tr-secon tr-sw100">{{item.attendanceRatio}}%</div>
  393. <div class="tr-secon tr-sw100">{{item.dutyRatio}}%</div>
  394. <div class="tr-secon tr-sw100" style="color:#7297FF">{{item.haveCount}}</div>
  395. <div class="Selectradius">
  396. <img
  397. @click="DetetaiOrAddeacherTeam(item,2)"
  398. v-if="teacherIds.indexOf(item.teacherId) == -1"
  399. class="Littleicon"
  400. src="../../assets/img/normal.png"
  401. />
  402. <img
  403. @click="DetetaiOrAddeacherTeam(item,1)"
  404. v-if="teacherIds.indexOf(item.teacherId) != -1"
  405. class="Littleicon"
  406. src="../../assets/img/correct -hint.png"
  407. />
  408. </div>
  409. </div>
  410. </div>
  411. <div
  412. class="scrollBox"
  413. v-if="FindNoHaveTeacherList.list && FindNoHaveTeacherList.list.length <=0"
  414. >
  415. <span>暂无可添加老师!</span>
  416. </div>
  417. <div class="btsnius">
  418. <div @click="GetAddArrangeByTeacherStatus()" class="yesBtn">确定</div>
  419. <div @click="allShowModel(4)" class="closeBtn">取消</div>
  420. </div>
  421. </div>
  422. </div>
  423. </div>
  424. <!-- 移除弹框 -->
  425. <div class="showModel" @click="allShowModel(1)" v-if="hiddenModel"></div>
  426. <div class="model" style="width:30%; top:30%;" v-if="hiddenModel">
  427. <div class="model-text">
  428. <div class="model-text-items">
  429. <div>
  430. <img
  431. src="../../assets/img/del@2x.png"
  432. alt
  433. @click="allShowModel(1)"
  434. class="model-text-items-close"
  435. />
  436. </div>
  437. <div>是否确定将{{this.DetailteacherName}}老师移除?</div>
  438. </div>
  439. <div class="model-btn">
  440. <div class="model-btn-items main-gay" @click="DetetaiApplyOperate()">是</div>
  441. <div class="model-btn-items model-grdeen" @click="allShowModel(1)">否</div>
  442. </div>
  443. </div>
  444. </div>
  445. </div>
  446. </template>
  447. <script>
  448. import { mapGetters, mapActions } from "vuex";
  449. import NextMonthList from "@/components/NextMonthList.vue";
  450. import { IMG_BASE_URL, APPOR_BASE_URL } from "@/config";
  451. import { Message } from "element-ui";
  452. export default {
  453. components: { NextMonthList },
  454. name: "actvResolveLabel",
  455. props: {},
  456. data() {
  457. return {
  458. SettingDaysLocal: localStorage.getItem("SettingDaysLocal"), //本地缓存。开放关闭日期
  459. Nowyear: new Date().getFullYear(),
  460. D: new Date().getDate() + " ",
  461. Nowmonth: new Date().getMonth() + 1,
  462. NowHours: new Date().getHours(),
  463. isSelected: false,
  464. BASE_URL: IMG_BASE_URL,
  465. selMonth: "",
  466. ShowNextMonthList: false,
  467. hiddenModel: false,
  468. isPigai: false,
  469. isApporTeacher: false,
  470. gardeListDown: false,
  471. gardeListDownage: false,
  472. AddTeacherModel: false,
  473. modelindex: 0,
  474. selecttitlepag: "批改老师",
  475. selecttitleage: "语文",
  476. current: {}, // 当前时间
  477. weekList: ["一", "二", "三", "四", "五", "六", "日"],
  478. calendarList: [], // 排班列表
  479. setCalendarList: [], // 排班设置列表
  480. shareDate: new Date(), // 享元模式,用来做优化的
  481. month: "",
  482. today: "",
  483. teacherIds: [],
  484. detetaiTeacherid: [],
  485. DetailteacherName: "",
  486. gridData: [],
  487. SettingDays: [],
  488. setrefultList: [],
  489. filters: {
  490. actvNm: "",
  491. actvCrtUserId: "",
  492. actvType: "",
  493. actvSmallType: "",
  494. OptionsValue: 8,
  495. gradesValue: "语文",
  496. // 排序
  497. MaxtimeValue: "",
  498. oneMonth: "",
  499. pageNo: 1,
  500. pageSize: 10,
  501. count: 0,
  502. orderField: "",
  503. orderAD: ""
  504. },
  505. levelList: ["最少", "饱和", "已选"],
  506. ItemList: [
  507. {
  508. text: "排班表"
  509. },
  510. {
  511. text: "排班设置"
  512. }
  513. ],
  514. options: [
  515. {
  516. value: "0",
  517. label: "匹配知识点",
  518. str: "13"
  519. },
  520. {
  521. value: "1",
  522. label: "批改老师",
  523. str: "8"
  524. }
  525. ],
  526. grades: [
  527. {
  528. value: "0",
  529. label: "语文",
  530. str: "语文"
  531. },
  532. {
  533. value: "1",
  534. label: "数学",
  535. str: "数学"
  536. },
  537. {
  538. value: "2",
  539. label: "英语",
  540. str: "英语"
  541. }
  542. ],
  543. allotList: {
  544. pageNo: 1,
  545. pageSize: 10,
  546. count: 0,
  547. grade: "",
  548. subject: "",
  549. homeworkId: "",
  550. TeacherType: ""
  551. },
  552. HaveTeacherList: {
  553. Teacherid: "",
  554. teacherName: ""
  555. },
  556. NoHaveTeacherList: {
  557. teacherName: ""
  558. }
  559. };
  560. },
  561. created() {
  562. this.GetFindCalendarListInfo();
  563. this.GetDutyTemplateListInfo();
  564. },
  565. watch: {
  566. SaveSysTeacherDutyStatus(val, oldVal) {
  567. //保存排班设置成功的watch监听回调
  568. this.GetDutyTemplateListInfo();
  569. },
  570. DutyTemplateListSTUS(val, oldVal) {
  571. // debugger
  572. //排班列表请求成功的watch监听回调
  573. this.init();
  574. },
  575. DeleteArrangeByTeacher(val, oldVal) {
  576. // debugger
  577. //保存排班设置成功的watch监听回调
  578. this.GetFindCalendarListInfo();
  579. },
  580. AddArrangeByTeacherStatus(val, oldVal) {
  581. // debugger
  582. //保存排班设置成功的watch监听回调
  583. this.GetFindCalendarListInfo();
  584. },
  585. TeacherThisMonthDutyREfultInfo(val, oldVal) {
  586. var that = this;
  587. if (that.DutyTemplateListInfo && that.DutyTemplateListInfo.dayList) {
  588. for (let t = 0; t < that.DutyTemplateListInfo.dayList.length; t++) {
  589. if (that.DutyTemplateListInfo.dayList[t].isOpen == 0) {
  590. this.SettingDays.push(that.DutyTemplateListInfo.dayList[t].day);
  591. }
  592. }
  593. }
  594. },
  595. NextOrNewMonthStatus(val, oldVal) {
  596. // debugger
  597. //排班列表请求成功的watch监听回调
  598. this.GetFindCalendarListInfo();
  599. }
  600. },
  601. // ,'homeworkRecoveryList'
  602. computed: {
  603. ...mapGetters([
  604. "FindCalendarList",
  605. "FindCalendarList",
  606. "FindHaveTeacherList",
  607. "FindNoHaveTeacherList",
  608. "AddArrangeByTeacherStatus",
  609. "SaveSysTeacherDutyStatus",
  610. "DutyTemplateListInfo",
  611. "DutyTemplateListSTUS",
  612. "TeacherThisMonthDutyREfultInfo",
  613. "DeleteArrangeByTeacher",
  614. "NextOrNewMonthStatus"
  615. ]),
  616. // 显示当前时间
  617. currentDateStr() {
  618. let { year, month } = this.current;
  619. return `${this.pad(month + 1)}月`;
  620. }
  621. },
  622. methods: {
  623. ...mapActions(["setUser"]),
  624. // 表格头部样式
  625. tableheaderClassName({ row, rowIndex }) {
  626. return "table-head-th";
  627. },
  628. // 切换下月当月排班表
  629. shoeNextOrlastMOntlist(str) {
  630. if (str == 1) {
  631. this.$store.dispatch("NextOrNewMonthAction", {
  632. NextOrNewMonthStatus: true
  633. });
  634. }
  635. },
  636. //弹框
  637. isShow(str, id, timeFnd, DaytimeFn) {
  638. let _this = this;
  639. if (str == 1) {
  640. if ((timeFnd < -4 && DaytimeFn <= 0) || DaytimeFn < 0) {
  641. _this.isApporTeacher = true;
  642. this.HaveTeacherList.teacherName = "";
  643. this.HaveTeacherList.Teacherid = id;
  644. this.GetFindHaveTeacherListInfo();
  645. } else {
  646. Message.error("请提前4小时开始排班,当前时间已关闭不可操作!");
  647. }
  648. }
  649. },
  650. // 添加老师勾选数组
  651. async DetetaiOrAddeacherTeam(item, type) {
  652. if (type == 1) {
  653. const index = this.teacherIds.indexOf(item.teacherId);
  654. if (index > -1) {
  655. this.teacherIds.splice(index, 1);
  656. }
  657. // item.dateList.isOpen = 1
  658. // this.$set(this.setCalendarList.dateList, Setindex, item);
  659. }
  660. if (type == 2) {
  661. const index = this.teacherIds.indexOf(item.teacherId);
  662. if (index == -1) {
  663. this.teacherIds.push(item.teacherId);
  664. }
  665. // item.dateList.isOpen = 0
  666. // this.$set(this.setCalendarList.dateList, Setindex, item);
  667. }
  668. },
  669. showAddTeacherModel() {
  670. this.teacherIds = [];
  671. this.NoHaveTeacherList.teacherName = "";
  672. this.isApporTeacher = false;
  673. this.AddTeacherModel = true;
  674. this.GetFindNoHaveTeacherListInfo();
  675. },
  676. // 时段移除老师
  677. detailTeacherTeam(item) {
  678. this.DetailteacherName = item.teacherName;
  679. this.isApporTeacher = false;
  680. this.hiddenModel = true;
  681. this.detetaiTeacherid = item.teacherId;
  682. },
  683. DetetaiApplyOperate() {
  684. this.hiddenModel = false;
  685. this.$store.dispatch("GetDeleteArrangeByTeacher", {
  686. id: this.HaveTeacherList.Teacherid,
  687. teacherId: this.detetaiTeacherid
  688. });
  689. },
  690. //关闭弹框
  691. allShowModel(str) {
  692. let _this = this;
  693. if (str == 1) {
  694. _this.hiddenModel = false;
  695. _this.isApporTeacher = true;
  696. } else if (str == 2) {
  697. _this.isPigai = false;
  698. } else if (str == 3) {
  699. this.HaveTeacherList.teacherName = "";
  700. _this.isApporTeacher = false;
  701. } else if (str == 4) {
  702. this.teacherIds = [];
  703. _this.AddTeacherModel = false;
  704. _this.isApporTeacher = true;
  705. } else if (str == 5) {
  706. _this.NoAllotManagerModel = false;
  707. }
  708. },
  709. timeFn(d1) {
  710. //di作为一个变量传进来
  711. //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
  712. var dateBegin = new Date(d1.replace(/-/g, "/")); //将-转化为/,使用new Date
  713. var dateEnd = new Date(); //获取当前时间
  714. var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
  715. var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
  716. var leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
  717. var hours = Math.floor(leave1 / (3600 * 1000)); //计算出小时数
  718. //计算相差分钟数
  719. var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
  720. var minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数
  721. //计算相差秒数
  722. var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
  723. var seconds = Math.round(leave3 / 1000);
  724. return hours;
  725. },
  726. DaytimeFn(d1) {
  727. //di作为一个变量传进来
  728. //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
  729. var dateBegin = new Date(d1.replace(/-/g, "/")); //将-转化为/,使用new Date
  730. var dateEnd = new Date(); //获取当前时间
  731. var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
  732. var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
  733. var leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
  734. var hours = Math.floor(leave1 / (3600 * 1000)); //计算出小时数
  735. //计算相差分钟数
  736. var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
  737. var minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数
  738. //计算相差秒数
  739. var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
  740. var seconds = Math.round(leave3 / 1000);
  741. // return hours
  742. return dayDiff;
  743. },
  744. // 获取校区管理员排班表
  745. async GetFindCalendarListInfo() {
  746. this.$store.dispatch("GetFindCalendarList", {
  747. type: this.filters.OptionsValue,
  748. subject: this.filters.gradesValue,
  749. month: ""
  750. });
  751. },
  752. // 选中时段老师列表
  753. async GetFindHaveTeacherListInfo() {
  754. this.$store.dispatch("GetFindHaveTeacherList", {
  755. id: this.HaveTeacherList.Teacherid,
  756. teacherName: this.HaveTeacherList.teacherName
  757. });
  758. },
  759. // 未选时段老师列表(添加老师)
  760. async GetFindNoHaveTeacherListInfo() {
  761. this.$store.dispatch("GetFindNoHaveTeacherList", {
  762. id: this.HaveTeacherList.Teacherid,
  763. teacherName: this.NoHaveTeacherList.teacherName
  764. });
  765. },
  766. // 时段添加老师
  767. async GetAddArrangeByTeacherStatus() {
  768. // this.teacherIds = []
  769. this.AddTeacherModel = false;
  770. this.$store.dispatch("GetAddArrangeByTeacher", {
  771. id: this.HaveTeacherList.Teacherid,
  772. teacherIds: this.teacherIds
  773. });
  774. },
  775. // 保存排班设置
  776. async saveOpenCloseDAys() {
  777. this.$store.dispatch("GetSaveSysTeacherDuty", {
  778. days: this.SettingDays
  779. });
  780. },
  781. async UnOrWaitOpen(item, type, Setindex) {
  782. if (type == 1) {
  783. const index = this.SettingDays.indexOf(item.value);
  784. if (index > -1) {
  785. this.SettingDays.splice(index, 1);
  786. }
  787. item.dateList.isOpen = 1;
  788. this.$set(this.setCalendarList.dateList, Setindex, item);
  789. }
  790. if (type == 2) {
  791. const index = this.SettingDays.indexOf(item.value);
  792. if (index == -1) {
  793. this.SettingDays.push(item.value);
  794. }
  795. item.dateList.isOpen = 0;
  796. this.$set(this.setCalendarList.dateList, Setindex, item);
  797. }
  798. },
  799. // 排班设置返回接口
  800. async GetDutyTemplateListInfo() {
  801. this.SettingDays = [];
  802. this.$store.dispatch("GetDutyTemplateList", {});
  803. },
  804. SearchNoHaveTeacher() {
  805. this.GetFindNoHaveTeacherListInfo();
  806. },
  807. SearchFindHaveTeacher() {
  808. this.GetFindHaveTeacherListInfo();
  809. },
  810. selectStyle() {
  811. this.gardeListDown = true;
  812. },
  813. outStyle() {
  814. this.gardeListDown = false;
  815. },
  816. selectStyle1() {
  817. this.gardeListDownage = true;
  818. },
  819. outStyle1() {
  820. this.gardeListDownage = false;
  821. },
  822. selectTitle(k) {
  823. this.modelindex = k;
  824. if (k == 0) {
  825. if (this.Nowmonth !== this.current.month + 1) {
  826. this.prevMonth();
  827. }
  828. this.GetFindCalendarListInfo();
  829. }
  830. if (k == 1) {
  831. if (this.Nowmonth == this.current.month + 1) {
  832. this.nextMonth();
  833. }
  834. this.SettingDays = [];
  835. this.GetDutyTemplateListInfo();
  836. }
  837. },
  838. selectTip(item) {
  839. this.filters.OptionsValue = item.str;
  840. this.selecttitlepag = item.label;
  841. this.gardeListDown = false;
  842. this.GetFindCalendarListInfo();
  843. },
  844. selectTipage(item) {
  845. this.filters.gradesValue = item.str;
  846. this.selecttitleage = item.label;
  847. this.gardeListDownage = false;
  848. this.GetFindCalendarListInfo();
  849. },
  850. // 分页
  851. pageChange(val) {
  852. this.allotList.pageNo = val;
  853. this.TeacherAllot();
  854. },
  855. pageChange1(val) {
  856. this.filters.pageNo = val;
  857. this.HomeworkRecoveryList();
  858. },
  859. changeDateSlot(dateSlot) {
  860. if (dateSlot) {
  861. this.filters.startDate = dateSlot[0];
  862. this.filters.endDate = dateSlot[1];
  863. } else {
  864. this.filters.startDate = null;
  865. this.filters.endDate = null;
  866. }
  867. },
  868. actvTypeChange(typeList) {
  869. switch (typeList.length) {
  870. case 1:
  871. this.filters.actvType = typeList[0];
  872. this.filters.actvSmallType = null;
  873. break;
  874. case 2:
  875. this.filters.actvType = null;
  876. this.filters.actvSmallType = typeList[1];
  877. break;
  878. default:
  879. this.filters.actvType = null;
  880. this.filters.actvSmallType = null;
  881. break;
  882. }
  883. },
  884. handleSizeChange(val) {
  885. this.allotList.pageSize = val;
  886. this.TeacherAllot();
  887. },
  888. handleSizeChange1(val) {
  889. this.filters.pageSize = val;
  890. this.HomeworkRecoveryList();
  891. },
  892. // 排序
  893. sortChange(sort) {
  894. this.filters.orderField = sort.prop;
  895. this.filters.orderAD = sort.order != null ? sort.order : "";
  896. this.itemListReshow();
  897. },
  898. clearSearch() {
  899. this.filters.actvNm = null;
  900. this.filters.actvCrtUserId = null;
  901. this.filters.actvType = null;
  902. this.filters.actvSmallType = null;
  903. this.filtersActvType = [];
  904. this.createDateSlot = null;
  905. },
  906. // 日期处理
  907. init() {
  908. // 初始化当前时间
  909. this.setCurrent();
  910. this.calendarCreator();
  911. },
  912. // 判断当前月有多少天
  913. getDaysByMonth(year, month) {
  914. return new Date(year, month + 1, 0).getDate();
  915. },
  916. getFirstDayByMonths(year, month) {
  917. return new Date(year, month, 1).getDay();
  918. },
  919. getLastDayByMonth(year, month) {
  920. return new Date(year, month + 1, 0).getDay();
  921. },
  922. // 对小于 10 的数字,前面补 0
  923. pad(str) {
  924. return str < 10 ? `0${str}` : str;
  925. },
  926. // 点击上一月
  927. prevMonth() {
  928. this.current.month--;
  929. // 因为 month的变化 会超出 0-11 的范围, 所以需要重新计算
  930. this.correctCurrent();
  931. // 生成新日期
  932. this.calendarCreator();
  933. },
  934. // 点击下一月
  935. nextMonth() {
  936. this.current.month++;
  937. // 因为 month的变化 会超出 0-11 的范围, 所以需要重新计算
  938. this.correctCurrent();
  939. // 生成新日期
  940. this.calendarCreator();
  941. },
  942. // 格式化时间,与主逻辑无关
  943. stringify(year, month, date) {
  944. let str = [year, this.pad(month + 1), this.pad(date)].join("-");
  945. return str;
  946. },
  947. // 设置或初始化 current
  948. setCurrent(d = new Date()) {
  949. let year = d.getFullYear();
  950. let month = d.getMonth();
  951. let date = d.getDate();
  952. this.current = {
  953. year,
  954. month,
  955. date
  956. };
  957. },
  958. // 修正 current
  959. correctCurrent() {
  960. let { year, month, date } = this.current;
  961. let maxDate = this.getDaysByMonth(year, month);
  962. // 预防其他月跳转到2月,2月最多只有29天,没有30-31
  963. date = Math.min(maxDate, date);
  964. let instance = new Date(year, month, date);
  965. this.setCurrent(instance);
  966. },
  967. // 生成日期
  968. calendarCreator() {
  969. // 一天有多少毫秒
  970. const oneDayMS = 24 * 60 * 60 * 1000;
  971. let list = [];
  972. let setList = [];
  973. let { year, month } = this.current;
  974. // 当前月份第一天是星期几, 0-6
  975. let firstDay = this.getFirstDayByMonths(year, month);
  976. // 填充多少天
  977. let prefixDaysLen = firstDay === 0 ? 6 : firstDay - 1;
  978. // 毫秒数
  979. let begin = new Date(year, month, 1).getTime() - oneDayMS * prefixDaysLen;
  980. // 当前月份最后一天是星期几, 0-6
  981. let lastDay = this.getLastDayByMonth(year, month);
  982. // 填充多少天, 和星期的排放顺序有关
  983. let suffixDaysLen = lastDay === 0 ? 0 : 7 - lastDay;
  984. // 毫秒数
  985. let end =
  986. new Date(year, month + 1, 0).getTime() + oneDayMS * suffixDaysLen;
  987. // 计算今天几号
  988. let today = new Date().getDate();
  989. // 饱和度
  990. // console.log(today)
  991. while (begin <= end) {
  992. // 享元模式,避免重复 new Date
  993. this.shareDate.setTime(begin);
  994. let year = this.shareDate.getFullYear();
  995. let curMonth = this.shareDate.getMonth();
  996. let date = this.shareDate.getDate();
  997. // console.log(FindCalendarList)
  998. // || date < today
  999. // 排班
  1000. list.push({
  1001. year: year,
  1002. month: curMonth,
  1003. date: date,
  1004. disable: curMonth !== month,
  1005. status: false,
  1006. pastDay: date < today && curMonth == month,
  1007. value: this.stringify(year, curMonth, date)
  1008. });
  1009. // 排班设置
  1010. setList.push({
  1011. year: year,
  1012. month: curMonth,
  1013. date: date,
  1014. status: false,
  1015. disable: curMonth !== month,
  1016. value: this.stringify(year, curMonth, date)
  1017. });
  1018. begin += oneDayMS;
  1019. }
  1020. var that = this;
  1021. if (that.FindCalendarList && that.FindCalendarList.list) {
  1022. for (let i = 0; i < list.length; i++) {
  1023. if (!list[i].disable) {
  1024. const dateValue = list[i].value;
  1025. for (let t = 0; t < that.FindCalendarList.list.length; t++) {
  1026. if (dateValue == that.FindCalendarList.list[t].arrangeDate) {
  1027. list[i].dateList = that.FindCalendarList.list[t];
  1028. console.log(list[i].dateList);
  1029. }
  1030. }
  1031. } else {
  1032. list[i].dateList = {};
  1033. }
  1034. }
  1035. }
  1036. if (that.DutyTemplateListInfo && that.DutyTemplateListInfo.dayList) {
  1037. for (let i = 0; i < setList.length; i++) {
  1038. if (!setList[i].disable) {
  1039. const dateValue = setList[i].value;
  1040. for (let t = 0; t < that.DutyTemplateListInfo.dayList.length; t++) {
  1041. if (dateValue == that.DutyTemplateListInfo.dayList[t].day) {
  1042. setList[i].dateList = that.DutyTemplateListInfo.dayList[t];
  1043. }
  1044. }
  1045. } else {
  1046. setList[i].dateList = {};
  1047. }
  1048. }
  1049. }
  1050. this.calendarList = list;
  1051. this.setCalendarList = setList;
  1052. },
  1053. // 排班点击
  1054. classSet(k, d, m, intervalList) {
  1055. // console.log(k, d, m);
  1056. this.month = m + 1;
  1057. this.today = d;
  1058. for (var i in this.calendarList) {
  1059. this.calendarList[i].status = false;
  1060. }
  1061. this.calendarList[k].status = !this.calendarList[k].status;
  1062. this.gridData = intervalList;
  1063. },
  1064. // 排班设置点击
  1065. settingClick(k) {
  1066. for (var i in this.setCalendarList) {
  1067. this.setCalendarList[i].status = false;
  1068. }
  1069. this.setCalendarList[k].status = !this.setCalendarList[k].status;
  1070. }
  1071. },
  1072. mounted() {
  1073. // debugger
  1074. sessionStorage.setItem("tabIndex", 5);
  1075. this.$store.dispatch("NextOrNewMonthAction", {
  1076. NextOrNewMonthStatus: false
  1077. });
  1078. }
  1079. };
  1080. </script>
  1081. <!-- Add "scoped" attribute to limit CSS to this component only -->
  1082. <style scoped>
  1083. .main {
  1084. background-color: #fff;
  1085. margin-top: 16px;
  1086. padding: 0 !important;
  1087. border: 1px solid #e1e1e1;
  1088. min-height: 980px;
  1089. }
  1090. el-table {
  1091. color: #999999;
  1092. font-size: 18px;
  1093. }
  1094. .main-items {
  1095. color: #393939;
  1096. text-align: center;
  1097. line-height: 80px;
  1098. }
  1099. .aside {
  1100. background-color: #fff;
  1101. margin-top: 16px;
  1102. margin-right: 16px;
  1103. padding: 0;
  1104. min-height: 880px;
  1105. }
  1106. .selectBox {
  1107. position: relative;
  1108. float: left;
  1109. display: inline-block;
  1110. margin-top: 57px;
  1111. }
  1112. .Ageclass {
  1113. display: inline-block;
  1114. height: 40px;
  1115. width: 160px;
  1116. background-color: #f1f2f4;
  1117. line-height: 40px;
  1118. font-size: 16px;
  1119. cursor: pointer;
  1120. }
  1121. .active {
  1122. background-color: #52cc60 !important;
  1123. color: #fff !important;
  1124. }
  1125. .table-aside {
  1126. color: #666666;
  1127. font-size: 18px;
  1128. text-align: center;
  1129. line-height: 60px;
  1130. cursor: pointer;
  1131. }
  1132. el-table {
  1133. color: #999999;
  1134. font-size: 18px;
  1135. }
  1136. .input-with-select .el-input-group__prepend {
  1137. background-color: #fff;
  1138. }
  1139. .showModel {
  1140. width: 100%;
  1141. height: 100%;
  1142. position: fixed;
  1143. top: 0;
  1144. left: 0;
  1145. background: #000000;
  1146. opacity: 0.2;
  1147. overflow: hidden;
  1148. z-index: 3000;
  1149. color: #fff;
  1150. }
  1151. .model {
  1152. z-index: 10000;
  1153. width: 60%;
  1154. height: auto;
  1155. position: fixed;
  1156. top: 15%;
  1157. left: 30%;
  1158. margin: auto;
  1159. padding: 15px;
  1160. background: #fff;
  1161. border-radius: 10px;
  1162. text-align: center;
  1163. }
  1164. .model-text {
  1165. background: rgba(255, 255, 255, 1);
  1166. border-radius: 10px;
  1167. }
  1168. .model-items-left {
  1169. width: 100%;
  1170. color: #393939;
  1171. font-size: 24px;
  1172. }
  1173. .model-items-left-top {
  1174. display: flex;
  1175. justify-content: space-between;
  1176. }
  1177. .model-items-left-top-img {
  1178. width: 68px;
  1179. height: 68px;
  1180. border-radius: 8px;
  1181. position: relative;
  1182. bottom: 25px;
  1183. }
  1184. .model-items-left-top-number {
  1185. color: #7e7e7e;
  1186. font-size: 18px;
  1187. margin-left: 10px;
  1188. }
  1189. .el-table .table-head-th {
  1190. background-color: #f6f7fb;
  1191. font-size: 16px !important;
  1192. color: #393939;
  1193. }
  1194. .month {
  1195. color: #393939;
  1196. font-size: 30px;
  1197. margin-top: 57px;
  1198. }
  1199. .model-manager {
  1200. display: flex;
  1201. justify-content: space-between;
  1202. margin: 30px;
  1203. color: #393939;
  1204. font-size: 24px;
  1205. }
  1206. .allocation-items {
  1207. width: 45%;
  1208. display: inline-block;
  1209. margin-right: 20px;
  1210. margin-bottom: 30px;
  1211. }
  1212. .allocation {
  1213. color: #52cc60;
  1214. font-size: 20px;
  1215. text-decoration: underline;
  1216. cursor: pointer;
  1217. }
  1218. .el-pagination.is-background .el-pager li:not(.disabled).active {
  1219. background-color: #52cc60 !important;
  1220. color: #fff;
  1221. }
  1222. .pages {
  1223. margin: 15px 0;
  1224. }
  1225. .age-tip {
  1226. width: 80%;
  1227. height: 40px;
  1228. color: #747070;
  1229. font-size: 12px;
  1230. }
  1231. .class-download {
  1232. background-color: #fff;
  1233. width: 160px;
  1234. z-index: 999999;
  1235. position: absolute;
  1236. border: 1px solid #e0dddd;
  1237. border-radius: 5px;
  1238. top: 58px;
  1239. }
  1240. .class-download ul li {
  1241. height: 40px;
  1242. line-height: 40px;
  1243. text-align: center;
  1244. cursor: pointer;
  1245. color: #b6b6b6;
  1246. }
  1247. .class-download ul li:hover {
  1248. background-color: #52cc60;
  1249. color: #ffff;
  1250. }
  1251. .date {
  1252. margin-top: 68px;
  1253. }
  1254. .calendar-week {
  1255. border: 1px solid #e5e5e5;
  1256. text-align: center;
  1257. border-right: none;
  1258. display: flex;
  1259. }
  1260. .week-item {
  1261. display: inline-block;
  1262. background: #f9f9f9;
  1263. width: 14.28%;
  1264. border-right: 1px solid #e5e5e5;
  1265. }
  1266. .calendar-inner {
  1267. border-left: 1px solid #e5e5e5;
  1268. }
  1269. .calendar-item {
  1270. cursor: pointer;
  1271. float: left;
  1272. width: 14.28%;
  1273. height: 130px;
  1274. line-height: 130px;
  1275. text-align: center;
  1276. border-bottom: 1px solid #e5e5e5;
  1277. border-right: 1px solid #e5e5e5;
  1278. border-left: 1px solid #e5e5e5;
  1279. }
  1280. .day-setting {
  1281. height: 130px;
  1282. line-height: 130px;
  1283. }
  1284. .calendar-item.disabled {
  1285. color: #fff;
  1286. }
  1287. .checked {
  1288. background: #f6f7fb;
  1289. }
  1290. .psatchecked {
  1291. color: rgba(0, 0, 0, 0.3);
  1292. opacity: 0.5;
  1293. }
  1294. .date-day {
  1295. font-size: 16px;
  1296. line-height: 60px;
  1297. color: #aaa;
  1298. }
  1299. .tr-setMargin {
  1300. margin-top: 10px;
  1301. height: 50px;
  1302. line-height: 50px;
  1303. }
  1304. .BgcColor {
  1305. background-color: #f7fbfc;
  1306. }
  1307. .people {
  1308. display: flex;
  1309. justify-content: space-around;
  1310. font-size: 14px;
  1311. }
  1312. .people-items {
  1313. display: inline-block;
  1314. line-height: 70px;
  1315. margin-top: 10px;
  1316. }
  1317. .people-items-num {
  1318. line-height: 15px;
  1319. padding: 3px 8px;
  1320. }
  1321. .people-items-text {
  1322. line-height: 30px;
  1323. }
  1324. .num-red {
  1325. background: rgba(255, 100, 101, 1);
  1326. border-radius: 9px;
  1327. color: #fff;
  1328. }
  1329. .month-day {
  1330. margin: 10px 30px;
  1331. color: #393939;
  1332. font-size: 20px;
  1333. }
  1334. .date-set {
  1335. text-align: center;
  1336. width: 100%;
  1337. cursor: pointer;
  1338. }
  1339. .date-set > div {
  1340. height: 30px;
  1341. line-height: 30px;
  1342. /* width: 100%; */
  1343. color: #393939;
  1344. font-size: 16px;
  1345. margin: 25px 0px;
  1346. /* background-color: #52cc60; */
  1347. }
  1348. .date-set > div:hover {
  1349. background-color: #52cc60;
  1350. color: #fff;
  1351. /* font-size: 25px; */
  1352. }
  1353. .date-day-set {
  1354. line-height: 40px;
  1355. color: #393939;
  1356. font-size: 16px;
  1357. }
  1358. .date-day-set-num {
  1359. font-size: 16px;
  1360. line-height: 70px;
  1361. color: #aaa;
  1362. }
  1363. .date-red {
  1364. color: #ff6465;
  1365. }
  1366. .date-time-active {
  1367. color: #e5e5e5;
  1368. }
  1369. .date-btn-active {
  1370. background: rgba(114, 151, 255, 0.3);
  1371. border: none;
  1372. cursor: pointer;
  1373. margin-top: 10px;
  1374. width: 80px;
  1375. height: 30px;
  1376. line-height: 30px;
  1377. border-radius: 15px;
  1378. margin: 0 auto;
  1379. color: #fff;
  1380. }
  1381. .abbTeachers {
  1382. width: 100%;
  1383. height: 40px;
  1384. background-color: #f6f7fb;
  1385. border-radius: 20px;
  1386. text-align: left;
  1387. line-height: 30px;
  1388. font-size: 14px;
  1389. padding: 0 20px;
  1390. margin: 10px 0px;
  1391. cursor: pointer;
  1392. }
  1393. .tiplogPb {
  1394. font-size: 14px;
  1395. color: #7b809d;
  1396. }
  1397. .addLogicon {
  1398. font-size: 30px;
  1399. color: #1989fa;
  1400. margin: 0px 20px;
  1401. }
  1402. .btsnius {
  1403. margin-top: 40px;
  1404. width: 100%;
  1405. height: 60px;
  1406. }
  1407. .yesBtn {
  1408. margin-right: 30px;
  1409. height: 40px;
  1410. width: 100px;
  1411. background-color: #52cc60;
  1412. border-radius: 10px;
  1413. color: #fff;
  1414. line-height: 40px;
  1415. text-align: center;
  1416. display: inline-block;
  1417. cursor: pointer;
  1418. }
  1419. .closeBtn {
  1420. height: 40px;
  1421. width: 100px;
  1422. background-color: #fff;
  1423. border-radius: 10px;
  1424. color: #52cc60;
  1425. line-height: 40px;
  1426. text-align: center;
  1427. display: inline-block;
  1428. border: 1px solid #52cc60;
  1429. cursor: pointer;
  1430. }
  1431. .grayRed {
  1432. color: red;
  1433. }
  1434. .scrollBox {
  1435. height: 400px;
  1436. overflow: auto;
  1437. padding: 0 15px;
  1438. }
  1439. /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
  1440. ::-webkit-scrollbar {
  1441. width: 5px; /*滚动条宽度*/
  1442. height: 15px; /*滚动条高度*/
  1443. }
  1444. /*定义滚动条轨道 内阴影+圆角*/
  1445. ::-webkit-scrollbar-track {
  1446. -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
  1447. border-radius: 10px; /*滚动条的背景区域的圆角*/
  1448. background-color: #fff; /*滚动条的背景颜色*/
  1449. }
  1450. /*定义滑块 内阴影+圆角*/
  1451. ::-webkit-scrollbar-thumb {
  1452. border-radius: 10px; /*滚动条的圆角*/
  1453. -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
  1454. background-color: #bcbaba; /*滚动条的背景颜色*/
  1455. }
  1456. .Buttonhole {
  1457. cursor: pointer;
  1458. margin-top: 10px;
  1459. width: 80px;
  1460. height: 30px;
  1461. line-height: 30px;
  1462. border-radius: 15px;
  1463. background-color: #7297ff;
  1464. color: #fff;
  1465. display: inline-block;
  1466. }
  1467. .NoButtonhole {
  1468. cursor: pointer;
  1469. margin-top: 10px;
  1470. width: 80px;
  1471. height: 30px;
  1472. line-height: 30px;
  1473. border-radius: 15px;
  1474. color: #fff;
  1475. display: inline-block;
  1476. }
  1477. .Selectradius {
  1478. cursor: pointer;
  1479. display: inline-block;
  1480. }
  1481. .table-img {
  1482. width: 36px;
  1483. height: 36px;
  1484. border-radius: 6px;
  1485. /* margin-left: 14px; */
  1486. cursor: pointer;
  1487. }
  1488. .Daylog {
  1489. font-size: 16px;
  1490. color: #7297ff;
  1491. height: 40px;
  1492. display: inline-block;
  1493. }
  1494. .model-text-head {
  1495. padding: 0 !important;
  1496. display: flex;
  1497. color: #393939;
  1498. font-size: 24px;
  1499. justify-content: space-between;
  1500. }
  1501. .table-heads1 {
  1502. margin-left: 150px !important;
  1503. width: 350px;
  1504. font-weight: 700;
  1505. color: #393939 !important;
  1506. font-size: 18px;
  1507. text-align: center;
  1508. display: flex;
  1509. justify-content: space-around;
  1510. }
  1511. .table-heads2 {
  1512. background-color: #fff;
  1513. margin-left: 110px !important;
  1514. width: 80%;
  1515. font-weight: 700;
  1516. color: #393939 !important;
  1517. font-size: 18px;
  1518. text-align: center;
  1519. display: flex;
  1520. justify-content: space-around;
  1521. }
  1522. .table-heads3 {
  1523. background-color: #fff;
  1524. margin-left: 160px !important;
  1525. width: 70%;
  1526. font-weight: 700;
  1527. color: #393939 !important;
  1528. font-size: 18px;
  1529. text-align: center;
  1530. display: flex;
  1531. justify-content: space-around;
  1532. }
  1533. .table-heads1 > div {
  1534. width: 30%;
  1535. }
  1536. .tr-secon1 {
  1537. font-size: 12px;
  1538. text-align: center;
  1539. word-wrap: break-word;
  1540. width: 18%;
  1541. line-height: 50px;
  1542. }
  1543. .tr-secon {
  1544. font-size: 12px;
  1545. text-align: center;
  1546. word-wrap: break-word;
  1547. width: 60px;
  1548. line-height: 20px;
  1549. display: inline-block;
  1550. }
  1551. .tr-sw100 {
  1552. height: 40px;
  1553. line-height: 30px;
  1554. width: 13%;
  1555. text-align: center;
  1556. }
  1557. .tr-sw200 {
  1558. width: 13%;
  1559. text-align: center;
  1560. white-space: nowrap;
  1561. overflow: hidden;
  1562. text-overflow: ellipsis;
  1563. /* padding:10px;
  1564. line-height:25px; */
  1565. }
  1566. .tiplog {
  1567. height: 100px;
  1568. width: 200px;
  1569. padding: 15px;
  1570. margin: 30px;
  1571. font-size: 25px;
  1572. font-weight: 700;
  1573. margin: 0 auto;
  1574. }
  1575. .Buttonhole {
  1576. cursor: pointer;
  1577. margin-top: 10px;
  1578. width: 80px;
  1579. height: 30px;
  1580. line-height: 30px;
  1581. border-radius: 15px;
  1582. background-color: #7297ff;
  1583. color: #fff;
  1584. }
  1585. .table-img {
  1586. width: 36px;
  1587. height: 36px;
  1588. border-radius: 6px;
  1589. /* margin-left: 14px; */
  1590. cursor: pointer;
  1591. }
  1592. .teach-block {
  1593. display: inline-block;
  1594. }
  1595. .teach-block1 {
  1596. display: inline-block;
  1597. width: 100%;
  1598. }
  1599. .min-widthScrol {
  1600. min-width: 300px;
  1601. }
  1602. .Dayteach-Allot {
  1603. display: inline-block;
  1604. width: 200px;
  1605. position: relative;
  1606. height: 30px;
  1607. top: 5px;
  1608. right: -15%;
  1609. }
  1610. .Dayteach-Allot1 {
  1611. display: inline-block;
  1612. width: 40%;
  1613. float: left;
  1614. position: relative;
  1615. height: 30px;
  1616. top: 5px;
  1617. }
  1618. .DaySeachIcon {
  1619. position: absolute;
  1620. font-size: 20px;
  1621. color: #b6b6b6;
  1622. right: 5%;
  1623. margin-top: 5px;
  1624. cursor: pointer;
  1625. }
  1626. .Dayinput-with-Allot {
  1627. border: #b6b6b6;
  1628. border-radius: 20px;
  1629. height: 30px;
  1630. width: 200px;
  1631. font-size: 8px;
  1632. color: #b6b6b6;
  1633. text-align: left;
  1634. line-height: 30px;
  1635. background: #f1f2f4;
  1636. padding: 0 10px;
  1637. float: right;
  1638. outline: none !important;
  1639. box-shadow: none;
  1640. }
  1641. .tiplogslogn {
  1642. display: inline-block;
  1643. float: right;
  1644. margin-top: 10px;
  1645. margin-right: 20px;
  1646. }
  1647. .tr-slogn {
  1648. display: inline-block;
  1649. margin-right: 30px;
  1650. font-size: 12px;
  1651. text-align: left;
  1652. float: left;
  1653. font-weight: 700;
  1654. }
  1655. .tr-slogn1 {
  1656. display: inline-block;
  1657. margin-right: 10px;
  1658. font-size: 12px;
  1659. text-align: left;
  1660. float: left;
  1661. font-weight: 700;
  1662. }
  1663. .selectTeacher {
  1664. font-size: 12px;
  1665. text-align: left;
  1666. font-weight: 700;
  1667. width: 160px;
  1668. color: #7297ff;
  1669. margin-top: 10px;
  1670. }
  1671. .model-grdeen {
  1672. background-color: #52cc60;
  1673. color: #fff;
  1674. }
  1675. .model-text-items-close {
  1676. cursor: pointer;
  1677. position: absolute;
  1678. top: 10px;
  1679. right: -5px;
  1680. }
  1681. .model-text-items {
  1682. position: relative;
  1683. color: #000000;
  1684. font-size: 24px;
  1685. text-align: center;
  1686. padding: 40px 0 50px 0;
  1687. margin: 0 33px;
  1688. }
  1689. .model-btn {
  1690. display: flex;
  1691. justify-content: space-around;
  1692. margin-bottom: 44px;
  1693. cursor: pointer;
  1694. }
  1695. .model-btn-items-save {
  1696. margin-top: 30px;
  1697. width: 120px;
  1698. height: 40px;
  1699. line-height: 40px;
  1700. text-align: center;
  1701. font-size: 18px;
  1702. border-radius: 50px;
  1703. }
  1704. .model-btn-items {
  1705. width: 154px;
  1706. height: 50px;
  1707. line-height: 50px;
  1708. text-align: center;
  1709. font-size: 18px;
  1710. border-radius: 4px;
  1711. }
  1712. .main-gay {
  1713. background: rgba(246, 247, 251, 1);
  1714. color: #7e7e7e;
  1715. }
  1716. .Littleicon {
  1717. height: 20px;
  1718. width: 20px;
  1719. position: relative;
  1720. top: 0;
  1721. }
  1722. .NextMonthList {
  1723. float: right;
  1724. cursor: pointer;
  1725. margin-top: 20px;
  1726. width: 250px;
  1727. height: 40px;
  1728. border-radius: 20px;
  1729. line-height: 40px;
  1730. background-color: #e7f3ff;
  1731. color: #7297ff;
  1732. font-size: 12px;
  1733. }
  1734. .IconLeftclass {
  1735. font-size: 35px;
  1736. cursor: pointer;
  1737. font-weight: 700;
  1738. }
  1739. </style>