role.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <div class="container">
  3. <el-card class="box-card">
  4. <div slot="header" class="clearfix">
  5. <span>系统角色管理</span>
  6. <el-button style="float: right; padding: 3px 0" type="text" @click="adduser">添加角色</el-button>
  7. </div>
  8. <div class="main">
  9. <naf-grid class="grid" ref="grid" @edit="edit" @delete="deleterole" :data="roleList" :meta="meta" :total="total" @query="query"></naf-grid>
  10. </div>
  11. </el-card>
  12. <dialog-drawer type="dialog" :visible="visible" :title="isNew ? '修改角色' : '添加角色'" @close="close" :width="'30%'">
  13. <template v-slot:content>
  14. <naf-form v-if="visible" ref="ruleForm" @save="save" :meta="formmeta" :rules="rules" :data="is_data"></naf-form>
  15. </template>
  16. </dialog-drawer>
  17. </div>
  18. </template>
  19. <script>
  20. import nafGrid from '@naf/data/tables/naf-grid'
  21. import dialogDrawer from '@naf/data/dialog -drawer'
  22. import nafForm from '@naf/data/form'
  23. import { createNamespacedHelpers } from 'vuex'
  24. const { mapState, mapActions } = createNamespacedHelpers('role')
  25. export default {
  26. components: {
  27. nafGrid,
  28. dialogDrawer,
  29. nafForm
  30. },
  31. data () {
  32. return {
  33. is_data: {},
  34. visible: false,
  35. meta: [
  36. { name: 'name', title: '角色名称', filter: true },
  37. { name: 'code', title: '角色编码', filter: true },
  38. { name: 'state', title: '状态', formatter: 'state' }
  39. ],
  40. formmeta: [
  41. { name: 'name', title: '角色名称' },
  42. { name: 'code', title: '角色编码', disabled: false },
  43. { name: 'state', title: '状态', formatter: 'state' }
  44. ],
  45. rules: {
  46. name: [
  47. { required: true, message: '请输入角色名称', trigger: 'blur' }
  48. ],
  49. code: [
  50. { required: true, message: '请输入角色编码', trigger: 'blur' }
  51. ],
  52. state: [
  53. { required: true, message: '请输入状态', trigger: 'blur' }
  54. ]
  55. }
  56. }
  57. },
  58. methods: {
  59. ...mapActions(['rolequery', 'rolecreate', 'roleupdate', 'roledelete']),
  60. // 添加
  61. adduser () {
  62. this.is_data = {}
  63. this.visible = true
  64. // eslint-disable-next-line no-return-assign
  65. this.formmeta.map(p => p.name === 'code' ? p.disabled = false : true)
  66. },
  67. // 删除
  68. async deleterole (e) {
  69. this.$confirm('请确认删除', '提示', {
  70. confirmButtonText: '确定',
  71. cancelButtonText: '取消',
  72. type: 'warning'
  73. }).then(async () => {
  74. const res = await this.roledelete(e)
  75. // eslint-disable-next-line eqeqeq
  76. if (res.errcode == 0) {
  77. this.$message.success('操作成功')
  78. this.query()
  79. this.$refs.grid.resetpage(-1)
  80. }
  81. }).catch(() => {
  82. this.$message({
  83. type: 'info',
  84. message: '已取消删除'
  85. })
  86. })
  87. },
  88. // 修改
  89. edit (e) {
  90. this.is_data = e
  91. this.visible = true
  92. // eslint-disable-next-line no-return-assign
  93. this.formmeta.map(p => p.name === 'code' ? p.disabled = true : false)
  94. },
  95. // 查询
  96. async query ({ filter = {}, paging = {} } = {}) {
  97. await this.rolequery({ filter, paging })
  98. },
  99. // 保存按钮
  100. async save (e) {
  101. let res
  102. if (this.isNew) {
  103. // 修改
  104. res = await this.roleupdate(e)
  105. } else {
  106. // 添加
  107. res = await this.rolecreate(e)
  108. }
  109. // eslint-disable-next-line eqeqeq
  110. if (res.errcode == 0) {
  111. this.$message.success('操作成功')
  112. this.query()
  113. this.visible = false
  114. this.$refs.grid.resetpage(-1)
  115. }
  116. },
  117. // 关闭弹窗
  118. close () {
  119. this.visible = false
  120. }
  121. },
  122. async mounted () {
  123. this.query()
  124. },
  125. computed: {
  126. ...mapState(['total', 'roleList']),
  127. isNew () {
  128. return Boolean(this.is_data && this.is_data._id)
  129. }
  130. }
  131. }
  132. </script>
  133. <style lang="less" scoped>
  134. .container {
  135. height: 100%;
  136. }
  137. .box-card {
  138. height: 100%;
  139. }
  140. </style>