Role.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <route lang="yaml">
  2. meta:
  3. enabled: false
  4. </route>
  5. <script lang="ts" setup>
  6. import { ElMessage } from 'element-plus'
  7. import type { FormInstance, FormRules } from 'element-plus'
  8. import { createRole, getRoleById, updateRole } from '@/api/system/roleApi'
  9. const emit = defineEmits(['success'])
  10. const formRef = ref<FormInstance>()
  11. const formRules = ref<FormRules>({
  12. roleName: [
  13. { required: true, message: '请输入标题', trigger: 'blur' },
  14. ],
  15. roleDesc: [
  16. { required: false, message: '请输入描述', trigger: 'blur' },
  17. ],
  18. })
  19. const state = reactive({
  20. title: '',
  21. dialogVisible: false,
  22. loading: false,
  23. formData: {
  24. roleId: 0,
  25. roleName: '',
  26. roleDesc: '',
  27. },
  28. actionType: 1,
  29. })
  30. onMounted(() => {})
  31. const getData = async (roleId: number) => {
  32. state.loading = true
  33. const { data } = await getRoleById(roleId)
  34. state.loading = false
  35. state.formData = data
  36. }
  37. function onSubmit() {
  38. formRef.value && formRef.value.validate(async (valid) => {
  39. if (valid) {
  40. if (state.actionType === 1) {
  41. await createRole(state.formData)
  42. state.dialogVisible = false
  43. emit('success')
  44. }
  45. else {
  46. await updateRole(state.formData)
  47. state.dialogVisible = false
  48. emit('success')
  49. }
  50. ElMessage.success({
  51. message: '保存成功',
  52. center: true,
  53. })
  54. }
  55. })
  56. }
  57. function onCancel() {
  58. state.dialogVisible = false
  59. }
  60. function resetFormData() {
  61. state.formData = {
  62. roleId: 0,
  63. roleName: '',
  64. roleDesc: '',
  65. }
  66. }
  67. defineExpose({
  68. showAddModel() {
  69. resetFormData()
  70. state.title = '新增角色'
  71. state.actionType = 1
  72. state.dialogVisible = true
  73. },
  74. showEditModel(roleId: number) {
  75. resetFormData()
  76. state.title = '编辑角色'
  77. state.actionType = 2
  78. state.dialogVisible = true
  79. getData(roleId)
  80. },
  81. })
  82. </script>
  83. <template>
  84. <div>
  85. <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
  86. <div v-loading="state.loading">
  87. <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
  88. <el-form-item label="角色名称" prop="roleName">
  89. <el-input v-model="state.formData.roleName" placeholder="请输入标题" />
  90. </el-form-item>
  91. <el-form-item label="简要说明" prop="roleDesc">
  92. <el-input v-model="state.formData.roleDesc" type="textarea" rows="10" placeholder="请输入标题" />
  93. </el-form-item>
  94. </el-form>
  95. </div>
  96. <template #footer>
  97. <el-button size="large" @click="onCancel">
  98. 取消
  99. </el-button>
  100. <el-button type="primary" size="large" @click="onSubmit">
  101. 保存
  102. </el-button>
  103. </template>
  104. </el-dialog>
  105. </div>
  106. </template>