From bc167dca1cce2b3fa643fb9758a52e9cdb9456b5 Mon Sep 17 00:00:00 2001 From: sealday Date: Thu, 18 Apr 2024 03:07:56 +0800 Subject: [PATCH] fix: createAt field error --- .../src/server/sqls/view_load_function.sql | 16 ++++++++++++++ .../plugin-data-visualization/package.json | 3 ++- .../src/server/actions/formatter.ts | 22 +++++++++++-------- pnpm-lock.yaml | 3 +++ 4 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 packages/plugins/@hera/plugin-core/src/server/sqls/view_load_function.sql diff --git a/packages/plugins/@hera/plugin-core/src/server/sqls/view_load_function.sql b/packages/plugins/@hera/plugin-core/src/server/sqls/view_load_function.sql new file mode 100644 index 000000000..313631ea5 --- /dev/null +++ b/packages/plugins/@hera/plugin-core/src/server/sqls/view_load_function.sql @@ -0,0 +1,16 @@ +CREATE +OR REPLACE FUNCTION format_timestamp_with_timezone ( + date_val TIMESTAMP WITH TIME ZONE, + timezone_val TEXT, + format_val TEXT +) RETURNS TEXT AS $$ +DECLARE + formatted_text text; +BEGIN + -- 使用 to_char 函数进行格式化 + SELECT to_char(date_val AT TIME ZONE timezone_val, format_val) INTO formatted_text; + + -- 返回格式化后的字符串 + RETURN formatted_text; +END; +$$ LANGUAGE plpgsql; diff --git a/packages/plugins/@nocobase/plugin-data-visualization/package.json b/packages/plugins/@nocobase/plugin-data-visualization/package.json index cf24f308b..b57059948 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/package.json +++ b/packages/plugins/@nocobase/plugin-data-visualization/package.json @@ -23,7 +23,8 @@ "lodash": "^4.17.21", "react": "^18.2.0", "react-error-boundary": "^4.0.10", - "react-i18next": "^11.15.1" + "react-i18next": "^11.15.1", + "sequelize": "^6.26.0" }, "peerDependencies": { "@nocobase/actions": "workspace:*", diff --git a/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/formatter.ts b/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/formatter.ts index db279d599..7ed68de45 100644 --- a/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/formatter.ts +++ b/packages/plugins/@nocobase/plugin-data-visualization/src/server/actions/formatter.ts @@ -1,4 +1,13 @@ -export const dateFormatFn = (sequelize: any, dialect: string, field: string, format: string, timezone: string) => { +import { Sequelize } from 'sequelize'; + +export const dateFormatFn = ( + sequelize: Sequelize, + dialect: string, + field: string, + format: string, + timezone: string, +) => { + const reversedTimezone = timezone[0] === '+' ? '-' + timezone.slice(1) : '+' + timezone.slice(1); switch (dialect) { case 'sqlite': format = format @@ -21,18 +30,13 @@ export const dateFormatFn = (sequelize: any, dialect: string, field: string, for return sequelize.fn('date_format', sequelize.col(field), format); case 'postgres': format = format.replace(/hh/g, 'HH24').replace(/mm/g, 'MI').replace(/ss/g, 'SS'); - // return sequelize.fn('to_char', sequelize.col(field), format); - return sequelize.fn( - 'to_char', - sequelize.literal(`(${field} AT TIME ZONE 'UTC') AT TIME ZONE '${timezone}'`), - format, - ); + return sequelize.fn('format_timestamp_with_timezone', sequelize.col(field), reversedTimezone, format); default: return sequelize.col(field); } }; -export const formatFn = (sequelize: any, dialect: string, field: string, format: string) => { +export const formatFn = (sequelize: Sequelize, dialect: string, field: string, format: string) => { switch (dialect) { case 'sqlite': case 'postgres': @@ -42,7 +46,7 @@ export const formatFn = (sequelize: any, dialect: string, field: string, format: } }; -export const formatter = (sequelize: any, type: string, field: string, format: string, timezone: string) => { +export const formatter = (sequelize: Sequelize, type: string, field: string, format: string, timezone: string) => { const dialect = sequelize.getDialect(); switch (type) { case 'date': diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df80d93cf..e3f86f2a9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2441,6 +2441,9 @@ importers: react-i18next: specifier: ^11.15.1 version: 11.18.6(i18next@22.5.1)(react-dom@18.2.0)(react@18.2.0) + sequelize: + specifier: ^6.26.0 + version: 6.35.2 packages/plugins/@nocobase/plugin-disable-pm-add: dependencies: