Fixiaobai
2023-08-24 278a183450b63c89262d068bb0e4bd374a758d90
角色管理
已修改2个文件
已添加1个文件
272 ■■■■ 文件已修改
src/api/laboratory/role.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/laboratory/role/index.vue 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/laboratory/role/menuPower.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/laboratory/role.js
@@ -6,4 +6,29 @@
      method: 'get',
      params
    })
  }
  export function addRoleInfo(data) {
    return request({
      url: '/role-manager/addRoleInfo',
      method: 'post',
      data
    })
  }
  export function assertRepeat(params) {
    return request({
      url: '/role-manager/assertRepeat',
      method: 'get',
      params
    })
  }
  //getAllRoleAndMenuInfo
  export function getAllRoleAndMenuInfo(params) {
    return request({
      url: '/role-manager/getAllRoleAndMenuInfo',
      method: 'get',
      params
    })
  }
src/views/laboratory/role/index.vue
@@ -7,10 +7,6 @@
            <el-input v-model="searchData.roleName" class="input-form" placeholder="请输入角色名称" style="width:250px">
            </el-input>
          </el-form-item>
          <el-form-item label="权限:" class="sermargin">
            <el-input v-model="searchData.permission" class="input-form" placeholder="请输入权限" style="width:250px">
            </el-input>
          </el-form-item>
          <el-form-item class="rightBtn">
            <el-button type="primary">查询</el-button>
            <el-button type="primary" plain>重置</el-button>
@@ -28,11 +24,10 @@
          <el-table :max-height="800" :cell-style="{ textAlign: 'center' }"
            :header-cell-style="{ border: '0px', background: '#f5f7fa', color: '#606266', boxShadow: 'inset 0 1px 0 #ebeef5', textAlign: 'center' }"
            :data="roleTable" style="width: 100%">
            <el-table-column type="selection" min-width="8%" />
            <el-table-column prop="rolename" label="角色名称" min-width="20%" />
            <el-table-column prop="permission" label="权限" min-width="20%" />
            <el-table-column prop="create_time" label="创建时间" min-width="20%" />
            <el-table-column prop="update_time" label="更新时间" min-width="20%" />
            <el-table-column type="index" min-width="8%" />
            <el-table-column prop="roleName" label="角色名称" min-width="20%" />
            <el-table-column prop="createTime" label="创建时间" min-width="20%" />
            <el-table-column prop="updateTime" label="更新时间" min-width="20%" />
            <el-table-column label="操作" min-width="12%">
              <template slot-scope="scope">
                <el-button type="text" size="small">编辑</el-button>
@@ -50,23 +45,61 @@
        </div>
      </div>
    </div>
    <el-dialog title="新增角色" :visible.sync="dialogTableVisible" width="60%">
    <el-dialog title="新增角色" :visible.sync="dialogTableVisible" width="50%">
      <el-form :model="roleAdd" ref="roleAdd" label-position="right" label-width="100px">
        <el-form-item label="角色名:">
          <el-input style="width: 300px" v-model="roleAdd.roleName" placeholder="请输入角色名">
          </el-input>
        </el-form-item>
        <el-form-item label="功能选择:">
          <el-cascader size="medium " v-model="roleAdd.menuData" :options="menuInfo">
            <template slot-scope="{ node, data }">
              <span>{{ data.label }}</span>
              <span v-if="!node.isLeaf"> ({{  }}) </span>
            </template>
          </el-cascader>
        </el-form-item>
        <el-col :span="24" style="display: flex;justify-content: space-between;">
          <el-form-item :rules="nameaRules" label="角色名:">
            <el-input @blur="assertName" style="width: 300px" v-model="roleAdd.roleName" placeholder="请输入角色名">
            </el-input>
          </el-form-item>
          <!-- <el-form-item label="菜单选择:">
            <el-cascader style="width: 300px" collapse-tags size="medium " filterable :props="props"
              v-model="roleAdd.menuData" :options="menuInfo">
              <template slot-scope="{ data }">
                <span>{{ data.label }}</span>
              </template>
            </el-cascader>
          </el-form-item> -->
        </el-col>
      </el-form>
      <el-col :span="24">
        <el-table height="300" :data="menuInfo" style="width: 100%;margin-bottom: 20px;" row-key="id"
          :default-expand-all="false" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
          <el-table-column highlight-current-row prop="parentId" label="菜单类型" sortable width="180">
            <template slot-scope="scope">
              <span v-if="scope.row.parentId == 0 && scope.row.children != undefined" style="color: #409eff;">主菜单</span>
              <span v-if="scope.row.parentId == 0 && scope.row.children === undefined" style="color: #409eff;">
                ä¸»èœå•
              </span>
            </template>
          </el-table-column>
          <el-table-column prop="name" label="菜单名" sortable width="180">
            <template slot-scope="scope">
              <el-col v-if="scope.row.parentId == 0">
                <span style="color: #409eff;">{{ scope.row.name }}</span>
              </el-col>
              <el-col v-else>
                <span style="color: #40b815;">{{ scope.row.name }}</span>
              </el-col>
            </template>
          </el-table-column>
          <el-table-column prop="id" label="操作权限">
            <template slot-scope="scope">
              <el-col v-if="scope.row.parentId == 0 && scope.row.children != undefined">
                <!-- <el-checkbox v-model="scope.row.select">查询</el-checkbox> -->
              </el-col>
              <el-col v-else>
                <el-checkbox size="medium" v-model="scope.row.selected" @change="chekSelect(scope)">查询</el-checkbox>
                <el-checkbox size="medium" v-model="scope.row.added" @change="chekAdd(scope)">添加</el-checkbox>
                <el-checkbox size="medium" v-model="scope.row.updated" @change="chekUpdate(scope)">修改</el-checkbox>
                <el-checkbox size="medium" v-model="scope.row.deleted" @change="chekDelet(scope)">删除</el-checkbox>
              </el-col>
            </template>
          </el-table-column>
        </el-table>
      </el-col>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogTableVisible = false">取 æ¶ˆ</el-button>
        <el-button @click="clearAll">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="addRole">ç¡® å®š</el-button>
      </span>
    </el-dialog>
@@ -74,8 +107,12 @@
</template>
<script>
import { getMenusTree } from '@/api/laboratory/role'
import { getMenusTree, addRoleInfo, assertRepeat, getAllRoleAndMenuInfo } from '@/api/laboratory/role'
import { default as menuPower } from './menuPower.vue'
export default {
  components: {
    menuPower: () => import('./menuPower.vue')
  },
  data() {
    return {
      props: { multiple: true },
@@ -83,22 +120,15 @@
        roleName: null,
        menuData: null
      },
      nameaRules: [{ required: true, message: '请输入角色名' }],
      menuTableTree: null,
      searchData: {
        roleName: '',
        permission: ''
      },
      assertRepeatName: true,
      menuInfo: [],
      roleTable: [{
        rolename: '部长',
        permission: 'ROOT',
        create_time: '2023-07-04 12:12:12',
        update_time: '2023-07-04 12:12:12'
      }, {
        rolename: '组长',
        permission: '--',
        create_time: '2023-07-04 12:12:12',
        update_time: '2023-07-04 12:12:12'
      }],
      roleTable: [],
      updateData: {
        oldPassWord: '',
        newPassWord: '',
@@ -113,23 +143,62 @@
  created() {
  },
  mounted() {
    this.start()
  },
  methods: {
    chekSelect(scope) {
    },
    async start() {
      let res = await getAllRoleAndMenuInfo()
      this.roleTable = res.data
      console.log(res);
    },
    async assertName() {
      if (this.roleAdd.roleName == null || this.roleAdd.roleName == '') {
        this.$message({
          message: '请输入角色名',
          type: 'warning'
        });
        return
      }
      let res = await assertRepeat({ roleName: this.roleAdd.roleName })
      if (!res.data) {
        this.assertRepeatName = false
        this.$message({
          message: '角色名重复,请重新输入!',
          type: 'warning'
        });
      } else {
        this.assertRepeatName = true
      }
    },
    chekAdd(scope) {
      scope.row.selected = true
    },
    chekUpdate(scope) {
      scope.row.selected = true
    },
    chekDelet(scope) {
      scope.row.selected = true
    },
    async addClickRole() {
      let res = await getMenusTree();
      this.menuInfo = res.data
      this.menuInfo.forEach(item => {
        item.select = false
        item.add = false
        item.update = false
        item.delete = false
        this.$set(item, 'selected', false);
        this.$set(item, 'added', false);
        this.$set(item, 'updated', false);
        this.$set(item, 'deleted', false);
        if (item.children.length == 0) {
          delete item['children']
        } else {
          item.children.forEach(c => {
            c.select = false
            c.add = false
            c.update = false
            c.delete = false
            this.$set(c, 'selected', false);
            this.$set(c, 'added', false);
            this.$set(c, 'updated', false);
            this.$set(c, 'deleted', false);
            if (c.children.length == 0) {
              delete c['children']
            }
@@ -137,10 +206,68 @@
        }
      })
      this.dialogTableVisible = true
      // console.log(this.dialogTableVisible)
    },
    addRole() {
      console.log(this.roleAdd);
    async addRole() {
      if (this.roleAdd.roleName == null || this.roleAdd.roleName == '') {
        this.$message({
          message: '请输入角色名',
          type: 'warning'
        });
        return
      }
      if (!this.assertRepeatName) {
        this.$message({
          message: '角色名重复,请重新输入',
          type: 'warning'
        });
        return
      }
      this.menuInfo.forEach(item => {
        if (item.children != undefined) {
          item.children.forEach(c => {
            if (c.added) {
              item.selected = true
            }
            if (c.selected) {
              item.selected = true
            }
            if (c.updated) {
              item.selected = true
            }
            if (c.deleted) {
              item.selected = true
            }
          })
        }
      })
      console.log(this.menuInfo);
      this.roleAdd.menuData = JSON.parse(JSON.stringify(this.menuInfo));
      this.roleAdd.menuData.forEach(item => {
        if (item.children != undefined) {
          let child = item.children.filter(c => {
            return c.added == true || c.selected == true || c.deleted == true || c.updated === true
          })
          item.children = child
        }
      })
      this.roleAdd.menuData = this.roleAdd.menuData.filter(item => {
        return item.selected == true
      })
      let res = await addRoleInfo(this.roleAdd);
      if (res.data) {
        this.$message({
          message: '添加角色成功',
          type: 'success'
        });
        this.dialogTableVisible = false
      } else {
        this.$message.error('添加失败!请重新操作');
      }
    },
    assertDml(a, b) {
      a = b ? true : false
      console.log(a);
      return a
    },
    // search(){},
    // reset(){},
@@ -153,6 +280,13 @@
    handleCurrentChange(val) {
      console.log(`当前是第${val}页`)
      this.currentPage = val
    },
    clearAll() {
      this.roleAdd.roleName = null
      this.roleAdd.menuData = null
      this.menuInfo = []
      this.assertRepeatName = true
      this.dialogTableVisible = false
    }
  }
}
src/views/laboratory/role/menuPower.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<template>
    <div>
    </div>
</template>
<script>
export default {
    data() {
        return {
        }
    },
    created() {
    },
    methods: {
    }
}
</script>
<style scoped></style>