|
|
@@ -0,0 +1,349 @@
|
|
|
+<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="showStatus = true" is-link arrow-direction="down" :value="fieldValue" />
|
|
|
+
|
|
|
+ <van-popup v-model="showStatus" round position="bottom">
|
|
|
+ <van-picker
|
|
|
+ title="演练任务名称"
|
|
|
+ show-toolbar
|
|
|
+ :columns="taskList"
|
|
|
+ @confirm="onConfirm"
|
|
|
+ @cancel="onCancel"
|
|
|
+ confirm-button-text="确定"
|
|
|
+ :close-on-click-overlay="false"
|
|
|
+ />
|
|
|
+ </van-popup>
|
|
|
+ </van-col>
|
|
|
+ </van-row>
|
|
|
+ <van-row>
|
|
|
+ <van-col span="12">
|
|
|
+ <!-- <van-field
|
|
|
+ v-model="currentDate"
|
|
|
+ label-width="5em"
|
|
|
+ label="开始月份"
|
|
|
+ placeholder=""
|
|
|
+ :disabled="showDate"
|
|
|
+ @click="showDate = true"
|
|
|
+ >
|
|
|
+ <van-icon name="arrow-down" slot="button"
|
|
|
+ /></van-field> -->
|
|
|
+ <van-cell title="开始月份" @click="showDate = true" is-link arrow-direction="down" :value="currentDate" />
|
|
|
+
|
|
|
+ <van-popup v-model="showDate" round position="bottom">
|
|
|
+ <!-- :columns="yearColumns" -->
|
|
|
+ <van-datetime-picker
|
|
|
+ v-model="presentDate"
|
|
|
+ show-toolbar
|
|
|
+ @cancel="onCancel"
|
|
|
+ type="year-month"
|
|
|
+ @confirm="onDateConfirm"
|
|
|
+ confirm-button-text="确定"
|
|
|
+ :default-index="yearSelect"
|
|
|
+ title="开始月份"
|
|
|
+ :formatter="formatter"
|
|
|
+ />
|
|
|
+ </van-popup>
|
|
|
+ </van-col>
|
|
|
+ <van-col span="12">
|
|
|
+
|
|
|
+ <van-cell title="结束月份" @click="endShowDate = true" is-link arrow-direction="down" :value="endDate" />
|
|
|
+
|
|
|
+ <van-popup v-model="endShowDate" round position="bottom">
|
|
|
+ <!-- :columns="yearColumns" -->
|
|
|
+ <van-datetime-picker
|
|
|
+ v-model="presentEndDate"
|
|
|
+ show-toolbar
|
|
|
+ @cancel="onCancel"
|
|
|
+ type="year-month"
|
|
|
+ :formatter="formatter"
|
|
|
+ @confirm="onEndDateConfirm"
|
|
|
+ confirm-button-text="确定"
|
|
|
+ :default-index="yearSelect"
|
|
|
+ title="结束月份"
|
|
|
+ />
|
|
|
+ </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 { mapGetters } from 'vuex'
|
|
|
+import { formatDate } from '@/filters/filter'
|
|
|
+import { newDateMonth } from '@/utils/date.js'
|
|
|
+import { Toast } from 'vant'
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ NavBar,
|
|
|
+ OrgTree,
|
|
|
+ dateCell,
|
|
|
+ selectCell
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ // active: '',
|
|
|
+ cascaderValue: '',
|
|
|
+ presentDate: '',
|
|
|
+ presentEndDate: '',
|
|
|
+ showStatus: false, //状态显示隐藏
|
|
|
+ endShowDate: false, //状态显示隐藏
|
|
|
+ // yearColumns: [],
|
|
|
+ showDate: false, //月份显示隐藏
|
|
|
+ fieldValue: '', //状态名称
|
|
|
+ statusValue: '', //状态值
|
|
|
+ taskList: [], //状态数组
|
|
|
+ columnsList: [], //状态数组
|
|
|
+ currentDate: newDateMonth(), //年份
|
|
|
+ endDate: newDateMonth(), //年份
|
|
|
+ planList: [],
|
|
|
+ yearSelect: null,
|
|
|
+ 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: 'shouldFinish', key: 'b', title: '应演练数', align: 'center' },
|
|
|
+ { field: 'finish', key: 'c', title: '已演练数', align: 'center' },
|
|
|
+ { field: 'finishRate', key: 'd', title: '完成率', align: 'center' }
|
|
|
+ ],
|
|
|
+ dataList: []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.presentDate = new Date(newDateMonth())
|
|
|
+ this.presentEndDate = new Date(newDateMonth())
|
|
|
+ // this.yearData()
|
|
|
+ // this.getNewMonth()
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.initData()
|
|
|
+ },
|
|
|
+ computed: {},
|
|
|
+ methods: {
|
|
|
+ formatter(type, val) {
|
|
|
+ if (type === 'month') {
|
|
|
+ return `${val}月`;
|
|
|
+ } else if (type === 'year') {
|
|
|
+ return `${val}年`;
|
|
|
+ }
|
|
|
+ return val;
|
|
|
+ },
|
|
|
+ // getNewMonth() {
|
|
|
+ // //获取当前月份
|
|
|
+ // let date = new Date().getMonth() + 1
|
|
|
+
|
|
|
+ // //默认填充当前季度
|
|
|
+ // if (date > 7 && date < 10) {
|
|
|
+ // this.active='07-01'
|
|
|
+ // //三季度
|
|
|
+ // }else if(date > 4 && date < 7){
|
|
|
+ // //二季度
|
|
|
+ // this.active='04-01'
|
|
|
+ // }else if(date > 1 && date < 4){
|
|
|
+ // //一季度
|
|
|
+ // this.active='01-01'
|
|
|
+ // }else{
|
|
|
+ // this.active='10-01'
|
|
|
+ // // 四季度
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ initData() {
|
|
|
+ this.cascaderValue = JSON.parse(window.sessionStorage.getItem('SET_USER_ORGID')) + ''
|
|
|
+
|
|
|
+ this.getPlanList()
|
|
|
+ },
|
|
|
+ getPlanList() {
|
|
|
+ getrehearsalList(this.cascaderValue).then(res => {
|
|
|
+ if (res.data.length === 0) return this.$toast('暂无演练排名数据')
|
|
|
+ this.planList = res.data
|
|
|
+ this.taskList = res.data.map(item => item.name)
|
|
|
+
|
|
|
+ this.fieldValue = res.data[0].name
|
|
|
+ this.statusValue = res.data[0].id
|
|
|
+ this.getDataList()
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //机构搜索
|
|
|
+ getOrgDataList(val) {
|
|
|
+ this.cascaderValue = val
|
|
|
+
|
|
|
+ this.getDataList()
|
|
|
+ },
|
|
|
+ getDataList() {
|
|
|
+ if (!this.statusValue) return
|
|
|
+ let data = {
|
|
|
+ planId: this.statusValue || '',
|
|
|
+ orgId: this.cascaderValue || '',
|
|
|
+ startTime: this.currentDate + '-01',
|
|
|
+ endTime: this.endDate + '-01'
|
|
|
+ }
|
|
|
+
|
|
|
+ getTableRehearsalList(data).then(res => {
|
|
|
+ this.dataList = res.data
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //搜索选择状态时触发
|
|
|
+ onConfirm(value, index) {
|
|
|
+ this.fieldValue = value
|
|
|
+ this.planList.forEach(item => {
|
|
|
+ if (value == item.name) {
|
|
|
+ this.statusValue = item.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ this.getDataList()
|
|
|
+ this.showStatus = false
|
|
|
+ },
|
|
|
+
|
|
|
+ onCancel() {
|
|
|
+ this.show = false
|
|
|
+ this.typeStatus = false
|
|
|
+ this.showDate = false
|
|
|
+ this.showStatus = false
|
|
|
+ this.endShowDate = false
|
|
|
+ },
|
|
|
+ // yearData() {
|
|
|
+ // // 获取默认显示的时间
|
|
|
+ // var nowTime = new Date()
|
|
|
+ // let year = nowTime.getFullYear()
|
|
|
+ // let month = nowTime.getMonth()
|
|
|
+ // let day = nowTime.getDate()
|
|
|
+ // // 循环数组 填写最小时间和最大时间范围
|
|
|
+ // for (let i = 1980; i < 2099; i++) {
|
|
|
+ // this.yearColumns.push(i)
|
|
|
+ // }
|
|
|
+ // // 格式化时间并截取
|
|
|
+ // var years = this.formatDate(new Date(year, month, day))
|
|
|
+ // var Year = years.slice(0, 4)
|
|
|
+ // // 将截取的年份赋值给绑定值 用于点击弹出日期窗口后显示当前的时间
|
|
|
+ // this.yearSelect = this.yearColumns.indexOf(Number(Year))
|
|
|
+ // },
|
|
|
+ //日期格式
|
|
|
+ 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.showDate = false
|
|
|
+ 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>
|