Pārlūkot izejas kodu

1.人员信息管理中新增、修改、导入完善。
2.人员角色绑定菜单。

zhengqiang 5 gadi atpakaļ
vecāks
revīzija
d1801fb177

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

@@ -49,6 +49,25 @@ function findAll(){
   return request.post(constant.serverUrl + "/base/personRoleInfo/findAll");
 }
 
+function findAllIcon(){
+  return request.get(constant.serverUrl + "/base/personRoleInfo/findAllIcon");
+}
+
+function findRelatedIcon(personRoleId,mode){
+  return request.get(constant.serverUrl + `/base/personRoleInfo/findRelatedIcon?personRoleId=${personRoleId}&mode=${mode}`);
+}
+
+function saveRelatedIcon(personRoleId,mode,idList){
+  var formData = new FormData();
+
+  formData.append("personRoleId",personRoleId);
+  formData.append("mode",mode);
+  formData.append("idList",idList.join(","));
+
+  return request.post(constant.serverUrl + "/base/personRoleInfo/saveRelatedIcon",formData);
+}
+
 export default {
-  pageList,create,edit,add,update,remove,batchRemove,listByCompanyId,findAll
+  pageList,create,edit,add,update,remove,batchRemove,listByCompanyId,findAll,
+  findAllIcon,findRelatedIcon,saveRelatedIcon
 }

+ 62 - 66
src/views/base/personInfo-detail.vue

@@ -12,6 +12,7 @@
     style="text-align: left"
     @close="closeDialog"
     :close-on-click-modal="false"
+    width="900px"
   >
     <div class="user-panel" v-loading="loading">
       <el-form
@@ -20,18 +21,6 @@
         :rules="ruleValidate"
         :label-width="'100px'"
       >
-        <!-- <el-row>
-          <el-col :span="12">
-            <el-form-item label="单位" prop="companyId">
-              <el-select-tree
-                :props="props"
-                :options="companyResult"
-                v-model="formModel.companyId"
-                height="200"
-              ></el-select-tree>
-            </el-form-item>
-          </el-col>
-        </el-row> -->
         <el-row>
           <el-col :span="12">
             <el-form-item label="姓名" prop="name">
@@ -41,18 +30,6 @@
               ></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="园区" prop="parkId">
-              <el-select-tree
-                :props="props"
-                :options="parkList"
-                v-model="formModel.parkId"
-                height="200"
-              ></el-select-tree>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
           <el-col :span="12">
             <el-form-item label="手机号" prop="phone">
               <el-input
@@ -61,34 +38,48 @@
               ></el-input>
             </el-form-item>
           </el-col>
+        </el-row>        
+        <el-row>
           <el-col :span="12">
-            <el-form-item label="身份证" prop="idCard">
-              <el-input
-                v-model="formModel.idCard"
-                placeholder="请输入身份证"
-              ></el-input>
+            <el-form-item label="单位" prop="companyId">
+              <el-select-tree
+                :props="props"
+                :options="companyResult"
+                v-model="formModel.companyId"
+                height="200"
+                style="width:330px;"
+                size="large"
+              ></el-select-tree>
             </el-form-item>
           </el-col>
-        </el-row>
-        <!-- <el-row>
-          <el-col :span="24">
-            <el-form-item label="用户身份" prop="popedom">
+          <el-col :span="12">
+            <el-form-item label="用户身份" prop="personRoleId">
               <el-select
-                v-model="formModel.popedom"
                 filterable
                 placeholder="请选择"
                 style="width: 280px"
+                v-model="formModel.personRoleId"
               >
                 <el-option
                   v-for="role in personRoleResult"
                   :key="role.personRoleName"
                   :label="role.personRoleName"
-                  :value="role.personRoleName"
+                  :value="role.id"
                 ></el-option>
               </el-select>
             </el-form-item>
           </el-col>
-        </el-row> -->
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="身份证" prop="idCard">
+              <el-input
+                v-model="formModel.idCard"
+                placeholder="请输入身份证"
+              ></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-row>
           <el-col :span="24">
             <el-form-item label="关联单位" prop="personCompany">
@@ -250,6 +241,26 @@ export default {
     "companyPosition4",
     "companyPosition5",
   ],
+  watch: {
+    "formModel.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;
+              }
+          })
+        }
+    }
+  },
   data() {
     let checkIdCard = (rule, value, callback) => {
       var identNumber = value;
@@ -268,6 +279,7 @@ 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" }]
         // idCard: [
         //   { required: false, message: "身份证不能为空", trigger: "blur" },
         //   {
@@ -275,9 +287,6 @@ export default {
         //     trigger: "blur"
         //   }
         // ]
-        popedom: [
-          { required: true, message: "请选择用户身份", trigger: "blur" },
-        ],
       },
       showDialog: true,
       loading: false,
@@ -358,15 +367,15 @@ export default {
             var id = self.formModel.id;
             //数组转换为字符串
             //用户身份
-            if (
-              self.formModel.popedom != null &&
-              self.formModel.popedom != ""
-            ) {
-              var popedom = self.formModel.popedom.join(",");
-              self.formModel.popedom = popedom;
-            } else {
-              self.formModel.popedom = "";
-            }
+            // if (
+            //   self.formModel.popedom != null &&
+            //   self.formModel.popedom != ""
+            // ) {
+            //   var popedom = self.formModel.popedom.join(",");
+            //   self.formModel.popedom = popedom;
+            // } else {
+            //   self.formModel.popedom = "";
+            // }
 
             //子单位
             if (
@@ -451,12 +460,12 @@ export default {
           }
 
           if (self.businessKey.length == 0) {
-            self.formModel.popedom = ["1"];
+            //self.formModel.popedom = ["1"];
           } else {
-            var popedom = self.formModel.popedom;
-            if (popedom != "") {
-              self.formModel.popedom = popedom.split(",");
-            }
+            // var popedom = self.formModel.popedom;
+            // if (popedom != "") {
+            //   self.formModel.popedom = popedom.split(",");
+            // }
 
             var personCompany = self.formModel.personCompany;
             if (personCompany != "") {
@@ -468,19 +477,6 @@ export default {
               self.formModel.wechatNoticeEnabled = true;
             }
           }
-
-          var formData5 = new FormData();
-          formData5.append("companyId", self.formModel.companyId);
-          personRoleInfoApi
-            .listByCompanyId(formData5)
-            .then(function (response) {
-              var jsonData = response.data;
-              if (jsonData.result) {
-                if (jsonData.data != null && jsonData.data != "") {
-                  self.personRoleResult = jsonData.data;
-                }
-              }
-            });
         } else {
           self.$message.error(jsonData.message + "");
         }

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

@@ -0,0 +1,130 @@
+<template>
+    <el-dialog
+      :visible.sync="showDialog"
+      :title="title"
+      width="800px"
+      :modal-append-to-body="false"
+      style="text-align:left;"
+      @close="closeDialog"
+      :close-on-click-modal="false"
+    >
+    <div class="role-permission">
+        <el-transfer
+        v-model="relatedMenus"
+        :data="menuList"
+        v-loading="loading"
+        filterable
+        :filter-method="filterMethod"
+        filter-placeholder="请输入关键字"
+        :props="{key: 'id',label: 'description'}"
+        :titles="['未分配菜单','已分配菜单']"
+        ></el-transfer>
+    </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 personRoleApi from "@/api/base/personRoleInfo";
+
+export default {
+  props: ["personRoleId","mode","title"],
+  data() {
+    return {
+      menuList: [],
+      relatedMenus: [],
+      loading: false,
+      showDialog: true,
+      submitting: false
+    };
+  }, 
+  methods: {
+    closeDialog() {
+      this.$emit("close",false);
+    },
+    handleSubmit() {
+      var self = this;
+
+      personRoleApi
+        .saveRelatedIcon(this.personRoleId,this.mode,this.relatedMenus)
+        .then(function(response) {
+          var jsonData = response.data;
+          self.submitting = false;
+
+          if (jsonData.result) {
+            self.$message({
+              message: "保存成功!",
+              type: "success"
+            });
+
+            self.$emit("close",true);
+          } else {
+            self.$message({
+              message: jsonData.message + "",
+              type: "warning"
+            });
+
+            self.$emit("close",false);
+          }
+        });
+    },
+    filterMethod(query, item) {
+      return item.description.indexOf(query) > -1;
+    },
+    queryRelatedMenuList() {
+      var self = this;
+
+      self.loading = true;
+
+      self.menuList = [];
+      self.relatedMenus= [];
+
+      personRoleApi.findAllIcon(this.personRoleId)
+        .then(response => {
+          var jsonData = response.data;
+
+          self.menuList = jsonData.data.map(item => {
+            return {
+              id: item.id,
+              description: "[" + item.iconTypeName + "]" + item.iconName
+            };
+          });
+
+          return personRoleApi.findRelatedIcon(self.personRoleId,self.mode);
+        })
+        .then(response => {
+          var jsonData = response.data;
+
+          self.relatedMenus = jsonData.data.map(item => {
+            return item.iconId;
+          });
+
+          //console.log(self.relatedMenus);
+
+          self.loading = false;
+        });
+    }
+  },
+  mounted() {
+    this.queryRelatedMenuList();
+  }
+};
+</script>
+<style lang="scss">
+.role-permission {
+  .el-transfer-panel {
+    border: 1px solid #ebeef5;
+    border-radius: 4px;
+    overflow: hidden;
+    background: #fff;
+    display: inline-block;
+    vertical-align: middle;
+    width: 320px;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    position: relative;
+  }
+}
+</style>

+ 50 - 5
src/views/base/personRoleInfo-list.vue

@@ -115,15 +115,29 @@
           ></el-switch>
         </template>
       </el-table-column>
+      <el-table-column prop="registerEnable" label="注册时可选" width="180">
+        <template slot-scope="{ row }">
+          <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="备注" width="180"></el-table-column>
-      <el-table-column label="操作">
+      <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>
           <el-button size="mini" type="danger" @click="handleDelete(row)"
-            >删除</el-button
-          >
+            >删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -142,11 +156,19 @@
       :sceneData="sceneData"
       @close="onDetailModalClose"
     ></personRoleInfo-detail>
+    <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 sceneInfoApi from "@/api/base/sceneInfo";
 import NProgress from "nprogress"; // progress bar
@@ -175,6 +197,9 @@ export default {
       modalTitle: "",
       businessKey: "",
       sceneData: [],
+      iconMode: "common",
+      showIconModal: false,
+      iconModalTitle: ""
     };
   },
   created() {
@@ -313,15 +338,35 @@ export default {
         this.changePage(this.pageIndex);
       }
     },
+    onIconModalClose(){
+      this.showIconModal = false;
+    },
     updateEnabled(row) {
       personRoleInfoApi.update(row);
     },
+    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,
+    "personRoleInfo-icon" : PersonRoleInfoIcon
   },
 };
 </script>