涉及到知识点:
1.bootstrap table动态表头
每个月的天数不一样,所以要根据服务端的json数据,动态改变表头。
https://cloud.tencent.com/developer/article/1425263
2.golang动态结构体字段/用map
因为golang无法构建动态的结构体字段多少,所以才用mapintstring
比如某个用户某月1日已经签到:map1="1",2日没签到则为map1=""
3.golang求出每月天数
代码语言:javascript复制 //当月天数
const base_format = "2006-01-02"
year := c.Input().Get("year")
month := c.Input().Get("month")
if len(month) == 1 {
month = "0" month
}
SelectMonth1, err := time.Parse(base_format, year "-" month "-01")//每月的第一天
if err != nil {
beego.Error(err)
}
SelectMonth2 := SelectMonth1.AddDate(0, 1, -1)//每月的最后一天,其实就是这个月加上1个月然后减1天,很巧妙
//建立一个动态月日数组
days := SelectMonth2.Sub(SelectMonth1) / 24 //这个月天数,其实应该是下个月第一天减这个月第一天。减出来的其实是duration类型,而且是小时单位,必须除以24,单位还是小时
dayss := days.Hours()//小时转为float64
daysss := strconv.FormatFloat(dayss, 'f', -1, 64) //float64转string
dayssss, err := strconv.Atoi(daysss) //string转int
// beego.Info(reflect.TypeOf(dayss)) //float64
beego.Info(dayssss)
4.给map赋值
定义一个map数组,一个map,记得给map0=username,第一列作为用户名的处理
代码语言:javascript复制s := []map[int]interface{}{}
var checkmap = make(map[int]interface{}, dayssss 2)
//给checkmap 赋值
//排序
//然后追加给数组
s = append(s, checkmap2)
//转成json
b, err := json.Marshal(s)
5.map排序
不写了。
6.前端bootstrap table处理第一列用户名
在前面第1点基础上加个判断
代码语言:javascript复制 var columnsArray = [];
columnsArray.push({field: "state", checkbox: true});
for (var i = 0; i < (Object.keys(json[0])).length; i ) {//Object.keys(obj) 获取key名称
var property = (Object.keys(json[0]))[i];//id username
if (property==0) {
columnsArray.push({
"title": "name",
"field": property,
"align" : 'center',
"valign" : 'middle',
switchable: true,
});
}else{
columnsArray.push({
"title": property,
"field": property,
"align" : 'center',
"valign" : 'middle',
switchable: true,
});
}
}
就是这么个样子了:name列应该用用户名表示。
对应小程序打卡记录:用户9
我的git上有源码,engineercms和对应的小程序端。欢迎star。