1
0
forked from x/icebergs
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-02-05 22:45:51 +08:00
parent 78afcfeb60
commit ce833a87e3
8 changed files with 55 additions and 33 deletions

View File

@ -24,11 +24,14 @@ func init() {
DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { m.PushButton(kit.Dict(ADMIN, "后台")) }}, DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { m.PushButton(kit.Dict(ADMIN, "后台")) }},
DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) { DREAM_ACTION: {Hand: func(m *ice.Message, arg ...string) {
if kit.HasPrefixList(arg, ctx.ACTION, ADMIN) && len(arg) == 2 { if kit.HasPrefixList(arg, ctx.ACTION, ADMIN) && len(arg) == 2 {
link := m.MergePodCmd(m.Option(mdb.NAME), "")
if m.Option(mdb.TYPE) == MASTER { if m.Option(mdb.TYPE) == MASTER {
ctx.ProcessField(m, CHAT_IFRAME, SpideOrigin(m, m.Option(mdb.NAME))+C(m.PrefixKey()), arg...) link = SpideOrigin(m, m.Option(mdb.NAME)) + C(m.PrefixKey())
m.ProcessField(ctx.ACTION, ctx.RUN, CHAT_IFRAME) }
if m.IsMetaKey() {
m.ProcessOpen(link)
} else { } else {
ctx.ProcessField(m, CHAT_IFRAME, m.MergePodCmd(m.Option(mdb.NAME), ""), arg...) ctx.ProcessFloat(m, CHAT_IFRAME, link, arg...)
m.ProcessField(ctx.ACTION, ctx.RUN, CHAT_IFRAME) m.ProcessField(ctx.ACTION, ctx.RUN, CHAT_IFRAME)
} }
} }

View File

@ -428,10 +428,8 @@ func init() {
kit.If(stat[cli.START] == stat[WORKER], func() { delete(stat, cli.START) }) kit.If(stat[cli.START] == stat[WORKER], func() { delete(stat, cli.START) })
m.Sort("type,status,name", []string{aaa.LOGIN, WORKER, SERVER, MASTER}, []string{cli.START, cli.STOP, cli.BEGIN}, ice.STR_R).StatusTimeCount(stat) m.Sort("type,status,name", []string{aaa.LOGIN, WORKER, SERVER, MASTER}, []string{cli.START, cli.STOP, cli.BEGIN}, ice.STR_R).StatusTimeCount(stat)
ctx.DisplayTableCard(m) ctx.DisplayTableCard(m)
if ice.Info.NodeType == WORKER { if ice.Info.NodeType == WORKER || !aaa.IsTechOrRoot(m) || m.IsCliUA() {
return m.Action()
}
if m.IsCliUA() {
return return
} }
kit.If(cli.SystemFind(m, "go"), func() { kit.If(cli.SystemFind(m, "go"), func() {
@ -455,7 +453,7 @@ func DreamAction() ice.Actions {
} }
func DreamProcess(m *ice.Message, args ice.Any, arg ...string) { func DreamProcess(m *ice.Message, args ice.Any, arg ...string) {
if kit.HasPrefixList(arg, ctx.RUN) { if kit.HasPrefixList(arg, ctx.RUN) {
ctx.ProcessField(m, m.PrefixKey(), args, kit.Slice(arg, 1)...) ctx.ProcessFloat(m, m.PrefixKey(), args, kit.Slice(arg, 1)...)
} else if kit.HasPrefixList(arg, ctx.ACTION, m.PrefixKey()) || kit.HasPrefixList(arg, ctx.ACTION, m.CommandKey()) { } else if kit.HasPrefixList(arg, ctx.ACTION, m.PrefixKey()) || kit.HasPrefixList(arg, ctx.ACTION, m.CommandKey()) {
if m.Option(mdb.TYPE) == MASTER && (kit.IsIn(ctx.ShortCmd(m.PrefixKey()), PORTAL, DESKTOP)) { if m.Option(mdb.TYPE) == MASTER && (kit.IsIn(ctx.ShortCmd(m.PrefixKey()), PORTAL, DESKTOP)) {
if ProcessIframe(m, "", SpideOrigin(m, m.Option(mdb.NAME))+C(m.PrefixKey()), arg...); !m.IsMetaKey() { if ProcessIframe(m, "", SpideOrigin(m, m.Option(mdb.NAME))+C(m.PrefixKey()), arg...); !m.IsMetaKey() {

View File

@ -19,13 +19,13 @@ const STORE = "store"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
STORE: {Name: "store refresh", Help: "系统商店", Role: aaa.VOID, Actions: ice.MergeActions(ice.Actions{ STORE: {Name: "store refresh", Help: "系统商店", Role: aaa.VOID, Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(SPIDE, mdb.INPUTS, arg) }},
m.Cmdy(SPIDE, mdb.INPUTS, arg)
// m.Cmds(SPIDE).Table(func(value ice.Maps) { kit.If(value[CLIENT_TYPE] == nfs.REPOS, func() { m.Push("", value, arg[0]) }) })
}},
mdb.CREATE: {Name: "create name* origin* icons", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create name* origin* icons", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SPIDE, mdb.CREATE, m.OptionSimple("name,origin,icons"), mdb.TYPE, nfs.REPOS) m.Cmd(SPIDE, mdb.CREATE, m.OptionSimple("name,origin,icons"), mdb.TYPE, nfs.REPOS)
}}, }},
mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SPIDE, mdb.REMOVE, CLIENT_NAME, m.Option(mdb.NAME))
}},
INSTALL: {Hand: func(m *ice.Message, arg ...string) { INSTALL: {Hand: func(m *ice.Message, arg ...string) {
if !kit.HasPrefixList(arg, ctx.RUN) { if !kit.HasPrefixList(arg, ctx.RUN) {
if strings.HasPrefix(m.Option(mdb.ICON), nfs.REQUIRE) { if strings.HasPrefix(m.Option(mdb.ICON), nfs.REQUIRE) {
@ -43,17 +43,26 @@ func init() {
PORTAL: {Role: aaa.VOID, Hand: func(m *ice.Message, arg ...string) { PORTAL: {Role: aaa.VOID, Hand: func(m *ice.Message, arg ...string) {
ProcessIframe(m, m.Option(mdb.NAME), m.Option(ORIGIN)+S(m.Option(mdb.NAME))+C(PORTAL), arg...) ProcessIframe(m, m.Option(mdb.NAME), m.Option(ORIGIN)+S(m.Option(mdb.NAME))+C(PORTAL), arg...)
}}, }},
}, ctx.ConfAction(CLIENT_TIMEOUT, "3s")), Hand: func(m *ice.Message, arg ...string) { }, ctx.ConfAction(CLIENT_TIMEOUT, "3s"), DREAM), Hand: func(m *ice.Message, arg ...string) {
m.Display("") if kit.HasPrefixList(arg, ctx.ACTION) {
if len(arg) == 0 { m.Cmdy(DREAM, arg)
return
}
if m.Display(""); len(arg) == 0 {
m.Cmd(SPIDE, arg, kit.Dict(ice.MSG_FIELDS, "time,icons,client.type,client.name,client.origin")).Table(func(value ice.Maps) { m.Cmd(SPIDE, arg, kit.Dict(ice.MSG_FIELDS, "time,icons,client.type,client.name,client.origin")).Table(func(value ice.Maps) {
kit.If(value[CLIENT_TYPE] == nfs.REPOS, func() { m.Push(mdb.NAME, value[CLIENT_NAME]).Push(mdb.ICONS, value[mdb.ICONS]) }) kit.If(value[CLIENT_TYPE] == nfs.REPOS, func() { m.Push(mdb.NAME, value[CLIENT_NAME]).Push(mdb.ICONS, value[mdb.ICONS]) })
}) })
if ice.Info.NodeType == WORKER { if ice.Info.NodeType == WORKER || !aaa.IsTechOrRoot(m) {
m.Action()
} else {
m.Action(html.FILTER, mdb.CREATE)
m.PushAction(mdb.REMOVE)
}
} else {
if arg[0] == ice.OPS && ice.Info.NodeType == SERVER {
m.Cmdy(DREAM)
return return
} }
m.Action(html.FILTER, mdb.CREATE)
} else {
defer ToastProcess(m, "查询中,请稍候")("查询成功") defer ToastProcess(m, "查询中,请稍候")("查询成功")
origin := SpideOrigin(m, arg[0]) origin := SpideOrigin(m, arg[0])
kit.If(arg[0] == ice.OPS, func() { origin = tcp.PublishLocalhost(m, origin) }) kit.If(arg[0] == ice.OPS, func() { origin = tcp.PublishLocalhost(m, origin) })
@ -64,10 +73,10 @@ func init() {
} }
m.Push("", value, kit.Split("time,name,icon,repos,binary,module,version")) m.Push("", value, kit.Split("time,name,icon,repos,binary,module,version"))
m.Push(mdb.TEXT, value[nfs.REPOS]).Push(ORIGIN, origin) m.Push(mdb.TEXT, value[nfs.REPOS]).Push(ORIGIN, origin)
if ice.Info.NodeType == WORKER { if _, ok := list[value[mdb.NAME]]; ok || arg[0] == ice.OPS {
m.PushButton(PORTAL)
} else if _, ok := list[value[mdb.NAME]]; ok {
m.PushButton(OPEN, PORTAL) m.PushButton(OPEN, PORTAL)
} else if ice.Info.NodeType == WORKER || !aaa.IsTechOrRoot(m) {
m.PushButton(PORTAL)
} else { } else {
m.PushButton(INSTALL, PORTAL) m.PushButton(INSTALL, PORTAL)
} }

View File

@ -1,13 +1,13 @@
Volcanos(chat.ONIMPORT, { Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { can.ui = can.onappend.layout(can), can.onimport.__project(can, msg) }, _init: function(can, msg) { can.ui = can.onappend.layout(can), can.onimport.__project(can, msg) },
__project: function(can, msg) { var select, current = can.sup.db._zone||can.db.hash[0]||ice.DEV __project: function(can, msg) { var select, current = can.sup.db._zone||can.db.hash[0]||(can.user.info.nodetype == web.WORKER? ice.OPS: ice.DEV)
msg.Table(function(value) { msg.Table(function(value) {
var _target = can.onimport.item(can, value, function(event) { can.isCmdMode()? can.misc.SearchHash(can, value.name): can.sup.db._zone = value.name var _target = can.onimport.item(can, value, function(event) { can.isCmdMode()? can.misc.SearchHash(can, value.name): can.sup.db._zone = value.name
if (can.onmotion.cache(can, function() { return value.name }, can.ui.content, can._status)) { return can.onimport.layout(can) } if (can.onmotion.cache(can, function() { return value.name }, can.ui.content, can._status)) { return can.onimport.layout(can) }
can.run(can.request(event, {_toast: ice.PROCESS}), [value.name], function(msg) { can.run(can.request(event, {_toast: ice.PROCESS}), [value.name], function(msg) {
can.onimport.__content(can, msg), can.onappend._status(can, msg), can.onimport.layout(can) can.onimport.__content(can, msg), can.onappend._status(can, msg), can.onimport.layout(can)
}) })
}, function() {}, can.ui.project); select = (value.name == current? _target: select)||_target }, null, can.ui.project); select = (value.name == current? _target: select)||_target
}), select && select.click(), can.onmotion.orderShow(can, can.ui.project) }), select && select.click(), can.onmotion.orderShow(can, can.ui.project)
can.onappend.style(can, "output card", can.ui.content), can.onmotion.delay(can, function() { can.onimport.layout(can) }) can.onappend.style(can, "output card", can.ui.content), can.onmotion.delay(can, function() { can.onimport.layout(can) })
}, __content: function(can, msg) { can.onimport.card(can, msg) }, }, __content: function(can, msg) { can.onimport.card(can, msg) },

View File

@ -101,8 +101,8 @@ func init() {
}}, }},
aaa.LOGOUT: {Hand: aaa.SessLogout}, aaa.LOGOUT: {Hand: aaa.SessLogout},
cli.QRCODE: {Hand: func(m *ice.Message, arg ...string) { cli.QRCODE: {Hand: func(m *ice.Message, arg ...string) {
m.Push(web.LINK, tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB))) link := tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB))
m.EchoQRCode(tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB))) m.Push(mdb.NAME, link).PushQRCode(mdb.TEXT, link)
}}, }},
mdb.CREATE: {Name: "create type*=plugin,qrcode,oauth name* icons link order space index args", Hand: func(m *ice.Message, arg ...string) { mdb.HashCreate(m, m.OptionSimple()) }}, mdb.CREATE: {Name: "create type*=plugin,qrcode,oauth name* icons link order space index args", Hand: func(m *ice.Message, arg ...string) { mdb.HashCreate(m, m.OptionSimple()) }},
mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) { mdb.HashRemove(m, m.OptionSimple(mdb.NAME)) }}, mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) { mdb.HashRemove(m, m.OptionSimple(mdb.NAME)) }},
@ -122,7 +122,9 @@ func init() {
if ice.Info.NodeType == web.WORKER { if ice.Info.NodeType == web.WORKER {
return return
} }
kit.If(m.Option(ice.MSG_USERPOD), func(p string) { m.Option(ice.MSG_NODETYPE, m.Cmdx(web.SPACE, p, cli.RUNTIME, ice.MSG_NODETYPE)) }) kit.If(m.Option(ice.MSG_USERPOD), func(p string) {
m.Option(ice.MSG_NODETYPE, m.Cmdx(web.SPACE, p, cli.RUNTIME, ice.MSG_NODETYPE))
})
m.Option("language.list", m.Cmd(nfs.DIR, nfs.TemplatePath(m, aaa.LANGUAGE)+nfs.PS, nfs.FILE).Appendv(nfs.FILE)) m.Option("language.list", m.Cmd(nfs.DIR, nfs.TemplatePath(m, aaa.LANGUAGE)+nfs.PS, nfs.FILE).Appendv(nfs.FILE))
m.Option("theme.list", m.Cmd(nfs.DIR, nfs.TemplatePath(m, aaa.THEME)+nfs.PS, nfs.FILE).Appendv(nfs.FILE)) m.Option("theme.list", m.Cmd(nfs.DIR, nfs.TemplatePath(m, aaa.THEME)+nfs.PS, nfs.FILE).Appendv(nfs.FILE))
m.Option(nfs.REPOS, m.Cmdv(web.SPIDE, nfs.REPOS, web.CLIENT_URL)) m.Option(nfs.REPOS, m.Cmdv(web.SPIDE, nfs.REPOS, web.CLIENT_URL))

View File

@ -52,7 +52,7 @@ func _publish_contexts(m *ice.Message, arg ...string) {
m.OptionDefault(web.DOMAIN, host) m.OptionDefault(web.DOMAIN, host)
m.Options(cli.CTX_ENV, kit.Select("", lex.SP+kit.JoinKV(mdb.EQ, lex.SP, cli.CTX_POD, m.Option(ice.MSG_USERPOD)), m.Option(ice.MSG_USERPOD) != "")) m.Options(cli.CTX_ENV, kit.Select("", lex.SP+kit.JoinKV(mdb.EQ, lex.SP, cli.CTX_POD, m.Option(ice.MSG_USERPOD)), m.Option(ice.MSG_USERPOD) != ""))
kit.If(m.Option("ctx_dev_ip"), func(p string) { kit.If(m.Option("ctx_dev_ip"), func(p string) {
m.Option(cli.CTX_ENV, m.Option(cli.CTX_DEV)+" "+"ctx_dev_ip="+tcp.PublishLocalhost(m, p)) m.Option(cli.CTX_ENV, m.Option(cli.CTX_ENV)+" "+"ctx_dev_ip="+tcp.PublishLocalhost(m, p))
}) })
m.Option(ice.TCP_DOMAIN, kit.ParseURL(host).Hostname()) m.Option(ice.TCP_DOMAIN, kit.ParseURL(host).Hostname())
switch k { switch k {

10
info.go
View File

@ -164,18 +164,24 @@ func MergeActions(arg ...Any) Actions {
}) })
for k, v := range cmd.Actions { for k, v := range cmd.Actions {
func(k string) { func(k string) {
if h, ok := list[k]; !ok { h, ok := list[k]
if !ok {
list[k] = &Action{Name: v.Name, Help: v.Help, Icon: v.Icon, Hand: func(m *Message, arg ...string) { m.Cmdy(from, k, arg) }} list[k] = &Action{Name: v.Name, Help: v.Help, Icon: v.Icon, Hand: func(m *Message, arg ...string) { m.Cmdy(from, k, arg) }}
} else if h.Hand == nil { } else if h.Hand == nil {
h.Hand = func(m *Message, arg ...string) { m.Cmdy(from, k, arg) } h.Hand = func(m *Message, arg ...string) { m.Cmdy(from, k, arg) }
} }
if !ok || h.Icon == "" {
kit.Value(_cmd.Meta, kit.Keys(CTX_ICONS, k), v.Icon) kit.Value(_cmd.Meta, kit.Keys(CTX_ICONS, k), v.Icon)
}
if !ok || h.Help == "" {
if help := kit.Split(v.Help, " :"); len(help) > 0 { if help := kit.Split(v.Help, " :"); len(help) > 0 {
if kit.Value(_cmd.Meta, kit.Keys(CTX_TRANS, strings.TrimPrefix(k, "_")), help[0]); len(help) > 1 { if kit.Value(_cmd.Meta, kit.Keys(CTX_TRANS, strings.TrimPrefix(k, "_")), help[0]); len(help) > 1 {
kit.Value(_cmd.Meta, kit.Keys(CTX_TITLE, k), help[1]) kit.Value(_cmd.Meta, kit.Keys(CTX_TITLE, k), help[1])
} }
} }
kit.If(len(v.List) > 0, func() { _cmd.Meta[k] = v.List }) }
kit.If((!ok || len(h.List) == 0) && len(v.List) > 0, func() { _cmd.Meta[k] = v.List })
}(k) }(k)
} }
}) })

View File

@ -138,4 +138,8 @@ func (m *Message) ProcessOpen(url string) *Message {
kit.If(url, func() { m.Process(PROCESS_OPEN, url) }) kit.If(url, func() { m.Process(PROCESS_OPEN, url) })
return m return m
} }
func (m *Message) ProcessOpenAndRefresh(url string) *Message {
kit.If(url, func() { m.Process(PROCESS_OPEN, url, "refresh") })
return m
}
func (m *Message) ProcessClose() *Message { return m.Process(PROCESS_CLOSE) } func (m *Message) ProcessClose() *Message { return m.Process(PROCESS_CLOSE) }