1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 01:24:05 +08:00
This commit is contained in:
harveyshao 2021-07-27 17:01:49 +08:00
parent 7c0cc84652
commit 5dca043c24
11 changed files with 118 additions and 158 deletions

View File

@ -22,7 +22,7 @@ func init() {
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() }},
MISS: {Name: "miss name auto create", Help: "资料", Meta: kit.Dict("trans", kit.Dict("name", "姓名")), Action: map[string]*ice.Action{
MISS: {Name: "miss name auto create", Help: "资料", Meta: kit.Dict("_trans", kit.Dict("name", "姓名")), 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), "", mdb.HASH, arg)
}},

View File

@ -35,9 +35,7 @@ func init() {
m.Cmdy(ctx.COMMAND, arg)
}},
cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
if !m.Warn(!m.Right(arg), ice.ErrNotRight) {
m.Cmdy(arg[1:])
}
m.Cmdy(arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if kit.Contains(arg[1], ";") {

View File

@ -2,15 +2,13 @@ package mall
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
)
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 {
@ -28,29 +26,14 @@ func _sub_amount(m *ice.Message, arg []string) {
}
}
}
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, mdb.DETAIL)
defer m.PushAction(mdb.PLUGIN)
}
m.Cmdy(mdb.SELECT, ASSET, "", mdb.ZONE, account, id)
}
func _asset_check(m *ice.Message, account string) {
amount := 0
m.Option(mdb.FIELDS, "time,id,type,amount,name,text")
m.OptionFields(m.Conf(ASSET, kit.META_FIELD))
m.Option(kit.Keycb(mdb.SELECT), 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.Cmd(mdb.SELECT, ASSET, kit.KeyHash(account), mdb.LIST)
m.Cmdy(mdb.MODIFY, ASSET, "", mdb.HASH, ACCOUNT, account, AMOUNT, amount)
}
@ -59,24 +42,13 @@ func _asset_create(m *ice.Message, account string) {
}
func _asset_insert(m *ice.Message, account string, arg ...string) {
_asset_create(m, account)
m.Cmdy(mdb.INSERT, ASSET, _sub_key(m, account), mdb.LIST, arg)
m.Cmdy(mdb.INSERT, ASSET, kit.KeyHash(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 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,amount,name,text,extra")
m.Cmdy(mdb.EXPORT, ASSET, "", mdb.ZONE, file)
}
func _asset_import(m *ice.Message, file string) {
m.Option(mdb.FIELDS, "account")
m.Cmdy(mdb.IMPORT, ASSET, "", mdb.ZONE, file)
}
func _asset_inputs(m *ice.Message, field, value string) {
switch field {
case "pod", "extra.pod":
@ -87,19 +59,23 @@ func _asset_inputs(m *ice.Message, field, value string) {
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)
default:
m.Cmdy(mdb.INPUTS, ASSET, _sub_key(m, m.Option(ACCOUNT)), mdb.LIST, field, value)
m.Cmdy(mdb.INPUTS, ASSET, kit.KeyHash(m.Option(ACCOUNT)), mdb.LIST, field, value)
}
}
const (
ACCOUNT = "account"
AMOUNT = "amount"
COUNT = "count"
FROM = "from"
TO = "to"
SPEND = "spend"
TRANC = "tranc"
TRANS = "trans"
BONUS = "bonus"
CHECK = "check"
)
@ -108,15 +84,19 @@ const ASSET = "asset"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
ASSET: {Name: ASSET, Help: "资产", Value: kit.Data(kit.MDB_SHORT, ACCOUNT)},
ASSET: {Name: ASSET, Help: "资产", Value: kit.Data(
kit.MDB_SHORT, ACCOUNT, kit.MDB_FIELD, "time,id,type,amount,name,text",
)},
},
Commands: map[string]*ice.Command{
ASSET: {Name: "asset account id auto spend tranc bonus", Help: "资产", Action: map[string]*ice.Action{
ASSET: {Name: "asset account id auto spend trans bonus check", Help: "资产", Meta: kit.Dict(
"_trans", kit.Dict(ACCOUNT, "账户", AMOUNT, "金额", FROM, "转出", TO, "转入", "time", "时间", "name", "商家", "text", "备注"),
), 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) {
TRANS: {Name: "trans from to amount time@date text", Help: "转账", Hand: func(m *ice.Message, arg ...string) {
_asset_insert(m, arg[3], kit.Simple(kit.MDB_TYPE, "转入", kit.MDB_NAME, arg[1], arg[4:])...)
_sub_amount(m, arg)
_asset_insert(m, arg[1], kit.Simple(kit.MDB_TYPE, "转出", kit.MDB_NAME, arg[3], arg[4:])...)
@ -124,38 +104,63 @@ func init() {
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) {
CHECK: {Name: "check", Help: "核算", Hand: func(m *ice.Message, arg ...string) {
if m.Option(ACCOUNT) == "" {
m.Cmd(ASSET).Table(func(index int, value map[string]string, head []string) {
_asset_check(m, value[ACCOUNT])
})
m.ProcessRefresh30ms()
} else {
_asset_check(m, m.Option(ACCOUNT))
}
m.Toast("核算成功")
}},
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])
m.Cmdy(mdb.MODIFY, ASSET, "", mdb.ZONE, m.Option(ACCOUNT), m.Option(kit.MDB_ID), arg)
}},
mdb.EXPORT: {Name: "export file", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
_asset_export(m, m.Option(kit.MDB_FILE))
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(ACCOUNT, m.Conf(ASSET, kit.META_FIELD), kit.MDB_EXTRA)
m.Cmdy(mdb.EXPORT, ASSET, "", mdb.ZONE)
}},
mdb.IMPORT: {Name: "import file", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
_asset_import(m, m.Option(kit.MDB_FILE))
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(ACCOUNT)
m.Cmdy(mdb.IMPORT, ASSET, "", mdb.ZONE)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
_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.Simple(kit.Dict(arg))...)
m.Cmdy(mdb.MODIFY, ASSET, "", mdb.ZONE, m.Option(ACCOUNT), m.Option(kit.MDB_ID), 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
}
m.Cmdy(ctx.COMMAND, arg)
}},
cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_asset_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
amount, count := 0, 0
m.Fields(len(arg), "time,account,amount,count", m.Conf(ASSET, kit.META_FIELD))
if m.Cmdy(mdb.SELECT, ASSET, "", mdb.ZONE, arg); len(arg) == 0 {
m.PushAction(CHECK)
m.SortIntR(AMOUNT)
m.Table(func(index int, value map[string]string, head []string) {
amount += kit.Int(value[AMOUNT])
count += kit.Int(value[COUNT])
})
} else {
m.PushAction(mdb.PLUGIN)
m.Table(func(index int, value map[string]string, head []string) {
amount += kit.Int(value[AMOUNT])
count++
})
}
m.StatusTime(AMOUNT, amount, COUNT, count)
}},
},
})

View File

@ -1,36 +0,0 @@
package mall
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits"
)
func _beike_show(m *ice.Message, name, text string, arg ...string) {
}
func _beike_search(m *ice.Message, kind, name, text string) {
if kit.Contains(kind, kit.MDB_FOREACH) || kit.Contains(kind, BEIKE) {
m.PushSearchWeb(BEIKE, name)
}
}
const BEIKE = "beike"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
BEIKE: {Name: "beike", Help: "贝壳", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
Commands: map[string]*ice.Command{
BEIKE: {Name: "beike [name] word", Help: "百度", Action: map[string]*ice.Action{
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
_beike_search(m, arg[0], arg[1], arg[2])
}},
mdb.CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.INSERT, m.Prefix(BEIKE), "", mdb.HASH, arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_beike_show(m, arg[0], kit.Select(arg[0], arg[1]), arg[2:]...)
}},
}})
}

View File

@ -7,13 +7,13 @@ import (
const MALL = "mall"
var Index = &ice.Context{Name: MALL, Help: "贸易中心",
Commands: map[string]*ice.Command{
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() }},
},
}
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save()
}},
}}
func init() { web.Index.Register(Index, nil, ASSET, SALARY) }

View File

@ -28,8 +28,15 @@ func init() {
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.Fields(len(arg), "time,month,company,amount,income,tax")
m.Cmdy(mdb.SELECT, SALARY, "", mdb.HASH, "month", arg)
amount, income, tax := 0, 0, 0
m.Table(func(index int, value map[string]string, head []string) {
amount += kit.Int(value["amount"])
income += kit.Int(value["income"])
tax += kit.Int(value["tax"])
})
m.StatusTime("amount", amount, "income", income, "tax", tax)
}},
},
})

View File

@ -1,36 +0,0 @@
package mall
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
kit "github.com/shylinux/toolkits"
)
func _taobao_show(m *ice.Message, name, text string, arg ...string) {
}
func _taobao_search(m *ice.Message, kind, name, text string) {
if kit.Contains(kind, kit.MDB_FOREACH) || kit.Contains(kind, TAOBAO) {
m.PushSearchWeb(TAOBAO, name)
}
}
const TAOBAO = "taobao"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
TAOBAO: {Name: "taobao", Help: "淘宝", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TEXT)},
},
Commands: map[string]*ice.Command{
TAOBAO: {Name: "taobao [name] word", Help: "百度", Action: map[string]*ice.Action{
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
_taobao_search(m, arg[0], arg[1], arg[2])
}},
mdb.CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.INSERT, m.Prefix(TAOBAO), "", mdb.HASH, arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_taobao_show(m, arg[0], kit.Select(arg[0], arg[1]), arg[2:]...)
}},
}})
}

View File

@ -76,9 +76,7 @@ func init() {
Commands: map[string]*ice.Command{
FIELD: {Name: "field [name] cmd", Help: "插件", Action: map[string]*ice.Action{
cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
if !m.Warn(!m.Right(arg[1:]), ice.ErrNotRight, arg[1:]) {
m.Cmdy(arg[1:])
}
m.Cmdy(arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
arg = _name(m, arg)

View File

@ -65,7 +65,7 @@ func init() {
ice.Display("/plugin/local/wiki/word.js", WORD),
), Action: map[string]*ice.Action{
web.STORY: {Name: "story", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(arg[0], ctx.ACTION, cli.RUN, arg[1:])
m.Cmdy(arg[0], ctx.ACTION, cli.RUN, arg[2:])
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(nfs.DIR_REG, m.Conf(WORD, kit.Keym(kit.MDB_REGEXP)))

View File

@ -155,7 +155,7 @@ func Render(m *Message, cmd string, args ...interface{}) string {
list := []string{}
for _, k := range kit.Split(strings.Join(arg, ",")) {
list = append(list, fmt.Sprintf(`<input type="button" name="%s" value="%s">`,
k, kit.Select(k, kit.Value(m._cmd.Meta, kit.Keys("trans", k)))))
k, kit.Select(k, kit.Value(m._cmd.Meta, kit.Keys("_trans", k)))))
}
return strings.Join(list, "")
@ -348,6 +348,10 @@ func (m *Message) Status(arg ...interface{}) {
}
m.Option(MSG_STATUS, kit.Format(list))
}
func (m *Message) StatusTime(arg ...interface{}) {
m.Status(kit.MDB_TIME, m.Time(), arg, "cost", m.FormatCost())
}
func (m *Message) StatusTimeCount(arg ...interface{}) {
m.Status(kit.MDB_TIME, m.Time(), kit.MDB_COUNT, m.FormatSize(), arg, "cost", m.FormatCost())
}

46
type.go
View File

@ -79,6 +79,10 @@ func (c *Context) Cap(key string, arg ...interface{}) string {
return c.Caches[key].Value
}
func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action, arg ...string) *Message {
if k == "run" && m.Warn(!m.Right(arg), ErrNotRight, arg) {
return m
}
m.Log(LOG_CMDS, "%s.%s %s %d %v %s", c.Name, key, k, len(arg), arg, kit.FileLine(h.Hand, 3))
if len(h.List) > 0 && k != "search" {
order := false
@ -196,7 +200,7 @@ func (c *Context) Merge(s *Context) *Context {
if len(help) == 1 || help[1] == "" {
help = strings.SplitN(help[0], ":", 2)
}
kit.Value(v.Meta, kit.Keys("trans", k), help[0])
kit.Value(v.Meta, kit.Keys("_trans", k), help[0])
if len(help) > 1 {
kit.Value(v.Meta, kit.Keys("title", k), help[1])
}
@ -228,25 +232,41 @@ func (c *Context) Merge(s *Context) *Context {
return c
}
func (c *Context) split(key string, cmd *Command, name string) []interface{} {
const (
BUTTON = "button"
SELECT = "select"
TEXT = "text"
TEXTAREA = "textarea"
)
button, list := false, []interface{}{}
for _, v := range kit.Split(kit.Select("key", name), " ", " ")[1:] {
if key == "spend" {
fmt.Printf("what %v %v\n", key, v)
}
switch v {
case "text":
list = append(list, kit.List(kit.MDB_INPUT, TEXTAREA, kit.MDB_NAME, "text")...)
if key == "spend" {
fmt.Printf("what %v %v\n", key, list)
}
continue
case "page":
list = append(list, kit.List(kit.MDB_INPUT, "text", "name", "limit")...)
list = append(list, kit.List(kit.MDB_INPUT, "text", "name", "offend")...)
list = append(list, kit.List(kit.MDB_INPUT, "button", "name", "prev")...)
list = append(list, kit.List(kit.MDB_INPUT, "button", "name", "next")...)
list = append(list, kit.List(kit.MDB_INPUT, TEXT, kit.MDB_NAME, "limit")...)
list = append(list, kit.List(kit.MDB_INPUT, TEXT, kit.MDB_NAME, "offend")...)
list = append(list, kit.List(kit.MDB_INPUT, BUTTON, kit.MDB_NAME, "prev")...)
list = append(list, kit.List(kit.MDB_INPUT, BUTTON, kit.MDB_NAME, "next")...)
continue
case "auto":
list = append(list, kit.List(kit.MDB_INPUT, "button", "name", "查看", "value", "auto")...)
list = append(list, kit.List(kit.MDB_INPUT, "button", "name", "返回")...)
list = append(list, kit.List(kit.MDB_INPUT, BUTTON, kit.MDB_NAME, "查看", kit.MDB_VALUE, "auto")...)
list = append(list, kit.List(kit.MDB_INPUT, BUTTON, kit.MDB_NAME, "返回")...)
button = true
continue
}
ls, value := kit.Split(v, " ", ":=@"), ""
item := kit.Dict(kit.MDB_INPUT, kit.Select("text", "button", button))
if kit.Value(item, kit.MDB_NAME, ls[0]); item[kit.MDB_INPUT] == "text" {
item := kit.Dict(kit.MDB_INPUT, kit.Select(TEXT, BUTTON, button))
if kit.Value(item, kit.MDB_NAME, ls[0]); item[kit.MDB_INPUT] == TEXT {
kit.Value(item, kit.MDB_VALUE, kit.Select("@key", "auto", strings.Contains(name, "auto")))
}
@ -254,10 +274,10 @@ func (c *Context) split(key string, cmd *Command, name string) []interface{} {
switch ls[i] {
case ":":
switch kit.Value(item, kit.MDB_INPUT, ls[i+1]); ls[i+1] {
case "textarea":
case TEXTAREA:
kit.Value(item, "style.width", "360")
kit.Value(item, "style.height", "60")
case "button":
case BUTTON:
kit.Value(item, kit.MDB_VALUE, "")
button = true
}
@ -266,7 +286,7 @@ func (c *Context) split(key string, cmd *Command, name string) []interface{} {
vs := strings.Split(ls[i+1], ",")
kit.Value(item, "values", vs)
kit.Value(item, kit.MDB_VALUE, vs[0])
kit.Value(item, kit.MDB_INPUT, "select")
kit.Value(item, kit.MDB_INPUT, SELECT)
if kit.Value(item, kit.MDB_NAME) == "scale" {
kit.Value(item, kit.MDB_VALUE, "week")
}
@ -275,7 +295,7 @@ func (c *Context) split(key string, cmd *Command, name string) []interface{} {
}
case "@":
if len(ls) > i+1 {
if kit.Value(item, kit.MDB_INPUT) == "button" {
if kit.Value(item, kit.MDB_INPUT) == BUTTON {
kit.Value(item, kit.MDB_ACTION, ls[i+1])
} else {
kit.Value(item, kit.MDB_VALUE, "@"+ls[i+1]+"="+value)