mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-24 09:50:04 +08:00
✨ feat(table-designer): 补全设计表字段类型列表,按数据库方言分组
- 新增 DB_TYPE_OPTIONS 按 MySQL/PostgreSQL/SQL Server/SQLite/Oracle 分组 - MySQL:补充数值(float/double/smallint/mediumint)、字符串(tinytext/mediumtext/longtext)、 二进制(blob/tinyblob/mediumblob/longblob)、其他(enum/set/bit/year) - PostgreSQL:补充 serial/boolean/timestamptz/jsonb/uuid/inet 等 - SQL Server:补充 float/real/money/nvarchar/datetime2/uniqueidentifier 等 - AutoComplete options 从固定 COMMON_TYPES 改为 DB_TYPE_OPTIONS[getDbType()] 动态获取 - refs #281
This commit is contained in:
@@ -48,6 +48,7 @@ interface ForeignKeyFormState {
|
||||
refColumnNames: string[];
|
||||
}
|
||||
|
||||
// 通用兜底类型列表
|
||||
const COMMON_TYPES = [
|
||||
{ value: 'int' },
|
||||
{ value: 'varchar(255)' },
|
||||
@@ -59,6 +60,148 @@ const COMMON_TYPES = [
|
||||
{ value: 'json' },
|
||||
];
|
||||
|
||||
// 按数据库方言分组的完整字段类型列表
|
||||
const DB_TYPE_OPTIONS: Record<string, { value: string }[]> = {
|
||||
mysql: [
|
||||
// 数值
|
||||
{ value: 'tinyint' },
|
||||
{ value: 'tinyint(1)' },
|
||||
{ value: 'smallint' },
|
||||
{ value: 'mediumint' },
|
||||
{ value: 'int' },
|
||||
{ value: 'bigint' },
|
||||
{ value: 'float' },
|
||||
{ value: 'double' },
|
||||
{ value: 'decimal(10,2)' },
|
||||
// 字符串
|
||||
{ value: 'char(50)' },
|
||||
{ value: 'varchar(255)' },
|
||||
{ value: 'tinytext' },
|
||||
{ value: 'text' },
|
||||
{ value: 'mediumtext' },
|
||||
{ value: 'longtext' },
|
||||
// 二进制
|
||||
{ value: 'binary(255)' },
|
||||
{ value: 'varbinary(255)' },
|
||||
{ value: 'tinyblob' },
|
||||
{ value: 'blob' },
|
||||
{ value: 'mediumblob' },
|
||||
{ value: 'longblob' },
|
||||
// 日期时间
|
||||
{ value: 'date' },
|
||||
{ value: 'time' },
|
||||
{ value: 'datetime' },
|
||||
{ value: 'timestamp' },
|
||||
{ value: 'year' },
|
||||
// 其他
|
||||
{ value: 'json' },
|
||||
{ value: 'enum' },
|
||||
{ value: 'set' },
|
||||
{ value: 'bit(1)' },
|
||||
],
|
||||
postgres: [
|
||||
// 数值
|
||||
{ value: 'smallint' },
|
||||
{ value: 'integer' },
|
||||
{ value: 'bigint' },
|
||||
{ value: 'real' },
|
||||
{ value: 'double precision' },
|
||||
{ value: 'numeric(10,2)' },
|
||||
{ value: 'serial' },
|
||||
{ value: 'bigserial' },
|
||||
// 字符串
|
||||
{ value: 'char(50)' },
|
||||
{ value: 'varchar(255)' },
|
||||
{ value: 'text' },
|
||||
// 布尔
|
||||
{ value: 'boolean' },
|
||||
// 日期时间
|
||||
{ value: 'date' },
|
||||
{ value: 'time' },
|
||||
{ value: 'timestamp' },
|
||||
{ value: 'timestamptz' },
|
||||
{ value: 'interval' },
|
||||
// 二进制
|
||||
{ value: 'bytea' },
|
||||
// JSON
|
||||
{ value: 'json' },
|
||||
{ value: 'jsonb' },
|
||||
// 其他
|
||||
{ value: 'uuid' },
|
||||
{ value: 'inet' },
|
||||
{ value: 'cidr' },
|
||||
{ value: 'macaddr' },
|
||||
{ value: 'xml' },
|
||||
{ value: 'int4range' },
|
||||
{ value: 'tsquery' },
|
||||
{ value: 'tsvector' },
|
||||
],
|
||||
sqlserver: [
|
||||
// 数值
|
||||
{ value: 'tinyint' },
|
||||
{ value: 'smallint' },
|
||||
{ value: 'int' },
|
||||
{ value: 'bigint' },
|
||||
{ value: 'float' },
|
||||
{ value: 'real' },
|
||||
{ value: 'decimal(10,2)' },
|
||||
{ value: 'numeric(10,2)' },
|
||||
{ value: 'money' },
|
||||
{ value: 'smallmoney' },
|
||||
// 字符串
|
||||
{ value: 'char(50)' },
|
||||
{ value: 'varchar(255)' },
|
||||
{ value: 'varchar(max)' },
|
||||
{ value: 'nchar(50)' },
|
||||
{ value: 'nvarchar(255)' },
|
||||
{ value: 'nvarchar(max)' },
|
||||
{ value: 'text' },
|
||||
{ value: 'ntext' },
|
||||
// 日期时间
|
||||
{ value: 'date' },
|
||||
{ value: 'time' },
|
||||
{ value: 'datetime' },
|
||||
{ value: 'datetime2' },
|
||||
{ value: 'datetimeoffset' },
|
||||
{ value: 'smalldatetime' },
|
||||
// 二进制
|
||||
{ value: 'binary(255)' },
|
||||
{ value: 'varbinary(255)' },
|
||||
{ value: 'varbinary(max)' },
|
||||
{ value: 'image' },
|
||||
// 其他
|
||||
{ value: 'bit' },
|
||||
{ value: 'uniqueidentifier' },
|
||||
{ value: 'xml' },
|
||||
],
|
||||
sqlite: [
|
||||
{ value: 'INTEGER' },
|
||||
{ value: 'REAL' },
|
||||
{ value: 'TEXT' },
|
||||
{ value: 'BLOB' },
|
||||
{ value: 'NUMERIC' },
|
||||
],
|
||||
oracle: [
|
||||
{ value: 'NUMBER(10)' },
|
||||
{ value: 'NUMBER(10,2)' },
|
||||
{ value: 'FLOAT' },
|
||||
{ value: 'BINARY_FLOAT' },
|
||||
{ value: 'BINARY_DOUBLE' },
|
||||
{ value: 'CHAR(50)' },
|
||||
{ value: 'VARCHAR2(255)' },
|
||||
{ value: 'NVARCHAR2(255)' },
|
||||
{ value: 'CLOB' },
|
||||
{ value: 'NCLOB' },
|
||||
{ value: 'BLOB' },
|
||||
{ value: 'DATE' },
|
||||
{ value: 'TIMESTAMP' },
|
||||
{ value: 'TIMESTAMP WITH TIME ZONE' },
|
||||
{ value: 'RAW(255)' },
|
||||
{ value: 'LONG RAW' },
|
||||
{ value: 'XMLTYPE' },
|
||||
],
|
||||
};
|
||||
|
||||
const COMMON_DEFAULTS = [
|
||||
{ value: 'CURRENT_TIMESTAMP' },
|
||||
{ value: 'NULL' },
|
||||
@@ -410,7 +553,7 @@ const TableDesigner: React.FC<{ tab: TabData }> = ({ tab }) => {
|
||||
key: 'type',
|
||||
width: 150,
|
||||
render: (text: string, record: EditableColumn) => readOnly ? text : (
|
||||
<AutoComplete options={COMMON_TYPES} value={text} onChange={val => handleColumnChange(record._key, 'type', val)} style={{ width: '100%' }} variant="borderless" />
|
||||
<AutoComplete options={DB_TYPE_OPTIONS[getDbType()] || COMMON_TYPES} value={text} onChange={val => handleColumnChange(record._key, 'type', val)} style={{ width: '100%' }} variant="borderless" />
|
||||
)
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user