Kaynağa Gözat

管理员角色

fly 2 yıl önce
ebeveyn
işleme
529d8f71cd

+ 63 - 1
VinnoManagementSystem/src/api/wing/adminManage.js

@@ -89,7 +89,7 @@ export default {
         method: 'GetAdminRolePagesAsync',
         name: "查询管理员角色列表",
         post: async function (params) {
-            
+
             var data = {
                 'PageIndex': params.page,
                 'PageSize': params.pageSize,
@@ -103,4 +103,66 @@ export default {
             });
         }
     },
+    adminFeatureList: {
+        method: 'GetAdminFeatureList',
+        name: "权限列表",
+        post: async function (data = {}) {
+            return await http.post({
+                "jsonrpc": "2.0",
+                "id": common.guid(),
+                "method": this.method,
+                "params": [data]
+            });
+        }
+    },
+    createAdminRole: {
+        method: 'CreateAdminRole',
+        name: "创建管理员角色",
+        post: async function (req) {
+            var data = {
+                'RoleName': req.RoleName,
+                'Description': req.Description,
+                'FeaturesCodeList': req.featuresCodeList
+            }
+            return await http.post({
+                "jsonrpc": "2.0",
+                "id": common.guid(),
+                "method": this.method,
+                "params": [data]
+            });
+        }
+    },
+    modifyAdminRole: {
+        method: 'ModifyAdminRole',
+        name: "修改管理员角色",
+        post: async function (req) {
+            var data = {
+                'RoleCode': req.AdminRoleCode,
+                'RoleName': req.RoleName,
+                'Description': req.Description,
+                'FeaturesCodeList': req.featuresCodeList
+            }
+            return await http.post({
+                "jsonrpc": "2.0",
+                "id": common.guid(),
+                "method": this.method,
+                "params": [data]
+            });
+        }
+    },
+    adminRoleDetail: {
+		method: 'AdminRoleDetail',
+		name: "角色详情",
+		post: async function (roleCode) {
+            var data = {
+                'AdminRoleCode':roleCode
+            }
+            return await http.post({
+                "jsonrpc": "2.0",
+                "id": common.guid(),
+                "method": this.method,
+                "params": [data]
+            });
+        }
+	},
 }

+ 7 - 1
VinnoManagementSystem/src/locales/lang/en.js

@@ -132,7 +132,13 @@ export default {
 		password2:"confirm Password",
 		passwordVaild:"Passwords does not match",
 		adminConfirmDelete: "Are you sure to delete this admin",
-		assignRole: "assign Role"
+		assignRole: "assign Role",
+		roleUserNum: "admin Num",
+		authoritys: "authoritys",
+		checkAll: "checkAll",
+		adminRoleConfirmDelete: "Are you sure to delete this role",
+		adminRoleDel1:"The role is already associated",
+		adminRoleDel2: " administrators, please remove administrators before deleting roles"
 	},
 	organization: {
 		organizationName: "Organization Name",

+ 10 - 4
VinnoManagementSystem/src/locales/lang/zh-cn.js

@@ -128,12 +128,18 @@ export default {
 		adminQueryTypeOption1: "姓名",
 		adminRoleQuery: "管理员角色",
 		adminRoleName: "管理员角色名称",
-		password1:"密码",
-		password2:"确认密码",
-		passwordVaild:"密码不一致",
+		password1: "密码",
+		password2: "确认密码",
+		passwordVaild: "密码不一致",
 		adminConfirmDelete: "确定删除该管理员吗?",
 		assignRole: "分配角色",
-		roleUserNum: "角色人数"
+		roleUserNum: "角色人数",
+		authoritys: "权限",
+		checkAll: "全选",
+		adminRoleConfirmDelete: "确定删除该管理员角色吗?",
+		adminRoleDel1:"该角色已关联",
+		adminRoleDel2: " 个用户,请先移除用户再删除角色"
+
 	},
 	organization: {
 		organizationName: "机构名称",

+ 34 - 15
VinnoManagementSystem/src/views/adminManage/adminRole.vue

@@ -30,7 +30,6 @@
         :apiObj="apiObj"
         :pageSize="10"
         row-key="RoleCode"
-        @selection-change="selectionChange"
         stripe
       >
          <el-table-column
@@ -65,9 +64,12 @@
               @confirm="table_del(scope.row, scope.$index)"
             >
               <template #reference>
-                <el-button type="text" size="small">{{
-                  $t("delete")
-                }}</el-button>
+                <el-button
+                  type="text"
+                  size="small"
+                  @click="delValid(scope.row)"
+                  >{{ $t("delete") }}</el-button
+                >
               </template>
             </el-popconfirm>
           </template>
@@ -85,7 +87,7 @@
 </template>
 
 <script>
-import saveDialog from "./saveAdmin";
+import saveDialog from "./saveAdminRole";
 
 
 export default {
@@ -101,7 +103,7 @@ export default {
       search: {
         keyword: null
       },
-      confirmDel: this.$t("admin.adminConfirmDelete"),
+      confirmDel: "",
     };
   },
   methods: {
@@ -132,21 +134,38 @@ export default {
     },
     //删除
     async table_del(row) {
+        var res = await this.$API.wing.post("QueryRoleAdminNum", {
+        AdminRoleCode: row.RoleCode,
+      });
+      if(res >0 )
+      {
+          return false;
+      }
       await this.$API.wing.post(
-        "RemoveAdminAsync",
+        "DeleteAdminRole",
         {
-          AdminCode: row.AdminCode,
+          AdminRoleCode: row.RoleCode,
         },
         this.refresh
-      );
-    },
-    //表格选择后回调事件
-    selectionChange(selection) {
-      this.selection = selection;
+     );
     },
+    //删除前验证
+    async delValid(row) {
+      this.confirmDel ="";
+      var res = await this.$API.wing.post("QueryRoleAdminNum", {
+        AdminRoleCode: row.RoleCode,
+      });
+     
+      if (res > 0) {
+        this.confirmDel = this.$t("admin.adminRoleDel1")+res+this.$t("admin.adminRoleDel2");
+        return false;
+      }
+      else
+      {
+        this.confirmDel = this.$t("admin.adminRoleConfirmDelete");
+      }
+    }
   },
 };
 </script>
 
-<style>
-</style>

+ 180 - 0
VinnoManagementSystem/src/views/adminManage/saveAdminRole.vue

@@ -0,0 +1,180 @@
+<template>
+  <el-dialog
+    :title="titleMap[mode]"
+    v-model="visible"
+    :width="700"
+    destroy-on-close
+    @closed="$emit('closed')"
+  >
+    <el-form
+      :model="form"
+      :rules="rules"
+      ref="dialogForm"
+      label-width="150px"
+      label-position="left"
+    >
+      <el-form-item :label="$t('admin.adminRoleName')" prop="RoleName">
+        <el-input
+          v-model="form.RoleName"
+          clearable
+          :placeholder="$t('admin.adminRoleName')"
+          style="width: 60%"
+        ></el-input>
+      </el-form-item>
+      
+      <el-form-item :label="$t('response.description')">
+        <el-input
+          v-model="form.Description"
+          clearable
+          :placeholder="$t('response.description')"
+          style="width: 60%"
+          :autosize="{ minRows: 5}"
+          type="textarea"
+        ></el-input>
+      </el-form-item>
+        <el-form-item :label="$t('admin.authoritys')" style="max-width: 300px">
+          <div>
+            <el-checkbox
+              v-model="checkAll"
+              @change="handleCheckAllChange"
+            >{{ $t('admin.checkAll') }}</el-checkbox>
+          </div>
+          <div style="float:right">
+          <el-tree
+            ref="tree"
+            :data="data"
+            show-checkbox
+            default-expand-all
+            node-key="Id"
+            :props="defaultProps"
+          />
+          </div>
+        </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="visible = false">{{
+        $t("dialogBox.cancelButtonText")
+      }}</el-button>
+      <el-button
+        v-if="mode != 'show'"
+        type="primary"
+        :loading="isSaveing"
+        @click="submit()"
+        >{{ this.$t("dialogBox.saveButtonText") }}</el-button
+      >
+    </template>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  emits: ["success", "closed"],
+  data() {
+    return {
+      mode: "add",
+      titleMap: {
+        add: this.$t("dialogBox.addTitle"),
+        edit: this.$t("dialogBox.modifyTitle"),
+      },
+      visible: false,
+      isSaveing: false,
+      data: [],
+      authorityList: [],
+      checkAll: false,
+      defaultProps: {
+        children: 'Children',
+        label: 'Label'
+      },
+      //表单数据
+      form: {
+        RoleName: "",
+        Description: "",
+        featuresCodeList: "",
+        AdminRoleCode: ""
+      },
+      //验证规则
+      rules: {
+        RoleName: [
+          {
+            required: true,
+            message: this.$t("admin.adminRoleName"),
+            trigger: "blur",
+          },
+        ],
+      },
+    };
+  },
+  methods: {
+    //显示
+    open(mode = "add") {
+      this.mode = mode;
+      this.visible = true;
+      this.initFeatures();
+      return this;
+    },
+    // 全选
+    handleCheckAllChange() {
+      if (this.checkAll === true) {
+        // debugger
+        this.$refs.tree.setCheckedKeys(this.authorityList)
+        this.checkedList = this.$refs.tree.getCheckedNodes()
+      } else {
+        this.$refs.tree.setCheckedKeys([])
+      }
+    },
+    //表单提交方法
+    submit() {
+      this.$refs.dialogForm.validate(async (valid) => {
+        if (valid) {
+          this.isSaveing = true;
+          var res = false;
+          //新增或者修改
+          this.form.featuresCodeList = this.$refs.tree.getCheckedKeys()
+          if (this.mode === "add") {
+            res = await this.$API.adminManage.createAdminRole.post(this.form);
+          } else {
+            res = await this.$API.adminManage.modifyAdminRole.post(this.form);
+          }
+          this.isSaveing = false;
+          if (res == true) {
+            this.$emit("success");
+            this.visible = false;
+            this.$message.success(this.$t("response.operateSuccess"));
+          } else {
+            this.$alert(res.message, this.$t("dialogBox.confirmWarningTitle"), {
+              type: "error",
+            });
+          }
+        }
+      });
+    },
+    //表单注入数据
+    async setData(data) {
+      var res = await this.$API.wing.post("AdminRoleDetail", {
+        AdminRoleCode: data.RoleCode
+      });
+      this.form.AdminRoleCode = data.RoleCode;
+      this.form.Description = data.Description;
+      this.form.RoleName = res.RoleName;  
+      if (this.authorityList.length ===res.FeatureList.length) {
+            this.checkAll = true
+          } else {
+            this.checkAll = false
+          }
+          this.$nextTick(() => {
+            this.$refs.tree.setCheckedNodes(res.FeatureList)
+          })
+    },
+    async initFeatures() {
+      this.data = await this.$API.adminManage.adminFeatureList.post();
+      var featureList = await this.$API.wing.post("GetAdminFeatureSelectList");
+      featureList.forEach(element => {
+        this.authorityList.push(element.Key)
+      });
+    },
+  },
+};
+</script>
+
+<style>
+</style>