Bläddra i källkod

Merge branch 'master' of http://47.92.161.104:10080/shuzhan/shinestar-portal

yanliming 4 år sedan
förälder
incheckning
bd37b848da

+ 29 - 0
src/App.vue

@@ -44,4 +44,33 @@ body{
 .el-table{
   margin-top:5px;
 }
+
+.role-permission {
+  .el-transfer-panel {
+    border: 1px solid #ebeef5;
+    border-radius: 4px;
+    overflow: hidden;
+    background: #fff;
+    display: inline-block;
+    vertical-align: middle;
+    width: 300px;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    position: relative;
+  }
+
+  .el-transfer__button {
+    display: block;
+    margin: 0 auto;
+    padding: 10px;
+    border-radius: 50%;
+    color: #fff;
+    background-color: #409eff;
+    font-size: 0;
+  }
+
+  .el-button+.el-button{
+    margin-left: 0px;
+  }
+}
 </style>

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

@@ -70,6 +70,10 @@ function bindDevice(formData) {
   return request.post(constant.serverUrl + "/base/companyInfo/bindDevice", formData);
 }
 
+function syncDevice(formData) {
+  return request.post(constant.serverUrl + "/base/companyInfo/syncDevice", formData);
+}
+
 function unbindDevice(formData) {
   return request.post(constant.serverUrl + "/base/companyInfo/unbindDevice", formData);
 }
@@ -93,5 +97,6 @@ function getCompanyName(formData) {
 
 export default {
   list, create, edit, add, update, remove, batchRemove, pageList, queryBindDeviceList,
-  bindDevice, unbindDevice,loadChildren,treeList,isOpenMobilePayment,departmentList,getCompanyName
+  bindDevice, unbindDevice,loadChildren,treeList,isOpenMobilePayment,departmentList,getCompanyName,
+  syncDevice
 }

+ 35 - 9
src/components/SelectTree/index.vue

@@ -84,17 +84,19 @@ export default {
     optionData() {
       //第一个节点为根节点
       if (this.options.length > 0) {
-        var rootId = this.options[0].id;
+        //var rootId = this.options[0].id;
 
         let cloneData = JSON.parse(JSON.stringify(this.options)); // 对源数据深度克隆
-        return cloneData.filter(father => {
-          // 循环所有项,并添加children属性
-          let branchArr = cloneData.filter(
-            child => father.id == child.parentId
-          ); // 返回每一项的子级数组
-          branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
-          return father.id == rootId || father.parentId == null; //返回第一层
-        });
+        
+        // return cloneData.filter(father => {
+        //   // 循环所有项,并添加children属性
+        //   let branchArr = cloneData.filter(
+        //     child => father.id == child.parentId
+        //   ); // 返回每一项的子级数组
+        //   branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        //   return father.id == rootId || father.parentId == null; //返回第一层
+        // });
+        return this.listToTree(cloneData);
       } else {
         return [];
       }
@@ -112,6 +114,30 @@ export default {
     this.initHandle();
   },
   methods: {
+    listToTree(list) { // 将普通列表转换为树结构的列表
+      if (!list || !list.length) {
+        return []
+      }
+      
+      let treeListMap = {};
+      
+      for (let item of list) {
+        treeListMap[item.id] = item
+      }
+
+      for (let i = 0; i < list.length; i++) {
+        if (list[i].parentId && treeListMap[list[i].parentId]) {
+          if (!treeListMap[list[i].parentId].children) {
+            treeListMap[list[i].parentId].children = []
+          }
+          treeListMap[list[i].parentId].children.push(list[i]);
+          list.splice(i, 1);
+          i--
+        }
+      }
+
+      return list;
+    },
     // 初始化值
     initHandle() {
       console.log("options.length=" + this.options.length);

+ 41 - 3
src/views/base/companyDeviceRelation-list.vue

@@ -1,13 +1,13 @@
 <template>
   <el-dialog
     :visible.sync="showDialog"
-    title="查看设备"
+    :title="title"
     append-to-body
     :modal="true"
     style="text-align:left;"
     @close="closeDialog"
     :close-on-click-modal="false"
-    width="60%"
+    width="1000px"
   >
     <div>
       <!--
@@ -68,6 +68,10 @@
             </span>
             <span v-else>
               <el-button size="mini" type="danger" @click="handleUnBound(row)">解除绑定</el-button>
+              &nbsp;
+              <el-button size="mini" type="primary" @click="handleSyncDevice(row,'all')">同步(所有人)</el-button>
+              &nbsp;
+              <el-button size="mini" type="primary" @click="handleSyncDevice(row,'bind')">同步(已绑定)</el-button>
             </span>
           </template>
         </el-table-column>
@@ -99,7 +103,7 @@ import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
 export default {
-  props: ["companyId"],
+  props: ["companyId","title"],
   data() {
     var self = this;
 
@@ -293,6 +297,40 @@ export default {
         });
       });
     },
+    handleSyncDevice(record,mode){
+      //同步照片
+      var self = this;
+
+      this.$confirm("是否将单位下人员照片同步到设备?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+        distinguishCancelAndClose: true
+      }).then(() => {
+        self.loading = true;
+        var formData = new FormData();
+        formData.append("companyId", self.companyId);
+        formData.append("deviceId", record.id);
+        formData.append("mode", mode);
+        
+        return companyInfoApi.syncDevice(formData).then(function(response) {
+          self.loading = false;
+          var jsonData = response.data;
+
+          if (jsonData.result) {
+            self.$message({
+              message: "已下发同步任务" + jsonData.data  + "个,请查看同步队列!",
+              type: "success"
+            });
+          } else {
+            self.$message({
+              message: jsonData.message + "",
+              type: "warning"
+            });
+          }
+        });
+      });
+    },
     onDetailModalClose(refreshed) {
       //保存成功后回调
       this.showModal = false;

+ 5 - 1
src/views/base/companyInfo-department-list.vue

@@ -271,6 +271,7 @@
       @close="onDetailModalClose"
     ></companyInfo-detail>
     <companyDeviceRelation-list
+      :title="deviceRelationTitle"
       v-if="showDeviceModal"
       :companyId="companyId"
       @close="onDetailModalClose"
@@ -392,7 +393,8 @@ export default {
       },
       xlsLoading: false,
       sceneData: [],
-      typeData:[]
+      typeData:[],
+      deviceRelationTitle: ""
     };
   },
   created() {
@@ -599,6 +601,8 @@ export default {
     bindDevice(record) {
       //绑定设备
       this.companyId = record.id;
+      this.deviceRelationTitle = record.name + "关联设备列表";
+
       this.showDeviceModal = true;
     },
     openQRCode(record) {

+ 7 - 1
src/views/base/companyInfo-list.vue

@@ -271,6 +271,7 @@
       @close="onDetailModalClose"
     ></companyInfo-detail>
     <companyDeviceRelation-list
+      :title="deviceRelationTitle"
       v-if="showDeviceModal"
       :companyId="companyId"
       @close="onDetailModalClose"
@@ -392,7 +393,8 @@ export default {
       },
       xlsLoading: false,
       sceneData: [],
-      typeData:[]
+      typeData:[],
+      deviceRelationTitle: ""
     };
   },
   created() {
@@ -599,6 +601,10 @@ export default {
     bindDevice(record) {
       //绑定设备
       this.companyId = record.id;
+      this.deviceRelationTitle = record.name + "关联设备列表";
+      
+      console.log(this.deviceRelationTitle);
+
       this.showDeviceModal = true;
     },
     openQRCode(record) {

+ 5 - 0
src/views/base/devicePhoto-list.vue

@@ -38,6 +38,11 @@
                         </div>
                     </template>
                 </el-table-column>
+                <el-table-column
+                    prop="PersonID"
+                    label="编号"
+                    width="100">
+                </el-table-column>
                 <el-table-column
                     prop="PersonName"
                     label="姓名"

+ 37 - 24
src/views/base/personInfo-list.vue

@@ -662,7 +662,7 @@
             >点击下载模板</el-link
           >
         </el-form-item>
-        <el-form-item label="单位">
+        <!-- <el-form-item label="单位">
           <el-select-tree
             size="large"
             :props="props"
@@ -671,7 +671,7 @@
             height="200"
             width="300px"
           ></el-select-tree>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="用户身份" prop="personRoleId">
           <el-select
             filterable
@@ -876,7 +876,7 @@ export default {
       uploadUrlXls: Constant.serverUrl + "/base/personInfo/importXls",
       uploadXlsData: {
         subFolder: "company",
-        companyId: "",
+        // companyId: "",
         personRoleId: ""
       },
       personRoleResult: [],
@@ -924,24 +924,24 @@ export default {
     };
   },
   watch: {
-    "uploadXlsData.companyId":function(newVal,oldVal){
-        var self = this;
-
-        if(newVal!=null){
-          var formData = new FormData();
-          formData.append("companyId", newVal);
-
-          //查询单位下角色
-          personRoleInfoApi.listByCompanyId(formData)
-          .then(response=>{
-              var jsonData = response.data;
-
-              if (jsonData.result) {
-                self.personRoleResult = jsonData.data;
-              }
-          })
-        }
-    },
+    // "uploadXlsData.companyId":function(newVal,oldVal){
+    //     var self = this;
+
+    //     if(newVal!=null){
+    //       var formData = new FormData();
+    //       formData.append("companyId", newVal);
+
+    //       //查询单位下角色
+    //       personRoleInfoApi.listByCompanyId(formData)
+    //       .then(response=>{
+    //           var jsonData = response.data;
+
+    //           if (jsonData.result) {
+    //             self.personRoleResult = jsonData.data;
+    //           }
+    //       })
+    //     }
+    // },
     "queryModel.parentId": function (val, oldval) {
       if (val != null && val != "") {
         var self = this;
@@ -1015,6 +1015,19 @@ export default {
       }
     });
 
+    var formData5 = new FormData();
+    formData5.append("sceneId", "1");
+
+    //查询单位下角色
+    personRoleInfoApi.findBySceneId(formData5)
+    .then(response=>{
+        var jsonData = response.data;
+
+        if (jsonData.result) {
+          self.personRoleResult = jsonData.data;
+        }
+    })
+
     this.loadTree();
   },
   methods: {
@@ -1240,12 +1253,12 @@ export default {
     beforeUpload(file, fileList) {
       //导入前判断
       var self = this;
-      var companyId = self.uploadXlsData.companyId;
+      var personRoleId = self.uploadXlsData.personRoleId;
 
-      if (companyId==null || companyId.length==0) {
+      if (personRoleId==null || personRoleId.length==0) {
         self.$message({
           type: "warning",
-          message: "请选择单位!",
+          message: "请选择用户身份!",
         });
         self.xlsLoading = false;
         return false;

+ 2 - 0
src/views/base/personRoleInfo-icon.vue

@@ -161,4 +161,6 @@ export default {
   justify-content: center; /* 水平居中 */
   align-items: center;     /* 垂直居中 */
 }
+
+
 </style>

+ 1 - 0
src/views/base/workPersonScheduling-change.vue

@@ -48,6 +48,7 @@
             <el-form-item label="员工" prop="personId">
               <el-select
                 filterable
+                multiple
                 v-model="queryModel.personId"
                 clearable
                 size="mini"

+ 6 - 3
src/views/base/workPersonScheduling-list.vue

@@ -94,15 +94,18 @@
         type="index"
         label="序号"
         :index="indexMethod"
+        fixed="left"
         width="50"
       ></el-table-column>
       <el-table-column
         prop="companyName"
         label="部门"
-        width="90"
+        width="120"
+        show-overflow-tooltip
+        fixed="left"
       ></el-table-column>
-      <el-table-column prop="id" label="编号" width="90"></el-table-column>
-      <el-table-column prop="name" label="名称" width="150"></el-table-column>
+      <el-table-column prop="id" label="编号" width="90" fixed="left"></el-table-column>
+      <el-table-column prop="name" label="名称" width="90" fixed="left"></el-table-column>
       <template v-for="col in dayList">
         <el-table-column
           :label="col.day + ''"

+ 18 - 8
src/views/business/workScheduleAttendance-day-list.vue

@@ -72,24 +72,33 @@
         prop="shiftNumbers"
         label="班次"
         width="180"
-      ></el-table-column>
+      >
+      <template slot-scope="{ row }">
+          <span v-if="row.onWorkStatus != 1 && row.onWorkStatus != 1">
+            {{row.onWorkStatusN}}
+          </span>
+          <span v-else>
+            {{row.shiftNumbers}}
+          </span>
+      </template>
+      </el-table-column>
       <el-table-column prop="onWorkResult" label="上班" width="180">
         <template slot-scope="{ row }">
           <span v-if="row.onWorkStatus == 1 && row.onWorkResult == 1">
             <el-image
               style="width: 40px; height: 40px"
               src="http://rccs.oss-cn-hangzhou.aliyuncs.com/jp_housekeeper/img/work_yes.png"
-              :fit="fit"
+              fit="fill"
             ></el-image>
           </span>
           <span v-else-if="row.onWorkStatus == 1 && row.onWorkResult != 1">
             <el-image
               style="width: 40px; height: 40px"
               src="http://rccs.oss-cn-hangzhou.aliyuncs.com/jp_housekeeper/img/work_no.png"
-              :fit="fit"
+              fit="fill"
             ></el-image>
           </span>
-          <span v-else>{{ row.onWorkStatusN }}</span>
+          <span v-else></span>
         </template>
       </el-table-column>
       <el-table-column prop="offWorkResult" label="下班" width="180">
@@ -98,17 +107,17 @@
             <el-image
               style="width: 40px; height: 40px"
               src="http://rccs.oss-cn-hangzhou.aliyuncs.com/jp_housekeeper/img/work_yes.png"
-              :fit="fit"
+              fit="fill"
             ></el-image>
           </span>
           <span v-else-if="row.offWorkStatus == 1 && row.offWorkResult != 1">
             <el-image
               style="width: 40px; height: 40px"
               src="http://rccs.oss-cn-hangzhou.aliyuncs.com/jp_housekeeper/img/work_no.png"
-              :fit="fit"
+              fit="fill"
             ></el-image>
           </span>
-          <span v-else>{{ row.offWorkStatusN }}</span>
+          <span v-else></span>
         </template>
       </el-table-column>
       <el-table-column
@@ -245,7 +254,8 @@ export default {
     var personId = this.$route.query.personId;
     var timeRanges = this.$route.query.timeRanges;
     this.queryModel.personId = personId;
-    this.queryModel.timeRanges = timeRanges;
+    let tims = timeRanges.split(",");
+    this.queryModel.timeRanges = [tims[0],tims[1]]
 
     this.changePage();
   },

+ 3 - 3
src/views/business/workScheduleAttendance-list.vue

@@ -16,6 +16,7 @@
     <el-form
       ref="queryForm"
       :model="queryModel"
+      :rules="ruleValidate"
       inline
       class="demo-form-inline"
     >
@@ -126,11 +127,11 @@
         label="迟到次数"
         width="120"
       ></el-table-column>
-      <el-table-column
+      <!-- <el-table-column
         prop="leaveEarlyMinutes"
         label="早退分钟"
         width="120"
-      ></el-table-column>
+      ></el-table-column> -->
       <el-table-column
         prop="leaveEarlyNum"
         label="早退次数"
@@ -397,7 +398,6 @@ export default {
     },
     handleQuery() {
       var self = this;
-
       this.$refs["queryForm"].validate((valid) => {
         if (valid) {
           self.changePage(1);