RoleForm.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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="parseInt(item.id)"
  15. :label="item.name"
  16. :value="parseInt(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. import { assignUserRoleApi, PermissionAssignUserRoleReqVO } from '@/api/system/permission'
  31. interface Props {
  32. show: boolean
  33. roleOptions: any[]
  34. formInitValue?: Recordable & Partial<typeof initParams>
  35. }
  36. const props = withDefaults(defineProps<Props>(), {
  37. show: false,
  38. roleOptions: () => [],
  39. formInitValue: () => ({})
  40. })
  41. const emits = defineEmits(['update:show', 'success'])
  42. const { t } = useI18n() // 国际化
  43. const message = useMessage() // 消息弹窗
  44. // 表单初始化参数
  45. const initParams = {
  46. nickname: '',
  47. id: 0,
  48. username: '',
  49. roleIds: [] as number[]
  50. }
  51. const formData = ref<Recordable>({ ...initParams })
  52. watch(
  53. () => props.formInitValue,
  54. (val) => {
  55. formData.value = { ...val }
  56. },
  57. { deep: true }
  58. )
  59. /* 弹框按钮操作 */
  60. // 点击取消
  61. const cancel = () => {
  62. closeDialog()
  63. }
  64. // 关闭弹窗
  65. const closeDialog = () => {
  66. emits('update:show', false)
  67. }
  68. // 提交
  69. const submit = async () => {
  70. const data = ref<PermissionAssignUserRoleReqVO>({
  71. userId: formData.value.id,
  72. roleIds: formData.value.roleIds
  73. })
  74. try {
  75. await assignUserRoleApi(data.value)
  76. message.success(t('common.updateSuccess'))
  77. emits('success', true)
  78. closeDialog()
  79. } catch (error) {
  80. console.error(error)
  81. }
  82. }
  83. </script>
  84. <style></style>