Overview • Re-designed `MissingModelsModal` to align with `ModelTestModal` and deliver a cleaner, paginated experience. • Improved mobile responsiveness for action buttons in `ModelsActions`. Details 1. MissingModelsModal.jsx • Switched from `List` to `Table` for a more structured view. • Added search bar with live keyword filtering and clear icon. • Implemented pagination via `MODEL_TABLE_PAGE_SIZE`; auto-resets on search. • Dynamic rendering: when no data, show unified Empty state without column header. • Enhanced header layout with total-count subtitle and modal corner rounding. • Removed unused `Typography.Text` import. 2. ModelsActions.jsx • Set “Delete Selected Models” and “Missing Models” buttons to `flex-1 md:flex-initial`, placing them on the same row as “Add Model” on small screens. Result The “Missing Models” workflow now offers quicker discovery, a familiar table interface, and full mobile friendliness—without altering API behavior.
31 lines
853 B
Go
31 lines
853 B
Go
package model
|
|
|
|
// GetMissingModels returns model names that are referenced in the system
|
|
func GetMissingModels() ([]string, error) {
|
|
// 1. 获取所有已启用模型(去重)
|
|
models := GetEnabledModels()
|
|
if len(models) == 0 {
|
|
return []string{}, nil
|
|
}
|
|
|
|
// 2. 查询已有的元数据模型名
|
|
var existing []string
|
|
if err := DB.Model(&Model{}).Where("model_name IN ?", models).Pluck("model_name", &existing).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
existingSet := make(map[string]struct{}, len(existing))
|
|
for _, e := range existing {
|
|
existingSet[e] = struct{}{}
|
|
}
|
|
|
|
// 3. 收集缺失模型
|
|
var missing []string
|
|
for _, name := range models {
|
|
if _, ok := existingSet[name]; !ok {
|
|
missing = append(missing, name)
|
|
}
|
|
}
|
|
return missing, nil
|
|
}
|