authority.vue 6.0 KB
Newer Older
1 2 3 4 5 6 7 8
<template>
  <div>
    <div class="button-box clearflex">
      <el-button @click="addAuthority" type="primary">新增角色</el-button>
    </div>
    <el-table :data="tableData" border stripe>
      <el-table-column label="角色id" min-width="180" prop="authorityId"></el-table-column>
      <el-table-column label="角色名称" min-width="180" prop="authorityName"></el-table-column>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
9
      <el-table-column fixed="right" label="操作" width="500">
10
        <template slot-scope="scope">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
11
          <el-button @click="addAuthMenu(scope.row)" size="small" type="text">增加角色菜单</el-button>
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
          <el-button @click="deleteAuth(scope.row)" size="small" type="text">删除角色</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination
      :current-page="page"
      :page-size="pageSize"
      :page-sizes="[10, 30, 50, 100]"
      :style="{float:'right',padding:'20px'}"
      :total="total"
      @current-change="handleCurrentChange"
      @size-change="handleSizeChange"
      hide-on-single-page
      layout="total, sizes, prev, pager, next, jumper"
    ></el-pagination>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
27
    <!-- 新增角色弹窗 -->
28 29 30 31 32 33 34 35 36 37 38 39 40 41
    <el-dialog :visible.sync="dialogFormVisible" title="新增角色">
      <el-form :model="form">
        <el-form-item label="角色ID">
          <el-input autocomplete="off" v-model="form.authorityId"></el-input>
        </el-form-item>
        <el-form-item label="角色姓名">
          <el-input autocomplete="off" v-model="form.authorityName"></el-input>
        </el-form-item>
      </el-form>
      <div class="dialog-footer" slot="footer">
        <el-button @click="closeDialog">取 消</el-button>
        <el-button @click="enterDialog" type="primary">确 定</el-button>
      </div>
    </el-dialog>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

    <!-- 关联menu弹窗 -->
    <el-dialog :visible.sync="menuDialogFlag" title="关联菜单">
      <el-tree
        :data="treeData"
        :props="defaultProps"
        default-expand-all
        highlight-current
        node-key="ID"
        :default-checked-keys="treeIds"
        ref="tree"
        show-checkbox
      ></el-tree>
      <div class="dialog-footer" slot="footer">
        <el-button @click="closeDialog">取 消</el-button>
        <el-button @click="relation" type="primary">确 定</el-button>
      </div>
    </el-dialog>
60 61 62 63
  </div>
</template>

<script>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
64 65 66 67 68 69
import {
  getAuthorityList,
  deleteAuthority,
  createAuthority
} from '@/api/authority'
import { getBaseMenuTree, addMenuAuthority, getMenuAuthority } from '@/api/menu'
70 71 72 73
export default {
  name: 'Authority',
  data() {
    return {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
74
      activeUserId: 0,
75 76 77 78
      page: 1,
      total: 10,
      pageSize: 10,
      tableData: [],
Mr.奇淼('s avatar
Mr.奇淼( 已提交
79 80 81 82 83 84
      treeData: [],
      treeIds:[],
      defaultProps: {
        children: 'children',
        label: 'nickName'
      },
85
      dialogFormVisible: false,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
86 87 88 89
      menuDialogFlag: false,
      form: {
        authorityId: '',
        authorityName: ''
90 91 92 93
      }
    }
  },
  methods: {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
94
    // 条数
95 96 97 98
    handleSizeChange(val) {
      this.pageSize = val
      this.getAuthList()
    },
Mr.奇淼('s avatar
Mr.奇淼( 已提交
99
    // 页码
100 101 102 103
    handleCurrentChange(val) {
      this.page = val
      this.getAuthList()
    },
Mr.奇淼('s avatar
Mr.奇淼( 已提交
104
    // 删除角色
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
    deleteAuth(row) {
      this.$confirm('此操作将永久删除该角色, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      })
        .then(async () => {
          try {
            const res = await deleteAuthority({ authorityId: row.authorityId })
            this.$message({
              type: 'success',
              message: '删除成功!'
            })
            this.getAuthList()
          } catch (err) {
            this.$message({
              type: 'error',
              message: '删除失败!' + err
            })
          }
        })
        .catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          })
        })
    },
Mr.奇淼('s avatar
Mr.奇淼( 已提交
133 134 135 136 137
    // 初始化表单
    initForm() {
      for (const key in this.form) {
        this.form[key] = ''
      }
138
    },
Mr.奇淼('s avatar
Mr.奇淼( 已提交
139 140 141 142 143
    // 关闭窗口
    closeDialog() {
      this.initForm()
      this.dialogFormVisible = false
      this.menuDialogFlag = false
144
    },
Mr.奇淼('s avatar
Mr.奇淼( 已提交
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
    // 确定弹窗
    async enterDialog() {
      const res = await createAuthority(this.form)
      if (res.success) {
        this.$message({
          type: 'success',
          message: '添加成功!'
        })
        this.getAuthList()
        this.closeDialog()
      } else {
        this.$message({
          type: 'error',
          message: '添加失败!'
        })
        this.closeDialog()
      }
      this.initForm()
      this.dialogFormVisible = false
164
    },
Mr.奇淼('s avatar
Mr.奇淼( 已提交
165
    // 增加角色
166
    addAuthority() {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
167
      this.dialogFormVisible = true
168
    },
Mr.奇淼('s avatar
Mr.奇淼( 已提交
169
    // 获取用户列表
170 171 172 173 174 175 176
    async getAuthList(page = this.page, pageSize = this.pageSize) {
      try {
        const table = await getAuthorityList({ page, pageSize })
        this.tableData = table.data.authList
      } catch (err) {
        console.log(err)
      }
Mr.奇淼('s avatar
Mr.奇淼( 已提交
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
    },
    async addAuthMenu(row) {
      const res1 = await getMenuAuthority({authorityId:row.authorityId})
      const menus = res1.data.menus
      const arr = []
      menus.map(item=>{arr.push(Number(item.menuId))})
      this.treeIds = arr
      const res2 = await getBaseMenuTree()
      this.treeData = res2.data.menus
      console.log(this.treeData)
      this.activeUserId = row.authorityId
      this.menuDialogFlag = true
    },
    // 关联树
    async relation() {
      const checkArr = this.$refs.tree
        .getCheckedNodes()
        .concat(this.$refs.tree.getHalfCheckedNodes())
      const res = await addMenuAuthority({
        menus: checkArr,
        authorityId: this.activeUserId
      })
      if (res.success) {
        this.$message({
          type: 'success',
          message: '添加成功!'
        })
      }
      this.closeDialog()
206
    }
Mr.奇淼('s avatar
Mr.奇淼( 已提交
207
    // 获取基础menu树
208 209 210
  },
  created() {
    this.getAuthList()
Mr.奇淼('s avatar
Mr.奇淼( 已提交
211
    
212 213 214 215 216 217 218 219 220 221 222
  }
}
</script>
<style lang="scss">
.button-box {
  padding: 10px 20px;
  .el-button {
    float: right;
  }
}
</style>