Просмотр исходного кода

新增安保履职统计页面

jingyuanchao 1 год назад
Родитель
Сommit
a1b8623150
2 измененных файлов с 355 добавлено и 0 удалено
  1. 6 0
      src/router/router.config.js
  2. 349 0
      src/views/menu/resumptionStatistics/index.vue

+ 6 - 0
src/router/router.config.js

@@ -475,6 +475,12 @@ export let routers = [
         name: 'monitorStatistics',
         component: () => import('@/views/menu/monitorStatistics/index.vue'),
         meta: { title: '监控调阅情况表', keepAlive: false, hideTabBar: true, deep: 2 }
+      },
+      {
+        path: '/resumptionStatistics',
+        name: 'resumptionStatistics',
+        component: () => import('@/views/menu/resumptionStatistics/index.vue'),
+        meta: { title: '安保履职情况表', keepAlive: false, hideTabBar: true, deep: 2 }
       }
       // {
       //   path: '/addOrder',

+ 349 - 0
src/views/menu/resumptionStatistics/index.vue

@@ -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>