RoleForm.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <el-dialog title="分配角色" :modelValue="show" width="500px" append-to-body @close="closeDialog">
  3. <el-form :model="formData" label-width="80px" ref="formRef">
  4. <el-form-item label="用户名称">
  5. <el-input v-model="formData.username" :disabled="true" />
  6. </el-form-item>
  7. <el-form-item label="用户昵称">
  8. <el-input v-model="formData.nickname" :disabled="true" />
  9. </el-form-item>
  10. <el-form-item label="角色">
  11. <el-select v-model="formData.roleIds" multiple placeholder="请选择角色">
  12. <el-option
  13. v-for="item in roleOptions"
  14. :key="item.id"
  15. :label="item.name"
  16. :value="item.id"
  17. />
  18. </el-select>
  19. </el-form-item>
  20. </el-form>
  21. <template #footer>
  22. <div class="dialog-footer">
  23. <el-button type="primary" @click="submit">确 定</el-button>
  24. <el-button @click="cancel">取 消</el-button>
  25. </div>
  26. </template>
  27. </el-dialog>
  28. </template>
  29. <script setup lang="ts">
  30. // TODO el-dialog 用 Dialog 组件
  31. import { assignUserRoleApi, PermissionAssignUserRoleReqVO } from '@/api/system/permission'
  32. interface Props {
  33. show: boolean
  34. roleOptions: any[]
  35. formInitValue?: Recordable & Partial<typeof initParams>
  36. }
  37. const props = withDefaults(defineProps<Props>(), {
  38. show: false,
  39. roleOptions: () => [],
  40. formInitValue: () => ({})
  41. })
  42. const emits = defineEmits(['update:show', 'success'])
  43. const { t } = useI18n() // 国际化
  44. const message = useMessage() // 消息弹窗
  45. // 表单初始化参数
  46. const initParams = {
  47. nickname: '',
  48. id: 0,
  49. username: '',
  50. roleIds: [] as number[]
  51. }
  52. const formData = ref<Recordable>({ ...initParams })
  53. watch(
  54. () => props.formInitValue,
  55. (val) => {
  56. formData.value = { ...val }
  57. },
  58. { deep: true }
  59. )
  60. /* 弹框按钮操作 */
  61. // 点击取消
  62. const cancel = () => {
  63. closeDialog()
  64. }
  65. // 关闭弹窗
  66. const closeDialog = () => {
  67. emits('update:show', false)
  68. }
  69. // 提交
  70. const submit = async () => {
  71. const data = ref<PermissionAssignUserRoleReqVO>({
  72. userId: formData.value.id,
  73. roleIds: formData.value.roleIds
  74. })
  75. try {
  76. await assignUserRoleApi(data.value)
  77. message.success(t('common.updateSuccess'))
  78. emits('success', true)
  79. closeDialog()
  80. } catch (error) {
  81. console.error(error)
  82. }
  83. }
  84. </script>