EditTable.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <ContentWrap v-loading="formLoading">
  3. <el-tabs v-model="activeName">
  4. <el-tab-pane label="基本信息" name="basicInfo">
  5. <basic-info-form ref="basicInfoRef" :table="formData.table" />
  6. </el-tab-pane>
  7. <el-tab-pane label="字段信息" name="colum">
  8. <colum-info-form ref="columInfoRef" :columns="formData.columns" />
  9. </el-tab-pane>
  10. <el-tab-pane label="生成信息" name="generateInfo">
  11. <generate-info-form
  12. ref="generateInfoRef"
  13. :table="formData.table"
  14. :columns="formData.columns"
  15. />
  16. </el-tab-pane>
  17. </el-tabs>
  18. <el-form>
  19. <el-form-item style="float: right">
  20. <el-button :loading="formLoading" type="primary" @click="submitForm">保存</el-button>
  21. <el-button @click="close">返回</el-button>
  22. </el-form-item>
  23. </el-form>
  24. </ContentWrap>
  25. </template>
  26. <script lang="ts" setup>
  27. import { useTagsViewStore } from '@/store/modules/tagsView'
  28. import { BasicInfoForm, ColumInfoForm, GenerateInfoForm } from './components'
  29. import * as CodegenApi from '@/api/infra/codegen'
  30. defineOptions({ name: 'InfraCodegenEditTable' })
  31. const { t } = useI18n() // 国际化
  32. const message = useMessage() // 消息弹窗
  33. const { push, currentRoute } = useRouter() // 路由
  34. const { query } = useRoute() // 查询参数
  35. const { delView } = useTagsViewStore() // 视图操作
  36. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  37. const activeName = ref('colum') // Tag 激活的窗口
  38. const basicInfoRef = ref<ComponentRef<typeof BasicInfoForm>>()
  39. const columInfoRef = ref<ComponentRef<typeof ColumInfoForm>>()
  40. const generateInfoRef = ref<ComponentRef<typeof GenerateInfoForm>>()
  41. const formData = ref<CodegenApi.CodegenUpdateReqVO>({
  42. table: {},
  43. columns: []
  44. })
  45. /** 获得详情 */
  46. const getDetail = async () => {
  47. const id = query.id as unknown as number
  48. if (!id) {
  49. return
  50. }
  51. formLoading.value = true
  52. try {
  53. formData.value = await CodegenApi.getCodegenTable(id)
  54. } finally {
  55. formLoading.value = false
  56. }
  57. }
  58. /** 提交按钮 */
  59. const submitForm = async () => {
  60. // 参数校验
  61. if (!unref(formData)) return
  62. await unref(basicInfoRef)?.validate()
  63. await unref(generateInfoRef)?.validate()
  64. try {
  65. // 提交请求
  66. await CodegenApi.updateCodegenTable(formData.value)
  67. message.success(t('common.updateSuccess'))
  68. close()
  69. } catch {}
  70. }
  71. /** 关闭按钮 */
  72. const close = () => {
  73. delView(unref(currentRoute))
  74. push('/infra/codegen')
  75. }
  76. /** 初始化 */
  77. onMounted(() => {
  78. getDetail()
  79. })
  80. </script>