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)), ",")))
}
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 {

View File

@ -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] {

View File

@ -26,6 +26,7 @@ const ( // MSG
MSG_ARGS = "_args"
MSG_CONTROL = "_control"
MSG_DISPLAY = "_display"
MSG_PROCESS = "_process"
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(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{

View File

@ -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",
},
),

View File

@ -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)))

View File

@ -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)
}},
},

View File

@ -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]))

View File

@ -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)
}},
},

View File

@ -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))

View File

@ -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
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/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) {

View File

@ -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)

View File

@ -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() }},
},
}

View File

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

View File

@ -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(

View File

@ -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)
}
}
}},
},

View File

@ -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)

View File

@ -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() }},
},
}

View File

@ -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])

View File

@ -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

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)
func (m *Message) AddCmd(cmd *Command) string {