UserAssignRoleForm.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <Dialog
  3. title="分配角色"
  4. :modelValue="showDialog"
  5. width="500px"
  6. append-to-body
  7. @close="closeDialog"
  8. >
  9. <el-form :model="formData" label-width="80px" ref="formRef">
  10. <el-form-item label="用户名称">
  11. <el-input v-model="formData.username" :disabled="true" />
  12. </el-form-item>
  13. <el-form-item label="用户昵称">
  14. <el-input v-model="formData.nickname" :disabled="true" />
  15. </el-form-item>
  16. <el-form-item label="角色">
  17. <el-select v-model="formData.roleIds" multiple placeholder="请选择角色">
  18. <el-option
  19. v-for="item in roleOptions"
  20. :key="item.id"
  21. :label="item.name"
  22. :value="item.id"
  23. />
  24. </el-select>
  25. </el-form-item>
  26. </el-form>
  27. <template #footer>
  28. <div class="dialog-footer">
  29. <el-button type="primary" @click="submit">确 定</el-button>
  30. <el-button @click="cancel">取 消</el-button>
  31. </div>
  32. </template>
  33. </Dialog>
  34. </template>
  35. <script setup lang="ts">
  36. import {
  37. assignUserRoleApi,
  38. listUserRolesApi,
  39. PermissionAssignUserRoleReqVO
  40. } from '@/api/system/permission'
  41. import { UserVO } from '@/api/system/user'
  42. import * as RoleApi from '@/api/system/role'
  43. const emits = defineEmits(['success'])
  44. const { t } = useI18n() // 国际化
  45. const message = useMessage() // 消息弹窗
  46. // 表单初始化参数
  47. const initParams = {
  48. nickname: '',
  49. id: 0,
  50. username: '',
  51. roleIds: [] as number[]
  52. }
  53. const formData = ref<Recordable>({ ...initParams })
  54. /* 弹框按钮操作 */
  55. // 点击取消
  56. const cancel = () => {
  57. closeDialog()
  58. }
  59. // 关闭弹窗
  60. const closeDialog = () => {
  61. showDialog.value = false
  62. }
  63. // 提交
  64. const submit = async () => {
  65. const data = ref<PermissionAssignUserRoleReqVO>({
  66. userId: formData.value.id,
  67. roleIds: formData.value.roleIds
  68. })
  69. try {
  70. await assignUserRoleApi(data.value)
  71. message.success(t('common.updateSuccess'))
  72. emits('success', true)
  73. closeDialog()
  74. } catch (error) {
  75. console.error(error)
  76. }
  77. }
  78. const roleOptions = ref()
  79. const userRole = reactive(initParams)
  80. const showDialog = ref(false)
  81. const formRef = ref()
  82. const openForm = async (row: UserVO) => {
  83. formRef.value?.resetFields()
  84. userRole.id = row.id
  85. userRole.username = row.username
  86. userRole.nickname = row.nickname
  87. // 获得角色列表
  88. const roleOpt = await RoleApi.getSimpleRoleList()
  89. roleOptions.value = [...roleOpt]
  90. // 获得角色拥有的菜单集合
  91. const roles = await listUserRolesApi(row.id)
  92. userRole.roleIds = roles
  93. formData.value = { ...userRole }
  94. showDialog.value = true
  95. }
  96. defineExpose({
  97. openForm
  98. })
  99. </script>