role-modal.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <a-modal
  3. width="800px"
  4. title="角色列表"
  5. :visible="value"
  6. @cancel="$emit('change', false)"
  7. @ok="selectRole"
  8. >
  9. <a-transfer
  10. :data-source="mockData"
  11. :list-style="{
  12. width: '300px',
  13. height: '500px',
  14. }"
  15. show-search
  16. :target-keys="targetKeys"
  17. :render="(item) => item.title"
  18. @change="handleChange"
  19. />
  20. </a-modal>
  21. </template>
  22. <script>
  23. import dataService from './data-config'
  24. export default {
  25. model: { prop: 'value', event: 'change' },
  26. props: { value: Boolean },
  27. data() {
  28. return {
  29. mockData: [],
  30. targetKeys: [],
  31. roleList: [],
  32. }
  33. },
  34. watch: {
  35. value(val) {
  36. if (val) {
  37. this.getRoleList()
  38. }
  39. },
  40. },
  41. methods: {
  42. handleChange(nextTargetKeys, direction, moveKeys) {
  43. this.targetKeys = nextTargetKeys
  44. },
  45. getRoleList() {
  46. dataService.rolesList().then((res) => {
  47. this.roleList = res
  48. this.mockData = res.map((item) => {
  49. return {
  50. key: item.code,
  51. title: item.name,
  52. description: item.code,
  53. }
  54. })
  55. })
  56. },
  57. selectRole() {
  58. const arr = []
  59. this.roleList.forEach((item) => {
  60. if (this.targetKeys.includes(item.code)) {
  61. arr.push(item)
  62. }
  63. })
  64. this.$emit('selectRoleList', arr)
  65. this.$emit('change', false)
  66. },
  67. },
  68. }
  69. </script>