diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py
index 9d821b24..07bb019d 100644
--- a/backend/apps/datasource/api/datasource.py
+++ b/backend/apps/datasource/api/datasource.py
@@ -1,7 +1,10 @@
from fastapi import APIRouter
-from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields, execSql
+from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields, \
+ execSql, update_table_and_fields, getTablesByDs
from common.core.deps import SessionDep
-from ..models.datasource import CoreDatasource, CreateDatasource
+from ..models.datasource import CoreDatasource, CreateDatasource, EditObj
+from ..crud.table import get_tables_by_ds_id
+from ..crud.field import get_fields_by_table_id
router = APIRouter(tags=["datasource"], prefix="/datasource")
@@ -36,6 +39,11 @@ async def get_tables(session: SessionDep, id: int):
return getTables(session, id)
+@router.post("/getTablesByConf")
+async def get_tables_by_conf(session: SessionDep, ds: CoreDatasource):
+ return getTablesByDs(session, ds)
+
+
@router.post("/getFields/{id}/{table_name}")
async def get_tables(session: SessionDep, id: int, table_name: str):
return getFields(session, id, table_name)
@@ -44,3 +52,18 @@ async def get_tables(session: SessionDep, id: int, table_name: str):
@router.post("/execSql/{id}/{sql}")
async def exec_sql(session: SessionDep, id: int, sql: str):
return execSql(session, id, sql)
+
+
+@router.get("/tableList/{id}")
+async def table_list(session: SessionDep, id: int):
+ return get_tables_by_ds_id(session, id)
+
+
+@router.get("/fieldList/{id}")
+async def field_list(session: SessionDep, id: int):
+ return get_fields_by_table_id(session, id)
+
+
+@router.post("/editLocalComment")
+async def edit_local(session: SessionDep, data: EditObj):
+ update_table_and_fields(session, data)
diff --git a/backend/apps/datasource/crud/datasource.py b/backend/apps/datasource/crud/datasource.py
index 20f2af62..a79bb93d 100644
--- a/backend/apps/datasource/crud/datasource.py
+++ b/backend/apps/datasource/crud/datasource.py
@@ -1,13 +1,13 @@
from sqlmodel import select
-from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema
+from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema, EditObj
import datetime
from common.core.deps import SessionDep
from apps.db.db import get_session, get_tables, get_fields, exec_sql
from sqlalchemy import text, and_
from common.utils.utils import deepcopy_ignore_extra
from typing import List
-from ..crud.table import delete_table_by_ds_id
-from ..crud.field import delete_field_by_ds_id
+from ..crud.table import delete_table_by_ds_id, update_table
+from ..crud.field import delete_field_by_ds_id, update_field
def get_datasource_list(session: SessionDep) -> CoreDatasource:
@@ -80,6 +80,11 @@ def getTables(session: SessionDep, id: int):
return tables
+def getTablesByDs(session: SessionDep, ds: CoreDatasource):
+ tables = get_tables(ds)
+ return tables
+
+
def getFields(session: SessionDep, id: int, table_name: str):
ds = session.exec(select(CoreDatasource).where(CoreDatasource.id == id)).first()
fields = get_fields(ds, table_name)
@@ -151,3 +156,9 @@ def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, field
if len(id_list) > 0:
session.query(CoreField).filter(and_(CoreField.table_id == table.id, CoreField.id.not_in(id_list))).delete(
synchronize_session=False)
+
+
+def update_table_and_fields(session: SessionDep, data: EditObj):
+ update_table(session, data.table)
+ for field in data.fields:
+ update_field(session, field)
diff --git a/backend/apps/datasource/crud/field.py b/backend/apps/datasource/crud/field.py
index 84c4fafc..d36b58a0 100644
--- a/backend/apps/datasource/crud/field.py
+++ b/backend/apps/datasource/crud/field.py
@@ -1,7 +1,18 @@
from common.core.deps import SessionDep
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema
+from sqlalchemy import and_
def delete_field_by_ds_id(session: SessionDep, id: int):
session.query(CoreField).filter(CoreField.ds_id == id).delete(synchronize_session=False)
session.commit()
+
+
+def get_fields_by_table_id(session: SessionDep, id: int):
+ return session.query(CoreField).filter(CoreField.table_id == id).order_by(
+ CoreField.field_name.asc()).all()
+
+
+def update_field(session: SessionDep, item: CoreField):
+ session.add(item)
+ session.commit()
diff --git a/backend/apps/datasource/crud/table.py b/backend/apps/datasource/crud/table.py
index 7a84a478..23ba567d 100644
--- a/backend/apps/datasource/crud/table.py
+++ b/backend/apps/datasource/crud/table.py
@@ -1,7 +1,18 @@
from common.core.deps import SessionDep
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema
+from sqlalchemy import and_
def delete_table_by_ds_id(session: SessionDep, id: int):
session.query(CoreTable).filter(CoreTable.ds_id == id).delete(synchronize_session=False)
session.commit()
+
+
+def get_tables_by_ds_id(session: SessionDep, id: int):
+ return session.query(CoreTable).filter(CoreTable.ds_id == id).order_by(
+ CoreTable.table_name.asc()).all()
+
+
+def update_table(session: SessionDep, item: CoreTable):
+ session.add(item)
+ session.commit()
diff --git a/backend/apps/datasource/models/datasource.py b/backend/apps/datasource/models/datasource.py
index e8af9f3b..a571a3ec 100644
--- a/backend/apps/datasource/models/datasource.py
+++ b/backend/apps/datasource/models/datasource.py
@@ -20,7 +20,7 @@ class CoreDatasource(SQLModel, table=True):
class CoreTable(SQLModel, table=True):
__tablename__ = "core_table"
id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True))
- ds_id:int = Field(sa_column=Column(BigInteger()))
+ ds_id: int = Field(sa_column=Column(BigInteger()))
checked: bool = Field(default=True)
table_name: str = Field(sa_column=Column(Text))
table_comment: str = Field(sa_column=Column(Text))
@@ -52,6 +52,13 @@ class CreateDatasource(BaseModel):
tables: List[CoreTable] = []
+# edit local saved table and fields
+class EditObj(BaseModel):
+ table: CoreTable = None
+ fields: List[CoreField] = []
+
+
+# datasource config info
class DatasourceConf(BaseModel):
host: str = ''
port: int = 0
diff --git a/frontend/src/api/datasource.ts b/frontend/src/api/datasource.ts
index 1fb27de9..961178cd 100644
--- a/frontend/src/api/datasource.ts
+++ b/frontend/src/api/datasource.ts
@@ -7,6 +7,7 @@ export const datasourceApi = {
update: (data: any) => request.post('/datasource/update', data),
delete: (id: Number) => request.post(`/datasource/delete/${id}`),
getTables: (id: Number) => request.post(`/datasource/getTables/${id}`),
+ getTablesByConf: (data: any) => request.post('/datasource/getTablesByConf', data),
getFields: (id: Number, table_name: string) => request.post(`/datasource/getFields/${id}/${table_name}`),
execSql: (id: Number, sql: string) => request.post(`/datasource/execSql/${id}/${sql}`),
}
\ No newline at end of file
diff --git a/frontend/src/style.less b/frontend/src/style.less
index 2043cc0d..7ac20dd3 100644
--- a/frontend/src/style.less
+++ b/frontend/src/style.less
@@ -50,19 +50,9 @@ body {
min-height: 100vh;
}
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-.card {
- padding: 2em;
-}
-
#app {
width: 100%;
margin: 0;
- text-align: center;
}
@media (prefers-color-scheme: light) {
diff --git a/frontend/src/views/ds/form.vue b/frontend/src/views/ds/form.vue
index eecca175..ccf05074 100644
--- a/frontend/src/views/ds/form.vue
+++ b/frontend/src/views/ds/form.vue
@@ -4,46 +4,58 @@
title="Add Datasource"
width="500"
:destroy-on-close="true"
+ :close-on-click-modal="false"
+ @closed="close"
>
-