1
0
forked from x/icebergs

add mall/admin.go

This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-10-26 17:59:12 +08:00
parent 3991619ad0
commit d9a44bedc5
19 changed files with 168 additions and 46 deletions

View File

@ -54,6 +54,10 @@ const (
TOOLS = "tools"
RUN = "run"
SHIP = "ship"
ICONS = ice.CTX_ICONS
TRANS = ice.CTX_TRANS
TITLE = ice.CTX_TITLE
)
const COMMAND = "command"

View File

@ -218,9 +218,7 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message {
m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m))
}
m.Cmdy(SELECT, m.PrefixKey(), m.Option(SUBKEY), HASH, HashShort(m), arg, logs.FileLineMeta(-1))
kit.If(kit.Select(Config(m, SHORT), Config(m, SORT)), func(sort string) {
kit.If(sort != UNIQ, func() { m.Sort(sort) })
})
kit.If(kit.Select(Config(m, SHORT), Config(m, SORT)), func(sort string) { kit.If(sort != UNIQ, func() { m.Sort(sort) }) })
if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() {
return m.Action(CREATE, PRUNES)
}

View File

@ -99,6 +99,8 @@ const (
MD = "md"
PY = "py"
IMAGE = "image"
PNG = "png"
JPG = "jpg"
MP4 = "mp4"

View File

@ -145,6 +145,7 @@ const (
USR_PUBLISH = ice.USR_PUBLISH
USR_ICEBERGS = ice.USR_ICEBERGS
USR_LOCAL_WORK = ice.USR_LOCAL_WORK
USR_LOCAL = ice.USR_LOCAL
SRC_DOCUMENT = ice.SRC_DOCUMENT
SRC_TEMPLATE = ice.SRC_TEMPLATE
REQUIRE = "/require/"

View File

@ -178,11 +178,11 @@ func init() {
}},
mdb.CREATE: {Name: "create name*=hi icon@icon repos binary template", Hand: func(m *ice.Message, arg ...string) {
kit.If(!strings.Contains(m.Option(mdb.NAME), "-") || !strings.HasPrefix(m.Option(mdb.NAME), "20"), func() { m.Option(mdb.NAME, m.Time("20060102-")+m.Option(mdb.NAME)) })
m.OptionDefault(mdb.ICON, nfs.USR_ICONS_ICEBERGS)
m.OptionDefault(nfs.REPOS, mdb.Config(m, nfs.REPOS)+m.Option(mdb.NAME))
m.Option(nfs.REPOS, kit.Select("", kit.Slice(kit.Split(m.Option(nfs.REPOS)), -1), 0))
m.OptionDefault(mdb.ICON, nfs.USR_ICONS_ICEBERGS)
if mdb.HashCreate(m); !m.IsCliUA() {
_dream_start(m, m.OptionDefault(mdb.NAME, path.Base(m.Option(nfs.REPOS))))
_dream_start(m, m.Option(mdb.NAME))
}
}},
nfs.REPOS: {Help: "仓库", Hand: func(m *ice.Message, arg ...string) {

View File

@ -28,6 +28,7 @@ const (
OUTPUT = "output"
LAYOUT = "layout"
RESIZE = "resize"
FILTER = "filter"
COLOR = "color"
BACKGROUND_COLOR = "background-color"

View File

@ -72,13 +72,13 @@ func ProcessIframe(m *ice.Message, name, link string, arg ...string) {
return []string{m.Cmdx(CHAT_IFRAME, mdb.CREATE, mdb.TYPE, LINK, mdb.NAME, name, LINK, link)}
}, arg...)
}
func PushPodCmd(m *ice.Message, cmd string, arg ...string) {
func PushPodCmd(m *ice.Message, cmd string, arg ...string) *ice.Message {
list := []string{}
m.Cmds(SPACE, func(value ice.Maps) {
kit.If(kit.IsIn(value[mdb.TYPE], WORKER), func() { list = append(list, value[mdb.NAME]) })
})
if len(list) == 0 {
return
return m
}
kit.If(m.Length() > 0 && len(m.Appendv(SPACE)) == 0, func() { m.Table(func(value ice.Maps) { m.Push(SPACE, "") }) })
GoToast(m, "", func(toast func(string, int, int)) []string {
@ -92,6 +92,7 @@ func PushPodCmd(m *ice.Message, cmd string, arg ...string) {
})
return nil
})
return m
}
func PushImages(m *ice.Message, name string) {
if kit.ExtIsImage(name) {

View File

@ -127,7 +127,13 @@ func IsNotValidFieldShare(m *ice.Message, msg *ice.Message) bool {
return false
}
func SharePath(m *ice.Message, p string) string {
kit.If(!kit.HasPrefix(p, nfs.PS, ice.HTTP), func() { p = path.Join(SHARE_LOCAL, p) })
kit.If(!kit.HasPrefix(p, nfs.PS, ice.HTTP), func() {
if kit.HasPrefix(p, nfs.SRC, nfs.USR) && !kit.HasPrefix(p, nfs.USR_LOCAL) {
p = kit.MergeURL(path.Join(nfs.REQUIRE, p), ice.POD, m.Option(ice.MSG_USERPOD))
} else {
p = kit.MergeURL(path.Join(SHARE_LOCAL, p), ice.POD, m.Option(ice.MSG_USERPOD))
}
})
return p
}
func ShareLocalFile(m *ice.Message, arg ...string) {

View File

@ -293,3 +293,11 @@ func Space(m *ice.Message, arg ice.Any) []string {
}
return []string{SPACE, kit.Format(arg)}
}
func PodCmd(m *ice.Message, key string, arg ...string) bool {
if pod := m.Option(key); pod != "" {
m.Options(key, "", ice.MSG_USERPOD, pod).Cmdy(SPACE, pod, m.PrefixKey(), arg)
return true
} else {
return false
}
}

View File

@ -91,17 +91,22 @@ func init() {
}
return
}
if mdb.HashSelect(m, arg...); len(arg) > 0 {
text := m.Append(mdb.TEXT)
m.PushQRCode(cli.QRCODE, text)
m.PushScript(text)
}
if len(arg) == 0 {
if mdb.HashSelect(m, arg...); len(arg) == 0 {
defer web.PushPodCmd(m, "", arg...)
if m.IsMobileUA() {
m.Action(mdb.CREATE, web.UPLOAD, "getClipboardData", "getLocation", "scanQRCode")
} else {
m.Action(mdb.CREATE, web.UPLOAD, "getClipboardData", "record1", "record2")
}
} else {
if web.PodCmd(m, web.SPACE, arg...) {
return
} else if m.Length() == 0 {
return
}
text := m.Append(mdb.TEXT)
m.PushQRCode(cli.QRCODE, text)
m.PushScript(text)
}
m.Table(func(value ice.Maps) {
delete(value, ctx.ACTION)

View File

@ -57,7 +57,9 @@ func init() {
mdb.HashSelect(m, kit.Slice(arg, 0, 1)...)
// m.Option(LOCATION, m.Cmdx(web.SERVE, tcp.HOST))
// m.Option(LOCATION, get(m, "location/v1/ip", aaa.IP, m.Option(ice.MSG_USERIP)))
web.PushPodCmd(m, "", arg...)
ctx.DisplayLocal(m.Options(nfs.SCRIPT, kit.MergeURL(mdb.Config(m, nfs.SCRIPT), mdb.KEY, mdb.Config(m, web.TOKEN))), "")
ctx.Toolkit(m, "")
}},
})
}

37
core/mall/admin.go Normal file
View File

@ -0,0 +1,37 @@
package mall
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits"
)
const ADMIN = "admin"
func init() {
Index.MergeCommands(ice.Commands{
ADMIN: {Name: "admin hash auto", Help: "管理", Meta: kit.Dict(
ctx.TRANS, kit.Dict(html.INPUT, kit.Dict(mdb.TYPE, "单位", PRICE, "价格", AMOUNT, "总价")),
), Actions: ice.MergeActions(ice.Actions{
web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) { m.Echo(m.Append(mdb.HASH)) }},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(GOODS, mdb.INPUTS, arg) }},
}, GOODS, ctx.ConfAction(ctx.TOOLS, Prefix(GOODS))), Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(GOODS, arg).PushAction(mdb.MODIFY, mdb.REMOVE)
kit.If(m.IsMobileUA(), func() { m.Action(mdb.CREATE) }, func() { m.Action(mdb.CREATE, "filter:text") })
kit.If(len(arg) > 0, func() {
kit.For(kit.Split(m.Append(nfs.IMAGE)), func(p string) {
m.EchoImages(web.MergeURL2(m, web.SHARE_CACHE+p))
})
})
ctx.DisplayTable(m)
ctx.Toolkit(m, "")
var total float64
m.Table(func(value ice.Maps) { total += kit.Float(value[PRICE]) * kit.Float(value[mdb.COUNT]) })
m.StatusTimeCount(AMOUNT, kit.Format("%0.2f", total))
}},
})
}

View File

@ -4,7 +4,10 @@ import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits"
)
const (
@ -14,24 +17,20 @@ const GOODS = "goods"
func init() {
Index.MergeCommands(ice.Commands{
GOODS: {Name: "goods hash@keyboard place@province date@date name@key count=_number@keyboard auto music", Help: "商品", Actions: ice.MergeActions(ice.Actions{
mdb.MODIFY: {Name: "modify zone type name text price count image=4@img audio video"},
mdb.CREATE: {Name: "modify zone type name text price count image=4@img audio video"},
web.UPLOAD: {Hand: func(m *ice.Message, arg ...string) { web.Upload(m) }},
"copy": {Hand: func(m *ice.Message, arg ...string) {
m.Cmd("", mdb.CREATE, m.OptionSimple("zone,type,name,text,price,count,image"))
}},
}, mdb.HashAction(mdb.FIELD, "time,hash,zone,type,name,text,price,count,image,audio,video")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...); len(arg) == 0 || arg[0] == "" {
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
m.PushAction("copy", mdb.MODIFY, mdb.REMOVE)
ctx.DisplayLocal(m, "")
} else {
// for _, p := range kit.Split(m.Append("image")) {
// m.EchoImages(web.MergeURL2(m, web.SHARE_CACHE+p))
// }
// m.PushAction("play", "stop", "copy", mdb.MODIFY, mdb.REMOVE)
}
GOODS: {Name: "goods list", Icon: "mall.png", Help: "商品", Meta: kit.Dict(
ctx.TRANS, kit.Dict(html.INPUT, kit.Dict(mdb.TYPE, "单位", PRICE, "价格", AMOUNT, "总价")),
), Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create zone* name* text price* count*=1 type*=件,个,份,斤 image*=4@img"},
mdb.MODIFY: {Name: "modify zone* name* text price* count*=1 type*=件,个,份,斤 image*=4@img"},
nfs.IMAGE: {Name: "image image*=4@img", Help: "图片", Hand: func(m *ice.Message, arg ...string) { mdb.HashModify(m, arg) }},
ORDER: {Name: "order count*=1", Help: "选购", Hand: func(m *ice.Message, arg ...string) {}},
}, mdb.ExportHashAction(ctx.TOOLS, Prefix(ORDER), mdb.FIELD, "time,hash,zone,name,text,price,count,type,image")), Hand: func(m *ice.Message, arg ...string) {
kit.If(len(arg) == 0 && m.IsMobileUA(), func() { m.OptionDefault(ice.MSG_FIELDS, "zone,name,price,count,type,text,hash,time,image") })
mdb.HashSelect(m, arg...).PushAction(ORDER).Action("filter:text")
web.PushPodCmd(m, "", arg...)
ctx.DisplayLocal(m, "")
ctx.Toolkit(m, "")
m.Sort("zone,name")
}},
})
}

View File

@ -3,6 +3,7 @@ package mall
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
const MALL = "mall"
@ -10,3 +11,5 @@ const MALL = "mall"
var Index = &ice.Context{Name: MALL, Help: "贸易中心"}
func init() { web.Index.Register(Index, nil, ASSET, SALARY) }
func Prefix(arg ...ice.Any) string { return web.Prefix(MALL, kit.Keys(arg...)) }

18
core/mall/order.go Normal file
View File

@ -0,0 +1,18 @@
package mall
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb"
)
const ORDER = "order"
func init() {
Index.MergeCommands(ice.Commands{
ORDER: {Name: "order hash auto", Help: "订单", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create zone* type name* text price* count* image*=4@img"},
}), Hand: func(m *ice.Message, arg ...string) {
}},
})
}

View File

@ -8,6 +8,7 @@ import (
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits"
)
@ -55,7 +56,15 @@ const PLAN = "plan"
func init() {
Index.MergeCommands(ice.Commands{
PLAN: {Name: "plan scale=month,day,week,month,year,long begin_time@date list prev next", Icon: "Calendar.png", Help: "计划表", Actions: ice.MergeActions(ice.Actions{
PLAN: {Name: "plan scale=month,day,week,month,year,long begin_time@date list insert prev next", Icon: "Calendar.png", Help: "计划表", Meta: kit.Dict(
ctx.TRANS, kit.Dict(html.INPUT, kit.Dict(
"begin_time", "起始", "end_time", "结束",
"level", "优先级", "score", "完成度", "scale", "跨度", "view", "视图",
"day", "日", "week", "周", "month", "月", "year", "年", "long", "代",
"prepare", "准备中", "process", "进行中", "cancel", "已取消", "finish", "已完成",
"once", "一次性", "step", "阶段性",
)),
), Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(TODO, mdb.INPUTS, arg) }},
mdb.PLUGIN: {Name: "plugin extra.index extra.args", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(TASK, mdb.MODIFY, arg) }},
ctx.RUN: {Hand: func(m *ice.Message, arg ...string) {

View File

@ -77,7 +77,7 @@ func init() {
}
kit.If(arg[0] == mdb.ZONE, func() { m.Push(arg[0], kit.Split(nfs.TemplateText(m, mdb.ZONE))) })
}},
mdb.INSERT: {Name: "insert space zone* type=once,step,week name* text begin_time@date end_time@date", Hand: func(m *ice.Message, arg ...string) {
mdb.INSERT: {Name: "insert space zone* type*=once,step,week name* text begin_time*@date end_time@date", Hand: func(m *ice.Message, arg ...string) {
if space, arg := arg[1], arg[2:]; space != "" {
m.Cmdy(web.SPACE, space, TASK, mdb.INSERT, web.SPACE, "", arg)
} else {

View File

@ -20,8 +20,6 @@ body.dark fieldset.web.wiki.portal>div.output>div.header div.story[data-name=nav
body.dark fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item:hover { background-color:var(--plugin-bg-color); }
fieldset.web.wiki.portal.home>div.output>div.layout>div.main p { white-space:pre-wrap; text-align:center; }
fieldset.web.wiki.portal>div.output>div.layout>div.main>* { margin:20px auto; }
// fieldset.web.wiki.portal>div.output>div.layout>div.main h2 { margin-top:40px; }
// fieldset.web.wiki.portal>div.output>div.layout>div.main h3 { margin-top:20px; }
fieldset.web.wiki.portal>div.output>div.layout>div.main ul { margin:20px 40px; }
fieldset.web.wiki.portal>div.output>div.layout>div.main ol { margin:20px 40px; }
fieldset.web.wiki.portal>div.output>div.layout>div.main p code {
@ -32,12 +30,14 @@ fieldset.web.wiki.portal>div.output>div.layout>div.main div.story[data-type=spar
padding:10px; margin:10px auto;
box-shadow:var(--box-shadow);
}
fieldset.web.wiki.portal>div.output>div.layout>div.main div.story[data-type=spark][data-name=shell] kbd:hover {
/* background-color:white; color:black; */
}
fieldset.web.wiki.portal>div.output>div.layout>div.main fieldset.inner.output div.content {
background-color:var(--code-bg-color); color:var(--code-fg-color); padding:10px 0;
--code-comment:silver; --code-keyword:orange; --code-package:silver;
--code-datatype:silver; --code-function:cyan;
--code-constant:silver; --code-string:silver; --code-object:silver;
}
body.cmd.web.wiki.portal { background-color:rgb(22 31 49); }
body.mobile fieldset.web.wiki.portal>div.output>div.layout { display:block; }
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.nav { padding:10px; height:unset; }
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main { padding:10px; height:unset; min-width:unset; }
body.mobile fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item { padding:10px; }

View File

@ -2,6 +2,7 @@ package wiki
import (
"net/http"
"strings"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
@ -36,17 +37,44 @@ func init() {
WordAlias(m, SEQUENCE, CHART, SEQUENCE)
}},
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_DEEP, ice.TRUE)
_wiki_list(m, nfs.SRC)
_wiki_list(m, nfs.USR_ICEBERGS)
m.Cut("path,size,time")
if len(arg) > 0 {
m.OptionFields("path,size,time")
mdb.HashSelect(m)
}
msg := m.Spawn(kit.Dict(nfs.DIR_DEEP, ice.TRUE))
_wiki_list(msg, nfs.SRC)
_wiki_list(msg, nfs.USR_ICEBERGS)
msg.Table(func(value ice.Maps) {
if !kit.HasPrefix(value[nfs.PATH], nfs.SRC_TEMPLATE, nfs.SRC_DOCUMENT) {
m.Push("", value, kit.Split("path,size,time"))
}
})
web.PushPodCmd(m.Spawn(), "").Table(func(value ice.Maps) {
if !kit.HasPrefix(value[nfs.PATH], nfs.SRC_TEMPLATE, nfs.SRC_DOCUMENT) {
value[nfs.PATH] = value[web.SPACE] + nfs.DF + value[nfs.PATH]
m.Push("", value, kit.Split("path,size,time"))
}
})
}},
code.COMPLETE: {Hand: func(m *ice.Message, arg ...string) {
kit.If(kit.IsIn(kit.Split(m.Option(mdb.TEXT))[0], IMAGE, VIDEO, AUDIO), func() { m.Cmdy(FEEL).CutTo(nfs.PATH, mdb.NAME) })
}},
}, aaa.RoleAction(), WikiAction("", nfs.SHY)), Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_DEEP, ice.TRUE)
kit.If(len(arg) == 0, func() { arg = append(arg, nfs.SRC) })
}, aaa.RoleAction(), WikiAction("", nfs.SHY), mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path")), Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 0 {
mdb.HashCreate(m.Spawn(), nfs.PATH, arg[0])
}
if len(arg) > 0 && strings.Contains(arg[0], nfs.DF) {
ls := kit.Split(arg[0], nfs.DF)
arg[0] = ls[1]
defer web.ToastProcess(m)()
defer m.StatusTime(web.SPACE, m.Option(web.SPACE, ls[0]))
}
if len(arg) == 0 {
m.Option(nfs.DIR_DEEP, ice.TRUE)
arg = append(arg, nfs.SRC)
} else if web.PodCmd(m, web.SPACE, arg...) {
return
}
kit.If(!_wiki_list(m, arg...), func() { _word_show(m, arg[0]) })
}},
})