|
@@ -22,58 +22,72 @@
|
|
|
>
|
|
|
<div>
|
|
|
<el-row>
|
|
|
- <el-form-item label="单位" prop="companyId">
|
|
|
- <el-select
|
|
|
- v-model="queryModel.companyId"
|
|
|
- size="mini"
|
|
|
- filterable
|
|
|
- placeholder="请选择"
|
|
|
- style="width:220px"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="company in companyResult"
|
|
|
- :key="company.id"
|
|
|
- :label="company.name"
|
|
|
- :value="company.id"
|
|
|
- ></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="统计区间" prop="timeRanges">
|
|
|
- <el-date-picker
|
|
|
- v-model="queryModel.timeRanges"
|
|
|
- type="daterange"
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- :default-time="timeRangesDefaultTime"
|
|
|
- size="mini"
|
|
|
- ></el-date-picker>
|
|
|
- </el-form-item>
|
|
|
+ <el-form-item label="单位" prop="companyId">
|
|
|
+ <el-select
|
|
|
+ v-model="queryModel.companyId"
|
|
|
+ size="mini"
|
|
|
+ filterable
|
|
|
+ placeholder="请选择"
|
|
|
+ style="width:220px"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="company in companyResult"
|
|
|
+ :key="company.id"
|
|
|
+ :label="company.name"
|
|
|
+ :value="company.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="统计区间" prop="timeRanges">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="queryModel.timeRanges"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ :default-time="timeRangesDefaultTime"
|
|
|
+ size="mini"
|
|
|
+ ></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
- <el-form-item label="姓名" prop="name">
|
|
|
- <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
|
|
|
+ <el-form-item label="姓名" prop="name">
|
|
|
+ <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="position1Show" :label="position1" prop="position1">
|
|
|
+ <el-input type="text" size="mini" v-model="queryModel.position1"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="工号" prop="jobNumber">
|
|
|
- <el-input type="text" size="mini" v-model="queryModel.jobNumber"></el-input>
|
|
|
+ <el-form-item v-if="position2Show" :label="position2" prop="position2">
|
|
|
+ <el-input type="text" size="mini" v-model="queryModel.position2"></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-button
|
|
|
- type="primary"
|
|
|
- size="mini"
|
|
|
- style="margin-left: 8px"
|
|
|
- @click="handleQuery('queryForm')"
|
|
|
- >查询</el-button>
|
|
|
- <el-button
|
|
|
- type="info"
|
|
|
- size="mini"
|
|
|
- style="margin-left: 8px"
|
|
|
- @click="handleReset('queryForm')"
|
|
|
- >重置</el-button>
|
|
|
+ <el-form-item v-if="position3Show" :label="position3" prop="position3">
|
|
|
+ <el-input type="text" size="mini" v-model="queryModel.position3"></el-input>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ size="mini"
|
|
|
+ style="margin-left: 8px"
|
|
|
+ @click="handleQuery('queryForm')"
|
|
|
+ >查询</el-button>
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ size="mini"
|
|
|
+ style="margin-left: 8px"
|
|
|
+ @click="handleReset('queryForm')"
|
|
|
+ >重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
</el-row>
|
|
|
</div>
|
|
|
+ <div>
|
|
|
+ <el-form-item v-if="position4Show" :label="position4" prop="position4">
|
|
|
+ <el-input type="text" size="mini" v-model="queryModel.position4"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item v-if="position5Show" :label="position5" prop="position5">
|
|
|
+ <el-input type="text" size="mini" v-model="queryModel.position5"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
</el-form>
|
|
|
<el-divider></el-divider>
|
|
|
<el-row class="button-group">
|
|
@@ -86,17 +100,14 @@
|
|
|
@click="exportXls"
|
|
|
>导出数据</el-button>
|
|
|
</el-row>
|
|
|
- <el-table
|
|
|
- ref="table"
|
|
|
- stripe
|
|
|
- :data="tableData"
|
|
|
- :height="tableHeight"
|
|
|
- style="width: 100%">
|
|
|
+ <el-table ref="table" stripe :data="tableData" :height="tableHeight" style="width: 100%">
|
|
|
<el-table-column label="序号" fixed="left" type="index"></el-table-column>
|
|
|
<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 prop="position1" :label="position1" v-if="position1Show"></el-table-column>
|
|
|
+ <el-table-column prop="position2" :label="position2" v-if="position2Show"></el-table-column>
|
|
|
+ <el-table-column prop="position3" :label="position3" v-if="position3Show"></el-table-column>
|
|
|
+ <el-table-column prop="position4" :label="position4" v-if="position4Show"></el-table-column>
|
|
|
+ <el-table-column prop="position5" :label="position5" v-if="position5Show"></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>
|
|
@@ -108,11 +119,11 @@
|
|
|
<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]">
|
|
|
+ <template v-for="(item,index) in row.workAttendanceMap[col.name]">
|
|
|
<div v-html="showItem(item)" :key="index"></div>
|
|
|
- </template>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
- </template>
|
|
|
+ </template>
|
|
|
</el-table-column>
|
|
|
</template>
|
|
|
</el-table>
|
|
@@ -121,6 +132,7 @@
|
|
|
<script>
|
|
|
import Constant from "@/constant";
|
|
|
import workAttendanceApi from "@/api/business/workAttendance";
|
|
|
+import companyPositionApi from "@/api/base/companyPosition";
|
|
|
import companyInfoApi from "@/api/base/companyInfo";
|
|
|
import NProgress from "nprogress"; // progress bar
|
|
|
import "nprogress/nprogress.css"; // progress bar style
|
|
@@ -139,8 +151,13 @@ export default {
|
|
|
queryModel: {
|
|
|
companyId: "",
|
|
|
timeRanges: "",
|
|
|
- name:"",
|
|
|
- jobNumber:""
|
|
|
+ name: "",
|
|
|
+ jobNumber: "",
|
|
|
+ position1: "",
|
|
|
+ position2: "",
|
|
|
+ position3: "",
|
|
|
+ position4: "",
|
|
|
+ position5: ""
|
|
|
},
|
|
|
loading: false,
|
|
|
tableData: [],
|
|
@@ -168,7 +185,17 @@ export default {
|
|
|
},
|
|
|
downloadUrl: "",
|
|
|
dayColumns: [],
|
|
|
- tmplKey: ""
|
|
|
+ tmplKey: "",
|
|
|
+ position1: "",
|
|
|
+ position2: "",
|
|
|
+ position3: "",
|
|
|
+ position4: "",
|
|
|
+ position5: "",
|
|
|
+ position1Show: false,
|
|
|
+ position2Show: false,
|
|
|
+ position3Show: false,
|
|
|
+ position4Show: false,
|
|
|
+ position5Show: false
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
@@ -182,55 +209,74 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ companyPositionApi.detailForCompany().then(function(response) {
|
|
|
+ var jsonData = response.data.data;
|
|
|
+ if (jsonData.position1Name != null && jsonData.position1Name != "") {
|
|
|
+ self.position1 = jsonData.position1Name;
|
|
|
+ self.position1Show = true;
|
|
|
+ }
|
|
|
+ if (jsonData.position2Name != null && jsonData.position2Name != "") {
|
|
|
+ self.position2 = jsonData.position2Name;
|
|
|
+ self.position2Show = true;
|
|
|
+ }
|
|
|
+ if (jsonData.position3Name != null && jsonData.position3Name != "") {
|
|
|
+ self.position3 = jsonData.position3Name;
|
|
|
+ self.position3Show = true;
|
|
|
+ }
|
|
|
+ if (jsonData.position4Name != null && jsonData.position4Name != "") {
|
|
|
+ self.position4 = jsonData.position4Name;
|
|
|
+ self.position4Show = true;
|
|
|
+ }
|
|
|
+ if (jsonData.position5Name != null && jsonData.position5Name != "") {
|
|
|
+ self.position5 = jsonData.position5Name;
|
|
|
+ self.position5Show = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
this.getCurrentMonthFirst();
|
|
|
},
|
|
|
methods: {
|
|
|
- showItem(item){
|
|
|
+ showItem(item) {
|
|
|
var content = [];
|
|
|
|
|
|
- var arr = item.recordTime.split(' ');
|
|
|
+ var arr = item.recordTime.split(" ");
|
|
|
|
|
|
- if(arr.length>1){
|
|
|
+ if (arr.length > 1) {
|
|
|
content.push(arr[1]);
|
|
|
- }
|
|
|
- else{
|
|
|
+ } else {
|
|
|
content.push(arr[0]);
|
|
|
}
|
|
|
|
|
|
content.push(" ");
|
|
|
|
|
|
- if(item.classifier==1){
|
|
|
+ if (item.classifier == 1) {
|
|
|
content.push("上班");
|
|
|
- }
|
|
|
- else{
|
|
|
+ } else {
|
|
|
content.push("下班");
|
|
|
}
|
|
|
|
|
|
var fontColor = "";
|
|
|
|
|
|
- if(item.result=="0"){
|
|
|
+ if (item.result == "0") {
|
|
|
content.push("缺卡");
|
|
|
fontColor = "red";
|
|
|
- }
|
|
|
- else if(item.result=="1"){
|
|
|
+ } else if (item.result == "1") {
|
|
|
content.push("打卡");
|
|
|
fontColor = "green";
|
|
|
- }
|
|
|
- else if(item.result=="2"){
|
|
|
+ } else if (item.result == "2") {
|
|
|
content.push("迟到");
|
|
|
- }
|
|
|
- else if(item.result=="3"){
|
|
|
+ } else if (item.result == "3") {
|
|
|
content.push("早退");
|
|
|
}
|
|
|
|
|
|
- return `<font color='${fontColor}'>` + content.join("") + '</font>';
|
|
|
+ return `<font color='${fontColor}'>` + content.join("") + "</font>";
|
|
|
},
|
|
|
- handleQuery(){
|
|
|
+ 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);
|
|
@@ -249,12 +295,18 @@ export default {
|
|
|
|
|
|
formData.append("startDate", startDate);
|
|
|
formData.append("endDate", endDate);
|
|
|
+
|
|
|
+ formData.append("position1", self.queryModel.position1);
|
|
|
+ formData.append("position2", self.queryModel.position2);
|
|
|
+ formData.append("position3", self.queryModel.position3);
|
|
|
+ formData.append("position4", self.queryModel.position4);
|
|
|
+ formData.append("position5", self.queryModel.position5);
|
|
|
|
|
|
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;
|
|
@@ -279,7 +331,7 @@ export default {
|
|
|
//导出
|
|
|
this.$refs["queryForm"].validate(valid => {
|
|
|
if (valid) {
|
|
|
- if(self.tmplKey==null || self.tmplKey.length==0){
|
|
|
+ if (self.tmplKey == null || self.tmplKey.length == 0) {
|
|
|
self.$message.warning("请先查询!");
|
|
|
return;
|
|
|
}
|
|
@@ -288,7 +340,7 @@ export default {
|
|
|
|
|
|
var formData = new FormData();
|
|
|
formData.append("tmplKey", self.tmplKey);
|
|
|
-
|
|
|
+
|
|
|
var startDate = "";
|
|
|
var endDate = "";
|
|
|
var timeRanges = self.queryModel.timeRanges + "";
|
|
@@ -301,12 +353,17 @@ export default {
|
|
|
|
|
|
formData.append("startDate", startDate);
|
|
|
formData.append("endDate", endDate);
|
|
|
+ formData.append("position1", self.queryModel.position1);
|
|
|
+ formData.append("position2", self.queryModel.position2);
|
|
|
+ formData.append("position3", self.queryModel.position3);
|
|
|
+ formData.append("position4", self.queryModel.position4);
|
|
|
+ formData.append("position5", self.queryModel.position5);
|
|
|
|
|
|
workAttendanceApi.exportXls(formData).then(function(response) {
|
|
|
var jsonData = response.data;
|
|
|
|
|
|
self.downloadLoading = false;
|
|
|
-
|
|
|
+
|
|
|
if (jsonData.result) {
|
|
|
self.$message({
|
|
|
type: "success",
|
|
@@ -328,20 +385,15 @@ export default {
|
|
|
var self = this;
|
|
|
var date = new Date();
|
|
|
date.setDate(1);
|
|
|
- var month = parseInt(date.getMonth() + 1)
|
|
|
- var startTime =
|
|
|
- date.getFullYear() + "-" + month + "-" + date.getDate();
|
|
|
+ var month = parseInt(date.getMonth() + 1);
|
|
|
+ var startTime = date.getFullYear() + "-" + month + "-" + date.getDate();
|
|
|
|
|
|
var lastDate = new Date();
|
|
|
//设置为第一天
|
|
|
lastDate.setDate(1);
|
|
|
- var lastMonth = parseInt(lastDate.getMonth() + 2)
|
|
|
+ var lastMonth = parseInt(lastDate.getMonth() + 2);
|
|
|
var endTime =
|
|
|
- lastDate.getFullYear() +
|
|
|
- "-" +
|
|
|
- lastMonth +
|
|
|
- "-" +
|
|
|
- lastDate.getDate();
|
|
|
+ lastDate.getFullYear() + "-" + lastMonth + "-" + lastDate.getDate();
|
|
|
self.queryModel.timeRanges = [startTime, endTime];
|
|
|
}
|
|
|
},
|