| 
					
				 | 
			
			
				@@ -0,0 +1,243 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  <div class="educationStatistics"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <NavBar /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <div class="statistics-container"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <org-tree v-model="cascaderValue" @change="getOrgDataList"></org-tree> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <van-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <van-col span="24"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <van-cell title="调阅周期" @click="showPicker = true" is-link arrow-direction="down" :value="currentDate" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <van-popup  v-model="showPicker" position="bottom" custom-style="height: 20%;"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <week-date-type :defaults="defaults" @onConfirm="onConfirm" @onCancel="onCancel" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          </van-popup> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </van-col> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </van-row> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <div class="card-list"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <empty v-if="!dataList || dataList.length === 0" /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <ve-table 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          v-else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          maxHeight="calc(100vh - 252px)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          fixedHeader 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          borderX 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          borderY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          borderAround 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          :columns="columns" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          :table-data="dataList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import NavBar from '@/components/NavBar' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import OrgTree from '@/components/orgTree' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import dateCell from '@/components/dateCell' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import selectCell from '@/components/selectCell' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { getrehearsalList, getTableRehearsalList } from '@/api/drillTask.js' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { newDateMonth } from '@/utils/date.js' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { Toast } from 'vant' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import WeekDateType from "views/menu/monitorStatistics/components/WeekDateType.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  components: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    WeekDateType, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    NavBar, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    OrgTree, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    dateCell, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    selectCell 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // active: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cascaderValue: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      presentDate: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      presentEndDate: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      showDate: false, //月份显示隐藏 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fieldValue: '', //状态名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      statusValue: '', //状态值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      taskList: [], //状态数组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      columnsList: [], //状态数组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      currentDate: '', //年份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      showPicker: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      endDate: newDateMonth(), //年份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      planList: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      yearSelect: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      defaults: new Date(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      prop: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        label: 'name', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        value: 'id' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      loading: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      columns: [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          field: 'index', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          key: 'index', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          title: '序号', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          width: 50, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          align: 'center', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          renderBodyCell: ({ row, column, rowIndex }, h) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return ++rowIndex 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { field: 'orgName', key: 'a', title: '单位名称', align: 'center' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { field: 'planAccessNumber', key: 'b', title: '应调阅次数', align: 'center' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { field: 'realityAccessNumber', key: 'c', title: '调阅次数', align: 'center' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { field: 'accessRate', key: 'd', title: '完成率', align: 'center' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dataList: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  created() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.presentDate = new Date(newDateMonth()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.presentEndDate = new Date(newDateMonth()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  mounted() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.initData() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  computed: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    formatter(type, val) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (type === 'month') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return `${val}月`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }  else if (type === 'year') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return `${val}年`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    initData() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.cascaderValue = JSON.parse(window.sessionStorage.getItem('SET_USER_ORGID')) + '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //机构搜索 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getOrgDataList(val) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.cascaderValue = val 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.getDataList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    getDataList() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!this.statusValue) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let data = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        orgId: this.cascaderValue || '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        startTime: this.currentDate + '-01', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        endTime: this.endDate + '-01' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      getTableRehearsalList(data).then(res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.dataList = res.data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //搜索选择状态时触发 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onConfirm(value, index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log("onConfirm", value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 检查 value 是否为对象并且有 text 属性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log("onConfirm", value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 假设 value 是一个对象,其中包含了 text 属性 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const weekText = value[1].text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 使用正则表达式提取周数部分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const weekMatch = weekText.match(/第(\d+)周/); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (weekMatch && weekMatch[1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.currentDate = `第${weekMatch[1]}周`; // 更新 currentDate 为所选周数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.currentDate = ''; // 如果没有匹配到周数,则清空 currentDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.showPicker = false; // 关闭弹窗 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onCancel() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.show = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.typeStatus = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.showStatus = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.endShowDate = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //日期格式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    formatDate(date) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //日期转换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    newDate(time) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var date = new Date(time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var y = date.getFullYear() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var m = date.getMonth() + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      m = m < 10 ? '0' + m : m 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      var d = date.getDate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      d = d < 10 ? '0' + d : d 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return y + '-' + m 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //月份选中触发 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onDateConfirm(val) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (this.newDate(val + '') > this.endDate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return Toast('开始月份不能大于结束月份') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.currentDate = this.newDate(val + '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.getDataList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //年份选中触发 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    onEndDateConfirm(val) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (this.newDate(val + '') < this.currentDate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return Toast('结束月份不能小于开始月份') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.endDate = this.newDate(val + '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log(this.endDate) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.endShowDate = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.getDataList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    tbsHandler() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.getDataList() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style lang="scss"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.van-cell-group { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  margin-bottom: 20px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.van-cell-group:last-child { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  margin-bottom: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.vue-table-root { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  tr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  td, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  th { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    font-size: 25px !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    color: #666 !important; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style lang="scss" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.educationStatistics { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.statistics-container { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.card-list { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  padding: 20px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  height: calc(100vh - 420px); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  overflow: hidden; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.card-num { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  font-size: 28px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  color: #009dff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.flex-box { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  > div { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    margin-right: 40px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.search-flex { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  justify-content: space-between; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  > div { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    width: 50%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.van-cell__value{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  color: black; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  text-align: left; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |