index.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <template>
  2. <div class="role-management-container">
  3. <vab-query-form>
  4. <vab-query-form-left-panel :span="12">
  5. <el-button v-permissions="['system:role:add']" icon="el-icon-plus" type="primary" @click="handleEdit($event)">
  6. 添加
  7. </el-button>
  8. <el-button
  9. v-permissions="['system:role:delete']"
  10. icon="el-icon-delete"
  11. type="danger"
  12. @click="handleDelete($event)">
  13. 删除
  14. </el-button>
  15. </vab-query-form-left-panel>
  16. <vab-query-form-right-panel :span="12">
  17. <el-form :inline="true" :model="queryForm" @submit.native.prevent>
  18. <el-form-item>
  19. <el-input v-model.trim="queryForm.roleName" clearable placeholder="请输入角色" />
  20. </el-form-item>
  21. <el-form-item>
  22. <el-button icon="el-icon-search" type="primary" @click="queryData">查询</el-button>
  23. </el-form-item>
  24. </el-form>
  25. </vab-query-form-right-panel>
  26. </vab-query-form>
  27. <el-table
  28. v-loading="listLoading"
  29. border
  30. :data="list"
  31. :height="$baseTableHeight(1)"
  32. @selection-change="setSelectRows">
  33. <el-table-column align="center" show-overflow-tooltip type="selection" />
  34. <el-table-column align="center" label="序号" width="55">
  35. <template #default="{ $index }">
  36. {{ $index + 1 }}
  37. </template>
  38. </el-table-column>
  39. <el-table-column align="center" label="角色名称" prop="roleName" show-overflow-tooltip />
  40. <el-table-column align="center" label="权限字符" prop="roleKey" show-overflow-tooltip />
  41. <el-table-column align="center" label="显示顺序" prop="sort" show-overflow-tooltip />
  42. <el-table-column align="center" label="状态" prop="status">
  43. <template #default="{ row }">
  44. {{ row.status === '10' ? '正常' : '停用' }}
  45. </template>
  46. </el-table-column>
  47. <el-table-column align="center" label="备注" prop="remark" show-overflow-tooltip />
  48. <el-table-column align="center" label="创建时间" prop="createdTime">
  49. <template #default="scope">
  50. <span>{{ parseTime(scope.row.createdTime) }}</span>
  51. </template>
  52. </el-table-column>
  53. <el-table-column align="center" label="操作" show-overflow-tooltip width="150">
  54. <template #default="{ row }">
  55. <el-button v-permissions="['system:role:edit']" type="text" @click="handleEdit(row)">编辑</el-button>
  56. <el-button v-permissions="['system:role:dataScope']" type="text" @click="handleDataScope(row)">
  57. 数据权限
  58. </el-button>
  59. <el-button v-permissions="['system:role:delete']" type="text" @click="handleDelete(row)">删除</el-button>
  60. </template>
  61. </el-table-column>
  62. <template #empty>
  63. <el-image class="vab-data-empty" :src="require('@/assets/empty_images/data_empty.png')" />
  64. </template>
  65. </el-table>
  66. <el-pagination
  67. background
  68. :current-page="queryForm.pageNum"
  69. :layout="layout"
  70. :page-size="queryForm.pageSize"
  71. :total="total"
  72. @current-change="handleCurrentChange"
  73. @size-change="handleSizeChange" />
  74. <edit ref="edit" @fetch-data="fetchData" />
  75. <role-data-scope-edit ref="role-data-scope-edit" @fetch-data="fetchData" />
  76. </div>
  77. </template>
  78. <script>
  79. import roleApi from '@/api/system/role'
  80. import Edit from './components/RoleEdit'
  81. import RoleDataScopeEdit from './components/RoleDataScopeEdit'
  82. export default {
  83. name: 'Role',
  84. components: { Edit, RoleDataScopeEdit },
  85. data() {
  86. return {
  87. list: [],
  88. listLoading: true,
  89. layout: 'total, sizes, prev, pager, next, jumper',
  90. total: 0,
  91. selectRows: '',
  92. queryForm: {
  93. pageNum: 1,
  94. pageSize: 10,
  95. roleName: '',
  96. },
  97. }
  98. },
  99. created() {
  100. this.fetchData()
  101. },
  102. methods: {
  103. setSelectRows(val) {
  104. this.selectRows = val
  105. },
  106. handleEdit(row) {
  107. if (row.id) {
  108. this.$refs['edit'].showEdit(row)
  109. } else {
  110. this.$refs['edit'].showEdit()
  111. }
  112. },
  113. handleDataScope(row) {
  114. this.$refs['role-data-scope-edit'].handleDataScope(row)
  115. },
  116. handleDelete(row) {
  117. if (row.id) {
  118. this.$baseConfirm('你确定要删除当前项吗', null, async () => {
  119. const { msg } = await roleApi.doDelete({ ids: [row.id] })
  120. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  121. await this.fetchData()
  122. })
  123. } else {
  124. if (this.selectRows.length > 0) {
  125. const ids = this.selectRows.map((item) => item.id)
  126. this.$baseConfirm('你确定要删除选中项吗', null, async () => {
  127. const { msg } = await roleApi.doDelete({ ids })
  128. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  129. await this.fetchData()
  130. })
  131. } else {
  132. this.$baseMessage('未选中任何行', 'error', 'vab-hey-message-error')
  133. }
  134. }
  135. },
  136. handleSizeChange(val) {
  137. this.queryForm.pageSize = val
  138. this.fetchData()
  139. },
  140. handleCurrentChange(val) {
  141. this.queryForm.pageNum = val
  142. this.fetchData()
  143. },
  144. queryData() {
  145. this.queryForm.pageNum = 1
  146. this.fetchData()
  147. },
  148. async fetchData() {
  149. this.listLoading = true
  150. const {
  151. data: { list, total },
  152. } = await roleApi.getList(this.queryForm)
  153. this.list = list
  154. this.total = total
  155. this.listLoading = false
  156. },
  157. },
  158. }
  159. </script>