index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <template>
  2. <div class="sys-database-container">
  3. <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
  4. <el-form :model="queryParams" ref="queryForm" :inline="true" v-loading="loading">
  5. <el-form-item label="库名" prop="configId">
  6. <el-select v-model="configId" placeholder="库名" filterable @change="handleQueryTable">
  7. <el-option v-for="item in dbData" :key="item" :label="item" :value="item" />
  8. </el-select>
  9. </el-form-item>
  10. <el-form-item label="表名" prop="tableName">
  11. <el-select v-model="tableName" placeholder="表名" filterable clearable @change="handleQueryColunm">
  12. <el-option v-for="item in tableData" :key="item.name" :label="item.name + '[' + item.description + ']'" :value="item.name" />
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item>
  16. <!-- <el-button type="primary" icon="ele-Search" @click="handleQueryTable"> 查看 </el-button> -->
  17. <el-button icon="ele-Edit" type="primary" @click="openEditTable"> 编辑表 </el-button>
  18. <el-button icon="ele-Delete" type="danger" @click="delTable"> 删除表 </el-button>
  19. <el-button icon="ele-Plus" @click="openAddTable"> 增加表 </el-button>
  20. <el-button icon="ele-Plus" @click="openAddColumn"> 增加列 </el-button>
  21. </el-form-item>
  22. </el-form>
  23. </el-card>
  24. <el-card shadow="hover" style="margin-top: 8px">
  25. <el-table :data="columnData" style="width: 100%" v-loading="loading1" border>
  26. <el-table-column type="index" label="序号" width="55" align="center" />
  27. <el-table-column prop="dbColumnName" label="字段名" show-overflow-tooltip></el-table-column>
  28. <el-table-column prop="dataType" label="数据类型" show-overflow-tooltip></el-table-column>
  29. <el-table-column prop="isPrimarykey" label="主键" width="70" align="center" show-overflow-tooltip>
  30. <template #default="scope">
  31. <el-tag type="success" v-if="scope.row.isPrimarykey === true">是</el-tag>
  32. <el-tag type="info" v-else>否</el-tag>
  33. </template>
  34. </el-table-column>
  35. <el-table-column prop="isIdentity" label="自增" width="70" align="center" show-overflow-tooltip>
  36. <template #default="scope">
  37. <el-tag type="success" v-if="scope.row.isIdentity === true">是</el-tag>
  38. <el-tag type="info" v-else>否</el-tag>
  39. </template>
  40. </el-table-column>
  41. <el-table-column prop="isNullable" label="可空" width="70" align="center" show-overflow-tooltip>
  42. <template #default="scope">
  43. <el-tag v-if="scope.row.isNullable === true">是</el-tag>
  44. <el-tag type="info" v-else>否</el-tag>
  45. </template>
  46. </el-table-column>
  47. <el-table-column prop="length" label="长度" width="70" align="center" show-overflow-tooltip> </el-table-column>
  48. <el-table-column prop="decimalDigits" label="精度" width="70" align="center" show-overflow-tooltip> </el-table-column>
  49. <el-table-column prop="defaultValue" label="默认值" show-overflow-tooltip></el-table-column>
  50. <el-table-column prop="columnDescription" label="描述" show-overflow-tooltip></el-table-column>
  51. <el-table-column label="操作" width="140" fixed="right" align="center" show-overflow-tooltip>
  52. <template #default="scope">
  53. <el-button icon="ele-Edit" size="small" text type="primary" @click="openEditColumn(scope.row)"> 编辑 </el-button>
  54. <el-button icon="ele-Delete" size="small" text type="danger" @click="delColumn(scope.row)"> 删除 </el-button>
  55. </template>
  56. </el-table-column>
  57. </el-table>
  58. </el-card>
  59. <EditTable ref="editTableRef" />
  60. <EditColumn ref="editColumnRef" />
  61. </div>
  62. </template>
  63. <script lang="ts">
  64. import { toRefs, reactive, onMounted, ref, defineComponent, onUnmounted, getCurrentInstance } from 'vue';
  65. import { ElMessageBox, ElMessage } from 'element-plus';
  66. import EditTable from '/@/views/system/database/component/editTable.vue';
  67. import EditColumn from '/@/views/system/database/component/editColumn.vue';
  68. import { getAPI } from '/@/utils/axios-utils';
  69. import { SysDatabaseApi } from '/@/api-services/api';
  70. import { DbColumnOutput, DbTableInfo } from '/@/api-services/models';
  71. export default defineComponent({
  72. name: 'sysDatabase',
  73. components: { EditTable, EditColumn },
  74. setup() {
  75. const { proxy } = getCurrentInstance() as any;
  76. const editTableRef = ref();
  77. const editColumnRef = ref();
  78. const state = reactive({
  79. loading: false,
  80. loading1: false,
  81. dbData: [] as any,
  82. configId: '',
  83. tableData: [] as Array<DbTableInfo>,
  84. tableName: '',
  85. columnData: [] as Array<DbColumnOutput>,
  86. queryParams: {
  87. name: undefined,
  88. code: undefined,
  89. },
  90. editPosTitle: '',
  91. });
  92. onMounted(async () => {
  93. state.loading = true;
  94. var res = await getAPI(SysDatabaseApi).sysDatabaseListGet();
  95. state.dbData = res.data.result;
  96. state.loading = false;
  97. proxy.mittBus.on('submitRefreshTable', () => {
  98. handleQueryTable();
  99. });
  100. proxy.mittBus.on('submitRefreshColumn', () => {
  101. handleQueryColunm();
  102. });
  103. });
  104. onUnmounted(() => {
  105. proxy.mittBus.off('submitRefreshTable');
  106. proxy.mittBus.off('submitRefreshColumn');
  107. });
  108. // 表查询操作
  109. const handleQueryTable = async () => {
  110. state.tableName = '';
  111. state.columnData = [];
  112. state.loading = true;
  113. var res = await getAPI(SysDatabaseApi).sysDatabaseTableListGet(state.configId);
  114. state.tableData = res.data.result ?? [];
  115. state.loading = false;
  116. };
  117. // 列查询操作
  118. const handleQueryColunm = async () => {
  119. state.loading1 = true;
  120. var res = await getAPI(SysDatabaseApi).sysDatabaseColumnListGet(state.tableName, state.configId);
  121. state.columnData = res.data.result ?? [];
  122. state.loading1 = false;
  123. };
  124. // 打开表编辑页面
  125. const openEditTable = () => {
  126. if (state.configId == '' || state.tableName == '') return;
  127. var res = state.tableData.filter((u: any) => u.name == state.tableName);
  128. var table: any = {
  129. configId: state.configId,
  130. tableName: state.tableName,
  131. oldTableName: state.tableName,
  132. description: res[0].description,
  133. };
  134. editTableRef.value.openDialog(table);
  135. };
  136. // 打开表增加页面
  137. const openAddTable = () => {
  138. ElMessage({
  139. type: 'success',
  140. message: `期待您的PR! ${state.configId}`,
  141. });
  142. };
  143. // 打开列编辑页面
  144. const openEditColumn = (row: any) => {
  145. var column: any = {
  146. configId: state.configId,
  147. tableName: row.tableName,
  148. columnName: row.dbColumnName,
  149. oldColumnName: row.dbColumnName,
  150. description: row.columnDescription,
  151. };
  152. editColumnRef.value.openDialog(column);
  153. };
  154. // 打开列增加页面
  155. const openAddColumn = () => {
  156. ElMessage({
  157. type: 'success',
  158. message: `期待您的PR! ${state.configId}`,
  159. });
  160. };
  161. // 删除表
  162. const delTable = () => {
  163. ElMessageBox.confirm(`确定删除表:【${state.tableName}】?`, '提示', {
  164. confirmButtonText: '确定',
  165. cancelButtonText: '取消',
  166. type: 'warning',
  167. })
  168. .then(async () => {
  169. await getAPI(SysDatabaseApi).sysDatabaseTableDeletePost({ configId: state.configId, tableName: state.tableName });
  170. handleQueryTable();
  171. ElMessage.success('表删除成功');
  172. })
  173. .catch(() => {});
  174. };
  175. // 删除列
  176. const delColumn = (row: any) => {
  177. ElMessageBox.confirm(`确定删除列:【${row.dbColumnName}】?`, '提示', {
  178. confirmButtonText: '确定',
  179. cancelButtonText: '取消',
  180. type: 'warning',
  181. })
  182. .then(async () => {
  183. await getAPI(SysDatabaseApi).sysDatabaseColumnDeletePost({ configId: state.configId, tableName: state.tableName, dbColumnName: row.dbColumnName });
  184. handleQueryTable();
  185. ElMessage.success('列删除成功');
  186. })
  187. .catch(() => {});
  188. };
  189. return {
  190. handleQueryTable,
  191. handleQueryColunm,
  192. openEditTable,
  193. openAddTable,
  194. openEditColumn,
  195. openAddColumn,
  196. delTable,
  197. delColumn,
  198. editTableRef,
  199. editColumnRef,
  200. ...toRefs(state),
  201. };
  202. },
  203. });
  204. </script>