ImportTable.vue 4.3 KB

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