Explorar o código

节假日设置、考勤日期设置导入导出

xiao547607 %!s(int64=4) %!d(string=hai) anos
pai
achega
fcc0e67341

+ 6 - 1
src/api/base/alarmConfig.js

@@ -41,6 +41,11 @@ function batchRemove(idList){
   });
 }
 
+function exportXls(formData) {
+  //导出xls
+  return request.post(constant.serverUrl + "/base/alarmConfig/exportXls", formData);
+}
+
 export default {
-  pageList,create,edit,add,update,remove,batchRemove
+  pageList,create,edit,add,update,remove,batchRemove,exportXls
 }

+ 6 - 1
src/api/base/holidayInfo.js

@@ -41,6 +41,11 @@ function batchRemove(idList){
   });
 }
 
+function exportXls(formData) {
+  //导出xls
+  return request.post(constant.serverUrl + "/base/holidayInfo/exportXls", formData);
+}
+
 export default {
-  pageList,create,edit,add,update,remove,batchRemove
+  pageList,create,edit,add,update,remove,batchRemove,exportXls
 }

+ 281 - 45
src/views/base/alarmConfig-list.vue

@@ -13,7 +13,12 @@
     <!--
       要resetFields起作用,必须配置:model和prop
     -->
-    <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+    <el-form
+      ref="queryForm"
+      :model="queryModel"
+      inline
+      class="demo-form-inline"
+    >
       <el-form-item label="单位" prop="companyId">
         <!-- <el-select
           v-model="queryModel.companyId"
@@ -44,20 +49,46 @@
           icon="ios-search"
           @click="changePage(1)"
           :loading="loading"
-        >查询</el-button>&nbsp;
+          >查询</el-button
+        >&nbsp;
       </el-form-item>
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
-      <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd">新增</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-circle-plus"
+        @click="handleAdd"
+        >新增</el-button
+      >
       <el-button
         type="primary"
         size="small"
         plain
         icon="el-icon-remove"
-        :disabled="multipleSelection.length==0"
+        :disabled="multipleSelection.length == 0"
         @click="handleBatchDelete"
-      >删除选中项</el-button>
+        >删除选中项</el-button
+      >
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-upload2"
+        @click="batchImportVisible = true"
+        >导入</el-button
+      >
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-download"
+        :loading="xlsLoading"
+        @click="downloadAll"
+        >导出数据</el-button
+      >
     </el-row>
     <el-table
       ref="formTable"
@@ -69,37 +100,67 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55"></el-table-column>
-      <el-table-column prop="companyName" label="单位" width="220" fixed="left"></el-table-column>
+      <el-table-column
+        prop="companyName"
+        label="单位"
+        width="220"
+        fixed="left"
+      ></el-table-column>
       <el-table-column prop="subordinate" label="是否包含下级单位" width="150">
-        <template slot-scope="{row}">
-          <span v-html="row.subordinate ? '是': '否'"></span>
+        <template slot-scope="{ row }">
+          <span v-html="row.subordinate ? '是' : '否'"></span>
         </template>
       </el-table-column>
-      <el-table-column prop="weekdays" label="周工作日" show-overflow-tooltip width="150"></el-table-column>
-      <el-table-column prop="startTime" label="开始时间" width="120"></el-table-column>
-      <el-table-column prop="attendanceTime" label="考勤时间" width="120"></el-table-column>
-      <el-table-column prop="endTime" label="结束时间" width="120"></el-table-column>
+      <el-table-column
+        prop="weekdays"
+        label="周工作日"
+        show-overflow-tooltip
+        width="150"
+      ></el-table-column>
+      <el-table-column
+        prop="startTime"
+        label="开始时间"
+        width="120"
+      ></el-table-column>
+      <el-table-column
+        prop="attendanceTime"
+        label="考勤时间"
+        width="120"
+      ></el-table-column>
+      <el-table-column
+        prop="endTime"
+        label="结束时间"
+        width="120"
+      ></el-table-column>
       <el-table-column prop="attendanceType" label="考勤类型" width="120">
-        <template slot-scope="{row}">
-          <span v-html="row.attendanceType==1 ? '内勤': ''"></span>
-          <span v-html="row.attendanceType==2 ? '外勤': ''"></span>
+        <template slot-scope="{ row }">
+          <span v-html="row.attendanceType == 1 ? '内勤' : ''"></span>
+          <span v-html="row.attendanceType == 2 ? '外勤' : ''"></span>
         </template>
       </el-table-column>
       <el-table-column prop="classifier" label="考勤分类" width="120">
-        <template slot-scope="{row}">
-          <span v-html="row.classifier==1 ? '上班时间': ''"></span>
-          <span v-html="row.classifier==2 ? '下班时间': ''"></span>
+        <template slot-scope="{ row }">
+          <span v-html="row.classifier == 1 ? '上班时间' : ''"></span>
+          <span v-html="row.classifier == 2 ? '下班时间' : ''"></span>
         </template>
       </el-table-column>
-      <el-table-column prop="needMeasureTemperature" label="是否要求测温" width="120">
-        <template slot-scope="{row}">
-          <span v-html="row.needMeasureTemperature ? '是': '否'"></span>
+      <el-table-column
+        prop="needMeasureTemperature"
+        label="是否要求测温"
+        width="120"
+      >
+        <template slot-scope="{ row }">
+          <span v-html="row.needMeasureTemperature ? '是' : '否'"></span>
         </template>
       </el-table-column>
       <el-table-column label="操作" width="200" fixed="right">
-        <template slot-scope="{row}">
-          <el-button size="mini" type="warning" @click="handleEdit(row)">修改</el-button>
-          <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
+        <template slot-scope="{ row }">
+          <el-button size="mini" type="warning" @click="handleEdit(row)"
+            >修改</el-button
+          >
+          <el-button size="mini" type="danger" @click="handleDelete(row)"
+            >删除</el-button
+          >
         </template>
       </el-table-column>
     </el-table>
@@ -118,6 +179,67 @@
       :companyResult="companyResult"
       @close="onDetailModalClose"
     ></alarmConfig-detail>
+    <!--批量导入s-->
+    <el-dialog
+      title="批量导入考勤时间设置"
+      :visible.sync="batchImportVisible"
+      :modal-append-to-body="false"
+      style="text-align: left"
+      :close-on-click-modal="false"
+    >
+      <el-form label-width="150px">
+        <el-form-item label="模板下载">
+          <el-link
+            href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart/personInfo/2020/10/%E8%80%83%E5%8B%A4%E6%97%B6%E9%97%B4%E8%AE%BE%E7%BD%AE%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xls"
+            type="primary"
+            target="_blank"
+            >点击下载模板</el-link
+          >
+        </el-form-item>
+        <el-form-item label="单位">
+          <el-select-tree
+            size="large"
+            :props="props"
+            :options="companyResult"
+            v-model="uploadXlsData.companyId"
+            height="200"
+            width="300px"
+          ></el-select-tree>
+        </el-form-item>
+        <el-form-item label="上传文件">
+          <el-upload
+            class="upload-demo"
+            accept=".xls"
+            :action="uploadUrlXls"
+            :data="uploadXlsData"
+            :headers="headers"
+            :on-preview="handleBatchImportPreview"
+            name="uploadFile"
+            :multiple="true"
+            :limit="1"
+            :on-remove="handleBatchImportRemove"
+            :before-remove="beforeBatchImportRemove"
+            :before-upload="beforeUpload"
+            :on-exceed="handleBatchImportExceed"
+            :on-success="handleBatchImportSuccess"
+            :file-list="batchImportFileList"
+          >
+            <el-button size="small" type="primary" :loading="xlsLoading"
+              >点击上传</el-button
+            >
+            <div slot="tip" class="el-upload__tip">
+              只能上传xls文件,且不超过500kb
+            </div>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="batchImportVisible = false"
+          >关 闭</el-button
+        >
+      </div>
+    </el-dialog>
+    <!--批量导入E-->
   </div>
 </template>
 <script>
@@ -127,6 +249,7 @@ import alarmConfigApi from "@/api/base/alarmConfig";
 import companyInfoApi from "@/api/base/companyInfo";
 import SelectTree from "@/components/SelectTree";
 import pageUtil from "@/utils/page";
+import { getToken } from "@/utils/auth"; // get token from cookie
 
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
@@ -138,7 +261,7 @@ export default {
 
     return {
       queryModel: {
-        companyId: ""
+        companyId: "",
       },
       loading: false,
       tableData: [],
@@ -160,8 +283,19 @@ export default {
         // 配置项(必选)
         value: "id",
         label: "name",
-        children: "children"
-      }
+        children: "children",
+      },
+      batchImportVisible: false,
+      batchImportFileList: [],
+      uploadUrlXls: Constant.serverUrl + "/base/alarmConfig/importXls",
+      uploadXlsData: {
+        subFolder: "company",
+        companyId: "",
+      },
+      headers: {
+        Authorization: getToken(),
+      },
+      xlsLoading: false,
     };
   },
   created() {
@@ -174,7 +308,7 @@ export default {
     loadTree() {
       var formData = new FormData();
 
-      companyInfoApi.loadChildren(formData).then(resp => {
+      companyInfoApi.loadChildren(formData).then((resp) => {
         var jsonData = resp.data;
 
         if (jsonData.result) {
@@ -190,7 +324,7 @@ export default {
       var formData = new FormData();
       formData.append("parentId", tree.id);
 
-      companyInfoApi.loadChildren(formData).then(resp => {
+      companyInfoApi.loadChildren(formData).then((resp) => {
         var jsonData = resp.data;
 
         if (jsonData.result) {
@@ -226,7 +360,7 @@ export default {
 
       alarmConfigApi
         .pageList(formData)
-        .then(function(response) {
+        .then(function (response) {
           self.loading = false;
 
           var jsonData = response.data.data;
@@ -235,7 +369,7 @@ export default {
           self.totalPages = jsonData.totalPages;
           self.totalElements = jsonData.recordsTotal;
         })
-        .catch(error => {
+        .catch((error) => {
           self.loading = false;
           // self.$message.error(error + "");
         });
@@ -272,10 +406,10 @@ export default {
         .$confirm("是否确认删除?", "提示", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
-          type: "warning"
+          type: "warning",
         })
         .then(() => {
-          alarmConfigApi.remove(record.id).then(function(response) {
+          alarmConfigApi.remove(record.id).then(function (response) {
             var jsonData = response.data;
 
             if (jsonData.result) {
@@ -285,7 +419,7 @@ export default {
 
               self.$message({
                 type: "success",
-                message: "删除成功!"
+                message: "删除成功!",
               });
             }
           });
@@ -294,16 +428,16 @@ export default {
     handleBatchDelete() {
       var self = this;
 
-      var idList = this.multipleSelection.map(record => {
+      var idList = this.multipleSelection.map((record) => {
         return record.id;
       });
 
       this.$confirm("是否确认删除选中项?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       }).then(() => {
-        alarmConfigApi.batchRemove(idList).then(function(response) {
+        alarmConfigApi.batchRemove(idList).then(function (response) {
           var jsonData = response.data;
 
           if (jsonData.result) {
@@ -311,7 +445,7 @@ export default {
 
             self.$message({
               type: "success",
-              message: "删除成功!"
+              message: "删除成功!",
             });
           }
         });
@@ -324,27 +458,129 @@ export default {
       if (refreshed) {
         this.changePage(this.pageIndex);
       }
-    }
+    },
+    beforeUpload(file, fileList) {
+      //导入前判断
+      var self = this;
+      var companyId = self.uploadXlsData.companyId;
+
+      if (companyId == null || companyId.length == 0) {
+        self.$message({
+          type: "warning",
+          message: "请选择单位!",
+        });
+        self.xlsLoading = false;
+        return false;
+      } else {
+        self.xlsLoading = true;
+        return true;
+      }
+    },
+    //批量导入-上传成功
+    handleBatchImportSuccess(response, file, fileList) {
+      var self = this;
+      self.xlsLoading = false;
+      self.uploadXlsData.companyId = null;
+
+      if (response.result) {
+        self.$message.success(response.message);
+        this.batchImportFileList = [];
+        this.changePage(1);
+
+        this.batchImportVisible = false;
+      } else {
+        //this.$message.error(response.message);
+        this.batchImportFileList = [];
+        this.changePage(1);
+
+        if (response.data != null) {
+          //下载有错误信息提示的报表
+          //window.open(response.data);
+          self.$message({
+            showClose: true,
+            dangerouslyUseHTMLString: true,
+            message:
+              response.message +
+              `,<a href="${response.data}" target="_blank">点击下载未导入的数据报表</a>&nbsp;`,
+            duration: 30000,
+          });
+        }
+      }
+    },
+    //批量导入-预览
+    handleBatchImportPreview(file) {
+      console.log(file.url);
+    },
+    //批量导入-移除
+    handleBatchImportRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    //批量导入-移除前操作
+    beforeBatchImportRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    //批量导入-文件超出个数限制时的钩子
+    handleBatchImportExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
+          files.length + fileList.length
+        } 个文件`
+      );
+    },
+    downloadAll() {
+      //导出
+      var self = this;
+      var formData = new FormData();
+
+      if (self.queryModel.companyId == null) {
+        self.queryModel.companyId = "";
+      }
+      formData.append("companyId", self.queryModel.companyId);
+
+      self.loading = true;
+      self.xlsLoading = true;
+
+      alarmConfigApi.exportXls(formData).then(function (response) {
+        self.loading = false;
+        self.xlsLoading = false;
+        var jsonData = response.data;
+        if (jsonData.result) {
+          if (jsonData.data != null) {
+            if (document.location.href.startsWith("https://")) {
+              jsonData.data = jsonData.data.replace("http://", "https://");
+            }
+
+            self.$message({
+              showClose: true,
+              type: "success",
+              dangerouslyUseHTMLString: true,
+              message: `报表已生成,<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
+              duration: 30000,
+            });
+          }
+        }
+      });
+    },
   },
-  mounted: function() {
+  mounted: function () {
     var self = this;
     this.changePage(1);
 
-    companyInfoApi.list().then(function(response) {
+    companyInfoApi.list().then(function (response) {
       var jsonData = response.data;
       if (jsonData.result) {
         self.companyResult = jsonData.data;
       }
     });
 
-    setTimeout(()=>{
+    setTimeout(() => {
       this.tableHeight = pageUtil.autoAdjustHeight(this.$refs.formTable.$el);
-    },1000);
+    }, 1000);
   },
   components: {
     "alarmConfig-detail": alarmConfigDetail,
-    "el-select-tree": SelectTree
-  }
+    "el-select-tree": SelectTree,
+  },
 };
 </script>
 <style lang="scss" scoped>

+ 308 - 47
src/views/base/holidayInfo-list.vue

@@ -12,8 +12,13 @@
     <el-divider></el-divider>
     <!--
       要resetFields起作用,必须配置:model和prop
-    --> 
-    <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+    -->
+    <el-form
+      ref="queryForm"
+      :model="queryModel"
+      inline
+      class="demo-form-inline"
+    >
       <el-form-item label="单位" prop="companyId">
         <el-select-tree
           :props="props"
@@ -25,7 +30,11 @@
         ></el-select-tree>
       </el-form-item>
       <el-form-item label="假日名称" prop="companyId">
-        <el-input type="text" size="mini" v-model="queryModel.holidayName"></el-input>
+        <el-input
+          type="text"
+          size="mini"
+          v-model="queryModel.holidayName"
+        ></el-input>
       </el-form-item>
       <el-form-item label="假日区间" prop="timeRanges">
         <el-date-picker
@@ -46,29 +55,56 @@
           icon="ios-search"
           @click="changePage(1)"
           :loading="loading"
-        >查询</el-button>&nbsp;
+          >查询</el-button
+        >&nbsp;
         <el-button
-              type="info"
-              size="mini"
-              style="margin-left: 8px"
-              @click="handleReset('queryForm')"
-            >重置</el-button>
+          type="info"
+          size="mini"
+          style="margin-left: 8px"
+          @click="handleReset('queryForm')"
+          >重置</el-button
+        >
       </el-form-item>
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
-      <el-button type="primary" size="small" plain icon="el-icon-circle-plus" @click="handleAdd">新增</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-circle-plus"
+        @click="handleAdd"
+        >新增</el-button
+      >
       <el-button
         type="primary"
         size="small"
         plain
         icon="el-icon-remove"
-        :disabled="multipleSelection.length==0"
+        :disabled="multipleSelection.length == 0"
         @click="handleBatchDelete"
-      >删除选中项</el-button>
+        >删除选中项</el-button
+      >
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-upload2"
+        @click="batchImportVisible = true"
+        >导入</el-button
+      >
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-download"
+        :loading="xlsLoading"
+        @click="downloadAll"
+        >导出数据</el-button
+      >
     </el-row>
     <el-table
-    ref="formTable"
+      ref="formTable"
       :data="tableData"
       v-loading="loading"
       stripe
@@ -76,20 +112,44 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55"></el-table-column>
-      <el-table-column prop="companyName" label="单位名称" width="220"></el-table-column>
-      <el-table-column prop="holidayName" label="节假日名称" width="220"></el-table-column>
-      <el-table-column prop="beginDate" label="开始日期" width="150"></el-table-column>
-      <el-table-column prop="endDate" label="结束日期" width="150"></el-table-column>
+      <el-table-column
+        prop="companyName"
+        label="单位名称"
+        width="220"
+      ></el-table-column>
+      <el-table-column
+        prop="holidayName"
+        label="节假日名称"
+        width="220"
+      ></el-table-column>
+      <el-table-column
+        prop="beginDate"
+        label="开始日期"
+        width="150"
+      ></el-table-column>
+      <el-table-column
+        prop="endDate"
+        label="结束日期"
+        width="150"
+      ></el-table-column>
       <el-table-column prop="working" label="是否需要上班" width="120">
         <template slot-scope="{row}">
-          <span v-html="row.working ? '是': '否'"></span>
+          <span v-html="row.working ? '是' : '否'"></span>
         </template>
       </el-table-column>
-      <el-table-column prop="refWeekday" label="参考上班日" width="120"></el-table-column>
+      <el-table-column
+        prop="refWeekdayN"
+        label="参考上班日"
+        width="120"
+      ></el-table-column>
       <el-table-column label="操作" width="200" fixed="right">
-        <template slot-scope="{row}">
-          <el-button size="mini" type="warning" @click="handleEdit(row)">修改</el-button>
-          <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
+        <template slot-scope="{ row }">
+          <el-button size="mini" type="warning" @click="handleEdit(row)"
+            >修改</el-button
+          >
+          <el-button size="mini" type="danger" @click="handleDelete(row)"
+            >删除</el-button
+          >
         </template>
       </el-table-column>
     </el-table>
@@ -108,6 +168,67 @@
       :companyResult="companyResult"
       @close="onDetailModalClose"
     ></holidayInfo-detail>
+    <!--批量导入s-->
+    <el-dialog
+      title="批量导入考勤时间设置"
+      :visible.sync="batchImportVisible"
+      :modal-append-to-body="false"
+      style="text-align: left"
+      :close-on-click-modal="false"
+    >
+      <el-form label-width="150px">
+        <el-form-item label="模板下载">
+          <el-link
+            href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart/personInfo/2020/10/%E8%8A%82%E5%81%87%E6%97%A5%E8%AE%BE%E7%BD%AE%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xls"
+            type="primary"
+            target="_blank"
+            >点击下载模板</el-link
+          >
+        </el-form-item>
+        <el-form-item label="单位">
+          <el-select-tree
+            size="large"
+            :props="props"
+            :options="companyResult"
+            v-model="uploadXlsData.companyId"
+            height="200"
+            width="300px"
+          ></el-select-tree>
+        </el-form-item>
+        <el-form-item label="上传文件">
+          <el-upload
+            class="upload-demo"
+            accept=".xls"
+            :action="uploadUrlXls"
+            :data="uploadXlsData"
+            :headers="headers"
+            :on-preview="handleBatchImportPreview"
+            name="uploadFile"
+            :multiple="true"
+            :limit="1"
+            :on-remove="handleBatchImportRemove"
+            :before-remove="beforeBatchImportRemove"
+            :before-upload="beforeUpload"
+            :on-exceed="handleBatchImportExceed"
+            :on-success="handleBatchImportSuccess"
+            :file-list="batchImportFileList"
+          >
+            <el-button size="small" type="primary" :loading="xlsLoading"
+              >点击上传</el-button
+            >
+            <div slot="tip" class="el-upload__tip">
+              只能上传xls文件,且不超过500kb
+            </div>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="batchImportVisible = false"
+          >关 闭</el-button
+        >
+      </div>
+    </el-dialog>
+    <!--批量导入E-->
   </div>
 </template>
 <script>
@@ -117,6 +238,7 @@ import holidayInfoApi from "@/api/base/holidayInfo";
 import companyInfoApi from "@/api/base/companyInfo";
 import SelectTree from "@/components/SelectTree";
 
+import { getToken } from "@/utils/auth"; // get token from cookie
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
@@ -143,10 +265,38 @@ export default {
       queryModel: {
         companyId: "",
         holidayName: "",
-        timeRanges: ""
-      }
+        timeRanges: "",
+      },
+      companyResult: [],
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+      batchImportVisible: false,
+      batchImportFileList: [],
+      uploadUrlXls: Constant.serverUrl + "/base/holidayInfo/importXls",
+      uploadXlsData: {
+        subFolder: "company",
+        companyId: "",
+      },
+      headers: {
+        Authorization: getToken(),
+      },
+      xlsLoading: false,
     };
   },
+  created() {
+    var self = this;
+    companyInfoApi.list().then(function (response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        self.companyResult = jsonData.data;
+      }
+    });
+  },
   methods: {
     changePage(pageIndex) {
       var self = this;
@@ -170,11 +320,11 @@ export default {
       formData.append("pageIndex", self.pageIndex);
       formData.append("pageSize", self.pageSize);
 
-      if(self.queryModel.companyId!=null){
+      if (self.queryModel.companyId != null) {
         formData.append("companyId", self.queryModel.companyId);
       }
 
-      if(self.queryModel.holidayName){
+      if (self.queryModel.holidayName) {
         formData.append("holidayName", self.queryModel.holidayName);
       }
 
@@ -187,9 +337,9 @@ export default {
       }
       holidayInfoApi
         .pageList(formData)
-        .then(function(response) {
+        .then(function (response) {
           self.loading = false;
- 
+
           var jsonData = response.data.data;
 
           self.tableData = jsonData.data;
@@ -201,7 +351,7 @@ export default {
           self.tableHeight =
             window.innerHeight - self.$refs.formTable.$el.offsetTop - 45;
         })
-        .catch(error => {
+        .catch((error) => {
           self.loading = false;
           // self.$message.error(error + "");
         });
@@ -238,10 +388,10 @@ export default {
         .$confirm("是否确认删除?", "提示", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
-          type: "warning"
+          type: "warning",
         })
         .then(() => {
-          holidayInfoApi.remove(record.id).then(function(response) {
+          holidayInfoApi.remove(record.id).then(function (response) {
             var jsonData = response.data;
 
             if (jsonData.result) {
@@ -251,7 +401,7 @@ export default {
 
               self.$message({
                 type: "success",
-                message: "删除成功!"
+                message: "删除成功!",
               });
             }
           });
@@ -260,16 +410,16 @@ export default {
     handleBatchDelete() {
       var self = this;
 
-      var idList = this.multipleSelection.map(record => {
+      var idList = this.multipleSelection.map((record) => {
         return record.id;
       });
 
       this.$confirm("是否确认删除选中项?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
-        type: "warning"
+        type: "warning",
       }).then(() => {
-        holidayInfoApi.batchRemove(idList).then(function(response) {
+        holidayInfoApi.batchRemove(idList).then(function (response) {
           var jsonData = response.data;
 
           if (jsonData.result) {
@@ -277,7 +427,7 @@ export default {
 
             self.$message({
               type: "success",
-              message: "删除成功!"
+              message: "删除成功!",
             });
           }
         });
@@ -289,23 +439,134 @@ export default {
       if (refreshed) {
         this.changePage(this.pageIndex);
       }
-    }
+    },
+    beforeUpload(file, fileList) {
+      //导入前判断
+      var self = this;
+      var companyId = self.uploadXlsData.companyId;
+
+      if (companyId == null || companyId.length == 0) {
+        self.$message({
+          type: "warning",
+          message: "请选择单位!",
+        });
+        self.xlsLoading = false;
+        return false;
+      } else {
+        self.xlsLoading = true;
+        return true;
+      }
+    },
+    //批量导入-上传成功
+    handleBatchImportSuccess(response, file, fileList) {
+      var self = this;
+      self.xlsLoading = false;
+      self.uploadXlsData.companyId = null;
+
+      if (response.result) {
+        self.$message.success(response.message);
+        this.batchImportFileList = [];
+        this.changePage(1);
+
+        this.batchImportVisible = false;
+      } else {
+        //this.$message.error(response.message);
+        this.batchImportFileList = [];
+        this.changePage(1);
+
+        if (response.data != null) {
+          //下载有错误信息提示的报表
+          //window.open(response.data);
+          self.$message({
+            showClose: true,
+            dangerouslyUseHTMLString: true,
+            message:
+              response.message +
+              `,<a href="${response.data}" target="_blank">点击下载未导入的数据报表</a>&nbsp;`,
+            duration: 30000,
+          });
+        }
+      }
+    },
+    //批量导入-预览
+    handleBatchImportPreview(file) {
+      console.log(file.url);
+    },
+    //批量导入-移除
+    handleBatchImportRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    //批量导入-移除前操作
+    beforeBatchImportRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    //批量导入-文件超出个数限制时的钩子
+    handleBatchImportExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
+          files.length + fileList.length
+        } 个文件`
+      );
+    },
+    downloadAll() {
+      //导出
+      var self = this;
+      var formData = new FormData();
+
+      var startDate = "";
+      var endDate = "";
+      var timeRanges = self.queryModel.timeRanges + "";
+
+      if (timeRanges != "" && timeRanges != null) {
+        timeRanges = timeRanges.split(",");
+        startDate = timeRanges[0];
+        endDate = timeRanges[1];
+      }
+
+      formData.append("startDate", startDate);
+      formData.append("endDate", endDate);
+
+      if (self.queryModel.companyId != null) {
+        formData.append("companyId", self.queryModel.companyId);
+      }
+
+      if (self.queryModel.holidayName) {
+        formData.append("holidayName", self.queryModel.holidayName);
+      }
+
+      self.loading = true;
+      self.xlsLoading = true;
+
+      holidayInfoApi.exportXls(formData).then(function (response) {
+        self.loading = false;
+        self.xlsLoading = false;
+        var jsonData = response.data;
+        if (jsonData.result) {
+          if (jsonData.data != null) {
+            if (document.location.href.startsWith("https://")) {
+              jsonData.data = jsonData.data.replace("http://", "https://");
+            }
+
+            self.$message({
+              showClose: true,
+              type: "success",
+              dangerouslyUseHTMLString: true,
+              message: `报表已生成,<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
+              duration: 30000,
+            });
+          }
+        }
+      });
+    },
   },
-  mounted: function() {
+  mounted: function () {
     var self = this;
     this.changePage(1);
-
-    companyInfoApi.list().then(function(response) {
-      var jsonData = response.data;
-      if (jsonData.result) {
-        self.companyResult = jsonData.data;
-      }
-    });
   },
   components: {
     "holidayInfo-detail": holidayInfoDetail,
-    "el-select-tree": SelectTree
-  }
+    "el-select-tree": SelectTree,
+  },
 };
 </script>
 <style lang="scss" scoped>