index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. <template>
  2. <div class="app-container patrolRecord">
  3. <div class="patrolRecordPage" v-show="pageType === 1">
  4. <div class="left-page-max-big-box">
  5. <el-tree
  6. style="margin-right:10px;"
  7. :data="deptOptions"
  8. :props="defaultProps"
  9. icon-class=""
  10. node-key="id"
  11. :highlight-current="true"
  12. default-expand-all
  13. :expand-on-click-node="false"
  14. :filter-node-method="filterNode"
  15. ref="tree"
  16. @node-click="handleNodeClick"
  17. />
  18. </div>
  19. <p class="center-border-p"></p>
  20. <div class="right-page-max-big-box">
  21. <div class="top-button-max-box">
  22. <div class="yearMonthButtonBox">
  23. <p @click="yearMonthSwitchButton(1)" :class="yearMonthType===1?'left-button-one':'left-button-tow'">月度</p>
  24. <p @click="yearMonthSwitchButton(2)" :class="yearMonthType===2?'right-button-one':'right-button-tow'">年度</p>
  25. </div>
  26. <div class="year-month-data-button-box">
  27. <p class="year-month-subtract-button" @click="subtractDate"><</p>
  28. <p class="year-month-text-p" v-show="yearMonthType===1">{{yearMonthData.year}}-{{yearMonthData.month}}</p>
  29. <p class="year-month-text-p" v-show="yearMonthType===2">{{yearMonthData.year}}</p>
  30. <p class="year-month-add-button" @click="addDate">></p>
  31. </div>
  32. <p class="return-year-month-button inquire-button-one" v-show="yearMonthType===1" @click="returnPresent">回到本月</p>
  33. </div>
  34. <div class="month-max-big-box scrollbar-box" v-if="yearMonthType === 1">
  35. <div class="month-week-box">
  36. <p class="for-week-box" v-for="item of weekList" :key="item.key">{{ item.value }}</p>
  37. </div>
  38. <div class="month-big-box">
  39. <div v-for="(year,index) in yearDate" v-if="year.year == yearMonthData.year && year.month == yearMonthData.month">
  40. <div class="for-month-max-big-box" v-for="(item,index) in year.list" :key="item.key">
  41. <p class="for-month-top-big-box" :class="item.disable?'for-month-top-big-box-color':''">{{item.date}}</p>
  42. <div class="for-month-bottom-big-box" :class="item.noSignedInCount>0?'red-backgroud-color':''"
  43. v-if="!item.disable&&(item.signInCount>0||item.noSignedInCount>0)" @click.stop="goPage('info',item)">
  44. <div class="for-month-bottom-left-min-box">
  45. <p>已签到人员:{{item.signInCount}}</p>
  46. <p>未签到人员:{{item.noSignedInCount}}</p>
  47. </div>
  48. <div class="for-month-bottom-right-min-box el-icon-arrow-right"></div>
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. <div class="year-max-big-box scrollbar-box" v-if="yearMonthType === 2">
  55. <div class="for-year-max-big-box" v-for="(year,index) in yearDate" :key="year.key" v-if="year.year == yearMonthData.year">
  56. <p class="year-name-p">{{year.month==1?'一月':(year.month===2?'二月':(year.month===3?'三月':(year.month===4?'四月':(
  57. year.month===5?'五月':(year.month===6?'六月':(year.month===7?'七月':(year.month===8?'八月':(year.month===9?'九月':(
  58. year.month===10?'十月':(year.month===11?'十一月':(year.month===12?'十二月':'')))))))))))}}</p>
  59. <div class="year-week-box">
  60. <p class="for-week-box" v-for="item of weekList" :key="item.key">{{ item.value }}</p>
  61. </div>
  62. <div class="year-big-box">
  63. <div class="for-year-big-box" v-for="(item,index) in year.list" :key="item.key">
  64. <p class="for-year-top-big-box" :class="item.disable?'for-year-top-big-box-color':''">{{item.date}}</p>
  65. <div class="for-year-bottom-big-box" :class="!item.disable&&item.noSignedInCount>0?'red-backgroud-color':''" v-if="(item.signInCount>0||item.noSignedInCount>0)&&!item.disable" @click.stop="goPage('info',item)">{{item.noSignedInCount>0?item.noSignedInCount:item.signInCount}}人</div>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. <info-page v-if="pageType === 2" :propsData="propsData"></info-page>
  73. </div>
  74. </template>
  75. <script>
  76. import { getListYmd } from '@/api/laboratory/patrolRecord'
  77. import { getTreeList} from '@/api/evacuation3_2/index'
  78. import { treeselect } from "@/api/system/user_teacher";
  79. import infoPage from "./infoPage.vue";
  80. export default {
  81. name: 'index',
  82. components: {
  83. infoPage
  84. },
  85. data() {
  86. return {
  87. //页面状态切换
  88. pageType:1,
  89. //树状结构
  90. treeList:[],
  91. deptOptions:[],
  92. defaultProps: {
  93. children: "children",
  94. label: "label"
  95. },
  96. checkTreeId:null,
  97. //年月状态切换 1.月度 2.年度
  98. yearMonthType:1,
  99. //全选按钮状态
  100. allButtonType:false,
  101. //年月数据切换
  102. yearMonthData:{
  103. presentYear:null,
  104. presentMonth:null,
  105. presentDate:null,
  106. year:null,
  107. month:null,
  108. },
  109. //计算用日期
  110. shareDate: new Date(),
  111. newKey:0,
  112. weekList: [
  113. {
  114. key:"1",
  115. value:"周一",
  116. },
  117. {
  118. key:"2",
  119. value:"周二",
  120. },
  121. {
  122. key:"3",
  123. value:"周三",
  124. },
  125. {
  126. key:"4",
  127. value:"周四",
  128. },
  129. {
  130. key:"5",
  131. value:"周五",
  132. },
  133. {
  134. key:"6",
  135. value:"周六",
  136. },
  137. {
  138. key:"7",
  139. value:"周日",
  140. },
  141. ],
  142. //年日历
  143. yearDate:[],
  144. //月日历
  145. monthDate:[],
  146. //已勾选数据
  147. checkList:[],
  148. //子页面传参数据
  149. propsData:{},
  150. }
  151. },
  152. created() {
  153. this.getTreeselect();
  154. },
  155. mounted() {
  156. },
  157. methods: {
  158. /**************************************************/
  159. //查询值班记录列表
  160. getListYmd(){
  161. let self = this;
  162. let obj = {
  163. deptId:this.checkTreeId,
  164. // beginTime:this.yearDate[0].list[0].value,
  165. beginTime:"",
  166. // endTime:this.yearDate[this.yearDate.length-1].list[this.yearDate[this.yearDate.length-1].list.length-1].value,
  167. endTime:"",
  168. };
  169. if(this.yearMonthType == 1){
  170. for(let i=0;i<self.yearDate.length;i++){
  171. if(self.yearDate[i].year == self.yearMonthData.year &&
  172. self.yearDate[i].month == self.yearMonthData.month){
  173. obj.beginTime = self.yearDate[i].list[0].value;
  174. obj.endTime = self.yearDate[i].list[self.yearDate[i].list.length-1].value;
  175. }
  176. }
  177. }else if(this.yearMonthType == 2){
  178. let list = [];
  179. for(let i=0;i<self.yearDate.length;i++){
  180. if(self.yearDate[i].year == self.yearMonthData.year){
  181. list.push(self.yearDate[i]);
  182. }
  183. }
  184. obj.beginTime = list[0].list[0].value;
  185. obj.endTime = list[list.length-1].list[list[list.length-1].list.length-1].value;
  186. }
  187. getListYmd(obj).then(response => {
  188. for(let o=0;o<self.yearDate.length;o++){
  189. for(let x=0;x<self.yearDate[o].list.length;x++){
  190. let signInCount = 0;
  191. let noSignedInCount = 0;
  192. for(let i=0;i<response.data.length;i++){
  193. if(self.yearDate[o].list[x].value == response.data[i].dutyTime){
  194. signInCount = response.data[i].signInCount
  195. noSignedInCount = response.data[i].noSignedInCount
  196. }
  197. }
  198. self.yearDate[o].list[x].signInCount = signInCount
  199. self.yearDate[o].list[x].noSignedInCount = noSignedInCount
  200. }
  201. }
  202. // for(let i=0;i<response.data.length;i++){
  203. // let year = parseInt(response.data[i].dutyTime.split('-')[0]);
  204. // let month = parseInt(response.data[i].dutyTime.split('-')[1]);
  205. // for(let o=0;o<self.yearDate.length;o++){
  206. // if(self.yearDate[o].year == year && self.yearDate[o].month == month){
  207. // for(let x=0;x<self.yearDate[o].list.length;x++){
  208. // if(self.yearDate[o].list[x].value == response.data[i].dutyTime){
  209. // self.yearDate[o].list[x].signInCount = response.data[i].signInCount
  210. // self.yearDate[o].list[x].noSignedInCount = response.data[i].noSignedInCount
  211. // }
  212. // }
  213. // }
  214. // }
  215. // }
  216. });
  217. },
  218. //时间初始化
  219. initializationDate(){
  220. let myDate = new Date();
  221. let obj = {
  222. presentYear:myDate.getFullYear(),
  223. presentMonth:myDate.getMonth()+1,
  224. presentDate:parseInt(this.stringify(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()).replace(/-/g,"")),
  225. year:myDate.getFullYear(),
  226. month:myDate.getMonth()+1,
  227. };
  228. this.$set(this,'yearMonthData',obj);
  229. this.$set(this,'yearDate',[]);
  230. this.$set(this,'checkList',[]);
  231. if(this.generateDate()){
  232. //后端数据回填
  233. this.getListYmd();
  234. }
  235. },
  236. /** 查询部门下拉树结构 */
  237. getTreeselect() {
  238. let self = this;
  239. treeselect({}).then(response => {
  240. this.deptOptions = response.data;
  241. this.$nextTick(function(){
  242. if(response.data[0]){
  243. self.$refs.tree.setCurrentKey(response.data[0].id);
  244. self.$set(self,'checkTreeId',response.data[0].id);
  245. self.initializationDate();
  246. }
  247. })
  248. });
  249. },
  250. // 筛选节点
  251. filterNode(value, data) {
  252. if (!value) return true;
  253. return data.label.indexOf(value) !== -1;
  254. },
  255. // 节点单击事件
  256. handleNodeClick(data) {
  257. if(data.id != this.checkTreeId){
  258. console.log('123')
  259. this.$set(this,'checkTreeId',data.id);
  260. this.initializationDate();
  261. }
  262. },
  263. //页面切换
  264. goPage(type,item){
  265. if(type == 'index'){
  266. this.$set(this,'pageType',1)
  267. }else if(type=='info'){
  268. if(!this.hasPermiDom(['laboratory:xxpIns:query'])){
  269. this.msgError('您没有相关权限,无法查看.')
  270. return
  271. }
  272. let obj = {
  273. checkTreeId:this.checkTreeId,
  274. time:item.value,
  275. }
  276. this.$set(this,'propsData',obj)
  277. this.$set(this,'pageType',2)
  278. }
  279. },
  280. //返回当前时间
  281. returnPresent(){
  282. this.$set(this.yearMonthData,'year',this.yearMonthData.presentYear);
  283. this.$set(this.yearMonthData,'month',this.yearMonthData.presentMonth);
  284. this.getListYmd();
  285. },
  286. //年或月增加
  287. addDate(){
  288. if(this.yearMonthType == 1){
  289. if(this.yearMonthData.month<12){
  290. this.yearMonthData.month++
  291. }else{
  292. if(this.yearMonthData.year>=this.yearMonthData.presentYear){
  293. return
  294. }
  295. this.yearMonthData.year++
  296. this.$set(this.yearMonthData,'month',1);
  297. }
  298. }else if(this.yearMonthType == 2){
  299. if(this.yearMonthData.year>=this.yearMonthData.presentYear){
  300. return
  301. }
  302. this.yearMonthData.year++
  303. }
  304. this.getListYmd();
  305. },
  306. //年或月减少
  307. subtractDate(){
  308. if(this.yearMonthType == 1){
  309. if(this.yearMonthData.month>1){
  310. this.yearMonthData.month--
  311. }else{
  312. if(this.yearMonthData.year<=this.yearMonthData.presentYear-1){
  313. return
  314. }
  315. this.yearMonthData.year--
  316. this.$set(this.yearMonthData,'month',12);
  317. }
  318. }else if(this.yearMonthType == 2){
  319. if(this.yearMonthData.year<=this.yearMonthData.presentYear-1){
  320. return
  321. }
  322. this.yearMonthData.year--
  323. }
  324. this.getListYmd();
  325. },
  326. //年月展示切换按钮
  327. yearMonthSwitchButton(type){
  328. if(this.yearMonthType != type){
  329. this.$set(this,'yearMonthType',type);
  330. }
  331. this.getListYmd();
  332. },
  333. // 生成日历
  334. generateDate() {
  335. let self = this;
  336. let myDate = new Date();
  337. let year = myDate.getFullYear()-1;
  338. let newTimeList = [];
  339. self.newKey = 0;
  340. for(let o=0;o<2;o++){
  341. for(let i=0;i<12;i++){
  342. self.newKey++
  343. newTimeList.push(self.setCurrentYearMonth(year,i))
  344. }
  345. year++
  346. }
  347. this.$set(this,'yearDate',newTimeList);
  348. return true;
  349. },
  350. // 设置日历显示的日期(年-月)
  351. setCurrentYearMonth(year,month) {
  352. let showYearMonth = {
  353. year,
  354. month,
  355. };
  356. return this.createCalendar(showYearMonth);
  357. },
  358. // 创建当前月对应日历的日期数据
  359. createCalendar(showYearMonth) {
  360. const oneDayMS = 24 * 60 * 60 * 1000;
  361. let { year, month } = showYearMonth;
  362. let obj = {
  363. key:this.newKey,
  364. time:year+'-'+(month+1),
  365. year:year,
  366. month:month+1,
  367. list:[],
  368. }
  369. let firstDay = this.getFirstDayByMonths(year, month);
  370. let prefixDaysLen = firstDay === 0 ? 6 : firstDay - 1;
  371. let begin = new Date(year, month, 1).getTime() - oneDayMS * prefixDaysLen;
  372. let lastDay = this.getLastDayByMonth(year, month);
  373. let suffixDaysLen = lastDay === 0 ? 0 : 7 - lastDay;
  374. let end = new Date(year, month + 1, 0).getTime() + oneDayMS * suffixDaysLen;
  375. while (begin <= end) {
  376. this.shareDate.setTime(begin);
  377. let year = this.shareDate.getFullYear();
  378. let curMonth = this.shareDate.getMonth();
  379. let date = this.shareDate.getDate();
  380. let time = this.stringify(year, curMonth, date).replace(/-/g,"");
  381. obj.list.push({
  382. year: year,
  383. month: curMonth + 1,
  384. date: date,
  385. weeks:this.calculationWeeks(year, curMonth, date),
  386. value: this.stringify(year, curMonth, date),
  387. key:this.newKey+''+time,
  388. time:time,
  389. disable: curMonth !== month,
  390. checkType:false,
  391. signInCount:0,
  392. noSignedInCount:0,
  393. });
  394. begin += oneDayMS;
  395. }
  396. return obj;
  397. },
  398. //计算当前是周几
  399. calculationWeeks(year, curMonth, date){
  400. let now = new Date(this.stringify(year, curMonth, date));
  401. let day = now.getDay();
  402. let weeks = new Array(
  403. "7",
  404. "1",
  405. "2",
  406. "3",
  407. "4",
  408. "5",
  409. "6"
  410. );
  411. return weeks[day];
  412. },
  413. // 格式化时间
  414. stringify(year, month, date) {
  415. return [year, this.pad(month + 1), this.pad(date)].join("-");
  416. },
  417. // 对小于 10 的数字,前面补 0
  418. pad(str) {
  419. return str < 10 ? `0${str}` : str;
  420. },
  421. // 当前月的第一天是星期几
  422. getFirstDayByMonths(year, month) {
  423. return new Date(year, month, 1).getDay();
  424. },
  425. // 当前月的最后一天是星期几
  426. getLastDayByMonth(year, month) {
  427. return new Date(year, month + 1, 0).getDay();
  428. },
  429. }
  430. }
  431. </script>
  432. <style scoped lang="scss">
  433. .patrolRecord{
  434. display: flex;
  435. flex-direction: column;
  436. font-weight:500;
  437. *{
  438. margin:0;
  439. padding:0;
  440. }
  441. .patrolRecordPage{
  442. flex:1;
  443. display: flex;
  444. overflow: hidden;
  445. .left-page-max-big-box{
  446. width:250px;
  447. overflow: hidden;
  448. display: flex;
  449. flex-direction: column;
  450. padding:36px 0 36px 10px;
  451. .tree-box {
  452. flex: 1;
  453. .terr-max-box:nth-child(1){
  454. margin:0;
  455. }
  456. .terr-max-box {
  457. margin-top: 20px;
  458. .max-name-box {
  459. display: flex;
  460. margin-right: 20px;
  461. margin-bottom: 10px;
  462. color: #D8D8D8;
  463. font-size: 20px;
  464. .max-name {
  465. flex: 1;
  466. margin-right: 19px;
  467. color: #333;
  468. font-size: 16px;
  469. line-height: 16px;
  470. margin-top: 3px;
  471. cursor: pointer;
  472. overflow: hidden;
  473. }
  474. }
  475. .terr-big-box {
  476. margin-left: 30px;
  477. .big-name-box {
  478. cursor: pointer;
  479. height: 40px;
  480. line-height: 40px;
  481. display: flex;
  482. font-size: 16px;
  483. color: #333;
  484. img {
  485. width: 16px;
  486. height: 16px;
  487. margin-top: 12px;
  488. margin-right: 4px;
  489. }
  490. .name-p {
  491. flex: 1;
  492. overflow: hidden;
  493. }
  494. }
  495. .terr-min-box {
  496. margin-left: 30px;
  497. .min-name {
  498. cursor: pointer;
  499. height: 40px;
  500. line-height: 40px;
  501. display: flex;
  502. font-size: 16px;
  503. color: #333;
  504. overflow: hidden;
  505. }
  506. }
  507. }
  508. .check-color {
  509. color: #0183FA !important;
  510. }
  511. }
  512. }
  513. .tree-null-p {
  514. text-align: center;
  515. line-height: 100px;
  516. flex: 1;
  517. color: #999;
  518. }
  519. }
  520. .center-border-p{
  521. border-right:1px dashed #A2A2A2;
  522. margin:36px 35px 36px 0;
  523. }
  524. .right-page-max-big-box{
  525. flex:1;
  526. display: flex;
  527. flex-direction: column;
  528. overflow: hidden;
  529. -webkit-user-select: none;
  530. -moz-user-select: none;
  531. -ms-user-select: none;
  532. user-select: none;
  533. .top-button-max-box{
  534. height:87px;
  535. padding:21px 0 26px 0;
  536. display: flex;
  537. border-bottom:1px solid #E0E0E0;
  538. font-size:14px;
  539. .yearMonthButtonBox{
  540. width:200px;
  541. height:40px;
  542. display: flex;
  543. p{
  544. text-align: center;
  545. line-height:38px;
  546. width:100px;
  547. cursor: pointer;
  548. }
  549. p:nth-child(1){
  550. border-top-left-radius: 4px;
  551. border-bottom-left-radius: 4px;
  552. }
  553. p:nth-child(2){
  554. border-top-right-radius: 4px;
  555. border-bottom-right-radius: 4px;
  556. }
  557. .left-button-one{
  558. background: #0183FA;
  559. border:1px solid #0183FA;
  560. color:#fff;
  561. }
  562. .left-button-tow{
  563. color:#333333;
  564. border:1px solid #E0E0E0;
  565. border-right:none;
  566. }
  567. .right-button-one{
  568. background: #0183FA;
  569. border:1px solid #0183FA;
  570. color:#fff;
  571. }
  572. .right-button-tow{
  573. color:#333333;
  574. border:1px solid #E0E0E0;
  575. border-left:none;
  576. }
  577. }
  578. .year-month-data-button-box{
  579. display: flex;
  580. margin:0 33px 0 39px;
  581. p{
  582. line-height:38px;
  583. text-align: center;
  584. }
  585. .year-month-subtract-button{
  586. border:1px solid #E0E0E0;
  587. border-top-left-radius: 4px;
  588. border-bottom-left-radius: 4px;
  589. width:38px;
  590. cursor: pointer;
  591. }
  592. .year-month-text-p{
  593. border-top:1px solid #E0E0E0;
  594. border-bottom:1px solid #E0E0E0;
  595. width:150px;
  596. }
  597. .year-month-add-button{
  598. border:1px solid #E0E0E0;
  599. border-top-right-radius: 4px;
  600. border-bottom-right-radius: 4px;
  601. width:38px;
  602. cursor: pointer;
  603. }
  604. }
  605. .return-year-month-button{
  606. width:100px;
  607. height:40px;
  608. line-height:38px;
  609. }
  610. .flex-p{
  611. flex:1;
  612. }
  613. .all-button{
  614. width:80px;
  615. height:40px;
  616. margin-right:8px;
  617. line-height:38px;
  618. }
  619. .add-button{
  620. width:80px;
  621. height:40px;
  622. margin-right:23px;
  623. line-height:38px;
  624. }
  625. }
  626. .month-max-big-box{
  627. -webkit-user-select: none;
  628. -moz-user-select: none;
  629. -ms-user-select: none;
  630. user-select: none;
  631. flex:1;
  632. padding:10px 0 30px;
  633. .month-week-box{
  634. display: flex;
  635. overflow: hidden;
  636. font-size:0;
  637. .for-week-box{
  638. font-size:14px;
  639. width:180px;
  640. text-align: center;
  641. line-height:60px;
  642. border-bottom:1px solid #E0E0E0;
  643. }
  644. }
  645. .month-big-box{
  646. border-left:1px solid #E0E0E0;
  647. font-size:0;
  648. .for-month-max-big-box{
  649. overflow: hidden;
  650. font-size:16px;
  651. width:180px;
  652. height:110px;
  653. display: inline-block;
  654. border-right:1px solid #E0E0E0;
  655. border-bottom:1px solid #E0E0E0;
  656. position: relative;
  657. .for-month-top-big-box{
  658. width:180px;
  659. height:50px;
  660. line-height:50px;
  661. text-align: center;
  662. font-size:16px;
  663. color:#333;
  664. }
  665. .for-month-top-big-box-color{
  666. color:#E0E0E0;
  667. }
  668. .for-month-bottom-big-box{
  669. height:60px;
  670. background: rgba(1,131,250,0.2);
  671. color:#0183FA;
  672. display: flex;
  673. cursor: pointer;
  674. .for-month-bottom-left-min-box{
  675. flex: 1;
  676. font-size:14px;
  677. padding:10px 0 0 10px;
  678. p{
  679. line-height:20px;
  680. }
  681. }
  682. .for-month-bottom-right-min-box{
  683. width:24px;
  684. text-align: center;
  685. line-height:60px;
  686. font-size:12px;
  687. font-weight:900;
  688. }
  689. }
  690. }
  691. }
  692. }
  693. .year-max-big-box{
  694. flex:1;
  695. padding:30px 0;
  696. .for-year-max-big-box{
  697. vertical-align:top;
  698. width:596px;
  699. display: inline-block;
  700. margin:0 42px 40px 0;
  701. overflow: hidden;
  702. .year-name-p{
  703. text-align: center;
  704. font-size:16px;
  705. background: #CCE6FE;
  706. color:#0183FA;
  707. line-height:40px;
  708. border-top-left-radius:4px;
  709. border-top-right-radius:4px;
  710. }
  711. .year-week-box{
  712. overflow: hidden;
  713. font-size:0;
  714. background: rgba(224,224,224,0.2);
  715. .for-week-box{
  716. width:85px;
  717. line-height:40px;
  718. text-align: center;
  719. display: inline-block;
  720. font-size:12px;
  721. }
  722. }
  723. .year-big-box{
  724. border-top:1px solid #E0E0E0;
  725. border-left:1px solid #E0E0E0;
  726. overflow: hidden;
  727. font-size:0;
  728. .for-year-big-box{
  729. display: inline-block;
  730. overflow: hidden;
  731. width:85px;
  732. height:60px;
  733. border-right:1px solid #E0E0E0;
  734. border-bottom:1px solid #E0E0E0;
  735. position: relative;
  736. .for-year-top-big-box{
  737. flex:1;
  738. font-size:12px;
  739. color:#333;
  740. line-height:30px;
  741. text-align: center;
  742. }
  743. .for-year-top-big-box-color{
  744. color:#E0E0E0;
  745. }
  746. .for-year-bottom-big-box{
  747. line-height:30px;
  748. font-size:14px;
  749. text-align: center;
  750. background: #CCE6FE;
  751. color:#0183FA;
  752. cursor: pointer;
  753. }
  754. }
  755. }
  756. }
  757. }
  758. .red-backgroud-color{
  759. background: rgba(255,0,0,0.2)!important;
  760. color:#FF0000!important;
  761. }
  762. }
  763. }
  764. }
  765. </style>
  766. <style lang="scss">
  767. .patrolRecord{
  768. .el-tree-node__label{
  769. font-size:16px;
  770. }
  771. .el-tree-node__content{
  772. height:30px;
  773. line-height: 30px;
  774. }
  775. .el-tree-node__expand-icon{
  776. color:#333;
  777. font-size:16px;
  778. padding:0;
  779. margin-right:3px;
  780. }
  781. .el-tree-node__expand-icon.is-leaf{
  782. color: transparent;
  783. }
  784. .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content{
  785. background-color:#ffffff;
  786. color:#0183FA;
  787. }
  788. }
  789. </style>