package gonganxitong import ( "path" "strings" "shylinux.com/x/ice" "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/core/code" kit "shylinux.com/x/toolkits" "shylinux.com/x/community/src/gonganxitong/model" ) type service struct { Table order string `data:"102"` update string `name:"update index name icon"` autogen string `name:"autogen name* help* class* table*" icon:"bi bi-plus-square-dotted"` oauth string `name:"oauth" icon:"bi bi-shield-fill-check"` open string `name:"open" role:"void"` conf string `name:"conf" role:"void"` } func (s service) Update(m *ice.Message, arg ...string) { uid := kit.Hashs(ice.Info.Hostname, ice.Info.Pwd, m.Option(ctx.INDEX)) if s.Table.Select(m.Spawn(), model.UID, uid).Length() == 0 { s.Table.Create(m, kit.Simple(model.UID, uid, m.OptionSimple(mdb.ICON, mdb.NAME, ctx.INDEX), nfs.PATHNAME, ice.Info.Pwd, tcp.HOSTNAME, ice.Info.Hostname)...) m.Cmd(s.PrefixPortal(m)).Table(func(value ice.Maps) { m.Cmd(s.PrefixPortal(m), mdb.MODIFY, value[ctx.INDEX], mdb.ENABLE, ice.TRUE) }) } s.Table.Update(m, kit.Dict(arg, m.OptionSimple(mdb.NAME, mdb.ICON), nfs.MODULE, ice.Info.Make.Module, nfs.VERSION, ice.Info.Make.Versions(), tcp.NODENAME, ice.Info.NodeName, tcp.NODETYPE, ice.Info.NodeType, web.DOMAIN, ice.Info.Make.Domain, web.PORTAL, ctx.GetCmdFile(m.Message, m.Prefix(web.PORTAL)), ), model.UID, uid) m.Cmd(s.PrefixPortal(m), "updateCommand", uid) } func (s service) Autogen(m *ice.Message, arg ...string) { m.Option("CLASS", strings.ToUpper(m.Option(mdb.CLASS))) m.Option("Class", kit.Capital(m.Option(mdb.CLASS))) m.Option("class", kit.LowerCapital(m.Option(mdb.CLASS))) m.Option("TABLE", strings.ToUpper(m.Option(mdb.TABLE))) m.Option("Table", kit.Capital(m.Option(mdb.TABLE))) m.Option("table", kit.LowerCapital(m.Option(mdb.TABLE))) code.AutogenImport(m.Message, m.Option(mdb.NAME)) m.Option(nfs.MODULE, path.Join(code.AutogenMod(m.Message), nfs.SRC, m.Option(mdb.NAME))) p, from := path.Join(nfs.SRC, m.Option(mdb.NAME)), "template/" msg := m.Cmd("web.team.gonganxitong.service") m.Cmd(nfs.DEFS, path.Join(p, "model/model.go"), msg.Template(from+"model/model.go")) m.Cmd(nfs.DEFS, path.Join(p, "common.go"), msg.Template(from+"common.go")) m.Cmd(nfs.DEFS, path.Join(p, "portal.go"), msg.Template(from+"portal.go")) m.Cmd(nfs.DEFS, path.Join(p, "portal.json"), msg.Template(from+"portal.json")) m.Cmd(nfs.DEFS, path.Join(p, "user"+m.Option("Class")+".go"), msg.Template(from+"userClass.go")) m.Cmd(nfs.DEFS, path.Join(p, m.Option("class")+".go"), msg.Template(from+"class.go")) kit.For(kit.Split(m.Option(mdb.TABLE)), func(table string) { msg.Option(mdb.TABLE, kit.LowerCapital(table)) m.Cmd(nfs.DEFS, path.Join(p, m.Option(mdb.TABLE)+".go"), msg.Template(from+"homework.go")) m.Cmd(nfs.DEFS, path.Join(p, m.Option(mdb.TABLE)+".js"), msg.Template(from+"homework.js")) }) } func (s service) Compile(m *ice.Message, arg ...string) { m.Cmdy(code.VIMER, code.COMPILE) } func (s service) Oauth(m *ice.Message, arg ...string) { defer m.ToastProcess()() m.Options(m.Cmd(web.CHAT_WX_ACCESS).AppendSimple()) m.Option("user_cmd", kit.JoinWord(m.Prefix(aaa.USER), mdb.CREATE)) m.Option("sess_cmd", kit.JoinWord(m.Prefix(aaa.SESS), mdb.CREATE)) m.Cmd(web.CHAT_WX_ACCESS, web.OAUTH) m.Cmd(web.SPACE, ice.OPS, ctx.CONFIG, web.CHAT_WX_AGENT, web.SPACE, m.Option(ice.MSG_USERPOD)) m.ProcessHold() } func (s service) List(m *ice.Message, arg ...string) { if len(arg) == 2 { s.Table.SelectDetail(m, model.UID, arg[1]) } else { s.Orders(m, s.Desc(model.UPDATED_AT)).Select(m) } list := m.CmdMap(web.SPACE, ice.OPS, web.SPACE, mdb.NAME) m.Table(func(value ice.Maps) { if _, ok := list[value[tcp.NODENAME]]; ok && value[ctx.INDEX] != "" { if m.Cmd(web.SPACE, ice.OPS, web.SPACE, value[tcp.NODENAME], value[ctx.INDEX], kit.Dict(mdb.VIEW, mdb.TABLE)).Length() > 0 { m.Push(mdb.STATUS, web.ONLINE) return } } m.Push(mdb.STATUS, "") }) if m.IsTech() { m.PushAction(s.Open, s.Conf, s.Project).Action(s.Autogen, s.Compile, s.Oauth) } else { m.PushAction(s.Open).Action() } m.Sort("status,updated_at", []string{web.ONLINE}, ice.STR_R).Display("") m.RenameAppend("nodetype", model.SERVICE_TYPE, mdb.STATUS, model.SERVICE_STATUS) } func (s service) Open(m *ice.Message, arg ...string) { m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(m.Option(ctx.INDEX))) } func (s service) Conf(m *ice.Message, arg ...string) { m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(m.Option(ctx.INDEX)) + "?view=table") } func (s service) Project(m *ice.Message, arg ...string) { m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(web.CODE_VIMER) + "?path=src/&file=" + strings.Split(kit.Select("", strings.Split(m.Option(web.PORTAL), "/src/"), 1), "?")[0]) } func init() { ice.TeamCtxCmd(service{}) }