xiao547607 %!s(int64=5) %!d(string=hai) anos
pai
achega
7f0294057b

+ 14 - 3
src/views/base/personDeviceRelation-BoundList.vue

@@ -34,8 +34,20 @@
       >
         <el-table-column type="selection" width="55"></el-table-column>
         <el-table-column prop="deviceInfo.aliasName" label="设备名称" width="220"></el-table-column>
-        <el-table-column prop="personInfo.name" label="人员名称" width="180"></el-table-column>
-        <el-table-column prop="createTime" label="绑定时间" width="180"></el-table-column>
+        <el-table-column prop="personInfo.name" label="人员名称" width="120"></el-table-column>
+        <el-table-column prop="isWrite" label="照片是否存在" width="120">
+          <template slot-scope="{row}">
+            <div
+              v-if="row.isWrite"
+              style="border-radius: 30px;background-color:#67C23A;width:20px;height:20px;"
+            ></div>
+            <div
+              v-if="!row.isWrite"
+              style="border-radius: 30px;background-color:#F56C6C;width:20px;height:20px;"
+            ></div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="createTime" label="绑定时间" width="150"></el-table-column>
         <el-table-column label="操作">
           <template slot-scope="{row}">
             <el-button size="mini" type="danger" @click="handleDelete(row)">解除绑定</el-button>
@@ -123,7 +135,6 @@ export default {
           self.loading = false;
 
           var jsonData = response.data.data;
-
           self.tableData = jsonData.data;
           self.totalPages = jsonData.totalPages;
           self.totalElements = jsonData.recordsTotal;

+ 32 - 5
src/views/base/personDeviceRelation-list.vue

@@ -14,6 +14,29 @@
       <!--
       要resetFields起作用,必须配置:model和prop
       -->
+      <el-form
+        ref="queryForm"
+        :model="queryModel"
+        inline
+        class="demo-form-inline"
+        label-width="100px"
+      >
+        <el-form-item label="设备编号" prop="deviceNo">
+          <el-input type="text" size="mini" v-model="queryModel.deviceNo" style="width:120px;"></el-input>
+        </el-form-item>
+        <el-form-item label="设备名称" prop="deviceName">
+          <el-input type="text" size="mini" v-model="queryModel.deviceName" style="width:120px;"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            type="primary"
+            size="mini"
+            icon="ios-search"
+            @click="changePage(1)"
+            :loading="loading"
+          >查询</el-button>&nbsp;
+        </el-form-item>
+      </el-form>
       <el-divider></el-divider>
       <el-row class="button-group">
         <el-button
@@ -24,13 +47,13 @@
           :disabled="multipleSelection.length==0"
           @click="handleBatchBound"
         >批量绑定</el-button>
-        <el-button
+        <!-- <el-button
           type="primary"
           size="small"
           plain
           icon="el-icon-remove"
           @click="handleRemoveAll"
-        >解绑所有设备</el-button>
+        >解绑所有设备</el-button>-->
       </el-row>
       <el-table
         :data="tableData"
@@ -63,9 +86,9 @@
             <span v-if="!row.isBindPerson">
               <el-button size="mini" type="success" @click="handleBound(row)">绑定设备</el-button>
             </span>
-            <span v-else>
+            <!-- <span v-else>
               <el-button size="mini" type="danger" @click="handleDelete(row)">解除绑定</el-button>
-            </span>
+            </span>-->
           </template>
         </el-table-column>
       </el-table>
@@ -101,7 +124,8 @@ export default {
     return {
       formModel: {},
       queryModel: {
-        deviceId: "",
+        deviceNo: "",
+        deviceName: "",
         personId: ""
       },
       loading: false,
@@ -144,6 +168,9 @@ export default {
 
       formData.append("personId", self.personId);
 
+      formData.append("deviceNo", self.queryModel.deviceNo);
+      formData.append("deviceName", self.queryModel.deviceName);
+
       if (this.field != null) {
         formData.append("field", this.field);
       }

+ 92 - 60
src/views/base/personInfo-list.vue

@@ -85,6 +85,23 @@
           </el-select>
         </el-form-item>
       </div>
+      <div>
+        <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 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 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 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">
@@ -173,11 +190,11 @@
       <el-table-column prop="phone" label="手机号" width="180"></el-table-column>
       <el-table-column prop="idCard" label="身份证" width="100" show-overflow-tooltip></el-table-column>
       <el-table-column prop="deviceName" label="绑定设备" width="150" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="position1" :label="position1" width="250" v-if="position1Show"></el-table-column>
-      <el-table-column prop="position2" :label="position2" width="250" v-if="position2Show"></el-table-column>
-      <el-table-column prop="position3" :label="position3" width="250" v-if="position3Show"></el-table-column>
-      <el-table-column prop="position4" :label="position4" width="250" v-if="position4Show"></el-table-column>
-      <el-table-column prop="position5" :label="position5" width="250" v-if="position5Show"></el-table-column>
+      <el-table-column prop="position1" :label="position1" width="180" v-if="position1Show"></el-table-column>
+      <el-table-column prop="position2" :label="position2" width="180" v-if="position2Show"></el-table-column>
+      <el-table-column prop="position3" :label="position3" width="180" v-if="position3Show"></el-table-column>
+      <el-table-column prop="position4" :label="position4" width="180" v-if="position4Show"></el-table-column>
+      <el-table-column prop="position5" :label="position5" width="180" v-if="position5Show"></el-table-column>
       <el-table-column prop="openId" label="是否绑定公众号" width="180">
         <template slot-scope="{row}">{{row.openId == null ? "否" : "是"}}</template>
       </el-table-column>
@@ -450,7 +467,12 @@ export default {
         idCard: "",
         faceBound: "",
         isUploadPhoto: "",
-        subordinate: false
+        subordinate: false,
+        position1: "",
+        position2: "",
+        position3: "",
+        position4: "",
+        position5: ""
       },
       loading: false,
       tableData: [],
@@ -567,6 +589,12 @@ export default {
       formData.append("faceBound", self.queryModel.faceBound);
       formData.append("isUploadPhoto", self.queryModel.isUploadPhoto);
 
+      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);
+
       if (this.field != null) {
         formData.append("field", this.field);
       }
@@ -584,7 +612,7 @@ export default {
 
           self.tableData = jsonData.data;
           self.totalPages = jsonData.totalPages;
-          self.totalElements = jsonData.recordsTotal;          
+          self.totalElements = jsonData.recordsTotal;
           self.tableHeight = window.innerHeight - 320;
         })
         .catch(error => {
@@ -781,7 +809,12 @@ export default {
       formData.append("idCard", self.queryModel.idCard);
       formData.append("faceBound", self.queryModel.faceBound);
       formData.append("isUploadPhoto", self.queryModel.isUploadPhoto);
-
+      
+      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);
 
       self.xlsLoading = true;
 
@@ -790,11 +823,11 @@ export default {
         var jsonData = response.data;
         if (jsonData.result) {
           if (jsonData.data != null) {
-            //下载有错误信息提示的报表
             self.$message({
               showClose: true,
+              type: "success",
               dangerouslyUseHTMLString: true,
-              message: `<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
+              message: `报表已生成,<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
               duration: 30000
             });
           }
@@ -804,63 +837,62 @@ export default {
     enabledTo(row, type, value) {
       var self = this;
 
-      if(type=="wechatNotice"){
+      if (type == "wechatNotice") {
         var formData = new FormData();
         formData.append("id", row.id);
 
         personInfoApi.enabledWechatNotice(formData);
-      }
-      else{
-      this.$confirm("该操作会对设备上的信息进行操作,请确认?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      })
-        .then(() => {
-          //self.loading = true;
-          if (!self.disabled) {
-            var formData = new FormData();
-            formData.append("id", row.id);
-            if ("face" == type) {
-              personInfoApi.enabledFace(formData);
-            } else if ("card" == type) {
-              personInfoApi.enabledCard(formData);
-            } else if ("app" == type) {
-              personInfoApi.enabledApp(formData);
-            } else if ("guest" == type) {
-              personInfoApi.enabledGuest(formData);
-            }else if ("wechatNotice" == type) {
-              personInfoApi.enabledWechatNotice(formData);
-            }
+      } else {
+        this.$confirm("该操作会对设备上的信息进行操作,请确认?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(() => {
+            //self.loading = true;
+            if (!self.disabled) {
+              var formData = new FormData();
+              formData.append("id", row.id);
+              if ("face" == type) {
+                personInfoApi.enabledFace(formData);
+              } else if ("card" == type) {
+                personInfoApi.enabledCard(formData);
+              } else if ("app" == type) {
+                personInfoApi.enabledApp(formData);
+              } else if ("guest" == type) {
+                personInfoApi.enabledGuest(formData);
+              } else if ("wechatNotice" == type) {
+                personInfoApi.enabledWechatNotice(formData);
+              }
 
-            //关闭开关,是自动同步到服务器
-            //打开开关需要手动同步服务器
-            // if (!value) {
-            //   //如果是打开开关,则修改状态
-            //   row.faceBound = false;
-            // }
+              //关闭开关,是自动同步到服务器
+              //打开开关需要手动同步服务器
+              // if (!value) {
+              //   //如果是打开开关,则修改状态
+              //   row.faceBound = false;
+              // }
 
-            self.disabled = true;
+              self.disabled = true;
 
-            setTimeout(function() {
-              self.disabled = false;
-              //self.loading = false;
-            }, 1000); //一秒内不能重复点击
-          } else {
-            self.$message({
-              type: "success",
-              message: "操作过快!"
-            });
-          }
-        })
-        .catch(() => {
-          // self.loading = false;
-          if (row.faceEnabled) {
-            row.faceEnabled = false;
-          } else {
-            row.faceEnabled = true;
-          }
-        });
+              setTimeout(function() {
+                self.disabled = false;
+                //self.loading = false;
+              }, 1000); //一秒内不能重复点击
+            } else {
+              self.$message({
+                type: "success",
+                message: "操作过快!"
+              });
+            }
+          })
+          .catch(() => {
+            // self.loading = false;
+            if (row.faceEnabled) {
+              row.faceEnabled = false;
+            } else {
+              row.faceEnabled = true;
+            }
+          });
       }
     },
     uploadData(record) {

+ 143 - 91
src/views/business/workAttendance-list.vue

@@ -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>&nbsp;
-          <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>&nbsp;
+            <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];
     }
   },