package model import ( "bytes" "encoding/base64" "encoding/json" "html/template" "time" "esway/internal/sqlType" "github.com/spf13/cast" "github.com/tdewolff/minify/v2" "github.com/tdewolff/minify/v2/html" ) var FuncMap = template.FuncMap{ "time_format": func(mil any, format string) string { return time.UnixMilli(cast.ToInt64(mil)).Format(format) }, } var _ OpLogger = (*OpLogType)(nil) type OpLogType uint64 const ( OpLogTypeLogin OpLogType = iota + 1 OpLogTypeLogout OpLogTypeCreateUser OpLogTypeUpdateUser OpLogTypeDeleteUser // todo: 添加自己的操作日志 分类 ) func (o OpLogType) Value() int64 { return int64(o) } func (o OpLogType) Code() string { switch o { case OpLogTypeLogin: return "login" case OpLogTypeLogout: return "logout" case OpLogTypeCreateUser: return "create_user" case OpLogTypeUpdateUser: return "update_user" case OpLogTypeDeleteUser: return "delete_user" default: return "unknown" } } func (o OpLogType) Label() string { switch o { case OpLogTypeLogin: return "登入" case OpLogTypeLogout: return "登出" case OpLogTypeCreateUser: return "创建用户" case OpLogTypeUpdateUser: return "修改用户" case OpLogTypeDeleteUser: return "删除用户" default: return "未知" } } func (o OpLogType) MarshalJSON() ([]byte, error) { return json.Marshal(map[string]any{ "value": o.Value(), "code": o.Code(), "label": o.Label(), }) } func (o OpLogType) All() []Enum { return []Enum{ OpLogTypeLogin, OpLogTypeLogout, OpLogTypeCreateUser, OpLogTypeUpdateUser, OpLogTypeDeleteUser, } } func _trimHTML(v []byte) string { return base64.StdEncoding.EncodeToString(v) } var _mini = minify.New() func init() { _mini.AddFunc("text/html", html.Minify) } func (o OpLogType) Render(content map[string]any) (string, error) { var ( err error render *template.Template buf bytes.Buffer bs []byte ) if render, err = template.New(o.Code()). Funcs(FuncMap). Parse(o.Template()); err != nil { return "", err } if err = render.Execute(&buf, content); err != nil { return "", err } if bs, err = _mini.Bytes("text/html", buf.Bytes()); err != nil { return "", err } return _trimHTML(bs), nil } const ( oplogTemplateLogin = `