Просмотр исходного кода

代码生成增加多库模式,数据库管理UI优化

one 4 лет назад
Родитель
Сommit
2369c2d954

+ 15 - 12
Admin.NET/Admin.NET.Core/Service/DataBase/DataBaseManager.cs

@@ -69,26 +69,28 @@ public class DataBaseManager : IDynamicApiController, ITransient
     /// <summary>
     /// 获取表字段
     /// </summary>
-    /// <param name="tableName"></param>
+    /// <param name="tableName">表名</param>
+    /// <param name="configId">ConfigId</param>
     /// <returns></returns>
     [HttpGet("/dataBase/columnInfoList")]
-    public List<DbColumnInfoOutput> GetColumnInfosByTableName(string tableName)
+    public List<DbColumnInfoOutput> GetColumnInfosByTableName(string tableName, string configId = SqlSugarConst.ConfigId)
     {
+        var provider = _sqlSugarClient.AsTenant().GetConnectionScope(configId);
         if (string.IsNullOrWhiteSpace(tableName))
             return new List<DbColumnInfoOutput>();
-        return _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt<List<DbColumnInfoOutput>>();
+        return provider.DbMaintenance.GetColumnInfosByTableName(tableName, false).Adapt<List<DbColumnInfoOutput>>();
     }
-
     /// <summary>
-    /// 获取所有
+    /// 获取表信息
     /// </summary>
+    /// <param name="configId">ConfigId</param>
     /// <returns></returns>
     [HttpGet("/dataBase/tableInfoList")]
-    public List<DbTableInfo> GetTableInfoList()
+    public List<DbTableInfo> GetTableInfoList(string configId = SqlSugarConst.ConfigId)
     {
-        return _sqlSugarClient.DbMaintenance.GetTableInfoList(false);
+        var provider = _sqlSugarClient.AsTenant().GetConnectionScope(configId);
+        return provider.DbMaintenance.GetTableInfoList(false);
     }
-
     /// <summary>
     /// 新增表
     /// </summary>
@@ -159,16 +161,17 @@ public class DataBaseManager : IDynamicApiController, ITransient
     [HttpPost("/table/createEntity")]
     public void CreateEntity(CreateEntityInput input)
     {
-        input.Position = string.IsNullOrWhiteSpace(input.Position) ? "Magic.Application" : input.Position;
+        var provider = _sqlSugarClient.AsTenant().GetConnectionScope(input.ConfigId);
+        input.Position = string.IsNullOrWhiteSpace(input.Position) ? "Admin.NET.Application" : input.Position;
         input.BaseClassName = string.IsNullOrWhiteSpace(input.BaseClassName) ? "" : $" : {input.BaseClassName}";
         var templatePath = GetTemplatePath();
         var targetPath = GetTargetPath(input);
-        DbTableInfo dbTableInfo = _sqlSugarClient.DbMaintenance.GetTableInfoList(false).FirstOrDefault(m => m.Name == input.TableName);
+        DbTableInfo dbTableInfo = provider.DbMaintenance.GetTableInfoList(false).FirstOrDefault(m => m.Name == input.TableName);
         if (dbTableInfo == null)
             throw Oops.Oh(ErrorCodeEnum.db1001);
-        List<DbColumnInfo> dbColumnInfos = _sqlSugarClient.DbMaintenance.GetColumnInfosByTableName(input.TableName, false);
+        List<DbColumnInfo> dbColumnInfos = provider.DbMaintenance.GetColumnInfosByTableName(input.TableName, false);
 
-        if (input.BaseClassName.Contains("DBEntityTenant"))
+        if (input.BaseClassName.Contains("EntityTenant"))
         {
             dbColumnInfos = dbColumnInfos.Where(c => c.DbColumnName != "Id"
                  && c.DbColumnName != "TenantId"

+ 2 - 0
Admin.NET/Admin.NET.Core/Service/DataBase/Dto/CreateEntityInput.cs

@@ -25,4 +25,6 @@ public class CreateEntityInput
     /// </summary>
     /// <example>Magic.Application</example>
     public string Position { get; set; }
+
+    public string ConfigId { get; set; }
 }

+ 2 - 0
Vben2/src/views/sys/admin/database/CreateEntityModal.vue

@@ -18,6 +18,7 @@
         labelWidth: 100,
         schemas: createEntityFormSchema,
         showActionButtonGroup: false,
+        baseColProps: { span: 22 },
       });
 
       const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
@@ -25,6 +26,7 @@
         setModalProps({ confirmLoading: false });
         setFieldsValue({
           tableName: data.tableName,
+          configId: data.configId,
         });
       });
 

+ 5 - 8
Vben2/src/views/sys/admin/database/TableModal.vue

@@ -6,9 +6,10 @@
     :title="getTitle"
     @ok="handleSubmit"
   >
+    <Divider orientation="left" style="font-size: 14px">数据表信息</Divider>
     <BasicForm @register="registerForm" />
     <template v-if="!isUpdate">
-      <a-divider orientation="left" style="font-size: 14px">数据列信息</a-divider>
+      <Divider orientation="left" style="font-size: 14px">数据列信息</Divider>
       <BasicTable @register="registerEditColumn">
         <template #action="{ record, column }">
           <TableAction :actions="createActions(record, column)" />
@@ -26,12 +27,7 @@
           >
         </a-col>
         <a-col :span="6">
-          <a-button
-            preIcon="carbon:add"
-            type="dashed"
-            style="width: 100%"
-            @click="addTenantColumn"
-            disabled
+          <a-button preIcon="carbon:add" type="dashed" style="width: 100%" @click="addTenantColumn"
             >新增租户字段</a-button
           >
         </a-col>
@@ -46,6 +42,7 @@
 </template>
 <script lang="ts">
   import { defineComponent, ref, computed, unref } from 'vue';
+  import { Divider } from 'ant-design-vue';
   import { BasicForm, useForm } from '/@/components/Form/index';
   import { tableFormSchema, editColumn } from './database.data';
   import { BasicModal, useModalInner } from '/@/components/Modal';
@@ -61,7 +58,7 @@
 
   export default defineComponent({
     name: 'TableModal',
-    components: { BasicModal, BasicForm, BasicTable, TableAction },
+    components: { BasicModal, BasicForm, BasicTable, TableAction, Divider },
     emits: ['success', 'register'],
     setup(_, { emit }) {
       const isUpdate = ref(true);

+ 8 - 7
Vben2/src/views/sys/admin/database/database.data.ts

@@ -85,11 +85,6 @@ export const tableShowColumns: BasicColumn[] = [
 ];
 
 export const tableFormSchema: FormSchema[] = [
-  {
-    field: 'dataTableInfo',
-    label: '数据表信息',
-    component: 'Divider',
-  },
   {
     field: 'oldName',
     label: '表名',
@@ -204,6 +199,13 @@ export const columnFormSchema: FormSchema[] = [
 ];
 
 export const createEntityFormSchema: FormSchema[] = [
+  {
+    field: 'configId',
+    label: '数据库',
+    component: 'Input',
+    required: false,
+    show: false,
+  },
   {
     field: 'tableName',
     label: '表名',
@@ -224,9 +226,8 @@ export const createEntityFormSchema: FormSchema[] = [
     componentProps: {
       options: [
         { label: 'EntityBaseId', value: 'EntityBaseId' },
-        //{ label: 'AutoIncrementEntity', value: 'AutoIncrementEntity' },
         { label: 'EntityBase', value: 'EntityBase' },
-        //{ label: 'DBEntityTenant', value: 'DBEntityTenant' },
+        { label: 'EntityTenant', value: 'EntityTenant' },
       ],
     },
     defaultValue: 'EntityBase',

+ 44 - 3
Vben2/src/views/sys/admin/database/index.vue

@@ -2,6 +2,15 @@
   <div>
     <PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
       <BasicTable @register="registerTable" class="w-2/6" @row-dbClick="onRowClick">
+        <template #tableTitle>
+          <Select
+            style="width: 150px"
+            v-model:value="currentDB"
+            :options="dbList"
+            :field-names="{ label: 'configId', value: 'configId' }"
+            @change="handleDbChange"
+          />
+        </template>
         <template #toolbar>
           <a-button type="primary" @click="handleCreateTable">新增数据表</a-button>
         </template>
@@ -68,13 +77,20 @@
 <script lang="ts">
   import { defineComponent, ref } from 'vue';
   import { BasicTable, useTable, TableAction } from '/@/components/Table';
+  import { Select } from 'ant-design-vue';
   import { PageWrapper } from '/@/components/Page';
   import { tableShowColumns, columnShowColumns } from './database.data';
   import { useModal } from '/@/components/Modal';
   import TableModal from './TableModal.vue';
   import ColumnModal from './ColumnModal.vue';
   import CreateEntityModal from './CreateEntityModal.vue';
-  import { getTableInfoList, getColumnInfoList, deleteTable, deleteColumn } from '/@/api/sys/admin';
+  import {
+    getTableInfoList,
+    getColumnInfoList,
+    deleteTable,
+    deleteColumn,
+    getDatabaseList,
+  } from '/@/api/sys/admin';
   import { useMessage } from '/@/hooks/web/useMessage';
 
   export default defineComponent({
@@ -85,19 +101,29 @@
       TableModal,
       CreateEntityModal,
       ColumnModal,
+      Select,
     },
     setup() {
       const { createMessage } = useMessage();
       const [registerTableModal, { openModal }] = useModal();
       const [registerCreateEntityModal, { openModal: openCreateEntityModal }] = useModal();
       const [registerColumnModal, { openModal: openColumnModal }] = useModal();
+      const currentDB = ref('');
       const currentTable = ref('');
+      const dbList = ref<any[]>([]);
       const columnApi = async () => {
-        const result = await getColumnInfoList({ tableName: currentTable.value });
+        const result = await getColumnInfoList({
+          tableName: currentTable.value,
+          configId: currentDB.value,
+        });
         return result;
       };
       const [registerTable, { reload }] = useTable({
         api: getTableInfoList,
+        beforeFetch: (params: any) => {
+          params.configId = currentDB.value;
+        },
+        immediate: false,
         rowKey: 'name',
         showIndexColumn: false,
         pagination: false,
@@ -109,8 +135,14 @@
           slots: { customRender: 'action' },
         },
       });
+      getDatabaseList().then((res) => {
+        dbList.value = res;
+        currentDB.value = res[0].configId;
+        reload();
+      });
       const [registerColumnTable, { reload: colReload }] = useTable({
         api: columnApi,
+        immediate: false,
         rowKey: 'dbColumnName',
         showIndexColumn: false,
         pagination: false,
@@ -144,7 +176,7 @@
       }
 
       function handleCreateEntity(record: Recordable) {
-        openCreateEntityModal(true, { tableName: record.name });
+        openCreateEntityModal(true, { tableName: record.name, configId: currentDB.value });
       }
 
       function handleCreateColumn() {
@@ -180,6 +212,12 @@
         currentTable.value = record.name;
         colReload();
       }
+      function handleDbChange(value: string) {
+        currentDB.value = value;
+        currentTable.value = '';
+        reload();
+        colReload();
+      }
 
       return {
         registerTable,
@@ -198,6 +236,9 @@
         handleColumnEdit,
         handleCreateColumn,
         handleColumnDelete,
+        dbList,
+        currentDB,
+        handleDbChange,
       };
     },
   });