RoleModal.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <a-modal
  3. title="操作"
  4. :width="800"
  5. :visible="visible"
  6. :confirmLoading="confirmLoading"
  7. @ok="handleOk"
  8. @cancel="handleCancel"
  9. >
  10. <a-steps :current="1">
  11. <a-step>
  12. <!-- <span slot="title">Finished</span> -->
  13. <template slot="title">
  14. Finished
  15. </template>
  16. <span slot="description">This is a description.</span>
  17. </a-step>
  18. <a-step title="In Progress" description="This is a description." />
  19. <a-step title="Waiting" description="This is a description." />
  20. </a-steps>
  21. </a-modal>
  22. </template>
  23. <script>
  24. import { getPermissions } from '@/api/manage'
  25. import { actionToObject } from '@/utils/permissions'
  26. import pick from 'lodash.pick'
  27. export default {
  28. name: 'RoleModal',
  29. data () {
  30. return {
  31. labelCol: {
  32. xs: { span: 24 },
  33. sm: { span: 5 }
  34. },
  35. wrapperCol: {
  36. xs: { span: 24 },
  37. sm: { span: 16 }
  38. },
  39. visible: false,
  40. confirmLoading: false,
  41. mdl: {},
  42. form: this.$form.createForm(this),
  43. permissions: []
  44. }
  45. },
  46. created () {
  47. this.loadPermissions()
  48. },
  49. methods: {
  50. add () {
  51. this.edit({ id: 0 })
  52. },
  53. edit (record) {
  54. this.mdl = Object.assign({}, record)
  55. this.visible = true
  56. // 有权限表,处理勾选
  57. if (this.mdl.permissions && this.permissions) {
  58. // 先处理要勾选的权限结构
  59. const permissionsAction = {}
  60. this.mdl.permissions.forEach(permission => {
  61. permissionsAction[permission.permissionId] = permission.actionEntitySet.map(entity => entity.action)
  62. })
  63. // 把权限表遍历一遍,设定要勾选的权限 action
  64. this.permissions.forEach(permission => {
  65. permission.selected = permissionsAction[permission.id] || []
  66. })
  67. }
  68. this.$nextTick(() => {
  69. this.form.setFieldsValue(pick(this.mdl, 'id', 'name', 'status', 'describe'))
  70. })
  71. console.log('this.mdl', this.mdl)
  72. },
  73. close () {
  74. this.$emit('close')
  75. this.visible = false
  76. },
  77. handleOk () {
  78. const _this = this
  79. // 触发表单验证
  80. this.form.validateFields((err, values) => {
  81. // 验证表单没错误
  82. if (!err) {
  83. console.log('form values', values)
  84. _this.confirmLoading = true
  85. // 模拟后端请求 2000 毫秒延迟
  86. new Promise((resolve) => {
  87. setTimeout(() => resolve(), 2000)
  88. }).then(() => {
  89. // Do something
  90. _this.$message.success('保存成功')
  91. _this.$emit('ok')
  92. }).catch(() => {
  93. // Do something
  94. }).finally(() => {
  95. _this.confirmLoading = false
  96. _this.close()
  97. })
  98. }
  99. })
  100. },
  101. handleCancel () {
  102. this.close()
  103. },
  104. onChangeCheck (permission) {
  105. permission.indeterminate = !!permission.selected.length && (permission.selected.length < permission.actionsOptions.length)
  106. permission.checkedAll = permission.selected.length === permission.actionsOptions.length
  107. },
  108. onChangeCheckAll (e, permission) {
  109. Object.assign(permission, {
  110. selected: e.target.checked ? permission.actionsOptions.map(obj => obj.value) : [],
  111. indeterminate: false,
  112. checkedAll: e.target.checked
  113. })
  114. },
  115. loadPermissions () {
  116. const that = this
  117. getPermissions().then(res => {
  118. const result = res.result
  119. that.permissions = result.map(permission => {
  120. const options = actionToObject(permission.actionData)
  121. permission.checkedAll = false
  122. permission.selected = []
  123. permission.indeterminate = false
  124. permission.actionsOptions = options.map(option => {
  125. return {
  126. label: option.describe,
  127. value: option.action
  128. }
  129. })
  130. return permission
  131. })
  132. })
  133. }
  134. }
  135. }
  136. </script>
  137. <style scoped>
  138. </style>