This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-09-27 23:58:12 +08:00
parent 146e346579
commit fb083a6303
46 changed files with 463 additions and 644 deletions

View File

@ -9,12 +9,9 @@ import (
type allow struct {
Table
user user
apply apply
event event
portal Portal
order string `data:"503"`
role string `data:"creator"`
role string `data:"leader"`
create string `name:"create apply_uid* place_uid* user_uid* status*"`
reject string `name:"reject" role:"void"`
approve string `name:"approve" role:"void"`
@ -23,48 +20,53 @@ type allow struct {
func (s allow) Create(m *ice.Message, arg ...string) {
s.Insert(m.Spawn(), arg...)
s.GetCommandUID(m)
m.Option(model.COMMAND_UID, CommandUID(m, m.PrefixKey()))
s.SendMessage(m, m.Option(model.FROM_USER_UID), "")
s.sendTemplate(m, m.Trans("role allow process", "权限审批 请处理"))
s.SendTemplate(m, "", "", m.Trans("please allow", "权限审批 请处理"))
}
func (s allow) ApplyQRCode(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, qrcode{}), m.ActionKey(), arg)
}
func (s allow) List(m *ice.Message, arg ...string) {
s.Tables(m, s.apply, "left join users on applies.user_uid = users.uid").FieldsWithCreatedAT(m, s.apply,
s.AS(s.Key(s, model.UID), model.ALLOW_UID), model.ALLOW_STATUS, s.AS(s.Key(s.apply, model.ROLE), s.Keys(s.UserPlace, model.ROLE)),
model.BEGIN_TIME, model.END_TIME, s.Key(s, model.PLACE_UID), s.Key(s.apply, model.USER_UID),
s.Tables(m, s.apply).FieldsWithCreatedAT(m, s.apply,
s.Key(s.apply, model.USER_UID),
s.AS(s.Key(s.apply, model.ROLE), s.Keys(s.UserPlace, model.ROLE)), model.BEGIN_TIME, model.END_TIME,
s.AS(s.Key(s, model.UID), model.ALLOW_UID), model.ALLOW_STATUS,
)
if len(arg) == 1 {
s.Select(m, s.Key(s, model.USER_UID), m.Option(model.USER_UID), s.Key(s, model.PLACE_UID), arg[0])
} else if len(arg) == 2 {
s.SelectDetail(m, s.Key(s, model.USER_UID), m.Option(model.USER_UID), s.Key(s, model.PLACE_UID), arg[0], s.Key(s.apply, model.UID), arg[1])
} else {
return
}
s.Select(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID)).Action(s.ApplyQRCode)
if m.Length() == 0 {
m.Cmdy(s.Prefix(m, qrcode{}), s.ApplyQRCode, arg)
return
}
} else if len(arg) == 2 {
s.SelectDetail(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID), s.Key(s.apply, model.UID), arg[1])
m.Table(func(value ice.Maps) {
if AllowStatus(kit.Int(value[model.ALLOW_STATUS])) != AllowCreate {
s.DoneMessage(m)
}
})
} else {
return
}
m.Table(func(value ice.Maps) {
if AllowStatus(kit.Int(value[model.ALLOW_STATUS])) == AllowCreate {
m.PushButton(s.Reject, s.Approve)
} else {
m.PushButton()
s.DoneMessage(m)
}
}).Action(s.ApplyQRCode)
s.RenameAppend(m, model.PLACE_UID, s.Keys(s.Place, model.UID))
s.SelectJoin(m, s.Place, model.NAME, model.TYPE)
})
s.SelectJoinUser(m)
s.DisplayBase(m, "")
}
func (s allow) Reject(m *ice.Message, arg ...string) {
s.process(m, AllowCreate, AllowRejected, "❌", m.Trans("role allow rejected", "权限审批 已驳回"))
s.process(m, AllowCreate, AllowRejected, "❌", m.Trans("allow rejected", "权限审批 已驳回"))
}
func (s allow) Approve(m *ice.Message, arg ...string) {
s.process(m, AllowCreate, AllowApproved, "✅", m.Trans("role allow approved", "权限审批 已通过"))
s.process(m, AllowCreate, AllowApproved, "✅", m.Trans("allow approved", "权限审批 已通过"))
}
func init() { ice.TeamCtxCmd(allow{Table: newTable()}) }
func (s allow) process(m *ice.Message, from, to AllowStatus, icon string, title string) {
if s.changeStatus(m, from, to); m.IsErr() {
return
@ -73,22 +75,15 @@ func (s allow) process(m *ice.Message, from, to AllowStatus, icon string, title
s.RecordEvent(m, kit.JoinWord(icon, title, kit.Cut(m.Option(model.UID), 6), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
s.DoneMessage(m)
}
func init() { ice.TeamCtxCmd(allow{Table: newTable()}) }
func (s allow) changeStatus(m *ice.Message, from, todo AllowStatus, arg ...string) *ice.Message {
func (s allow) changeStatus(m *ice.Message, from, to AllowStatus, arg ...string) *ice.Message {
msg := s.Select(m.Spawn(), model.UID, m.Option(model.ALLOW_UID), model.USER_UID, m.Option(model.USER_UID))
if !m.WarnNotFound(msg.Length() == 0, m.Option(model.UID)) {
if !m.WarnNotFound(msg.Length() == 0, m.Option(model.ALLOW_UID)) {
if status := AllowStatus(kit.Int(msg.Append(model.STATUS))); !m.WarnNotValid(status != from, status.String()) {
s.Update(m, kit.Dict(model.STATUS, todo), model.UID, m.Option(model.ALLOW_UID))
s.Update(m, kit.Dict(model.STATUS, to), model.UID, m.Option(model.ALLOW_UID), model.USER_UID, m.Option(model.USER_UID))
}
}
return msg
}
func (s allow) sendTemplate(m *ice.Message, info string) *ice.Message {
s.SendTemplate(m, m.Option(model.USER_NAME), m.Append(model.USER_UID), info)
return m
}
type AllowStatus int

View File

@ -1,11 +1,9 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
var USER_PLACE_ROLE = msg.Option("_user_place_role"), STREET_NAME = msg.Option("_street_name"), ALLOW_STATUS = "allow_status"
can.onimport.myView(can, msg, function(value) { var status = value[ALLOW_STATUS]; return [
_init: function(can, msg) { var USER_PLACE_ROLE = msg.Option("_user_place_role")
can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.user_name, can.onimport.textView(can, value, USER_PLACE_ROLE), can.onimport.titleAction(can, value)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value, ALLOW_STATUS)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value)]},
{view: html.STATUS, list: [value.begin_time.split(" ")[0], value.end_time.split(" ")[0]]},
{view: html.STATUS, list: [value.city_name, value[STREET_NAME]]},
] })
},
})

View File

@ -9,21 +9,17 @@ import (
type apply struct {
Table
user user
event event
portal Portal
order string `data:"502"`
role string `data:"creator"`
role string `data:"leader"`
create string `name:"create user_place_role*:select begin_time:select@date end_time:select@date" role:"void"`
cancel string `name:"cancel" role:"void"`
submit string `name:"submit" role:"void"`
}
func (s apply) Init(m *ice.Message, arg ...string) {
USER_PLACE_ROLE := s.Keys(s.UserPlace, model.ROLE)
m.Design(s.Create, "", kit.JoinWord(USER_PLACE_ROLE+"*:select", "begin_time:select@date", "end_time:select@date"))
s.Table.Init(m, arg...)
place_uid, user_place_role := s.Keys(s.Place, model.UID), s.Keys(s.UserPlace, model.ROLE)
m.Design(s.Create, "", user_place_role+"*:select")
m.Design(s.List, "", kit.JoinWord(place_uid, model.UID, ice.AUTO))
}
func (s apply) Inputs(m *ice.Message, arg ...string) {
s.UserPlace.Inputs(m, arg...)
@ -31,37 +27,31 @@ func (s apply) Inputs(m *ice.Message, arg ...string) {
func (s apply) Create(m *ice.Message, arg ...string) {
PLACE_UID, USER_PLACE_ROLE := s.Keys(s.Place, model.UID), s.Keys(s.UserPlace, model.ROLE)
arg = kit.TransArgKeys(arg, PLACE_UID, model.PLACE_UID, USER_PLACE_ROLE, model.ROLE)
s.Insert(m, kit.Simple(model.PLACE_UID, m.Option(PLACE_UID), arg, m.OptionSimple(model.USER_UID), model.STATUS, ApplyCreate)...)
s.Insert(m, kit.Simple(arg, model.PLACE_UID, m.Option(PLACE_UID), m.OptionSimple(model.USER_UID))...)
m.ProcessRewrite(model.UID, m.Result())
}
func (s apply) List(m *ice.Message, arg ...string) {
s.Tables(m).FieldsWithCreatedAT(m, s, model.APPLY_STATUS,
s.AS(s.Key(s, model.ROLE), s.Keys(s.UserPlace, model.ROLE)),
model.BEGIN_TIME, model.END_TIME, model.PLACE_UID, model.USER_UID,
s.FieldsWithCreatedAT(m, s,
model.USER_UID, model.APPLY_STATUS,
s.AS(s.Key(s, model.ROLE), s.Keys(s.UserPlace, model.ROLE)), model.BEGIN_TIME, model.END_TIME,
)
if len(arg) == 1 {
s.Select(m, model.USER_UID, m.Option(model.USER_UID), model.PLACE_UID, arg[0])
s.Select(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID))
} else if len(arg) == 2 {
s.SelectDetail(m, model.USER_UID, m.Option(model.USER_UID), model.PLACE_UID, arg[0], s.Key(s, model.UID), arg[1])
s.SelectDetail(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID), model.UID, arg[1])
m.Table(func(value ice.Maps) {
switch ApplyStatus(kit.Int(m.Append(model.APPLY_STATUS))) {
case ApplyCreate:
m.PushButton(s.Cancel, s.Submit)
case ApplySubmit:
m.Echo("请让管理员扫码或等待审批")
m.EchoQRCode(s.portal.Link(m, arg[0], s.Prefix(m, allow{}), arg[1]))
m.EchoQRCode(s.Link(m, arg[0], s.Prefix(m, allow{}), arg[1])).Echo("请让管理员扫码或等待审批")
case ApplyRejected, ApplyApproved:
s.DoneMessage(m)
}
})
} else {
return
}
m.Table(func(value ice.Maps) {
if ApplyStatus(kit.Int(value[model.APPLY_STATUS])) == ApplyCreate {
m.PushButton(s.Cancel, s.Submit)
} else {
m.PushButton()
}
})
s.RenameAppend(m, model.PLACE_UID, s.Keys(s.Place, model.UID))
s.SelectJoin(m, s.Place, model.NAME, model.TYPE)
s.SelectJoinUser(m)
s.DisplayBase(m, "")
}
@ -77,44 +67,42 @@ func (s apply) Submit(m *ice.Message, arg ...string) {
switch UserPlaceRole(kit.Int(msg.Append(model.ROLE))) {
case UserPlaceLandlord:
role = UserPlaceCreator
case UserPlaceTenant, UserPlaceAdmin:
default:
role = UserPlaceLandlord
}
msg = m.Cmd(s.UserPlace, s.Select, m.OptionSimple(s.Keys(s.Place, model.UID)), model.ROLE, role)
if m.WarnNotFound(msg.Length() == 0, role.String()) {
return
}
s.PlaceInfo(m)
m.Option(model.FROM_USER_UID, m.Option(model.USER_UID))
m.Cmd(s.Prefix(m, allow{}), s.Create, model.APPLY_UID, m.Option(model.UID), model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)), msg.AppendSimple(model.USER_UID), model.STATUS, AllowCreate)
s.RecordEvent(m, kit.JoinWord("🕑", m.Trans("role apply submit", "权限申请 已提交"), kit.Cut(m.Option(model.UID), 6), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
s.RecordEvent(m, kit.JoinWord("🕑", m.Trans("apply submit", "权限申请 已提交"), kit.Cut(m.Option(model.UID), 6), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
s.SendMessage(m, msg.Append(model.USER_UID), m.Option(model.USER_UID))
}
func (s apply) Reject(m *ice.Message, arg ...string) {
msg := s.changeStatus(m, ApplySubmit, ApplyRejected)
s.sendTemplate(msg, m.Trans("role apply rejected", "权限申请 已驳回"))
s.SendTemplate(msg, "", "", m.Trans("apply rejected", "权限申请 已驳回"))
}
func (s apply) Approve(m *ice.Message, arg ...string) {
msg := s.changeStatus(m, ApplySubmit, ApplyApproved)
m.Cmd(s.UserPlace, s.Insert, msg.AppendSimple(model.USER_UID, model.ROLE), s.Keys(s.Place, model.UID), msg.Append(model.PLACE_UID))
s.sendTemplate(msg, m.Trans("role apply approved", "权限申请 已通过"))
if msg.IsErr() {
return
}
m.Cmd(s.UserPlace, s.Insert, s.Keys(s.Place, model.UID), msg.Append(model.PLACE_UID), msg.AppendSimple(model.USER_UID, model.ROLE))
s.SendTemplate(msg, "", "", m.Trans("apply approved", "权限申请 已通过"))
}
func init() { ice.TeamCtxCmd(apply{Table: newTable()}) }
func (s apply) changeStatus(m *ice.Message, from, todo ApplyStatus, arg ...string) *ice.Message {
func (s apply) changeStatus(m *ice.Message, from, to ApplyStatus, arg ...string) *ice.Message {
msg := s.Select(m.Spawn(), m.OptionSimple(model.UID)...)
if !m.WarnNotFound(msg.Length() == 0, m.Option(model.UID)) {
if status := ApplyStatus(kit.Int(msg.Append(model.STATUS))); !m.WarnNotValid(status != from, status.String()) {
s.Update(m, kit.Dict(model.STATUS, todo), m.OptionSimple(model.UID)...)
s.Update(m, kit.Dict(model.STATUS, to), m.OptionSimple(model.UID)...)
}
}
return msg
}
func (s apply) sendTemplate(m *ice.Message, info string) *ice.Message {
s.SendTemplate(m, "", m.Append(model.USER_UID), info)
return m
}
type ApplyStatus int

View File

@ -1,19 +1,16 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
var USER_PLACE_ROLE = msg.Option("_user_place_role"), STREET_NAME = msg.Option("_street_name"), APPLY_STATUS = "apply_status"
can.onimport.myView(can, msg, function(value) { var status = value[APPLY_STATUS]; return [
_init: function(can, msg) { var USER_PLACE_ROLE = msg.Option("_user_place_role")
can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.user_name, can.onimport.textView(can, value, USER_PLACE_ROLE)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can,value, APPLY_STATUS)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value)]},
{view: html.STATUS, list: [value.begin_time.split(" ")[0], value.end_time.split(" ")[0]]},
{view: html.STATUS, list: [value.city_name, value[STREET_NAME]]},
] })
if (msg.Length() == 0) { can.onappend.style(can, html.FORM)
var target = can.page.Append(can, can._output, [{view: html.CODE, list: [{view: [mdb.INFO, "", "请创建权限申请"]}]}])._target
can.run({}, [ctx.ACTION, mdb.INPUTS, USER_PLACE_ROLE], function(msg) { msg.Table(function(value) {
can.onappend.input(can, {type: html.BUTTON, name: value.name, style: value[USER_PLACE_ROLE] == "2"? html.DANGER: html.NOTICE, value: "我是"+can.user.trans(can, value.name, null, "value."+USER_PLACE_ROLE), onclick: function(event) {
can.run(can.request(event, {_handle: ice.TRUE}), [ctx.ACTION, mdb.CREATE, USER_PLACE_ROLE, value[USER_PLACE_ROLE]])
if (msg.Length() == 0) { var target = can.page.Append(can, can._output, [{view: html.CODE, list: [{view: [mdb.INFO, "", "请创建权限申请"]}]}])._target
can.runAction({}, mdb.INPUTS, [USER_PLACE_ROLE], function(msg) { msg.Table(function(value) {
can.onappend.input(can, {type: html.BUTTON, name: value.name, value: "我是"+can.user.trans(can, value.name, null, "value."+USER_PLACE_ROLE), style: value[USER_PLACE_ROLE] == "2"? html.DANGER: html.NOTICE, onclick: function(event) {
can.runAction(event, mdb.CREATE, [USER_PLACE_ROLE, value[USER_PLACE_ROLE]])
}}, "", target)
}) })
}) }), can.onappend.style(can, html.FORM)
}
},
})

View File

@ -10,18 +10,18 @@ import (
type city struct {
Table
list string `name:"list city_name auto" role:"void"`
authCreate string `name:"authCreate city_name* city_info company_name*" role:"tech"`
authCreate string `name:"authCreate" role:"tech"`
}
func (s city) Init(m *ice.Message, arg ...string) {
cmdPortal[m.PrefixKey()] = api.GONGANXITONG_PORTAL
}
func (s user) Init(m *ice.Message, arg ...string) {
cmdPortal[m.PrefixKey()] = api.GONGANXITONG_PORTAL
}
func (s street) Init(m *ice.Message, arg ...string) {
cmdPortal[m.PrefixKey()] = api.GONGANXITONG_PORTAL
}
func (s city) Init(m *ice.Message, arg ...string) {
cmdPortal[m.PrefixKey()] = api.GONGANXITONG_PORTAL
}
func (s city) FindOrCreateByName(m *ice.Message, arg ...string) {
if msg := m.Cmd(s, s.Select, model.NAME, arg[1]); msg.Length() == 0 {
msg := m.Cmd(s, s.Insert, model.NAME, arg[1])
@ -34,13 +34,13 @@ func (s city) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
s.Select(m).Action()
} else if len(arg) == 1 {
s.Select(m, model.NAME, arg[0]).Action()
s.SelectDetail(m, model.NAME, arg[0])
if m.Append(model.AUTH_UID) == "" && m.IsTech() {
m.EchoInfoButton("请申请城市认证", s.AuthCreate)
m.EchoInfoButton(m.Trans("please auth city", "请申请城市认证"), s.AuthCreate)
}
}
}
func (s city) AuthCreate(m *ice.Message, arg ...string) {
s.Table.AuthCreate(m, m.Option(model.CITY_NAME), m.Option(model.COMPANY_NAME), 1, m.Option(model.CITY_NAME), m.Option(model.CITY_INFO), model.NAME, m.Option(model.CITY_NAME))
s.Table.AuthCreate(m, 1, "")
}
func init() { ice.TeamCtxCmd(city{}) }

View File

@ -15,26 +15,29 @@ import (
type command struct {
Table
service service
modify string `name:"modify service_uid icon name index"`
modify string `name:"modify service_uid index name icon"`
}
func CommandUID(m *ice.Message, cmd string) string {
return kit.Hashs(m.Option(model.SERVICE_UID), cmd)
}
func (s command) Modify(m *ice.Message, arg ...string) {
uid := kit.Hashs(m.Option(model.SERVICE_UID), m.Option(model.INDEX))
uid := CommandUID(m, m.Option(model.INDEX))
if s.Select(m.Spawn(), model.UID, uid).Length() == 0 {
s.Insert(m, kit.Simple(model.UID, uid, m.OptionSimple(model.SERVICE_UID, model.INDEX))...)
}
s.Insert(m, kit.Simple(arg, model.UID, uid)...)
} else {
s.Update(m, kit.Dict(arg), model.UID, uid)
}
m.SetResult().Echo(uid)
}
func (s command) Autogen(m *ice.Message, arg ...string) {
space := map[string][]string{}
portal := map[string][]string{}
space, portal := map[string][]string{}, map[string][]string{}
s.List(m).Table(func(value ice.Maps) {
if strings.HasSuffix(value[model.INDEX], ".allow") {
space[value[model.SPACE]] = append(space[value[model.SPACE]], strings.ReplaceAll(value[model.INDEX], ".allow", ".portal"))
}
space[value[model.SPACE]] = append(space[value[model.SPACE]], value[model.INDEX])
portal[value["portal"]] = append(portal[value["portal"]], value[model.INDEX])
portal[value[model.PORTAL]] = append(portal[value[model.PORTAL]], value[model.INDEX])
})
for p, v := range space {
nfs.Create(m.Message, "src/api/"+p+".go", func(w io.Writer) {
@ -44,48 +47,35 @@ func (s command) Autogen(m *ice.Message, arg ...string) {
}
})
}
return
nfs.Create(m.Message, "src/api/space.go", func(w io.Writer) {
fmt.Fprintf(w, "package api\n\n")
fmt.Fprintf(w, "var Space = map[string]string{\n")
for p, v := range space {
for _, v := range v {
fmt.Fprintf(w, "\"%s\": \"%s\",\n", v, p)
defer fmt.Fprintf(w, "}\n")
for space, cmd := range space {
kit.For(cmd, func(cmd string) { fmt.Fprintf(w, "\"%s\": \"%s\",\n", cmd, space) })
}
}
fmt.Fprintf(w, "}\n")
})
nfs.Create(m.Message, "src/api/portal.go", func(w io.Writer) {
fmt.Fprintf(w, "package api\n\n")
fmt.Fprintf(w, "var Portal = map[string]string{\n")
for p, v := range portal {
for _, v := range v {
fmt.Fprintf(w, "\"%s\": \"%s\",\n", v, p)
defer fmt.Fprintf(w, "}\n")
for portal, cmd := range portal {
kit.For(cmd, func(cmd string) { fmt.Fprintf(w, "\"%s\": \"%s\",\n", cmd, portal) })
}
}
fmt.Fprintf(w, "}\n")
})
}
func (s command) Cache(m *ice.Message, arg ...string) *ice.Message {
kit.For(cmdPortal, func(k, v string) {
m.Push(model.SPACE, cmdSpace[k])
m.Push(model.PORTAL, v)
m.Push(model.INDEX, k)
})
func (s command) Cache(m *ice.Message, arg ...string) {
kit.For(cmdPortal, func(k, v string) { m.Push(model.SPACE, cmdSpace[k]).Push(model.PORTAL, v).Push(model.INDEX, k) })
m.Sort("space,portal,index")
return m
}
func (s command) List(m *ice.Message, arg ...string) *ice.Message {
s.Tables(m, s.service).Fields(m,
s.Key(s, model.UPDATED_AT), s.Key(s, model.INDEX),
s.AS(s.Key(s.service, model.INDEX), "portal"),
s.AS(model.NODENAME, model.SPACE),
).Orders(m, "`space`,`index`").Limit(m, 300)
s.Select(m).Action(s.Autogen, s.Cache)
s.Tables(m, s.service).Fields(m, s.Key(s, model.UPDATED_AT),
s.Key(s, model.INDEX), s.AS(s.Key(s.service, model.INDEX), model.PORTAL), s.AS(model.NODENAME, model.SPACE),
).Orders(m, "`space`,`index`").Limit(m, 300).Select(m).Action(s.Cache, s.Autogen)
return m
}
func init() { ice.TeamCtxCmd(command{}) }
var cmdPortal = map[string]string{}
var cmdSpace = map[string]string{}
func init() { ice.TeamCtxCmd(command{}) }

View File

@ -12,6 +12,14 @@ func (s comment) Create(m *ice.Message, arg ...string) {
s.Insert(m, append(arg, m.OptionSimple(model.MARKET_UID, model.USER_UID)...)...)
}
func (s comment) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.MARKET_UID, arg[0])
} else if len(arg) == 2 {
s.SelectDetail(m, model.MARKET_UID, arg[0], model.UID, arg[1])
} else {
return
}
s.SelectJoinUser(m)
}
func init() { ice.TeamCtxCmd(comment{}) }

View File

@ -45,13 +45,13 @@ type Table struct {
}
func (s Table) LoadTrans(m *ice.Message, arg ...string) {
base := kit.FileLine(1, 100)
p := kit.FileLine(1, 100)
if m.PrefixKey() != api.GONGANXITONG_PORTAL {
ice.LoadTrans(m.Spawn(kit.Dict("_template", path.Join(path.Dir(base), "portal.json"))).Message, m.CommandKey(), m.GetCommand().Command)
ice.LoadTrans(m.Spawn(kit.Dict("_template", path.Join(path.Dir(p), "portal.json"))).Message, m.CommandKey(), m.GetCommand().Command)
}
h := ctx.GetCmdFile(m.Message, m.PrefixKey())
kit.If(strings.HasPrefix(h, "/p/src/"), func() { h = strings.TrimPrefix(h, "/p/") })
if path.Dir(h) != path.Dir(base) && m.CommandKey() != web.PORTAL {
if path.Dir(h) != path.Dir(p) && m.CommandKey() != web.PORTAL {
ice.LoadTrans(m.Spawn(kit.Dict("_template", path.Join(path.Dir(h), "portal.json"))).Message, m.CommandKey(), m.GetCommand().Command)
}
}
@ -59,12 +59,8 @@ func (s Table) Init(m *ice.Message, arg ...string) {
s.LoadTrans(m, arg...)
s.Table.Init(m, arg...)
}
func (s Table) BeforeMigrate(m *ice.Message, arg ...string) {
s.Table.BeforeMigrate(m, arg...)
}
func (s Table) AfterMigrate(m *ice.Message, arg ...string) {
kit.If(m.GetCommand().Icon, func() { Portal{}.Show(m) })
s.Table.AfterMigrate(m, arg...)
}
func (s Table) Inputs(m *ice.Message, arg ...string) {
switch arg[0] {
@ -115,7 +111,7 @@ func (s Table) ValueModel(m *ice.Message, action ice.Any, arg ...string) *ice.Me
defer m.Options(db.MODEL, m.Configv(db.MODEL)).Set(ice.MSG_OPTION, db.MODEL)
defer m.Options(db.TARGET, kit.Select(m.CommandKey(), m.Config(db.MODELS))).Set(ice.MSG_OPTION, db.TARGET)
kit.For(db.CommonField, func(k string) { arg = kit.TransArgKeys(arg, s.Keys(m.Option(db.TARGET), k), k) })
return m.Options(arg).Cmdy(m.Prefix(web.PORTAL), action, arg)
return m.Options(arg).Cmdy(s.PrefixPortal(m), action, arg)
}
func (s Table) ValueCreate(m *ice.Message, arg ...string) {
s.ValueModel(m, s.ValueCreate, arg...)
@ -131,15 +127,14 @@ func (s Table) ValueModify(m *ice.Message, arg ...string) {
s.RecordEventWithName(m, "")
}
func (s Table) ValueList(m *ice.Message, arg []string, fields ...ice.Any) *ice.Message {
defer s.SelectJoinUser(m)
if len(arg) > 0 {
kit.If(len(fields) == 0, func() { fields = kit.TransArgs(kit.Split(m.Config(mdb.FIELDS), ",", ",")) })
defer m.Options(db.FIELDS, fields).Set(ice.MSG_OPTION, db.FIELDS)
}
if s.ValueModel(m, s.ValueList, arg...); len(arg) > 0 {
if s.ValueModel(m, s.ValueList, arg...); len(arg) == 1 {
s.Button(m, "")
}
return m
return s.SelectJoinUser(m)
}
func (s Table) Create(m *ice.Message, arg ...string) { s.ValueCreate(m, arg...) }
func (s Table) Remove(m *ice.Message, arg ...string) { s.ValueRemove(m, arg...) }
@ -147,24 +142,28 @@ func (s Table) Modify(m *ice.Message, arg ...string) { s.ValueModify(m, arg...)
func (s Table) List(m *ice.Message, arg ...string) *ice.Message {
return s.ValueList(m, arg)
}
func (s Table) FieldsDefault(m *ice.Message, arg ...string) *ice.Message {
func (s Table) FieldsDefault(m *ice.Message, arg ...string) Table {
if m.Option(mdb.SELECT) == "" {
if fields := m.Config(mdb.FIELDS); fields != "" {
s.Table.FieldsWithCreatedAT(m, kit.Select(m.CommandKey(), m.Config(db.MODELS)), kit.TransArgs(kit.Split(fields, ",", ","))...)
}
}
return m
return s
}
func (s Table) LeftJoinValue(m *ice.Message, value, place ice.Any, arg ...string) string {
model := s.ToLower(kit.TypeName(value))
models := s.TableName(model)
_model := s.ToLower(kit.TypeName(place))
_models := s.TableName(_model)
return kit.Format("LEFT JOIN %s ON %s.%s_uid = %s.uid AND %s.user_uid = '%s'", models, models, _model, _models, models, m.Option("user_uid"))
}
func (s Table) Select(m *ice.Message, arg ...string) *ice.Message {
s.FieldsDefault(m)
s.Table.Select(m, arg...)
s.FieldsDefault(m).Table.Select(m, arg...)
kit.If(m.Length() > 0, func() { s.UserPlaceInit(m) })
return m
}
func (s Table) SelectDetail(m *ice.Message, arg ...string) *ice.Message {
s.FieldsDefault(m)
s.Table.SelectDetail(m, arg...)
return m
return s.FieldsDefault(m).Table.SelectDetail(m, arg...)
}
func (s Table) SelectJoinUser(m *ice.Message, arg ...string) *ice.Message {
kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME, model.AVATAR) })
@ -174,18 +173,30 @@ func (s Table) SelectJoinCity(m *ice.Message, arg ...string) *ice.Message {
kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME) })
return s.SelectJoin(m, city{}, arg...)
}
func (s Table) SelectJoinService(m *ice.Message, arg ...string) *ice.Message {
kit.If(len(arg) == 0, func() { arg = append(arg, model.NODENAME, model.INDEX) })
return s.SelectJoin(m, service{}, arg...)
}
func (s Table) SelectJoinAuth(m *ice.Message, arg ...string) *ice.Message {
kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME, model.AUTH_TYPE, model.AUTH_STATUS, model.DASHBOARD_UID) })
defer s.SaveBack(m, ice.MSG_USERPOD, ice.MSG_USERROLE)()
return s.SelectJoin(m, s.findSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), arg...)
}
func (s Table) RenameAppend(m *ice.Message, arg ...string) Table {
m.RenameAppend(arg...)
return s
func (s Table) SelectJoinRecent(m *ice.Message, PLACE_UID string, arg ...string) *ice.Message {
if m.Length() == 0 {
return m
}
kit.If(len(arg) == 0, func() { arg = append(arg, model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME) })
list := []string{}
m.Table(func(value ice.Maps) { kit.If(value[PLACE_UID], func(v string) { list = kit.AddUniq(list, v) }) })
msg := m.Spawn()
recents := msg.CmdMap(recent{}, s.SelectList, model.PLACE_UID, list, model.PLACE_UID)
m.Info("what %v", recents)
m.Table(func(value ice.Maps) {
recent := recents[value[PLACE_UID]]
kit.For(arg, func(k string) { m.Push(k, recent[k]) })
})
return m
}
func (s Table) SelectJoinService(m *ice.Message, arg ...string) *ice.Message {
kit.If(len(arg) == 0, func() { arg = append(arg, model.NODENAME, model.INDEX) })
return s.SelectJoin(m, service{}, arg...)
}
func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
m.RewriteAppend(func(value, key string, index int) string {
@ -215,6 +226,18 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
})
return m
}
func (s Table) Update(m *ice.Message, data ice.Map, arg ...string) {
if len(arg) == 0 {
arg = append(arg, model.UID, kit.Select(m.Option(model.UID), m.Option(s.Keys(m.CommandKey(), model.UID))))
}
s.Table.Update(m, data, arg...)
}
func (s Table) UpdateAuth(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.AUTH_UID, arg[0]), arg[1:]...)
}
func (s Table) UpdateField(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(arg[0], arg[1]), arg[2:]...)
}
func (s Table) UploadUpdate(m *ice.Message, field, uid string, arg ...string) {
if m.IsErr() {
return
@ -229,16 +252,6 @@ func (s Table) UploadCreate(m *ice.Message, field, uid string, arg ...string) {
p := m.UploadSave(path.Join(nfs.USR, kit.Select(field, m.Option("field")), uid) + nfs.PS)
s.Create(m, kit.Select(m.Option("field"), field), p, model.UID, uid)
}
func (s Table) Update(m *ice.Message, data ice.Map, arg ...string) {
data[model.OPERATOR] = m.Option(model.USER_UID)
s.Table.Update(m, data, arg...)
}
func (s Table) UpdateAuth(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.AUTH_UID, arg[0]), arg[1:]...)
}
func (s Table) UpdateField(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(arg[0], arg[1]), arg[2:]...)
}
func (s Table) ChangeStatus(m *ice.Message, place_uid, uid string, from, to int, arg ...string) *ice.Message {
msg := s.ValueList(m.Spawn(), []string{place_uid, uid}, model.STATUS)
if !m.WarnNotValid(msg.Length() == 0 || kit.Int(msg.Append(mdb.STATUS)) != int(from)) {
@ -249,7 +262,6 @@ func (s Table) ChangeStatus(m *ice.Message, place_uid, uid string, from, to int,
func (s Table) CheckRole(m *ice.Message, arg ...string) {
role := UserPlaceRole(s.UserPlaceRole(m))
m.WarnNotRight(!kit.IsIn(role.String(), append(arg, UserPlaceCreator.String())...), role.String())
m.Option(model.USER_ROLE, kit.Format(role))
}
func (s Table) IsVisitor(m *ice.Message) bool {
if role := kit.Int(m.Option(model.USER_ROLE)); role == 0 {
@ -270,19 +282,16 @@ func (s Table) IsWorker(m *ice.Message) bool {
return false
}
func (s Table) UserPlaceRole(m *ice.Message) int {
return kit.Int(m.Cmdy(s.Prefix(m, Portal{}), s.UserPlaceRole).Option(model.USER_ROLE))
return kit.Int(m.Cmdy(s.PrefixPortal(m), s.UserPlaceRole).Option(model.USER_ROLE))
}
func (s Table) UserPlaceInit(m *ice.Message, arg ...string) {
if m.Option(model.PLACE_INIT) == "" || m.PrefixKey() != m.Option(ice.MSG_INDEX) {
return
}
m.Cmd(s.Prefix(m, Portal{}), "placeCmd", "addCount", model.INIT, 1, m.Option(model.PLACE_UID), m.Option(model.PLACE_INIT))
}
func (s Table) PlaceInfo(m *ice.Message) {
m.Cmdy(s.Prefix(m, Portal{}), s.PlaceInfo)
m.Cmd(s.PrefixPortal(m), Portal{}.PlaceCmd, "addCount", model.INIT, 1, m.Option(model.PLACE_UID), m.Option(model.PLACE_INIT))
}
func (s Table) RecordEvent(m *ice.Message, info string, arg ...string) {
m.Cmd(s.Prefix(m, Portal{}), s.RecordEvent, info, arg)
m.Cmd(s.PrefixPortal(m), s.RecordEvent, info, arg)
}
func (s Table) RecordEventWithName(m *ice.Message, info string, arg ...string) {
uid := kit.Select(m.Result(), m.Option(model.UID))
@ -296,11 +305,21 @@ func (s Table) RecordEventWithName(m *ice.Message, info string, arg ...string) {
info = "🕑 " + info
}
})
s.RecordEvent(m, kit.JoinWord(info, kit.Cut(uid, 6), kit.Select(m.Option(model.TITLE), m.Option(model.NAME))), uid)
s.RecordEvent(m, kit.JoinWord(info, kit.Cut(uid, 6), kit.Select(m.Option(model.NAME), m.Option(model.TITLE))), uid)
}
func (s Table) MemberList(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, member{}), arg)
}
func (s Table) CityList(m *ice.Message, arg ...string) *ice.Message {
m.Cmdy(s.Prefix(m, city{}), arg).RenameAppend(model.NAME, model.CITY_NAME)
return m
}
func (s Table) AuthCreate(m *ice.Message, authType int, fromUID string, arg ...string) {
s.AutoCmdy(m, api.RENZHENGSHOUQUAN_PORTAL, Portal{}.PlaceCreate,
model.AUTH_NAME, kit.Select(m.Option(model.NAME), arg, 0), model.AUTH_INFO, kit.Select(m.Option(model.INFO), arg, 1),
model.AUTH_TYPE, authType, model.FROM_UID, kit.Select(ice.AUTO, fromUID))
s.Update(m, kit.Dict(m.OptionSimple(model.AUTH_UID)), arg...)
}
func (s Table) DashboardUpdate(m *ice.Message, arg ...string) {
if m.IsErr() {
return
@ -313,29 +332,16 @@ func (s Table) MarketInsert(m *ice.Message, arg ...string) {
func (s Table) ServiceList(m *ice.Message, arg ...string) *ice.Message {
return m.Cmd(s.Prefix(m, service{}), arg)
}
func (s Table) CityList(m *ice.Message, arg ...string) *ice.Message {
m.Cmdy(web.TEAM_GONGANXITONG_CITY, arg).RenameAppend(model.NAME, model.CITY_NAME)
return m
}
func (s Table) AuthCreate(m *ice.Message, cityName, companyName string, authType int, authName, authInfo string, arg ...string) {
m.Cmdy(api.RENZHENGSHOUQUAN_PORTAL, Portal{}.PlaceCreate, model.CITY_NAME, cityName, model.COMPANY_NAME, companyName,
model.AUTH_TYPE, authType, model.AUTH_NAME, authName, model.AUTH_INFO, authInfo)
s.Update(m, kit.Dict(m.OptionSimple(model.AUTH_UID)), arg...)
}
func (s Table) GetCommandUID(m *ice.Message) {
m.Options(m.Cmd(s.Prefix(m, Portal{}), Portal{}.CommandSelect, m.PrefixKey()).AppendSimple(model.COMMAND_UID))
m.Option(model.COMMAND_UID, CommandUID(m, m.PrefixKey()))
}
func (s Table) GetCommands(m *ice.Message, key string, arg ...string) []string {
m.Option(model.UID, kit.Select(m.Option(model.UID), m.Result()))
return kit.Simple(m.OptionSimple(key), ctx.ARGS, kit.Join(arg), m.OptionSimple(model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME))
}
func (s Table) SendMessage(m *ice.Message, from_user_uid, to_user_uid string, arg ...string) {
func (s Table) SendMessage(m *ice.Message, from, to string, arg ...string) {
if m.IsErr() {
return
}
m.Spawn(ice.Maps{db.DB: ""}).Cmd(s.Prefix(m, message{}), s.Create,
model.FROM_USER_UID, kit.Select(m.Option(model.USER_UID), from_user_uid), model.TO_USER_UID, kit.Select(m.Option(model.USER_UID), to_user_uid),
model.DETAIL_NAME, kit.Select(m.Option(model.NAME), m.Option(model.TITLE)), s.GetCommands(m, model.COMMAND_UID, arg...),
model.FROM_USER_UID, kit.Select(m.Option(model.USER_UID), from), model.TO_USER_UID, kit.Select(m.Option(model.USER_UID), to),
m.OptionSimple(model.COMMAND_UID), model.ARGS, kit.Join(arg),
)
}
func (s Table) DoneMessage(m *ice.Message, arg ...string) {
@ -347,7 +353,7 @@ func (s Table) SendTemplate(m *ice.Message, from, to, title string, arg ...strin
if m.IsErr() {
return
}
m.Cmd(s.Prefix(m, Portal{}), s.SendTemplate, m.PrefixKey(), from, to, title, arg)
m.Cmd(s.PrefixPortal(m), s.SendTemplate, m.PrefixKey(), from, to, title, arg)
}
func (s Portal) SendTemplate(m *ice.Message, arg ...string) {
name := kit.Select("", arg, 4)
@ -356,7 +362,7 @@ func (s Portal) SendTemplate(m *ice.Message, arg ...string) {
}
uid, place_uid := kit.Select(m.Option(model.UID), arg, 5), kit.Select("", arg, 6)
kit.If(place_uid == "", func() { place_uid = m.Option(s.Keys(s.Place, model.UID)) })
link := s.Link(m, place_uid, arg[0], uid)
link := m.Cmdx("", s.Link, place_uid, arg[0], uid)
s.AutoCmd(m, user{}, s.SendTemplate, arg[1], arg[2], link, kit.JoinWord(m.Option(model.PORTAL_NAME), arg[3]), name, kit.Cut(uid, 6))
}
func (s Table) Button(m *ice.Message, info string, arg ...ice.Any) *ice.Message {
@ -412,26 +418,6 @@ func (s Table) Prefix(m *ice.Message, target ice.Any) string {
func (s Table) PrefixPortal(m *ice.Message) string {
return m.Prefix(kit.TypeName(Portal{}))
}
func (s Table) ProcessPodCmd(m, msg *ice.Message, arg ...string) *ice.Message {
m.ProcessPodCmd(msg.Append(web.SPACE), msg.Append(ctx.INDEX), kit.Split(msg.Append(ctx.ARGS)))
m.Push("field.option", kit.Format(kit.Dict(arg)))
m.RewriteAppend(func(value, key string, index int) string {
kit.If(key == ctx.STYLE, func() { value = html.OUTPUT })
// kit.If(key == web.SPACE, func() { value = m.Appendv("_space")[index] })
return value
})
if msg.Append(web.SPACE) != "" {
m.Optionv(ice.FIELD_PREFIX, ctx.ACTION, ctx.RUN, kit.Join(kit.Slice(kit.Split(msg.Append(ctx.INDEX), "."), 0, -1), ".")+".portal", ctx.ACTION, ctx.RUN, msg.Append(ctx.INDEX))
}
return m
}
func (s Table) spaceCmd(m *ice.Message, space string, arg ...ice.Any) *ice.Message {
if space == ice.Info.NodeName {
return m.Cmd(arg...)
} else {
return m.Cmd(append([]ice.Any{web.SPACE, kit.Keys(ice.OPS, space)}, arg...)...)
}
}
func (s Table) findSpaceCmd(m *ice.Message, cmd ice.Any) ice.Any {
cmds := ice.GetTypeKey(cmd)
if space, ok := cmdSpace[cmds]; ok && space != ice.Info.NodeName {
@ -454,8 +440,19 @@ func (s Table) AutoCmdy(m *ice.Message, arg ...ice.Any) *ice.Message {
func (s Table) AutoCmd(m *ice.Message, arg ...ice.Any) *ice.Message {
return m.Cmd(append([]ice.Any{s.findSpaceCmd(m, arg[0])}, arg[1:]...)...)
}
func (s Table) ProcessPodCmd(m, msg *ice.Message, arg ...string) *ice.Message {
m.ProcessPodCmd(msg.Append(web.SPACE), msg.Append(ctx.INDEX), kit.Split(msg.Append(ctx.ARGS)))
m.RewriteAppend(func(value, key string, index int) string {
if key == "style" {
value = "output"
}
return value
})
m.Push("field.option", kit.Format(kit.Dict(arg)))
return m
}
func (s Table) Link(m *ice.Message, arg ...string) string {
return Portal{}.Link(m, arg...)
return m.Cmdx(s.PrefixPortal(m), s.Link, arg)
}
type Tables struct{ Table }
@ -483,8 +480,8 @@ func PortalCmd(portal ice.Any) {
_, cmd := ice.Cmd(kit.Keys(p, name), data)
cmd.RawHand = path.Join(path.Dir(h), name+".go")
cmd.Actions[ice.CTX_INIT].Hand = icebergs.MergeHand(func(m *icebergs.Message, arg ...string) {
mdb.Config(m, db.DOMAIN, kit.PathName(1))
m.Design(mdb.LIST, "", kit.JoinWord(table.Keys(table.Place, model.UID), model.UID, ice.AUTO))
mdb.Config(m, db.DOMAIN, kit.PathName(1))
}, cmd.Actions[ice.CTX_INIT].Hand)
}
cmd("portal", portal)

View File

@ -4,7 +4,7 @@ Volcanos(chat.ONIMPORT, {
PLACE_TYPE || can.core.List(msg.append, function(key) { can.base.endWith(key, "_type") && (PLACE_TYPE = key), can.base.endWith(key, "_role") && (USER_PLACE_ROLE = key) })
can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list:[value.title||value.name||value.user_name, can.onimport.textView(can, value, PLACE_TYPE), can.onimport.textView(can, value, USER_PLACE_ROLE)]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.company_name||value.place_name]},
{view: html.STATUS, list: [value.city_name, value.company_name||value.street_name, value.place_name]},
{view: html.STATUS, list: [value.uid && value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]},
value.address && {view: html.STATUS, list: [value.address]},
value.content && {view: html.OUTPUT, list: [value.content]},

View File

@ -8,8 +8,9 @@ import (
type domain struct {
Table
create string `name:"create name* info" role:"void"`
remove string `name:"remove" role:"void"`
create string `name:"create name* info" role:"tech"`
remove string `name:"remove" role:"tech"`
list string `name:"list domain_uid auto" role:"void"`
}
func (s domain) Create(m *ice.Message, arg ...string) { s.Insert(m, arg...) }
@ -17,13 +18,13 @@ func (s domain) Remove(m *ice.Message, arg ...string) { s.Delete(m, arg...) }
func (s domain) List(m *ice.Message, arg ...string) {
s.Fields(m, model.UID, model.NAME)
if len(arg) == 0 {
s.Select(m).RenameAppend(model.UID, model.DOMAIN_UID)
s.Select(m).RenameAppend(model.UID, model.DOMAIN_UID).Action()
} else if len(arg) == 1 {
s.Select(m)
} else if len(arg) == 2 {
s.Select(m, model.UID, arg[1])
s.SelectDetail(m, model.UID, arg[0])
}
if m.IsTech() {
m.PushAction(s.Remove).Action(s.Create)
}
m.PushAction(s.Remove)
}
func init() { ice.TeamCtxCmd(domain{}) }

View File

@ -2,38 +2,31 @@ package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/ctx"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
)
type event struct {
Table
user user
order string `data:"504"`
role string `data:"creator"`
role string `data:"leader"`
}
func (s event) List(m *ice.Message, arg ...string) {
s.Tables(m, s.user).FieldsWithCreatedAT(m, s,
s.Key(s, model.INFO),
s.Key(s, model.CITY_NAME), s.Key(s, model.STREET_NAME), s.Key(s, model.PLACE_NAME),
model.USER_NAME, model.USER_AVATAR,
)
s.FieldsWithCreatedAT(m, s, model.USER_UID, model.INFO)
if len(arg) == 1 {
s.Select(m, model.PLACE_UID, arg[0]).Action()
} else if len(arg) == 2 {
s.SelectDetail(m, model.PLACE_UID, arg[0], s.Key(s, model.UID), arg[1])
s.SelectDetail(m, model.PLACE_UID, arg[0], model.UID, arg[1])
} else {
return
}
s.SelectJoinUser(m)
s.DisplayBase(m, "")
}
func init() { ice.TeamCtxCmd(event{Table: newTable()}) }
func (s event) Record(m *ice.Message, info string, arg ...string) {
m.Cmd(s.Prefix(m, s), s.Insert, m.OptionSimple(model.COMMAND_UID, model.PLACE_UID, model.USER_UID), model.INFO, info,
m.OptionSimple(model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME), model.OPERATE, m.ActionKey(), ctx.ARGS, kit.Join(arg, ","))
m.Cmd(s.Prefix(m, s), s.Insert, m.OptionSimple(model.PLACE_UID, model.USER_UID), model.INFO, info)
}

View File

@ -25,18 +25,12 @@ type market struct {
}
func (s market) Create(m *ice.Message, arg ...string) {
s.Insert(m, append(arg, m.OptionSimple(
model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME,
model.ARGS, model.COMMAND_UID, model.PLACE_UID, model.USER_UID,
)...)...)
s.Insert(m, append(arg, m.OptionSimple(model.PLACE_UID, model.USER_UID, model.COMMAND_UID, model.ARGS)...)...)
}
func (s market) List(m *ice.Message, arg ...string) {
s.Tables(m, s.domain, s.command, s.service,
kit.Format("LEFT JOIN thumbs ON thumbs.market_uid = markets.uid AND thumbs.user_uid = '%s'", m.Option(model.USER_UID)),
kit.Format("LEFT JOIN favors ON favors.market_uid = favors.uid AND favors.user_uid = '%s'", m.Option(model.USER_UID)),
).FieldsWithCreatedAT(m, s, s.Key(s, model.USER_UID), model.TITLE, model.CONTENT,
s.Key(s, model.CITY_NAME), s.Key(s, model.STREET_NAME), s.Key(s, model.PLACE_NAME), model.SERVICE_NAME,
model.THUMB_STATUS, model.FAVOR_STATUS, model.THUMB_COUNT, model.COMMENT_COUNT, model.FAVOR_COUNT, model.SHARE_COUNT,
s.Tables(m, s.command, s.service, s.LeftJoinValue(m, s.thumb, s), s.LeftJoinValue(m, s.favor, s)).FieldsWithCreatedAT(m, s,
s.Key(s, model.USER_UID), model.PLACE_UID, model.SERVICE_NAME, model.TITLE, model.CONTENT,
model.THUMB_COUNT, model.COMMENT_COUNT, model.FAVOR_COUNT, model.SHARE_COUNT, model.THUMB_STATUS, model.FAVOR_STATUS,
s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS,
)
if len(arg) < 2 {
@ -52,9 +46,10 @@ func (s market) List(m *ice.Message, arg ...string) {
} else {
return
}
s.SelectJoinRecent(m, model.PLACE_UID)
s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
s.Display(m, "")
s.DisplayBase(m, "")
}
func (s market) ThumbToggle(m *ice.Message, arg ...string) {
m.OptionDefault(model.MARKET_UID, m.Option(model.UID))

View File

@ -14,15 +14,10 @@ Volcanos(chat.ONIMPORT, {
_data: function(can, msg) { can.onmotion.clear(can, can.ui.list)
can.onimport.itemcards(can, msg, function(value) { return [
{view: html.STATUS, list: [
{text: [value.user_name, "", aaa.USERNAME], onclick: function(event) { can.onkeymap.prevent(event)
can.onimport.myStory(can, {index: "web.team.gonganxitong.profile", args: [value.user_uid]})
}},
can.onimport.authView(can, value), can.onimport.timeView(can, value),
{text: [value.user_name, "", aaa.USERNAME]}, can.onimport.authView(can, value), can.onimport.timeView(can, value),
]},
{view: html.STATUS, list: [
{text: [value.service_name.split(" ")[0], "", "service"]},
{text: [value.place_name, "", "place"]},
{text: ["@"+value.street_name, "", "street"]},
{text: [value.street_name, "", "street"]}, {text: [value.place_name, "", "place"]}, {text: [value.service_name.split(" ")[0], "", "service"]},
]},
{view: html.OUTPUT, list: [value.title]},
{view: html.OUTPUT, list: [value.content]},

View File

@ -1,6 +1 @@
$output>div.item.myself div.title span {
font-weight:bold;
}
$output>div.item.disabled div.title span {
// color:var(--disable-fg-color);
}
$output>div.item.myself div.title span { font-weight:bold; }

View File

@ -15,22 +15,19 @@ type member struct {
func (s member) Remove(m *ice.Message, arg ...string) {
if s.IsLeader(m) {
m.Cmdy(s.UserPlace, s.Delete, s.Option(m))
m.Cmdy(s.UserPlace, s.Delete, s.option(m))
}
}
func (s member) Enable(m *ice.Message, arg ...string) {
if s.IsLeader(m) {
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberNormal, s.Option(m))
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberNormal, s.option(m))
}
}
func (s member) Disable(m *ice.Message, arg ...string) {
if s.IsLeader(m) {
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberDisabled, s.Option(m))
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberDisabled, s.option(m))
}
}
func (s member) Option(m *ice.Message, arg ...string) []string {
return m.OptionSimple(s.Keys(s.Place, model.UID), model.UID)
}
func (s member) List(m *ice.Message, arg ...string) {
user_uid, isLeader := m.Option(model.USER_UID), s.IsLeader(m)
s.FieldsWithCreatedAT(m, s.UserPlace, model.USER_UID, s.Keys(s.UserPlace, model.ROLE), s.AS(s.Key(s.UserPlace, model.STATUS), model.MEMBER_STATUS))
@ -41,8 +38,6 @@ func (s member) List(m *ice.Message, arg ...string) {
} else {
return
}
s.SelectJoinUser(m, model.NAME, model.INFO, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
m.Table(func(value ice.Maps) {
if user_uid == value[model.USER_UID] {
m.Push("who", "myself")
@ -63,11 +58,17 @@ func (s member) List(m *ice.Message, arg ...string) {
m.PushButton()
}
})
s.Display(m, "").DisplayCSS("")
s.SelectJoinUser(m, model.NAME, model.INFO, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
s.DisplayBase(m, "").DisplayCSS("")
}
func init() { ice.TeamCtxCmd(member{Tables: newTables()}) }
func (s member) option(m *ice.Message, arg ...string) []string {
return m.OptionSimple(s.Keys(s.Place, model.UID), model.UID)
}
type MemberStatus int
const (

View File

@ -1,19 +1,19 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { var USER_PLACE_ROLE = msg.Option("_user_place_role")
_init: function(can, msg) {
if (msg.IsDetail()) {
msg.Option("_share_title", msg.Append("user_name"))
}
var USER_PLACE_ROLE = msg.Option("_user_place_role")
can.onimport.myView(can, msg, function(value) { value._style = [value.who, value.member_status]
return [
{view: html.TITLE, list: [
value.user_name,
{view: html.TITLE, list: [value.user_name,
can.onimport.authView(can, value), can.onimport.textView(can, value, USER_PLACE_ROLE),
can.onimport.titleAction(can, value),
]},
{view: html.STATUS, list: [
value.uid.slice(0, 6), can.onimport.timeView(can, value),
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value),
value.member_status != "normal" && can.onimport.textView(can, value, "member_status"),
]},
{view: html.STATUS, list: [
value.user_info,
]},
{view: html.STATUS, list: [value.user_info]},
]
})
},

View File

@ -2,7 +2,6 @@ package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/ctx"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
@ -14,6 +13,7 @@ type message struct {
service service
order string `data:"902"`
create string `name:"create from_user_uid to_user_uid"`
remove string `name:"remove" role:"void"`
read string `name:"read" role:"void"`
done string `name:"done" role:"void"`
sticky string `name:"sticky" role:"void"`
@ -21,8 +21,9 @@ type message struct {
}
func (s message) Create(m *ice.Message, arg ...string) {
kit.If(m.Option(ctx.ARGS) == "", func() {
arg = append(arg, ctx.ARGS, kit.JoinFields(m.Option(s.Keys(s.Place, model.UID)), m.Option(model.UID)))
arg = append(arg, model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))
kit.If(m.Option(model.ARGS) == "", func() {
arg = append(arg, model.ARGS, kit.JoinFields(m.Option(s.Keys(s.Place, model.UID)), m.Option(model.UID)))
})
s.Insert(m, arg...)
}
@ -31,20 +32,18 @@ func (s message) Remove(m *ice.Message, arg ...string) {
}
func (s message) List(m *ice.Message, arg ...string) {
s.Tables(m, s.command, s.service).FieldsWithCreatedAT(m, s,
model.FROM_USER_UID, s.Key(s, model.PLACE_NAME), s.Key(s.command, model.NAME), model.SCORE, model.MESSAGE_STATUS,
s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.OPERATE, model.ARGS,
s.Key(s, model.CITY_NAME), s.Key(s, model.STREET_NAME), model.SERVICE_NAME, s.Key(s, model.DETAIL_NAME),
model.FROM_USER_UID, model.COMMAND_NAME, model.MESSAGE_STATUS, model.SCORE,
model.PLACE_UID, model.SERVICE_NAME,
s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS,
)
if len(arg) < 2 {
s.Orders(m, s.Desc(model.SCORE), s.Desc(model.CREATED_AT))
args := []string{model.TO_USER_UID, m.Option(model.USER_UID)}
kit.If(m.Option(model.MESSAGE_STATUS), func(p string) {
for i, v := range MessageStatusList {
if v == p {
args = append(args, model.STATUS, kit.Format(i))
}
kit.If(v == p, func() { args = append(args, model.STATUS, kit.Format(i)) })
}
})
s.Orders(m, s.Desc(model.SCORE), s.Desc(model.CREATED_AT))
s.Select(m, args...).Table(func(value ice.Maps) {
button := []ice.Any{}
if value[model.SCORE] == "0" {
@ -63,6 +62,7 @@ func (s message) List(m *ice.Message, arg ...string) {
m.PushButton(button...)
}).Action()
m.RenameAppend(model.FROM_USER_UID, model.USER_UID)
s.SelectJoinRecent(m, model.PLACE_UID)
s.SelectJoinUser(m)
s.DisplayBase(m, "")
} else if len(arg) == 2 {
@ -85,12 +85,13 @@ func (s message) Sticky(m *ice.Message, arg ...string) {
func (s message) UnSticky(m *ice.Message, arg ...string) {
s.update(m, ice.Map{model.SCORE: 0})
}
func init() { ice.TeamCtxCmd(message{Table: newTable()}) }
func (s message) update(m *ice.Message, data ice.Map, arg ...ice.Any) {
s.Table.Update(m, data, kit.Simple(model.TO_USER_UID, m.Option(model.USER_UID), m.OptionSimple(model.UID), arg)...)
}
func init() { ice.TeamCtxCmd(message{Table: newTable()}) }
type MessageStatus int
const (

View File

@ -5,9 +5,7 @@ Volcanos(chat.ONIMPORT, {
can.onimport.myView(can, msg, function(value) { var args = can.core.Split(value.args)
value.icons = value.user_avatar||value.icons; if (value.score > 0) { value._style = ["sticky"] }
return [
{view: html.TITLE, list: [value.place_name, value.name, value.detail_name||(args[1]||"").slice(0, 6),
value.message_status != "done" && can.onimport.textView(can, value, MESSAGE_STATUS)
]},
{view: html.TITLE, list: [value.place_name, value.command_name, value.detail||(args[1]||"").slice(0, 6), can.onimport.textView(can, value)]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.service_name]},
{view: html.STATUS, list: [can.onimport.timeView(can, value), value.user_name]},
value.info && {view: html.OUTPUT, list: [value.info]},

View File

@ -3,26 +3,22 @@ package model
import "shylinux.com/x/mysql-story/src/db"
const (
ID = "id"
UID = "uid"
NAME = "name"
INFO = "info"
TYPE = "type"
ROLE = "role"
STATUS = "status"
LEVEL = "level"
SCORE = "score"
TITLE = "title"
CONTENT = "content"
CREATOR = "creator"
OPERATOR = "operator"
AVATAR = "avatar"
BACKGROUND = "background"
CREATED_AT = "created_at"
UPDATED_AT = "updated_at"
DELETED_AT = "deleted_at"
USER_UID = "user_uid"
USER_ROLE = "user_role"
USER_NAME = "user_name"
USER_INFO = "user_info"
USER_ROLE = "user_role"
USER_AVATAR = "user_avatar"
USER_BACKGROUND = "user_background"
USER_PLACE_ROLE = "user_place_role"
@ -62,11 +58,9 @@ const (
ALLOW_UID = "allow_uid"
ALLOW_STATUS = "allow_status"
EVENT_UID = "event_uid"
MARKET_UID = "market_uid"
DOMAIN_UID = "domain_uid"
DOMAIN_NAME = "domain_name"
PORTAL_NAME = "portal_name"
DETAIL_NAME = "detail_name"
MARKET_UID = "market_uid"
COMMAND_UID = "command_uid"
COMMAND_ICON = "command_icon"
COMMAND_NAME = "command_name"
@ -83,9 +77,6 @@ const (
SHARE_COUNT = "share_count"
THUMB_STATUS = "thumb_status"
FAVOR_STATUS = "favor_status"
CLIENT_UID = "client_uid"
CLIENT_NAME = "client_name"
CLIENT_TYPE = "client_type"
FROM_UID = "from_uid"
FROM_USER_UID = "from_user_uid"
TO_USER_UID = "to_user_uid"
@ -93,20 +84,21 @@ const (
END_TIME = "end_time"
OPEN_ID = "open_id"
EMAIL = "email"
AVATAR = "avatar"
BACKGROUND = "background"
ADDRESS = "address"
PORTAL = "portal"
PORTAL_NAME = "portal_name"
NODE_NAME = "node_name"
NODENAME = "nodename"
NODETYPE = "nodetype"
SPACE = "space"
OPERATE = "operate"
INDEX = "index"
QUERY = "query"
VALUE = "value"
ARGS = "args"
INIT = "init"
QUERY = "query"
VALUE = "value"
SCORE = "score"
LEVEL = "level"
UNIT = "unit"
PORTAL = "portal"
)
type Sess struct {
@ -119,10 +111,6 @@ type User struct {
db.ModelWithAuth
OpenID string `gorm:"type:char(32);index"`
Email string `gorm:"type:varchar(64)"`
Name string `gorm:"type:varchar(32)"`
Info string `gorm:"type:varchar(255)"`
Avatar string `gorm:"type:varchar(255)"`
Background string `gorm:"type:varchar(255)"`
}
type UserPlace struct {
db.ModelUserPlace
@ -141,9 +129,6 @@ type Street struct {
type City struct {
db.ModelWithAuth
Name string `gorm:"type:varchar(64);index"`
Info string `gorm:"type:varchar(255)"`
Avatar string `gorm:"type:varchar(255)"`
Background string `gorm:"type:varchar(255)"`
}
type Apply struct {
@ -163,8 +148,7 @@ type Allow struct {
Status uint8 `gorm:"default:0"`
}
type Event struct {
db.ModelCommand
CommandUID string `gorm:"type:char(32)"`
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
Info string `gorm:"type:varchar(255)"`
@ -181,17 +165,17 @@ type Setting struct {
Name string `gorm:"type:varchar(64)"`
Value string `gorm:"type:varchar(255)"`
}
type Domain struct {
db.ModelNameInfo
}
type Market struct {
db.ModelCommand
CommandUID string `gorm:"type:char(32)"`
db.ModelContent
DomainUID string `gorm:"type:char(32);index"`
PlaceUID string `gorm:"type:char(32)"`
UserUID string `gorm:"type:char(32)"`
Title string `gorm:"type:varchar(64)"`
Content string
CommandUID string `gorm:"type:char(32)"`
Args string `gorm:"type:varchar(128)"`
ThumbCount int `gorm:"default:0"`
CommentCount int `gorm:"default:0"`
FavorCount int `gorm:"default:0"`
@ -207,7 +191,7 @@ type Comment struct {
db.ModelWithUID
MarketUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32);index"`
CommentUID string `gorm:"type:char(32)"`
FromUID string `gorm:"type:char(32)"`
Content string
}
type Favor struct {
@ -216,29 +200,34 @@ type Favor struct {
UserUID string `gorm:"type:char(32);index"`
Status uint `gorm:"default:0"`
}
type Command struct {
db.ModelWithUID
ServiceUID string `gorm:"type:char(32)"`
Index string `gorm:"type:varchar(64)"`
Name string `gorm:"type:varchar(32)"`
Icon string `gorm:"type:varchar(128)"`
}
type Message struct {
db.ModelCommand
CommandUID string `gorm:"type:char(32)"`
db.ModelWithUID
PlaceUID string `gorm:"type:char(32)"`
FromUserUID string `gorm:"type:char(32)"`
ToUserUID string `gorm:"type:char(32);index"`
CommandUID string `gorm:"type:char(32)"`
Args string `gorm:"type:varchar(128)"`
Status uint `gorm:"default:0"`
Score uint `gorm:"default:0"`
}
type Recent struct {
db.ModelCommand
db.ModelWithUID
UserUID string `gorm:"type:char(32);index"`
PlaceUID string `gorm:"type:char(32)"`
PlaceUID string `gorm:"type:char(32);index"`
ServiceUID string `gorm:"type:char(32)"`
PlaceName string `gorm:"type:varchar(64)"`
StreetName string `gorm:"type:varchar(64)"`
CityName string `gorm:"type:varchar(64)"`
AuthStatus uint8 `gorm:"default:0"`
Score uint8 `gorm:"default:0"`
}
type Command struct {
db.ModelWithUID
ServiceUID string `gorm:"type:char(32);index:idx_service"`
Index string `gorm:"type:varchar(64);index:idx_service"`
Name string `gorm:"type:varchar(32)"`
Icon string `gorm:"type:varchar(128)"`
}
type Service struct {
db.ModelWithUID
Icon string `gorm:"type:varchar(128)"`
@ -248,16 +237,14 @@ type Service struct {
Version string `gorm:"type:varchar(32)"`
Domain string `gorm:"type:varchar(255)"`
Portal string `gorm:"type:varchar(255)"`
Nodename string `gorm:"type:varchar(32)"`
Nodetype string `gorm:"type:varchar(32)"`
Nodename string `gorm:"type:varchar(32)"`
Pathname string `gorm:"type:varchar(255)"`
Hostname string `gorm:"type:varchar(32)"`
}
type Support struct {
db.ModelContent
PlaceUID string `gorm:"type:char(32);index"`
FromUserUID string `gorm:"type:char(32);index"`
ToUserUID string `gorm:"type:char(32);index"`
}
func init() {
@ -265,6 +252,6 @@ func init() {
&Sess{}, &User{}, &UserPlace{}, &Place{}, &Street{}, &City{},
&Apply{}, &Allow{}, &Event{}, &Notice{}, &Setting{},
&Domain{}, &Market{}, &Thumb{}, &Comment{}, &Favor{},
&Message{}, &Recent{}, &Command{}, &Service{}, &Support{},
&Command{}, &Message{}, &Recent{}, &Service{}, &Support{},
)
}

View File

@ -10,15 +10,12 @@ import (
type notice struct {
Table
order string `data:"505"`
role string `data:"leader"`
fields string `data:"title,content,user_uid"`
create string `name:"create title* content*" role:"landlord,teacher,leader"`
remove string `name:"remove" role:"landlord,teacher,leader"`
create string `name:"create title* content*" role:"leader"`
remove string `name:"remove" role:"leader"`
}
func (s notice) Init(m *ice.Message, arg ...string) {
s.Table.Init(m, arg...)
m.Design(s.List, "", kit.JoinWord(s.Keys(s.Place, model.UID), model.UID, ice.AUTO))
}
func (s notice) Create(m *ice.Message, arg ...string) {
m.Option(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))
s.Insert(m, kit.Simple(arg, m.OptionSimple(model.PLACE_UID, model.USER_UID))...)
@ -37,13 +34,13 @@ func (s notice) List(m *ice.Message, arg ...string) {
} else {
return
}
s.SelectJoinUser(m)
kit.If(s.IsLeader(m), func() {
m.PushAction(s.Remove)
s.Button(m, "")
}, func() {
m.Action()
})
s.SelectJoinUser(m)
}
func init() { ice.TeamCtxCmd(notice{Table: newTable()}) }

View File

@ -25,14 +25,12 @@ type Portal struct {
service service
export string `data:"true"`
short string `data:"index"`
field string `data:"time,icons,name,index,order,enable,init,type,role,view,command_uid"`
field string `data:"time,icons,name,index,order,enable,init,type,role,view"`
create string `name:"create index name icons"`
list string `name:"list place_uid index uid auto" role:"void"`
placeCreate string `name:"placeCreate city_name* street_name* place_name* place_type*:select address" icon:"bi bi-plus-square-dotted" role:"void"`
placeRemove string `name:"placeRemove" role:"void"`
placeAuth string `name:"placeAuth" role:"void"`
command string `name:"command" role:"void"`
run string `name:"run" role:"void"`
}
func (s Portal) Init(m *ice.Message, arg ...string) {
@ -72,9 +70,9 @@ func (s Portal) Inputs(m *ice.Message, arg ...string) {
func (s Portal) Command(m *ice.Message, arg ...string) {
if cmdPortal[arg[0]] != "" && cmdPortal[arg[0]] != m.PrefixKey() {
s.AutoCmdy(m, cmdPortal[arg[0]], m.ActionKey(), arg)
return
}
} else {
ctx.Command(m.Message, arg...)
}
}
func (s Portal) Run(m *ice.Message, arg ...string) {
if cmdPortal[arg[0]] != "" && cmdPortal[arg[0]] != m.PrefixKey() {
@ -82,30 +80,29 @@ func (s Portal) Run(m *ice.Message, arg ...string) {
return
}
s.DisplayBase(m, "common.js")
m.OptionDefault(model.SERVICE_UID, ServiceUID(m))
m.OptionDefault(model.COMMAND_UID, s.Hash.List(m.Spawn(), arg[0]).Append(model.COMMAND_UID))
m.Option(model.SERVICE_UID, ServiceUID(m))
m.Option(model.COMMAND_UID, CommandUID(m, arg[0]))
m.Search(arg[0], func(key string, cmd *ice.Command) {
sub, role := "", cmd.Role
role := cmd.Role
if len(arg) > 1 && arg[1] == ctx.ACTION {
if action, ok := cmd.Actions[arg[2]]; ok {
sub, role = arg[2], action.Role
role = action.Role
}
} else if len(arg) > 1 {
if action, ok := cmd.Actions[arg[1]]; ok {
sub, role = arg[1], action.Role
role = action.Role
} else {
m.Option(s.Keys(s.Place, model.UID), arg[1])
}
}
s.UserPlaceRole(m)
if kit.IsIn(role, "", aaa.VOID, aaa.TECH, aaa.ROOT) {
if s.UserPlaceRole(m); kit.IsIn(role, "", aaa.VOID, aaa.TECH, aaa.ROOT) {
kit.If(!ctx.PodCmd(m.Message, arg) && aaa.Right(m.Message, arg), func() { m.Cmdy(arg) })
} else {
if !m.Cmdy(arg[0], s.CheckRole, kit.Split(role)).IsErr() {
if !m.Cmdy(s.Place, s.CheckRole, kit.Split(role)).IsErr() {
m.Cmdy(arg)
}
}
if sub != mdb.INPUTS && kit.IndexOf(arg, mdb.INPUTS) == -1 {
if kit.IndexOf(arg, mdb.INPUTS) == -1 {
s.Place.RewriteAppend(m)
}
})
@ -115,7 +112,7 @@ func (s Portal) List(m *ice.Message, arg ...string) {
s.Hash.List(m, arg...).PushAction(mdb.DETAIL, s.Hash.Remove).SortInt(mdb.ORDER)
return
}
m.OptionDefault(model.SERVICE_UID, ServiceUID(m))
m.Option(model.SERVICE_UID, ServiceUID(m))
if len(arg) == 0 {
USER_PLACE_ROLE := s.Keys(s.UserPlace, model.ROLE)
m.Cmdy(m.PrefixKey(), s.PlaceList, m.Option(model.USER_UID)).Table(func(value ice.Maps) {
@ -139,7 +136,7 @@ func (s Portal) List(m *ice.Message, arg ...string) {
s.DisplayBase(m, "").DisplayCSS("")
}
func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message {
msg := m.Cmd(m.PrefixKey(), s.PlaceList, m.Option(model.USER_UID), arg[0])
msg := m.Cmd("", s.PlaceList, m.Option(model.USER_UID), arg[0])
if msg.Length() == 0 {
msg = m.Cmd(s.Place, s.Table.Select, model.UID, arg[0])
if msg.Length() == 0 {
@ -159,8 +156,8 @@ func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message {
s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE),
model.CITY_NAME, s.Keys(s.Street, model.NAME), model.AUTH_STATUS, model.DASHBOARD_UID,
))
m.Option(model.PLACE_NAME, msg.Append(s.Keys(s.Place, model.NAME)))
m.Option(model.STREET_NAME, msg.Append(s.Keys(s.Street, model.NAME)))
m.Option(model.PLACE_NAME, msg.Append(s.Keys(s.Place, model.NAME)))
return msg
}
func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
@ -171,7 +168,7 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
}
name := m.Option(s.Keys(s.Place, model.NAME))
arg = kit.TransArgKeys(arg, s.Keys(s.Place, model.NAME), model.NAME, s.Keys(s.Place, model.INFO), model.INFO, s.Keys(s.Place, model.TYPE), model.TYPE)
if m.Cmdy(s.Place, s.Insert, arg[2:]).IsErr() {
if m.Options(arg).Cmdy(s.Place, s.Insert, arg[2:]).IsErr() {
return
}
s.RecordEventWithName(m.Options(mdb.NAME, name, s.Keys(s.Place, model.UID), m.Result()), "")
@ -201,32 +198,27 @@ func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message {
s.SelectJoinAuth(m)
return m
}
func (s Portal) PlaceInfo(m *ice.Message, arg ...string) {
msg := m.Cmd(s.Place, s.Table.Select, model.UID, m.Option(s.Keys(s.Place, model.UID)))
s.SelectJoin(msg, s.Street, model.NAME, model.CITY_UID)
s.SelectJoinCity(msg)
m.Option(model.CITY_NAME, msg.Append(model.CITY_NAME))
m.Option(model.STREET_NAME, msg.Append(s.Keys(s.Street, model.NAME)))
m.Option(model.PLACE_NAME, msg.Append(model.NAME))
}
func (s Portal) PlaceAuth(m *ice.Message, arg ...string) {
if m.Option(model.AUTH_UID) != "" {
return
}
msg := m.Cmd(s.Street, s.Table.Select, model.UID, m.Option(s.Keys(s.Street, model.UID)))
if m.WarnNotValid(msg.Append(model.AUTH_UID) == "") {
return
}
place_uid, place_name := m.Option(s.Keys(s.Place, model.UID)), m.Option(s.Keys(s.Place, model.NAME))
m.Option(model.COMPANY_NAME, m.Option(s.Keys(s.Street, model.NAME)))
msg := s.AutoCmd(m, api.RENZHENGSHOUQUAN_PORTAL, s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME),
model.AUTH_TYPE, ice.AUTO, model.AUTH_NAME, place_name, model.FROM_UID, ice.AUTO,
s.AutoCmdy(m, api.RENZHENGSHOUQUAN_PORTAL, s.PlaceCreate,
model.AUTH_NAME, place_name, model.AUTH_TYPE, ice.AUTO, model.FROM_UID, msg.Append(model.AUTH_UID),
model.SERVICE_UID, ServiceUID(m), model.PLACE_UID, place_uid,
)
m.Cmd(s.Place, s.UpdateAuth, msg.Option(model.AUTH_UID), model.UID, place_uid)
m.Cmd(s.Place, s.UpdateField, msg.OptionSimple(model.AUTH_UID), model.UID, place_uid)
s.RecordEventWithName(m.Options(model.NAME, place_name, model.UID, place_uid), "")
msg.Cmd(s.Prefix(m, s), s.AfterPlaceAuth)
msg.Cmd(s.Prefix(msg, s), s.AfterPlaceAuth)
s.StorageCreate(m, "")
}
func (s Portal) ValueCreate(m *ice.Message, arg ...string) {
s.Table.Insert(m, kit.Simple(arg, m.OptionSimple(model.USER_UID, s.Keys(s.Place, model.UID)))...)
s.Table.Insert(m, kit.Simple(arg, m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID))...)
}
func (s Portal) ValueRemove(m *ice.Message, arg ...string) {
s.Table.Delete(m, m.OptionSimple(s.Keys(s.Place, model.UID), model.UID)...)
@ -264,11 +256,9 @@ func (s Portal) BeforePlaceAuth(m *ice.Message, arg ...string) {}
func (s Portal) AfterPlaceAuth(m *ice.Message, arg ...string) {}
func (s Portal) AddRecent(m *ice.Message, arg ...string) {
if kit.IsIn(m.Append(model.AUTH_STATUS), "2", "issued") {
m.Cmd(s.Prefix(m, s.recent), s.Create, s.GetCommands(m, model.SERVICE_UID, arg...), model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)), model.AUTH_STATUS, "2")
} else {
m.Cmd(s.Prefix(m, s.recent), s.Create, s.GetCommands(m, model.SERVICE_UID, arg...), model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))
}
args := kit.Simple(model.PLACE_UID, arg[0], m.OptionSimple(model.SERVICE_UID, model.PLACE_NAME, model.STREET_NAME, model.CITY_NAME))
kit.If(kit.IsIn(m.Append(model.AUTH_STATUS), "2", "issued"), func() { args = append(args, model.AUTH_STATUS, "2") })
m.Cmd(s.Prefix(m, s.recent), s.Create, args)
}
func (s Portal) RecordEvent(m *ice.Message, arg ...string) {
s.event.Record(m.Spawn(kit.Dict(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))), arg[0], arg[1:]...)
@ -282,11 +272,11 @@ func (s Portal) DashboardCreate(m *ice.Message, name string, arg ...string) func
defer s.SaveBack(m, ice.MSG_USERPOD)()
kit.If(name == "", func() { name = m.Option(s.Keys(s.Place, model.NAME)) })
s.AutoCmdy(m, api.DASHBOARD_PORTAL, s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME), model.DASHBOARD_NAME, name, model.DASHBOARD_TYPE, "0")
s.AutoCmd(m, api.RENZHENGSHOUQUAN_AUTH, s.UpdateField, m.OptionSimple(model.DASHBOARD_UID), model.UID, m.Option(model.AUTH_UID))
s.AutoCmd(m, api.RENZHENGSHOUQUAN_AUTH, s.UpdateField, m.OptionSimple(model.DASHBOARD_UID))
return func() { s.DashboardUpdate(m) }
}
func (s Portal) DashboardInsert(m *ice.Message, score int, title, unit string, index ice.Any, field string, arg ...ice.Any) {
kit.If(len(arg) == 0, func() { arg = append(arg, s.Keys(s.Place, model.UID), m.Option(s.Keys(s.Place, model.UID))) })
kit.If(len(arg) == 0, func() { arg = append(arg, m.OptionSimple(s.Keys(s.Place, model.UID))) })
s.AutoCmd(m, api.DASHBOARD_SUMMARY, s.Insert, model.SPACE, m.Option(ice.MSG_USERPOD), model.INDEX, s.Prefix(m, index),
model.QUERY, kit.Format(arg), mdb.FIELD, field, model.TITLE, title, model.SCORE, score, model.UNIT, unit, m.OptionSimple(model.DASHBOARD_UID))
}
@ -298,7 +288,7 @@ func (s Portal) DashboardUpdate(m *ice.Message, arg ...string) {
func (s Portal) StorageCreate(m *ice.Message, name string, arg ...string) {
kit.If(name == "", func() { name = m.Option(s.Keys(s.Place, model.NAME)) })
s.AutoCmdy(m, api.STORAGE_PORTAL, s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME), model.STORAGE_NAME, name, model.STORAGE_TYPE, "0")
s.AutoCmd(m, api.RENZHENGSHOUQUAN_AUTH, s.UpdateField, m.OptionSimple(model.STORAGE_UID), model.UID, m.Option(model.AUTH_UID))
s.AutoCmd(m, api.RENZHENGSHOUQUAN_AUTH, s.UpdateField, m.OptionSimple(model.STORAGE_UID))
}
func (s Portal) StorageInsert(m *ice.Message, title, content string) {
s.AutoCmd(m, api.STORAGE_FILE, s.Insert, model.TITLE, title, model.CONTENT, content, m.OptionSimple(model.STORAGE_UID, model.USER_UID))
@ -325,10 +315,8 @@ func (s Portal) PlaceCmd(m *ice.Message, arg ...string) {
}
func (s Portal) CommandUpdate(m *ice.Message, arg ...string) {
m.Config(model.SERVICE_UID, arg[0])
s.Hash.Select(m.Spawn()).Table(func(value ice.Maps) {
uid := m.Cmdx(command{}, s.Table.Modify, model.SERVICE_UID, arg[0], mdb.ICON, value[mdb.ICONS], model.NAME, value[model.NAME], model.INDEX, value[model.INDEX])
s.Hash.Modify(m, ctx.INDEX, value[ctx.INDEX], model.COMMAND_UID, uid)
m.Cmdx(command{}, s.Table.Modify, model.SERVICE_UID, arg[0], model.INDEX, value[model.INDEX], model.NAME, value[model.NAME], mdb.ICON, value[mdb.ICONS])
})
}
func (s Portal) CommandSelect(m *ice.Message, arg ...string) {
@ -336,7 +324,7 @@ func (s Portal) CommandSelect(m *ice.Message, arg ...string) {
}
func (s Portal) Create(m *ice.Message, arg ...string) {
args := []string{ctx.INDEX, m.Option(ctx.INDEX)}
args := m.OptionSimple(ctx.INDEX)
msg := s.Hash.Select(m.Spawn(), m.Option(ctx.INDEX))
kit.If(msg.Length() > 0, func() { args = append(args, mdb.TIME, msg.Append(mdb.TIME)) })
m.Search(m.Option(ctx.INDEX), func(key string, cmd *ice.Command) {
@ -353,8 +341,9 @@ func (s Portal) Modify(m *ice.Message, arg ...string) { s.Hash.Modify(m, arg...)
func (s Portal) Show(m *ice.Message, arg ...string) {
m.Cmd(s.Prefix(m, s), s.Create, ctx.INDEX, m.PrefixKey())
}
func (s Portal) Link(m *ice.Message, arg ...string) string {
return m.MergePodCmd("", s.Prefix(m, s)) + "#" + kit.TrimSuffix(kit.Join([]string{arg[0], kit.Select(s.Prefix(m, apply{}), arg, 1), kit.Select("", arg, 2)}, ":"), ":")
func (s Portal) Link(m *ice.Message, arg ...string) {
m.Echo(m.MergePodCmd("", s.Prefix(m, s), s.Keys(s.Place, model.UID), arg[0]) +
"#" + kit.TrimSuffix(kit.Join([]string{arg[0], kit.Select("", arg, 1), kit.Select("", arg, 2)}, ":"), ":", ":"))
}
func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) }

View File

@ -32,7 +32,7 @@ Volcanos(chat.ONIMPORT, {
can.onimport.myTrans(can, value, PLACE_UID, PLACE_NAME, PLACE_TYPE, USER_PLACE_ROLE, STREET_NAME)
if (value._uid == can.db.hash[0]) { can.onexport.value(can, value) }
})
return can.run({}, [ctx.COMMAND, can.db.hash[1]], function(msg) { msg.Table(function(value) {
return can.runAction({}, ctx.COMMAND, [can.db.hash[1]], function(msg) { msg.Table(function(value) {
value.args = [can.db.hash[0]].concat(can.db.hash.slice(2)), can.onimport.myStory(can, value)
}) })
}

View File

@ -8,26 +8,25 @@ import (
type qrcode struct {
Tables
apply apply
portal Portal
order string `data:"501"`
role string `data:"creator"`
role string `data:"leader"`
applyQRCode string `name:"applyQRCode" role:"void"`
}
func (s qrcode) ApplyQRCode(m *ice.Message, arg ...string) {
s.info(m, arg[0], "apply")
m.Option(ice.MSG_FG, "blue")
m.Echo("请让申请人扫码")
m.EchoQRCode(s.Link(m, arg[0]))
s.info(m, arg[0], "apply").EchoQRCode(s.Link(m, arg[0], s.Prefix(m, s.apply))).Echo("请让申请人扫码")
}
func (s qrcode) List(m *ice.Message, arg ...string) {
s.info(m, arg[0], "portal")
m.EchoQRCode(m.MergePodCmd("", s.Prefix(m, s.portal), s.Keys(s.Place, model.UID), arg[0]))
s.info(m, arg[0], "portal").EchoQRCode(s.Link(m, arg[0]))
}
func init() { ice.TeamCtxCmd(qrcode{Tables: newTables()}) }
func (s qrcode) info(m *ice.Message, place_uid, typ string) {
func (s qrcode) info(m *ice.Message, place_uid, cmd string) *ice.Message {
m.Cmdy(s.Prefix(m, s.portal), s.portal.PlaceList, m.Option(model.USER_UID), place_uid).Cut(model.CITY_NAME, s.Keys(s.Street, model.NAME), s.Keys(s.Place, model.NAME))
m.Push(model.QRCODE_TYPE, typ).Action(s.ApplyQRCode)
m.Push(model.QRCODE_TYPE, cmd).Action(s.ApplyQRCode)
return m
}

View File

@ -13,7 +13,7 @@ type recent struct {
Table
service service
order string `data:"903"`
create string `name:"create service_uid args"`
create string `name:"create place_uid service_uid"`
remove string `name:"remove" role:"void"`
open string `name:"open" role:"void"`
sticky string `name:"sticky" role:"void"`
@ -21,10 +21,10 @@ type recent struct {
}
func (s recent) Create(m *ice.Message, arg ...string) {
if args := m.OptionSimple(model.USER_UID, model.SERVICE_UID, ctx.ARGS); s.Select(m, args...).Length() == 0 {
if args := m.OptionSimple(model.USER_UID, model.PLACE_UID); s.Select(m, args...).Length() == 0 {
s.Insert(m, kit.Simple(arg, model.UPDATED_AT, m.Time(), m.OptionSimple(model.USER_UID))...)
} else {
s.Update(m, kit.Dict(m.OptionSimple(model.AUTH_STATUS)), args...)
s.Update(m, kit.Dict(arg), args...)
}
}
func (s recent) Remove(m *ice.Message, arg ...string) {
@ -35,10 +35,9 @@ func (s recent) List(m *ice.Message, arg ...string) {
s.Tables(m, s.service).Fields(m, s.Key(s, model.UID), s.Key(s, model.UPDATED_AT),
model.SERVICE_ICON, model.SERVICE_NAME, s.Key(s, model.AUTH_STATUS), model.SCORE,
s.Key(s, model.CITY_NAME), s.Key(s, model.STREET_NAME), s.Key(s, model.PLACE_NAME),
s.AS(model.NODENAME, model.SPACE), model.INDEX, model.ARGS,
)
s.Orders(m, s.Desc(model.SCORE), s.Desc(model.UPDATED_AT))
s.Select(m, model.USER_UID, m.Option(model.USER_UID))
s.AS(model.NODENAME, model.SPACE), model.INDEX, model.PLACE_UID,
).Orders(m, s.Desc(model.SCORE), s.Desc(model.UPDATED_AT))
s.Select(m, model.USER_UID, m.Option(model.USER_UID)).Action()
} else if len(arg) == 2 {
s.SelectDetail(m, model.USER_UID, m.Option(model.USER_UID), model.UID, arg[1])
}
@ -48,7 +47,7 @@ func (s recent) List(m *ice.Message, arg ...string) {
} else {
m.PushButton(s.UnSticky, s.Remove)
}
}).Action()
})
s.DisplayBase(m, "")
}
func (s recent) Open(m *ice.Message, arg ...string) {

View File

@ -1,13 +1,14 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.onimport.myView(can, msg, function(value) { var args = can.core.Split(value.args)
value.icons = can.misc.Resource(can, value.service_icon.split("?")[0], value.space); if (value.score > 0) { value._style = ["sticky"] }
can.onimport.myView(can, msg, function(value) { if (value.score > 0) { value._style = ["sticky"] }
value.icons = can.misc.Resource(can, value.service_icon.split("?")[0], value.space)
value._street = value.street_name
return [
{view: html.TITLE, list: [value.place_name, can.onimport.authView(can, value), can.onimport.timeView(can, value)]},
{view: html.STATUS, list: [can.onimport.cityView(can, value), value.street_name, value.service_name]},
{view: html.STATUS, list: [can.onimport.cityView(can, value), can.onimport.streetView(can, value), value.service_name]},
]
}, function(event, value) { can.onaction._goback(can); var args = can.core.Split(value.args)
can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [args[0]]})
})
}, function(event, value) { can.onaction._goback(event, function() {
can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [value.place_uid]})
}) })
},
})

View File

@ -14,11 +14,11 @@ func (s search) List(m *ice.Message, arg ...string) {
} else if len(arg) == 2 {
m.FieldsSetDetail().Cmdy(s.Place, s.Select, model.UID, arg[1]).Action()
}
m.RenameAppend(model.TYPE, s.Keys(s.Place, model.TYPE), model.CREATOR, model.USER_UID)
m.RenameAppend(model.TYPE, s.Keys(s.Place, model.TYPE))
s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID)
s.SelectJoinCity(m)
s.SelectJoinUser(m)
s.Display(m, "")
s.DisplayBase(m, "")
}
func init() { ice.TeamCtxCmd(search{Tables: newTables()}) }

View File

@ -28,20 +28,15 @@ type service struct {
}
func ServiceUID(m *ice.Message) string {
return kit.Hashs(ice.Info.Hostname, ice.Info.Pwd, m.Prefix("portal"))
return kit.Hashs(ice.Info.Hostname, ice.Info.Pwd, m.Prefix(web.PORTAL))
}
func (s service) Update(m *ice.Message, arg ...string) {
uid := ServiceUID(m)
if s.Select(m.Spawn(), model.UID, uid).Length() == 0 {
s.Insert(m, kit.Simple(model.UID, uid, m.OptionSimple(mdb.ICON, mdb.NAME, ctx.INDEX), nfs.PATHNAME, ice.Info.Pwd, tcp.HOSTNAME, ice.Info.Hostname)...)
m.Cmd(s.PrefixPortal(m)).Table(func(value ice.Maps) { m.Cmd(s.PrefixPortal(m), mdb.MODIFY, value[ctx.INDEX], mdb.ENABLE, ice.TRUE) })
s.Insert(m, kit.Simple(model.UID, uid, model.INDEX, m.Prefix(web.PORTAL), tcp.NODETYPE, ice.Info.NodeType, tcp.NODENAME, ice.Info.NodeName, nfs.PATHNAME, ice.Info.Pwd, tcp.HOSTNAME, ice.Info.Hostname)...)
}
s.Table.Update(m, kit.Dict(arg, m.OptionSimple(mdb.NAME, mdb.ICON),
nfs.MODULE, ice.Info.Make.Module, nfs.VERSION, ice.Info.Make.Versions(),
tcp.NODENAME, ice.Info.NodeName, tcp.NODETYPE, ice.Info.NodeType,
web.DOMAIN, ice.Info.Make.Domain, web.PORTAL, ctx.GetCmdFile(m.Message, m.Prefix(web.PORTAL)),
), model.UID, uid)
m.Cmd(s.PrefixPortal(m), "updateCommand", uid)
s.Table.Update(m, kit.Dict(arg, m.OptionSimple(mdb.NAME, mdb.ICON), nfs.MODULE, ice.Info.Make.Module, nfs.VERSION, ice.Info.Make.Versions()), model.UID, uid)
m.Cmd(s.PrefixPortal(m), Portal{}.CommandUpdate, uid)
}
func (s service) Autogen(m *ice.Message, arg ...string) {
m.Option("CLASS", strings.ToUpper(m.Option(mdb.CLASS)))
@ -73,35 +68,25 @@ func (s service) Compile(m *ice.Message, arg ...string) {
}
func (s service) Oauth(m *ice.Message, arg ...string) {
m.Options(m.Cmd(web.CHAT_WX_ACCESS).AppendSimple())
m.Option("user_cmd", kit.JoinWord(m.Prefix(aaa.USER), mdb.CREATE))
m.Option("sess_cmd", kit.JoinWord(m.Prefix(aaa.SESS), mdb.CREATE))
m.Cmd(web.CHAT_WX_ACCESS, web.OAUTH)
m.Option("user_cmd", kit.JoinWord(m.Prefix(aaa.USER), mdb.CREATE))
m.Cmd(web.SPACE, ice.OPS, ctx.CONFIG, web.CHAT_WX_AGENT, web.SPACE, m.Option(ice.MSG_USERPOD))
m.Cmd(web.CHAT_WX_ACCESS, web.OAUTH)
m.ProcessHold()
}
func (s service) List(m *ice.Message, arg ...string) {
if len(arg) == 2 {
s.SelectDetail(m, model.UID, arg[1])
} else {
if len(arg) < 2 {
s.Orders(m, s.Desc(model.UPDATED_AT)).Select(m)
} else {
s.SelectDetail(m, model.UID, arg[1])
}
list := m.CmdMap(web.SPACE, ice.OPS, web.SPACE, mdb.NAME)
m.Table(func(value ice.Maps) {
if _, ok := list[value[tcp.NODENAME]]; ok && value[ctx.INDEX] != "" {
if m.Cmd(web.SPACE, ice.OPS, web.SPACE, value[tcp.NODENAME], value[ctx.INDEX], kit.Dict(mdb.VIEW, mdb.TABLE)).Length() > 0 {
m.Push(mdb.STATUS, web.ONLINE)
return
}
}
m.Push(mdb.STATUS, "")
})
if m.IsTech() {
m.PushAction(s.Open, s.Conf, s.Project).Action(s.Autogen, s.Compile, s.Oauth)
m.PushAction(s.Open, s.Conf).Action(s.Autogen, s.Compile, s.Oauth)
} else {
m.PushAction(s.Open).Action()
}
m.Sort("status,updated_at", []string{web.ONLINE}, ice.STR_R).Display("")
m.RenameAppend("nodetype", model.SERVICE_TYPE, mdb.STATUS, model.SERVICE_STATUS)
m.RenameAppend(model.NODENAME, model.SPACE, model.NODETYPE, model.SERVICE_TYPE, mdb.STATUS, model.SERVICE_STATUS)
s.DisplayBase(m, "")
}
func (s service) Open(m *ice.Message, arg ...string) {
m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(m.Option(ctx.INDEX)))
@ -109,8 +94,5 @@ func (s service) Open(m *ice.Message, arg ...string) {
func (s service) Conf(m *ice.Message, arg ...string) {
m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(m.Option(ctx.INDEX)) + "?view=table")
}
func (s service) Project(m *ice.Message, arg ...string) {
m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(web.CODE_VIMER) + "?path=src/&file=" + strings.Split(kit.Select("", strings.Split(m.Option(web.PORTAL), "/src/"), 1), "?")[0])
}
func init() { ice.TeamCtxCmd(service{}) }

View File

@ -1,12 +1,11 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.onimport.myView(can, msg, function(value) { value.icon = value.icon.split("?")[0]; return value.service_status == "online" && [
// {view: html.TITLE, list: [value.name, can.onimport.textView(can, value, "service_type"), can.onimport.textView(can, value, "service_status")]},
can.onimport.myView(can, msg, function(value) { value.icon = value.icon.split("?")[0]; return [
{view: html.TITLE, list: [value.name]},
{view: html.STATUS, list: [value.index]},
{view: html.STATUS, list: [value.module, value.version]},
] }, function(event, value) { can.onaction._goback(can)
can.onimport.myPlugin(can, {space: value.space||value.nodename, index: value.index})
})
] }, function(event, value) { can.onaction._goback(event, function() {
can.onimport.myPlugin(can, {space: value.space, index: value.index})
}) })
},
})

View File

@ -28,14 +28,5 @@ func (s sess) Check(m *ice.Message, arg ...string) {
m.Option(ice.MSG_AVATAR, msg.Append(model.AVATAR))
m.Option(model.USER_UID, msg.Append(model.UID))
}
func (s sess) List(m *ice.Message, arg ...string) {
if m.IsTech() {
if len(arg) < 2 {
s.Select(m)
} else {
s.SelectDetail(m, model.UID, arg[1])
}
}
}
func init() { ice.TeamCtxCmd(sess{}) }

View File

@ -1,12 +1,6 @@
$output>div.item {
border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px;
display:flex; align-items:center;
}
$output>div.item span.name {
flex-grow:1;
}
$output>div.item span.outer {
background-color:gray; border-radius:12px; padding:2px; height:24px; width:40px; display:inline-block; float:right; }
$output>div.item { border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px; display:flex; align-items:center; }
$output>div.item span.name { flex-grow:1; }
$output>div.item span.outer { background-color:gray; border-radius:12px; padding:2px; height:24px; width:40px; display:inline-block; float:right; }
$output>div.item span.inner { border-radius:10px; background-color:white; height:20px; width:20px; display:inline-block; }
$output>div.item span.outer.on { background-color:var(--notice-bg-color); }
$output>div.item span.outer.on span.inner { float:right; }

View File

@ -9,20 +9,20 @@ import (
type setting struct {
Table
service service
recent recent
service service
order string `data:"102"`
role string `data:"leader,worker,server"`
short string `data:"name"`
field string `data:"name,type,help"`
fields string `data:"name,value"`
create string `name:"create name* type* help*" role:"tech"`
create string `name:"create name* type* help" role:"tech"`
update string `name:"update" role:"void"`
}
func (s setting) Init(m *ice.Message, arg ...string) {
s.Table.Init(m, arg...)
s.Create(m, model.NAME, "profile", model.TYPE, "radio", "help", "将本系统展示到个人名片首页")
s.Create(m, model.NAME, "profile", model.TYPE, "radio")
}
func (s setting) Create(m *ice.Message, arg ...string) {
s.Hash.Create(m, arg...)
@ -35,24 +35,23 @@ func (s setting) Update(m *ice.Message, arg ...string) {
s.Table.Update(m, kit.Dict(m.OptionSimple(model.VALUE)), m.OptionSimple(model.PLACE_UID, model.USER_UID, model.NAME)...)
}
}
func (s setting) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
data := ice.Maps{}
msg := s.Select(m.Spawn(), model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID))
msg.Table(func(value ice.Maps) { data[value[model.NAME]] = value[model.VALUE] })
s.Hash.List(m).Table(func(value ice.Maps) { m.Push(model.VALUE, data[value[model.NAME]]) }).Action()
} else if len(arg) == 2 {
s.SelectDetail(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID), model.NAME, arg[1])
}
s.DisplayBase(m, "").DisplayCSS("")
}
func (s setting) Profile(m *ice.Message, arg ...string) {
s.Fields(m, s.Key(s, model.PLACE_UID))
s.Select(m, s.Key(s, model.USER_UID), arg[0], s.Key(s, model.NAME), m.ActionKey(), s.Key(s, model.VALUE), "on")
s.Fields(m, model.PLACE_UID)
s.Select(m, model.USER_UID, arg[0], model.NAME, m.ActionKey(), model.VALUE, "on")
}
func (s Table) SettingProfile(m *ice.Message, arg ...string) *ice.Message {
return m.Cmdy(s.Prefix(m, setting{}), setting{}.Profile, arg)
}
func (s setting) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
data := ice.Maps{}
msg := s.Select(m.Spawn(), s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID))
msg.Table(func(value ice.Maps) { data[value[model.NAME]] = value[model.VALUE] })
s.Hash.List(m).Table(func(value ice.Maps) { m.Push(model.VALUE, data[value[model.NAME]]) })
m.Action()
} else if len(arg) == 2 {
s.SelectDetail(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID), model.NAME, arg[1])
}
s.Display(m, "").DisplayCSS("")
}
func init() { ice.TeamCtxCmd(setting{Table: newTable()}) }

View File

@ -7,7 +7,7 @@ Volcanos(chat.ONIMPORT, {
radio: function(can, value) {
return {text: ["", "", ["outer", value.value]], list: [{text: ["", "", "inner"]}], onclick: function(event) {
if (value.value == "on") { value.value = "off" } else { value.value = "on" }
can.run(can.request(event, value, can.Option(), {_toast: value.name}), [ctx.ACTION, mdb.UPDATE])
can.runAction(can.request(event, value, can.Option(), {_toast: value.name}), mdb.UPDATE, [])
}}
},
})

View File

@ -9,8 +9,10 @@ import (
type street struct {
Table
city city
modify string `name:"modify street_info" role:"void"`
list string `name:"list street_name auto" role:"void"`
list string `name:"list city_name street_name auto" role:"void"`
authCreate string `name:"authCreate city_name* company_name* street_name* street_info" role:"void"`
}
func (s street) FindOrCreateByName(m *ice.Message, arg ...string) {
@ -22,27 +24,22 @@ func (s street) FindOrCreateByName(m *ice.Message, arg ...string) {
}
}
func (s street) Modify(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.INFO, m.Option(model.STREET_INFO)), model.NAME, m.Option(model.STREET_NAME))
s.Update(m, kit.Dict(model.INFO, m.Option(model.STREET_INFO)), model.NAME, m.Option(model.STREET_NAME), model.CITY_UID, m.Option(model.CITY_UID))
}
func (s street) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
if m.IsTech() {
s.Select(m, arg...)
m.Cmdy(s.city).RenameAppend(model.NAME, model.CITY_NAME)
} else if msg := m.Cmd(s.city, arg[0]); len(arg) == 1 {
s.Select(m, model.CITY_UID, msg.Append(model.UID)).Action()
} else if len(arg) == 2 {
s.SelectDetail(m, model.CITY_UID, msg.Append(model.UID), model.NAME, arg[1])
if m.Append(model.AUTH_UID) == "" && m.IsTech() {
m.EchoInfoButton("请申请街道认证", s.AuthCreate)
}
} else {
msg := s.Select(m.Spawn(), model.NAME, arg[0])
m.Option(model.STREET_NAME, msg.Append(model.NAME))
m.Option(model.STREET_INFO, msg.Append(model.INFO))
m.Option(model.STREET_AVATAR, msg.Append(model.AVATAR))
m.Option(model.STREET_BACKGROUND, msg.Append(model.BACKGROUND))
msg.Table(func(value ice.Maps) {
if value[model.AUTH_UID] != "" {
m.Cmdy("web.team.renzhengshouquan.auth", value[model.AUTH_UID])
}
})
kit.If(m.IsTech(), func() { m.Action(s.Modify) })
m.Display("")
}
}
func (s street) AuthCreate(m *ice.Message, arg ...string) {
s.Table.AuthCreate(m, 6, s.Select(m.Spawn(), m.OptionSimple(model.CITY_UID)...).Append(model.AUTH_UID))
}
func init() { ice.TeamCtxCmd(street{}) }

View File

@ -1,18 +0,0 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { msg.Option("_share_title", msg.Option("street_name"))
can.ui = can.page.Appends(can, can._output, [html.HEAD, html.LIST])
can.page.Append(can, can.ui.head, [{img: can.misc.Resource(can, "usr/icons/background.jpg")}])
can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, {avatar: msg.Option("street_avatar")}, [
{view: html.TITLE, list: [msg.Option("street_name"), can.onimport.titleAction(can, msg)]},
{view: html.STATUS, list: [msg.Option("street_info")]},
])])
can.onimport.myView(can, msg, function(value) {
return [
{view: html.TITLE, list: [value.name]},
{view: html.STATUS, list: [value.info]},
]
}, function(event, value) {
// can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [value.place_uid]})
}, can.ui.list)
},
})

View File

@ -23,7 +23,7 @@ func (s support) List(m *ice.Message, arg ...string) {
s.Select(m, model.USER_UID, m.Option(model.USER_UID)).Action()
}
s.SelectJoinUser(m)
s.Display(m, "").DisplayCSS("")
s.DisplayBase(m, "").DisplayCSS("")
}
func init() { ice.TeamCtxCmd(support{Table: newTable()}) }

View File

@ -5,6 +5,7 @@ import "shylinux.com/x/mysql-story/src/db"
const (
UID = "uid"
NAME = "name"
INFO = "info"
TYPE = "type"
TITLE = "title"
CONTENT = "content"
@ -14,8 +15,6 @@ const (
{{.Option "CLASS"}}_NAME = "{{.Option "class"}}_name"
{{.Option "CLASS"}}_TYPE = "{{.Option "class"}}_type"
{{.Option "TABLE"}}_UID = "{{.Option "what"}}_uid"
COMPANY_UID = "company_uid"
CITY_UID = "city_uid"
)
type User{{.Option "Class"}} struct {

View File

@ -1,4 +0,0 @@
$output>div.head { margin-bottom:20px; }
$output>div.head>img { height:200px; width:100%; object-fit:cover; }
$output>div.head div.item.card img { border-radius:25px; }
$output>div.head div.item.card div.title div.item.button i { display:none; }

View File

@ -14,19 +14,17 @@ import (
type user struct {
Table
setting setting
community string `data:"20240724-community"`
template string `data:"4b-Z_r8dZmm1pHdd2h4A10VVYX4OIHvemlLjsHKBj2s"`
create string `name:"create open_id* usernick avatar"`
modify string `name:"modify user_name user_info" role:"void"`
create string `name:"create open_id* avatar usernick"`
modify string `name:"modify user_name* user_info" role:"void"`
email string `name:"email email*"`
list string `name:"list uid auto" role:"void"`
authCreate string `name:"authCreate city_name* company_name* auth_name* auth_info" role:"void"`
authCreate string `name:"authCreate city_uid*" role:"void"`
}
func (s user) Create(m *ice.Message, arg ...string) {
if m.IsTech() {
m.OptionDefault(aaa.AVATAR, m.Option(ice.MSG_AVATAR))
m.OptionDefault(aaa.USERNICK, m.Option(ice.MSG_USERNICK))
m.OptionDefault(aaa.AVATAR, m.Option(ice.MSG_AVATAR), aaa.USERNICK, m.Option(ice.MSG_USERNICK))
}
if s.Table.Select(m, m.OptionSimple(model.OPEN_ID)...).Length() == 0 {
s.Insert(m, kit.Simple(m.OptionSimple(model.OPEN_ID, model.AVATAR), model.NAME, m.Option(aaa.USERNICK))...)
@ -37,17 +35,10 @@ func (s user) Create(m *ice.Message, arg ...string) {
}
}
func (s user) Modify(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(
model.NAME, m.Option(model.USER_NAME),
model.INFO, m.Option(model.USER_INFO),
), model.UID, m.Option(model.USER_UID))
s.Update(m, kit.Dict(model.NAME, m.Option(model.USER_NAME), model.INFO, m.Option(model.USER_INFO)))
}
func (s user) Delete(m *ice.Message, arg ...string) {
m.Options(model.NAME, "profile", model.VALUE, "off")
m.Cmd(s.setting, s.Update)
}
func (s user) AuthCreate(m *ice.Message, arg ...string) {
s.Table.AuthCreate(m, m.Option(model.CITY_NAME), m.Option(model.COMPANY_NAME), 2, m.Option(model.AUTH_NAME), m.Option(model.AUTH_INFO), model.UID, m.Option(model.USER_UID))
m.Options(model.NAME, "profile", model.VALUE, "off").Cmd(s.setting, s.Update)
}
func (s user) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
@ -61,7 +52,7 @@ func (s user) List(m *ice.Message, arg ...string) {
})
}
} else {
s.Select(m, model.UID, arg[0])
s.SelectDetail(m, model.UID, arg[0])
if m.Append(model.AUTH_UID) == "" && arg[0] == m.Option(model.USER_UID) {
m.EchoInfoButton("请申请个人认证", s.AuthCreate)
}
@ -70,8 +61,9 @@ func (s user) List(m *ice.Message, arg ...string) {
func (s user) SetCookie(m *ice.Message, arg ...string) {
m.ProcessCookie(model.USER_UID, m.Option(model.UID))
}
func (s user) Email(m *ice.Message, arg ...string) {
s.Table.Update(m, kit.Dict(m.OptionSimple(model.EMAIL)), model.UID, m.Option(model.USER_UID))
func (s user) AuthCreate(m *ice.Message, arg ...string) {
msg := s.Select(m.Spawn(), m.OptionSimple(model.CITY_UID)...)
s.Table.AuthCreate(m, 2, msg.Append(model.AUTH_UID), m.Option(model.USER_NAME), m.Option(model.USER_INFO))
}
func (s user) SendTemplate(m *ice.Message, arg ...string) { // from uid url type name hash
msg := s.Select(m, model.UID, kit.Select(m.Option(model.USER_UID), arg, 1))
@ -80,5 +72,8 @@ func (s user) SendTemplate(m *ice.Message, arg ...string) { // from uid url type
"time11", time.Now().Format("2006年01月02日 15:04"), "thing18", kit.Select(kit.Select(m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERNICK)), arg, 0),
)
}
func (s user) Email(m *ice.Message, arg ...string) {
s.Table.Update(m, kit.Dict(m.OptionSimple(model.EMAIL)))
}
func init() { ice.TeamCtxCmd(user{}) }

View File

@ -1,21 +0,0 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { msg.Option("_share_title", msg.Option("user_name"))
can.ui = can.page.Appends(can, can._output, [html.HEAD, html.LIST])
can.page.Append(can, can.ui.head, [{img: can.misc.Resource(can, "usr/icons/background.jpg")}])
can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, {user_name: msg.Option("user_name"), user_avatar: msg.Option("user_avatar")}, [
{view: html.TITLE, list: [msg.Option("user_name"), can.onimport.titleAction(can, msg)]},
{view: html.STATUS, list: [msg.Option("user_info")]},
])])
var list = {}
can.onimport.myView(can, msg, function(value) {
if (list[value.place_uid]) { return } list[value.place_uid] = value
value.icon = can.misc.Resource(can, value.service_icon.split("?")[0], value.space);
return [
{view: html.TITLE, list: [value.place_name]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.service_name]},
]
}, function(event, value) {
can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [value.place_uid]})
}, can.ui.list)
},
})

View File

@ -39,8 +39,7 @@ func (s Auth) List(m *ice.Message, arg ...string) {
}).Display("")
}
func (s Auth) SelectList(m *ice.Message, arg ...string) {
s.Table.SelectList(m, arg...)
s.RenameAppend(m, model.TYPE, model.AUTH_TYPE, model.STATUS, model.AUTH_STATUS)
s.Table.SelectList(m, arg...).RenameAppend(model.TYPE, model.AUTH_TYPE, model.STATUS, model.AUTH_STATUS)
s.RewriteAppend(m)
}
func (s Auth) MemberList(m *ice.Message, arg ...string) {
@ -81,12 +80,12 @@ type AuthType int
const (
AuthRoot AuthType = iota
AuthCity
AuthPersonal
AuthService
AuthCompany
AuthSchool
AuthStreet
AuthCity // 1
AuthPersonal // 2
AuthService // 3
AuthCompany // 4
AuthSchool // 5
AuthStreet // 6
)
var AuthTypeList = map[AuthType]string{

View File

@ -7,6 +7,7 @@ const (
NAME = "name"
INFO = "info"
TYPE = "type"
ROLE = "role"
STATUS = "status"
TITLE = "title"
CONTENT = "content"
@ -16,6 +17,7 @@ const (
USER_AUTH_ROLE = "user_auth_role"
AUTH_UID = "auth_uid"
AUTH_NAME = "auth_name"
AUTH_INFO = "auth_info"
AUTH_TYPE = "auth_type"
AUTH_STATUS = "auth_status"
CERT_UID = "cert_uid"
@ -38,25 +40,22 @@ type UserAuth struct {
AuthUID string `gorm:"type:char(32);index"`
}
type Auth struct {
db.ModelWithUID
CompanyUID string `gorm:"type:char(32);index"`
db.ModelNameInfo
FromUID string `gorm:"type:char(32);index"`
Name string `gorm:"type:varchar(64)"`
Info string `gorm:"type:varchar(255)"`
Type uint8 `gorm:"default:0"`
Status uint8 `gorm:"default:0"`
Avatar string `gorm:"type:varchar(255)"`
Background string `gorm:"type:varchar(255)"`
ServiceUID string `gorm:"type:char(32)"`
PlaceUID string `gorm:"type:char(32)"`
UserUID string `gorm:"type:char(32)"`
StorageUID string `gorm:"type:char(32)"`
DashboardUID string `gorm:"type:char(32)"`
Status uint8 `gorm:"default:0"`
}
type Cert struct {
db.ModelContent
AuthUID string `gorm:"type:char(32);index"`
Path string `gorm:"type:varchar(255)"`
Type string `gorm:"type:char(8)"`
Size int `gorm:"default:0"`
}
func init() { db.CmdModels("", &UserAuth{}, &Auth{}, &Cert{}) }

View File

@ -12,7 +12,7 @@ import (
type Portal struct {
guanlixitong.Portal
placeCreate string `name:"placeCreate city_name* company_name* auth_name* auth_info auth_type*:select" role:"void"`
placeCreate string `name:"placeCreate auth_name* auth_info auth_type*:select from_uid*:select" role:"void"`
}
func (s Portal) List(m *ice.Message, arg ...string) {
@ -20,49 +20,34 @@ func (s Portal) List(m *ice.Message, arg ...string) {
kit.If(len(arg) == 0 && m.Length() > 0, func() { m.PushAction(s.PlaceRemove) })
}
func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
if m.Option(model.AUTH_TYPE) == ice.AUTO {
arg = append(arg, model.AUTH_TYPE, m.Option(model.AUTH_TYPE, AuthService))
}
if m.WarnNotRight(AuthType(kit.Int(m.Option(model.AUTH_TYPE))) == AuthRoot && !m.IsTech()) {
return
}
if AuthType(kit.Int(m.Option(model.AUTH_TYPE))) == AuthRoot && m.IsTech() {
arg = append(arg, model.STATUS, kit.Format(AuthIssued))
}
from := ""
switch AuthType(kit.Int(m.Option(model.AUTH_TYPE))) {
case AuthRoot:
from = aaa.ROOT
case AuthCity:
from = s.findAuthFrom(m, AuthRoot)
case AuthPersonal:
from = s.findAuthFrom(m, AuthCity, model.NAME, m.Option(model.CITY_NAME))
case AuthCompany:
from = s.findAuthFrom(m, AuthCity, model.NAME, m.Option(model.CITY_NAME))
case AuthService:
if city_uid := s.findAuthFrom(m, AuthCity, model.NAME, m.Option(model.CITY_NAME)); city_uid != "" {
from = s.findAuthFrom(m, AuthCompany, model.NAME, m.Option(model.COMPANY_NAME), model.FROM_UID, city_uid)
}
}
if from == "" {
if m.WarnNotRight(!m.IsTech()) {
return
}
s.Portal.PlaceCreate(m, append(arg, model.FROM_UID, m.Option(model.FROM_UID, from), model.USER_UID, m.Option(model.USER_UID))...)
arg = append(arg, model.STATUS, kit.Format(AuthIssued))
m.Option(model.FROM_UID, aaa.ROOT)
case AuthCity:
m.Option(model.FROM_UID, s.findAuthFrom(m, AuthRoot))
}
arg = kit.TransArgKeys(arg, s.Keys(s.Place, model.NAME), model.NAME, s.Keys(s.Place, model.INFO), model.INFO, s.Keys(s.Place, model.TYPE), model.TYPE)
if m.Options(arg).Cmdy(s.Place, s.Insert, arg).IsErr() {
return
}
m.Cmd(s.UserPlace, s.Insert, kit.Simple(m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID), model.ROLE, 1))
s.RecordEventWithName(m.Options(s.Keys(s.Place, model.UID), m.Result()), "")
}
func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message {
s.Tables(m, s.Place).FieldsWithCreatedAT(m, s.UserPlace,
model.AUTH_NAME, model.AUTH_TYPE, model.AUTH_STATUS, model.USER_AUTH_ROLE,
s.AS(s.Key(s.Place, model.UID), model.AUTH_UID), model.COMPANY_UID,
model.AUTH_UID, model.AUTH_NAME, model.AUTH_INFO, model.AUTH_TYPE, model.USER_AUTH_ROLE, model.AUTH_STATUS,
)
if len(arg) == 1 {
m.Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0])
} else if len(arg) == 2 {
m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0], s.Key(s.UserPlace, model.AUTH_UID), arg[1])
m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0], s.Key(s.Place, model.UID), arg[1])
} else {
return m
}
s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID)
s.SelectJoinCity(m)
return m
}

View File

@ -43,11 +43,8 @@ type Queue struct {
CompanyUID string `gorm:"type:char(32);index"`
}
type Reception struct {
db.ModelWithUID
db.ModelNameInfo
QueueUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
Name string `gorm:"type:varchar(64)"`
Info string `gorm:"type:varchar(255)"`
}
type Volume struct {
db.ModelWithUID
@ -63,7 +60,6 @@ type Volume struct {
type Schedule struct {
db.ModelWithUID
QueueUID string `gorm:"type:char(32);index"`
ReceptionUID string `gorm:"type:char(32)"`
VolumeUID string `gorm:"type:char(32)"`
UserUID string `gorm:"type:char(32);index"`
CallUID string `gorm:"type:char(32);index"`

View File

@ -5,7 +5,7 @@ import "shylinux.com/x/ice"
type open struct{ Volume }
func (s open) List(m *ice.Message, arg ...string) {
s.Volume.List(m, arg...).PushAction(s.MarketInsert)
s.Volume.List(m, arg...).PushAction(s.MarketInsert).Action(s.Create)
s.Button(m, "")
}

View File

@ -45,8 +45,11 @@ func (s Schedule) Call(m *ice.Message, arg ...string) {
return
}
s.changeStatus(m, ScheduleTake, ScheduleCall, model.CALL_UID, user_uid)
s.SendMessage(m, m.Append(model.USER_UID), user_uid)
s.SendMessage(m, user_uid, m.Append(model.USER_UID))
m.Info("what %v %v", arg, m.FormatMeta())
arg = append(arg[0:1], m.Append(model.UID))
s.SendMessage(m, m.Append(model.USER_UID), user_uid, arg...)
s.GetCommandUID(m)
s.SendMessage(m, user_uid, m.Append(model.USER_UID), arg...)
s.sendTemplate(m, "已叫号", m.Append(model.UID))
m.ProcessRewrite(model.UID, m.Append(model.UID))
}

View File

@ -26,7 +26,7 @@ func (s Volume) List(m *ice.Message, arg ...string) *ice.Message {
model.TOTAL, model.COUNT, model.EXPIRE, model.FINISH, model.USER_UID,
)
if len(arg) == 1 {
s.Select(m, s.Key(s, model.QUEUE_UID), arg[0])
s.Select(m, s.Key(s, model.QUEUE_UID), arg[0]).Action()
} else if len(arg) == 2 {
s.SelectDetail(m, s.Key(s, model.QUEUE_UID), arg[0], s.Key(s, model.UID), arg[1])
}