beego golang bootstrap-table做月度考勤(打卡、签到)统计表

2019-05-14 15:07:59 浏览数 (1)

涉及到知识点:

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。

0 人点赞