mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-10-14 01:08:36 +00:00
feat✨: add sys_columns.col_width and default_value (PRD 010 F1/F2)
Back the code generator's Vue 3 template migration: col_width lets R2's column-width inference be overridden per field, and default_value lets R1/A6's "unconfigured rows still generate a usable page" guarantee hold for generated forms. Both use a sentinel default (0 / "") rather than NULL so "unconfigured" has exactly one representation - see docs-prd/010-代码生成器前端模板迁移Vue3/数据库变更.md §1.1. The migration and the model change land together: AddColumn reads the column definition off tools.SysColumns's own gorm tag, so splitting them across commits would leave one of them failing to compile.
This commit is contained in:
@@ -45,6 +45,19 @@ type SysColumns struct {
|
||||
CreateBy int `gorm:"column:create_by;size:20;" json:"createBy"`
|
||||
UpdateBy int `gorm:"column:update_By;size:20;" json:"updateBy"`
|
||||
|
||||
// ColWidth and DefaultValue back PRD 010 F1/F2 (代码生成器前端模板迁移 Vue 3).
|
||||
// Both use a sentinel default (0 / "") rather than NULL - see
|
||||
// docs-prd/010-代码生成器前端模板迁移Vue3/数据库变更.md §1.1: a non-pointer
|
||||
// int/string field can never read NULL back out, and NULL would give
|
||||
// "unconfigured" two representations instead of one. Callers test
|
||||
// ColWidth == 0 / DefaultValue == "" to detect "not configured".
|
||||
//
|
||||
// ColWidth deliberately has no gorm size tag: this codebase's "size:N"
|
||||
// convention on numeric fields maps to a narrow SQL integer type (see
|
||||
// column_width_test.go), and col_width needs to hold values up to 800.
|
||||
ColWidth int `gorm:"column:col_width;not null;default:0;comment:table column width in px, 0 = not configured" json:"colWidth"`
|
||||
DefaultValue string `gorm:"column:default_value;size:255;not null;default:'';comment:form field default value, empty = not configured" json:"defaultValue"`
|
||||
|
||||
common.ModelTime
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package version
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/app/other/models/tools"
|
||||
"go-admin/cmd/migrate/migration"
|
||||
common "go-admin/common/models"
|
||||
)
|
||||
|
||||
// Add sys_columns.col_width and sys_columns.default_value for PRD 010 F1/F2
|
||||
// (代码生成器前端模板迁移 Vue 3).
|
||||
//
|
||||
// col_width backs R2's column-width inference fallback and default_value
|
||||
// backs R1/A6's "unconfigured rows still generate a usable page" guarantee -
|
||||
// see docs-prd/010-代码生成器前端模板迁移Vue3/数据库变更.md §1.1 for why both
|
||||
// defaults are sentinels (0 / "") rather than NULL: a non-pointer Go int/
|
||||
// string field can never read NULL back out, and NULL would give
|
||||
// "unconfigured" two representations instead of one.
|
||||
//
|
||||
// Ordered after 1786700003000, so this reads tools.SysColumns (the runtime
|
||||
// model sys_columns's Update/GetPage/GetSysTablesInfo actually query through)
|
||||
// rather than cmd/migrate/migration/models, matching every migration in this
|
||||
// directory since sys_columns was converted - see
|
||||
// 1786700004000_generator_tables_marker.go and schema_coverage_test.go's
|
||||
// TestPostConversionMigrationsAvoidFrozenSeedModels.
|
||||
//
|
||||
// Hard prerequisite: tools.SysColumns must already declare ColWidth and
|
||||
// DefaultValue (with the gorm tags in the doc above) by the time this file
|
||||
// is compiled - AddColumn reads the column definition off the struct's own
|
||||
// tag, not off anything in this file. Landing this migration without that
|
||||
// model change first makes HasColumn/AddColumn silently do nothing (the
|
||||
// field lookup fails and AddColumn returns an error naming the missing
|
||||
// field), which fails loudly rather than silently - see the "no such field"
|
||||
// error - so this is caught at migrate time, not left for a report later.
|
||||
func init() {
|
||||
_, fileName, _, _ := runtime.Caller(0)
|
||||
migration.Migrate.SetVersion(migration.GetFilename(fileName), _1786700010000GenColumnLayoutFields)
|
||||
}
|
||||
|
||||
func _1786700010000GenColumnLayoutFields(db *gorm.DB, version string) error {
|
||||
m := db.Migrator()
|
||||
if !m.HasColumn(&tools.SysColumns{}, "ColWidth") {
|
||||
if err := m.AddColumn(&tools.SysColumns{}, "ColWidth"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if !m.HasColumn(&tools.SysColumns{}, "DefaultValue") {
|
||||
if err := m.AddColumn(&tools.SysColumns{}, "DefaultValue"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return db.Create(&common.Migration{Version: version}).Error
|
||||
}
|
||||
Reference in New Issue
Block a user