Преглед на файлове

Merge branch 'V2' of http://47.92.161.104:10080/zq/jp-housekeeper-portal into V2

jz.kai преди 4 години
родител
ревизия
208fc227b4
променени са 31 файла, в които са добавени 1742 реда и са изтрити 180 реда
  1. 1 0
      .env.development
  2. 46 0
      src/api/base/applicationExamine.js
  3. 5 1
      src/api/base/personRoleInfo.js
  4. 12 0
      src/api/business/billPush.js
  5. 5 1
      src/api/business/fillAttendance.js
  6. 4 1
      src/api/business/workAttendance.js
  7. 9 0
      src/routers/modules/base.js
  8. 26 0
      src/routers/modules/business.js
  9. 5 1
      src/views/base/alarmConfig-detail.vue
  10. 6 0
      src/views/base/alarmConfig-list.vue
  11. 293 0
      src/views/base/applicationExamine-detail.vue
  12. 406 0
      src/views/base/applicationExamine-list.vue
  13. 67 40
      src/views/base/companyInfo-detail.vue
  14. 9 9
      src/views/base/companyInfo-list.vue
  15. 1 1
      src/views/base/deviceInfo-detail.vue
  16. 1 1
      src/views/base/devicePerson-list.vue
  17. 6 1
      src/views/base/personDeviceLog-list.vue
  18. 59 28
      src/views/base/personInfo-detail.vue
  19. 92 22
      src/views/base/personInfo-list.vue
  20. 30 2
      src/views/base/personPopedom-detail.vue
  21. 48 7
      src/views/base/personPopedom-list.vue
  22. 1 1
      src/views/base/personRoleInfo-list.vue
  23. 9 0
      src/views/base/watchInfo-detail.vue
  24. 7 31
      src/views/base/watchInfo-list.vue
  25. 23 1
      src/views/base/watchMeasure-list.vue
  26. 178 0
      src/views/business/billPush-list.vue
  27. 293 0
      src/views/business/clockOut-list.vue
  28. 5 4
      src/views/business/fillAttendance-list.vue
  29. 4 18
      src/views/business/requestForLeave-list.vue
  30. 68 10
      src/views/business/workAttendance-list.vue
  31. 23 0
      yarn.lock

+ 1 - 0
.env.development

@@ -1,5 +1,6 @@
 OUT_PUT_DIR=dist/jp-housekeeper-portal
 
+#VUE_APP_BACKEND_URL=http://127.0.0.1:7070/xpgj
 VUE_APP_BACKEND_URL=http://127.0.0.1:8086/jp-housekeeper-server
 #VUE_APP_BACKEND_URL=http://ykt-test.xiaoxinda.com/jp-housekeeper-server
 #VUE_APP_BACKEND_URL=http://xpgjapi.xiaoxinda.com

+ 46 - 0
src/api/base/applicationExamine.js

@@ -0,0 +1,46 @@
+import request from '@/utils/request'
+import constant from '@/constant'
+
+function pageList(formData){
+  return request.post(constant.serverUrl + "/base/applicationExamine/pageList", formData);
+}
+
+function create(){
+  return request.get(constant.serverUrl + "/base/applicationExamine/create");
+}
+
+function edit(id){
+  return request.get(constant.serverUrl + "/base/applicationExamine/edit/" + id);
+}
+
+function add(formModel){
+  return request.post(constant.serverUrl + "/base/applicationExamine/add", formModel,{
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function update(formModel){  
+  return request.post(constant.serverUrl + "/base/applicationExamine/update", formModel,{
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function remove(id){
+  return request.post(constant.serverUrl + "/base/applicationExamine/delete/" + id);
+}
+
+function batchRemove(idList){
+  return request.post(constant.serverUrl + "/base/applicationExamine/batchDelete",idList,{
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+export default {
+  pageList,create,edit,add,update,remove,batchRemove
+}

+ 5 - 1
src/api/base/personRoleInfo.js

@@ -71,7 +71,11 @@ function saveRelatedIcon(personRoleId,mode,idList){
   return request.post(constant.serverUrl + "/base/personRoleInfo/saveRelatedIcon",formData);
 }
 
+function findHaveIcon(formData){
+  return request.post(constant.serverUrl + "/base/personRoleInfo/findHaveIcon", formData);
+}
+
 export default {
   pageList,create,edit,add,update,remove,batchRemove,listByCompanyId,findAll,
-  findAllIcon,findRelatedIcon,saveRelatedIcon,findBySceneId
+  findAllIcon,findRelatedIcon,saveRelatedIcon,findBySceneId,findHaveIcon
 }

+ 12 - 0
src/api/business/billPush.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+import constant from '@/constant'
+
+function pageList(formData){
+  return request.post(constant.serverUrl + "/business/billPush/pageList", formData);
+}
+
+
+
+export default {
+    pageList
+  }

+ 5 - 1
src/api/business/fillAttendance.js

@@ -5,6 +5,10 @@ function pageList(formData){
   return request.post(constant.serverUrl + "/business/fillAttendance/pageList", formData);
 }
 
+function clockPageList(formData){
+  return request.post(constant.serverUrl + "/business/fillAttendance/clockPageList", formData);
+}
+
 function create(){
   return request.get(constant.serverUrl + "/business/fillAttendance/create");
 }
@@ -42,5 +46,5 @@ function batchRemove(idList){
 }
 
 export default {
-  pageList,create,edit,add,update,remove,batchRemove
+  pageList,create,edit,add,update,remove,batchRemove,clockPageList
 }

+ 4 - 1
src/api/business/workAttendance.js

@@ -17,8 +17,11 @@ function getFirstExcelData(){
   return request.get(constant.serverUrl + "/home/getFirstExcelData");
 }
 
+function batchUpdate(formData){
+  return request.post(constant.serverUrl + "/business/workAttendance/batchUpdate", formData);
+}
 
 
 export default {
-  statList,exportXls,getFirstData,getFirstExcelData
+  statList,exportXls,getFirstData,getFirstExcelData,batchUpdate
 }

+ 9 - 0
src/routers/modules/base.js

@@ -513,6 +513,15 @@ var routers = [
                         title: '长者管理'
                 }
         },
+        {
+                path: '/base/applicationExamine/list',
+                name: 'baseApplicationExamineList',
+                component: () => import('@/views/base/applicationExamine-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '审批角色管理'
+                }
+        },
         {
                 path: '/base/activityInfo/list',
                 name: 'baseActivityInfo',

+ 26 - 0
src/routers/modules/business.js

@@ -25,6 +25,19 @@ var routers = [
                         title: '补卡申请记录'
                 }
         },
+        {
+                //异地打卡记录
+                path: '/business/clockOut/list',
+                name: 'BusinessClockOutList',
+                // route level code-splitting
+                // this generates a separate chunk (about.[hash].js) for this route
+                // which is lazy-loaded when the route is visited.
+                component: () => import('@/views/business/clockOut-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '异地打卡记录'
+                }
+        },
         {
                 //请假记录
                 path: '/business/requestForLeave/list',
@@ -38,6 +51,19 @@ var routers = [
                         title: '请假记录'
                 }
         },
+        {
+                //账单推送管理
+                path: '/business/billPush/list',
+                name: 'business-billPush-list',
+                // route level code-splitting
+                // this generates a separate chunk (about.[hash].js) for this route
+                // which is lazy-loaded when the route is visited.
+                component: () => import('@/views/business/billPush-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '账单推送管理'
+                }
+        },
 ]
 
 export default routers;

+ 5 - 1
src/views/base/alarmConfig-detail.vue

@@ -85,7 +85,11 @@
                 }"
           ></el-time-picker>
         </el-form-item>
-        <el-form-item label="考勤类型" prop="classifier">
+        <el-form-item label="考勤类型" prop="attendanceType">
+          <el-radio v-model="formModel.attendanceType" :label="1">内勤</el-radio>
+          <el-radio v-model="formModel.attendanceType" :label="2">外勤</el-radio>
+        </el-form-item>
+        <el-form-item label="考勤类别" prop="classifier">
           <el-radio v-model="formModel.classifier" :label="1">上班时间</el-radio>
           <el-radio v-model="formModel.classifier" :label="2">下班时间</el-radio>
         </el-form-item>

+ 6 - 0
src/views/base/alarmConfig-list.vue

@@ -79,6 +79,12 @@
       <el-table-column prop="startTime" label="开始时间" width="120"></el-table-column>
       <el-table-column prop="attendanceTime" label="考勤时间" width="120"></el-table-column>
       <el-table-column prop="endTime" label="结束时间" width="120"></el-table-column>
+      <el-table-column prop="attendanceType" label="考勤类型" width="120">
+        <template slot-scope="{row}">
+          <span v-html="row.attendanceType==1 ? '内勤': ''"></span>
+          <span v-html="row.attendanceType==2 ? '外勤': ''"></span>
+        </template>
+      </el-table-column>
       <el-table-column prop="classifier" label="考勤分类" width="120">
         <template slot-scope="{row}">
           <span v-html="row.classifier==1 ? '上班时间': ''"></span>

+ 293 - 0
src/views/base/applicationExamine-detail.vue

@@ -0,0 +1,293 @@
+
+<style scoped>
+.user-panel {
+  margin: 10px auto;
+}
+</style>
+<template>
+  <el-dialog
+    :visible.sync="showDialog"
+    :title="title"
+    :modal-append-to-body="false"
+    style="text-align: left"
+    @close="closeDialog"
+    :close-on-click-modal="false"
+  >
+    <div class="user-panel" v-loading="loading">
+      <el-form
+        ref="form"
+        :model="formModel"
+        :rules="ruleValidate"
+        :label-width="'130px'"
+      >
+        <el-form-item label="申请者公司" prop="applicationCompanyId">
+          <el-select-tree
+            :props="props"
+            :options="companyResult"
+            v-model="formModel.applicationCompanyId"
+            size=""
+            height="200"
+          ></el-select-tree>
+        </el-form-item>
+        <el-form-item label="申请者角色" prop="applicationRoleId">
+          <el-select
+            v-model="formModel.applicationRoleId"
+            filterable
+            placeholder="请选择"
+            style="width: 280px"
+          >
+            <el-option
+              v-for="role in applicationRoleResult"
+              :key="role.id"
+              :label="role.personRoleName"
+              :value="role.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="审核人公司" prop="examineCompanyId">
+          <el-select-tree
+            :props="props"
+            :options="companyResult"
+            v-model="formModel.examineCompanyId"
+            size=""
+            height="200"
+          ></el-select-tree>
+        </el-form-item>
+        <el-form-item label="审核人角色" prop="examineRoleId">
+          <el-select
+            v-model="formModel.examineRoleId"
+            filterable
+            placeholder="请选择"
+            style="width: 280px"
+          >
+            <el-option
+              v-for="role in examineRoleResult"
+              :key="role.id"
+              :label="role.personRoleName"
+              :value="role.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="审批类型" prop="type">
+          <el-select
+            v-model="formModel.type"
+            filterable
+            placeholder="请选择"
+            style="width: 280px"
+          >
+            <el-option
+              v-for="result in examineTypeResult"
+              :key="result.value"
+              :label="result.name"
+              :value="result.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="审批等级" prop="level">
+          <el-input-number
+            v-model="formModel.level"
+            placeholder="请输入备注信息"
+            style="width: 300px"
+            min="1"
+          ></el-input-number>
+        </el-form-item>
+        <el-form-item label="请假天数" prop="days">
+          <el-input-number
+            v-model="formModel.days"
+            placeholder="请输入备注信息"
+            style="width: 300px"
+          ></el-input-number>
+        </el-form-item>
+        <el-form-item label="备注信息" prop="remark">
+          <el-input
+            v-model="formModel.remark"
+            placeholder="请输入备注信息"
+            style="width: 300px"
+          ></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="closeDialog">取 消</el-button>
+      <el-button type="primary" @click="handleSubmit" :loading="submitting"
+        >确 定</el-button
+      >
+    </span>
+  </el-dialog>
+</template>
+<script>
+import Constant from "@/constant";
+import applicationExamineApi from "@/api/base/applicationExamine";
+import companyInfoApi from "@/api/base/companyInfo";
+import dataDictionaryApi from "@/api/sys/dataDictionary";
+import personRoleInfoApi from "@/api/base/personRoleInfo";
+
+import SelectTree from "@/components/SelectTree";
+
+export default {
+  components: {
+    "el-select-tree": SelectTree,
+  },
+  props: ["businessKey", "title"],
+  data() {
+    return {
+      formModel: {},
+      ruleValidate: {
+        applicationRoleId: [
+          { required: true, message: "申请者角色不能为空", trigger: "blur" },
+        ],
+        applicationCompanyId: [
+          { required: true, message: "申请者公司不能为空", trigger: "blur" },
+        ],
+        examineRoleId: [
+          { required: true, message: "审核人角色不能为空", trigger: "blur" },
+        ],
+        examineCompanyId: [
+          { required: true, message: "审核人公司不能为空", trigger: "blur" },
+        ],
+        type: [
+          { required: true, message: "请选择审批类型", trigger: "blur" },
+        ]
+      },
+      showDialog: true,
+      loading: false,
+      submitting: false,
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+      applicationRoleResult: [],
+      examineRoleResult: [],
+      companyResult: [],
+      examineTypeResult: [],
+    };
+  },
+  created() {
+    var self = this;
+    companyInfoApi.list().then(function (response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        if (jsonData.data != null && jsonData.data != "") {
+          self.companyResult = jsonData.data;
+        }
+      }
+    });
+
+    var formData = new FormData();
+    formData.append("catalogName", "审批类型");
+    dataDictionaryApi.findByCatalogName(formData).then((response) => {
+      var jsonData = response.data;
+      this.examineTypeResult = jsonData.data;
+    });
+  },
+  watch: {
+    "formModel.applicationCompanyId": function (val, oldval) {
+      if (val != null && val != "") {
+        var self = this;
+        var formData = new FormData();
+        formData.append("companyId", val);
+        personRoleInfoApi.listByCompanyId(formData).then(function (response) {
+          var jsonData = response.data;
+          if (jsonData.result) {
+            if (jsonData.data != null && jsonData.data != "") {
+              self.applicationRoleResult = jsonData.data;
+
+              // applicationCompanyId
+              // applicationRoleId
+              // examineCompanyId
+              // examineRoleId
+            }
+          }
+        });
+      }
+    },
+    "formModel.examineCompanyId": function (val, oldval) {
+      if (val != null && val != "") {
+        var self = this;
+        var formData = new FormData();
+        formData.append("companyId", val);
+        personRoleInfoApi.listByCompanyId(formData).then(function (response) {
+          var jsonData = response.data;
+          if (jsonData.result) {
+            if (jsonData.data != null && jsonData.data != "") {
+              self.examineRoleResult = jsonData.data;
+
+              // applicationCompanyId
+              // applicationRoleId
+              // examineCompanyId
+              // examineRoleId
+            }
+          }
+        });
+      }
+    },
+  },
+  methods: {
+    closeDialog() {
+      this.$emit("close", false);
+    },
+    handleSubmit() {
+      var self = this;
+
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          (function () {
+            var id = self.formModel.id;
+
+            if (id == null || id.length == 0) {
+              return applicationExamineApi.add(self.formModel);
+            } else {
+              return applicationExamineApi.update(self.formModel);
+            }
+          })().then(function (response) {
+            var jsonData = response.data;
+
+            if (jsonData.result) {
+              self.$message({
+                message: "保存成功!",
+                type: "success",
+              });
+
+              self.$emit("close", true);
+            } else {
+              self.$message({
+                message: jsonData.message + "",
+                type: "warning",
+              });
+
+              self.$emit("close", false);
+            }
+          });
+        }
+      });
+    },
+  },
+  mounted: function () {
+    var self = this;
+
+    (function () {
+      if (self.businessKey.length == 0) {
+        return applicationExamineApi.create();
+      } else {
+        return applicationExamineApi.edit(self.businessKey);
+      }
+    })()
+      .then((response) => {
+        var jsonData = response.data;
+        self.loading = false;
+
+        if (jsonData.result) {
+          self.formModel = jsonData.data;
+        } else {
+          self.$message.error(jsonData.message + "");
+        }
+      })
+      .catch((error) => {
+        self.$message.error(error + "");
+      });
+  },
+};
+</script>

+ 406 - 0
src/views/base/applicationExamine-list.vue

@@ -0,0 +1,406 @@
+<template>
+  <div>
+    <el-breadcrumb separator=">">
+      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="#">系统管理</a>
+      </el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="/applicationExamine">审批角色管理</a>
+      </el-breadcrumb-item>
+    </el-breadcrumb>
+    <el-divider></el-divider>
+    <!--
+      要resetFields起作用,必须配置:model和prop
+    -->
+    <el-form
+      ref="queryForm"
+      :model="queryModel"
+      inline
+      class="demo-form-inline"
+    >
+      <el-form-item label="申请者公司" prop="applicationCompanyId">
+        <el-select-tree
+          :props="props"
+          :options="companyResult"
+          v-model="queryModel.applicationCompanyId"
+          size=""
+          height="200"
+        ></el-select-tree
+        >&nbsp;
+        <el-checkbox v-model="queryModel.applicationSubordinate"
+          >是否包含下级单位</el-checkbox
+        >
+      </el-form-item>
+      <el-form-item label="审核人公司" prop="examineCompanyId">
+        <el-select-tree
+          :props="props"
+          :options="companyResult"
+          v-model="queryModel.examineCompanyId"
+          size=""
+          height="200"
+        ></el-select-tree
+        >&nbsp;
+        <el-checkbox v-model="queryModel.examineSubordinate"
+          >是否包含下级单位</el-checkbox
+        >
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          size="mini"
+          icon="ios-search"
+          @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>
+    <el-row class="button-group">
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-circle-plus"
+        @click="handleAdd"
+        >新增</el-button
+      >
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-circle-plus"
+        :disabled="multipleSelection.length == 0"
+        @click="handleBatchDelete"
+        >删除选中项</el-button
+      >
+    </el-row>
+    <el-table
+      :data="tableData"
+      style="min-height: 400px"
+      v-loading="loading"
+      stripe
+      @sort-change="sortChange"
+      @selection-change="handleSelectionChange"
+    >
+      <el-table-column type="selection" width="55"></el-table-column>
+      <el-table-column
+        type="index"
+        label="序号"
+        :index="indexMethod"
+        width="50"
+      ></el-table-column>
+      <el-table-column
+        prop="applicationCompanyName"
+        label="申请者公司"
+        width="180"
+      ></el-table-column>
+      <el-table-column
+        prop="applicationRoleName"
+        label="申请者角色"
+        width="150"
+      ></el-table-column>
+      <el-table-column
+        prop="examineCompanyName"
+        label="审核人公司"
+        width="180"
+      ></el-table-column>
+      <el-table-column
+        prop="examineRoleName"
+        label="审核人角色"
+        width="150"
+      ></el-table-column>
+      <el-table-column
+        prop="typeName"
+        label="审批类型"
+        width="100"
+      ></el-table-column>
+      <el-table-column prop="level" label="审批等级" width="100">
+        <template slot-scope="{ row }">
+          <span v-if="row.level != '' && row.level != null"
+            >lv.{{ row.level }}</span
+          >
+          <span v-else
+            >{{ row.level }}</span
+          >
+        </template></el-table-column
+      >
+      <el-table-column
+        prop="days"
+        label="请假天数"
+        width="100"
+      ></el-table-column>
+      <el-table-column
+        prop="remark"
+        label="备注信息"
+        width="150"
+      ></el-table-column>
+      <el-table-column label="操作" width="150">
+        <template slot-scope="{ row }">
+          <el-button size="mini" type="warning" @click="handleEdit(row)"
+            >编辑</el-button
+          >
+          <el-button size="mini" type="danger" @click="handleDelete(row)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      :current-page.sync="pageIndex"
+      :total="totalElements"
+      :page-sizes="pageSizeList"
+      @current-change="changePage"
+      @size-change="pageSizeChange"
+      layout="total, sizes, prev, pager, next, jumper"
+    ></el-pagination>
+    <applicationExamine-detail
+      v-if="showModal"
+      :businessKey="businessKey"
+      :title="modalTitle"
+      @close="onDetailModalClose"
+    ></applicationExamine-detail>
+  </div>
+</template>
+<script>
+import Constant from "@/constant";
+import ApplicationExamineDetail from "./applicationExamine-detail";
+import applicationExamineApi from "@/api/base/applicationExamine";
+import companyInfoApi from "@/api/base/companyInfo";
+import NProgress from "nprogress"; // progress bar
+import "nprogress/nprogress.css"; // progress bar style
+
+import SelectTree from "@/components/SelectTree";
+
+export default {
+  name: "baseApplicationExamineList",
+  data() {
+    var self = this;
+
+    return {
+      queryModel: {
+        applicationRoleId: "",
+        applicationCompanyId: "",
+        applicationSubordinate: false,
+        examineRoleId: "",
+        examineCompanyId: "",
+        examineSubordinate: false,
+      },
+      loading: false,
+      tableData: [],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPages: 0,
+      totalElements: 0,
+      field: "",
+      direction: "",
+      pageSizeList: [10, 20, 30],
+      multipleSelection: [],
+      showModal: false,
+      modalTitle: "",
+      businessKey: "",
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+      companyResult: [],
+    };
+  },
+  created() {
+    var self = this;
+    companyInfoApi.list().then(function (response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        if (jsonData.data != null && jsonData.data != "") {
+          self.companyResult = jsonData.data;
+        }
+      }
+    });
+  },
+  methods: {
+    indexMethod(index) {
+      return (this.pageIndex - 1) * this.pageSize + (index + 1);
+    },
+    changePage(pageIndex) {
+      var self = this;
+
+      self.loading = true;
+
+      self.pageIndex = pageIndex;
+      var formData = new FormData();
+
+      formData.append("pageIndex", self.pageIndex);
+      formData.append("pageSize", self.pageSize);
+
+      formData.append("applicationRoleId", self.queryModel.applicationRoleId);
+      if (self.queryModel.applicationCompanyId == null) {
+        self.queryModel.applicationCompanyId = "";
+      }
+      formData.append(
+        "applicationCompanyId",
+        self.queryModel.applicationCompanyId
+      );
+      formData.append(
+        "applicationSubordinate",
+        self.queryModel.applicationSubordinate
+      );
+      formData.append("examineRoleId", self.queryModel.examineRoleId);
+      if (self.queryModel.examineCompanyId == null) {
+        self.queryModel.examineCompanyId = "";
+      }
+      formData.append("examineCompanyId", self.queryModel.examineCompanyId);
+      formData.append("examineSubordinate", self.queryModel.examineSubordinate);
+      if (this.field != null) {
+        formData.append("field", this.field);
+      }
+
+      if (this.direction != null) {
+        formData.append("direction", this.direction);
+      }
+
+      applicationExamineApi
+        .pageList(formData)
+        .then(function (response) {
+          self.loading = false;
+
+          var jsonData = response.data.data;
+
+          self.tableData = jsonData.data;
+          self.totalPages = jsonData.totalPages;
+          self.totalElements = jsonData.recordsTotal;
+        })
+        .catch((error) => {
+          self.loading = false;
+          // self.$message.error(error + "");
+        });
+    },
+    pageSizeChange(pageSize) {
+      this.pageSize = pageSize;
+
+      this.$nextTick(() => {
+        this.changePage(this.pageIndex);
+      });
+    },
+    sortChange(data) {
+      this.field = data.column.field;
+      this.direction = data.order;
+
+      this.changePage(this.pageIndex);
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    handleReset(name) {
+      this.$refs[name].resetFields();
+    },
+    handleAdd() {
+      this.modalTitle = "新增";
+      this.businessKey = "";
+      this.showModal = true;
+    },
+    handleEdit(record) {
+      this.modalTitle = "编辑";
+      this.businessKey = record.id;
+      this.showModal = true;
+    },
+    handleDelete(record) {
+      var self = this;
+
+      self
+        .$confirm("是否确认删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+        .then(() => {
+          applicationExamineApi.remove(record.id).then(function (response) {
+            var jsonData = response.data;
+
+            if (jsonData.result) {
+              // var index = self.tableData.indexOf(record);
+              // self.tableData.splice(index, 1);
+              self.changePage(self.pageIndex);
+
+              self.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+            }
+          });
+        });
+    },
+    handleBatchDelete() {
+      var self = this;
+
+      var idList = this.multipleSelection.map((record) => {
+        return record.id;
+      });
+
+      this.$confirm("是否确认删除选中项?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        applicationExamineApi.batchRemove(idList).then(function (response) {
+          var jsonData = response.data;
+
+          if (jsonData.result) {
+            self.changePage(self.pageIndex);
+
+            self.$message({
+              type: "success",
+              message: "删除成功!",
+            });
+          }
+        });
+      });
+    },
+    onDetailModalClose(refreshed) {
+      //保存成功后回调
+      this.showModal = false;
+
+      if (refreshed) {
+        this.changePage(this.pageIndex);
+      }
+    },
+  },
+  mounted: function () {
+    this.changePage(1);
+  },
+  components: {
+    "applicationExamine-detail": ApplicationExamineDetail,
+    "el-select-tree": SelectTree,
+  },
+};
+</script>
+<style lang="scss" scoped>
+.el-breadcrumb {
+  margin: 10px;
+  line-height: 20px;
+}
+
+.el-divider {
+  margin: 5px 0;
+}
+
+.demo-form-inline {
+  margin-left: 10px;
+  text-align: left;
+}
+
+.button-group {
+  margin-left: 10px;
+  text-align: left;
+}
+</style>

+ 67 - 40
src/views/base/companyInfo-detail.vue

@@ -18,63 +18,52 @@
         ref="form"
         :model="formModel"
         :rules="ruleValidate"
-        :label-width="'100px'"
+        :label-width="'130px'"
       >
-        <el-row>
+        <el-row v-show="formModel.enableChangeParent">          
           <el-col :span="12">
-            <el-form-item label="单位名称" prop="name">
-              <el-input
-                v-model="formModel.name"
-                placeholder="请输入单位名称"
-                style="width: 80%"
-              ></el-input>
+            <el-form-item label="上级单位" prop="parentId">
+              <el-select-tree
+                :props="props"
+                :options="companyResult"
+                v-model="formModel.parentId"
+                height="200"
+                size="mediumn"
+                width="200"
+              ></el-select-tree>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="序号" prop="sortNo">
+            <el-form-item label="本级序号" prop="sortNo">
               <el-input
                 v-model="formModel.sortNo"
                 placeholder="请输入序号"
-                style="width: 50%"
+                style="width: 200px"
               ></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
+          <el-col :span="12">
+            <el-form-item label="单位名称" prop="name">
+              <el-input
+                v-model="formModel.name"
+                placeholder="请输入单位名称"
+                style="width: 200px"
+              ></el-input>
+            </el-form-item>
+          </el-col>
           <el-col :span="12">
             <el-form-item label="简称" prop="shortName">
               <el-input
                 v-model="formModel.shortName"
                 placeholder="请输入单位名称"
-                style="width: 80%"
+                style="width: 200px"
               ></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
-          <el-col :span="12">
-            <el-form-item label="上级单位" prop="parentId">
-              <!-- <el-select
-                v-model="formModel.parentId"
-                filterable
-                placeholder="请选择"
-                style="width:90%"
-              >
-                <el-option
-                  v-for="company in companyResult"
-                  :key="company.id"
-                  :label="company.name"
-                  :value="company.id"
-                ></el-option>
-              </el-select>-->
-              <el-select-tree
-                :props="props"
-                :options="companyResult"
-                v-model="formModel.parentId"
-                height="200"
-              ></el-select-tree>
-            </el-form-item>
-          </el-col>
           <el-col :span="12">
             <el-form-item label="地区" prop="regionId">
               <!-- <el-select v-model="formModel.regionId" filterable placeholder="请选择" style="width:50%">
@@ -90,9 +79,29 @@
                 :options="regionData"
                 v-model="formModel.regionId"
                 height="200"
+                size="mediumn"
+                width="200"
               ></el-select-tree>
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="单位性质" prop="unitType">
+              <el-select
+                v-model="formModel.unitType"
+                filterable
+                clearable
+                placeholder="请选择"
+                style="width: 200px"
+              >
+                <el-option
+                  v-for="result in typeData"
+                  :key="result.id"
+                  :label="result.name"
+                  :value="result.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
@@ -102,7 +111,7 @@
                 filterable
                 clearable
                 placeholder="请选择"
-                style="width: 50%"
+                style="width: 200px"
               >
                 <el-option
                   v-for="result in sceneData"
@@ -120,7 +129,7 @@
                 filterable
                 clearable 
                 placeholder="请选择"
-                style="width: 50%"
+                style="width: 200px"
               >
                 <el-option
                   v-for="result in sceneData"
@@ -140,9 +149,16 @@
                 :options="companyResult"
                 v-model="formModel.relationCompanyId"
                 height="200"
+                width="200"
               ></el-select-tree>
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="允许手机注册用户" prop="enableRegister">
+              <el-radio v-model="formModel.enableRegister" :label="true">允许</el-radio>
+              <el-radio v-model="formModel.enableRegister" :label="false">否</el-radio>
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
@@ -151,7 +167,7 @@
                 type="textarea"
                 v-model="formModel.remark"
                 :rows="2"
-                style="width: 80%"
+                style="width: 100%"
                 placeholder="请输入备注"
               ></el-input>
             </el-form-item>
@@ -168,7 +184,7 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
+        <!-- <el-row>
           <el-col :span="12">
             <el-form-item label="一级位置" prop="position1Name">
               <el-input
@@ -218,7 +234,7 @@
               ></el-input>
             </el-form-item>
           </el-col>
-        </el-row>
+        </el-row> -->
         <el-row>
           <el-col :span="24">
             <el-form-item label="单位logo" prop="logo">
@@ -262,7 +278,9 @@ export default {
   props: ["businessKey", "title"],
   data() {
     return {
-      formModel: {},
+      formModel: {
+        enableChangeParent: false
+      },
       ruleValidate: {
         name: [
           { required: true, message: "单位名称不能为空", trigger: "blur" },
@@ -273,6 +291,15 @@ export default {
         sceneId: [
           { required: true, message: "场景值不能为空", trigger: "blur" },
         ],
+        parentId : [
+          { required: true, message: "上级单位不能为空", trigger: "blur" },
+        ],
+        sortNo : [
+          { required: true, message: "序号不能为空", trigger: "blur" },
+        ],
+        unitType : [
+          { required: true, message: "单位性质不能为空", trigger: "blur" },
+        ]
         // type: [{ required: true, message: "性质不能为空", trigger: "blur" }]
       },
       showDialog: true,

+ 9 - 9
src/views/base/companyInfo-list.vue

@@ -3,7 +3,7 @@
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="#">系统管理</a>
+        <a href="#">基础信息管理</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
         <a href="/companyInfo">单位管理</a>
@@ -134,22 +134,22 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55"></el-table-column>
-      <el-table-column prop="sortNo" label="序号" width="120"></el-table-column>
+      <el-table-column
+        prop="parentName"
+        label="上级单位"
+        width="200"
+      ></el-table-column>
+      <el-table-column prop="sortNo" label="本级" width="100"></el-table-column>
       <el-table-column
         prop="name"
         label="单位名称"
-        width="230"
+        width="200"
       ></el-table-column>
       <el-table-column
         prop="shortName"
         label="简称"
         width="120"
       ></el-table-column>
-      <el-table-column
-        prop="parentName"
-        label="上级单位"
-        width="230"
-      ></el-table-column>
       <el-table-column
         prop="sceneName"
         label="场景值"
@@ -455,7 +455,7 @@ export default {
           //45为分页栏的高度
           //页面高度-列表上面的高度-分页栏高度
           self.tableHeight =
-            window.innerHeight - self.$refs.formTable.$el.offsetTop - 45;
+            window.innerHeight - self.$refs.formTable.$el.offsetTop - 100;
         })
         .catch((error) => {
           self.loading = false;

+ 1 - 1
src/views/base/deviceInfo-detail.vue

@@ -192,7 +192,7 @@ export default {
   data() {
     return {
       formModel: {
-        remoteOpenRangeTime: [],
+        remoteOpenRangeTime: null,
       },
       ruleValidate: {
         aliasName: [

+ 1 - 1
src/views/base/devicePerson-list.vue

@@ -3,7 +3,7 @@
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="#">系统管理</a>
+        <a href="#">基础信息管理</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
         <a href="#">设备人员管理</a>

+ 6 - 1
src/views/base/personDeviceLog-list.vue

@@ -67,8 +67,11 @@
           <el-checkbox v-model="queryModel.subordinate">是否包含下级单位</el-checkbox>
           <el-checkbox v-model="queryModel.distinct">是否去重</el-checkbox>
         </el-form-item>
+        <el-form-item label="人员编号" prop="personId">
+          <el-input type="text" size="mini" v-model="queryModel.personId" style="width:100px;"></el-input>
+        </el-form-item>
         <el-form-item label="人员姓名" prop="personName">
-          <el-input type="text" size="mini" v-model="queryModel.personName"></el-input>
+          <el-input type="text" size="mini" v-model="queryModel.personName" style="width:100px;"></el-input>
         </el-form-item>
         <el-form-item label="温度区间" prop="temperatureBegin">
           <el-input
@@ -192,6 +195,7 @@ export default {
       queryModel: {
         deviceNo: "",
         aliasName: "",
+        personId: "",
         personName: "",
         matchStatus: "",
         timeRanges: "",
@@ -298,6 +302,7 @@ export default {
       }
       formData.append("timeRanges", self.queryModel.timeRanges);
       formData.append("matchStatus", self.queryModel.matchStatus);
+      formData.append("personId", self.queryModel.personId);
       formData.append("personName", self.queryModel.personName);
       formData.append("deviceNo", self.queryModel.deviceNo);
       formData.append("aliasName", self.queryModel.aliasName);

+ 59 - 28
src/views/base/personInfo-detail.vue

@@ -19,7 +19,7 @@
         ref="form"
         :model="formModel"
         :rules="ruleValidate"
-        :label-width="'100px'"
+        :label-width="'130px'"
       >
         <el-row>
           <el-col :span="12">
@@ -38,7 +38,7 @@
               ></el-input>
             </el-form-item>
           </el-col>
-        </el-row>        
+        </el-row>
         <el-row>
           <el-col :span="12">
             <el-form-item label="单位" prop="companyId">
@@ -47,7 +47,7 @@
                 :options="companyResult"
                 v-model="formModel.companyId"
                 height="200"
-                style="width:330px;"
+                style="width: 330px"
                 size="large"
               ></el-select-tree>
             </el-form-item>
@@ -119,6 +119,25 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="工作状态" prop="workStatus">
+              <el-select
+                v-model="formModel.workStatus"
+                filterable
+                placeholder="请选择"
+                style="width: 40%"
+              >
+                <el-option
+                  v-for="result in workStatusResult"
+                  :key="result.value"
+                  :label="result.name"
+                  :value="result.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-row>
           <el-col :span="24">
             <el-form-item label="开放权限">
@@ -163,33 +182,36 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <!-- <el-row>
+        <el-row>
           <el-col :span="12">
-            <el-form-item :label="companyPosition1" prop="position1">
+            <el-form-item label="拓展字段一" prop="position1">
               <el-input
                 v-model="formModel.position1"
-                placeholder="请输入一级位置"
+                placeholder="请输入拓展字段一1"
               ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item :label="companyPosition2" prop="position2">
+            <el-form-item label="拓展字段二" prop="position2">
               <el-input
                 v-model="formModel.position2"
-                placeholder="请输入二级位置"
+                placeholder="请输入拓展字段二"
               ></el-input>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item :label="companyPosition3" prop="position3">
+            <el-form-item label="拓展字段三" prop="position3">
               <el-input
                 v-model="formModel.position3"
-                placeholder="请输入三级位置"
+                placeholder="请输入拓展字段三"
               ></el-input>
             </el-form-item>
           </el-col>
+        </el-row>
+        <!-- 
+        <el-row>
           <el-col :span="12">
             <el-form-item :label="companyPosition4" prop="position4">
               <el-input
@@ -198,8 +220,6 @@
               ></el-input>
             </el-form-item>
           </el-col>
-        </el-row>
-        <el-row>
           <el-col :span="12">
             <el-form-item :label="companyPosition5" prop="position5">
               <el-input
@@ -242,24 +262,23 @@ export default {
     "companyPosition5",
   ],
   watch: {
-    "formModel.companyId":function(newVal,oldVal){
-        var self = this;
+    "formModel.companyId": function (newVal, oldVal) {
+      var self = this;
 
-        if(newVal!=null){
-          var formData = new FormData();
-          formData.append("companyId", newVal);
+      if (newVal != null) {
+        var formData = new FormData();
+        formData.append("companyId", newVal);
 
-          //查询单位下角色
-          personRoleInfoApi.listByCompanyId(formData)
-          .then(response=>{
-              var jsonData = response.data;
+        //查询单位下角色
+        personRoleInfoApi.listByCompanyId(formData).then((response) => {
+          var jsonData = response.data;
 
-              if (jsonData.result) {
-                self.personRoleResult = jsonData.data;
-              }
-          })
-        }
-    }
+          if (jsonData.result) {
+            self.personRoleResult = jsonData.data;
+          }
+        });
+      }
+    },
   },
   data() {
     let checkIdCard = (rule, value, callback) => {
@@ -279,7 +298,9 @@ export default {
         companyId: [{ required: true, message: "请选择单位", trigger: "blur" }],
         name: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
         phone: [{ required: true, message: "手机号不能为空", trigger: "blur" }],
-        personRoleId: [{ required: true, message: "请选择身份", trigger: "blur" }]
+        personRoleId: [
+          { required: true, message: "请选择身份", trigger: "blur" },
+        ],
         // idCard: [
         //   { required: false, message: "身份证不能为空", trigger: "blur" },
         //   {
@@ -310,6 +331,7 @@ export default {
         children: "children",
       },
       parkList: [],
+      workStatusResult:[]
     };
   },
   created() {
@@ -320,6 +342,15 @@ export default {
       this.parkList = jsonData.data;
     });
 
+    dataDictionaryApi
+      .findByCatalogName({
+        catalogName: "工作状态",
+      })
+      .then((response) => {
+        var jsonData = response.data;
+        this.workStatusResult = jsonData.data;
+      });
+
     this.loadTree();
   },
   methods: {

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

@@ -3,7 +3,7 @@
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="#">系统管理</a>
+        <a href="#">基础信息管理</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
         <a href="/personInfo">人员管理</a>
@@ -79,21 +79,7 @@
         </el-form-item>
       </div>
       <div>
-        <el-form-item label="单位" prop="companyCode">
-          <!-- <el-select
-              v-model="queryModel.companyCode"
-              size="mini"
-              filterable
-              placeholder="请选择"
-              style="width:220px"
-            >
-              <el-option
-                v-for="company in companyResult"
-                :key="company.id"
-                :label="company.name"
-                :value="company.code"
-              ></el-option>
-          </el-select>-->
+        <el-form-item label="单位" prop="parentId">
           <el-select-tree
             size="mini"
             :props="props"
@@ -106,31 +92,70 @@
             >是否包含下级单位</el-checkbox
           >
         </el-form-item>
+        <el-form-item label="角色" prop="roleId">
+        <el-select
+          v-model="queryModel.roleId"
+          filterable
+          size="mini"
+          placeholder="请选择"
+          style="width: 120px"
+        >
+          <el-option
+            v-for="role in roleResult"
+            :key="role.id"
+            :label="role.personRoleName"
+            :value="role.id"
+          ></el-option>
+        </el-select>
+      </el-form-item>
         <el-form-item label="是否上传照片" prop="isUploadPhoto">
           <el-select
             v-model="queryModel.isUploadPhoto"
             size="mini"
-            filterable
+            clearable
             placeholder="请选择"
-            style="width: 120px"
+            style="width: 90px"
           >
-            <el-option value label="全部"></el-option>
             <el-option value="1" label="已上传"></el-option>
             <el-option value="0" label="未上传"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="是否同步" prop="faceBound">
+        <!-- <el-form-item label="是否同步" prop="faceBound">
           <el-select
             v-model="queryModel.faceBound"
             size="mini"
-            filterable
+            clearable
             placeholder="请选择"
-            style="width: 120px"
+            style="width: 100px"
           >
             <el-option value label="全部"></el-option>
             <el-option value="1" label="已同步"></el-option>
             <el-option value="0" label="未同步"></el-option>
           </el-select>
+        </el-form-item> -->
+        <el-form-item label="是否需要考勤" prop="enableAttendance">
+          <el-select
+            v-model="queryModel.enableAttendance"
+            size="mini"
+            clearable
+            placeholder="请选择"
+            style="width: 90px"
+          >
+            <el-option :value="true" label="是"></el-option>
+            <el-option :value="false" label="否"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="允许审核注册用户" prop="enableRegisterExamine">
+          <el-select
+            v-model="queryModel.enableRegisterExamine"
+            size="mini"
+            clearable
+            placeholder="请选择"
+            style="width: 90px"
+          >
+            <el-option :value="true" label="是"></el-option>
+            <el-option :value="false" label="否"></el-option>
+          </el-select>
         </el-form-item>
       </div>
       <!-- <div>
@@ -333,6 +358,14 @@
         width="100"
         show-overflow-tooltip
       ></el-table-column>
+      <el-table-column label="工作状态" width="120">
+        <template slot-scope="{ row }">
+          <span v-if="row.workStatus == 2">外出</span>
+          <span v-else-if="row.workStatus == 3">出差</span>
+          <span v-else-if="row.workStatus == 4">休假</span>
+          <span v-else>工作</span>
+        </template>
+      </el-table-column>
       <el-table-column
         prop="deviceName"
         label="绑定设备"
@@ -754,6 +787,9 @@ export default {
         position5: "",
         derviceName: "",
         parkId: "",
+        roleId:"",
+        enableAttendance: null,
+        enableRegisterExamine: null
       },
       loading: false,
       tableData: [],
@@ -816,6 +852,7 @@ export default {
       bindWechatLoading: false,
       parkList: [],
       showRoleModal: false,
+      roleResult:[],
     };
   },
   watch: {
@@ -836,6 +873,21 @@ export default {
               }
           })
         }
+    },
+    "queryModel.parentId": function (val, oldval) {
+      if (val != null && val != "") {
+        var self = this;
+        var formData = new FormData();
+        formData.append("companyId", val);
+        personRoleInfoApi.listByCompanyId(formData).then(function (response) {
+          var jsonData = response.data;
+          if (jsonData.result) {
+            if (jsonData.data != null && jsonData.data != "") {
+              self.roleResult = jsonData.data;
+            }
+          }
+        });
+      }
     }
   },
   created() {
@@ -949,6 +1001,14 @@ export default {
       formData.append("faceBound", self.queryModel.faceBound);
       formData.append("isUploadPhoto", self.queryModel.isUploadPhoto);
 
+      if(self.queryModel.enableRegisterExamine!=null){
+        formData.append("enableRegisterExamine", self.queryModel.enableRegisterExamine);
+      }
+      
+      if(self.queryModel.enableAttendance!=null){
+        formData.append("enableAttendance", self.queryModel.enableAttendance);
+      }
+
       formData.append("position1", self.queryModel.position1);
       formData.append("position2", self.queryModel.position2);
       formData.append("position3", self.queryModel.position3);
@@ -957,6 +1017,8 @@ export default {
 
       formData.append("derviceName", self.queryModel.derviceName);
 
+      formData.append("roleId", self.queryModel.roleId);
+
       if (self.queryModel.parkId == null) {
         self.queryModel.parkId = "";
       }
@@ -1184,6 +1246,14 @@ export default {
       formData.append("faceBound", self.queryModel.faceBound);
       formData.append("isUploadPhoto", self.queryModel.isUploadPhoto);
 
+      if(self.queryModel.enableRegisterExamine!=null){
+        formData.append("enableRegisterExamine", self.queryModel.enableRegisterExamine);
+      }
+      
+      if(self.queryModel.enableAttendance!=null){
+        formData.append("enableAttendance", self.queryModel.enableAttendance);
+      }
+
       formData.append("position1", self.queryModel.position1);
       formData.append("position2", self.queryModel.position2);
       formData.append("position3", self.queryModel.position3);

+ 30 - 2
src/views/base/personPopedom-detail.vue

@@ -29,7 +29,7 @@
             height="200"
           ></el-select-tree>
         </el-form-item>
-        <el-form-item label="机构" prop="companyStructureId">
+        <!-- <el-form-item label="机构" prop="companyStructureId">
           <el-select-tree
             :props="companyStructureProps"
             :options="companyStructureResult"
@@ -37,7 +37,7 @@
             height="200"
             size=""
           ></el-select-tree>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="关联场景" prop="sceneId">
           <el-select
             v-model="formModel.sceneId"
@@ -79,6 +79,11 @@
             ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="进行注册审核" prop="enableRegisterExamine" v-if="havingIcon">
+          <el-radio v-model="formModel.enableRegisterExamine" :label="true">是</el-radio>
+          <el-radio v-model="formModel.enableRegisterExamine" :label="false">否</el-radio>
+        </el-form-item>
+        
         <!-- <el-form-item label="展示的图标" prop="showIconId">
           <el-select
             v-model="formModel.showIconId"
@@ -102,6 +107,13 @@
             style="width: 300px"
           ></el-input>
         </el-form-item>
+        <el-form-item label="是否要求考勤" prop="enableAttendance">
+            <el-switch
+              v-model="formModel.enableAttendance"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+            ></el-switch>
+        </el-form-item>
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -166,6 +178,7 @@ export default {
       sceneData: [],
       sceneId: "",
       oldPersonRoleId: "",
+      havingIcon: false,
     };
   },
   created() {
@@ -256,6 +269,21 @@ export default {
         });
       }
     },
+    "formModel.personRoleId": function (val, oldval) {
+      if (val != null && val != "") {
+        var self = this;
+        var formData = new FormData();
+        formData.append("personRoleId", val);
+        formData.append("iconId", "73");
+        personRoleInfoApi.findHaveIcon(formData).then(function (response) {
+          var jsonData = response.data;
+          if (jsonData.result) {
+               self.havingIcon = jsonData.data;
+            
+          }
+        }); 
+      }
+    }
     // "formModel.personRoleId": function (val, oldval) {
     //   if (val != null && val != "") {
     //     var self = this;

+ 48 - 7
src/views/base/personPopedom-list.vue

@@ -8,7 +8,7 @@
     style="text-align: left"
     @close="closeDialog"
     :close-on-click-modal="false"
-    width="970px"
+    width="1100px"
   >
     <div>
       <!--
@@ -42,18 +42,18 @@
       >
         <el-table-column
           prop="companyName"
-          label="公司"
+          label="单位"
           width="200"
         ></el-table-column>
-        <el-table-column
+        <!-- <el-table-column
           prop="companyStructureName"
           label="机构"
           width="120"
-        ></el-table-column>
+        ></el-table-column> -->
         <el-table-column
           prop="roleName"
           label="身份"
-          width="120"
+          width="100"
         ></el-table-column>
         <!-- <el-table-column
           prop="serviceCompanyName"
@@ -68,13 +68,41 @@
         <el-table-column
           prop="popularizePersonName"
           label="推广者"
-          width="120"
+          width="100"
         ></el-table-column>
         <el-table-column
           prop="remark"
           label="备注信息"
-          width="120"
+          width="100"
         ></el-table-column>
+        <el-table-column
+          prop="enableRegisterExamine"
+          label="是否允许审核注册用户"
+          width="120"
+        >
+          <template slot-scope="{ row }">
+            <el-switch
+              v-model="row.enableRegisterExamine"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              @change="handleUpdate(row)"
+            ></el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="enableAttendance"
+          label="是否要求考勤"
+          width="120"
+        >
+          <template slot-scope="{ row }">
+            <el-switch
+              v-model="row.enableAttendance"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              @change="handleUpdate(row)"
+            ></el-switch>
+          </template>
+        </el-table-column>
         <el-table-column prop="useEnable" label="默认" width="100">
           <template slot-scope="{ row }">
             <el-switch
@@ -263,6 +291,19 @@ export default {
       var self = this;
       self.changePage(self.pageIndex);
     },
+    handleUpdate(row) {
+      personPopedomApi.update(row).then(response=>{
+        var jsonData = response.data;
+        this.loading = false;
+
+        if (!jsonData.result) {
+          self.$message({
+            type: "error",
+            message: jsonData.message + ""
+          });
+        }
+      });
+    },
     changeDefault(record) {
       var self = this;
       var formData = new FormData();

+ 1 - 1
src/views/base/personRoleInfo-list.vue

@@ -3,7 +3,7 @@
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="#">系统管理</a>
+        <a href="#">基础信息管理</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
         <a href="/personRoleInfo">用户身份管理</a>

+ 9 - 0
src/views/base/watchInfo-detail.vue

@@ -103,6 +103,15 @@
             <template slot="append">秒</template>
           </el-input>
         </el-form-item>
+        <el-form-item label="测温间隔时间" prop="frequency">
+          <el-input
+            v-model="formModel.frequency"
+            placeholder="请输入测温间隔时间"
+            style="width: 300px"
+          >
+          <template slot="append">秒</template>
+          </el-input>
+        </el-form-item>
         <el-form-item label="服务号码" prop="num1">
           <el-input
             v-model="formModel.num1"

+ 7 - 31
src/views/base/watchInfo-list.vue

@@ -90,53 +90,29 @@
           <span v-else>不在线</span>
         </template>
       </el-table-column>
-      <!-- <el-table-column
-        prop="sos1"
-        sort-by="sos1"
-        label="紧急联系人1号码"
-        sortable="custom"
-        width="180"
-      ></el-table-column>
       <el-table-column
-        prop="sos2"
-        sort-by="sos2"
-        label="紧急联系人2号码"
-        sortable="custom"
+        prop="stepSwitch"
+        label="计步器开关"
         width="180"
       ></el-table-column>
       <el-table-column
-        prop="sos3"
-        sort-by="sos3"
-        label="紧急联系人3号码"
-        sortable="custom"
+        prop="frequency"
+        label="测温间隔时间"
         width="180"
-      ></el-table-column> -->
+      ></el-table-column>
       <el-table-column
-        prop="stepSwitch"
-        sort-by="step_switch"
-        label="计步器开关"
-        sortable="custom"
+        prop="bpi"
+        label="血压间隔时间"
         width="180"
       ></el-table-column>
       <el-table-column
         prop="locationTimeInterval"
-        sort-by="location_time_interval"
         label="定位间隔时间"
-        sortable="custom"
         width="180"
       ></el-table-column>
       <el-table-column
         prop="heartRateTimeInterval"
-        sort-by="heart_rate_time_interval"
         label="心率间隔时间"
-        sortable="custom"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="bpi"
-        sort-by="bpi"
-        label="血压间隔时间"
-        sortable="custom"
         width="180"
       ></el-table-column>
       <el-table-column

+ 23 - 1
src/views/base/watchMeasure-list.vue

@@ -28,6 +28,17 @@
           <el-option v-for="(item,index) in nameList"  :label="item.name" :value="item.value" :key="index"></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 HH:mm:ss"
+              size="mini"
+          ></el-date-picker>
+      </el-form-item>
       <el-form-item>
         <el-button
           type="primary"
@@ -144,7 +155,8 @@ export default {
     return {
       queryModel: {
         deviceNo: "",
-        name: ""
+        name: "",
+        timeRanges: null
       },
       loading: false,
       tableData: [],
@@ -185,6 +197,16 @@ export default {
       formData.append("deviceNo", self.queryModel.deviceNo);
       formData.append("name", self.queryModel.name);
 
+      if(self.queryModel.timeRanges!=null){
+        if(self.queryModel.timeRanges[0]!=null){
+          formData.append("startTime", self.queryModel.timeRanges[0]);
+        }
+
+        if(self.queryModel.timeRanges[1]!=null){
+          formData.append("endTime", self.queryModel.timeRanges[1]);
+        }
+      }
+
       if (this.field != null) {
         formData.append("field", this.field);
       }

+ 178 - 0
src/views/business/billPush-list.vue

@@ -0,0 +1,178 @@
+<template>
+    <div>
+        <el-breadcrumb separator=">">
+            <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+            <el-breadcrumb-item>
+                <a href="#">系统管理</a>
+            </el-breadcrumb-item>
+            <el-breadcrumb-item>
+                <a href="#">账单推送管理</a>
+            </el-breadcrumb-item>
+            </el-breadcrumb>
+        <el-divider></el-divider>
+        <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+            <el-form-item label="账单名称" prop="name">
+                <el-input type="text" size="mini" v-model="queryModel.name"></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-button
+                type="info"
+                size="mini"
+                style="margin-left: 8px"
+                @click="handleReset('queryForm')"
+                >重置</el-button>&nbsp;
+            </el-form-item>
+        </el-form>
+        <el-divider></el-divider>
+        <el-row class="button-group">
+            <el-button
+                type="primary"
+                size="small"
+                plain
+                icon="el-icon-circle-plus"
+                @click="handleAdd"
+                >创建账单</el-button
+            >
+        </el-row>
+        <el-table :data="tableData" style="min-height:400px;" v-loading="loading" stripe>
+            <el-table-column type="index" label="序号" :index="indexMethod" width="50"></el-table-column>
+            <el-table-column prop="name" label="账单名称" width="120"></el-table-column>
+            <el-table-column prop="bak" label="账单备注" width="120"></el-table-column>
+            <el-table-column prop="collectionAccount" label="收款账户" width="120"></el-table-column>
+            <el-table-column prop="payService" label="收费项目" width="120"></el-table-column>
+            <el-table-column prop="pushTime" label="账单推送时间" width="120"></el-table-column>
+            <el-table-column label="账单推送情况" width="180">
+                <template slot-scope="{row}">
+                    <div>应发送人数:{{row.totalPushNumber}}</div>
+                    <div>实发送人数:{{row.actualPushNumber}}</div>
+                    <div>未通知人数:{{row.notYetPushNumber}}<span class="span-view"><el-link type="primary"><i class="el-icon-view"></i></el-link></span></div>
+                    
+                </template>
+            </el-table-column>
+            <el-table-column label="账单收缴情况" width="180">
+                <template slot-scope="{row}">
+                    <div>应收:{{row.totalReceivable}}元</div>
+                    <div>实收:{{row.netReceipts}}元</div>
+                    <div>未收:{{row.notReceived}}元<span class="span-view"><el-link type="primary"><i class="el-icon-view"></i></el-link></span></div>
+                </template>
+            </el-table-column>
+            <el-table-column prop="payee" label="收款方" width="80"></el-table-column>
+            <el-table-column label="操作">
+                <template slot-scope="{row}">
+                    <div>
+                        <span class="link-span"><el-link  type="success" @click="handleEdit(row)">导入名单</el-link></span>
+                        <el-link  type="primary" @click="handleDelete(row)">查看详情</el-link>
+                    </div>
+                    <div>
+                        <span class="link-span"><el-link  type="primary" @click="handleDelete(row)">推送账单</el-link></span>
+                        <el-link  type="warning" @click="handleDelete(row)">关闭账单</el-link>
+                    </div>
+                    <el-link  type="danger" @click="handleDelete(row)">删除账单</el-link>
+                </template>
+            </el-table-column>
+        </el-table>
+        <el-pagination
+        :current-page.sync="pageIndex"
+        :total="totalElements"
+        :page-sizes="pageSizeList"
+        @current-change="changePage"
+        @size-change="pageSizeChange"
+        layout="total, sizes, prev, pager, next, jumper"
+        ></el-pagination>
+    </div>
+</template>
+<script>
+import Constant from "@/constant";
+import billPushApi from "@/api/business/billPush";
+export default {
+    name: "businessBillPushList",
+    data() {
+        var self = this;
+
+        return {
+            queryModel: {
+                personName: "",
+                status: "",
+                requestTimeRange: ['',''],
+            },
+            loading: false,
+            tableData: [],
+            pageIndex: 1,
+            pageSize: 10,
+            totalPages: 0,
+            totalElements: 0,
+            pageSizeList: [10, 20, 30],
+            multipleSelection: [],
+            showModal: false,
+        }
+    },
+    methods: {
+        changePage(pageIndex) {
+            var self = this;
+
+            self.loading = true;
+
+            self.pageIndex = pageIndex;
+            var formData = new FormData();
+
+            formData.append("pageIndex", self.pageIndex);
+            formData.append("pageSize", self.pageSize);
+
+
+            billPushApi.pageList(formData)
+                .then(function(response) {
+                    self.loading = false;
+
+                    var jsonData = response.data.data;
+
+                    self.tableData = jsonData.data;
+                    self.totalPages = jsonData.totalPages;
+                    self.totalElements = jsonData.recordsTotal;
+                })
+                .catch(error => {
+                    self.loading = false;
+                    // self.$message.error(error + "");
+                });
+        },
+        pageSizeChange(pageSize) {
+            this.pageSize = pageSize;
+        },
+    },
+    mounted: function() {
+        this.changePage(1);
+    }
+}
+</script>
+<style lang="scss" scoped>
+.el-breadcrumb {
+  margin: 10px;
+  line-height: 20px;
+}
+
+.el-divider {
+  margin: 5px 0;
+}
+
+.demo-form-inline {
+  margin-left: 10px;
+  text-align: left;
+}
+
+.button-group {
+  margin-left: 10px;
+  text-align: left;
+}
+.link-span{
+    margin-right: 30px;
+}
+.span-view{
+    margin-left: 10px;
+}
+</style>

+ 293 - 0
src/views/business/clockOut-list.vue

@@ -0,0 +1,293 @@
+<template>
+  <div>
+    <el-breadcrumb separator=">">
+      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="#">系统管理</a>
+      </el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="#">异地打卡记录</a>
+      </el-breadcrumb-item>
+    </el-breadcrumb>
+    <el-divider></el-divider>
+    <!--
+      要resetFields起作用,必须配置:model和prop
+    -->
+    <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+      <el-form-item label="申请人姓名" prop="personName">
+        <el-input type="text" size="mini" v-model="queryModel.personName"></el-input>
+      </el-form-item>
+      <el-form-item label="打卡日"  prop="requestTimeRange">
+        <el-date-picker
+            v-model="queryModel.requestTimeRange"
+            type="daterange"
+            size="mini"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            placeholder="选择时间范围"
+            value-format="yyyy-MM-dd"
+            >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="审批状态" prop="status">
+        <el-select
+          v-model="queryModel.status"
+          size="mini"
+          placeholder="请选择"
+        >
+        <el-option v-for="item in statusList" :key="item.value" :label="item.name" :value="item.value"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          size="mini"
+          icon="ios-search"
+          @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>
+    <el-row class="button-group"></el-row>
+    <el-table :data="tableData" style="min-height:400px;" v-loading="loading" stripe>
+      <el-table-column type="index" label="序号" :index="indexMethod" width="50"></el-table-column>
+      <el-table-column prop="personName" label="申请人" width="120"></el-table-column>
+      <el-table-column prop="companyName" label="申请单位" width="180"></el-table-column>
+      <el-table-column prop="fillDay" label="打卡日" width="120"></el-table-column>
+      <el-table-column prop="fillAttendanceTime" label="打卡时间" width="120"></el-table-column>
+      <el-table-column prop="address" label="打卡地址" width="180"></el-table-column>
+      <el-table-column prop="content" label="内容" width="180" show-overflow-tooltip></el-table-column>
+      <el-table-column prop="approvalPersonName" label="审批人" width="120"></el-table-column>
+      <el-table-column prop="statusN" label="审批状态" width="80"></el-table-column>
+      <el-table-column label>
+        <template slot-scope="{row}">
+          <el-button size="mini" type="warning" @click="handleOpenFiles(row)">查看附件</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      :current-page.sync="pageIndex"
+      :total="totalElements"
+      :page-sizes="pageSizeList"
+      @current-change="changePage"
+      @size-change="pageSizeChange"
+      layout="total, sizes, prev, pager, next, jumper"
+    ></el-pagination>
+    <fillAttendanceFiles-list
+      v-if="showModal"
+      :businessKey="businessKey"
+      :title="modalTitle"
+      @close="onDetailModalClose"
+    ></fillAttendanceFiles-list>
+  </div>
+</template>
+<script>
+import Constant from "@/constant";
+import fillAttendanceApi from "@/api/business/fillAttendance";
+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
+
+export default {
+  name: "BusinessClockOutList",
+  data() {
+    var self = this;
+
+    return {
+      queryModel: {
+        personName: "",
+        status: "",
+        requestTimeRange: ['',''],
+      },
+      loading: false,
+      statusList:[{
+        name:"审核中",
+        value:"0",
+      },{
+        name:"同意",
+        value:"1",
+      },{
+        name:"拒绝",
+        value:"2",
+      }],
+      tableData: [],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPages: 0,
+      totalElements: 0,
+      field: "",
+      direction: "",
+      pageSizeList: [10, 20, 30],
+      multipleSelection: [],
+      showModal: false,
+      modalTitle: "",
+      businessKey: "",
+      typeData: [],
+      companyResult: [],
+      treeData: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children"
+      }
+    };
+  },
+  created() {
+    var formData = new FormData();
+    formData.append("catalogName", "补卡类型");
+    dataDictionaryApi.findByCatalogName(formData).then(response => {
+      var jsonData = response.data;
+      this.typeData = jsonData.data;
+    });
+
+    companyInfoApi.list().then(function(response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        if (jsonData.data != null && jsonData.data != "") {
+          self.companyResult = jsonData.data;
+        }
+      }
+    });
+
+    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) {
+      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;
+
+      self.loading = true;
+
+      self.pageIndex = pageIndex;
+      var formData = new FormData();
+
+      formData.append("pageIndex", self.pageIndex);
+      formData.append("pageSize", self.pageSize);
+
+      formData.append("personName", self.queryModel.personName);
+
+      if(self.queryModel.requestTimeRange[0] != null){
+
+        formData.append("startTime", self.queryModel.requestTimeRange[0]);
+      }
+
+      if(self.queryModel.requestTimeRange[1] != null){
+        formData.append("endTime", self.queryModel.requestTimeRange[1]);
+      }
+
+      formData.append("status", self.queryModel.status);
+
+      fillAttendanceApi
+        .clockPageList(formData)
+        .then(function(response) {
+          self.loading = false;
+
+          var jsonData = response.data.data;
+
+          self.tableData = jsonData.data;
+          self.totalPages = jsonData.totalPages;
+          self.totalElements = jsonData.recordsTotal;
+        })
+        .catch(error => {
+          self.loading = false;
+          // self.$message.error(error + "");
+        });
+    },
+    pageSizeChange(pageSize) {
+      this.pageSize = pageSize;
+    },
+    sortChange(data) {
+      this.field = data.column.field;
+      this.direction = data.order;
+
+      this.changePage(this.pageIndex);
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    handleReset(name) {
+      this.$refs[name].resetFields();
+    },
+    handleOpenFiles(record) {
+      this.modalTitle = "查看附件";
+      this.businessKey = record.id;
+      this.showModal = true;
+    },
+    onDetailModalClose(refreshed) {
+      //保存成功后回调
+      this.showModal = false;
+
+      if (refreshed) {
+        this.changePage(this.pageIndex);
+      }
+    }
+  },
+  mounted: function() {
+    this.changePage(1);
+  }
+};
+</script>
+<style lang="scss" scoped>
+.el-breadcrumb {
+  margin: 10px;
+  line-height: 20px;
+}
+
+.el-divider {
+  margin: 5px 0;
+}
+
+.demo-form-inline {
+  margin-left: 10px;
+  text-align: left;
+}
+
+.button-group {
+  margin-left: 10px;
+  text-align: left;
+}
+</style>

+ 5 - 4
src/views/business/fillAttendance-list.vue

@@ -35,7 +35,7 @@
           placeholder="请选择"
           style="width:100px"
         >
-          <el-option v-for="type in typeData" :key="type.id" :label="type.name" :value="type.id"></el-option>
+          <el-option v-for="type in typeData" :key="type.value" :label="type.name" :value="type.value"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="审批状态" prop="status">
@@ -68,7 +68,7 @@
       <el-table-column prop="fillAttendanceTime" label="补卡时间" width="120"></el-table-column>
       <el-table-column prop="content" label="内容" width="180" show-overflow-tooltip></el-table-column>
       <el-table-column prop="approvalPersonName" label="审批人" width="120"></el-table-column>
-      <el-table-column prop="status" label="审批状态" width="80"></el-table-column>
+      <el-table-column prop="statusN" label="审批状态" width="80"></el-table-column>
       <el-table-column label>
         <template slot-scope="{row}">
           <el-button size="mini" type="warning" @click="handleOpenFiles(row)">查看附件</el-button>
@@ -147,11 +147,12 @@ export default {
       this.typeData = jsonData.data;
     });
 
-    companyInfoApi.list().then(function(response) {
+    companyInfoApi.list().then((response)=>{
       var jsonData = response.data;
+      
       if (jsonData.result) {
         if (jsonData.data != null && jsonData.data != "") {
-          self.companyResult = jsonData.data;
+          this.companyResult = jsonData.data;
         }
       }
     });

+ 4 - 18
src/views/business/requestForLeave-list.vue

@@ -46,7 +46,7 @@
           <el-option v-for="item in statusList" :key="item.id" :label="item.name" :value="item.id"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="申请时间">
+      <el-form-item label="申请时间" prop="requestTimeRange">
         <el-date-picker
             v-model="queryModel.requestTimeRange"
             type="daterange"
@@ -102,12 +102,6 @@
       <el-table-column type="expand">
         <template slot-scope="{row}">
           <el-form label-position="left" class="demo-table-expand">
-            <el-form-item label="申请家长:">
-              <span>{{row.parentName }}</span>
-            </el-form-item>
-            <el-form-item label="家长手机号:">
-              <span>{{row.parentPhone }}</span>
-            </el-form-item>
             <el-form-item label="请假类型:">
               <span>{{row.leaveTypeN }}</span>
             </el-form-item>
@@ -117,17 +111,11 @@
             <el-form-item label="请假事由:">
               <span>{{row.reason }}</span>
             </el-form-item>
-            <el-form-item label="上传附件:">
-              <span>{{row.imageUrl }}</span>
-            </el-form-item>
-            <el-form-item label="班主任:">
-              <span>{{row.teacherName }}</span>
-            </el-form-item>
             <el-form-item label="审核意见:">
-              <span>{{row.remark }}</span>
+              <span>{{row.approvalExplain }}</span>
             </el-form-item>
             <el-form-item label="审核时间:">
-              <span>{{row.updateTime }}</span>
+              <span>{{row.approvedTime }}</span>
             </el-form-item>
           </el-form>
         </template>
@@ -225,9 +213,7 @@ export default {
       }
     },
     loadTree() {
-      var formData = new FormData();
-
-      companyInfoApi.loadChildren(formData).then(resp => {
+      companyInfoApi.list().then(resp => {
         var jsonData = resp.data;
 
         if (jsonData.result) {

+ 68 - 10
src/views/business/workAttendance-list.vue

@@ -47,6 +47,10 @@
               v-model="queryModel.companyId"
               height="200"
             ></el-select-tree>
+            &nbsp;
+            <el-checkbox v-model="queryModel.subordinate"
+              >是否包含下级单位</el-checkbox
+            >
           </el-form-item>
           <el-form-item label="统计区间" prop="timeRanges">
             <el-date-picker
@@ -65,7 +69,7 @@
           <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-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">
@@ -73,7 +77,7 @@
           </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-form-item>
             <el-button
               type="primary"
@@ -90,14 +94,14 @@
           </el-form-item>
         </el-row>
       </div>
-      <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>
+      </div> -->
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
@@ -109,17 +113,28 @@
         :loading="downloadLoading"
         @click="exportXls"
       >导出数据</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-edit"
+        :loading="loading"
+        @click="handleBatchUpdate"
+      >重新生成考勤数据</el-button>
     </el-row>
-    <el-table ref="formTable" stripe :data="tableData" :height="tableHeight" style="width: 100%">
+    <el-table ref="formTable" stripe :data="tableData" :height="tableHeight" style="width: 100%" v-loading="loading">
       <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>
+      <el-table-column label="公司" prop="companyName" width="200"></el-table-column>
+      <el-table-column label="上级部门" prop="parentDepartmentName" width="200"></el-table-column>
+      <el-table-column label="部门" prop="departmentName" width="200"></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 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="restDays"></el-table-column>
       <el-table-column label="迟到次数" prop="lateNum"></el-table-column>
       <el-table-column label="早退次数" prop="leaveNum"></el-table-column>
       <el-table-column label="上班缺卡次数" prop="missCardOnWorkCount"></el-table-column>
@@ -172,6 +187,7 @@ export default {
       queryModel: {
         companyId: "",
         timeRanges: "",
+        subordinate: false,
         name: "",
         jobNumber: "",
         position1: "",
@@ -312,7 +328,10 @@ export default {
       if (self.queryModel.companyId == null) {
         self.queryModel.companyId = "";
       }
+      
       formData.append("companyId", self.queryModel.companyId);
+      formData.append("subordinate", self.queryModel.subordinate);
+
       formData.append("name", self.queryModel.name);
 
       var startDate = "";
@@ -377,6 +396,12 @@ export default {
 
       content.push(" ");
 
+      if (item.sources == "1") {
+        content.push("内勤");
+      } else {
+        content.push("外勤");
+      }
+
       if (item.classifier == 1) {
         content.push("上班");
       } else {
@@ -395,6 +420,9 @@ export default {
         content.push("迟到");
       } else if (item.result == "3") {
         content.push("早退");
+      }else if(item.result == "4"){
+        content.push("请假");
+        fontColor = "#11A8CD";
       }
 
       return `<font color='${fontColor}'>` + content.join("") + "</font>";
@@ -424,7 +452,9 @@ export default {
           if (self.queryModel.companyId == null) {
             self.queryModel.companyId = "";
           }
+          
           formData.append("companyId", self.queryModel.companyId);
+          formData.append("subordinate", self.queryModel.subordinate);
           formData.append("name", self.queryModel.name);
 
           var startDate = "";
@@ -479,9 +509,37 @@ export default {
       //设置为第一天
       lastDate.setDate(1);
       var lastMonth = parseInt(lastDate.getMonth() + 2);
-      var endTime =
-        lastDate.getFullYear() + "-" + lastMonth + "-" + lastDate.getDate();
+      var endTime = lastDate.getFullYear() + "-" + lastMonth + "-" + lastDate.getDate();
+      
       self.queryModel.timeRanges = [startTime, endTime];
+    },
+    handleBatchUpdate() {
+      var self = this;
+      var formData = new FormData();
+
+      formData.append("companyId", this.queryModel.companyId);
+      formData.append("startDate", this.queryModel.timeRanges[0]);
+      formData.append("endDate", this.queryModel.timeRanges[1]);
+
+      self.loading = true;
+
+      workAttendanceApi.batchUpdate(formData).then(function(response) {
+        var jsonData = response.data;
+
+        self.loading = false;
+
+        if (jsonData.result) {
+          self.$message({
+            type: "success",
+            message: jsonData.message + ""
+          });
+        } else {
+          self.$message({
+            type: "warning",
+            message: jsonData.message + ""
+          });
+        }
+      });
     }
   },
   mounted: function() {},

+ 23 - 0
yarn.lock

@@ -2431,6 +2431,11 @@ core-js@^3.3.2:
   resolved "https://registry.npm.taobao.org/core-js/download/core-js-3.4.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.4.2.tgz#ee2b1a60b50388d8ddcda8cdb44a92c7a9ea76df"
   integrity sha1-7isaYLUDiNjdzajNtEqSx6nqdt8=
 
+core-js@^3.6.5:
+  version "3.7.0"
+  resolved "https://registry.npm.taobao.org/core-js/download/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f"
+  integrity sha1-sKdhoCSIV3r7+XF55Ggb9JVoUg8=
+
 core-util-is@1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
   resolved "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@@ -3328,6 +3333,11 @@ eventemitter3@^4.0.0:
   resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
   integrity sha1-1lF2FjiH7lnzhtZMgmELaWpKdOs=
 
+eventemitter3@^4.0.3:
+  version "4.0.7"
+  resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
+  integrity sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=
+
 events@^3.0.0:
   version "3.0.0"
   resolved "https://registry.npm.taobao.org/events/download/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88"
@@ -4079,6 +4089,14 @@ highlight.js@^9.6.0:
   resolved "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.16.2.tgz#68368d039ffe1c6211bcc07e483daf95de3e403e"
   integrity sha1-aDaNA5/+HGIRvMB+SD2vld4+QD4=
 
+hls.js@^0.14.15:
+  version "0.14.16"
+  resolved "https://registry.npm.taobao.org/hls.js/download/hls.js-0.14.16.tgz#4ff68a1fa7260a43d316270e9bc7f7bdf93c5731"
+  integrity sha1-T/aKH6cmCkPTFicOm8f3vfk8VzE=
+  dependencies:
+    eventemitter3 "^4.0.3"
+    url-toolkit "^2.1.6"
+
 hmac-drbg@^1.0.0:
   version "1.0.1"
   resolved "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -8360,6 +8378,11 @@ url-parse@^1.4.3:
     querystringify "^2.1.1"
     requires-port "^1.0.0"
 
+url-toolkit@^2.1.6:
+  version "2.2.1"
+  resolved "https://registry.npm.taobao.org/url-toolkit/download/url-toolkit-2.2.1.tgz#89009ed3d62a3574de079532a7266c14d2cc1c4f"
+  integrity sha1-iQCe09YqNXTeB5UypyZsFNLMHE8=
+
 url@^0.11.0:
   version "0.11.0"
   resolved "https://registry.npm.taobao.org/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"