wangmengwei 2 년 전
부모
커밋
209d12b533

+ 12 - 2
ruoyi-ui/src/api/index.js

@@ -13,12 +13,22 @@ export function treeselect(query) {
 
 export function listTsde(query) {
   return request({
-    url: '/boman-web-core/index/stsByCzrkHomePage' ,
+    url: '/index/info' ,
     method: 'get'
   })
 }
 
 
+// 查询本周重点人群核酸检测
+export function listInfo(query) {
+  return request({
+    url: '/system/time/homeList',
+    method: 'get',
+    params: query
+  })
+}
+
+
 
 // 查询设备信息列表
 export function listDevice(query) {
@@ -59,7 +69,7 @@ export function listdbyh(query) {
 // 柱状图数据
 export function listzhuzh(query) {
   return request({
-    url: '/sts/echarts3 ',
+    url: '/index/info/jobStyle',
     method: 'get',
     params: query
   })

+ 53 - 0
ruoyi-ui/src/api/system/batch.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询导入人员信息列表
+export function listInfo(query) {
+  return request({
+    url: '/system/info/oneDate',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询总核酸次数
+export function listInfohs(query) {
+  return request({
+    url: '/system/info/oneDateList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询导入人员信息详细
+export function getInfo(id) {
+  return request({
+    url: '/system/info/' + id,
+    method: 'get'
+  })
+}
+
+// 新增导入人员信息
+export function addInfo(data) {
+  return request({
+    url: '/system/info',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改导入人员信息
+export function updateInfo(data) {
+  return request({
+    url: '/system/info',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除导入人员信息
+export function delInfo(id) {
+  return request({
+    url: '/system/info/' + id,
+    method: 'delete'
+  })
+}

+ 9 - 0
ruoyi-ui/src/api/system/info.js

@@ -9,6 +9,15 @@ export function listInfo(query) {
   })
 }
 
+// 查询总核酸次数
+export function listInfohs(query) {
+  return request({
+    url: '/index/info/heSuanCount',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询导入人员信息详细
 export function getInfo(id) {
   return request({

+ 7 - 0
ruoyi-ui/src/router/index.js

@@ -85,7 +85,14 @@ export const constantRoutes = [
         component: () => import('@/views/system/user/profile/index'),
         name: 'Profile',
         meta: { title: '个人中心', icon: 'user' }
+      },
+      {
+        path: 'yue',
+        component: () => import('@/views/system/user/yue/index'),
+        name: 'Yue',
+        meta: { title: '信息跳转', icon: 'user' }
       }
+      
     ]
   }
 ]

+ 5 - 0
ruoyi-ui/src/settings.js

@@ -1,5 +1,10 @@
 module.exports = {
     urls: `http://192.168.101.168:9001`,
+    // urls: `http://192.168.101.11:9001`,
+    // urls:`https://yqfk.qs163.cn`,
+
+    // urls: `http://192.168.3.102:6000`,
+
   /**
    * 侧边栏主题 深色主题theme-dark,浅色主题theme-light
    */

+ 1 - 1
ruoyi-ui/src/utils/request.js

@@ -17,7 +17,7 @@ const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分
   baseURL: process.env.VUE_APP_BASE_API,
   // 超时
-  timeout: 10000
+  timeout: 20000
 })
 
 // request拦截器

+ 3 - 5
ruoyi-ui/src/views/dashboard/chart/BarChart.vue

@@ -61,7 +61,7 @@ export default {
       this.setOptions(this.chartData)
     },
       setOptions({ y, x ,data } = {}) {
-        console.log(y,x,data,56)
+        // console.log(y,x,data,56)
        this.chart.setOption({
          tooltip: {
            trigger: 'axis',
@@ -95,9 +95,7 @@ export default {
          },
          xAxis: [{
            type: 'category',
-           data: ['进口冷链食品存储、 加工类企业一线人员', '市场监管系统一线 人员(直接接触)', '市场监管系统非一线人员', '入境人员隔离点工作专班人员', '境内隔离点专班工作人员', '阳性感染着、密切 接触者等现场流调、 转运的有关工作人员', '定点医疗机构的医 护、保洁、转运司 机等工作人员',
-             '普通医疗机构中发 热门诊的医护、保洁等工作人员','普通医疗机构除发 热门诊以外的工作人员','发热门诊患者','新住院患者、 陪护人员','医疗废弃物处理企 业的从事收运、处 理等工作人员','国际邮政快递包裹 运输、分拣装卸、 派送等二线工作人 员及快递服务点从 业人员','国内邮政快递包裹 运输、分拣装卸、 派送等一线工作人 员及快递服务点从 业人员',
-           ],
+           data: x,
            splitLine:{
              show:true
            },
@@ -151,7 +149,7 @@ export default {
          series: [
           {
 						type: "bar",
-						data: [70, 150, 110, 210, 200,70, 150, 110, 210, 200,70, 150, 110, 210, 200,],
+						data: y,
 						barWidth: '15',
 						itemStyle: {
               //这里设置柱形图圆角 [左上角,右上角,右下角,左下角]

+ 4 - 3
ruoyi-ui/src/views/dashboard/chart/PieChart.vue

@@ -23,7 +23,7 @@ export default {
       default: '200px'
     },
     chartData: {
-      type: Array,
+      type: Object,
       required: true
     }
   },
@@ -59,6 +59,7 @@ export default {
       this.setOptions(this.chartData)
     },
     setOptions(data) {
+      // console.log(data)
       this.chart.setOption({
         graphic:{
           type: 'text',
@@ -111,8 +112,8 @@ export default {
               },
               // data:data,
               data: [
-                { value: 6, name: '上周核酸人数' },
-                { value: 4, name: '本周核酸人数' }
+                { value: data.indexDataLastWeek, name: '上周核酸人数' },
+                { value: data.indexDataWeek, name: '本周核酸人数' }
 
               ]
             }

+ 72 - 43
ruoyi-ui/src/views/index.vue

@@ -14,15 +14,15 @@
             <el-col :xs="24" :sm="14" >
               <el-row type="flex" justify="space-between" :gutter="30">
                 <el-col>
-                  <div class="nchead ncheadl">
+                  <div class="nchead ncheadl" @click="nlshe">
                     <div class="ncheadtit">本月核酸总人数</div>
-                    <div class="ncheadtxt">13654</div>
+                    <div class="ncheadtxt">{{deviceIpOptions.indexDataMonth == null? '暂无数据' : deviceIpOptions.indexDataMonth}}</div>
                   </div>
                   </el-col>
                   <el-col>
-                  <div class="nchead ncheadc">
+                  <div class="nchead ncheadc"  @click="nlshefr">
                     <div class="ncheadtit">本周核酸总人数</div>
-                    <div class="ncheadtxt">4550</div>
+                    <div class="ncheadtxt">{{deviceIpOptions.indexDataWeek == null? '暂无数据' : deviceIpOptions.indexDataWeek}}</div>
                   </div>
                 </el-col>
               </el-row>
@@ -38,20 +38,20 @@
                 </div>
                 <div class="nche_chart">
                   <div class="nche_chartl">
-                    <pie-chart :chart-data="panelChartDatayuanh" />
+                    <pie-chart :chart-data="deviceIpOptions" />
                   </div>
                   <div class="nche_chartr">
                     <div class="nche_chartrr">
                       <div class="nche_chartra coca">本周核酸人数</div>
-                      <div class="nche_chartrb">4550</div>
+                      <div class="nche_chartrb">{{deviceIpOptions.indexDataWeek == null? '暂无数据' : deviceIpOptions.indexDataWeek}}</div>
                       <div class="nche_chartra">占比</div>
-                      <div class="nche_chartrb coa" style="margin-bottom: 0;">47%</div>
+                      <div class="nche_chartrb coa" style="margin-bottom: 0; font-size: 28px;">{{deviceIpOptions.resultWeek == null? '暂无数据' : deviceIpOptions.resultWeek}}</div>
                     </div>
                     <div class="nche_chartrr">
                       <div class="nche_chartra cocb">上周核酸人数</div>
-                      <div class="nche_chartrb">5137</div>
+                      <div class="nche_chartrb">{{deviceIpOptions.indexDataLastWeek == null? '暂无数据' : deviceIpOptions.indexDataLastWeek}}</div>
                       <div class="nche_chartra" >占比</div>
-                      <div class="nche_chartrb cob" style="margin-bottom: 0;">53%</div>
+                      <div class="nche_chartrb cob" style="margin-bottom: 0; font-size: 28px;">{{deviceIpOptions.resultLastWeek == null? '暂无数据' : deviceIpOptions.resultLastWeek}}</div>
                     </div>
                   </div>
                 </div>
@@ -64,25 +64,24 @@
     </el-row>
     <!-- 新的 -->
     <!-- 折线图数据 -->
-    <el-row :gutter="30"  style="margin-left: 0; margin-right: 0;">
+    <!-- <el-row :gutter="30"  style="margin-left: 0; margin-right: 0;">
       <el-col  style="padding-left: 0;padding-right: 0;">
         <div class="chart-wrapper dp_zhud" style="  padding: 30px; ">
           <div class="chart_tit">
             <div class="chart_titl">本周职业类别核酸情况统计</div>
             <div class="chart_titr">单位:人</div>
           </div>
-          <!-- <p class="dp_zhudtitle">本周职业类别核酸情况统计 </p> -->
           <line-chart :chart-data="newlineChartData" />
         </div>
       </el-col>
 
-    </el-row>
+    </el-row> -->
     <!-- 柱状图数据 -->
     <el-row :gutter="30"  style="margin-left: 0; margin-right: 0;">
       <el-col  style="padding-left: 0;padding-right: 0;">
         <div class="chart-wrapper dp_zhud" style="  padding: 30px; ">
          <div class="chart_tit">
-           <div class="chart_titl">本周重点人群分类核酸人数统计</div>
+           <div class="chart_titl">本周职业类别核酸情况统计</div>
            <div class="chart_titr">单位:人</div>
          </div>
           <bar-chart :chart-data="newlChartDatazhuzh" />
@@ -114,26 +113,33 @@
     <div class="tabsty" >
      <div class="chart_tit">
        <div class="chart_titl">本周重点人群核酸详情</div>
-       <div class="chart_titra">查看更多 >></div>
+       <!-- <div class="chart_titra">查看更多 >></div> -->
      </div>
-     <div class="chart_titrb">2022年08月08日 - 14日</div>
+     <div class="chart_titrb">当前时间:{{gettime}}</div>
       <!-- panelChartDatas.townDatas -->
       <!-- tableData -->
       <el-table v-loading="loading" :data="tableData"
-        style="width: 100%;"  stripe  height="280" :show-overflow-tooltip="true">
+        style="width: 100%;"  stripe  height="320" :show-overflow-tooltip="true">
         <el-table-column prop="name" label="姓名"  align="center"/>
-        <el-table-column prop="card" label="身份证号"  align="center" width="180"/>
+        <el-table-column prop="idCard" label="身份证号"  align="center" width="180"/>
         <!-- <el-table-column prop="zu" label="组"  align="center"/> -->
-        <el-table-column prop="rphone" label="联系电话(人口信息登记)"  align="center"/>
-        <el-table-column prop="hphone" label="联系电话(核酸检测登记)"  align="center"/>
-        <el-table-column prop="cjsj" label="采集时间"  align="center"/>
-        <el-table-column prop="cjdd" label="采集地点"  align="center"/>
-        <el-table-column prop="shsj" label="审核时间"  align="center"/>
+        <el-table-column prop="phoneNum" label="联系电话"  align="center" width="160"/>
+        <el-table-column label="重点人群分类" align="center" prop="focusCrowdStyle" width="130"/>
+        <el-table-column label="核酸采集时间" align="center" prop="nucleicCollectTime" width="157">
+          <template slot-scope="scope">
+            <span>{{ scope.row.nucleicCollectTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="核酸结果时间" align="center" prop="nucleicResultsTime" width="157">
+          <template slot-scope="scope">
+            <span>{{ scope.row.nucleicResultsTime}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="collectPlace" label="采集地点"  align="center"/>
 
 
       </el-table>
-<!--
-      <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> -->
+      <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
     </div>
 
     <!-- <panel-group @handleSetLineChartData="handleSetLineChartData" /> -->
@@ -157,7 +163,7 @@
 </template>
 
 <script>
-import {treeselect,listDevice, exportPost,listzhex,listleida,listdbyh, listzhuzh,listTsde} from "@/api/index";
+import {listInfo,treeselect,listDevice, exportPost,listzhex,listleida,listdbyh, listzhuzh,listTsde} from "@/api/index";
 import PanelGroup from './dashboard/PanelGroup';
 import PanelGroups from './dashboard/PanelGroups';
 import PanelGroupone from './dashboard/PanelGroupone';
@@ -212,8 +218,6 @@ export default {
     return {
       newlineChartData:{},
       newlChartDatazhuzh:{},
-
-
       lineChartData: {},
       dayList: 1, //判断天周月
       taye: 'newVisitis', //根据点击天周月变换,折线图数据变换
@@ -221,16 +225,7 @@ export default {
       panelChartDatas:{},
       panelChartDataleid:{},
       panelChartDatayuanh:[],
-      tableData: [
-         {name: '王天风', card: '123456789112345631', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-         {name: '李铎', card: '123456789112345632', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-         {name: '冯毅发', card: '123456789112345632', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-         {name: '刘婷婷', card: '123456789112345633', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-         {name: '尹菲菲', card: '123456789112345635', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-         {name: '马鑫', card: '123456789112345636', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-         {name: '吴自力', card: '123456789112345637', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-         {name: '林琳', card: '123456789112345638', rphone: "14756055892", hphone: '14756055892', cjsj: '2022-08-08 10:23:56', cjdd: '中医院', shsj: '2022-08-08 19:23:56'},
-      ], //表格数据
+      tableData: [], //表格数据
       // 总条数
       total: 10,
       queryParams: {
@@ -241,7 +236,10 @@ export default {
       loading: false,
       deviceIpOptions:{},
       panelChartDatazhuzh:{},
-      nhye:false
+      nhye:false,
+      yuhse:[],
+      infoList:[],
+      gettime:''
     };
   },
   computed: {
@@ -271,12 +269,23 @@ export default {
    // 底部圆环
    // this.dbyhList()
    // 柱状图
-   // this.zhuzhList()
+   this.zhuzhList()
 
    //户籍列表
-   // this.lisdtwe()
+   this.lisdtwe()
+   this.getList()
+   // 获取当前时间
+   this.getCurrentTime()
   },
   methods: {
+    getList() {
+      // this.loading = true;
+      listInfo(this.queryParams).then(response => {
+        this.tableData = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
     handleSetLineChartData(type) {
       this.lineChartData = lineChartData[type];
     },
@@ -317,7 +326,7 @@ export default {
     // 圆环数据
     yuanhaun(val){
       treeselect(val).then(response => {
-        this.deviceIpOptions = response.data;
+        // this.deviceIpOptions = response.data;
         this.panelChartDatas = this.deviceIpOptions
       });
     },
@@ -331,9 +340,10 @@ export default {
    },
    // 户籍列表
    lisdtwe(){
+     this.yuhse = []
       listTsde().then(response => {
         this.deviceIpOptions = response.data;
-        this.panelChartDatas = this.deviceIpOptions
+        // this.panelChartDatas = this.deviceIpOptions
       });
    },
    // 折线图数据
@@ -361,7 +371,7 @@ export default {
    // 柱状图数据
    zhuzhList(){
      listzhuzh().then(response => {
-       this.panelChartDatazhuzh = response.data;
+       this.newlChartDatazhuzh = response.data;
        // this.panelChartDatas = this.deviceIpOptions
      });
    },
@@ -397,6 +407,25 @@ export default {
    twjrde(){
      this.$router.push({path: "/business/ucleic"});
    },
+   nlshe(){
+     // this.$router.push({path: "/user/yue"});
+   },
+   nlshefr(){
+     // this.$router.push({path: "/user/yue"});
+   },
+    getCurrentTime() {
+           //获取当前时间并打印
+           var _this = this;
+           console.log(3)
+         let yy = new Date().getFullYear();
+         let mm = new Date().getMonth()+1;
+         let dd = new Date().getDate();
+         let hh = new Date().getHours();
+         let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
+         let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
+         _this.gettime = yy+'-'+mm+'-'+dd+' '+hh+':'+mf+':'+ss;
+         console.log(_this.gettime)
+       }
 
   }
 };

+ 543 - 0
ruoyi-ui/src/views/key/batch/index.vue

@@ -0,0 +1,543 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :rules="rules" size="small" :inline="true" v-show="showSearch" label-width="80px">
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="身份证号" prop="idCard">
+            <el-input
+              v-model="queryParams.idCard"
+              placeholder="请输入身份证号码"
+              style="width: 108%;"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="开始时间" prop="startTime">
+            <el-date-picker clearable
+              v-model="queryParams.startTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对开始时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="结束时间" prop="endTime">
+            <el-date-picker clearable
+              v-model="queryParams.endTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对结束时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+
+
+        <!-- <el-col :span="8">
+          <el-form-item label="采集时间" prop="nucleicCollectTime">
+                      <el-date-picker clearable
+                        v-model="queryParams.nucleicCollectTime"
+                        type="datetime"
+                        value-format="yyyy-MM-dd HH:mm:ss"
+                        format="yyyy-MM-dd HH:mm:ss"
+                        style="width: 100%;"
+                        placeholder="请选择核酸采集时间">
+                      </el-date-picker>
+                    </el-form-item>
+
+        </el-col> -->
+        <!-- <el-col :span="8">
+          <el-form-item :label="'天' + '\u3000\u3000' + '数'" prop="detectionScope">
+            <el-input
+              v-model="queryParams.detectionScope"
+              placeholder="请输入天数"
+                min="0"
+               type="number"
+               @blur="nhksets"
+               style="width: 108%;"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col> -->
+
+        <el-col :span="24">
+          <el-col :span="8">
+            <el-form-item :label="'次' + '\u3000\u3000' + '数'" prop="detectionNumber">
+             <el-input
+               v-model="queryParams.detectionNumber"
+               placeholder="请输入次数"
+               style="width: 114%;"
+                 min="0"
+                type="number"
+                @blur="nhkse"
+                @keyup.enter.native="handleQuery"
+             />
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="8">
+             <el-form-item class="nkseydf">
+               <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuerys">搜索</el-button>
+               <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">对比</el-button>
+               <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+             </el-form-item>
+          </el-col>
+        </el-col>
+
+
+
+
+
+
+      </el-row>
+
+
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="18">
+        <div style="color: #343434; font-size: 20px;">截至 <span style="color: #00b385;">{{gettime}}</span> 止   共计 <span style="color: #00b385;">{{nskeia}}</span> 次核酸</div>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="importTemplate"
+        >下载模板</el-button>
+      </el-col>
+     <el-col :span="1.5">
+       <el-button
+         type="info"
+         plain
+         icon="el-icon-upload2"
+         size="mini"
+         @click="handleImport"
+         v-hasPermi="['system:info:import']"
+       >导入</el-button>
+     </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:info:export']"
+        >导出</el-button>
+      </el-col> -->
+      <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
+    </el-row>
+
+    <el-table v-loading="loading" v-if="mjue" :data="infoList" @selection-change="handleSelectionChange">
+      <el-table-column :fixed="rigs" label="姓名" align="center" prop="name"  width="110"/>
+      <el-table-column :fixed="rigs" label="身份证号码" align="center" prop="idCard" width="180"/>
+      <el-table-column label="联系号码" align="center" prop="phoneNum" width="110"/>
+      <el-table-column label="核酸采集时间" align="center" prop="nucleicCollectTime" width="157">
+        <template slot-scope="scope">
+          <span v-html="scope.row.nucleicCollectTime"></span>
+        </template>
+      </el-table-column>
+      <el-table-column label="核酸结果时间" align="center" prop="nucleicResultsTime" width="157">
+        <template slot-scope="scope">
+          <span v-html="scope.row.nucleicResultsTime"></span>
+        </template>
+      </el-table-column>
+      <el-table-column  label="采集地点"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.collectPlace"></span>
+          </template>
+      </el-table-column>
+      <el-table-column  label="采集结果"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.nucleicResults"></span>
+          </template>
+      </el-table-column>
+      <!-- <el-table-column label="职业类别" align="center" prop="jobStyle" width="137"/> -->
+      <!-- <el-table-column label="重点人群分类" align="center" prop="focusCrowdStyle" width="130"/> -->
+      <el-table-column label="检测频次(次/天)" align="center" prop="detectionFrequency" width="115"/>
+      <el-table-column label="比对开始时间" align="center" prop="startTime" width="157">
+        <template slot-scope="scope">
+          <span>{{ scope.row.startTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="比对结束时间" align="center" prop="endTime" width="157">
+        <template slot-scope="scope">
+          <span>{{ scope.row.endTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :fixed="rig" label="进度(已做核酸次数/频次)" align="center" prop="detectionProgress" width="165"/>
+      <el-table-column  :fixed="rig" label="是否异常" align="center" prop="detectionResult" >
+        <template slot-scope="scope">
+            <span :class="[scope.row.detectionResult == '正常' ? 'heade_codfr' : 'lndw']">{{ scope.row.detectionResult}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :fixed="rig" label="操作" align="center" class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-delete"
+              @click="handleDelete(scope.row)"
+              v-hasPermi="['system:dept:remove']"
+            >删除</el-button>
+          </template>
+        </el-table-column>
+    </el-table>
+    <div v-if="!mjue" style="text-align: center;">正在加载数据......</div>
+
+
+  </div>
+</template>
+
+<script>
+import { listInfo, getInfo, delInfo, addInfo, updateInfo,listInfohs } from "@/api/system/batch";
+import { getToken } from "@/utils/auth";
+export default {
+  dicts: ['occupational_category', 'classification_population','whether_abnormal'],
+  name: "Info",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 导入人员信息表格数据
+      infoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        startTime: null,
+        endTime: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        // startTime: [
+        //   { required: true, message: "开始时间不能为空", trigger: "blur" }
+        // ],
+        // endTime:[
+        //   { required: true, message: "结束时间不能为空", trigger: "blur" }
+        // ],
+        // detectionNumber:[
+        //   { required: true, message: "次数不能为空", trigger: "blur" }
+        // ],
+        // detectionScope:[
+        //   { required: true, message: "天数不能为空", trigger: "blur" }
+        // ],
+        // idCard:[
+        //   { required: true, message: "身份证不能为空", trigger: "blur" }
+        // ]
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+          detectionNumber:null,
+          detectionScope:null,
+          startTime: null,
+          endTime: null,
+          jobStyle:null,
+          focusCrowdStyle:null,
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/info/importData"
+      },
+      postOptions:[],
+      gettime:'',
+      nskeia:'',
+      mjue:true,
+      rig:'right',
+      rigs:'left',
+      tableMaxHeight:300,
+    };
+  },
+  created() {
+    // this.getList();
+    // this.getCurrentTime()
+    this.getLisths()
+    this.loading = false;
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
+  },
+  mounted() {
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
+  },
+  methods: {
+    /** 查询导入人员信息列表 */
+    getList() {
+      this.loading = true;
+      this.mjue = false
+      listInfo(this.queryParams).then(response => {
+        this.infoList = response.data;
+        this.mjue = true
+        // this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 查询总核酸次数 */
+    getLisths() {
+      // this.loading = true;
+      this.loading = true;
+      this.mjue = false
+      listInfohs(this.queryParams).then(response => {
+        this.infoList = response.rows;
+        this.mjue = true
+        // this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        name: null,
+        gender: null,
+        age: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        detectionNumber: null,
+        detectionScope: null,
+        deptName: null,
+        startTime: null,
+        endTime: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 对比按钮操作 */
+    handleQuery() {
+          this.queryParams.pageNum = 1;
+          this.getList();
+    },
+    // 搜索
+    handleQuerys(){
+          this.queryParams.pageNum = 1;
+          this.getLisths();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuerys();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加导入人员信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改导入人员信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateInfo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addInfo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除导入人员信息编号为"' + ids + '"的数据项?').then(function() {
+        return delInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/info/export', {
+        ...this.queryParams
+      }, `info_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "导入信息";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      window.open("https://yqfk.qs163.cn/moban/模板.xlsx")
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.$refs.upload.submit();
+        }
+      });
+    },
+    // 次数失去焦点事件
+    nhkse(value){
+     console.log(this.upload.detectionNumber)
+     if(this.upload.detectionNumber < 0){
+       this.upload.detectionNumber = 0
+     }
+    },
+    // 天数失去焦点事件
+    nhksets(){
+      if(this.upload.detectionScope < 0){
+        this.upload.detectionScope = 0
+      }
+    },
+    // 取消
+    nlmse(){
+      this.upload.open = false
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+    },
+    getCurrentTime() {
+           //获取当前时间并打印
+           var _this = this;
+           console.log(3)
+         let yy = new Date().getFullYear();
+         let mm = new Date().getMonth()+1;
+         let dd = new Date().getDate();
+         let hh = new Date().getHours();
+         let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
+         let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
+         _this.gettime = yy+'-'+mm+'-'+dd;
+         console.log(_this.gettime)
+       },
+       // 获取屏幕高度
+                 showFilterForm () {
+                       this.filterActive = !this.filterActive
+                       this.changeTableMaxHeight()
+                     },
+
+                     changeTableMaxHeight () {
+                       let height = document.body.offsetHeight // 网页可视区域高度
+                       // if (this.filterActive) {
+                       //   this.tableMaxHeight = height - 320
+                       // } else {
+                         this.tableMaxHeight = height - 380
+                       // }
+                       console.log(height)
+                     },
+  }
+};
+</script>
+<style type="text/css" lang="scss">
+.nhkiu{
+  .el-upload-dragger{
+    width: 560px !important;
+    margin-bottom: 20px;
+  }
+}
+.nkseydf{
+  .el-button--primary{
+    background-color: #00b385 !important;
+    border-color: #00b385 !important;
+  }
+}
+.lndw{
+  color: red;
+}
+.heade_codfr{
+  color: #00b385;
+}
+
+</style>

+ 532 - 0
ruoyi-ui/src/views/key/batchs/index.vue

@@ -0,0 +1,532 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :rules="rules" size="small" :inline="true" v-show="showSearch" label-width="80px">
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="身份证号" prop="idCard">
+            <el-input
+              v-model="queryParams.idCard"
+              placeholder="请输入身份证号码"
+              style="width: 108%;"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="开始时间" prop="startTime">
+            <el-date-picker clearable
+              v-model="queryParams.startTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对开始时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="结束时间" prop="endTime">
+            <el-date-picker clearable
+              v-model="queryParams.endTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对结束时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+
+
+        <!-- <el-col :span="8">
+          <el-form-item label="采集时间" prop="nucleicCollectTime">
+                      <el-date-picker clearable
+                        v-model="queryParams.nucleicCollectTime"
+                        type="datetime"
+                        value-format="yyyy-MM-dd HH:mm:ss"
+                        format="yyyy-MM-dd HH:mm:ss"
+                        style="width: 100%;"
+                        placeholder="请选择核酸采集时间">
+                      </el-date-picker>
+                    </el-form-item>
+
+        </el-col> -->
+        <!-- <el-col :span="8">
+          <el-form-item :label="'天' + '\u3000\u3000' + '数'" prop="detectionScope">
+            <el-input
+              v-model="queryParams.detectionScope"
+              placeholder="请输入天数"
+                min="0"
+               type="number"
+               @blur="nhksets"
+               style="width: 108%;"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col> -->
+
+        <el-col :span="24">
+          <el-col :span="8">
+            <el-form-item :label="'次' + '\u3000\u3000' + '数'" prop="detectionNumber">
+             <el-input
+               v-model="queryParams.detectionNumber"
+               placeholder="请输入次数"
+               style="width: 114%;"
+                 min="0"
+                type="number"
+                @blur="nhkse"
+                @keyup.enter.native="handleQuery"
+             />
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="8">
+             <el-form-item class="nkseydf">
+               <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuerys">搜索</el-button>
+               <!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">对比</el-button> -->
+               <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+             </el-form-item>
+          </el-col>
+        </el-col>
+
+
+
+
+
+
+      </el-row>
+
+
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="18">
+        <div style="color: #343434; font-size: 20px;">截至 <span style="color: #00b385;">{{gettime}}</span> 止   共计 <span style="color: #00b385;">{{nskeia}}</span> 次核酸</div>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="importTemplate"
+        >下载模板</el-button>
+      </el-col>
+     <el-col :span="1.5">
+       <el-button
+         type="info"
+         plain
+         icon="el-icon-upload2"
+         size="mini"
+         @click="handleImport"
+         v-hasPermi="['system:info:import']"
+       >导入</el-button>
+     </el-col> -->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:info:export']"
+        >导出</el-button>
+      </el-col>
+      <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
+    </el-row>
+
+    <el-table v-loading="loading" v-if="mjue" :data="infoList" @selection-change="handleSelectionChange">
+      <el-table-column :fixed="rigs" label="姓名" align="center" prop="name"  width="110"/>
+      <el-table-column :fixed="rigs" label="身份证号码" align="center" prop="idCard" width="180"/>
+      <el-table-column label="联系号码" align="center" prop="phoneNum" width="110"/>
+      <el-table-column label="核酸采集时间" align="center" prop="nucleicCollectTime" width="157">
+        <template slot-scope="scope">
+          <span v-html="scope.row.nucleicCollectTime"></span>
+        </template>
+      </el-table-column>
+      <el-table-column label="核酸结果时间" align="center" prop="nucleicResultsTime" width="157">
+        <template slot-scope="scope">
+          <span v-html="scope.row.nucleicResultsTime"></span>
+        </template>
+      </el-table-column>
+      <el-table-column  label="采集地点"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.collectPlace"></span>
+          </template>
+      </el-table-column>
+      <el-table-column  label="采集结果"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.nucleicResults"></span>
+          </template>
+      </el-table-column>
+      <!-- <el-table-column label="职业类别" align="center" prop="jobStyle" width="137"/> -->
+      <!-- <el-table-column label="重点人群分类" align="center" prop="focusCrowdStyle" width="130"/> -->
+      <el-table-column label="检测频次(次/天)" align="center" prop="detectionFrequency" width="115"/>
+      <el-table-column label="比对开始时间" align="center" prop="startTime" width="157">
+        <template slot-scope="scope">
+          <span>{{ scope.row.startTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="比对结束时间" align="center" prop="endTime" width="157">
+        <template slot-scope="scope">
+          <span>{{ scope.row.endTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :fixed="rig" label="进度(已做核酸次数/频次)" align="center" prop="detectionProgress" width="165"/>
+      <el-table-column  :fixed="rig" label="是否异常" align="center" prop="detectionResult" >
+        <template slot-scope="scope">
+            <span :class="[scope.row.detectionResult == '正常' ? 'heade_codfr' : 'lndw']">{{ scope.row.detectionResult}}</span>
+          </template>
+        </el-table-column>
+    </el-table>
+    <div v-if="!mjue" style="text-align: center;">正在加载数据......</div>
+
+
+  </div>
+</template>
+
+<script>
+import { listInfo, getInfo, delInfo, addInfo, updateInfo,listInfohs } from "@/api/system/batch";
+import { getToken } from "@/utils/auth";
+export default {
+  dicts: ['occupational_category', 'classification_population','whether_abnormal'],
+  name: "Info",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 导入人员信息表格数据
+      infoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        startTime: null,
+        endTime: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        // startTime: [
+        //   { required: true, message: "开始时间不能为空", trigger: "blur" }
+        // ],
+        // endTime:[
+        //   { required: true, message: "结束时间不能为空", trigger: "blur" }
+        // ],
+        // detectionNumber:[
+        //   { required: true, message: "次数不能为空", trigger: "blur" }
+        // ],
+        // detectionScope:[
+        //   { required: true, message: "天数不能为空", trigger: "blur" }
+        // ],
+        // idCard:[
+        //   { required: true, message: "身份证不能为空", trigger: "blur" }
+        // ]
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+          detectionNumber:null,
+          detectionScope:null,
+          startTime: null,
+          endTime: null,
+          jobStyle:null,
+          focusCrowdStyle:null,
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/info/importData"
+      },
+      postOptions:[],
+      gettime:'',
+      nskeia:'',
+      mjue:true,
+      rig:'right',
+      rigs:'left',
+      tableMaxHeight:300,
+    };
+  },
+  created() {
+    // this.getList();
+    // this.getCurrentTime()
+    this.getLisths()
+    this.loading = false;
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
+  },
+  mounted() {
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
+  },
+  methods: {
+    /** 查询导入人员信息列表 */
+    getList() {
+      this.loading = true;
+      this.mjue = false
+      listInfo(this.queryParams).then(response => {
+        this.infoList = response.data;
+        this.mjue = true
+        // this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 查询总核酸次数 */
+    getLisths() {
+      // this.loading = true;
+      this.loading = true;
+      this.mjue = false
+      listInfohs(this.queryParams).then(response => {
+        this.infoList = response.rows;
+        this.mjue = true
+        // this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        name: null,
+        gender: null,
+        age: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        detectionNumber: null,
+        detectionScope: null,
+        deptName: null,
+        startTime: null,
+        endTime: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 对比按钮操作 */
+    handleQuery() {
+          this.queryParams.pageNum = 1;
+          this.getList();
+    },
+    // 搜索
+    handleQuerys(){
+          this.queryParams.pageNum = 1;
+          this.getLisths();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuerys();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加导入人员信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改导入人员信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateInfo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addInfo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除导入人员信息编号为"' + ids + '"的数据项?').then(function() {
+        return delInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/info/export', {
+        ...this.queryParams
+      }, `info_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "导入信息";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      window.open("https://yqfk.qs163.cn/moban/模板.xlsx")
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.$refs.upload.submit();
+        }
+      });
+    },
+    // 次数失去焦点事件
+    nhkse(value){
+     console.log(this.upload.detectionNumber)
+     if(this.upload.detectionNumber < 0){
+       this.upload.detectionNumber = 0
+     }
+    },
+    // 天数失去焦点事件
+    nhksets(){
+      if(this.upload.detectionScope < 0){
+        this.upload.detectionScope = 0
+      }
+    },
+    // 取消
+    nlmse(){
+      this.upload.open = false
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+    },
+    getCurrentTime() {
+           //获取当前时间并打印
+           var _this = this;
+           console.log(3)
+         let yy = new Date().getFullYear();
+         let mm = new Date().getMonth()+1;
+         let dd = new Date().getDate();
+         let hh = new Date().getHours();
+         let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
+         let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
+         _this.gettime = yy+'-'+mm+'-'+dd;
+         console.log(_this.gettime)
+       },
+       // 获取屏幕高度
+                 showFilterForm () {
+                       this.filterActive = !this.filterActive
+                       this.changeTableMaxHeight()
+                     },
+
+                     changeTableMaxHeight () {
+                       let height = document.body.offsetHeight // 网页可视区域高度
+                       // if (this.filterActive) {
+                       //   this.tableMaxHeight = height - 320
+                       // } else {
+                         this.tableMaxHeight = height - 380
+                       // }
+                       console.log(height)
+                     },
+  }
+};
+</script>
+<style type="text/css" lang="scss">
+.nhkiu{
+  .el-upload-dragger{
+    width: 560px !important;
+    margin-bottom: 20px;
+  }
+}
+.nkseydf{
+  .el-button--primary{
+    background-color: #00b385 !important;
+    border-color: #00b385 !important;
+  }
+}
+.lndw{
+  color: red;
+}
+.heade_codfr{
+  color: #00b385;
+}
+
+</style>

+ 216 - 148
ruoyi-ui/src/views/key/groups/index.vue

@@ -14,17 +14,18 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <el-form-item label="检测频次" prop="detectionFrequency">
-            <el-input
-              v-model="queryParams.detectionFrequency"
-              placeholder="请输入检测频次(汉字拼接后)"
-              clearable
-              style="width: 108%;"
-              @keyup.enter.native="handleQuery"
-            />
-          </el-form-item>
+          <el-form-item label="人群分类" prop="focusCrowdStyle">
+            <el-select clearable style="width: 108%;" filterable v-model="queryParams.focusCrowdStyle"  placeholder="请选择人群分类">
+              <el-option
+                v-for="dict in dict.type.classification_population"
+                :key="dict.label"
+                :label="dict.label"
+                :value="dict.label"
+              ></el-option>
+            </el-select>
+            </el-form-item>
         </el-col>
-        <el-col :span="8">
+        <!-- <el-col :span="8">
           <el-form-item label="采集时间" prop="nucleicCollectTime">
                       <el-date-picker clearable
                         v-model="queryParams.nucleicCollectTime"
@@ -36,6 +37,18 @@
                       </el-date-picker>
                     </el-form-item>
 
+        </el-col> -->
+        <el-col :span="8">
+          <el-form-item label="职业类别" prop="jobStyle">
+            <el-select clearable style="width: 108%;" filterable v-model="queryParams.jobStyle"  placeholder="请选择职业类别">
+              <el-option
+                v-for="dict in dict.type.occupational_category "
+                :key="dict.label"
+                :label="dict.label"
+                :value="dict.label"
+              ></el-option>
+            </el-select>
+            </el-form-item>
         </el-col>
 
         <el-col :span="24">
@@ -50,6 +63,18 @@
               />
             </el-form-item>
           </el-col>
+          <el-col :span="8">
+            <el-form-item label="开始时间" prop="startTime">
+              <el-date-picker clearable
+                v-model="queryParams.startTime"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                format="yyyy-MM-dd HH:mm:ss"
+                style="width: 100%;"
+                placeholder="请选择比对开始时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
           <el-col :span="8">
             <el-form-item label="采集地点" prop="collectPlace">
               <el-input
@@ -61,19 +86,6 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="结果时间" prop="nucleicResultsTime">
-              <el-date-picker clearable
-                v-model="queryParams.nucleicResultsTime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                format="yyyy-MM-dd HH:mm:ss"
-                style="width: 100%;"
-                placeholder="请选择核酸结果时间">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-
         </el-col>
         <el-col :span="8">
           <el-form-item label="联系号码" prop="phoneNum">
@@ -87,18 +99,7 @@
           </el-form-item>
 
         </el-col>
-        <el-col :span="8">
-          <el-form-item label="开始时间" prop="startTime">
-            <el-date-picker clearable
-              v-model="queryParams.startTime"
-              type="datetime"
-              value-format="yyyy-MM-dd HH:mm:ss"
-              format="yyyy-MM-dd HH:mm:ss"
-              style="width: 100%;"
-              placeholder="请选择比对开始时间">
-            </el-date-picker>
-          </el-form-item>
-        </el-col>
+
         <el-col :span="8">
           <el-form-item label="结束时间" prop="endTime">
             <el-date-picker clearable
@@ -111,19 +112,43 @@
             </el-date-picker>
           </el-form-item>
         </el-col>
+        <el-col :span="8">
+          <el-form-item label="是否正常" prop="detectionResult">
+            <el-select clearable style="width: 108%;" filterable v-model="queryParams.detectionResult"  placeholder="请选择是否正常">
+              <el-option
+                v-for="dict in dict.type.whether_abnormal"
+                :key="dict.label"
+                :label="dict.label"
+                :value="dict.label"
+              ></el-option>
+            </el-select>
+            </el-form-item>
+        </el-col>
+        <el-col :span="8">
+           <el-form-item class="nkseydf">
+             <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+           </el-form-item>
+        </el-col>
 
 
       </el-row>
 
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
+
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="20">
-        <div style="color: #343434; font-size: 20px;">截至 <span style="color: #00b385;">2022年08月14日</span> 止   共计 <span style="color: #00b385;">33256</span> 次核酸</div>
+      <el-col :span="18">
+        <div style="color: #343434; font-size: 20px;">截至 <span style="color: #00b385;">{{gettime}}</span> 止   共计 <span style="color: #00b385;">{{nskeia}}</span> 次核酸</div>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="importTemplate"
+        >下载模板</el-button>
       </el-col>
      <el-col :span="1.5">
        <el-button
@@ -148,36 +173,60 @@
       <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
     </el-row>
 
-    <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
-      <el-table-column label="姓名" align="center" prop="name"  width="110"/>
-      <el-table-column label="性别" align="center" prop="gender" />
-      <el-table-column label="年龄" align="center" prop="age" />
-      <el-table-column label="身份证号码" align="center" prop="idCard" width="180"/>
+    <el-table  :height="tableMaxHeight" v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
+      <el-table-column :fixed="rigs" label="姓名" align="center" prop="name"  width="110"/>
+      <el-table-column :fixed="rigs" label="身份证号码" align="center" prop="idCard" width="180"/>
       <el-table-column label="联系号码" align="center" prop="phoneNum" width="110"/>
-      <el-table-column label="核酸采集时间" align="center" prop="nucleicCollectTime" width="102">
+      <el-table-column label="核酸采集时间" align="center" prop="nucleicCollectTime" width="157">
         <template slot-scope="scope">
-          <span>{{ scope.row.nucleicCollectTime }}</span>
+          <span v-html="scope.row.nucleicCollectTime"></span>
         </template>
       </el-table-column>
-      <el-table-column label="核酸结果时间" align="center" prop="nucleicResultsTime" width="102">
+      <el-table-column label="核酸结果时间" align="center" prop="nucleicResultsTime" width="157">
         <template slot-scope="scope">
-          <span>{{ scope.row.nucleicResultsTime}}</span>
+          <span v-html="scope.row.nucleicResultsTime"></span>
         </template>
       </el-table-column>
-      <el-table-column label="职业类别" align="center" prop="jobStyle" />
+      <el-table-column  label="采集地点"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.collectPlace"></span>
+          </template>
+      </el-table-column>
+      <el-table-column  label="采集结果"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.nucleicResults"></span>
+          </template>
+      </el-table-column>
+      <el-table-column label="职业类别" align="center" prop="jobStyle" width="137"/>
       <el-table-column label="重点人群分类" align="center" prop="focusCrowdStyle" width="130"/>
-      <el-table-column label="检测频次" align="center" prop="detectionFrequency" />
-      <el-table-column label="比对开始时间" align="center" prop="startTime" width="102">
+      <el-table-column label="检测频次(次/天)" align="center" prop="detectionFrequency" width="115"/>
+      <el-table-column label="比对开始时间" align="center" prop="startTime" width="157">
         <template slot-scope="scope">
           <span>{{ scope.row.startTime}}</span>
         </template>
       </el-table-column>
-      <el-table-column label="比对结束时间" align="center" prop="endTime" width="102">
+      <el-table-column label="比对结束时间" align="center" prop="endTime" width="157">
         <template slot-scope="scope">
           <span>{{ scope.row.endTime}}</span>
         </template>
       </el-table-column>
-
+      <el-table-column :fixed="rig" label="进度(已做核酸次数/频次)" align="center" prop="detectionProgress" width="165"/>
+      <el-table-column :fixed="rig" label="是否异常" align="center" prop="detectionResult" >
+        <template slot-scope="scope">
+            <span :class="[scope.row.detectionResult == '正常' ? 'heade_codfr' : 'lndw']">{{ scope.row.detectionResult}}</span>
+          </template>
+      </el-table-column>
+      <el-table-column :fixed="rig" label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:dept:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -188,52 +237,6 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改导入人员信息对话框 -->
-    <!-- <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="姓名" prop="name">
-          <el-input v-model="form.name" placeholder="请输入姓名" />
-        </el-form-item>
-        <el-form-item label="性别" prop="gender">
-          <el-input v-model="form.gender" placeholder="请输入性别" />
-        </el-form-item>
-        <el-form-item label="年龄" prop="age">
-          <el-input v-model="form.age" placeholder="请输入年龄" />
-        </el-form-item>
-        <el-form-item label="身份证号码" prop="idCard">
-          <el-input v-model="form.idCard" placeholder="请输入身份证号码" />
-        </el-form-item>
-        <el-form-item label="联系号码" prop="phoneNum">
-          <el-input v-model="form.phoneNum" placeholder="请输入联系号码" />
-        </el-form-item>
-        <el-form-item label="检测频次" prop="detectionNumber">
-          <el-input v-model="form.detectionNumber" placeholder="请输入检测频次" />
-        </el-form-item>
-        <el-form-item label="检测频次" prop="detectionScope">
-          <el-input v-model="form.detectionScope" placeholder="请输入检测频次" />
-        </el-form-item>
-        <el-form-item label="比对开始时间" prop="startTime">
-          <el-date-picker clearable
-            v-model="form.startTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择比对开始时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="比对结束时间" prop="endTime">
-          <el-date-picker clearable
-            v-model="form.endTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="请选择比对结束时间">
-          </el-date-picker>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog> -->
 
 
     <!-- 用户导入对话框 -->
@@ -284,31 +287,7 @@
               </el-date-picker>
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item :label="'次' + '\u3000\u3000' + '数'" prop="detectionNumber">
-               <el-input
-                 v-model="upload.detectionNumber"
-                 placeholder="请输入次数"
-                   min="0"
-                  type="number"
-                  @blur="nhkse"
-               />
-                </el-form-item>
 
-
-            </el-col>
-            <el-col :span="12">
-              <el-form-item :label="'天' + '\u3000\u3000' + '数'" prop="detectionScope">
-                <el-input
-                  v-model="upload.detectionScope"
-                  placeholder="请输入天数"
-                    min="0"
-                   type="number"
-                   @blur="nhksets"
-                  @keyup.enter.native="handleQuery"
-                />
-                </el-form-item>
-            </el-col>
             <el-col :span="12">
               <el-form-item label="职业类别" prop="jobStyle">
                 <el-select filterable v-model="upload.jobStyle"  placeholder="请选择职业类别">
@@ -333,10 +312,34 @@
                 </el-select>
                 </el-form-item>
             </el-col>
+            <el-col :span="24">
+              <el-form-item :label="'次' + '\u3000\u3000' + '数'" prop="detectionNumber">
+               <el-input
+                 v-model="upload.detectionNumber"
+                 placeholder="请输入次数"
+                   min="0"
+                  type="number"
+                  @blur="nhkse"
+               />
+                </el-form-item>
+            </el-col>
+            <!-- <el-col :span="12">
+              <el-form-item :label="'天' + '\u3000\u3000' + '数'" prop="detectionScope">
+                <el-input
+                  v-model="upload.detectionScope"
+                  placeholder="请输入天数"
+                    min="0"
+                   type="number"
+                   @blur="nhksets"
+                  @keyup.enter.native="handleQuery"
+                />
+                </el-form-item>
+            </el-col> -->
             </el-form>
           </el-row>
           <span>仅允许导入xls、xlsx格式文件。</span>
           <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline; color: #00b385;" @click="importTemplate">下载模板</el-link>
+          <div v-if="nlsmeh" style="font-size:16px;vertical-align: baseline; color: red;margin-top: 10px;">正在导入中,请稍后,请勿进行操作......</div>
         </div>
       </el-upload>
       <div slot="footer" class="dialog-footer">
@@ -348,10 +351,10 @@
 </template>
 
 <script>
-import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/system/info";
+import { listInfo, getInfo, delInfo, addInfo, updateInfo,listInfohs } from "@/api/system/info";
 import { getToken } from "@/utils/auth";
 export default {
-  dicts: ['occupational_category', 'classification_population'],
+  dicts: ['occupational_category', 'classification_population','whether_abnormal'],
   name: "Info",
   data() {
     return {
@@ -401,9 +404,6 @@ export default {
         detectionNumber:[
           { required: true, message: "次数不能为空", trigger: "blur" }
         ],
-        detectionScope:[
-          { required: true, message: "天数不能为空", trigger: "blur" }
-        ],
         jobStyle:[
           { required: true, message: "职业类别不能为空", trigger: "blur" }
         ],
@@ -432,11 +432,29 @@ export default {
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/system/info/importData"
       },
-      postOptions:[]
+      postOptions:[],
+      gettime:'',
+      nskeia:'',
+      rig:'right',
+      rigs:'left',
+      tableMaxHeight:300,
+      nlsmeh:false
     };
   },
   created() {
     this.getList();
+    this.getCurrentTime()
+    this.getLisths()
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
+  },
+  mounted() {
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
   },
   methods: {
     /** 查询导入人员信息列表 */
@@ -448,6 +466,15 @@ export default {
         this.loading = false;
       });
     },
+    /** 查询总核酸次数 */
+    getLisths() {
+      // this.loading = true;
+      listInfohs().then(response => {
+        this.nskeia = response.data;
+        // this.total = response.total;
+        // this.loading = false;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -535,7 +562,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids;
-      this.$modal.confirm('是否确认删除导入人员信息编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除信息').then(function() {
         return delInfo(ids);
       }).then(() => {
         this.getList();
@@ -550,30 +577,34 @@ export default {
     },
     /** 导入按钮操作 */
     handleImport() {
-      this.upload.title = "用户导入";
+      this.upload.title = "导入信息";
       this.upload.open = true;
     },
     /** 下载模板操作 */
     importTemplate() {
-      // this.download('system/user/importTemplate', {
-      // }, `user_template_${new Date().getTime()}.xlsx`)
+      window.open("https://yqfk.qs163.cn/muban/muban.xlsx")
     },
     // 文件上传中处理
     handleFileUploadProgress(event, file, fileList) {
       this.upload.isUploading = true;
+      this.nlsmeh = true
     },
     // 文件上传成功处理
     handleFileSuccess(response, file, fileList) {
-      this.upload.open = false;
-      this.upload.isUploading = false;
-      this.$refs.upload.clearFiles();
-      this.upload.detectionNumber = null
-      this.upload.startTime=null
-      this.upload.endTime= null
-      this.upload.jobStyle= null
-      this.upload.focusCrowdStyle= null
+      // if(response.code == 200){
+        this.nlsmeh = false
+        this.upload.open = false;
+        this.upload.isUploading = false;
+        this.$refs.upload.clearFiles();
+        this.upload.detectionNumber = null
+        this.upload.startTime=null
+        this.upload.endTime= null
+        this.upload.jobStyle= null
+        this.upload.focusCrowdStyle= null
+
+      // }
       this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
-      this.getList();
+       this.getList();
     },
     // 提交上传文件
     submitFileForm() {
@@ -604,7 +635,35 @@ export default {
       this.upload.endTime= null
       this.upload.jobStyle= null
       this.upload.focusCrowdStyle= null
-    }
+    },
+    getCurrentTime() {
+           //获取当前时间并打印
+           var _this = this;
+           console.log(3)
+         let yy = new Date().getFullYear();
+         let mm = new Date().getMonth()+1;
+         let dd = new Date().getDate();
+         let hh = new Date().getHours();
+         let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
+         let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
+         _this.gettime = yy+'-'+mm+'-'+dd;
+         console.log(_this.gettime)
+       },
+  // 获取屏幕高度
+            showFilterForm () {
+                  this.filterActive = !this.filterActive
+                  this.changeTableMaxHeight()
+                },
+
+                changeTableMaxHeight () {
+                  let height = document.body.offsetHeight // 网页可视区域高度
+                  // if (this.filterActive) {
+                  //   this.tableMaxHeight = height - 320
+                  // } else {
+                    this.tableMaxHeight = height - 380
+                  // }
+                  console.log(height)
+                },
   }
 };
 </script>
@@ -615,8 +674,17 @@ export default {
     margin-bottom: 20px;
   }
 }
-.el-button--primary{
-  background-color: #00b385 !important;
-  border-color: #00b385 !important;
+.nkseydf{
+  .el-button--primary{
+    background-color: #00b385 !important;
+    border-color: #00b385 !important;
+  }
 }
+.lndw{
+  color: red;
+}
+.heade_codfr{
+  color: #00b385;
+}
+
 </style>

+ 532 - 0
ruoyi-ui/src/views/key/ryxx/index.vue

@@ -0,0 +1,532 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :rules="rules" size="small" :inline="true" v-show="showSearch" label-width="80px">
+      <el-row>
+        <el-col :span="8">  
+          <el-form-item label="身份证号" prop="idCard">
+            <el-input
+              v-model="queryParams.idCard"
+              placeholder="请输入身份证号码"
+              style="width: 108%;"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="开始时间" prop="startTime">
+            <el-date-picker clearable
+              v-model="queryParams.startTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对开始时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="结束时间" prop="endTime">
+            <el-date-picker clearable
+              v-model="queryParams.endTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对结束时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+
+
+        <!-- <el-col :span="8">
+          <el-form-item label="采集时间" prop="nucleicCollectTime">
+                      <el-date-picker clearable
+                        v-model="queryParams.nucleicCollectTime"
+                        type="datetime"
+                        value-format="yyyy-MM-dd HH:mm:ss"
+                        format="yyyy-MM-dd HH:mm:ss"
+                        style="width: 100%;"
+                        placeholder="请选择核酸采集时间">
+                      </el-date-picker>
+                    </el-form-item>
+
+        </el-col> -->
+        <!-- <el-col :span="8">
+          <el-form-item :label="'天' + '\u3000\u3000' + '数'" prop="detectionScope">
+            <el-input
+              v-model="queryParams.detectionScope"
+              placeholder="请输入天数"
+                min="0"
+               type="number"
+               @blur="nhksets"
+               style="width: 108%;"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col> -->
+
+        <el-col :span="24">
+          <el-col :span="8">
+            <el-form-item :label="'次' + '\u3000\u3000' + '数'" prop="detectionNumber">
+             <el-input
+               v-model="queryParams.detectionNumber"
+               placeholder="请输入次数"
+               style="width: 114%;"
+                 min="0"
+                type="number"
+                @blur="nhkse"
+                @keyup.enter.native="handleQuery"
+             />
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="8">
+             <el-form-item class="nkseydf">
+               <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuerys">搜索</el-button>
+               <!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">对比</el-button> -->
+               <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+             </el-form-item>
+          </el-col>
+        </el-col>
+
+
+
+
+
+
+      </el-row>
+
+
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="18">
+        <div style="color: #343434; font-size: 20px;">截至 <span style="color: #00b385;">{{gettime}}</span> 止   共计 <span style="color: #00b385;">{{nskeia}}</span> 次核酸</div>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="importTemplate"
+        >下载模板</el-button>
+      </el-col>
+     <el-col :span="1.5">
+       <el-button
+         type="info"
+         plain
+         icon="el-icon-upload2"
+         size="mini"
+         @click="handleImport"
+         v-hasPermi="['system:info:import']"
+       >导入</el-button>
+     </el-col> -->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:info:export']"
+        >导出</el-button>
+      </el-col>
+      <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
+    </el-row>
+
+    <el-table v-loading="loading" v-if="mjue" :data="infoList" @selection-change="handleSelectionChange">
+      <el-table-column :fixed="rigs" label="姓名" align="center" prop="name"  width="110"/>
+      <el-table-column :fixed="rigs" label="身份证号码" align="center" prop="idCard" width="180"/>
+      <el-table-column label="联系号码" align="center" prop="phoneNum" width="110"/>
+      <el-table-column label="核酸采集时间" align="center" prop="nucleicCollectTime" width="157">
+        <template slot-scope="scope">
+          <span v-html="scope.row.nucleicCollectTime"></span>
+        </template>
+      </el-table-column>
+      <el-table-column label="核酸结果时间" align="center" prop="nucleicResultsTime" width="157">
+        <template slot-scope="scope">
+          <span v-html="scope.row.nucleicResultsTime"></span>
+        </template>
+      </el-table-column>
+      <el-table-column  label="采集地点"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.collectPlace"></span>
+          </template>
+      </el-table-column>
+      <el-table-column  label="采集结果"  align="center" width="117">
+        <template slot-scope="scope">
+            <span v-html="scope.row.nucleicResults"></span>
+          </template>
+      </el-table-column>
+      <!-- <el-table-column label="职业类别" align="center" prop="jobStyle" width="137"/> -->
+      <!-- <el-table-column label="重点人群分类" align="center" prop="focusCrowdStyle" width="130"/> -->
+      <el-table-column label="检测频次(次/天)" align="center" prop="detectionFrequency" width="115"/>
+      <el-table-column label="比对开始时间" align="center" prop="startTime" width="157">
+        <template slot-scope="scope">
+          <span>{{ scope.row.startTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="比对结束时间" align="center" prop="endTime" width="157">
+        <template slot-scope="scope">
+          <span>{{ scope.row.endTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column :fixed="rig" label="进度(已做核酸次数/频次)" align="center" prop="detectionProgress" width="165"/>
+      <el-table-column  :fixed="rig" label="是否异常" align="center" prop="detectionResult" >
+        <template slot-scope="scope">
+            <span :class="[scope.row.detectionResult == '正常' ? 'heade_codfr' : 'lndw']">{{ scope.row.detectionResult}}</span>
+          </template>
+        </el-table-column>
+    </el-table>
+    <div v-if="!mjue" style="text-align: center;">正在加载数据......</div>
+
+
+  </div>
+</template>
+
+<script>
+import { listInfo, getInfo, delInfo, addInfo, updateInfo,listInfohs } from "@/api/system/batch";
+import { getToken } from "@/utils/auth";
+export default {
+  dicts: ['occupational_category', 'classification_population','whether_abnormal'],
+  name: "Info",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 导入人员信息表格数据
+      infoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        startTime: null,
+        endTime: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        // startTime: [
+        //   { required: true, message: "开始时间不能为空", trigger: "blur" }
+        // ],
+        // endTime:[
+        //   { required: true, message: "结束时间不能为空", trigger: "blur" }
+        // ],
+        // detectionNumber:[
+        //   { required: true, message: "次数不能为空", trigger: "blur" }
+        // ],
+        // detectionScope:[
+        //   { required: true, message: "天数不能为空", trigger: "blur" }
+        // ],
+        // idCard:[
+        //   { required: true, message: "身份证不能为空", trigger: "blur" }
+        // ]
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+          detectionNumber:null,
+          detectionScope:null,
+          startTime: null,
+          endTime: null,
+          jobStyle:null,
+          focusCrowdStyle:null,
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/info/importData"
+      },
+      postOptions:[],
+      gettime:'',
+      nskeia:'',
+      mjue:true,
+      rig:'right',
+      rigs:'left',
+      tableMaxHeight:300,
+    };
+  },
+  created() {
+    // this.getList();
+    // this.getCurrentTime()
+    this.getLisths()
+    this.loading = false;
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
+  },
+  mounted() {
+    window.onresize = () => {
+                    this.changeTableMaxHeight()
+                  }
+                  this.changeTableMaxHeight()
+  },
+  methods: {
+    /** 查询导入人员信息列表 */
+    getList() {
+      this.loading = true;
+      this.mjue = false
+      listInfo(this.queryParams).then(response => {
+        this.infoList = response.data;
+        this.mjue = true
+        // this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 查询总核酸次数 */
+    getLisths() {
+      // this.loading = true;
+      this.loading = true;
+      this.mjue = false
+      listInfohs(this.queryParams).then(response => {
+        this.infoList = response.rows;
+        this.mjue = true
+        // this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        name: null,
+        gender: null,
+        age: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        detectionNumber: null,
+        detectionScope: null,
+        deptName: null,
+        startTime: null,
+        endTime: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 对比按钮操作 */
+    handleQuery() {
+          this.queryParams.pageNum = 1;
+          this.getList();
+    },
+    // 搜索
+    handleQuerys(){
+          this.queryParams.pageNum = 1;
+          this.getLisths();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuerys();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加导入人员信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改导入人员信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateInfo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addInfo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除导入人员信息编号为"' + ids + '"的数据项?').then(function() {
+        return delInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/info/export', {
+        ...this.queryParams
+      }, `info_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "导入信息";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      window.open("https://yqfk.qs163.cn/moban/模板.xlsx")
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.$refs.upload.submit();
+        }
+      });
+    },
+    // 次数失去焦点事件
+    nhkse(value){
+     console.log(this.upload.detectionNumber)
+     if(this.upload.detectionNumber < 0){
+       this.upload.detectionNumber = 0
+     }
+    },
+    // 天数失去焦点事件
+    nhksets(){
+      if(this.upload.detectionScope < 0){
+        this.upload.detectionScope = 0
+      }
+    },
+    // 取消
+    nlmse(){
+      this.upload.open = false
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+    },
+    getCurrentTime() {
+           //获取当前时间并打印
+           var _this = this;
+           console.log(3)
+         let yy = new Date().getFullYear();
+         let mm = new Date().getMonth()+1;
+         let dd = new Date().getDate();
+         let hh = new Date().getHours();
+         let mf = new Date().getMinutes()<10 ? '0'+new Date().getMinutes() : new Date().getMinutes();
+         let ss = new Date().getSeconds()<10 ? '0'+new Date().getSeconds() : new Date().getSeconds();
+         _this.gettime = yy+'-'+mm+'-'+dd;
+         console.log(_this.gettime)
+       },
+       // 获取屏幕高度
+                 showFilterForm () {
+                       this.filterActive = !this.filterActive
+                       this.changeTableMaxHeight()
+                     },
+
+                     changeTableMaxHeight () {
+                       let height = document.body.offsetHeight // 网页可视区域高度
+                       // if (this.filterActive) {
+                       //   this.tableMaxHeight = height - 320
+                       // } else {
+                         this.tableMaxHeight = height - 380
+                       // }
+                       console.log(height)
+                     },
+  }
+};
+</script>
+<style type="text/css" lang="scss">
+.nhkiu{
+  .el-upload-dragger{
+    width: 560px !important;
+    margin-bottom: 20px;
+  }
+}
+.nkseydf{
+  .el-button--primary{
+    background-color: #00b385 !important;
+    border-color: #00b385 !important;
+  }
+}
+.lndw{
+  color: red;
+}
+.heade_codfr{
+  color: #00b385;
+}
+
+</style>

+ 4 - 4
ruoyi-ui/src/views/login.vue

@@ -56,7 +56,7 @@
     </el-form>
     <!--  底部  -->
     <div class="el-login-footer">
-      <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
+      <span></span>
     </div>
   </div>
 </template>
@@ -72,8 +72,8 @@ export default {
     return {
       codeUrl: "",
       loginForm: {
-        username: "admin",
-        password: "admin123",
+        username: "",
+        password: "",
         rememberMe: false,
         code: "",
         uuid: ""
@@ -89,7 +89,7 @@ export default {
       },
       loading: false,
       // 验证码开关
-      captchaEnabled: true,
+      captchaEnabled: false,
       // 注册开关
       register: false,
       redirect: undefined

+ 1 - 1
ruoyi-ui/src/views/register.vue

@@ -61,7 +61,7 @@
     </el-form>
     <!--  底部  -->
     <div class="el-register-footer">
-      <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
+      <span></span>
     </div>
   </div>
 </template>

+ 638 - 0
ruoyi-ui/src/views/system/user/yue/index.vue

@@ -0,0 +1,638 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="身份证号" prop="idCard">
+            <el-input
+              v-model="queryParams.idCard"
+              placeholder="请输入身份证号码"
+              style="width: 100%;"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="人群分类" prop="focusCrowdStyle">
+            <el-select style="width: 108%;" filterable v-model="queryParams.focusCrowdStyle"  placeholder="请选择人群分类">
+              <el-option
+                v-for="dict in dict.type.classification_population"
+                :key="dict.label"
+                :label="dict.label"
+                :value="dict.label"
+              ></el-option>
+            </el-select>
+            </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="采集时间" prop="nucleicCollectTime">
+                      <el-date-picker clearable
+                        v-model="queryParams.nucleicCollectTime"
+                        type="datetime"
+                        value-format="yyyy-MM-dd HH:mm:ss"
+                        format="yyyy-MM-dd HH:mm:ss"
+                        style="width: 100%;"
+                        placeholder="请选择核酸采集时间">
+                      </el-date-picker>
+                    </el-form-item>
+
+        </el-col>
+
+        <el-col :span="24">
+          <el-col :span="8">
+            <el-form-item :label="'姓' + '\u3000\u3000' + '名'" prop="name">
+              <el-input
+                v-model="queryParams.name"
+                placeholder="请输入姓名"
+                style="width: 100%;"
+                clearable
+                @keyup.enter.native="handleQuery"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="采集地点" prop="collectPlace">
+              <el-input
+                v-model="queryParams.collectPlace"
+                placeholder="请输入采集地点"
+                clearable
+                style="width: 108%;"
+                @keyup.enter.native="handleQuery"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="结果时间" prop="nucleicResultsTime">
+              <el-date-picker clearable
+                v-model="queryParams.nucleicResultsTime"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                format="yyyy-MM-dd HH:mm:ss"
+                style="width: 100%;"
+                placeholder="请选择核酸结果时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="联系号码" prop="phoneNum">
+            <el-input
+              v-model="queryParams.phoneNum"
+              placeholder="请输入联系号码"
+              style="width: 100%;"
+              clearable
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="开始时间" prop="startTime">
+            <el-date-picker clearable
+              v-model="queryParams.startTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对开始时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="结束时间" prop="endTime">
+            <el-date-picker clearable
+              v-model="queryParams.endTime"
+              type="datetime"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;"
+              placeholder="请选择比对结束时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-col :span="8">
+            <el-form-item label="职业类别" prop="jobStyle">
+              <el-select filterable v-model="queryParams.jobStyle"  placeholder="请选择职业类别">
+                <el-option
+                  v-for="dict in dict.type.occupational_category "
+                  :key="dict.label"
+                  :label="dict.label"
+                  :value="dict.label"
+                ></el-option>
+              </el-select>
+              </el-form-item>
+          </el-col>
+           <el-form-item>
+             <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+           </el-form-item>
+        </el-col>
+
+
+      </el-row>
+
+      
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="20">
+        <div style="color: #343434; font-size: 20px;">截至 <span style="color: #00b385;">2022年08月14日</span> 止   共计 <span style="color: #00b385;">33256</span> 次核酸</div>
+      </el-col>
+     <el-col :span="1.5">
+       <el-button
+         type="info"
+         plain
+         icon="el-icon-upload2"
+         size="mini"
+         @click="handleImport"
+         v-hasPermi="['system:info:import']"
+       >导入</el-button>
+     </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:info:export']"
+        >导出</el-button>
+      </el-col>
+      <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
+    </el-row>
+
+    <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
+      <el-table-column label="姓名" align="center" prop="name"  width="110"/>
+      <el-table-column label="性别" align="center" prop="gender" />
+      <el-table-column label="年龄" align="center" prop="age" />
+      <el-table-column label="身份证号码" align="center" prop="idCard" width="180"/>
+      <el-table-column label="联系号码" align="center" prop="phoneNum" width="110"/>
+      <el-table-column label="核酸采集时间" align="center" prop="nucleicCollectTime" width="102">
+        <template slot-scope="scope">
+          <span>{{ scope.row.nucleicCollectTime }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="核酸结果时间" align="center" prop="nucleicResultsTime" width="102">
+        <template slot-scope="scope">
+          <span>{{ scope.row.nucleicResultsTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="职业类别" align="center" prop="jobStyle" />
+      <el-table-column label="重点人群分类" align="center" prop="focusCrowdStyle" width="130"/>
+      <el-table-column label="检测频次" align="center" prop="detectionFrequency" />
+      <el-table-column label="比对开始时间" align="center" prop="startTime" width="102">
+        <template slot-scope="scope">
+          <span>{{ scope.row.startTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="比对结束时间" align="center" prop="endTime" width="102">
+        <template slot-scope="scope">
+          <span>{{ scope.row.endTime}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="是否异常" align="center" prop="detectionFrequency" />
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改导入人员信息对话框 -->
+    <!-- <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="姓名" prop="name">
+          <el-input v-model="form.name" placeholder="请输入姓名" />
+        </el-form-item>
+        <el-form-item label="性别" prop="gender">
+          <el-input v-model="form.gender" placeholder="请输入性别" />
+        </el-form-item>
+        <el-form-item label="年龄" prop="age">
+          <el-input v-model="form.age" placeholder="请输入年龄" />
+        </el-form-item>
+        <el-form-item label="身份证号码" prop="idCard">
+          <el-input v-model="form.idCard" placeholder="请输入身份证号码" />
+        </el-form-item>
+        <el-form-item label="联系号码" prop="phoneNum">
+          <el-input v-model="form.phoneNum" placeholder="请输入联系号码" />
+        </el-form-item>
+        <el-form-item label="检测频次" prop="detectionNumber">
+          <el-input v-model="form.detectionNumber" placeholder="请输入检测频次" />
+        </el-form-item>
+        <el-form-item label="检测频次" prop="detectionScope">
+          <el-input v-model="form.detectionScope" placeholder="请输入检测频次" />
+        </el-form-item>
+        <el-form-item label="比对开始时间" prop="startTime">
+          <el-date-picker clearable
+            v-model="form.startTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择比对开始时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="比对结束时间" prop="endTime">
+          <el-date-picker clearable
+            v-model="form.endTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择比对结束时间">
+          </el-date-picker>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog> -->
+
+
+    <!-- 用户导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="600px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        :data="{focusCrowdStyle:upload.focusCrowdStyle,jobStyle:upload.jobStyle,startTime:upload.startTime,endTime:upload.endTime,detectionNumber:upload.detectionNumber,detectionScope:upload.detectionScope}"
+        drag
+        class="nhkiu"
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em style="color: #00b385;">点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+           <!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据 -->
+          </div>
+          <el-row>
+             <el-form ref="form" :model="upload" :rules="rules" label-width="80px">
+            <el-col :span="12">
+              <el-form-item label="开始时间" prop="startTime">
+             <el-date-picker clearable
+               v-model="upload.startTime"
+               type="datetime"
+               value-format="yyyy-MM-dd HH:mm:ss"
+               format="yyyy-MM-dd HH:mm:ss"
+               style="width: 100%;"
+               placeholder="请选择比对开始时间">
+             </el-date-picker>
+             </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="结束时间" prop="endTime">
+              <el-date-picker clearable
+                v-model="upload.endTime"
+                type="datetime"
+                value-format="yyyy-MM-dd HH:mm:ss"
+                format="yyyy-MM-dd HH:mm:ss"
+                style="width: 100%;"
+                placeholder="请选择比对结束时间">
+              </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item :label="'次' + '\u3000\u3000' + '数'" prop="detectionNumber">
+               <el-input
+                 v-model="upload.detectionNumber"
+                 placeholder="请输入次数"
+                   min="0"
+                  type="number"
+                  @blur="nhkse"
+               />
+                </el-form-item>
+
+
+            </el-col>
+            <el-col :span="12">
+              <el-form-item :label="'天' + '\u3000\u3000' + '数'" prop="detectionScope">
+                <el-input
+                  v-model="upload.detectionScope"
+                  placeholder="请输入天数"
+                    min="0"
+                   type="number"
+                   @blur="nhksets"
+                  @keyup.enter.native="handleQuery"
+                />
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="职业类别" prop="jobStyle">
+                <el-select filterable v-model="upload.jobStyle"  placeholder="请选择职业类别">
+                  <el-option
+                    v-for="dict in dict.type.occupational_category "
+                    :key="dict.label"
+                    :label="dict.label"
+                    :value="dict.label"
+                  ></el-option>
+                </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="人群分类" prop="focusCrowdStyle">
+                <el-select filterable v-model="upload.focusCrowdStyle"  placeholder="请选择人群分类">
+                  <el-option
+                    v-for="dict in dict.type.classification_population"
+                    :key="dict.label"
+                    :label="dict.label"
+                    :value="dict.label"
+                  ></el-option>
+                </el-select>
+                </el-form-item>
+            </el-col>
+            </el-form>
+          </el-row>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline; color: #00b385;" @click="importTemplate">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="nlmse">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/system/info";
+import { getToken } from "@/utils/auth";
+export default {
+  dicts: ['occupational_category', 'classification_population'],
+  name: "Info",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 导入人员信息表格数据
+      infoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        name: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        startTime: null,
+        endTime: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        startTime: [
+          { required: true, message: "开始时间不能为空", trigger: "blur" }
+        ],
+        endTime:[
+          { required: true, message: "结束时间不能为空", trigger: "blur" }
+        ],
+        detectionNumber:[
+          { required: true, message: "次数不能为空", trigger: "blur" }
+        ],
+        detectionScope:[
+          { required: true, message: "天数不能为空", trigger: "blur" }
+        ],
+        jobStyle:[
+          { required: true, message: "职业类别不能为空", trigger: "blur" }
+        ],
+        focusCrowdStyle:[
+          { required: true, message: "人群分类不能为空", trigger: "blur" }
+        ]
+      },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+          detectionNumber:null,
+          detectionScope:null,
+          startTime: null,
+          endTime: null,
+          jobStyle:null,
+          focusCrowdStyle:null,
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/system/info/importData"
+      },
+      postOptions:[]
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询导入人员信息列表 */
+    getList() {
+      this.loading = true;
+      listInfo(this.queryParams).then(response => {
+        this.infoList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        name: null,
+        gender: null,
+        age: null,
+        idCard: null,
+        phoneNum: null,
+        nucleicCollectTime: null,
+        nucleicResultsTime: null,
+        jobStyle: null,
+        focusCrowdStyle: null,
+        detectionFrequency: null,
+        detectionNumber: null,
+        detectionScope: null,
+        deptName: null,
+        startTime: null,
+        endTime: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        remark: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加导入人员信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改导入人员信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateInfo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addInfo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除导入人员信息编号为"' + ids + '"的数据项?').then(function() {
+        return delInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/info/export', {
+        ...this.queryParams
+      }, `info_${new Date().getTime()}.xlsx`)
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      // this.download('system/user/importTemplate', {
+      // }, `user_template_${new Date().getTime()}.xlsx`)
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.$refs.upload.submit();
+        }
+      });
+    },
+    // 次数失去焦点事件
+    nhkse(value){
+     console.log(this.upload.detectionNumber)
+     if(this.upload.detectionNumber < 0){
+       this.upload.detectionNumber = 0
+     }
+    },
+    // 天数失去焦点事件
+    nhksets(){
+      if(this.upload.detectionScope < 0){
+        this.upload.detectionScope = 0
+      }
+    },
+    // 取消
+    nlmse(){
+      this.upload.open = false
+      this.upload.detectionNumber = null
+      this.upload.startTime=null
+      this.upload.endTime= null
+      this.upload.jobStyle= null
+      this.upload.focusCrowdStyle= null
+    }
+  }
+};
+</script>
+<style type="text/css" lang="scss">
+.nhkiu{
+  .el-upload-dragger{
+    width: 560px !important;
+    margin-bottom: 20px;
+  }
+}
+.el-button--primary{
+  background-color: #00b385 !important;
+  border-color: #00b385 !important;
+}
+</style>