ImportTable.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <template>
  2. <Dialog :title="modelTitle" v-model="modelVisible">
  3. <el-form :model="queryParams" ref="queryFormRef" :inline="true">
  4. <el-form-item label="数据源" prop="dataSourceConfigId">
  5. <el-select v-model="queryParams.dataSourceConfigId" placeholder="请选择数据源">
  6. <el-option
  7. v-for="config in dataSourceConfigs"
  8. :key="config.id"
  9. :label="config.name"
  10. :value="config.id"
  11. />
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item label="表名称" prop="name">
  15. <el-input
  16. v-model="queryParams.name"
  17. placeholder="请输入表名称"
  18. clearable
  19. @keyup.enter="handleQuery"
  20. />
  21. </el-form-item>
  22. <el-form-item label="表描述" prop="comment">
  23. <el-input
  24. v-model="queryParams.comment"
  25. placeholder="请输入表描述"
  26. clearable
  27. @keyup.enter="handleQuery"
  28. />
  29. </el-form-item>
  30. <el-form-item>
  31. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  32. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  33. </el-form-item>
  34. </el-form>
  35. <el-row>
  36. <el-table
  37. v-loading="dbLoading"
  38. @row-click="clickRow"
  39. ref="tableRef"
  40. :data="dbTableList"
  41. @selection-change="handleSelectionChange"
  42. height="260px"
  43. >
  44. <el-table-column type="selection" width="55" />
  45. <el-table-column prop="name" label="表名称" :show-overflow-tooltip="true" />
  46. <el-table-column prop="comment" label="表描述" :show-overflow-tooltip="true" />
  47. </el-table>
  48. </el-row>
  49. <template #footer>
  50. <div class="dialog-footer">
  51. <el-button @click="handleImportTable" type="primary" :disabled="tables.length === 0">{{
  52. t('action.import')
  53. }}</el-button>
  54. <el-button @click="handleClose">{{ t('dialog.close') }}</el-button>
  55. </div>
  56. </template>
  57. </Dialog>
  58. </template>
  59. <script setup lang="ts">
  60. import type { DatabaseTableVO } from '@/api/infra/codegen/types'
  61. import * as CodegenApi from '@/api/infra/codegen'
  62. import { getDataSourceConfigList, DataSourceConfigVO } from '@/api/infra/dataSourceConfig'
  63. import { ElTable } from 'element-plus'
  64. const { t } = useI18n() // 国际化
  65. const message = useMessage() // 消息弹窗
  66. const emit = defineEmits(['ok'])
  67. const modelVisible = ref(false) // 弹窗的是否展示
  68. const modelTitle = ref('导入表') // 弹窗的标题
  69. const dbLoading = ref(true)
  70. const queryParams = reactive({
  71. name: undefined,
  72. comment: undefined,
  73. dataSourceConfigId: 0
  74. })
  75. const dataSourceConfigs = ref<DataSourceConfigVO[]>([])
  76. const show = async () => {
  77. dataSourceConfigs.value = await getDataSourceConfigList()
  78. queryParams.dataSourceConfigId = dataSourceConfigs.value[0].id as number
  79. modelVisible.value = true
  80. await getList()
  81. }
  82. /** 查询表数据 */
  83. const dbTableList = ref<DatabaseTableVO[]>([])
  84. /** 查询表数据 */
  85. const getList = async () => {
  86. dbLoading.value = true
  87. dbTableList.value = await CodegenApi.getSchemaTableList(queryParams)
  88. dbLoading.value = false
  89. }
  90. // 查询操作
  91. const handleQuery = async () => {
  92. await getList()
  93. }
  94. // 重置操作
  95. const resetQuery = async () => {
  96. queryParams.name = undefined
  97. queryParams.comment = undefined
  98. queryParams.dataSourceConfigId = dataSourceConfigs.value[0].id as number
  99. await getList()
  100. }
  101. const tableRef = ref<typeof ElTable>()
  102. /** 多选框选中数据 */
  103. const tables = ref<string[]>([])
  104. const clickRow = (row) => {
  105. unref(tableRef)?.toggleRowSelection(row)
  106. }
  107. // 多选框选中数据
  108. const handleSelectionChange = (selection) => {
  109. tables.value = selection.map((item) => item.name)
  110. }
  111. /** 导入按钮操作 */
  112. const handleImportTable = async () => {
  113. await CodegenApi.createCodegenList({
  114. dataSourceConfigId: queryParams.dataSourceConfigId,
  115. tableNames: tables.value
  116. })
  117. message.success('导入成功')
  118. emit('ok')
  119. handleClose()
  120. }
  121. const handleClose = () => {
  122. modelVisible.value = false
  123. tables.value = []
  124. }
  125. defineExpose({
  126. show
  127. })
  128. </script>