Go-Admin 學(xué)習(xí)筆記(四)表單FormPanel下拉框SelectSingle的三級(jí)聯(lián)動(dòng)省市區(qū)

省市區(qū)三級(jí)聯(lián)動(dòng)的應(yīng)用非常廣泛,涉及到用戶檔案、收貨地址什么的都需要用的,Go-Admin通過(guò)Field的FieldOptions、FieldOnChooseAjax、FieldOptionInitFn三個(gè)方法來(lái)完成三級(jí)聯(lián)動(dòng)。

一、準(zhǔn)備基礎(chǔ)數(shù)據(jù)方法[gorm]

//加載省
func GetMercProvOption() []types.FieldOption{
    var results []types.FieldOption
    var list []GopayMercProv

    PayDB.Order("prov_name").Limit(50).Find(&list)

    for _, item := range list {
        results = append(results, types.FieldOption{Text: item.ProvName, Value: item.ProvCode})
    }
    return  results
}

//城市
func GetMercCityOptionByProv(prov string) []selection.Option{
    var results []selection.Option
    var list []GopayMercCity

    PayDB.Where("prov_code=?",prov).Order("city_name").Limit(50).Find(&list)

    for _, item := range list {
        results = append(results, selection.Option{ Text : item.CityName, ID: item.CityCode})
    }
    return  results
}

func GetMercCityFieldOptionByProv(prov ,city string ) []types.FieldOption{
    var results []types.FieldOption
    var list []GopayMercCity

    PayDB.Where("prov_code=?",prov).Order("city_name").Limit(50).Find(&list)

    for _, item := range list {
        results = append(results, types.FieldOption{ Text : item.CityName, Value: item.CityCode , Selected: item.CityCode==city })
    }
    return  results
}

//區(qū)
func GetMercCountyOptionByCity(city string) []selection.Option{
    var results []selection.Option
    var list []GopayMercCounty

    PayDB.Where("city_code=?",city).Order("county_name").Limit(50).Find(&list)

    for _, item := range list {
        results = append(results, selection.Option{ Text : item.CountyName, ID: item.CountyCode})
    }
    return  results
}

func GetMercCountyFieldOptionByCity(city, county string) []types.FieldOption{
    var results []types.FieldOption
    var list []GopayMercCounty

    PayDB.Where("city_code=?",city).Order("county_name").Limit(50).Find(&list)

    for _, item := range list {
        results = append(results, types.FieldOption{ Text : item.CountyName, Value: item.CountyCode, Selected: item.CountyCode == county })
    }
    return  results
}

二、省市區(qū)下拉框

    formList.AddField("歸屬省", "merc_prov", db.Varchar, form.SelectSingle).
        FieldOptions(entitys.GetMercProvOption()).
        FieldOnChooseAjax("merc_city", "/choose/prov", func(ctx *context.Context) (bool, string, interface{}) {
            prov := ctx.FormValue("value")
            return true, "ok", entitys.GetMercCityOptionByProv(prov)
        })

    formList.AddField("歸屬市", "merc_city", db.Varchar, form.SelectSingle).
        FieldOnChooseAjax("merc_county", "/choose/city", func(ctx *context.Context) (bool, string, interface{}) {
            city := ctx.FormValue("value")
            return true, "ok", entitys.GetMercCountyOptionByCity(city)
        }).
        FieldOptionInitFn(func(val types.FieldModel) types.FieldOptions {
            var prov = val.Row["merc_prov"].(string)
        var city = val.Row["merc_city"].(string)
            return entitys.GetMercCityFieldOptionByProv(prov,city)
        })

    formList.AddField("歸屬縣區(qū)", "merc_county", db.Varchar, form.SelectSingle).
        FieldOptionInitFn(func(val types.FieldModel) types.FieldOptions {
            var city = val.Row["merc_city"].(string)
            var county = val.Row["merc_county"].(string)
            return entitys.GetMercCountyFieldOptionByCity(city,county)
        })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容