63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
package api
|
||
|
||
import (
|
||
"database/sql"
|
||
"net/http"
|
||
"sort"
|
||
)
|
||
|
||
// FieldsHandler 返回指定数据源的所有表字段,包含 hidden 默认值(全部 true,可前端精确控制显示/隐藏)
|
||
func FieldsHandler(marketing, ymt *sql.DB) http.Handler {
|
||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
ds := r.URL.Query().Get("datasource")
|
||
db := marketing
|
||
if ds == "ymt" {
|
||
db = ymt
|
||
}
|
||
|
||
hiddenDefaults := getHiddenFieldsFromCode(ds)
|
||
|
||
var tables []string
|
||
if ds == "ymt" {
|
||
tables = []string{"order_info", "order_cash", "order_voucher", "order_digit", "goods_voucher_batch", "goods_voucher_subject_config", "merchant", "activity"}
|
||
} else {
|
||
tables = []string{"order", "order_detail", "order_cash", "order_voucher", "plan", "key_batch", "code_batch", "voucher", "voucher_batch", "merchant_key_send"}
|
||
}
|
||
|
||
out := []map[string]interface{}{}
|
||
for _, tbl := range tables {
|
||
cols := getColumns(db, tbl)
|
||
fields := []map[string]interface{}{}
|
||
for _, c := range cols {
|
||
tCanonical, fCanonical := canonicalField(ds, tbl, c.Name)
|
||
if tCanonical == "" || fCanonical == "" {
|
||
continue
|
||
}
|
||
label := c.Comment
|
||
if label == "" {
|
||
label = fCanonical
|
||
}
|
||
hidden := isFieldHidden(hiddenDefaults, tCanonical, fCanonical)
|
||
fields = append(fields, map[string]interface{}{
|
||
"key": tCanonical + "." + fCanonical,
|
||
"field": fCanonical,
|
||
"label": label,
|
||
"hidden": hidden,
|
||
})
|
||
}
|
||
tDisplay := displayTable(ds, tbl)
|
||
out = append(out, map[string]interface{}{
|
||
"table": tDisplay,
|
||
"label": tableLabel(tDisplay),
|
||
"fields": fields,
|
||
})
|
||
}
|
||
|
||
sort.Slice(out, func(i, j int) bool { return out[i]["table"].(string) < out[j]["table"].(string) })
|
||
ok(w, r, map[string]interface{}{
|
||
"datasource": ds,
|
||
"tables": out,
|
||
})
|
||
})
|
||
}
|