addRole.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <div class="system-add-role-container">
  3. <el-dialog title="新增角色" v-model="isShowDialog" width="769px" draggable>
  4. <el-form :model="ruleForm" label-width="90px" ref="ruleFormRef">
  5. <el-row :gutter="35">
  6. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  7. <el-form-item label="角色名称" prop="name" :rules="[{ required: true, message: '请输入角色名称', trigger: 'blur' }]">
  8. <el-input v-model="ruleForm.name" placeholder="请输入角色名称" clearable></el-input>
  9. </el-form-item>
  10. </el-col>
  11. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  12. <el-form-item label="角色别名" prop="name" :rules="[{ required: false, message: '请输入角色别名', trigger: 'blur' }]">
  13. <el-input v-model="ruleForm.displayName" placeholder="请输入角色别名" clearable></el-input>
  14. </el-form-item>
  15. </el-col>
  16. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
  17. <el-form-item label="角色状态" prop="name" :rules="[{ required: false, message: '请输入角色状态', trigger: 'blur' }]">
  18. <el-switch v-model="ruleForm.enable" inline-prompt active-text="启" inactive-text="禁"></el-switch>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
  22. <el-form-item label="角色描述" prop="name" :rules="[{ required: false, message: '请输入角色描述', trigger: 'blur' }]">
  23. <el-input v-model="ruleForm.description" type="textarea" placeholder="请输入角色描述" maxlength="150"></el-input>
  24. </el-form-item>
  25. </el-col>
  26. </el-row>
  27. </el-form>
  28. <template #footer>
  29. <span class="dialog-footer">
  30. <el-button @click="onCancel">取 消</el-button>
  31. <el-button type="primary" @click="onSubmit">确 定</el-button>
  32. </span>
  33. </template>
  34. </el-dialog>
  35. </div>
  36. </template>
  37. <script lang="ts">
  38. import { reactive, toRefs, defineComponent,getCurrentInstance } from 'vue';
  39. import { addRole } from '/@/api/system/roles';
  40. import { ElMessage } from 'element-plus';
  41. export default defineComponent({
  42. name: 'systemAddRole',
  43. setup(props:any, {emit}:any) {
  44. const state = reactive<any>({
  45. isShowDialog: false,
  46. ruleForm: {
  47. name: '', // 角色名称
  48. displayName: '', // 角色标识
  49. enable: true, // 角色状态
  50. description: '', // 角色描述
  51. },
  52. });
  53. const { proxy } = <any>getCurrentInstance()
  54. // 打开弹窗
  55. const openDialog = () => {
  56. state.isShowDialog = true;
  57. };
  58. // 关闭弹窗
  59. const closeDialog = () => {
  60. state.isShowDialog = false;
  61. };
  62. // 取消
  63. const onCancel = () => {
  64. closeDialog();
  65. };
  66. // 新增
  67. const onSubmit = () => {
  68. proxy.$refs.ruleFormRef.validate((valid: boolean) => {
  69. if (valid) {
  70. addRole(state.ruleForm).then(()=>{
  71. ElMessage({
  72. message: '新增成功',
  73. type: 'success',
  74. })
  75. closeDialog();
  76. emit("updateList")
  77. }).catch(()=>{ // 新增失败
  78. closeDialog();
  79. })
  80. } else {
  81. return false;
  82. }
  83. });
  84. };
  85. return {
  86. openDialog,
  87. closeDialog,
  88. onCancel,
  89. onSubmit,
  90. ...toRefs(state),
  91. };
  92. },
  93. });
  94. </script>
  95. <style scoped lang="scss">
  96. .system-add-role-container {
  97. .menu-data-tree {
  98. width: 100%;
  99. border: 1px solid var(--el-border-color);
  100. border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
  101. padding: 5px;
  102. }
  103. }
  104. </style>