1
0
forked from x/icebergs
This commit is contained in:
shaoying 2020-10-16 21:25:59 +08:00
parent bfbf6d9a2d
commit 9dc89e50c5
26 changed files with 220 additions and 363 deletions

View File

@ -23,6 +23,9 @@ func _hash_fields(m *ice.Message) []string {
return kit.Split(kit.Select("time,hash,type,name,text", strings.Join(kit.Simple(m.Optionv(FIELDS)), ","))) return kit.Split(kit.Select("time,hash,type,name,text", strings.Join(kit.Simple(m.Optionv(FIELDS)), ",")))
} }
func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) { func _hash_insert(m *ice.Message, prefix, chain string, arg ...string) {
if m.Option(ice.MSG_DOMAIN) != "" {
m.Conf(prefix, kit.Keys(chain, kit.MDB_META, kit.MDB_SHORT), m.Conf(prefix, kit.Keys(kit.MDB_META, kit.MDB_SHORT)))
}
m.Log_INSERT(kit.MDB_KEY, path.Join(prefix, chain), arg[0], arg[1]) m.Log_INSERT(kit.MDB_KEY, path.Join(prefix, chain), arg[0], arg[1])
m.Echo(m.Rich(prefix, chain, kit.Data(arg))) m.Echo(m.Rich(prefix, chain, kit.Data(arg)))
} }
@ -38,9 +41,7 @@ func _hash_select(m *ice.Message, prefix, chain, field, value string) {
} }
fields := _hash_fields(m) fields := _hash_fields(m)
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) { m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{})
}
if m.Option(FIELDS) == DETAIL { if m.Option(FIELDS) == DETAIL {
m.Push(DETAIL, val) m.Push(DETAIL, val)
} else { } else {
@ -53,9 +54,7 @@ func _hash_select(m *ice.Message, prefix, chain, field, value string) {
} }
func _hash_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) { func _hash_modify(m *ice.Message, prefix, chain string, field, value string, arg ...string) {
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) { m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{})
}
for i := 0; i < len(arg)-1; i += 2 { for i := 0; i < len(arg)-1; i += 2 {
if arg[i] == field { if arg[i] == field {
continue continue
@ -122,9 +121,7 @@ func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) {
func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) { func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
list := map[string]int{} list := map[string]int{}
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{})
}
if field == kit.MDB_HASH { if field == kit.MDB_HASH {
list[key]++ list[key]++
} else { } else {
@ -152,15 +149,20 @@ func _list_select(m *ice.Message, prefix, chain, field, value string) {
field = "" field = ""
} }
fields := _list_fields(m) fields := _list_fields(m)
cb := m.Optionv(SELECT_CB)
m.Grows(prefix, chain, kit.Select(m.Option("cache.field"), field), kit.Select(m.Option("cache.value"), value), func(index int, val map[string]interface{}) { m.Grows(prefix, chain, kit.Select(m.Option("cache.field"), field), kit.Select(m.Option("cache.value"), value), func(index int, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{}) switch cb := cb.(type) {
} case func(fields []string, value map[string]interface{}):
if m.Option(FIELDS) == DETAIL { cb(fields, val)
m.Push(DETAIL, val) default:
} else { if m.Option(FIELDS) == DETAIL {
m.Push("", val, fields) m.Push(DETAIL, val)
} else {
m.Push("", val, fields)
}
} }
}) })
if m.Option(FIELDS) != DETAIL { if m.Option(FIELDS) != DETAIL {
m.Sort(kit.MDB_ID, "int_r") m.Sort(kit.MDB_ID, "int_r")
@ -189,9 +191,7 @@ func _list_export(m *ice.Message, prefix, chain, file string) {
count := 0 count := 0
head := kit.Split(m.Option(FIELDS)) head := kit.Split(m.Option(FIELDS))
m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) { m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{})
}
if index == 0 && len(head) == 0 { if index == 0 && len(head) == 0 {
// 输出表头 // 输出表头
@ -250,9 +250,7 @@ func _list_prunes(m *ice.Message, prefix, chain string, arg ...string) {
func _list_inputs(m *ice.Message, prefix, chain string, field, value string) { func _list_inputs(m *ice.Message, prefix, chain string, field, value string) {
list := map[string]int{} list := map[string]int{}
m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) { m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{})
}
list[kit.Format(val[field])]++ list[kit.Format(val[field])]++
}) })
for k, i := range list { for k, i := range list {
@ -266,12 +264,10 @@ func _zone_fields(m *ice.Message) []string {
return kit.Split(kit.Select("zone,id,time,type,name,text", strings.Join(kit.Simple(m.Optionv(FIELDS)), ","))) return kit.Split(kit.Select("zone,id,time,type,name,text", strings.Join(kit.Simple(m.Optionv(FIELDS)), ",")))
} }
func _zone_select(m *ice.Message, prefix, chain, zone string, id string) { func _zone_select(m *ice.Message, prefix, chain, zone string, id string) {
cb := m.Optionv(SELECT_CB)
fields := _zone_fields(m) fields := _zone_fields(m)
cb := m.Optionv(SELECT_CB)
m.Richs(prefix, chain, kit.Select(kit.MDB_FOREACH, zone), func(key string, val map[string]interface{}) { m.Richs(prefix, chain, kit.Select(kit.MDB_FOREACH, zone), func(key string, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{})
}
if zone == "" { if zone == "" {
if m.Option(FIELDS) == DETAIL { if m.Option(FIELDS) == DETAIL {
m.Push(DETAIL, val) m.Push(DETAIL, val)
@ -282,9 +278,7 @@ func _zone_select(m *ice.Message, prefix, chain, zone string, id string) {
} }
m.Grows(prefix, kit.Keys(chain, kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) { m.Grows(prefix, kit.Keys(chain, kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) {
if value[kit.MDB_META] != nil { value = kit.GetMeta(value)
value = value[kit.MDB_META].(map[string]interface{})
}
switch cb := cb.(type) { switch cb := cb.(type) {
case func(string, []string, map[string]interface{}, map[string]interface{}): case func(string, []string, map[string]interface{}, map[string]interface{}):
@ -316,14 +310,10 @@ func _zone_export(m *ice.Message, prefix, chain, file string) {
count := 0 count := 0
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) { m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
if val[kit.MDB_META] != nil { val = kit.GetMeta(val)
val = val[kit.MDB_META].(map[string]interface{})
}
m.Grows(prefix, kit.Keys(chain, kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) { m.Grows(prefix, kit.Keys(chain, kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
if value[kit.MDB_META] != nil { value = kit.GetMeta(value)
value = value[kit.MDB_META].(map[string]interface{})
}
list := []string{} list := []string{}
for _, k := range fields { for _, k := range fields {

View File

@ -5,6 +5,7 @@ import (
"github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"bufio" "bufio"
@ -58,7 +59,7 @@ func Script(m *ice.Message, name string) io.Reader {
} }
m.Option("_script", name) m.Option("_script", name)
if s, e := os.Open(name); e == nil { if s, e := os.Open(path.Join(m.Option(nfs.DIR_ROOT), name)); e == nil {
return s return s
} }
switch strings.Split(name, "/")[0] { switch strings.Split(name, "/")[0] {

View File

@ -26,6 +26,7 @@ const ( // MSG
MSG_ARGS = "_args" MSG_ARGS = "_args"
MSG_CONTROL = "_control" MSG_CONTROL = "_control"
MSG_DISPLAY = "_display"
MSG_PROCESS = "_process" MSG_PROCESS = "_process"
MSG_CMDS = "cmds" MSG_CMDS = "cmds"

View File

@ -64,6 +64,7 @@ func _action_list(m *ice.Message, river, storm string) {
m.Cmdy(TOOL, storm).Table(func(index int, value map[string]string, head []string) { m.Cmdy(TOOL, storm).Table(func(index int, value map[string]string, head []string) {
m.Cmdy(m.Space(kit.Select(m.Option(POD), value[POD])), ctx.COMMAND, kit.Keys(value[CTX], value[CMD])) m.Cmdy(m.Space(kit.Select(m.Option(POD), value[POD])), ctx.COMMAND, kit.Keys(value[CTX], value[CMD]))
}) })
m.SortInt(kit.MDB_ID)
} }
func _action_show(m *ice.Message, river, storm, index string, arg ...string) { func _action_show(m *ice.Message, river, storm, index string, arg ...string) {
cmds := []string{index} cmds := []string{index}
@ -98,9 +99,7 @@ const ACTION = "action"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
ACTION: {Name: ACTION, Help: "应用", Value: kit.Data( ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(DOMAIN, kit.Dict())},
DOMAIN, kit.Dict(),
)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
"/action": {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{ "/action": {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{

View File

@ -15,12 +15,19 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心",
m.Load() m.Load()
m.Cmd(web.SERVE, aaa.WHITE, "header", "river", "action", "footer") m.Cmd(web.SERVE, aaa.WHITE, "header", "river", "action", "footer")
m.Conf(ACTION, "meta.domain.web.chat.meet.miss", "true")
m.Conf(ACTION, "meta.domain.web.chat.meet.mate", "true")
m.Conf(ACTION, "meta.domain.web.chat.location", "true") m.Conf(ACTION, "meta.domain.web.chat.location", "true")
m.Conf(ACTION, "meta.domain.web.chat.paste", "true") m.Conf(ACTION, "meta.domain.web.chat.paste", "true")
m.Conf(ACTION, "meta.domain.web.chat.scan", "true") m.Conf(ACTION, "meta.domain.web.chat.scan", "true")
m.Conf(ACTION, "meta.domain.web.wiki.feel", "true") m.Conf(ACTION, "meta.domain.web.wiki.feel", "true")
m.Conf(ACTION, "meta.domain.web.wiki.draw", "true")
m.Conf(ACTION, "meta.domain.web.wiki.data", "true")
m.Conf(ACTION, "meta.domain.web.wiki.word", "true")
m.Conf(ACTION, "meta.domain.web.team.task", "true") m.Conf(ACTION, "meta.domain.web.team.task", "true")
m.Conf(ACTION, "meta.domain.web.team.plan", "true") m.Conf(ACTION, "meta.domain.web.team.plan", "true")
m.Conf(ACTION, "meta.domain.web.mall.asset", "true")
m.Conf(ACTION, "meta.domain.web.mall.salary", "true")
m.Conf(RIVER, "meta.template", kit.Dict( m.Conf(RIVER, "meta.template", kit.Dict(
"base", kit.Dict( "base", kit.Dict(
@ -35,17 +42,19 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心",
"web.chat.scan", "web.chat.scan",
"web.chat.paste", "web.chat.paste",
"web.chat.location", "web.chat.location",
"web.chat.meet.miss",
"web.wiki.feel",
}, },
"miss", []interface{}{ "task", []interface{}{
"web.team.task", "web.team.task",
"web.team.plan", "web.team.plan",
"web.wiki.draw", "web.mall.asset",
"web.wiki.data", "web.mall.salary",
"web.wiki.word", "web.wiki.word",
}, },
"meet", []interface{}{ "draw", []interface{}{
"web.wiki.feel", "web.wiki.draw",
"web.chat.meet.miss", "web.wiki.data",
"web.wiki.word", "web.wiki.word",
}, },
), ),

View File

@ -6,8 +6,6 @@ import (
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
var _miss_select = "time,name,照片,性别,年龄,身高,籍贯,户口,学历,职业,公司,年薪,资产,家境"
const ( const (
MISS = "miss" MISS = "miss"
) )
@ -25,23 +23,23 @@ func init() {
MISS: {Name: "miss name auto create", Help: "资料", Action: map[string]*ice.Action{ MISS: {Name: "miss name auto create", Help: "资料", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create name 照片 性别 年龄 身高 体重 籍贯 户口 学历 学校 职业 公司 年薪 资产 家境", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create name 照片 性别 年龄 身高 体重 籍贯 户口 学历 学校 职业 公司 年薪 资产 家境", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(MISS), m.Option(ice.MSG_DOMAIN), mdb.HASH, arg) m.Cmdy(mdb.INSERT, m.Prefix(MISS), "", mdb.HASH, arg)
}}, }},
mdb.MODIFY: {Name: "modify key value", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { mdb.MODIFY: {Name: "modify key value", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, m.Prefix(MISS), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME), arg[0], arg[1]) m.Cmdy(mdb.MODIFY, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME), arg[0], arg[1])
}}, }},
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(MISS), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME)) m.Cmdy(mdb.DELETE, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME))
}}, }},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.EXPORT, m.Prefix(MISS), m.Option(ice.MSG_DOMAIN), mdb.HASH) m.Cmdy(mdb.EXPORT, m.Prefix(MISS), "", mdb.HASH)
}}, }},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.IMPORT, m.Prefix(MISS), m.Option(ice.MSG_DOMAIN), mdb.HASH) m.Cmdy(mdb.IMPORT, m.Prefix(MISS), "", mdb.HASH)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,name,照片,性别,年龄,身高,籍贯,户口,学历,职业,公司,年薪,资产,家境", mdb.DETAIL, len(arg) > 0)) m.Option(mdb.FIELDS, kit.Select("time,name,照片,性别,年龄,身高,籍贯,户口,学历,职业,公司,年薪,资产,家境", mdb.DETAIL, len(arg) > 0))
msg := m.Cmd(mdb.SELECT, m.Prefix(MISS), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_NAME, arg) msg := m.Cmd(mdb.SELECT, m.Prefix(MISS), "", mdb.HASH, kit.MDB_NAME, arg)
msg.Table(func(index int, value map[string]string, head []string) { msg.Table(func(index int, value map[string]string, head []string) {
value["照片"] = kit.Format(`<img src="%s" height=%s>`, value["照片"], kit.Select("100", "400", m.Option(mdb.FIELDS) == mdb.DETAIL)) value["照片"] = kit.Format(`<img src="%s" height=%s>`, value["照片"], kit.Select("100", "400", m.Option(mdb.FIELDS) == mdb.DETAIL))
m.Push("", value, kit.Split(m.Option(mdb.FIELDS))) m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))

View File

@ -18,7 +18,7 @@ func init() {
PASTE: {Name: "paste hash auto create@paste", Help: "粘贴板", Action: map[string]*ice.Action{ PASTE: {Name: "paste hash auto create@paste", Help: "粘贴板", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create type=text name=hi data:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type=text name=hi data:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_trans(arg, map[string]string{"data": "text"}) _trans(arg, map[string]string{"data": "text"})
m.Conf(PASTE, kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT) m.Conf(m.Prefix(PASTE), kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT)
m.Cmdy(mdb.INSERT, m.Prefix(PASTE), "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, m.Prefix(PASTE), "", mdb.HASH, arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
@ -43,7 +43,7 @@ func init() {
} }
m.Cmdy(mdb.SELECT, m.Prefix(PASTE), "", mdb.HASH) m.Cmdy(mdb.SELECT, m.Prefix(PASTE), "", mdb.HASH)
m.Sort(kit.MDB_TIME, "time_r") m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},
}, },

View File

@ -43,6 +43,7 @@ const (
POD = "pod" POD = "pod"
CTX = "ctx" CTX = "ctx"
CMD = "cmd" CMD = "cmd"
ARG = "arg"
) )
const ( const (
INFO = "info" INFO = "info"
@ -57,9 +58,7 @@ const RIVER = "river"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
RIVER: {Name: RIVER, Help: "群组", Value: kit.Data( RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(kit.MDB_PATH, "usr/local/river")},
kit.MDB_PATH, "usr/local/river",
)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
INFO: {Name: "info auto", Help: "信息", Action: map[string]*ice.Action{ INFO: {Name: "info auto", Help: "信息", Action: map[string]*ice.Action{
@ -245,7 +244,7 @@ func init() {
m.Appendv(ice.MSG_APPEND, aaa.USERNAME, aaa.USERNICK) m.Appendv(ice.MSG_APPEND, aaa.USERNAME, aaa.USERNICK)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, "time,username") m.Option(mdb.FIELDS, kit.Select("time,username", mdb.DETAIL, len(arg) > 0))
m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, aaa.USERNAME, arg) m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), USER), mdb.HASH, aaa.USERNAME, arg)
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.Push(aaa.USERNICK, aaa.UserNick(m, value[aaa.USERNAME])) m.Push(aaa.USERNICK, aaa.UserNick(m, value[aaa.USERNAME]))

View File

@ -17,7 +17,7 @@ func init() {
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SCAN: {Name: "scan hash auto create@scan", Help: "扫码", Action: map[string]*ice.Action{ SCAN: {Name: "scan hash auto create@scan", Help: "扫码", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type=text name=hi text:textarea=hi", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Conf(SCAN, kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT) m.Conf(m.Prefix(SCAN), kit.Keys(m.Option(ice.MSG_DOMAIN), kit.MDB_META, kit.MDB_SHORT), kit.MDB_TEXT)
m.Cmdy(mdb.INSERT, m.Prefix(SCAN), "", mdb.HASH, arg) m.Cmdy(mdb.INSERT, m.Prefix(SCAN), "", mdb.HASH, arg)
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
@ -42,7 +42,7 @@ func init() {
} }
m.Cmdy(mdb.SELECT, m.Prefix(SCAN), "", mdb.HASH) m.Cmdy(mdb.SELECT, m.Prefix(SCAN), "", mdb.HASH)
m.Sort(kit.MDB_TIME, "time_r") m.SortTimeR(kit.MDB_TIME)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},
}, },

View File

@ -11,37 +11,66 @@ import (
func _sub_key(m *ice.Message, account string) string { func _sub_key(m *ice.Message, account string) string {
return kit.Keys(kit.MDB_HASH, kit.Hashs(account)) return kit.Keys(kit.MDB_HASH, kit.Hashs(account))
} }
func _sub_value(m *ice.Message, key string, arg ...string) string {
for i := 0; i < len(arg)-1; i += 2 {
if arg[i] == key {
return arg[i+1]
}
}
return ""
}
func _sub_amount(m *ice.Message, arg []string) {
for i := 0; i < len(arg)-1; i += 2 {
if arg[i] == AMOUNT {
if amount := kit.Int(arg[i+1]); amount > 0 {
arg[i+1] = kit.Format(-amount)
}
}
}
}
func _asset_list(m *ice.Message, account string, id string) { func _asset_list(m *ice.Message, account string, id string) {
if account == "" { if account == "" {
m.Option(mdb.FIELDS, "time,account,amount,count") m.Option(mdb.FIELDS, "time,account,amount,count")
defer m.PushAction(CHECK)
defer m.SortIntR(AMOUNT)
} else if id == "" {
m.Option(mdb.FIELDS, "time,id,type,amount,name,text")
} else { } else {
m.Option(mdb.FIELDS, kit.Select("time,id,type,amount,name,text", mdb.DETAIL, id != "")) m.Option(mdb.FIELDS, mdb.DETAIL)
defer m.PushAction(mdb.PLUGIN)
} }
m.Cmdy(mdb.SELECT, ASSET, "", mdb.ZONE, account, id) m.Cmdy(mdb.SELECT, ASSET, "", mdb.ZONE, account, id)
if id != "" {
m.PushAction(mdb.PLUGIN)
}
} }
func _asset_check(m *ice.Message, account string) {
amount := 0
m.Option(mdb.FIELDS, "time,id,type,amount,name,text")
m.Option(mdb.SELECT_CB, func(fields []string, value map[string]interface{}) {
amount += kit.Int(kit.Value(value, AMOUNT))
})
m.Cmd(mdb.SELECT, ASSET, _sub_key(m, account), mdb.LIST)
m.Cmdy(mdb.MODIFY, ASSET, "", mdb.HASH, ACCOUNT, account, AMOUNT, amount)
}
func _asset_create(m *ice.Message, account string) { func _asset_create(m *ice.Message, account string) {
m.Cmdy(mdb.INSERT, ASSET, "", mdb.HASH, ACCOUNT, account) m.Cmdy(mdb.INSERT, ASSET, "", mdb.HASH, ACCOUNT, account)
} }
func _asset_insert(m *ice.Message, account string, arg ...string) { func _asset_insert(m *ice.Message, account string, arg ...string) {
msg := m.Cmd(mdb.SELECT, ASSET, "", mdb.HASH, ACCOUNT, account) _asset_create(m, account)
amount := kit.Int(msg.Append(AMOUNT))
for i := 0; i < len(arg)-1; i += 2 {
if arg[i] == "amount" {
amount += kit.Int(arg[i+1])
}
}
m.Cmdy(mdb.INSERT, ASSET, _sub_key(m, account), mdb.LIST, arg) m.Cmdy(mdb.INSERT, ASSET, _sub_key(m, account), mdb.LIST, arg)
m.Option(mdb.FIELDS, "time,account,amount,count")
amount := kit.Int(m.Cmd(mdb.SELECT, ASSET, "", mdb.HASH, ACCOUNT, account).Append(AMOUNT))
amount += kit.Int(_sub_value(m, AMOUNT, arg...))
m.Cmdy(mdb.MODIFY, ASSET, "", mdb.HASH, ACCOUNT, account, AMOUNT, amount) m.Cmdy(mdb.MODIFY, ASSET, "", mdb.HASH, ACCOUNT, account, AMOUNT, amount)
} }
func _asset_modify(m *ice.Message, account, id, field, value string, arg ...string) { func _asset_modify(m *ice.Message, account, id string, arg ...string) {
m.Cmdy(mdb.MODIFY, ASSET, _sub_key(m, account), mdb.LIST, kit.MDB_ID, id, field, value, arg) m.Cmdy(mdb.MODIFY, ASSET, _sub_key(m, account), mdb.LIST, kit.MDB_ID, id, arg)
} }
func _asset_export(m *ice.Message, file string) { func _asset_export(m *ice.Message, file string) {
m.Option(mdb.FIELDS, "account,id,time,type,name,text,amount,extra") m.Option(mdb.FIELDS, "account,id,time,type,amount,name,text,extra")
m.Cmdy(mdb.EXPORT, ASSET, "", mdb.ZONE, file) m.Cmdy(mdb.EXPORT, ASSET, "", mdb.ZONE, file)
} }
func _asset_import(m *ice.Message, file string) { func _asset_import(m *ice.Message, file string) {
@ -50,10 +79,18 @@ func _asset_import(m *ice.Message, file string) {
} }
func _asset_inputs(m *ice.Message, field, value string) { func _asset_inputs(m *ice.Message, field, value string) {
switch field { switch field {
case "pod", "extra.pod":
m.Cmdy(web.ROUTE)
case "ctx", "extra.ctx":
m.Cmdy(ctx.CONTEXT)
case "cmd", "extra.cmd":
m.Cmdy(ctx.CONTEXT, kit.Select(m.Option("ctx"), m.Option("extra.ctx")), ctx.COMMAND)
case "arg", "extra.arg":
case "from", "to", ACCOUNT: case "from", "to", ACCOUNT:
m.Cmdy(mdb.INPUTS, ASSET, "", mdb.HASH, ACCOUNT, value) m.Cmdy(mdb.INPUTS, ASSET, "", mdb.HASH, ACCOUNT, value)
default: default:
m.Cmdy(mdb.INPUTS, ASSET, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, field, value) m.Cmdy(mdb.INPUTS, ASSET, _sub_key(m, m.Option(ACCOUNT)), mdb.LIST, field, value)
} }
} }
@ -64,6 +101,7 @@ const (
SPEND = "spend" SPEND = "spend"
TRANC = "tranc" TRANC = "tranc"
BONUS = "bonus" BONUS = "bonus"
CHECK = "check"
) )
const ASSET = "asset" const ASSET = "asset"
@ -73,29 +111,22 @@ func init() {
ASSET: {Name: ASSET, Help: "资产", Value: kit.Data(kit.MDB_SHORT, ACCOUNT)}, ASSET: {Name: ASSET, Help: "资产", Value: kit.Data(kit.MDB_SHORT, ACCOUNT)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ASSET: {Name: "asset account id auto spend tranc bonus export import", Help: "资产", Action: map[string]*ice.Action{ ASSET: {Name: "asset account id auto spend tranc bonus", Help: "资产", Action: map[string]*ice.Action{
SPEND: {Name: "spend account amount time@date name text", Help: "消费", Hand: func(m *ice.Message, arg ...string) { SPEND: {Name: "spend account name amount time@date text", Help: "支出", Hand: func(m *ice.Message, arg ...string) {
_asset_create(m, arg[1]) _sub_amount(m, arg)
if amount := kit.Int(arg[3]); amount > 0 {
arg[3] = kit.Format(-amount)
}
_asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "支出", arg[2:])...) _asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "支出", arg[2:])...)
}}, }},
TRANC: {Name: "tranc from to amount time@date text", Help: "转账", Hand: func(m *ice.Message, arg ...string) { TRANC: {Name: "tranc from to amount time@date text", Help: "转账", Hand: func(m *ice.Message, arg ...string) {
_asset_create(m, arg[3])
_asset_insert(m, arg[3], kit.Simple(kit.MDB_TYPE, "转入", kit.MDB_NAME, arg[1], arg[4:])...) _asset_insert(m, arg[3], kit.Simple(kit.MDB_TYPE, "转入", kit.MDB_NAME, arg[1], arg[4:])...)
_sub_amount(m, arg)
_asset_create(m, arg[1])
if amount := kit.Int(arg[5]); amount > 0 {
arg[5] = kit.Format(-amount)
}
_asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "转出", kit.MDB_NAME, arg[3], arg[4:])...) _asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "转出", kit.MDB_NAME, arg[3], arg[4:])...)
}}, }},
BONUS: {Name: "bonus account amount time@date name text", Help: "收入", Hand: func(m *ice.Message, arg ...string) { BONUS: {Name: "bonus account name amount time@date text", Help: "收入", Hand: func(m *ice.Message, arg ...string) {
_asset_create(m, arg[1])
_asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "收入", arg[2:])...) _asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "收入", arg[2:])...)
}}, }},
CHECK: {Name: "check account", Help: "核算", Hand: func(m *ice.Message, arg ...string) {
_asset_check(m, m.Option(ACCOUNT))
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
_asset_modify(m, m.Option(ACCOUNT), m.Option(kit.MDB_ID), arg[0], arg[1]) _asset_modify(m, m.Option(ACCOUNT), m.Option(kit.MDB_ID), arg[0], arg[1])
@ -107,29 +138,21 @@ func init() {
_asset_import(m, m.Option(kit.MDB_FILE)) _asset_import(m, m.Option(kit.MDB_FILE))
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { _asset_inputs(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
case "pod", "extra.pod":
m.Cmdy(web.ROUTE)
case "ctx", "extra.ctx":
m.Cmdy(ctx.CONTEXT)
case "cmd", "extra.cmd":
m.Cmdy(ctx.CONTEXT, kit.Select(m.Option("ctx"), m.Option("extra.ctx")), ctx.COMMAND)
case "arg":
default:
_asset_inputs(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
}
}}, }},
mdb.PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) { mdb.PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
_asset_modify(m, m.Option(ACCOUNT), m.Option(kit.MDB_ID), kit.MDB_TIME, m.Time(), kit.Simple(kit.Dict(arg))...) _asset_modify(m, m.Option(ACCOUNT), m.Option(kit.MDB_ID), kit.Simple(kit.Dict(arg))...)
}}, }},
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == "run" { if arg[0] == "run" {
m.Cmdy(arg[1], arg[2:]) m.Cmdy(arg[1], arg[2:])
return return
} }
m.Cmdy(ctx.COMMAND, arg[0]) if len(arg) > 0 {
m.Cmdy(ctx.COMMAND, arg[0])
return
}
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_asset_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1)) _asset_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1))

View File

@ -3,7 +3,6 @@ package mall
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
) )
const MALL = "mall" const MALL = "mall"
@ -12,150 +11,7 @@ var Index = &ice.Context{Name: MALL, Help: "贸易中心",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }}, ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
"month": {Name: "month month value value 计算:button 记录:button", Help: "工资", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
data := map[string]int64{"个税方案": 6, "基本工资": 0, "个税": 0,
"公积金比例": 1200, "养老保险比例": 800, "医疗保险比例": 200, "失业保险比例": 20, "工伤保险比例": 2, "生育保险比例": 0,
"公积金金额": 0, "养老保险金额": 0, "医疗保险金额": 0, "失业保险金额": 0, "工伤保险金额": 0, "生育保险金额": 0,
"企业公积金比例": 1200, "企业养老保险比例": 2000, "企业医疗保险比例": 1000, "企业失业保险比例": 100, "企业工伤保险比例": 30, "企业生育保险比例": 80,
"企业公积金金额": 0, "企业养老保险金额": 0, "企业医疗保险金额": 0, "企业失业保险金额": 0, "企业工伤保险金额": 0, "企业生育保险金额": 0,
}
for i := 3; i < len(arg)-1; i += 2 {
if _, ok := data[arg[i]]; ok {
data[arg[i]] = kit.Int64(arg[i+1])
arg[i] = ""
}
}
data["养老保险比例"] = 725
data["失业保险比例"] = 18
salary := kit.Int64(arg[1])
data["个税"] = kit.Int64(arg[2])
base := data["基本工资"]
if base == 0 {
base = salary
}
// 五险一金
amount := int64(0)
for _, k := range []string{"公积金", "养老保险", "医疗保险", "失业保险", "工伤保险"} {
m.Push("名目", k)
value := -base * kit.Int64(data[k+"比例"]) / 10000
m.Info("%v %v: %v %v", base, k, base*kit.Int64(data[k+"比例"]), value)
if m.Push("比例", data[k+"比例"]); data[k+"金额"] == 0 {
if k == "医疗保险" {
value -= 300
}
data[k+"金额"] = value
} else {
value = data[k+"金额"]
}
amount += value
m.Push("金额", data[k+"金额"])
}
// 企业五险一金
company := int64(0)
for _, k := range []string{"企业公积金", "企业养老保险", "企业医疗保险", "企业失业保险", "企业工伤保险", "企业生育保险"} {
m.Push("名目", k)
value := -base * kit.Int64(data[k+"比例"]) / 10000
if m.Push("比例", data[k+"比例"]); data[k+"金额"] == 0 {
data[k+"金额"] = value
}
company += -value
m.Push("金额", data[k+"金额"])
}
m.Push("名目", "企业承担")
m.Push("比例", "")
m.Push("金额", company)
// 其它津贴
for i := 3; i < len(arg)-1; i += 2 {
if arg[i] != "" && data[arg[i]] == 0 {
m.Push("名目", arg[i])
m.Push("比例", "")
m.Push("金额", arg[i+1])
amount += kit.Int64(arg[i+1])
}
}
salary += amount
m.Push("名目", "税前收入")
m.Push("比例", "")
m.Push("金额", salary)
tax, amount := int64(0), salary
if data["个税方案"] == 6 {
// 2011年个税法案
month := []int64{
8350000, 4500,
5850000, 3500,
3850000, 3000,
1250000, 2500,
800000, 2000,
500000, 1000,
350000, 300,
}
for i := 0; i < len(month); i += 2 {
if amount > month[i] {
tax, amount = tax+(amount-month[i])*month[i+1]/10000, month[i]
}
}
if data["个税"] != 0 {
tax = data["个税"]
}
m.Push("名目", "个税")
m.Push("比例", "")
m.Push("金额", tax)
m.Push("名目", "税后收入")
m.Push("比例", "")
m.Push("金额", salary-tax)
} else {
// 2019年个税法案
// year := []int{
// 96000000, 4500,
// 66000000, 3500,
// 42000000, 3000,
// 30000000, 2500,
// 14400000, 2000,
// 3600000, 1000,
// 0, 300,
// }
}
switch m.Option("_action") {
case "计算":
case "记录":
// 收入
m.Cmd("bonus", "工资", "企业承担", company, arg[0])
m.Cmd("bonus", "工资", "基本工资", arg[1], arg[0])
for i := 3; i < len(arg)-1; i += 2 {
if arg[i] != "" && data[arg[i]] == 0 {
m.Cmd("bonus", "工资", arg[i], arg[i+1], arg[0])
}
}
// 转账
m.Cmd("trans", "工资", "公积金", -data["企业公积金金额"], arg[0])
for _, k := range []string{"企业养老保险", "企业医疗保险", "企业失业保险", "企业工伤保险", "企业生育保险"} {
m.Cmd("trans", "工资", k, -data[k+"金额"], arg[0])
}
m.Cmd("trans", "工资", "公积金", -data["公积金金额"], arg[0])
for _, k := range []string{"养老保险", "医疗保险", "失业保险"} {
m.Cmd("trans", "工资", k, -data[k+"金额"], arg[0])
}
// 个税
m.Cmd("trans", "工资", "个税", tax, arg[0])
}
}},
}, },
} }
func init() { web.Index.Register(Index, &web.Frame{}, ASSET) } func init() { web.Index.Register(Index, nil, ASSET, SALARY) }

36
core/mall/salary.go Normal file
View File

@ -0,0 +1,36 @@
package mall
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits"
)
const SALARY = "salary"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
SALARY: {Name: SALARY, Help: "工资", Value: kit.Data(kit.MDB_SHORT, "month")},
},
Commands: map[string]*ice.Command{
SALARY: {Name: "salary month auto create", Help: "工资", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create company month amount income tax 公积金 养老保险 医疗保险 工伤保险 失业保险 生育保险 企业公积金 企业养老保险 企业医疗保险 企业工伤保险 企业失业保险 企业生育保险", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, SALARY, "", mdb.HASH, arg)
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, SALARY, "", mdb.HASH, "month", m.Option("month"), arg)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, SALARY, "", mdb.HASH, "month", m.Option("month"))
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INPUTS, SALARY, "", mdb.HASH, arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,month,company,amount,income,tax", mdb.DETAIL, len(arg) > 0))
m.Cmdy(mdb.SELECT, SALARY, "", mdb.HASH, "month", arg)
}},
},
}, nil)
}

View File

@ -1 +0,0 @@
package mall

View File

@ -1 +0,0 @@
package team

View File

@ -1,17 +0,0 @@
package team
import (
ice "github.com/shylinux/icebergs"
kit "github.com/shylinux/toolkits"
)
const MISS = "miss"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
MISS: {Name: "miss", Help: "miss", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
},
Commands: map[string]*ice.Command{},
}, nil)
}

View File

@ -5,7 +5,6 @@ import (
"github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/gdb"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"time" "time"
@ -36,22 +35,11 @@ func init() {
m.Set(ice.MSG_RESULT).Cmdy(PLAN, m.Option("scale")) m.Set(ice.MSG_RESULT).Cmdy(PLAN, m.Option("scale"))
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { _task_inputs(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
case "pod", "extra.pod":
m.Cmdy(web.ROUTE)
case "ctx", "extra.ctx":
m.Cmdy(ctx.CONTEXT)
case "cmd", "extra.cmd":
m.Cmdy(ctx.CONTEXT, kit.Select(m.Option("ctx"), m.Option("extra.ctx")), ctx.COMMAND)
case "arg":
default:
_task_inputs(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
}
}}, }},
mdb.PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) { mdb.PLUGIN: {Name: "plugin extra.pod extra.ctx extra.cmd extra.arg", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
_task_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), kit.MDB_TIME, m.Time(), kit.Simple(kit.Dict(arg))...) _task_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), kit.MDB_TIME, m.Time(), kit.Simple(kit.KeyValue(nil, "", kit.Dict(arg)))...)
m.Set(ice.MSG_RESULT).Cmdy(PLAN, m.Option("scale")) m.Set(ice.MSG_RESULT).Cmdy(PLAN, m.Option("scale"))
}}, }},
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
@ -59,7 +47,9 @@ func init() {
m.Cmdy(arg[1], arg[2:]) m.Cmdy(arg[1], arg[2:])
return return
} }
m.Cmdy(ctx.COMMAND, arg[0]) if len(arg) > 0 {
m.Cmdy(ctx.COMMAND, arg[0])
}
}}, }},
gdb.BEGIN: {Name: "begin", Help: "开始", Hand: func(m *ice.Message, arg ...string) { gdb.BEGIN: {Name: "begin", Help: "开始", Hand: func(m *ice.Message, arg ...string) {

View File

@ -62,7 +62,7 @@ func _task_list(m *ice.Message, zone string, id string) {
} else { } else {
m.Option(mdb.FIELDS, kit.Select("begin_time,id,status,level,score,type,name,text", mdb.DETAIL, id != "")) m.Option(mdb.FIELDS, kit.Select("begin_time,id,status,level,score,type,name,text", mdb.DETAIL, id != ""))
defer m.Table(func(index int, value map[string]string, head []string) { defer m.Table(func(index int, value map[string]string, head []string) {
m.PushRender(kit.MDB_ACTION, kit.MDB_BUTTON, _task_action(m, value[TaskField.STATUS])) m.PushButton(_task_action(m, value[TaskField.STATUS]))
}) })
} }
m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, zone, id) m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, zone, id)

View File

@ -9,12 +9,8 @@ const TEAM = "team"
var Index = &ice.Context{Name: TEAM, Help: "团队中心", var Index = &ice.Context{Name: TEAM, Help: "团队中心",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }},
m.Load() ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save()
}},
}, },
} }

View File

@ -1,10 +1,10 @@
package wiki package wiki
import ( import (
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"strings"
) )
// 图形接口 // 图形接口

View File

@ -15,9 +15,7 @@ const DATA = "data"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
DATA: {Name: DATA, Help: "数据表格", Value: kit.Data( DATA: {Name: DATA, Help: "数据表格", Value: kit.Data(kit.MDB_PATH, "usr/export", "regs", ".*\\.csv")},
"path", "usr/export", "regs", ".*\\.csv",
)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
DATA: {Name: "data path auto", Help: "数据表格", Meta: kit.Dict( DATA: {Name: "data path auto", Help: "数据表格", Meta: kit.Dict(

View File

@ -13,20 +13,21 @@ const DRAW = "draw"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
DRAW: {Name: DRAW, Help: "思维导图", Value: kit.Data( DRAW: {Name: DRAW, Help: "思维导图", Value: kit.Data(kit.MDB_PATH, "", "regs", ".*\\.svg")},
"path", "", "regs", ".*\\.svg",
)},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
DRAW: {Name: "draw path=src/ file=main.svg 刷新:button=auto 编辑 保存 项目 变参", Help: "思维导图", Meta: kit.Dict( DRAW: {Name: "draw path=src/ file=main.svg 刷新:button=auto 编辑 save 项目 变参", Help: "思维导图", Meta: kit.Dict(
"display", "/plugin/local/wiki/draw.js", "style", "drawer", "display", "/plugin/local/wiki/draw.js", "style", "drawer",
), Action: map[string]*ice.Action{ ), Action: map[string]*ice.Action{
nfs.SAVE: {Name: "save path file text", Help: "保存", Hand: func(m *ice.Message, arg ...string) { nfs.SAVE: {Name: "save", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
_wiki_save(m, DRAW, path.Join(arg...), m.Option("content")) _wiki_save(m, DRAW, path.Join(arg...), m.Option("content"))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if !_wiki_list(m, DRAW, kit.Select("./", path.Join(arg...))) { if !_wiki_list(m, DRAW, kit.Select("./", path.Join(arg...))) {
_wiki_show(m, DRAW, path.Join(arg...)) _wiki_show(m, DRAW, path.Join(arg...))
if m.Result(0) == ice.ErrWarn {
m.Set(ice.MSG_RESULT)
}
} }
}}, }},
}, },

View File

@ -12,20 +12,20 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
FEEL: {Name: FEEL, Help: "影音媒体", Value: kit.Data( FEEL: {Name: FEEL, Help: "影音媒体", Value: kit.Data(
"path", "usr/image", "regs", ".*.(qrc|png|PNG|jpg|jpeg|JPG|MOV|m4v|mp4)", kit.MDB_PATH, "usr/image", "regs", ".*.(qrc|png|PNG|jpg|jpeg|JPG|MOV|m4v|mp4)",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
FEEL: {Name: "feel path auto 上传 上一页 下一页 下载 参数", Help: "影音媒体", Meta: kit.Dict( FEEL: {Name: "feel path auto upload 上一页 下一页 下载 参数", Help: "影音媒体", Meta: kit.Dict(
"display", "/plugin/local/wiki/feel.js", "display", "/plugin/local/wiki/feel.js",
), Action: map[string]*ice.Action{ ), Action: map[string]*ice.Action{
web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
_wiki_upload(m, FEEL) _wiki_upload(m, FEEL, m.Option(kit.MDB_PATH))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_wiki_list(m, FEEL, kit.Select("./", arg, 0)) _wiki_list(m, FEEL, kit.Select("./", arg, 0))
m.Sort(kit.MDB_TIME, "time_r") m.Option(ice.MSG_DISPLAY, "")
m.Option("_display", "") m.SortTimeR(kit.MDB_TIME)
}}, }},
}, },
}, nil) }, nil)

View File

@ -1,25 +1,27 @@
package wiki package wiki
import ( import (
"path"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"path"
"strings"
) )
func _wiki_path(m *ice.Message, cmd string, arg ...string) string {
return path.Join(m.Option(ice.MSG_LOCAL), m.Conf(cmd, kit.META_PATH), path.Join(arg...))
}
func _wiki_list(m *ice.Message, cmd string, arg ...string) bool { func _wiki_list(m *ice.Message, cmd string, arg ...string) bool {
m.Option("prefix", path.Join(m.Option(ice.MSG_LOCAL), m.Conf(cmd, kit.META_PATH))) m.Option("prefix", m.Option(nfs.DIR_ROOT, _wiki_path(m, cmd)))
m.Option(nfs.DIR_ROOT, path.Join(m.Option(ice.MSG_LOCAL), m.Conf(cmd, kit.META_PATH)))
if len(arg) == 0 || strings.HasSuffix(arg[0], "/") { if len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
m.Option("_display", "table") m.Option(ice.MSG_DISPLAY, "table")
if m.Option(nfs.DIR_DEEP) != "true" { if m.Option(nfs.DIR_DEEP) != "true" {
// 目录列表 // 目录列表
m.Option(nfs.DIR_TYPE, nfs.DIR) m.Option(nfs.DIR_TYPE, nfs.DIR)
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0), "time size path") m.Cmdy(nfs.DIR, kit.Select("./", arg, 0), "time size path")
} }
// 文件列表 // 文件列表
@ -31,14 +33,16 @@ func _wiki_list(m *ice.Message, cmd string, arg ...string) bool {
return false return false
} }
func _wiki_show(m *ice.Message, cmd, name string, arg ...string) { func _wiki_show(m *ice.Message, cmd, name string, arg ...string) {
m.Cmdy(nfs.CAT, path.Join(m.Conf(cmd, "meta.path"), name)) m.Option(nfs.DIR_ROOT, "")
m.Cmdy(nfs.CAT, _wiki_path(m, cmd, name))
} }
func _wiki_save(m *ice.Message, cmd, name, text string, arg ...string) { func _wiki_save(m *ice.Message, cmd, name, text string, arg ...string) {
m.Cmd(nfs.SAVE, path.Join(m.Conf(cmd, "meta.path"), name), text) m.Option(nfs.DIR_ROOT, "")
m.Cmd(nfs.SAVE, _wiki_path(m, cmd, name), text)
} }
func _wiki_upload(m *ice.Message, cmd string) { func _wiki_upload(m *ice.Message, cmd string, dir string) {
up := kit.Simple(m.Optionv(ice.MSG_UPLOAD)) up := kit.Simple(m.Optionv(ice.MSG_UPLOAD))
if p := path.Join(m.Option(ice.MSG_LOCAL), m.Conf(cmd, kit.META_PATH), m.Option(kit.MDB_PATH), up[1]); m.Option(ice.MSG_USERPOD) == "" { if p := _wiki_path(m, cmd, dir, up[1]); m.Option(ice.MSG_USERPOD) == "" {
m.Cmdy(web.CACHE, web.WATCH, up[0], p) m.Cmdy(web.CACHE, web.WATCH, up[0], p)
} else { } else {
m.Cmdy(web.SPIDE, web.SPIDE_DEV, web.SPIDE_SAVE, p, web.SPIDE_GET, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/cache/"+up[0])) m.Cmdy(web.SPIDE, web.SPIDE_DEV, web.SPIDE_SAVE, p, web.SPIDE_GET, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/cache/"+up[0]))
@ -49,12 +53,8 @@ const WIKI = "wiki"
var Index = &ice.Context{Name: WIKI, Help: "文档中心", var Index = &ice.Context{Name: WIKI, Help: "文档中心",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }},
m.Load() ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save()
}},
}, },
} }

View File

@ -3,7 +3,6 @@ package wiki
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/ssh" "github.com/shylinux/icebergs/base/ssh"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
@ -175,14 +174,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
data := kit.Dict(kit.MDB_NAME, name) data := kit.Dict(kit.MDB_NAME, name)
cmds := kit.Split(text) cmds := kit.Split(text)
m.Search(cmds[0], func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) { m.Search(cmds[0], func(p *ice.Context, s *ice.Context, key string, cmd *ice.Command) {
if ls := strings.Split(cmds[0], "."); len(ls) > 1 { data["feature"], data["inputs"] = cmd.Meta, cmd.List
m.Cmd(ctx.COMMAND, strings.Join(ls[:len(ls)-1], "."), key)
} else {
m.Cmd(ctx.COMMAND, key)
}
if data["feature"], data["inputs"] = cmd.Meta, cmd.List; len(cmd.List) == 0 {
data["inputs"] = m.Confv("field", "meta.some.simple.inputs")
}
}) })
// 扩展参数 // 扩展参数
@ -216,9 +208,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
list := data["inputs"].([]interface{}) list := data["inputs"].([]interface{})
for i := count; i < len(args); i++ { for i := count; i < len(args); i++ {
list = append(list, kit.Dict( list = append(list, kit.Dict(
"_input", "text", "_input", "text", "name", "args", "value", args[i],
"name", "args",
"value", args[i],
)) ))
} }
data["inputs"] = list data["inputs"] = list
@ -287,7 +277,6 @@ func _video_show(m *ice.Message, name, text string, arg ...string) {
} }
func _baidu_show(m *ice.Message, name, text string, arg ...string) { func _baidu_show(m *ice.Message, name, text string, arg ...string) {
_option(m, BAIDU, name, text, arg...) _option(m, BAIDU, name, text, arg...)
// m.Cmdy(mdb.RENDER, web.RENDER.Frame, kit.Format("https://baidu.com/s?wd=%s", text)) // m.Cmdy(mdb.RENDER, web.RENDER.Frame, kit.Format("https://baidu.com/s?wd=%s", text))
} }
func _other_show(m *ice.Message, name, text string, arg ...string) { func _other_show(m *ice.Message, name, text string, arg ...string) {
@ -298,29 +287,12 @@ func _other_show(m *ice.Message, name, text string, arg ...string) {
func _word_show(m *ice.Message, name string, arg ...string) { func _word_show(m *ice.Message, name string, arg ...string) {
m.Set(ice.MSG_RESULT) m.Set(ice.MSG_RESULT)
m.Option("render", "raw") m.Option("render", "raw")
m.Optionv(TITLE, map[string]int{}) m.Option(TITLE, map[string]int{})
m.Optionv("menu", map[string]interface{}{"list": []interface{}{}}) m.Option("menu", map[string]interface{}{"list": []interface{}{}})
m.Optionv(ice.MSG_ALIAS, m.Confv(WORD, "meta.alias"))
m.Cmdy(ssh.SOURCE, path.Join(m.Conf(WORD, "meta.path"), name))
}
func reply(m *ice.Message, cmd string, arg ...string) bool {
m.Option(nfs.DIR_ROOT, m.Conf(cmd, "meta.path"))
if len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
m.Option("_display", "table")
if m.Option(nfs.DIR_DEEP) != "true" {
// 目录列表
m.Option(nfs.DIR_TYPE, nfs.DIR)
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
} m.Option(ice.MSG_ALIAS, m.Confv(WORD, "meta.alias"))
m.Option(nfs.DIR_ROOT, _wiki_path(m, WORD))
// 文件列表 m.Cmdy(ssh.SOURCE, name)
m.Option(nfs.DIR_TYPE, nfs.FILE)
m.Option(nfs.DIR_REG, m.Conf(cmd, "meta.regs"))
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
return true
}
return false
} }
const ( const (
@ -374,7 +346,7 @@ func init() {
VIDEO: {Name: VIDEO, Help: "视频", Value: kit.Data("template", video)}, VIDEO: {Name: VIDEO, Help: "视频", Value: kit.Data("template", video)},
WORD: {Name: WORD, Help: "语言文字", Value: kit.Data( WORD: {Name: WORD, Help: "语言文字", Value: kit.Data(
"path", "", "regs", ".*\\.shy", "alias", map[string]interface{}{ kit.MDB_PATH, "", "regs", ".*\\.shy", "alias", map[string]interface{}{
PREMENU: []interface{}{TITLE, PREMENU}, PREMENU: []interface{}{TITLE, PREMENU},
CHAPTER: []interface{}{TITLE, CHAPTER}, CHAPTER: []interface{}{TITLE, CHAPTER},
SECTION: []interface{}{TITLE, SECTION}, SECTION: []interface{}{TITLE, SECTION},
@ -433,7 +405,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
arg = _name(m, arg) arg = _name(m, arg)
_field_show(m, strings.ReplaceAll(arg[0], " ", "_"), arg[1], arg[2:]...) _field_show(m, strings.ReplaceAll(kit.Select(path.Base(arg[1]), arg[0]), " ", "_"), arg[1], arg[2:]...)
}}, }},
SHELL: {Name: "shell [name] cmd", Help: "命令", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { SHELL: {Name: "shell [name] cmd", Help: "命令", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
arg = _name(m, arg) arg = _name(m, arg)
@ -491,7 +463,7 @@ func init() {
m.Cmdy(arg[0], "action", "run", arg[1:]) m.Cmdy(arg[0], "action", "run", arg[1:])
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if m.Option(nfs.DIR_DEEP, "true"); reply(m, cmd, arg...) { if m.Option(nfs.DIR_DEEP, "true"); _wiki_list(m, cmd, arg...) {
return return
} }
_word_show(m, arg[0]) _word_show(m, arg[0])

View File

@ -117,7 +117,7 @@ func (m *Message) Push(key string, value interface{}, arg ...interface{}) *Messa
default: default:
if m.Option("fields") == "detail" || (len(m.meta[MSG_APPEND]) == 2 && m.meta[MSG_APPEND][0] == kit.MDB_KEY && m.meta[MSG_APPEND][1] == kit.MDB_VALUE) { if m.Option("fields") == "detail" || (len(m.meta[MSG_APPEND]) == 2 && m.meta[MSG_APPEND][0] == kit.MDB_KEY && m.meta[MSG_APPEND][1] == kit.MDB_VALUE) {
if key != kit.MDB_KEY || key != kit.MDB_VALUE { if key != kit.MDB_KEY && key != kit.MDB_VALUE {
m.Add(MSG_APPEND, kit.MDB_KEY, key) m.Add(MSG_APPEND, kit.MDB_KEY, key)
m.Add(MSG_APPEND, kit.MDB_VALUE, kit.Format(value)) m.Add(MSG_APPEND, kit.MDB_VALUE, kit.Format(value))
break break

View File

@ -101,6 +101,13 @@ func (m *Message) PushAction(list ...interface{}) {
}) })
} }
func (m *Message) SortStr(key string) { m.Sort(key, "str") }
func (m *Message) SortStrR(key string) { m.Sort(key, "str_r") }
func (m *Message) SortInt(key string) { m.Sort(key, "int") }
func (m *Message) SortIntR(key string) { m.Sort(key, "int_r") }
func (m *Message) SortTime(key string) { m.Sort(key, "time") }
func (m *Message) SortTimeR(key string) { m.Sort(key, "time_r") }
var count = int32(0) var count = int32(0)
func (m *Message) AddCmd(cmd *Command) string { func (m *Message) AddCmd(cmd *Command) string {