Ver Fonte

解决冲突

yanliming há 4 anos atrás
pai
commit
4ecf3c912a

+ 283 - 2
src/routers/modules/base.js

@@ -398,10 +398,291 @@ var routers = [
                 component: () => import('@/views/base/personRoleInfo-list.vue'),
                 meta: {
                         roles: ["admin"],
-                        title: '角色管理'
+                        title: '用户身份管理'
                 }
         },
+        {
+                path: '/base/watchInfo/list',
+                name: 'baseWatchInfoList',
+                // 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/base/watchInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '老人手表管理'
+                }
+        },
+        {
+                path: '/base/watchMeasure/list',
+                name: 'baseWatchMeasureList',
+                // 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/base/watchMeasure-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '手表消息管理'
+                }
+        },
+        {
+                path: '/base/message/list',
+                name: 'baseMessageList',
+                // 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/base/messageInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '消息通知'
+                }
+        },
+        {
+                path: '/base/cameraInfo/list',
+                name: 'baseCameraInfoList',
+                // 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/base/cameraInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '摄像头管理'
+                }
+        },
+        {
+                path: '/base/iconInfo/list',
+                name: 'baseIconInfoList',
+                // 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/base/iconInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '图标管理'
+                }
+        },
+        {
+                //订单管理
+                path: '/base/order/list',
+                name: 'BaseOrderList',
+                // 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/base/order-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '订单管理'
+                }
+        },
+        {
+                path: '/base/companyStructureInfo/list',
+                name: 'baseCompanyStructureInfoList',
+                // 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/base/companyStructureInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '单位机构管理'
+                }
+        },
+        {
+                path: '/base/parkingWay/list',
+                name: 'baseParkingWayList',
+                component: () => import('@/views/base/parkingWay-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '车位租赁方式管理'
+                }
+        },
+        {
+                path: '/base/problemFeedback/list',
+                name: 'baseProblemFeedback',
+                component: () => import('@/views/base/problemFeedback-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '问题反馈管理'
+                }
+        },
+        {
+                path: '/base/oldPersonInfo/list',
+                name: 'baseOldPersonInfo',
+                component: () => import('@/views/old/oldPersonInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '长者管理'
+                }
+        },
+        {
+                path: '/base/applicationExamine/list',
+                name: 'baseApplicationExamineList',
+                component: () => import('@/views/base/applicationExamine-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '审批角色管理'
+                }
+        },
+        {
+
+                path: '/base/payService/list',
+                name: 'basePayServiceList',
+                component: () => import('@/views/base/payService-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '收费项目管理'
+                }
+        },
+        {
 
+                path: '/base/activityInfo/list',
+                name: 'baseActivityInfo',
+                component: () => import('@/views/base/activityInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '活动管理'
+                }
+        },
+        {
+                path: '/base/businessOut/list',
+                name: 'baseBusinessOutList',
+                component: () => import('@/views/base/businessOut-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '外勤申请记录'
+                }
+        },
+        {
+                path: '/base/checkinInfo/list',
+                name: 'baseCheckinInfo',
+                component: () => import('@/views/base/checkinInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '租户管理'
+                }
+        },
+        {
+                path: '/base/companyPayment/list',
+                name: 'baseCompanyPayment',
+                component: () => import('@/views/base/companyPayment-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '收款账户管理'
+                }
+        },
+        {
+                path: '/base/returnInfo/list',
+                name: 'baseReturnInfoList',
+                component: () => import('@/views/base/returnInfo-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '返乡人员管理'
+                }
+        },
+        {
+                path: '/base/approvalConfig/list',
+                name: 'baseApprovalConfigList',
+                component: () => import('@/views/base/approvalConfig-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '审核层级管理'
+                }
+        },
+        {
+                path: '/base/workOver/list',
+                name: 'baseWorkOverList',
+                component: () => import('@/views/base/workOver-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '加班申请记录'
+                }
+        },
+        {
+                path: '/base/workSchedule/list',
+                name: 'baseWorkScheduleList',
+                component: () => import('@/views/base/workSchedule-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '班次考勤设置'
+                }
+        },
+        {
+                //学生每日健康情况-包含健康打卡和上报
+                path: '/base/personHealthLedger/list',
+                name: 'basePersonHealthLedgerList',
+                // 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/base/personHealthLedger-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '健康打卡情况'
+                }
+        },
+        {
+                //审批用户管理
+                path: '/base/personApplication/list',
+                name: 'basePersonApplicationList',
+                // 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/base/personApplication-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '注册人员管理'
+                }
+        },
+        {
+                //商户优惠卷管理
+                path: '/base/parkingCoupon/list',
+                name: 'baseParkingCouponList',
+                // 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/base/parkingCoupon-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '商户优惠卷管理'
+                }
+        },
+        {
+                //商户管理
+                path: '/base/parkingMerchant/list',
+                name: 'baseParkingMerchantList',
+                // 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/base/parkingMerchant-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '商户管理'
+                }
+        },
+        {
+                //停车收费记录
+                path: '/base/parkingRecord/list',
+                name: 'baseParkingRecordList',
+                // 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/base/parkingRecord-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '停车收费记录'
+                }
+        },
+        {
+                //车辆出入记录
+                path: '/base/parkingRecordInOut/list',
+                name: 'parkingRecordInOutList',
+                // 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/base/parkingRecordInOut-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '车辆出入记录'
+                }
+        },
         /////////////////////////////////////////新生源项目新增功能/////////////////////////////////////////////////////
         {
                 path: '/base/canteenInfo/list',
@@ -452,7 +733,7 @@ var routers = [
                 }
         },
 
-        
+
         {
                 path: '/base/workPersonScheduling/list',
                 name: 'BaseWorkPersonSchedulingList',

+ 189 - 0
src/views/base/parkingInfo-detail.vue

@@ -0,0 +1,189 @@
+
+<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="'100px'"
+      >
+        <el-form-item label="名称" prop="parkingName">
+          <el-input
+            v-model="formModel.parkingName"
+            placeholder="请输入名称"
+            style="width: 300px"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="停车场编号" prop="parkId">
+          <el-input
+            v-model="formModel.parkId"
+            placeholder="请输入停车场编号"
+            style="width: 300px"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="上级" prop="parentId">
+          <el-select-tree
+            size="mini"
+            :props="parentProps"
+            :options="parentResult"
+            v-model="formModel.parentId"
+            height="200"
+          ></el-select-tree>
+        </el-form-item>
+        <el-form-item label="所属公司" prop="companyId">
+          <el-select-tree
+            :props="props"
+            :options="companyResult"
+            v-model="formModel.companyId"
+            height="200"
+            style="width: 230px"
+          ></el-select-tree>
+        </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 parkingInfoApi from "@/api/base/parkingInfo";
+import SelectTree from "@/components/SelectTree";
+import companyInfoApi from "@/api/base/companyInfo";
+
+export default {
+  props: ["businessKey", "title"],
+  data() {
+    return {
+      formModel: {},
+      ruleValidate: {
+        parkingName: [
+          { required: true, message: "名称不能为空", trigger: "blur" },
+        ],
+        parkId: [
+          { required: true, message: "停车场编号不能为空", trigger: "blur" },
+        ],
+      },
+      showDialog: true,
+      loading: false,
+      submitting: false,
+      parentResult: [],
+      parentProps: {
+        value: "id",
+        label: "parkingName",
+      },
+      companyResult: [],
+      
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+    };
+  },
+  created() {
+    var self = this;
+
+    parkingInfoApi.query().then(function (response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        self.parentResult = jsonData.data;
+      }
+    });
+
+    companyInfoApi.treeList().then(function (response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        if (jsonData.data != null && jsonData.data != "") {
+          self.companyResult = jsonData.data;
+        }
+      }
+    });
+  },
+  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 parkingInfoApi.add(self.formModel);
+            } else {
+              return parkingInfoApi.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 parkingInfoApi.create();
+      } else {
+        return parkingInfoApi.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 + "");
+      });
+  },
+  components: {
+    "el-select-tree": SelectTree,
+  },
+};
+</script>

+ 279 - 143
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>
@@ -21,14 +21,19 @@
     >
       <div>
         <el-form-item label="编号" prop="id">
-          <el-input type="text" size="mini" style="width:120px" v-model="queryModel.id"></el-input>
+          <el-input
+            type="text"
+            size="mini"
+            style="width: 120px"
+            v-model="queryModel.id"
+          ></el-input>
         </el-form-item>
         <el-form-item label="姓名" prop="name">
           <el-input
             type="text"
             size="mini"
             v-model="queryModel.name"
-            style="width:120px"
+            style="width: 120px"
           ></el-input>
         </el-form-item>
         <el-form-item label="手机号" prop="phone">
@@ -36,7 +41,7 @@
             type="text"
             size="mini"
             v-model="queryModel.phone"
-            style="width:120px"
+            style="width: 120px"
           ></el-input>
         </el-form-item>
         <el-form-item label="身份证" prop="idCard">
@@ -44,7 +49,7 @@
             type="text"
             size="mini"
             v-model="queryModel.idCard"
-            style="width:190px"
+            style="width: 190px"
           ></el-input>
         </el-form-item>
         <el-form-item label="绑定设备名称" prop="derviceName">
@@ -52,7 +57,7 @@
             type="text"
             size="mini"
             v-model="queryModel.derviceName"
-            style="width:120px"
+            style="width: 120px"
           ></el-input>
         </el-form-item>
         <el-form-item>
@@ -74,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"
@@ -101,40 +92,88 @@
             >是否包含下级单位</el-checkbox
           >
         </el-form-item>
-        <el-form-item label="园区" prop="parkId">
-          <el-select-tree
-            size="mini"
-            :props="props"
-            :options="parkList"
-            v-model="queryModel.parkId"
-            height="200"
-          ></el-select-tree>
-        </el-form-item>
+        <el-form-item label="身份" prop="roleId">
+        <el-select
+          v-model="queryModel.roleId"
+          filterable
+          clearable
+          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>
+        </div>
+      <div>
+        <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>
+        <el-form-item label="健康码" prop="healthyCode">
+          <el-select
+            v-model="queryModel.healthyCode"
+            size="mini"
+            placeholder="请选择"
+            style="width:100px"
+          >
+          <el-option
+              v-for="item in healthyCodeList"
+              :key="item.value"
+              :label="item.name"
+              :value="item.value"
+          ></el-option>
+          </el-select>
         </el-form-item>
       </div>
       <!-- <div>
@@ -287,7 +326,7 @@
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column
         prop="id"
-        label="号"
+        label="人员编号"
         width="80"
         fixed="left"
       ></el-table-column>
@@ -319,13 +358,21 @@
       </el-table-column>
       <el-table-column
         prop="companyName"
-        label="单位"
+        label="主要单位"
         width="250"
+        show-overflow-tooltip
+      ></el-table-column>
+      <el-table-column
+        prop="popedomName"
+        label="主要身份"
+        width="120"
+        show-overflow-tooltip
       ></el-table-column>
       <el-table-column
-        prop="parkName"
-        label="园区"
+        prop="mechanism"
+        label="所有单位身份"
         width="250"
+        show-overflow-tooltip
       ></el-table-column>
       <el-table-column
         prop="phone"
@@ -338,42 +385,31 @@
         width="100"
         show-overflow-tooltip
       ></el-table-column>
+      <el-table-column prop="healthyCodeN" label="健康码" width="80">
+        <template slot-scope="{row}">
+          <span v-if="row.healthyCode">
+            <span v-if="row.healthyCode == '00'" style="color:green">绿码</span>
+            <span v-else-if="row.healthyCode == '01'" style="color:yellow">黄码</span>
+            <span v-else-if="row.healthyCode == '02'" style="color:red">红码</span>
+            <span v-else style="color:gray">灰码</span>
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column label="工作状态" width="120">
+        <template slot-scope="{ row }">
+          <span v-if="row.workStatus == 1">工作</span>
+          <span v-else-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="绑定设备"
         width="150"
         show-overflow-tooltip
       ></el-table-column>
-      <el-table-column
-        prop="position1"
-        :label="position1"
-        width="180"
-        v-if="position1Show"
-      ></el-table-column>
-      <el-table-column
-        prop="position2"
-        :label="position2"
-        width="180"
-        v-if="position2Show"
-      ></el-table-column>
-      <el-table-column
-        prop="position3"
-        :label="position3"
-        width="180"
-        v-if="position3Show"
-      ></el-table-column>
-      <el-table-column
-        prop="position4"
-        :label="position4"
-        width="180"
-        v-if="position4Show"
-      ></el-table-column>
-      <el-table-column
-        prop="position5"
-        :label="position5"
-        width="180"
-        v-if="position5Show"
-      ></el-table-column>
       <el-table-column prop="openId" label="是否绑定公众号" width="180">
         <template slot-scope="{ row }">{{
           row.openId == null ? "否" : "是"
@@ -384,28 +420,6 @@
           row.faceBound ? "是" : "否"
         }}</template>
       </el-table-column>
-      <el-table-column prop="popedom" label="用户身份" width="200">
-        <template slot-scope="{ row }">
-          <el-row>
-            <el-col :span="10" v-if="row.popedom.indexOf('1') != -1"
-              >个人用户</el-col
-            >
-            <el-col
-              :span="10"
-              v-if="row.popedom.indexOf('2') != -1 && row.companyType == 1"
-              >单位管理员</el-col
-            >
-            <el-col
-              :span="10"
-              v-if="row.popedom.indexOf('2') != -1 && row.companyType == 2"
-              >班主任</el-col
-            >
-            <el-col :span="10" v-if="row.popedom.indexOf('3') != -1"
-              >监管专员</el-col
-            >
-          </el-row>
-        </template>
-      </el-table-column>
       <el-table-column label="是否自动同步" width="120">
         <template slot-scope="{ row }">
           <el-switch
@@ -428,7 +442,7 @@
           ></el-switch>
         </template>
       </el-table-column>
-      <el-table-column label="刷卡授权">
+      <!-- <el-table-column label="刷卡授权">
         <template slot-scope="{ row }">
           <el-switch
             v-model="row.cardEnabled"
@@ -449,13 +463,13 @@
             :disabled="disabled"
           ></el-switch>
         </template>
-      </el-table-column>
+      </el-table-column> -->
       <!-- <el-table-column label="密码">
         <template slot-scope="{row}">
           <el-switch v-model="row.passwordEnabled" @change="enabledTo(row.id,'face')" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
         </template>
       </el-table-column>-->
-      <el-table-column label="访客授权">
+      <!-- <el-table-column label="访客授权">
         <template slot-scope="{ row }">
           <el-switch
             v-model="row.guestEnabled"
@@ -465,7 +479,7 @@
             :disabled="disabled"
           ></el-switch>
         </template>
-      </el-table-column>
+      </el-table-column> -->
       <el-table-column label="接收微信通知">
         <template slot-scope="{ row }">
           <el-switch
@@ -507,6 +521,12 @@
                   @click="handleDelete(row)"
                   >删除</el-link
                 >-
+                <el-link
+                  type="primary"
+                  :underline="false"
+                  @click="bindRole(row)"
+                  >机构身份管理</el-link
+                >-
                 <span v-if="row.faceBound">
                   <el-link
                     type="primary"
@@ -563,9 +583,8 @@
               <el-link
                 type="primary"
                 :underline="false"
-                @click="comeOutAuth(row)"
-                >出入权限配置</el-link
-              >
+                @click="updateHealthyCode(row)"
+                >更新健康码</el-link>
             </el-col>
           </el-row>
         </template>
@@ -626,28 +645,37 @@
       <el-form label-width="150px">
         <el-form-item label="模板下载">
           <el-link
-            href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart/companyInfo/2020/3/16170226996.xls"
+            href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart/personInfo/2020/10/小鹏管家人员导入模板.xls"
             type="primary"
             target="_blank"
             >点击下载模板</el-link
           >
         </el-form-item>
         <el-form-item label="单位">
+          <el-select-tree
+            size="large"
+            :props="props"
+            :options="companyResult"
+            v-model="uploadXlsData.companyId"
+            height="200"
+            width="300px"
+          ></el-select-tree>
+        </el-form-item>
+        <el-form-item label="用户身份" prop="personRoleId">
           <el-select
-            v-model="uploadCompanyId"
             filterable
             placeholder="请选择"
-            @change="changeUploadCompayId"
-            style="width: 280px"
+            style="width: 300px;"
+            v-model="uploadXlsData.personRoleId"
           >
             <el-option
-              v-for="company in companyResult"
-              :key="company.id"
-              :label="company.name"
-              :value="company.id"
+              v-for="role in personRoleResult"
+              :key="role.personRoleName"
+              :label="role.personRoleName"
+              :value="role.id"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item>        
         <el-form-item label="上传文件">
           <el-upload
             class="upload-demo"
@@ -698,9 +726,12 @@
         element-loading-background="rgba(0, 0, 0, 0.8)"
       >
         <el-form-item label="设备">
-          <el-select v-model="boundDeviceIds" filterable 
-          placeholder="请选择" multiple
-          style="width:300px;"
+          <el-select
+            v-model="boundDeviceIds"
+            filterable
+            placeholder="请选择"
+            multiple
+            style="width: 300px"
           >
             <el-option
               v-for="devices in deviceResult"
@@ -741,9 +772,7 @@
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="closeBatchUnBoundDevice">关 闭</el-button>
-        <el-button type="primary" @click="handleBatchUnBoundDevice"
-          >确 定</el-button
-        >
+        <el-button type="primary" @click="handleBatchUnBoundDevice">确 定</el-button>
       </div>
     </el-dialog>
     <!-- 批量解绑设备end -->
@@ -758,6 +787,11 @@
         <img :src="bindWechatUrl" style="width: 300px; fit-object: cover" />
       </div>
     </el-dialog>
+    <personPopedom-list
+      v-if="showRoleModal"
+      :personId="personId"
+      @close="onDetailModalClose"
+    ></personPopedom-list>
   </div>
 </template>
 <script>
@@ -765,14 +799,17 @@ import Constant from "@/constant";
 import PersonInfoDetail from "./personInfo-detail";
 import PersonDeviceRelationList from "./personDeviceRelation-list";
 import PersonDeviceRelationBoundList from "./personDeviceRelation-BoundList";
+import PersonPopedomList from "./personPopedom-list";
 
 import rolePersonCheckOnDetail from "./rolePersonCheckOn-detail";
 
 import personInfoApi from "@/api/base/personInfo";
 import companyInfoApi from "@/api/base/companyInfo";
+import personRoleInfoApi from "@/api/base/personRoleInfo";
 import companyPositionApi from "@/api/base/companyPosition";
 import deviceInfoApi from "@/api/base/deviceInfo";
 import personDeviceRelationApi from "@/api/base/personDeviceRelation";
+import dataDictionaryApi from "@/api/sys/dataDictionary";
 import SelectTree from "@/components/SelectTree";
 import LifeRecordList from "./lifeRecord-list";
 
@@ -802,7 +839,11 @@ export default {
         position4: "",
         position5: "",
         derviceName: "",
-        parkId:""
+        parkId: "",
+        roleId:"",
+        enableAttendance: null,
+        enableRegisterExamine: null,
+        healthyCode:"",
       },
       personIds:"",
       loading: false,
@@ -819,14 +860,15 @@ export default {
       modalTitle: "",
       businessKey: "",
       companyResult: [],
-      uploadCompanyId: "",
       batchImportVisible: false,
       batchImportFileList: [],
       uploadUrlXls: Constant.serverUrl + "/base/personInfo/importXls",
       uploadXlsData: {
         subFolder: "company",
         companyId: "",
+        personRoleId: ""
       },
+      personRoleResult: [],
       headers: {
         Authorization: getToken(),
       },
@@ -864,13 +906,51 @@ export default {
       bindWechatUrl: "",
       bindWechatLoading: false,
       showRolePersonCheckOnModal:false,
-      parkList:[]
+      parkList: [],
+      showRoleModal: false,
+      roleResult:[],
+      healthyCodeList:[],
     };
   },
+  watch: {
+    "uploadXlsData.companyId":function(newVal,oldVal){
+        var self = this;
+
+        if(newVal!=null){
+          var formData = new FormData();
+          formData.append("companyId", newVal);
+
+          //查询单位下角色
+          personRoleInfoApi.listByCompanyId(formData)
+          .then(response=>{
+              var jsonData = response.data;
+
+              if (jsonData.result) {
+                self.personRoleResult = jsonData.data;
+              }
+          })
+        }
+    },
+    "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() {
     var self = this;
 
-    companyInfoApi.list().then(function (response) {
+    companyInfoApi.treeList().then(function (response) {
       var jsonData = response.data;
       if (jsonData.result) {
         if (jsonData.data != null && jsonData.data != "") {
@@ -879,11 +959,18 @@ export default {
       }
     });
 
-    companyInfoApi.list({type:"3"}).then(response => {
+    var formData = new FormData();
+    formData.append("catalogName", "健康码");
+    dataDictionaryApi.findByCatalogName(formData).then(response => {
       var jsonData = response.data;
-      this.parkList = jsonData.data;
+      this.healthyCodeList = jsonData.data;
     });
 
+    // companyInfoApi.list({ type: "3" }).then((response) => {
+    //   var jsonData = response.data;
+    //   this.parkList = jsonData.data;
+    // });
+
     deviceInfoApi.list().then(function (response) {
       var jsonData = response.data;
       if (jsonData.result) {
@@ -924,9 +1011,7 @@ export default {
       this.queryModel.parentId = value;
     },
     loadTree() {
-      var formData = new FormData();
-
-      companyInfoApi.loadChildren(formData).then((resp) => {
+      companyInfoApi.treeList().then((resp) => {
         var jsonData = resp.data;
 
         if (jsonData.result) {
@@ -952,6 +1037,10 @@ export default {
         }
       });
     },
+    adjustTableHeight() {
+      var self = this;
+      self.tableHeight = window.innerHeight - self.$refs.formTable.$el.offsetTop - 110;
+    },
     changePage(pageIndex) {
       var self = this;
 
@@ -978,6 +1067,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);
@@ -986,6 +1083,8 @@ export default {
 
       formData.append("derviceName", self.queryModel.derviceName);
 
+      formData.append("roleId", self.queryModel.roleId);
+
       if (self.queryModel.parkId == null) {
         self.queryModel.parkId = "";
       }
@@ -999,6 +1098,8 @@ export default {
         formData.append("direction", this.direction);
       }
 
+      formData.append("healthyCode", self.queryModel.healthyCode);
+
       personInfoApi
         .pageList(formData)
         .then(function (response) {
@@ -1012,8 +1113,7 @@ export default {
 
           //页面高度-列表上面的高度-分页栏高度
           //45为分页栏的高度
-          self.tableHeight =
-            window.innerHeight - self.$refs.formTable.$el.offsetTop - 110;
+          self.adjustTableHeight();
         })
         .catch((error) => {
           self.loading = false;
@@ -1109,15 +1209,12 @@ export default {
       this.showModal = false;
       this.showDeviceModal = false;
       this.showBoundModal = false;
+      this.showRoleModal = false;
 
       if (refreshed) {
         this.changePage(this.pageIndex);
       }
     },
-    changeUploadCompayId(value) {
-      var self = this;
-      self.uploadXlsData.companyId = value;
-    },
     bindDevice(record) {
       //绑定设备
       this.personId = record.id;
@@ -1132,10 +1229,12 @@ export default {
     beforeUpload(file, fileList) {
       //导入前判断
       var self = this;
-      if (self.uploadCompanyId == null || self.uploadCompanyId == "") {
+      var companyId = self.uploadXlsData.companyId;
+
+      if (companyId==null || companyId.length==0) {
         self.$message({
           type: "warning",
-          message: "请选择单位",
+          message: "请选择单位!",
         });
         self.xlsLoading = false;
         return false;
@@ -1148,19 +1247,18 @@ export default {
     handleBatchImportSuccess(response, file, fileList) {
       var self = this;
       self.xlsLoading = false;
+      self.uploadXlsData.companyId = null;
+      
       if (response.result) {
         self.$message.success(response.message);
         this.batchImportFileList = [];
         this.changePage(1);
-        this.uploadCompanyId = "";
-        this.uploadXlsData.companyId = "";
+
         this.batchImportVisible = false;
       } else {
         //this.$message.error(response.message);
         this.batchImportFileList = [];
         this.changePage(1);
-        this.uploadCompanyId = "";
-        this.uploadXlsData.companyId = "";
 
         if (response.data != null) {
           //下载有错误信息提示的报表
@@ -1215,6 +1313,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);
@@ -1228,6 +1334,10 @@ export default {
         var jsonData = response.data;
         if (jsonData.result) {
           if (jsonData.data != null) {
+            if(document.location.href.startsWith("https://")){
+                jsonData.data = jsonData.data.replace("http://","https://");
+            }
+            
             self.$message({
               showClose: true,
               type: "success",
@@ -1400,11 +1510,11 @@ export default {
       //选择设备
       let boundDeviceIds = self.boundDeviceIds;
 
-      var idList = this.multipleSelection.map(record => {
+      var idList = this.multipleSelection.map((record) => {
         return record.id;
       });
 
-      boundDeviceIds.forEach(boundDeviceId=>{
+      boundDeviceIds.forEach((boundDeviceId) => {
         var formData = new FormData();
 
         formData.append("persons", idList);
@@ -1412,7 +1522,7 @@ export default {
 
         personDeviceRelationApi
           .batchBindPerson(formData)
-          .then(function(response) {
+          .then(function (response) {
             var jsonData = response.data;
             //self.loading = false;
             self.boundDeviceDisabled = false;
@@ -1422,14 +1532,14 @@ export default {
               self.boundDeviceId = "";
               self.$message({
                 type: "success",
-                message: "绑定成功!"
+                message: "绑定成功!",
               });
             } else {
               self.$message({
                 showClose: true,
                 dangerouslyUseHTMLString: true,
                 message: `有部分人员绑定失败,<a href="${jsonData.message}" target="_blank">点击下载错误信息报表</a>&nbsp;`,
-                duration: 30000
+                duration: 30000,
               });
             }
           });
@@ -1639,12 +1749,37 @@ export default {
           });
       });
     },
+    bindRole(record) {
+      //绑定设备
+      this.personId = record.id;
+      this.showRoleModal = true;
+    },
+    updateHealthyCode(record) {
+      var self = this;
+      self.loading = true;
+
+      personInfoApi.updateHealthyCode(record.id).then(response=>{
+        self.loading = false;
+
+        var jsonData = response.data;
+            
+        if (jsonData.result) {
+          self.$message.success("更新健康码状态成功!");
+          self.changePage(self.pageIndex);
+        }
+        else{
+          self.$message.success("更新健康码状态失败!");
+        }
+      });
+    }
   },
   async mounted() {
-    var self = this;
-
     this.changePage(1);
     //self.tableHeight = window.innerHeight - self.$refs.queryForm.$el.offsetTop - 100;
+    window.addEventListener('resize',this.adjustTableHeight);
+  },
+  beforeDestroy() {
+    window.removeEventListener('resize',this.adjustTableHeight);
   },
   components: {
     "personInfo-detail": PersonInfoDetail,
@@ -1652,7 +1787,8 @@ export default {
     "personDeviceRelation-BoundList": PersonDeviceRelationBoundList,
     "el-select-tree": SelectTree,
     "lifeRecord-list": LifeRecordList,
-    "rolePersonCheckOn-detail":rolePersonCheckOnDetail
+    "rolePersonCheckOn-detail":rolePersonCheckOnDetail,
+    "personPopedom-list": PersonPopedomList,
   },
 };
 </script>

+ 99 - 46
src/views/base/personRoleInfo-list.vue

@@ -3,10 +3,10 @@
     <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>
+        <a href="/personRoleInfo">用户身份管理</a>
       </el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider></el-divider>
@@ -19,26 +19,34 @@
       inline
       class="demo-form-inline"
     >
-      <el-form-item label="用户角色名称" prop="personRoleName">
-        <el-input
-          type="text"
-          size="mini"
-          v-model="queryModel.personRoleName"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="适用于与场景id" prop="sceneId">
-        <el-input
-          type="text"
-          size="mini"
+      <el-form-item label="适用场景" prop="sceneId">
+        <el-select
           v-model="queryModel.sceneId"
-        ></el-input>
+          filterable
+          placeholder="请选择"
+          style="width: 110px"
+          size="mini"
+        >
+          <el-option
+            v-for="result in sceneData"
+            :key="result.id"
+            :label="result.sceneName"
+            :value="result.id"
+          ></el-option>
+        </el-select>
       </el-form-item>
       <el-form-item label="是否启用" prop="useEnable">
-        <el-input
-          type="text"
-          size="mini"
+        <el-select
           v-model="queryModel.useEnable"
-        ></el-input>
+          filterable
+          placeholder="请选择"
+          style="width: 80px"
+          size="mini"
+        >
+          <el-option label="全部" value=""></el-option>
+          <el-option label="是" value="1"></el-option>
+          <el-option label="否" value="0"></el-option>
+        </el-select>
       </el-form-item>
       <el-form-item>
         <el-button
@@ -98,7 +106,12 @@
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column
         prop="personRoleName"
-        label="角色名称"
+        label="身份名称"
+        width="150"
+      ></el-table-column>
+      <el-table-column
+        prop="parentName"
+        label="上级身份"
         width="150"
       ></el-table-column>
       <el-table-column
@@ -116,18 +129,31 @@
           ></el-switch>
         </template>
       </el-table-column>
-      <el-table-column prop="remark" label="备注" width="180"></el-table-column>
-      <el-table-column label="操作">
+      <el-table-column prop="registerEnable" label="注册时可选" width="180">
         <template slot-scope="{ row }">
-          <el-button size="mini" type="warning" @click="handleEdit(row)"
-            >编辑</el-button
+          <el-switch
+            v-model="row.registerEnable"
+            active-color="#13ce66"
+            inactive-color="#ff4949"
+            @change="updateRegisterEnabled(row)"
+          ></el-switch>
+        </template>
+      </el-table-column>
+      <el-table-column prop="registerEnable" label="首页菜单设置" width="180">
+        <template slot-scope="{ row }">
+          <el-link type="primary" @click="showIconList(row,'common')">通用菜单</el-link>-
+          <el-link type="primary" @click="showIconList(row,'default')">默认菜单</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column prop="remark" label="备注"></el-table-column>
+      <el-table-column label="操作" fixed="right" width="200">
+        <template slot-scope="{ row }">
+          <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button
           >
           <el-button size="mini" type="primary" @click="comeOutAuth(row)"
-            >出入权限设置</el-button
-          >
+            >出入权限设置</el-button>
           <el-button size="mini" type="danger" @click="handleDelete(row)"
-            >删除</el-button
-          >
+            >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -143,41 +169,44 @@
       v-if="showModal"
       :businessKey="businessKey"
       :title="modalTitle"
+      :sceneData="sceneData"
       @close="onDetailModalClose"
     ></personRoleInfo-detail>
-        <!--出入权限配置 start-->
+    <!--出入权限配置 start-->
     <roleCheckOn-detail
       v-if="showRoleCheckOnModal"
       :businessKey="businessKey"
       @close="roleCheckOnModalClose"
     ></roleCheckOn-detail>
     <!--出入权限配置 end-->
+    <personRoleInfo-icon
+      v-if="showIconModal"
+      :personRoleId="businessKey"
+      :title="iconModalTitle"
+      :mode="iconMode"
+      @close="onIconModalClose"
+    ></personRoleInfo-icon>
   </div>
 </template>
 <script>
 import Constant from "@/constant";
 import PersonRoleInfoDetail from "./personRoleInfo-detail";
+import PersonRoleInfoIcon from "./personRoleInfo-icon";
 import personRoleInfoApi from "@/api/base/personRoleInfo";
 import roleCheckOnDetail from "./roleCheckOn-detail";
+import sceneInfoApi from "@/api/base/sceneInfo";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
 export default {
+  name: "basePersonRoleInfoList",
   data() {
     var self = this;
 
     return {
       queryModel: {
-        id: "",
-        personRoleName: "",
         sceneId: "",
         useEnable: "",
-        remark: "",
-        createBy: "",
-        createTime: "",
-        updateBy: "",
-        updateTime: "",
-        delFlag: "",
       },
       loading: false,
       tableData: [],
@@ -193,8 +222,18 @@ export default {
       modalTitle: "",
       businessKey: "",
       showRoleCheckOnModal:false,
+      sceneData: [],
+      iconMode: "common",
+      showIconModal: false,
+      iconModalTitle: ""
     };
   },
+  created() {
+    sceneInfoApi.list().then((response) => {
+      var jsonData = response.data;
+      this.sceneData = jsonData.data;
+    });
+  },
   methods: {
     changePage(pageIndex) {
       var self = this;
@@ -207,16 +246,8 @@ export default {
       formData.append("pageIndex", self.pageIndex);
       formData.append("pageSize", self.pageSize);
 
-      formData.append("id", self.queryModel.id);
-      formData.append("personRoleName", self.queryModel.personRoleName);
       formData.append("sceneId", self.queryModel.sceneId);
       formData.append("useEnable", self.queryModel.useEnable);
-      formData.append("remark", self.queryModel.remark);
-      formData.append("createBy", self.queryModel.createBy);
-      formData.append("createTime", self.queryModel.createTime);
-      formData.append("updateBy", self.queryModel.updateBy);
-      formData.append("updateTime", self.queryModel.updateTime);
-      formData.append("delFlag", self.queryModel.delFlag);
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -251,7 +282,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },
@@ -265,11 +296,13 @@ export default {
       this.modalTitle = "新增";
       this.businessKey = "";
       this.showModal = true;
+      this.sceneData = this.sceneData;
     },
     handleEdit(record) {
       this.modalTitle = "编辑";
       this.businessKey = record.id;
       this.showModal = true;
+      this.sceneData = this.sceneData;
     },
     handleDelete(record) {
       var self = this;
@@ -331,6 +364,9 @@ export default {
         this.changePage(this.pageIndex);
       }
     },
+    onIconModalClose(){
+      this.showIconModal = false;
+    },
     updateEnabled(row) {
       personRoleInfoApi.update(row);
     },
@@ -350,13 +386,30 @@ export default {
       this.showRoleCheckOnModal = true;
       this.businessKey = idList;
     },
+    updateRegisterEnabled(row) {
+      personRoleInfoApi.update(row);
+    },
+    showIconList(row,mode) {
+      this.iconMode = mode;
+      this.businessKey = row.id;
+
+      if(mode=="common"){
+        this.iconModalTitle = "通用菜单设置";
+      }
+      else{
+        this.iconModalTitle = "默认菜单设置";
+      }
+
+      this.showIconModal = true;
+    }
   },
   mounted: function () {
     this.changePage(1);
   },
   components: {
     "personRoleInfo-detail": PersonRoleInfoDetail,
-    "roleCheckOn-detail":roleCheckOnDetail
+    "roleCheckOn-detail":roleCheckOnDetail,
+    "personRoleInfo-icon" : PersonRoleInfoIcon
   },
 };
 </script>