diff --git a/backend/apps/chat/curd/chat.py b/backend/apps/chat/curd/chat.py
index 8338cf2b..2d573070 100644
--- a/backend/apps/chat/curd/chat.py
+++ b/backend/apps/chat/curd/chat.py
@@ -60,7 +60,7 @@ def get_chat_predict_data(session: SessionDep, chart_record_id: int):
res = session.query(ChatRecord).options(load_only(ChatRecord.predict_data)).get(chart_record_id)
if res:
try:
- return orjson.loads(res.data)
+ return orjson.loads(res.predict_data)
except Exception:
pass
return ''
diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py
index 7642c221..99adf2a1 100644
--- a/backend/apps/datasource/api/datasource.py
+++ b/backend/apps/datasource/api/datasource.py
@@ -18,12 +18,14 @@ from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, Core
router = APIRouter(tags=["datasource"], prefix="/datasource")
path = "/opt/sqlbot/data/excel"
+
@router.get("/ws/{oid}", include_in_schema=False)
async def query_by_oid(session: SessionDep, user: CurrentUser, oid: int) -> List[CoreDatasource]:
if not user.isAdmin:
raise Exception("no permission to execute")
return get_datasource_list(session=session, user=user, oid=oid)
+
@router.get("/list")
async def datasource_list(session: SessionDep, user: CurrentUser):
return get_datasource_list(session=session, user=user)
@@ -134,32 +136,11 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
with open(save_path, "wb") as f:
f.write(await file.read())
- conn = get_data_engine()
sheets = []
- if filename.endswith(".csv"):
- df = pd.read_csv(save_path)
- tableName = f"sheet1_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
- sheets.append({"tableName": tableName, "tableComment": ""})
- column_len = len(df.dtypes)
- fields = []
- for i in range(column_len):
- # build fields
- fields.append({"name": df.columns[i], "type": str(df.dtypes[i]), "relType": ""})
- # create table
- create_table(conn, tableName, fields)
-
- data = [
- {df.columns[i]: None if pd.isna(row[i]) else (int(row[i]) if "int" in str(df.dtypes[i]) else row[i])
- for i in range(len(row))}
- for row in df.values
- ]
- # insert data
- insert_data(conn, tableName, fields, data)
- else:
- df_sheets = pd.read_excel(save_path, sheet_name=None)
- # build columns and data to insert db
- for sheet_name, df in df_sheets.items():
- tableName = f"{sheet_name}_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
+ with get_data_engine() as conn:
+ if filename.endswith(".csv"):
+ df = pd.read_csv(save_path)
+ tableName = f"sheet1_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
sheets.append({"tableName": tableName, "tableComment": ""})
column_len = len(df.dtypes)
fields = []
@@ -176,7 +157,27 @@ async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
]
# insert data
insert_data(conn, tableName, fields, data)
- conn.close()
+ else:
+ df_sheets = pd.read_excel(save_path, sheet_name=None)
+ # build columns and data to insert db
+ for sheet_name, df in df_sheets.items():
+ tableName = f"{sheet_name}_{hashlib.sha256(uuid.uuid4().bytes).hexdigest()[:10]}"
+ sheets.append({"tableName": tableName, "tableComment": ""})
+ column_len = len(df.dtypes)
+ fields = []
+ for i in range(column_len):
+ # build fields
+ fields.append({"name": df.columns[i], "type": str(df.dtypes[i]), "relType": ""})
+ # create table
+ create_table(conn, tableName, fields)
+
+ data = [
+ {df.columns[i]: None if pd.isna(row[i]) else (int(row[i]) if "int" in str(df.dtypes[i]) else row[i])
+ for i in range(len(row))}
+ for row in df.values
+ ]
+ # insert data
+ insert_data(conn, tableName, fields, data)
os.remove(save_path)
return {"filename": filename, "sheets": sheets}
diff --git a/backend/apps/system/api/user.py b/backend/apps/system/api/user.py
index 9d9644cd..825679cf 100644
--- a/backend/apps/system/api/user.py
+++ b/backend/apps/system/api/user.py
@@ -153,7 +153,7 @@ async def update(session: SessionDep, editor: UserEditor, trans: Trans):
raise Exception(f"User with id [{editor.id}] not found!")
if editor.account != user_model.account:
raise Exception(f"account cannot be changed!")
- if editor.email != user_model.email and check_email_exists(session=session, account=editor.email):
+ if editor.email != user_model.email and check_email_exists(session=session, email=editor.email):
raise Exception(trans('i18n_exist', msg = f"{trans('i18n_user.email')} [{editor.email}]"))
if not check_email_format(editor.email):
raise Exception(trans('i18n_format_invalid', key = f"{trans('i18n_user.email')} [{editor.email}]"))
diff --git a/backend/template.yaml b/backend/template.yaml
index bc0e1fb4..a88989f7 100644
--- a/backend/template.yaml
+++ b/backend/template.yaml
@@ -138,7 +138,7 @@ template:
predict:
system: |
### 说明:
- 你是一个数据分析师,你的任务是根据给定的数据进行数据预测,我将以json格式给你一组数据,你帮我预测之后的数据(一段可以展示趋势的数据,至少2个周期),用json格式返回,返回的格式需要与传入的数据格式保持一致。
+ 你是一个数据分析师,你的任务是根据给定的数据进行数据预测,我将以json格式给你一组数据,你帮我预测之后的数据(一段可以展示趋势的数据,至少2个周期),用json数组的格式返回,返回的格式需要与传入的数据格式保持一致。
```json
无法预测或者不支持预测的数据请直接返回(不需要返回JSON格式):"抱歉,该数据无法进行预测。(有原因则返回无法预测的原因)"
diff --git a/frontend/src/components/layout/PwdForm.vue b/frontend/src/components/layout/PwdForm.vue
index 4d46f7b8..465a8138 100644
--- a/frontend/src/components/layout/PwdForm.vue
+++ b/frontend/src/components/layout/PwdForm.vue
@@ -85,6 +85,7 @@ defineExpose({
v-model="pwdForm.pwd"
:placeholder="t('common.please_input', { msg: t('user.upgrade_pwd.old_pwd') })"
type="password"
+ clearable
show-password
/>
@@ -94,6 +95,7 @@ defineExpose({
:placeholder="t('common.please_input', { msg: t('user.upgrade_pwd.new_pwd') })"
type="password"
show-password
+ clearable
/>
@@ -102,6 +104,7 @@ defineExpose({
:placeholder="t('common.please_input', { msg: t('user.upgrade_pwd.confirm_pwd') })"
type="password"
show-password
+ clearable
/>
diff --git a/frontend/src/views/chat/ChatList.vue b/frontend/src/views/chat/ChatList.vue
index a3b4e732..d81353b2 100644
--- a/frontend/src/views/chat/ChatList.vue
+++ b/frontend/src/views/chat/ChatList.vue
@@ -264,6 +264,7 @@ const handleConfirmPassword = () => {
:placeholder="
$t('datasource.please_enter') + $t('common.empty') + $t('qa.conversation_title')
"
+ clearable
autocomplete="off"
/>
diff --git a/frontend/src/views/chat/component/ChartComponent.vue b/frontend/src/views/chat/component/ChartComponent.vue
index 706692c3..cdca076c 100644
--- a/frontend/src/views/chat/component/ChartComponent.vue
+++ b/frontend/src/views/chat/component/ChartComponent.vue
@@ -48,11 +48,11 @@ let chartInstance: BaseChart | undefined
function renderChart() {
chartInstance = getChartInstance(params.type, chartId.value)
- console.log(chartInstance)
if (chartInstance) {
chartInstance.init(axis.value, params.data)
chartInstance.render()
}
+ console.debug(chartInstance)
}
function destroyChart() {
diff --git a/frontend/src/views/chat/index.vue b/frontend/src/views/chat/index.vue
index 18ca1879..ca5a773f 100644
--- a/frontend/src/views/chat/index.vue
+++ b/frontend/src/views/chat/index.vue
@@ -290,6 +290,7 @@
ref="inputRef"
v-model="inputMessage"
:disabled="isTyping"
+ clearable
class="input-area"
type="textarea"
:rows="1"
@@ -590,7 +591,7 @@ function getChatPredictData(recordId?: number) {
chatApi.get_chart_predict_data(recordId).then((response) => {
currentChat.value.records.forEach((record) => {
if (record.id === recordId) {
- record.predict_data = response.data ?? []
+ record.predict_data = response ?? []
}
})
})
diff --git a/frontend/src/views/dashboard/common/ResourceGroupOpt.vue b/frontend/src/views/dashboard/common/ResourceGroupOpt.vue
index d71353c7..f552b15e 100644
--- a/frontend/src/views/dashboard/common/ResourceGroupOpt.vue
+++ b/frontend/src/views/dashboard/common/ResourceGroupOpt.vue
@@ -185,6 +185,7 @@ defineExpose({
diff --git a/frontend/src/views/dashboard/components/sq-tab/index.vue b/frontend/src/views/dashboard/components/sq-tab/index.vue
index 652026b1..69cc8847 100644
--- a/frontend/src/views/dashboard/components/sq-tab/index.vue
+++ b/frontend/src/views/dashboard/components/sq-tab/index.vue
@@ -264,7 +264,12 @@ defineExpose({
:close-on-click-modal="false"
center
>
-
+