RepoCat.vue 2.9 KB

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