Jelajahi Sumber

统计报表增加查询显示。

zhengqiang 5 tahun lalu
induk
melakukan
bbcac43d3e

+ 5 - 2
src/api/business/workAttendance.js

@@ -1,11 +1,14 @@
 import request from '@/utils/request'
 import constant from '@/constant'
 
+function statList(formData){
+  return request.post(constant.serverUrl + "/business/workAttendance/statList", formData);
+}
+
 function exportXls(formData){
   return request.post(constant.serverUrl + "/business/workAttendance/exportXls", formData);
 }
 
-
 export default {
-  exportXls
+  statList,exportXls
 }

+ 9 - 9
src/views/base/messageNotice-detail.vue

@@ -27,7 +27,7 @@
             placeholder="请选择"
             style="width:100% "
           >
-            <el-option
+            <el-option 
               v-for="company in companyResult"
               :key="company.id"
               :label="company.name"
@@ -69,7 +69,14 @@ export default {
       loading: false,
       submitting: false,
       formModel: {},
-      companyResult: ""
+      companyResult: "",
+      editorOption: {
+        modules: {
+          toolbar: "title" // 设置文本编辑器的头部是否展示
+        },
+        placeholder: "请输入通知内容", // 文本框为空时 , 占位文本
+        theme: "snow" // 或者为 `bubble`
+      }
     };
   },
   methods: {
@@ -114,13 +121,6 @@ export default {
           });
         }
       });
-    },
-    editorOption: {
-      modules: {
-        toolbar: "title" // 设置文本编辑器的头部是否展示
-      },
-      placeholder: "文本占位", // 文本框为空时 , 占位文本
-      theme: "snow" // 或者为 `bubble`
     }
   },
   mounted: function() {

+ 149 - 17
src/views/business/workAttendance-list.vue

@@ -50,12 +50,18 @@
           ></el-date-picker>
         </el-form-item>
         <el-form-item>
+           <el-button
+            type="primary"
+            size="mini"
+            style="margin-left: 8px"
+            @click="handleQuery('queryForm')"
+          >查询</el-button>&nbsp;
           <el-button
             type="info"
             size="mini"
             style="margin-left: 8px"
             @click="handleReset('queryForm')"
-          >重置</el-button>&nbsp;
+          >重置</el-button>
         </el-form-item>
       </div>
     </el-form>
@@ -67,9 +73,38 @@
         plain
         icon="el-icon-download"
         :loading="downloadLoading"
-        @click="downloadXls"
+        @click="exportXls"
       >导出数据</el-button>
     </el-row>
+    <el-table
+      ref="table"
+      stripe
+      :data="tableData"
+      :height="tableHeight"
+      style="width: 100%">
+      <el-table-column label="姓名" fixed="left" prop="name"></el-table-column>
+      <el-table-column label="单位" prop="company"></el-table-column>
+      <el-table-column label="部门" prop="department"></el-table-column>
+      <el-table-column label="工号" prop="jobNumber"></el-table-column>
+      <el-table-column label="出勤天数" prop="workDays"></el-table-column>
+      <el-table-column label="休息天数" prop="restDays"></el-table-column>
+      <el-table-column label="迟到次数" prop="lateNum"></el-table-column>
+      <el-table-column label="早退次数" prop="leaveNum"></el-table-column>
+      <el-table-column label="上班缺卡次数" prop="missCardOnWorkCount"></el-table-column>
+      <el-table-column label="下班缺卡次数" prop="missCardOffWorkCount"></el-table-column>
+      <el-table-column label="旷工天数" prop="missCardAllDayCount"></el-table-column>
+      <template v-for="col in dayColumns">
+        <el-table-column :label="col.label" :prop="col.name" :key="col.name" width="200px">
+          <template slot-scope="{row}">
+            <div style="display:flex;flex-direction:column;">
+            <template v-for="(item,index) in row.workAttendanceMap[col.name]">
+                <div v-html="showItem(item)" :key="index"></div>
+            </template>
+            </div>
+          </template> 
+        </el-table-column>
+      </template>
+    </el-table>
   </div>
 </template>
 <script>
@@ -110,7 +145,17 @@ export default {
       downloadLoading: false,
       tableHeight: "",
       timeRangesDefaultTime: [],
-      companyResult: ""
+      companyResult: "",
+      editorOption: {
+        modules: {
+          toolbar: "title" // 设置文本编辑器的头部是否展示
+        },
+        placeholder: "", // 文本框为空时 , 占位文本
+        theme: "snow" // 或者为 `bubble`
+      },
+      downloadUrl: "",
+      dayColumns: [],
+      tmplKey: ""
     };
   },
   created() {
@@ -127,15 +172,52 @@ export default {
     this.getCurrentMonthFirst();
   },
   methods: {
-    handleReset(name) {
-      this.$refs[name].resetFields();
+    showItem(item){
+      var content = [];
+
+      var arr = item.recordTime.split(' ');
+
+      if(arr.length>1){
+        content.push(arr[1]);
+      }
+      else{
+        content.push(arr[0]);
+      }
+
+      content.push(" ");
+
+      if(item.classifier==1){
+        content.push("上班");
+      }
+      else{
+        content.push("下班");
+      }
+
+      var fontColor = "";
+
+      if(item.result=="0"){
+        content.push("缺卡");
+        fontColor = "red";
+      }
+      else if(item.result=="1"){
+        content.push("打卡");
+        fontColor = "green";
+      }
+      else if(item.result=="2"){
+        content.push("迟到");
+      }
+      else if(item.result=="3"){
+        content.push("早退");
+      }
+
+      return `<font color='${fontColor}'>` + content.join("") + '</font>';
     },
-    downloadXls() {
-      //导出
+    handleQuery(){
       var self = this;
+
       this.$refs["queryForm"].validate(valid => {
         if (valid) {
-          self.downloadLoading = true;
+          self.downloadLoading = true;      
           var formData = new FormData();
 
           formData.append("companyId", self.queryModel.companyId);
@@ -153,19 +235,69 @@ export default {
           formData.append("startDate", startDate);
           formData.append("endDate", endDate);
 
+          workAttendanceApi.statList(formData).then(function(response) {
+            var jsonData = response.data;
+
+            self.downloadLoading = false;
+            
+            if (jsonData.result) {
+              self.tableData = jsonData.data.list;
+              self.tableHeight = window.innerHeight - 280;
+              self.dayColumns = jsonData.data.dayColumns;
+              self.tmplKey = jsonData.data.tmplKey;
+            } else {
+              self.$message({
+                type: "warning",
+                message: jsonData.message
+              });
+            }
+          });
+        }
+      });
+    },
+    handleReset(name) {
+      this.$refs[name].resetFields();
+    },
+    exportXls() {
+      var self = this;
+
+      //导出
+      this.$refs["queryForm"].validate(valid => {
+        if (valid) {
+          if(self.tmplKey==null || self.tmplKey.length==0){
+            self.$message.warning("请先查询!");
+            return;
+          }
+
+          self.downloadLoading = true;
+
+          var formData = new FormData();
+          formData.append("tmplKey", self.tmplKey);
+          
+          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);
+
           workAttendanceApi.exportXls(formData).then(function(response) {
             var jsonData = response.data;
+
             self.downloadLoading = false;
+            
             if (jsonData.result) {
-              if (jsonData.data != null) {
-                self.$message({
-                  type: "success",
-                  showClose: true,
-                  dangerouslyUseHTMLString: true,
-                  message: `导出成功,<a href="${jsonData.data}" target="_blank">请点击下载考勤报表</a>&nbsp;`,
-                  duration: 30000
-                });
-              }
+              self.$message({
+                type: "success",
+                message: `报表已生成,<a href="${jsonData.data}">请点击链接下载</a>`,
+                dangerouslyUseHTMLString: true
+              });
             } else {
               self.$message({
                 type: "warning",