Browse Source

sz 单位列表树修改

xiao547607 5 years ago
parent
commit
97958afc0f

+ 2 - 0
src/main.js

@@ -11,11 +11,13 @@ import 'quill/dist/quill.core.css';
 import 'quill/dist/quill.snow.css';
 import 'quill/dist/quill.bubble.css';
 import ConfirmPlugin from '@/plugins/ConfirmPlugin'
+import CompanyTree from '@/plugins/CompanyTree'
 
 Vue.config.productionTip = false
 Vue.use(AxiosPlugin);
 Vue.use(VueQuillEditor);
 //Vue.use(ConfirmPlugin);
+//Vue.use(CompanyTree);
 
 Vue.prototype.$echarts = echarts
 

+ 25 - 0
src/plugins/CompanyTree.js

@@ -0,0 +1,25 @@
+import companyInfoApi from "@/api/base/companyInfo";
+
+export default {
+  install(Vue) {
+    Vue.prototype.$cloneData = (title, content, callback) => {
+      var companyResult = "";
+
+      companyInfoApi.list().then(function (response) {
+        var jsonData = response.data;
+        if (jsonData.result) {
+          companyResult = jsonData.data;
+        }
+      });
+
+      let cloneData = JSON.parse(JSON.stringify(companyResult)); // 对源数据深度克隆
+      cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+      return cloneData;
+    };
+  }
+}

+ 104 - 25
src/views/base/alarmConfig-detail.vue

@@ -17,14 +17,21 @@
     <div class="user-panel" v-loading="loading">
       <el-form ref="form" :model="formModel" :rules="ruleValidate" :label-width="'150px'">
         <el-form-item label="考勤单位" prop="companyId">
-          <el-select v-model="formModel.companyId" filterable placeholder="请选择" style="width:100% ">
+          <!-- <el-select v-model="formModel.companyId" filterable placeholder="请选择" style="width:100% ">
             <el-option
               v-for="company in companyResult"
               :key="company.id"
               :label="company.name"
               :value="company.id"
             ></el-option>
-          </el-select>
+          </el-select>-->
+          <el-select-tree
+            :props="props"
+            :options="optionData"
+            :value="formModel.companyId"
+            @getValue="getSelectedValue($event)"
+            height="200"
+          ></el-select-tree>
         </el-form-item>
         <el-form-item label="是否包含下级单位" prop="subordinate">
           <el-radio v-model="formModel.subordinate" :label="true">是</el-radio>
@@ -96,6 +103,7 @@
 import Constant from "@/constant";
 import alarmConfigApi from "@/api/base/alarmConfig";
 import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 import { quillEditor } from "vue-quill-editor";
 
 export default {
@@ -110,31 +118,94 @@ export default {
       submitting: false,
       formModel: {},
       rangeTime: "",
-      options:[{
-        value:'1',
-        label:'周一'
-      },{
-        value:'2',
-        label:'周二'
-      },{
-        value:'3',
-        label:'周三'
-      },{
-        value:'4',
-        label:'周四'
-      },{
-        value:'5',
-        label:'周五'
-      },{
-        value:'6',
-        label:'周六'
-      },{
-        value:'7',
-        label:'周七'
-      }]
+      options: [
+        {
+          value: "1",
+          label: "周一"
+        },
+        {
+          value: "2",
+          label: "周二"
+        },
+        {
+          value: "3",
+          label: "周三"
+        },
+        {
+          value: "4",
+          label: "周四"
+        },
+        {
+          value: "5",
+          label: "周五"
+        },
+        {
+          value: "6",
+          label: "周六"
+        },
+        {
+          value: "7",
+          label: "周七"
+        }
+      ],
+
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
+  created() {
+    this.loadTree();
+  },
   methods: {
+    getSelectedValue(value) {
+      this.formModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     closeDialog() {
       this.$emit("close", false);
     },
@@ -150,6 +221,10 @@ export default {
             self.formModel.weekdays = weekdays;
             self.loading = true;
 
+            if (self.formModel.companyId == null) {
+              self.formModel.companyId = "";
+            }
+
             if (id == null || id.length == 0) {
               return alarmConfigApi.add(self.formModel);
             } else {
@@ -157,7 +232,7 @@ export default {
             }
           })().then(function(response) {
             self.loading = false;
-            
+
             var jsonData = response.data;
 
             if (jsonData.result) {
@@ -210,6 +285,10 @@ export default {
       .catch(error => {
         self.$message.error(error + "");
       });
+  },
+
+  components: {
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 70 - 13
src/views/base/alarmConfig-list.vue

@@ -15,7 +15,7 @@
     -->
     <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
       <el-form-item label="单位" prop="companyId">
-        <el-select
+        <!-- <el-select
           v-model="queryModel.companyId"
           size="mini"
           filterable
@@ -28,7 +28,14 @@
             :label="company.name"
             :value="company.id"
           ></el-option>
-        </el-select>
+        </el-select>-->
+        <el-select-tree
+          :props="props"
+          :options="optionData"
+          :value="queryModel.companyId"
+          @getValue="getSelectedValue($event)"
+          height="200"
+        ></el-select-tree>
       </el-form-item>
       <el-form-item>
         <el-button
@@ -38,12 +45,6 @@
           @click="changePage(1)"
           :loading="loading"
         >查询</el-button>&nbsp;
-        <el-button
-          type="info"
-          size="mini"
-          style="margin-left: 8px"
-          @click="handleReset('queryForm')"
-        >重置</el-button>&nbsp;
       </el-form-item>
     </el-form>
     <el-divider></el-divider>
@@ -117,6 +118,7 @@ import Constant from "@/constant";
 import alarmConfigDetail from "./alarmConfig-detail";
 import alarmConfigApi from "@/api/base/alarmConfig";
 import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
@@ -142,17 +144,65 @@ export default {
       showModal: false,
       modalTitle: "",
       businessKey: "",
-      companyResult:""
+      companyResult: [],
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     this.tableHeight = window.innerHeight - 280;
-  },
-
-  components: {
-    "alarmConfig-detail": alarmConfigDetail
+    this.loadTree();
   },
   methods: {
+    getSelectedValue(value) {
+      this.queryModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     changePage(pageIndex) {
       var self = this;
 
@@ -164,6 +214,9 @@ export default {
       formData.append("pageIndex", self.pageIndex);
       formData.append("pageSize", self.pageSize);
 
+      if (self.queryModel.companyId == null) {
+        self.queryModel.companyId = "";
+      }
       formData.append("companyId", self.queryModel.companyId);
 
       if (this.field != null) {
@@ -286,6 +339,10 @@ export default {
         self.companyResult = jsonData.data;
       }
     });
+  },
+  components: {
+    "alarmConfig-detail": alarmConfigDetail,
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 72 - 5
src/views/base/companyInfo-detail.vue

@@ -30,7 +30,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="上级单位" prop="parentId">
-              <el-select
+              <!-- <el-select
                 v-model="formModel.parentId"
                 filterable
                 placeholder="请选择"
@@ -42,7 +42,14 @@
                   :label="company.name"
                   :value="company.id"
                 ></el-option>
-              </el-select>
+              </el-select>-->
+              <el-select-tree
+                :props="props"
+                :options="optionData"
+                :value="formModel.parentId"
+                @getValue="getSelectedValue($event)"
+                height="200"
+              ></el-select-tree>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -140,8 +147,10 @@
 import Constant from "@/constant";
 import companyInfoApi from "@/api/base/companyInfo";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
+import SelectTree from "@/components/SelectTree";
+
 import { getToken } from "@/utils/auth"; // get token from cookie
- 
+
 export default {
   props: ["businessKey", "title"],
   data() {
@@ -166,9 +175,28 @@ export default {
         Authorization: getToken()
       },
       companyResult: [],
-      typeData: []
+      typeData: [],
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     var self = this;
     companyInfoApi.list().then(function(response) {
@@ -180,12 +208,43 @@ export default {
 
     var formData = new FormData();
     formData.append("catalogName", "单位性质");
-    return dataDictionaryApi.findByCatalogName(formData).then(response => {
+    dataDictionaryApi.findByCatalogName(formData).then(response => {
       var jsonData = response.data;
       this.typeData = jsonData.data;
     });
+
+    this.loadTree();
   },
   methods: {
+    getSelectedValue(value) {
+      this.formModel.parentId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     closeDialog() {
       this.$emit("close", false);
     },
@@ -196,6 +255,11 @@ export default {
         if (valid) {
           (function() {
             var id = self.formModel.id;
+
+            if (self.formModel.parentId == null) {
+              self.formModel.parentId = "";
+            }
+
             if (id == null || id.length == 0) {
               return companyInfoApi.add(self.formModel);
             } else {
@@ -269,6 +333,9 @@ export default {
       .catch(error => {
         self.$message.error(error + "");
       });
+  },
+  components: {
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 75 - 8
src/views/base/deviceInfo-detail.vue

@@ -18,7 +18,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="单位" prop="companyId">
-              <el-select
+              <!-- <el-select
                 v-model="formModel.companyId"
                 filterable
                 placeholder="请选择"
@@ -30,7 +30,14 @@
                   :label="company.name"
                   :value="company.id"
                 ></el-option>
-              </el-select>
+              </el-select>-->
+              <el-select-tree
+                :props="props"
+                :options="optionData"
+                :value="formModel.companyId"
+                @getValue="getSelectedValue($event)"
+                height="200"
+              ></el-select-tree>&nbsp;
             </el-form-item>
           </el-col>
         </el-row>
@@ -83,11 +90,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="开锁密码" prop="unlockPassword">
-              <el-input
-                v-model="formModel.unlockPassword"
-                placeholder="请输入开锁密码"
-                style="width:80%"
-              ></el-input>
+              <el-input v-model="formModel.unlockPassword" placeholder="请输入开锁密码" style="width:80%"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
@@ -109,6 +112,8 @@
 <script>
 import Constant from "@/constant";
 import deviceInfoApi from "@/api/base/deviceInfo";
+import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 
 export default {
   props: ["businessKey", "title", "typeData", "companyResult"],
@@ -141,10 +146,64 @@ export default {
       showDialog: true,
       loading: false,
       submitting: false,
-      canQuery: true
+      canQuery: true,
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
+  created() {
+    this.loadTree();
+  },
   methods: {
+    getSelectedValue(value) {
+      this.formModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     closeDialog() {
       this.$emit("close", false);
     },
@@ -156,6 +215,10 @@ export default {
           (function() {
             var id = self.formModel.id;
 
+            if (self.formModel.companyId == null) {
+              self.formModel.companyId = "";
+            }
+
             if (id == null || id.length == 0) {
               return deviceInfoApi.add(self.formModel);
             } else {
@@ -228,6 +291,10 @@ export default {
       .catch(error => {
         self.$message.error(error + "");
       });
+  },
+
+  components: {
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 71 - 6
src/views/base/deviceInfo-list.vue

@@ -15,7 +15,7 @@
     -->
     <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
       <el-form-item label="所属单位" prop="companyId">
-        <el-select
+        <!-- <el-select
           v-model="queryModel.companyId"
           size="mini"
           filterable
@@ -28,7 +28,14 @@
             :label="company.name"
             :value="company.id"
           ></el-option>
-        </el-select>
+        </el-select>-->
+        <el-select-tree
+          :props="props"
+          :options="optionData"
+          :value="queryModel.companyId"
+          @getValue="getSelectedValue($event)"
+          height="200"
+        ></el-select-tree>&nbsp;
       </el-form-item>
       <el-form-item label="设备编号" prop="deviceNo">
         <el-input type="text" size="mini" v-model="queryModel.deviceNo"></el-input>
@@ -262,6 +269,7 @@ import DeviceInfoDetail from "./deviceInfo-detail";
 import deviceInfoApi from "@/api/base/deviceInfo";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
 import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
@@ -297,7 +305,7 @@ export default {
       modalTitle: "",
       businessKey: "",
       typeData: [],
-      companyResult: "",
+      companyResult: [],
       tableHeight: "",
       dialogVisible: false,
       ruleDeviceId: "",
@@ -312,20 +320,72 @@ export default {
         maximum: "",
         preAlarmOffset: "",
         alarmThreshold: ""
+      },
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
       }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     this.tableHeight = window.innerHeight - 280;
 
     var formData = new FormData();
     formData.append("catalogName", "设备类型");
-    return dataDictionaryApi.findByCatalogName(formData).then(response => {
+    dataDictionaryApi.findByCatalogName(formData).then(response => {
       var jsonData = response.data;
       this.typeData = jsonData.data;
     });
+    this.loadTree();
   },
   methods: {
+    getSelectedValue(value) {
+      this.queryModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     changePage(pageIndex) {
       var self = this;
 
@@ -339,7 +399,11 @@ export default {
 
       formData.append("deviceNo", self.queryModel.deviceNo);
       formData.append("aliasName", self.queryModel.aliasName);
-      formData.append("companyId", self.queryModel.companyId);
+      var companyId = self.queryModel.companyId;
+      if (companyId == null) {
+        companyId = "";
+      }
+      formData.append("companyId", companyId);
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -543,7 +607,8 @@ export default {
     });
   },
   components: {
-    "deviceInfo-detail": DeviceInfoDetail
+    "deviceInfo-detail": DeviceInfoDetail,
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 75 - 5
src/views/base/personDeviceLog-list.vue

@@ -44,7 +44,7 @@
       </div>
       <div>
         <el-form-item label="单位" prop="companyId">
-          <el-select
+          <!-- <el-select
             v-model="queryModel.companyId"
             size="mini"
             filterable
@@ -57,7 +57,14 @@
               :label="company.name"
               :value="company.id"
             ></el-option>
-          </el-select>&nbsp;
+          </el-select>&nbsp;-->
+          <el-select-tree
+            :props="props"
+            :options="optionData"
+            :value="queryModel.companyId"
+            @getValue="getSelectedValue($event)"
+            height="200"
+          ></el-select-tree>&nbsp;
           <el-checkbox v-model="queryModel.subordinate">是否包含下级单位</el-checkbox>
           <el-checkbox v-model="queryModel.distinct">是否去重</el-checkbox>
         </el-form-item>
@@ -157,6 +164,7 @@
 import Constant from "@/constant";
 import personDeviceLogApi from "@/api/base/personDeviceLog";
 import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
@@ -179,7 +187,7 @@ export default {
         temperatureRanges: "",
         matchMsg: "",
         companyId: "",
-        subordinate:false,
+        subordinate: false,
         distinct: false
       },
       loading: false,
@@ -198,9 +206,28 @@ export default {
       downloadLoading: false,
       tableHeight: "",
       timeRangesDefaultTime: [],
-      companyResult: ""
+      companyResult: [],
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     var self = this;
     this.getCurrentMonthFirst();
@@ -213,8 +240,42 @@ export default {
         }
       }
     });
+
+    this.loadTree();
   },
   methods: {
+    getSelectedValue(value) {
+      this.queryModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     changePage(pageIndex) {
       var self = this;
 
@@ -235,6 +296,9 @@ export default {
       formData.append("position", self.queryModel.position);
       formData.append("matchMsg", self.queryModel.matchMsg);
 
+      if(self.queryModel.companyId == null){
+        self.queryModel.companyId = "";
+      }
       formData.append("companyId", self.queryModel.companyId);
       formData.append("subordinate", self.queryModel.subordinate);
       formData.append("distinct", self.queryModel.distinct);
@@ -285,7 +349,7 @@ export default {
       this.$refs[name].resetFields();
       this.queryModel.timeRanges = "";
       this.queryModel.temperatureEnd = "";
-      this.queryModel.subordinate =false;
+      this.queryModel.subordinate = false;
       this.queryModel.distinct = false;
     },
     onDetailModalClose(refreshed) {
@@ -308,6 +372,9 @@ export default {
       formData.append("personName", self.queryModel.personName);
       formData.append("deviceNo", self.queryModel.deviceNo);
       formData.append("aliasName", self.queryModel.aliasName);
+      if(self.queryModel.companyId == null){
+        self.queryModel.companyId = "";
+      }
       formData.append("companyId", self.queryModel.companyId);
       formData.append("position", self.queryModel.position);
 
@@ -356,6 +423,9 @@ export default {
   },
   mounted: function() {
     this.changePage(1);
+  },
+  components: {
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 89 - 6
src/views/base/personInfo-detail.vue

@@ -18,7 +18,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="单位" prop="companyId">
-              <el-select
+              <!-- <el-select
                 v-model="formModel.companyId"
                 filterable
                 placeholder="请选择"
@@ -30,7 +30,14 @@
                   :label="company.name"
                   :value="company.id"
                 ></el-option>
-              </el-select>
+              </el-select>-->
+              <el-select-tree
+                :props="props"
+                :options="optionData"
+                :value="formModel.companyId"
+                @getValue="getSelectedValue($event)"
+                height="200"
+              ></el-select-tree>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -88,6 +95,13 @@
                   :value="company.id"
                 ></el-option>
               </el-select>
+              <!-- <el-select-tree
+                :props="props"
+                :options="optionData"
+                :value="formModel.personCompany"
+                @getValue="getSelectedValue($event)"
+                height="200"
+              ></el-select-tree>-->
             </el-form-item>
           </el-col>
         </el-row>
@@ -194,6 +208,8 @@ import Constant from "@/constant";
 import personInfoApi from "@/api/base/personInfo";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
 import personCompanyApi from "@/api/base/personCompany";
+import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 
 import { getToken } from "@/utils/auth"; // get token from cookie
 
@@ -250,18 +266,68 @@ export default {
       headers: {
         Authorization: getToken()
       },
-      popedomList: []
+      popedomList: [],
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     var formData = new FormData();
     formData.append("catalogName", "用户身份");
-    return dataDictionaryApi.findByCatalogName(formData).then(response => {
+    dataDictionaryApi.findByCatalogName(formData).then(response => {
       var jsonData = response.data;
       this.popedomList = jsonData.data;
     });
+
+    this.loadTree();
   },
   methods: {
+    getSelectedValue(value) {
+      this.formModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     closeDialog() {
       this.$emit("close", false);
     },
@@ -274,15 +340,29 @@ export default {
             var id = self.formModel.id;
             //数组转换为字符串
             //用户身份
-            if (self.formModel.popedom!=null && self.formModel.popedom != "") {
+            if (
+              self.formModel.popedom != null &&
+              self.formModel.popedom != ""
+            ) {
               var popedom = self.formModel.popedom.join(",");
               self.formModel.popedom = popedom;
+            } else {
+              self.formModel.popedom = "";
             }
 
             //子单位
-            if (self.formModel.personCompany!=null && self.formModel.personCompany != "") {
+            if (
+              self.formModel.personCompany != null &&
+              self.formModel.personCompany != ""
+            ) {
               var personCompany = self.formModel.personCompany.join(",");
               self.formModel.personCompany = personCompany;
+            } else {
+              self.formModel.personCompany = "";
+            }
+
+            if (self.formModel.companyId == null) {
+              self.formModel.companyId = "";
             }
 
             if (id == null || id.length == 0) {
@@ -377,6 +457,9 @@ export default {
       .catch(error => {
         self.$message.error(error + "");
       });
+  },
+  components: {
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 76 - 4
src/views/base/personInfo-list.vue

@@ -42,7 +42,7 @@
       </div>
       <div>
         <el-form-item label="单位" prop="companyCode">
-          <el-select
+          <!-- <el-select
             v-model="queryModel.companyCode"
             size="mini"
             filterable
@@ -55,7 +55,14 @@
               :label="company.name"
               :value="company.code"
             ></el-option>
-          </el-select>&nbsp;
+          </el-select>-->
+          <el-select-tree
+            :props="props"
+            :options="optionData"
+            :value="queryModel.parentId"
+            @getValue="getSelectedValue($event)"
+            height="200"
+          ></el-select-tree>&nbsp;
           <el-checkbox v-model="queryModel.subordinate">是否包含下级单位</el-checkbox>
         </el-form-item>
         <el-form-item label="是否上传照片" prop="companyId">
@@ -459,6 +466,7 @@ import companyInfoApi from "@/api/base/companyInfo";
 import companyPositionApi from "@/api/base/companyPosition";
 import deviceInfoApi from "@/api/base/deviceInfo";
 import personDeviceRelationApi from "@/api/base/personDeviceRelation";
+import SelectTree from "@/components/SelectTree";
 
 import { getToken } from "@/utils/auth"; // get token from cookie
 import NProgress from "nprogress"; // progress bar
@@ -471,6 +479,7 @@ export default {
     return {
       queryModel: {
         companyCode: "",
+        parentId: "",
         name: "",
         phone: "",
         idCard: "",
@@ -530,9 +539,28 @@ export default {
       boundUnDeviceId: "",
       xlsLoading: false,
       tableHeight: "",
-      boundDeviceDisabled: false
+      boundDeviceDisabled: false,
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     var self = this;
 
@@ -577,8 +605,42 @@ export default {
         self.position5Show = true;
       }
     });
+
+    this.loadTree();
   },
   methods: {
+    getSelectedValue(value) {
+      this.queryModel.parentId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     changePage(pageIndex) {
       var self = this;
 
@@ -590,7 +652,12 @@ export default {
       formData.append("pageIndex", self.pageIndex);
       formData.append("pageSize", self.pageSize);
 
+      if (self.queryModel.parentId == null) {
+        self.queryModel.parentId = "";
+      }
       formData.append("companyCode", self.queryModel.companyCode);
+      formData.append("parentId", self.queryModel.parentId);
+
       formData.append("subordinate", self.queryModel.subordinate);
 
       formData.append("name", self.queryModel.name);
@@ -813,7 +880,11 @@ export default {
       var self = this;
       var formData = new FormData();
 
+      if (self.queryModel.parentId == null) {
+        self.queryModel.parentId = "";
+      }
       formData.append("companyCode", self.queryModel.companyCode);
+      formData.append("parentId", self.queryModel.parentId);
       formData.append("subordinate", self.queryModel.subordinate);
 
       formData.append("name", self.queryModel.name);
@@ -1116,7 +1187,8 @@ export default {
   components: {
     "personInfo-detail": PersonInfoDetail,
     "personDeviceRelation-list": PersonDeviceRelationList,
-    "personDeviceRelation-BoundList": PersonDeviceRelationBoundList
+    "personDeviceRelation-BoundList": PersonDeviceRelationBoundList,
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 96 - 31
src/views/base/warningPusher-detail.vue

@@ -18,7 +18,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="单位" prop="companyId">
-              <el-select
+              <!-- <el-select
                 v-model="formModel.companyId"
                 filterable
                 placeholder="请选择"
@@ -30,25 +30,33 @@
                   :label="company.name"
                   :value="company.id"
                 ></el-option>
-              </el-select>
+              </el-select>-->
+              <el-select-tree
+                :props="props"
+                :options="optionData"
+                :value="formModel.companyId"
+                @getValue="getSelectedValue($event)"
+                height="200"
+              ></el-select-tree>
             </el-form-item>
-          </el-col>          
+          </el-col>
           <el-col :span="12">
             <el-form-item label="现有人员查询">
               <el-select
-                  v-model="selectedPerson"
-                  filterable
-                  remote
-                  placeholder="请输入人员姓名"
-                  :remote-method="queryPersonList"
-                  @change="selectPerson"
-                  :loading="loading">
+                v-model="selectedPerson"
+                filterable
+                remote
+                placeholder="请输入人员姓名"
+                :remote-method="queryPersonList"
+                @change="selectPerson"
+                :loading="loading"
+              >
                 <el-option
                   v-for="person in personList"
                   :key="person.id"
                   :label="person.name + '-' + person.phone"
-                  :value="person">
-                </el-option>
+                  :value="person"
+                ></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -75,12 +83,7 @@
         <el-row>
           <el-col :span="24">
             <el-form-item label="备注" prop="remark">
-              <el-input
-                type="textarea"
-                v-model="formModel.remark"
-                :rows="2"
-                placeholder="请输入备注"
-              ></el-input>
+              <el-input type="textarea" v-model="formModel.remark" :rows="2" placeholder="请输入备注"></el-input>
             </el-form-item>
           </el-col>
         </el-row>
@@ -97,7 +100,7 @@
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="24">            
+          <el-col :span="24">
             <el-form-item label="未测温提醒" prop="missingNoticeEnabled">
               <el-radio v-model="formModel.missingNoticeEnabled" :label="true">开</el-radio>
               <el-radio v-model="formModel.missingNoticeEnabled" :label="false">关</el-radio>
@@ -116,6 +119,8 @@
 import Constant from "@/constant";
 import warningPusherApi from "@/api/base/warningPusher";
 import personInfoApi from "@/api/base/personInfo";
+import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 
 export default {
   props: ["businessKey", "title", "companyResult"],
@@ -167,11 +172,67 @@ export default {
       loading: false,
       submitting: false,
       canQuery: true,
-      personList:[],
-      selectedPerson: {}
+      personList: [],
+      selectedPerson: {},
+      tableHeight: "",
+      qrcodeImg: "",
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
+  created() {
+    this.loadTree();
+  },
   methods: {
+    getSelectedValue(value) {
+      this.formModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     closeDialog() {
       this.$emit("close", false);
     },
@@ -182,6 +243,9 @@ export default {
         if (valid) {
           (function() {
             var id = self.formModel.id;
+            if (self.formModel.companyId == null) {
+              self.formModel.companyId = "";
+            }
 
             if (id == null || id.length == 0) {
               return warningPusherApi.add(self.formModel);
@@ -210,7 +274,7 @@ export default {
         }
       });
     },
-    queryPersonList(query){
+    queryPersonList(query) {
       var formData = new FormData();
       formData.append("companyId", this.formModel.companyId);
       formData.append("name", query);
@@ -218,17 +282,15 @@ export default {
       formData.append("pageIndex", 1);
       formData.append("pageSize", 20);
 
-      personInfoApi
-        .pageList(formData)
-        .then(response=>{
-           var jsonData = response.data;
+      personInfoApi.pageList(formData).then(response => {
+        var jsonData = response.data;
 
-           if(jsonData.result){
-             this.personList = jsonData.data.data;
-           }
-        });
+        if (jsonData.result) {
+          this.personList = jsonData.data.data;
+        }
+      });
     },
-    selectPerson(){
+    selectPerson() {
       this.formModel.name = this.selectedPerson.name;
       this.formModel.phone = this.selectedPerson.phone;
       this.formModel.openId = this.selectedPerson.openId;
@@ -256,6 +318,9 @@ export default {
       .catch(error => {
         self.$message.error(error + "");
       });
+  },
+  components: {
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 72 - 8
src/views/base/warningPusher-list.vue

@@ -15,7 +15,7 @@
     -->
     <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
       <el-form-item label="所属单位" prop="companyId">
-        <el-select
+        <!-- <el-select
           v-model="queryModel.companyId"
           size="mini"
           filterable
@@ -28,7 +28,14 @@
             :label="company.name"
             :value="company.id"
           ></el-option>
-        </el-select>
+        </el-select>-->
+        <el-select-tree
+          :props="props"
+          :options="optionData"
+          :value="queryModel.companyId"
+          @getValue="getSelectedValue($event)"
+          height="200"
+        ></el-select-tree>
       </el-form-item>
       <el-form-item label="姓名" prop="name">
         <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
@@ -79,13 +86,13 @@
       <el-table-column prop="phone" label="手机号" width="120"></el-table-column>
       <el-table-column prop="companyName" label="单位" width="120"></el-table-column>
       <el-table-column prop="temperature" label="预警触发温度" width="120"></el-table-column>
-      <el-table-column prop="times" label="上报触发次数" width="120"></el-table-column>      
+      <el-table-column prop="times" label="上报触发次数" width="120"></el-table-column>
       <el-table-column prop="openId" label="是否绑定公众号" width="120">
         <template slot-scope="{row}">{{row.openId == null ? "否" : "是"}}</template>
       </el-table-column>
       <el-table-column prop="missingNoticeEnabled" label="未测温提醒" width="120">
         <template slot-scope="{row}">
-          <el-switch v-model="row.missingNoticeEnabled" @change="changeMissingNoticeEnabled(row)"/>
+          <el-switch v-model="row.missingNoticeEnabled" @change="changeMissingNoticeEnabled(row)" />
         </template>
       </el-table-column>
       <el-table-column prop="openId" label="open_id" width="280"></el-table-column>
@@ -139,6 +146,7 @@ import WarningPusherDetail from "./warningPusher-detail";
 import warningPusherApi from "@/api/base/warningPusher";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
 import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
 import wxApi from "@/api/base/wx";
 
 import NProgress from "nprogress"; // progress bar
@@ -168,15 +176,67 @@ export default {
       modalTitle: "",
       businessKey: "",
       typeData: [],
-      companyResult: "",
+      companyResult: [],
       tableHeight: "",
-      qrcodeImg: ""
+      qrcodeImg: "",
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     this.tableHeight = window.innerHeight - 280;
+    this.loadTree();
   },
   methods: {
+    getSelectedValue(value) {
+      this.queryModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
     changePage(pageIndex) {
       var self = this;
 
@@ -190,6 +250,9 @@ export default {
 
       formData.append("name", self.queryModel.name);
       formData.append("phone", self.queryModel.phone);
+      if(self.queryModel.companyId == null ){
+        self.queryModel.companyId = "";
+      }
       formData.append("companyId", self.queryModel.companyId);
 
       if (this.field != null) {
@@ -319,7 +382,7 @@ export default {
       var self = this;
       self.qrcodeImg = "";
     },
-    changeMissingNoticeEnabled(row){
+    changeMissingNoticeEnabled(row) {
       warningPusherApi.update(row);
     }
   },
@@ -334,7 +397,8 @@ export default {
     });
   },
   components: {
-    "warningPusher-detail": WarningPusherDetail
+    "warningPusher-detail": WarningPusherDetail,
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 94 - 26
src/views/business/workAttendance-list.vue

@@ -1,7 +1,9 @@
 <template>
-  <div v-loading="downloadLoading" 
+  <div
+    v-loading="downloadLoading"
     element-loading-text="加载中"
-    element-loading-spinner="el-icon-loading">
+    element-loading-spinner="el-icon-loading"
+  >
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
@@ -25,7 +27,7 @@
       <div>
         <el-row>
           <el-form-item label="单位" prop="companyId">
-            <el-select
+            <!-- <el-select
               v-model="queryModel.companyId"
               size="mini"
               filterable
@@ -38,7 +40,14 @@
                 :label="company.name"
                 :value="company.id"
               ></el-option>
-            </el-select>
+            </el-select>-->
+            <el-select-tree
+              :props="props"
+              :options="optionData"
+              :value="queryModel.companyId"
+              @getValue="getSelectedValue($event)"
+              height="200"
+            ></el-select-tree>
           </el-form-item>
           <el-form-item label="统计区间" prop="timeRanges">
             <el-date-picker
@@ -58,14 +67,14 @@
             <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 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-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>
             <el-button
               type="primary"
@@ -102,12 +111,7 @@
         @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" :index="indexMethod"></el-table-column>
       <el-table-column label="姓名" fixed="left" prop="name"></el-table-column>
       <el-table-column prop="position1" :label="position1" v-if="position1Show"></el-table-column>
@@ -149,6 +153,8 @@ import Constant from "@/constant";
 import workAttendanceApi from "@/api/business/workAttendance";
 import companyPositionApi from "@/api/base/companyPosition";
 import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
+
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
@@ -190,7 +196,7 @@ export default {
       downloadLoading: false,
       tableHeight: "",
       timeRangesDefaultTime: [],
-      companyResult: "",
+      companyResult: [],
       editorOption: {
         modules: {
           toolbar: "title" // 设置文本编辑器的头部是否展示
@@ -210,9 +216,28 @@ export default {
       position2Show: false,
       position3Show: false,
       position4Show: false,
-      position5Show: false
+      position5Show: false,
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
     };
   },
+  computed: {
+    /* 转树形数据 */
+    optionData() {
+      let cloneData = JSON.parse(JSON.stringify(this.companyResult)); // 对源数据深度克隆
+      return cloneData.filter(father => {
+        // 循环所有项,并添加children属性
+        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
+        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
+        return father.parentId == null; //返回第一层
+      });
+    }
+  },
   created() {
     var self = this;
     companyInfoApi.list().then(function(response) {
@@ -249,10 +274,43 @@ export default {
     });
 
     this.getCurrentMonthFirst();
+    this.loadTree();
   },
   methods: {
-    indexMethod(index){
-      return (this.pageIndex-1)*this.pageSize + (index+1);
+    getSelectedValue(value) {
+      this.queryModel.companyId = value;
+    },
+    loadTree() {
+      var formData = new FormData();
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.treeData = jsonData.data;
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    loadChildren(tree, treeNode, resolve) {
+      console.log(tree);
+
+      var formData = new FormData();
+      formData.append("parentId", tree.id);
+
+      companyInfoApi.loadChildren(formData).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          resolve(jsonData.data);
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    indexMethod(index) {
+      return (this.pageIndex - 1) * this.pageSize + (index + 1);
     },
     changePage(pageIndex) {
       var self = this;
@@ -263,6 +321,9 @@ export default {
       formData.append("pageIndex", self.pageIndex);
       formData.append("pageSize", self.pageSize);
 
+      if (self.queryModel.companyId == null) {
+        self.queryModel.companyId = "";
+      }
       formData.append("companyId", self.queryModel.companyId);
       formData.append("name", self.queryModel.name);
 
@@ -283,14 +344,14 @@ export default {
       formData.append("position3", self.queryModel.position3);
       formData.append("position4", self.queryModel.position4);
       formData.append("position5", self.queryModel.position5);
-      
+
       self.downloadLoading = true;
 
       workAttendanceApi.statList(formData).then(function(response) {
         var jsonData = response.data;
 
         self.downloadLoading = false;
-        
+
         if (jsonData.result) {
           self.tableData = jsonData.data.data;
           self.totalPages = jsonData.data.totalPage;
@@ -311,7 +372,7 @@ export default {
       this.pageSize = pageSize;
       this.changePage(1);
     },
-    showItem(item){
+    showItem(item) {
       var content = [];
 
       var arr = item.recordTime.split(" ");
@@ -368,6 +429,9 @@ export default {
 
           var formData = new FormData();
 
+          if (self.queryModel.companyId == null) {
+            self.queryModel.companyId = "";
+          }
           formData.append("companyId", self.queryModel.companyId);
           formData.append("name", self.queryModel.name);
 
@@ -428,7 +492,11 @@ export default {
       self.queryModel.timeRanges = [startTime, endTime];
     }
   },
-  mounted: function() {}
+  mounted: function() {},
+
+  components: {
+    "el-select-tree": SelectTree
+  }
 };
 </script>
 <style lang="scss" scoped>