forked from x/icebergs
opt core
This commit is contained in:
parent
bfbf6d9a2d
commit
9dc89e50c5
@ -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)), ",")))
|
||||
}
|
||||
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.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)
|
||||
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
if m.Option(FIELDS) == DETAIL {
|
||||
m.Push(DETAIL, val)
|
||||
} 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) {
|
||||
m.Richs(prefix, chain, value, func(key string, val map[string]interface{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
for i := 0; i < len(arg)-1; i += 2 {
|
||||
if arg[i] == field {
|
||||
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) {
|
||||
list := map[string]int{}
|
||||
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
if field == kit.MDB_HASH {
|
||||
list[key]++
|
||||
} else {
|
||||
@ -152,15 +149,20 @@ func _list_select(m *ice.Message, prefix, chain, field, value string) {
|
||||
field = ""
|
||||
}
|
||||
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{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
switch cb := cb.(type) {
|
||||
case func(fields []string, value map[string]interface{}):
|
||||
cb(fields, val)
|
||||
default:
|
||||
if m.Option(FIELDS) == DETAIL {
|
||||
m.Push(DETAIL, val)
|
||||
} else {
|
||||
m.Push("", val, fields)
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
if m.Option(FIELDS) != DETAIL {
|
||||
m.Sort(kit.MDB_ID, "int_r")
|
||||
@ -189,9 +191,7 @@ func _list_export(m *ice.Message, prefix, chain, file string) {
|
||||
count := 0
|
||||
head := kit.Split(m.Option(FIELDS))
|
||||
m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
|
||||
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) {
|
||||
list := map[string]int{}
|
||||
m.Grows(prefix, chain, "", "", func(index int, val map[string]interface{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
list[kit.Format(val[field])]++
|
||||
})
|
||||
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)), ",")))
|
||||
}
|
||||
func _zone_select(m *ice.Message, prefix, chain, zone string, id string) {
|
||||
cb := m.Optionv(SELECT_CB)
|
||||
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{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
if zone == "" {
|
||||
if m.Option(FIELDS) == DETAIL {
|
||||
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{}) {
|
||||
if value[kit.MDB_META] != nil {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
value = kit.GetMeta(value)
|
||||
|
||||
switch cb := cb.(type) {
|
||||
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
|
||||
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
||||
if val[kit.MDB_META] != nil {
|
||||
val = val[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
val = kit.GetMeta(val)
|
||||
|
||||
m.Grows(prefix, kit.Keys(chain, kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
|
||||
if value[kit.MDB_META] != nil {
|
||||
value = value[kit.MDB_META].(map[string]interface{})
|
||||
}
|
||||
value = kit.GetMeta(value)
|
||||
|
||||
list := []string{}
|
||||
for _, k := range fields {
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"bufio"
|
||||
@ -58,7 +59,7 @@ func Script(m *ice.Message, name string) io.Reader {
|
||||
}
|
||||
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
|
||||
}
|
||||
switch strings.Split(name, "/")[0] {
|
||||
|
1
conf.go
1
conf.go
@ -26,6 +26,7 @@ const ( // MSG
|
||||
MSG_ARGS = "_args"
|
||||
|
||||
MSG_CONTROL = "_control"
|
||||
MSG_DISPLAY = "_display"
|
||||
MSG_PROCESS = "_process"
|
||||
|
||||
MSG_CMDS = "cmds"
|
||||
|
@ -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(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) {
|
||||
cmds := []string{index}
|
||||
@ -98,9 +99,7 @@ const ACTION = "action"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(
|
||||
DOMAIN, kit.Dict(),
|
||||
)},
|
||||
ACTION: {Name: ACTION, Help: "应用", Value: kit.Data(DOMAIN, kit.Dict())},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
"/action": {Name: "/action river storm action arg...", Help: "工作台", Action: map[string]*ice.Action{
|
||||
|
@ -15,12 +15,19 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心",
|
||||
m.Load()
|
||||
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.paste", "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.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.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(
|
||||
"base", kit.Dict(
|
||||
@ -35,17 +42,19 @@ var Index = &ice.Context{Name: CHAT, Help: "聊天中心",
|
||||
"web.chat.scan",
|
||||
"web.chat.paste",
|
||||
"web.chat.location",
|
||||
"web.chat.meet.miss",
|
||||
"web.wiki.feel",
|
||||
},
|
||||
"miss", []interface{}{
|
||||
"task", []interface{}{
|
||||
"web.team.task",
|
||||
"web.team.plan",
|
||||
"web.wiki.draw",
|
||||
"web.wiki.data",
|
||||
"web.mall.asset",
|
||||
"web.mall.salary",
|
||||
"web.wiki.word",
|
||||
},
|
||||
"meet", []interface{}{
|
||||
"web.wiki.feel",
|
||||
"web.chat.meet.miss",
|
||||
"draw", []interface{}{
|
||||
"web.wiki.draw",
|
||||
"web.wiki.data",
|
||||
"web.wiki.word",
|
||||
},
|
||||
),
|
||||
|
@ -6,8 +6,6 @@ import (
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
var _miss_select = "time,name,照片,性别,年龄,身高,籍贯,户口,学历,职业,公司,年薪,资产,家境"
|
||||
|
||||
const (
|
||||
MISS = "miss"
|
||||
)
|
||||
@ -25,23 +23,23 @@ func init() {
|
||||
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(MISS), m.Option(ice.MSG_DOMAIN), mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME))
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
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)))
|
||||
|
@ -18,7 +18,7 @@ func init() {
|
||||
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) {
|
||||
_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)
|
||||
}},
|
||||
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.Sort(kit.MDB_TIME, "time_r")
|
||||
m.SortTimeR(kit.MDB_TIME)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
},
|
||||
|
@ -43,6 +43,7 @@ const (
|
||||
POD = "pod"
|
||||
CTX = "ctx"
|
||||
CMD = "cmd"
|
||||
ARG = "arg"
|
||||
)
|
||||
const (
|
||||
INFO = "info"
|
||||
@ -57,9 +58,7 @@ const RIVER = "river"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(
|
||||
kit.MDB_PATH, "usr/local/river",
|
||||
)},
|
||||
RIVER: {Name: RIVER, Help: "群组", Value: kit.Data(kit.MDB_PATH, "usr/local/river")},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
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)
|
||||
}},
|
||||
}, 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.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push(aaa.USERNICK, aaa.UserNick(m, value[aaa.USERNAME]))
|
||||
|
@ -17,7 +17,7 @@ func init() {
|
||||
Commands: map[string]*ice.Command{
|
||||
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) {
|
||||
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)
|
||||
}},
|
||||
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.Sort(kit.MDB_TIME, "time_r")
|
||||
m.SortTimeR(kit.MDB_TIME)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
},
|
||||
|
@ -11,37 +11,66 @@ import (
|
||||
func _sub_key(m *ice.Message, account string) string {
|
||||
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) {
|
||||
if account == "" {
|
||||
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 {
|
||||
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)
|
||||
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) {
|
||||
m.Cmdy(mdb.INSERT, ASSET, "", mdb.HASH, ACCOUNT, account)
|
||||
}
|
||||
func _asset_insert(m *ice.Message, account string, arg ...string) {
|
||||
msg := m.Cmd(mdb.SELECT, ASSET, "", mdb.HASH, ACCOUNT, 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])
|
||||
}
|
||||
}
|
||||
_asset_create(m, account)
|
||||
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)
|
||||
}
|
||||
func _asset_modify(m *ice.Message, account, id, field, value string, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, ASSET, _sub_key(m, account), mdb.LIST, kit.MDB_ID, id, field, value, arg)
|
||||
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, arg)
|
||||
}
|
||||
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)
|
||||
}
|
||||
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) {
|
||||
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:
|
||||
m.Cmdy(mdb.INPUTS, ASSET, "", mdb.HASH, ACCOUNT, value)
|
||||
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"
|
||||
TRANC = "tranc"
|
||||
BONUS = "bonus"
|
||||
CHECK = "check"
|
||||
)
|
||||
const ASSET = "asset"
|
||||
|
||||
@ -73,29 +111,22 @@ func init() {
|
||||
ASSET: {Name: ASSET, Help: "资产", Value: kit.Data(kit.MDB_SHORT, ACCOUNT)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
ASSET: {Name: "asset account id auto spend tranc bonus export import", Help: "资产", Action: map[string]*ice.Action{
|
||||
SPEND: {Name: "spend account amount time@date name text", Help: "消费", Hand: func(m *ice.Message, arg ...string) {
|
||||
_asset_create(m, arg[1])
|
||||
if amount := kit.Int(arg[3]); amount > 0 {
|
||||
arg[3] = kit.Format(-amount)
|
||||
}
|
||||
ASSET: {Name: "asset account id auto spend tranc bonus", Help: "资产", Action: map[string]*ice.Action{
|
||||
SPEND: {Name: "spend account name amount time@date text", Help: "支出", Hand: func(m *ice.Message, arg ...string) {
|
||||
_sub_amount(m, arg)
|
||||
_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) {
|
||||
_asset_create(m, arg[3])
|
||||
_asset_insert(m, arg[3], kit.Simple(kit.MDB_TYPE, "转入", kit.MDB_NAME, arg[1], arg[4:])...)
|
||||
|
||||
_asset_create(m, arg[1])
|
||||
if amount := kit.Int(arg[5]); amount > 0 {
|
||||
arg[5] = kit.Format(-amount)
|
||||
}
|
||||
_sub_amount(m, arg)
|
||||
_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) {
|
||||
_asset_create(m, arg[1])
|
||||
BONUS: {Name: "bonus account name amount time@date text", Help: "收入", Hand: func(m *ice.Message, arg ...string) {
|
||||
_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) {
|
||||
_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))
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
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) {
|
||||
_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) {
|
||||
if arg[0] == "run" {
|
||||
m.Cmdy(arg[1], arg[2:])
|
||||
return
|
||||
}
|
||||
if len(arg) > 0 {
|
||||
m.Cmdy(ctx.COMMAND, arg[0])
|
||||
return
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
_asset_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
|
||||
|
@ -3,7 +3,6 @@ package mall
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
const MALL = "mall"
|
||||
@ -12,150 +11,7 @@ var Index = &ice.Context{Name: MALL, Help: "贸易中心",
|
||||
Commands: map[string]*ice.Command{
|
||||
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() }},
|
||||
|
||||
"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
36
core/mall/salary.go
Normal 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)
|
||||
}
|
@ -1 +0,0 @@
|
||||
package mall
|
@ -1 +0,0 @@
|
||||
package team
|
@ -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)
|
||||
}
|
@ -5,7 +5,6 @@ import (
|
||||
"github.com/shylinux/icebergs/base/ctx"
|
||||
"github.com/shylinux/icebergs/base/gdb"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"time"
|
||||
@ -36,22 +35,11 @@ func init() {
|
||||
m.Set(ice.MSG_RESULT).Cmdy(PLAN, m.Option("scale"))
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
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) {
|
||||
_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"))
|
||||
}},
|
||||
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -59,7 +47,9 @@ func init() {
|
||||
m.Cmdy(arg[1], arg[2:])
|
||||
return
|
||||
}
|
||||
if len(arg) > 0 {
|
||||
m.Cmdy(ctx.COMMAND, arg[0])
|
||||
}
|
||||
}},
|
||||
|
||||
gdb.BEGIN: {Name: "begin", Help: "开始", Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -62,7 +62,7 @@ func _task_list(m *ice.Message, zone string, id string) {
|
||||
} else {
|
||||
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) {
|
||||
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)
|
||||
|
@ -9,12 +9,8 @@ const TEAM = "team"
|
||||
|
||||
var Index = &ice.Context{Name: TEAM, Help: "团队中心",
|
||||
Commands: map[string]*ice.Command{
|
||||
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_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() }},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
package wiki
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"strings"
|
||||
)
|
||||
|
||||
// 图形接口
|
||||
|
@ -15,9 +15,7 @@ const DATA = "data"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
DATA: {Name: DATA, Help: "数据表格", Value: kit.Data(
|
||||
"path", "usr/export", "regs", ".*\\.csv",
|
||||
)},
|
||||
DATA: {Name: DATA, Help: "数据表格", Value: kit.Data(kit.MDB_PATH, "usr/export", "regs", ".*\\.csv")},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
DATA: {Name: "data path auto", Help: "数据表格", Meta: kit.Dict(
|
||||
|
@ -13,20 +13,21 @@ const DRAW = "draw"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
DRAW: {Name: DRAW, Help: "思维导图", Value: kit.Data(
|
||||
"path", "", "regs", ".*\\.svg",
|
||||
)},
|
||||
DRAW: {Name: DRAW, Help: "思维导图", Value: kit.Data(kit.MDB_PATH, "", "regs", ".*\\.svg")},
|
||||
},
|
||||
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",
|
||||
), 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"))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if !_wiki_list(m, DRAW, kit.Select("./", path.Join(arg...))) {
|
||||
_wiki_show(m, DRAW, path.Join(arg...))
|
||||
if m.Result(0) == ice.ErrWarn {
|
||||
m.Set(ice.MSG_RESULT)
|
||||
}
|
||||
}
|
||||
}},
|
||||
},
|
||||
|
@ -12,20 +12,20 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
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{
|
||||
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",
|
||||
), Action: map[string]*ice.Action{
|
||||
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) {
|
||||
_wiki_list(m, FEEL, kit.Select("./", arg, 0))
|
||||
m.Sort(kit.MDB_TIME, "time_r")
|
||||
m.Option("_display", "")
|
||||
m.Option(ice.MSG_DISPLAY, "")
|
||||
m.SortTimeR(kit.MDB_TIME)
|
||||
}},
|
||||
},
|
||||
}, nil)
|
||||
|
@ -1,25 +1,27 @@
|
||||
package wiki
|
||||
|
||||
import (
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
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 {
|
||||
m.Option("prefix", path.Join(m.Option(ice.MSG_LOCAL), m.Conf(cmd, kit.META_PATH)))
|
||||
m.Option(nfs.DIR_ROOT, 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)))
|
||||
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" {
|
||||
// 目录列表
|
||||
m.Option(nfs.DIR_TYPE, nfs.DIR)
|
||||
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
|
||||
}
|
||||
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) {
|
||||
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))
|
||||
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)
|
||||
} 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]))
|
||||
@ -49,12 +53,8 @@ const WIKI = "wiki"
|
||||
|
||||
var Index = &ice.Context{Name: WIKI, Help: "文档中心",
|
||||
Commands: map[string]*ice.Command{
|
||||
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_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() }},
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,6 @@ package wiki
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/ctx"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/ssh"
|
||||
"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)
|
||||
cmds := kit.Split(text)
|
||||
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 {
|
||||
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")
|
||||
}
|
||||
data["feature"], data["inputs"] = cmd.Meta, cmd.List
|
||||
})
|
||||
|
||||
// 扩展参数
|
||||
@ -216,9 +208,7 @@ func _field_show(m *ice.Message, name, text string, arg ...string) {
|
||||
list := data["inputs"].([]interface{})
|
||||
for i := count; i < len(args); i++ {
|
||||
list = append(list, kit.Dict(
|
||||
"_input", "text",
|
||||
"name", "args",
|
||||
"value", args[i],
|
||||
"_input", "text", "name", "args", "value", args[i],
|
||||
))
|
||||
}
|
||||
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) {
|
||||
_option(m, BAIDU, name, text, arg...)
|
||||
|
||||
// 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) {
|
||||
@ -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) {
|
||||
m.Set(ice.MSG_RESULT)
|
||||
m.Option("render", "raw")
|
||||
m.Optionv(TITLE, map[string]int{})
|
||||
m.Optionv("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(TITLE, map[string]int{})
|
||||
m.Option("menu", map[string]interface{}{"list": []interface{}{}})
|
||||
|
||||
}
|
||||
|
||||
// 文件列表
|
||||
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
|
||||
m.Option(ice.MSG_ALIAS, m.Confv(WORD, "meta.alias"))
|
||||
m.Option(nfs.DIR_ROOT, _wiki_path(m, WORD))
|
||||
m.Cmdy(ssh.SOURCE, name)
|
||||
}
|
||||
|
||||
const (
|
||||
@ -374,7 +346,7 @@ func init() {
|
||||
VIDEO: {Name: VIDEO, Help: "视频", Value: kit.Data("template", video)},
|
||||
|
||||
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},
|
||||
CHAPTER: []interface{}{TITLE, CHAPTER},
|
||||
SECTION: []interface{}{TITLE, SECTION},
|
||||
@ -433,7 +405,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
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) {
|
||||
arg = _name(m, arg)
|
||||
@ -491,7 +463,7 @@ func init() {
|
||||
m.Cmdy(arg[0], "action", "run", arg[1:])
|
||||
}},
|
||||
}, 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
|
||||
}
|
||||
_word_show(m, arg[0])
|
||||
|
2
meta.go
2
meta.go
@ -117,7 +117,7 @@ func (m *Message) Push(key string, value interface{}, arg ...interface{}) *Messa
|
||||
|
||||
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 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_VALUE, kit.Format(value))
|
||||
break
|
||||
|
7
misc.go
7
misc.go
@ -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)
|
||||
|
||||
func (m *Message) AddCmd(cmd *Command) string {
|
||||
|
Loading…
x
Reference in New Issue
Block a user