mirror of
https://shylinux.com/x/community
synced 2025-04-26 01:54:05 +08:00
add some
This commit is contained in:
parent
d6dff45402
commit
f7b7966979
@ -21,6 +21,7 @@ type allow struct {
|
|||||||
|
|
||||||
func (s allow) Create(m *ice.Message, arg ...string) {
|
func (s allow) Create(m *ice.Message, arg ...string) {
|
||||||
s.Table.Create(m, arg...)
|
s.Table.Create(m, arg...)
|
||||||
|
s.SendMessage(m, m.Option(model.FROM_USER_UID), m.Option(model.USER_UID))
|
||||||
s.sendTemplate(m, m.Trans("role order create", "权限审批 请处理"))
|
s.sendTemplate(m, m.Trans("role order create", "权限审批 请处理"))
|
||||||
}
|
}
|
||||||
func (s allow) List(m *ice.Message, arg ...string) {
|
func (s allow) List(m *ice.Message, arg ...string) {
|
||||||
@ -54,6 +55,7 @@ func (s allow) Reject(m *ice.Message, arg ...string) {
|
|||||||
m.Cmdy(m.Prefix("apply"), s.apply.Reject, m.Option(model.UID)).ProcessRefresh()
|
m.Cmdy(m.Prefix("apply"), s.apply.Reject, m.Option(model.UID)).ProcessRefresh()
|
||||||
s.RecordEvent(m, kit.JoinWord("❌", m.Trans("order rejected", "审批驳回"), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
|
s.RecordEvent(m, kit.JoinWord("❌", m.Trans("order rejected", "审批驳回"), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
|
||||||
s.sendTemplate(m, m.Trans("role order rejected", "权限审批 已驳回"))
|
s.sendTemplate(m, m.Trans("role order rejected", "权限审批 已驳回"))
|
||||||
|
s.DoneMessage(m)
|
||||||
}
|
}
|
||||||
func (s allow) Approve(m *ice.Message, arg ...string) {
|
func (s allow) Approve(m *ice.Message, arg ...string) {
|
||||||
defer m.ToastProcess()()
|
defer m.ToastProcess()()
|
||||||
@ -63,6 +65,7 @@ func (s allow) Approve(m *ice.Message, arg ...string) {
|
|||||||
m.Cmdy(m.Prefix("apply"), s.apply.Approve, m.Option(model.UID)).ProcessRefresh()
|
m.Cmdy(m.Prefix("apply"), s.apply.Approve, m.Option(model.UID)).ProcessRefresh()
|
||||||
s.RecordEvent(m, "", kit.JoinWord("✅", m.Trans("order approved", "审批通过"), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
|
s.RecordEvent(m, "", kit.JoinWord("✅", m.Trans("order approved", "审批通过"), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
|
||||||
s.sendTemplate(m, m.Trans("role order approved", "权限审批 已通过"))
|
s.sendTemplate(m, m.Trans("role order approved", "权限审批 已通过"))
|
||||||
|
s.DoneMessage(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { ice.TeamCtxCmd(allow{Table: newTable()}) }
|
func init() { ice.TeamCtxCmd(allow{Table: newTable()}) }
|
||||||
|
@ -33,6 +33,7 @@ func (s apply) Create(m *ice.Message, arg ...string) {
|
|||||||
arg = kit.TransArgKeys(arg, PLACE_UID, model.PLACE_UID)
|
arg = kit.TransArgKeys(arg, PLACE_UID, model.PLACE_UID)
|
||||||
arg = kit.TransArgKeys(arg, USER_PLACE_ROLE, model.ROLE)
|
arg = kit.TransArgKeys(arg, USER_PLACE_ROLE, model.ROLE)
|
||||||
s.Table.Create(m, kit.Simple(model.PLACE_UID, m.Option(PLACE_UID), arg, m.OptionSimple(model.USER_UID), model.TABLES, PLACE_UID, model.STATUS, ApplyCreate)...)
|
s.Table.Create(m, kit.Simple(model.PLACE_UID, m.Option(PLACE_UID), arg, m.OptionSimple(model.USER_UID), model.TABLES, PLACE_UID, model.STATUS, ApplyCreate)...)
|
||||||
|
m.ProcessRewrite(model.UID, m.Result())
|
||||||
}
|
}
|
||||||
func (s apply) List(m *ice.Message, arg ...string) {
|
func (s apply) List(m *ice.Message, arg ...string) {
|
||||||
s.Tables(m, s.user).FieldsWithCreatedAT(m, s, model.USER_AVATAR, model.USER_NAME,
|
s.Tables(m, s.user).FieldsWithCreatedAT(m, s, model.USER_AVATAR, model.USER_NAME,
|
||||||
@ -44,7 +45,8 @@ func (s apply) List(m *ice.Message, arg ...string) {
|
|||||||
kit.If(m.Length() == 0, func() { m.EchoInfoButton("", s.Create) })
|
kit.If(m.Length() == 0, func() { m.EchoInfoButton("", s.Create) })
|
||||||
} else if len(arg) == 2 {
|
} else if len(arg) == 2 {
|
||||||
s.Table.SelectDetail(m, model.USER_UID, m.Option(model.USER_UID), model.PLACE_UID, arg[0], s.Key(s, model.UID), arg[1])
|
s.Table.SelectDetail(m, model.USER_UID, m.Option(model.USER_UID), model.PLACE_UID, arg[0], s.Key(s, model.UID), arg[1])
|
||||||
if ApplyStatus(kit.Int(m.Append(model.APPLY_STATUS))) == ApplySubmit {
|
switch ApplyStatus(kit.Int(m.Append(model.APPLY_STATUS))) {
|
||||||
|
case ApplySubmit:
|
||||||
m.EchoQRCode(Portal{}.Link(m, arg[0], ice.GetTypeKey(allow{}), arg[1]))
|
m.EchoQRCode(Portal{}.Link(m, arg[0], ice.GetTypeKey(allow{}), arg[1]))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -79,8 +81,10 @@ func (s apply) Submit(m *ice.Message, arg ...string) {
|
|||||||
if m.WarnNotFound(msg.Length() == 0, role.String()) {
|
if m.WarnNotFound(msg.Length() == 0, role.String()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
m.Option(model.FROM_USER_UID, m.Option(model.USER_UID))
|
||||||
m.Cmd(allow{}, s.Create, msg.AppendSimple(model.USER_UID), model.APPLY_UID, m.Option(model.UID), model.STATUS, OrderCreate)
|
m.Cmd(allow{}, s.Create, msg.AppendSimple(model.USER_UID), model.APPLY_UID, m.Option(model.UID), model.STATUS, OrderCreate)
|
||||||
s.RecordEvent(m, "", kit.Format("🕑 %s"+m.Trans(" apply submit", "权限申请提交"), s.TransRole(m)), m.Option(model.UID))
|
s.RecordEvent(m, "", kit.Format("🕑 %s"+m.Trans(" apply submit", "权限申请提交"), s.TransRole(m)), 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) {
|
func (s apply) Reject(m *ice.Message, arg ...string) {
|
||||||
msg := s.changeStatus(m, ApplySubmit, ApplyRejected)
|
msg := s.changeStatus(m, ApplySubmit, ApplyRejected)
|
||||||
|
@ -129,6 +129,8 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
|
|||||||
value = ApplyStatus(kit.Int(value)).String()
|
value = ApplyStatus(kit.Int(value)).String()
|
||||||
case model.ALLOW_STATUS:
|
case model.ALLOW_STATUS:
|
||||||
value = OrderStatus(kit.Int(value)).String()
|
value = OrderStatus(kit.Int(value)).String()
|
||||||
|
case model.MESSAGE_STATUS:
|
||||||
|
value = MessageStatus(kit.Int(value)).String()
|
||||||
}
|
}
|
||||||
return value
|
return value
|
||||||
})
|
})
|
||||||
@ -170,13 +172,17 @@ func (s Table) RecordEventWithName(m *ice.Message, place_uid, info string, arg .
|
|||||||
}
|
}
|
||||||
func (s Table) AddRecent(m *ice.Message, arg ...string) {
|
func (s Table) AddRecent(m *ice.Message, arg ...string) {
|
||||||
cmd := m.GetCommand()
|
cmd := m.GetCommand()
|
||||||
m.Cmd(recent{}, s.Create, mdb.NAME, cmd.Help, mdb.ICON, m.Resource(kit.Select(ice.Info.NodeIcon, cmd.Icon)), web.SPACE, m.Option(ice.MSG_USERPOD), ctx.INDEX, m.PrefixKey(), ctx.ARGS, kit.Join(arg))
|
m.Cmd(recent{}, s.Create, mdb.NAME, cmd.Help+" "+ice.Info.Title(), mdb.ICON, m.Resource(kit.Select(ice.Info.NodeIcon, cmd.Icon)), web.SPACE, m.Option(ice.MSG_USERPOD), ctx.INDEX, m.PrefixKey(), ctx.ARGS, kit.Join(arg))
|
||||||
}
|
}
|
||||||
func (s Table) SendMessage(m *ice.Message, place_name, to_user_uid string, arg ...string) {
|
func (s Table) SendMessage(m *ice.Message, from_user_uid, to_user_uid string, arg ...string) {
|
||||||
cmd := m.GetCommand()
|
cmd := m.GetCommand()
|
||||||
m.Cmd(message{}, s.Create, model.TO_USER_UID, to_user_uid, model.PLACE_NAME, place_name,
|
kit.If(len(arg) == 0, func() { arg = append(arg, m.Option(s.Keys(s.Place, model.UID)), m.Option(model.UID)) })
|
||||||
|
m.Spawn(ice.Maps{db.DB: ""}).Cmd(message{}, s.Create, model.FROM_USER_UID, from_user_uid, model.TO_USER_UID, to_user_uid, model.PLACE_NAME, m.Option("_place_name"),
|
||||||
mdb.NAME, cmd.Help, mdb.ICON, cmd.Icon, web.SPACE, m.Option(ice.MSG_USERPOD), ctx.INDEX, m.PrefixKey(), ctx.ARGS, kit.Join(arg))
|
mdb.NAME, cmd.Help, mdb.ICON, cmd.Icon, web.SPACE, m.Option(ice.MSG_USERPOD), ctx.INDEX, m.PrefixKey(), ctx.ARGS, kit.Join(arg))
|
||||||
}
|
}
|
||||||
|
func (s Table) DoneMessage(m *ice.Message, arg ...string) {
|
||||||
|
m.Spawn(ice.Maps{db.DB: ""}).Cmd(message{}, message{}.Done, kit.Dict(model.UID, m.Option(model.MESSAGE_UID)))
|
||||||
|
}
|
||||||
func (s Table) SendTemplate(m *ice.Message, from, user_uid, title string, arg ...string) {
|
func (s Table) SendTemplate(m *ice.Message, from, user_uid, title string, arg ...string) {
|
||||||
if m.IsErr() {
|
if m.IsErr() {
|
||||||
return
|
return
|
||||||
@ -261,7 +267,7 @@ func PortalCmd(portal ice.Any) {
|
|||||||
cmd("apply", apply{Table: table})
|
cmd("apply", apply{Table: table})
|
||||||
cmd("allow", allow{Table: table})
|
cmd("allow", allow{Table: table})
|
||||||
cmd("member", placeUser{Tables: Tables{Table: table}})
|
cmd("member", placeUser{Tables: Tables{Table: table}})
|
||||||
cmd("message", message{})
|
cmd("message", Message{})
|
||||||
cmd("recent", recent{})
|
cmd("recent", recent{})
|
||||||
cmd("service", service{Table: table})
|
cmd("service", service{Table: table})
|
||||||
cmd("support", support{})
|
cmd("support", support{})
|
||||||
|
@ -2,23 +2,35 @@ package gonganxitong
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"shylinux.com/x/ice"
|
"shylinux.com/x/ice"
|
||||||
|
"shylinux.com/x/icebergs/base/ctx"
|
||||||
|
"shylinux.com/x/icebergs/base/web/html"
|
||||||
kit "shylinux.com/x/toolkits"
|
kit "shylinux.com/x/toolkits"
|
||||||
|
|
||||||
"shylinux.com/x/community/src/gonganxitong/model"
|
"shylinux.com/x/community/src/gonganxitong/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
type message struct {
|
type Message struct {
|
||||||
Table
|
Table
|
||||||
order string `data:"100"`
|
order string `data:"100"`
|
||||||
|
domain string `data:"gonganxitong"`
|
||||||
read string `name:"read" role:"void"`
|
read string `name:"read" role:"void"`
|
||||||
done string `name:"done" role:"void"`
|
done string `name:"done" role:"void"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s message) Create(m *ice.Message, arg ...string) {
|
func (s Message) Create(m *ice.Message, arg ...string) {
|
||||||
s.Table.Create(m, kit.Simple(arg, model.FROM_USER_UID, m.Option(model.USER_UID))...)
|
s.Table.Create(m, kit.Simple(arg)...)
|
||||||
}
|
}
|
||||||
func (s message) List(m *ice.Message, arg ...string) {
|
func (s Message) List(m *ice.Message, arg ...string) {
|
||||||
s.Select(m, model.TO_USER_UID, m.Option(model.USER_UID)).Table(func(value ice.Maps) {
|
if len(arg) < 2 {
|
||||||
|
s.Select(m, model.TO_USER_UID, m.Option(model.USER_UID))
|
||||||
|
} else if len(arg) == 2 {
|
||||||
|
msg := s.SelectDetail(m.Spawn(), model.TO_USER_UID, m.Option(model.USER_UID), model.UID, arg[1])
|
||||||
|
m.ProcessField(msg.Append(ctx.INDEX), kit.Split(msg.Append(ctx.ARGS)))
|
||||||
|
m.Push(ctx.STYLE, html.OUTPUT)
|
||||||
|
} else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m.Table(func(value ice.Maps) {
|
||||||
switch MessageStatus(kit.Int(value[model.STATUS])) {
|
switch MessageStatus(kit.Int(value[model.STATUS])) {
|
||||||
case MessageCreate:
|
case MessageCreate:
|
||||||
m.PushButton(s.Read, s.Done)
|
m.PushButton(s.Read, s.Done)
|
||||||
@ -28,14 +40,18 @@ func (s message) List(m *ice.Message, arg ...string) {
|
|||||||
m.PushButton()
|
m.PushButton()
|
||||||
}
|
}
|
||||||
}).Action()
|
}).Action()
|
||||||
|
m.RenameAppend(model.FROM_USER_UID, model.USER_UID, model.STATUS, model.MESSAGE_STATUS)
|
||||||
|
s.SelectJoinUser(m)
|
||||||
}
|
}
|
||||||
func (s message) Read(m *ice.Message, arg ...string) {
|
func (s Message) Read(m *ice.Message, arg ...string) {
|
||||||
s.Table.Update(m, kit.Dict(model.STATUS, MessageRead), m.OptionSimple(model.TO_USER_UID, model.UID)...)
|
s.Table.Update(m, kit.Dict(model.STATUS, MessageRead), kit.Simple(model.TO_USER_UID, m.Option(model.USER_UID), m.OptionSimple(model.UID))...)
|
||||||
}
|
}
|
||||||
func (s message) Done(m *ice.Message, arg ...string) {
|
func (s Message) Done(m *ice.Message, arg ...string) {
|
||||||
s.Table.Update(m, kit.Dict(model.STATUS, MessageDone), m.OptionSimple(model.TO_USER_UID, model.UID)...)
|
s.Table.Update(m, kit.Dict(model.STATUS, MessageDone), kit.Simple(model.TO_USER_UID, m.Option(model.USER_UID), m.OptionSimple(model.UID))...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type message struct{ Message }
|
||||||
|
|
||||||
func init() { ice.TeamCtxCmd(message{}) }
|
func init() { ice.TeamCtxCmd(message{}) }
|
||||||
|
|
||||||
type MessageStatus int
|
type MessageStatus int
|
||||||
|
@ -1,9 +1,24 @@
|
|||||||
Volcanos(chat.ONIMPORT, {
|
Volcanos(chat.ONIMPORT, {
|
||||||
_init: function(can, msg) { can.onimport.shareTitle(can, msg)
|
_init: function(can, msg) {
|
||||||
can.onimport.itemcards(can, msg, function(value) { return [
|
if (msg.IsDetail()) { var value = msg.TableDetail()
|
||||||
{view: html.TITLE, list: [value.name]},
|
msg.Option("_share_title", value.place_name+" "+value.name)
|
||||||
|
}
|
||||||
|
can.onimport.itemcards(can, msg, function(value) {
|
||||||
|
value.icons = value.user_avatar||value.icon; return [
|
||||||
|
{view: html.TITLE, list: [value.place_name, value.name, value.message_status != "done" && can.onimport.textView(can, value, "message_status", mdb.STATUS)]},
|
||||||
{view: html.STATUS, list: [value.uid.slice(0, 6), can.base.TimeTrim(value.created_at), value.user_name]},
|
{view: html.STATUS, list: [value.uid.slice(0, 6), can.base.TimeTrim(value.created_at), value.user_name]},
|
||||||
{view: html.OUTPUT, list: [value.info]},
|
{view: html.OUTPUT, list: [value.info]},
|
||||||
] }, function(event, value) { can.onimport.float(can, value) })
|
]
|
||||||
|
}, function(event, value) {
|
||||||
|
var args = can.core.Split(value.args)[1]
|
||||||
|
can.onexport.title(can, [value.place_name, value.name, args.slice(0, 6)].join(" "))
|
||||||
|
can.Option("uid", value.uid), can.Update(event)
|
||||||
|
})
|
||||||
|
/*
|
||||||
|
, function(event, value) { can.onimport.float(can, value, function(sub) { var run = sub.run
|
||||||
|
sub.run = function(event, cmds, cb) { run(can.request(event, {message_uid: value.uid}), cmds, cb) }
|
||||||
|
can.run(can.request({}, value), [ctx.ACTION, "read"], function() {})
|
||||||
|
}) })
|
||||||
|
*/
|
||||||
},
|
},
|
||||||
})
|
})
|
@ -34,6 +34,10 @@ const (
|
|||||||
APPLY_STATUS = "apply_status"
|
APPLY_STATUS = "apply_status"
|
||||||
ALLOW_UID = "allow_uid"
|
ALLOW_UID = "allow_uid"
|
||||||
ALLOW_STATUS = "allow_status"
|
ALLOW_STATUS = "allow_status"
|
||||||
|
MESSAGE_UID = "message_uid"
|
||||||
|
SERVICE_TYPE = "service_type"
|
||||||
|
MESSAGE_STATUS = "message_status"
|
||||||
|
SERVICE_STATUS = "service_status"
|
||||||
FROM_USER_UID = "from_user_uid"
|
FROM_USER_UID = "from_user_uid"
|
||||||
TO_USER_UID = "to_user_uid"
|
TO_USER_UID = "to_user_uid"
|
||||||
BEGIN_TIME = "begin_time"
|
BEGIN_TIME = "begin_time"
|
||||||
|
@ -19,6 +19,10 @@ $output>div.action div.item.button input { border:none; color:var(--notice-bg-co
|
|||||||
$output>div.action div.item.button input:hover { background-color:var(--hover-bg-color); }
|
$output>div.action div.item.button input:hover { background-color:var(--hover-bg-color); }
|
||||||
$output>div.action div.item.button span { display:none; }
|
$output>div.action div.item.button span { display:none; }
|
||||||
$output>div.action div.item.button i { display:none; }
|
$output>div.action div.item.button i { display:none; }
|
||||||
|
$output input[type=button][name=submit] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); padding:0 20px; }
|
||||||
|
$output input[type=button][name=cancel] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); padding:0 20px; }
|
||||||
|
$output input[type=button][name=reject] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); padding:0 20px; }
|
||||||
|
$output input[type=button][name=approve] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); padding:0 20px; }
|
||||||
$output span.type { border:var(--box-notice); color:var(--notice-bg-color); padding:0 3px; }
|
$output span.type { border:var(--box-notice); color:var(--notice-bg-color); padding:0 3px; }
|
||||||
$output span.role { border:var(--box-notice); color:var(--notice-bg-color); padding:0 3px; }
|
$output span.role { border:var(--box-notice); color:var(--notice-bg-color); padding:0 3px; }
|
||||||
$output span.type.danger { border:var(--box-danger); color:var(--danger-bg-color); }
|
$output span.type.danger { border:var(--box-danger); color:var(--danger-bg-color); }
|
||||||
@ -31,7 +35,7 @@ $output table.content td.action i { display:none; }
|
|||||||
$output fieldset.form>div.output>div.code>input[type=button] { font-size:18px; margin:10px; height:36px; }
|
$output fieldset.form>div.output>div.code>input[type=button] { font-size:18px; margin:10px; height:36px; }
|
||||||
$output fieldset>div.output>div.code>input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); margin-right:10px; min-width:80px; float:right; }
|
$output fieldset>div.output>div.code>input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); margin-right:10px; min-width:80px; float:right; }
|
||||||
$output fieldset>div.output>div.code>input[type=button].danger { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
|
$output fieldset>div.output>div.code>input[type=button].danger { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
|
||||||
$output fieldset>div.output>div.code>input[type=button][name=cancel] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
|
$output fieldset>div.output>div.code>input[type=button][name=cancel] { border:var(--box-border); background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
|
||||||
$output fieldset.story fieldset.story { position:absolute; top:0; }
|
$output fieldset.story fieldset.story { position:absolute; top:0; }
|
||||||
$output fieldset.story { box-shadow:none; }
|
$output fieldset.story { box-shadow:none; }
|
||||||
$output fieldset.story>div.output { background-color:var(--plugin-bg-color); }
|
$output fieldset.story>div.output { background-color:var(--plugin-bg-color); }
|
||||||
|
@ -12,8 +12,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Portal struct {
|
type Portal struct {
|
||||||
Table
|
|
||||||
ice.Hash
|
ice.Hash
|
||||||
|
Table
|
||||||
user user
|
user user
|
||||||
city city
|
city city
|
||||||
export string `data:"true"`
|
export string `data:"true"`
|
||||||
@ -38,8 +38,12 @@ func (s Portal) BeforeMigrate(m *ice.Message, arg ...string) {
|
|||||||
}
|
}
|
||||||
func (s Portal) AfterMigrate(m *ice.Message, arg ...string) {
|
func (s Portal) AfterMigrate(m *ice.Message, arg ...string) {
|
||||||
cmd := m.GetCommand()
|
cmd := m.GetCommand()
|
||||||
|
name := kit.Select("", kit.Split(m.PrefixKey(), "."), -2)
|
||||||
|
if !m.Exists("src/" + name) {
|
||||||
|
return
|
||||||
|
}
|
||||||
m.GoSleep("30ms", func() {
|
m.GoSleep("30ms", func() {
|
||||||
m.Cmdy(service{}, s.Table.Update, ctx.INDEX, m.PrefixKey(), mdb.NAME, cmd.Help, mdb.ICON, m.Resource(kit.Select(ice.Info.NodeIcon, cmd.Icon)))
|
m.Cmdy(service{}, s.Table.Update, ctx.INDEX, m.PrefixKey(), mdb.NAME, cmd.Help+" "+ice.Info.Title(), mdb.ICON, m.Resource(kit.Select(ice.Info.NodeIcon, cmd.Icon)))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func (s Portal) Inputs(m *ice.Message, arg ...string) {
|
func (s Portal) Inputs(m *ice.Message, arg ...string) {
|
||||||
@ -52,7 +56,7 @@ func (s Portal) Run(m *ice.Message, arg ...string) {
|
|||||||
if action, ok := cmd.Actions[arg[2]]; ok {
|
if action, ok := cmd.Actions[arg[2]]; ok {
|
||||||
sub, role = arg[2], action.Role
|
sub, role = arg[2], action.Role
|
||||||
}
|
}
|
||||||
} else {
|
} else if len(arg) > 1 {
|
||||||
if action, ok := cmd.Actions[arg[1]]; ok {
|
if action, ok := cmd.Actions[arg[1]]; ok {
|
||||||
sub, role = arg[1], action.Role
|
sub, role = arg[1], action.Role
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,9 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
can.onimport.myPortal(can, msg)
|
can.onimport.myPortal(can, msg)
|
||||||
},
|
},
|
||||||
layout: function(can) {
|
layout: function(can) {
|
||||||
can.ui.action && can.onmotion.delay(can, function() { can.page.style(can, can.ui.output, html.HEIGHT, can.ConfHeight() - can.ui.action.offsetHeight) })
|
can.ui.action && can.ui.output && can.onmotion.delay(can, function() {
|
||||||
|
can.page.style(can, can.ui.output, html.HEIGHT, can.ConfHeight() - can.ui.action.offsetHeight)
|
||||||
|
})
|
||||||
},
|
},
|
||||||
myValue: function(can, value) {
|
myValue: function(can, value) {
|
||||||
return [
|
return [
|
||||||
@ -21,7 +23,7 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
var PLACE_UID = msg.Option("_place_uid"), PLACE_NAME = msg.Option("_place_name"), PLACE_TYPE = msg.Option("_place_type")
|
var PLACE_UID = msg.Option("_place_uid"), PLACE_NAME = msg.Option("_place_name"), PLACE_TYPE = msg.Option("_place_type")
|
||||||
var USER_PLACE_ROLE = msg.Option("_user_place_role"), STREET_NAME = msg.Option("_street_name")
|
var USER_PLACE_ROLE = msg.Option("_user_place_role"), STREET_NAME = msg.Option("_street_name")
|
||||||
can.isCmdMode() && (can.db.hash = can.misc.SearchHash(can)), can.db.hash[0] && can.onexport.session(can, PLACE_UID, can.db.hash[0])
|
can.isCmdMode() && (can.db.hash = can.misc.SearchHash(can)), can.db.hash[0] && can.onexport.session(can, PLACE_UID, can.db.hash[0])
|
||||||
if (can.Option(PLACE_UID) == "") {
|
if (can.Option(ctx.INDEX) == "") {
|
||||||
if (can.db.hash.length > 1 && can.db.hash[0]) { return can.Option(PLACE_UID, can.db.hash[0]), can.Option(ctx.INDEX, can.db.hash[1]), can.Update() }
|
if (can.db.hash.length > 1 && can.db.hash[0]) { return can.Option(PLACE_UID, can.db.hash[0]), can.Option(ctx.INDEX, can.db.hash[1]), can.Update() }
|
||||||
can.ui = can.page.Append(can, can._output, [
|
can.ui = can.page.Append(can, can._output, [
|
||||||
{view: html.OUTPUT, list: ["myplace.list", "myindex.list"]},
|
{view: html.OUTPUT, list: ["myplace.list", "myindex.list"]},
|
||||||
@ -32,11 +34,14 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
{view: html.ACTION, _init: function(target) { msg.Option(ice.MSG_ACTION) && can.onappend._action(can, msg.Option(ice.MSG_ACTION), target) }}
|
{view: html.ACTION, _init: function(target) { msg.Option(ice.MSG_ACTION) && can.onappend._action(can, msg.Option(ice.MSG_ACTION), target) }}
|
||||||
]}])
|
]}])
|
||||||
var uid = can.onimport.myPlace(can, msg, can.ui.myplace, PLACE_UID, PLACE_NAME, PLACE_TYPE)
|
var uid = can.onimport.myPlace(can, msg, can.ui.myplace, PLACE_UID, PLACE_NAME, PLACE_TYPE)
|
||||||
msg.Length() > 0 && can.run({}, [uid], function(msg) {
|
msg.Length() > 0? can.run({}, [uid], function(msg) {
|
||||||
can.page.Append(can, can.ui.myindex, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Index", "我的应用")}]}])
|
can.page.Append(can, can.ui.myindex, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Index", "我的应用")}]}])
|
||||||
can.onimport.myIndex(can, msg, can.ui.myindex, PLACE_UID, USER_PLACE_ROLE), can.onimport.selectIndex(can, can.sup.current)
|
can.onimport.myIndex(can, msg, can.ui.myindex, PLACE_UID, USER_PLACE_ROLE), can.onimport.selectIndex(can, can.sup.current)
|
||||||
can.page.Append(can, can.ui.myorder, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Order", "我的系统")}]}])
|
can.page.Append(can, can.ui.myorder, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Order", "我的系统")}]}])
|
||||||
can.onimport.myOrder(can, msg, can.ui.myorder, PLACE_UID, USER_PLACE_ROLE)
|
can.onimport.myOrder(can, msg, can.ui.myorder, PLACE_UID, USER_PLACE_ROLE)
|
||||||
|
}): can.run({}, [uid], function(msg) {
|
||||||
|
can.page.Append(can, can.ui.myorder, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Order", "我的系统")}]}])
|
||||||
|
can.onimport.myOrder(can, msg, can.ui.myorder, PLACE_UID, USER_PLACE_ROLE)
|
||||||
}) , can.ui.place_count = msg.Length()
|
}) , can.ui.place_count = msg.Length()
|
||||||
} else {
|
} else {
|
||||||
can.onimport.myData(can, msg, can._output, PLACE_UID, PLACE_NAME)
|
can.onimport.myData(can, msg, can._output, PLACE_UID, PLACE_NAME)
|
||||||
@ -45,7 +50,7 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
myPlace: function(can, msg, target, PLACE_UID, PLACE_NAME, PLACE_TYPE) { var place_uid
|
myPlace: function(can, msg, target, PLACE_UID, PLACE_NAME, PLACE_TYPE) { var place_uid
|
||||||
var USER_PLACE_ROLE = msg.Option("_user_place_role"), STREET_NAME = msg.Option("_street_name")
|
var USER_PLACE_ROLE = msg.Option("_user_place_role"), STREET_NAME = msg.Option("_street_name")
|
||||||
can.ui._target = can.page.Append(can, target||can._output, [html.OUTPUT])._target
|
can.ui._target = can.page.Append(can, target||can._output, [html.OUTPUT])._target
|
||||||
can.page.Append(can, can.ui._target, msg.Table(function(value) {
|
msg.Length() > 0 && can.page.Append(can, can.ui._target, msg.Table(function(value) {
|
||||||
place_uid = place_uid||value[PLACE_UID], value[PLACE_UID] == can.onexport.session(can, PLACE_UID) && (place_uid = value[PLACE_UID])
|
place_uid = place_uid||value[PLACE_UID], value[PLACE_UID] == can.onexport.session(can, PLACE_UID) && (place_uid = value[PLACE_UID])
|
||||||
place_uid == value[PLACE_UID] && (can.sup.current = value, can.onexport.title(can, value[PLACE_NAME]))
|
place_uid == value[PLACE_UID] && (can.sup.current = value, can.onexport.title(can, value[PLACE_NAME]))
|
||||||
value._uid = value[PLACE_UID], value._name = value[PLACE_NAME], value._street = value[STREET_NAME]
|
value._uid = value[PLACE_UID], value._name = value[PLACE_NAME], value._street = value[STREET_NAME]
|
||||||
@ -59,7 +64,7 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
})
|
})
|
||||||
})), can.sup.current && can.onexport.value(can, can.sup.current, PLACE_UID, PLACE_NAME)
|
})), can.sup.current && can.onexport.value(can, can.sup.current, PLACE_UID, PLACE_NAME)
|
||||||
can.page.Append(can, target, [{view: html.ACTION, _init: function(target) { can.onappend._action(can, msg.Option(ice.MSG_ACTION), target) }}])
|
can.page.Append(can, target, [{view: html.ACTION, _init: function(target) { can.onappend._action(can, msg.Option(ice.MSG_ACTION), target) }}])
|
||||||
return place_uid
|
return place_uid||""
|
||||||
},
|
},
|
||||||
myList: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
|
myList: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
|
||||||
var width = (can.ConfWidth()-40)/parseInt((can.ConfWidth()-40)/100), height = width+20; can.user.isMobile && !can.user.isLandscape() && (width = (can.ConfWidth()-40)/4, height = width+20)
|
var width = (can.ConfWidth()-40)/parseInt((can.ConfWidth()-40)/100), height = width+20; can.user.isMobile && !can.user.isLandscape() && (width = (can.ConfWidth()-40)/4, height = width+20)
|
||||||
@ -85,12 +90,12 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
var _msg = can.request(); msg.Table(function(value) { if (value.order < 99) { _msg.Push(value) } })
|
var _msg = can.request(); msg.Table(function(value) { if (value.order < 99) { _msg.Push(value) } })
|
||||||
var output = can.page.Append(can, target, [html.OUTPUT])._target
|
var output = can.page.Append(can, target, [html.OUTPUT])._target
|
||||||
can.onimport.myList(can, _msg, output, PLACE_UID, USER_PLACE_ROLE)
|
can.onimport.myList(can, _msg, output, PLACE_UID, USER_PLACE_ROLE)
|
||||||
can.onmotion.delay(can, function() { can.page.style(can, can.ui.output, html.HEIGHT, can.ConfHeight() - can.ui.action.offsetHeight) })
|
|
||||||
},
|
},
|
||||||
myOrder: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
|
myOrder: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
|
||||||
var _msg = can.request(); msg.Table(function(value) { if (value.order > 99) { _msg.Push(value) } })
|
var _msg = can.request(); msg.Table(function(value) { if (value.order > 99) { _msg.Push(value) } })
|
||||||
var output = can.page.Append(can, target, [html.OUTPUT])._target
|
var output = can.page.Append(can, target, [html.OUTPUT])._target
|
||||||
can.onimport.myList(can, _msg, output, PLACE_UID, USER_PLACE_ROLE)
|
can.onimport.myList(can, _msg, output, PLACE_UID, USER_PLACE_ROLE)
|
||||||
|
can.onimport.layout(can)
|
||||||
},
|
},
|
||||||
selectIndex: function(can, value, role) { role = role||value._role
|
selectIndex: function(can, value, role) { role = role||value._role
|
||||||
can.ui.role && can.onmotion.toggle(can, can.ui.role, value._role == "creator")
|
can.ui.role && can.onmotion.toggle(can, can.ui.role, value._role == "creator")
|
||||||
@ -117,6 +122,11 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
})
|
})
|
||||||
can.onexport.title(can, sub.Conf(PLACE_NAME, msg.Option(PLACE_NAME)), value.help)
|
can.onexport.title(can, sub.Conf(PLACE_NAME, msg.Option(PLACE_NAME)), value.help)
|
||||||
sub.onexport.title = function(sub) { can.onexport.title.apply(can.onexport, [can].concat(can.core.List(arguments).slice(1))) }
|
sub.onexport.title = function(sub) { can.onexport.title.apply(can.onexport, [can].concat(can.core.List(arguments).slice(1))) }
|
||||||
|
var run = sub.run
|
||||||
|
sub.run = function(event, cmds, cb) {
|
||||||
|
can.request(event, {_place_name: sub.Conf(PLACE_NAME)})
|
||||||
|
run(event, cmds, cb)
|
||||||
|
}
|
||||||
sub.onexport._output = function(_sub, msg) {
|
sub.onexport._output = function(_sub, msg) {
|
||||||
can.core.Item(can.onimport, function(key, value) { _sub.onimport[key] = _sub.onimport[key]||value })
|
can.core.Item(can.onimport, function(key, value) { _sub.onimport[key] = _sub.onimport[key]||value })
|
||||||
can.core.Item(can.onexport, function(key, value) { _sub.onexport[key] = _sub.onexport[key]||value })
|
can.core.Item(can.onexport, function(key, value) { _sub.onexport[key] = _sub.onexport[key]||value })
|
||||||
@ -133,7 +143,8 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
can.onexport.hash(can, place_uid||can.Option(PLACE_UID), index||can.Option(ctx.INDEX), uid), can.Update()
|
can.onexport.hash(can, place_uid||can.Option(PLACE_UID), index||can.Option(ctx.INDEX), uid), can.Update()
|
||||||
}
|
}
|
||||||
_sub.onexport.title = function(_sub, title) {
|
_sub.onexport.title = function(_sub, title) {
|
||||||
title? can.onexport.title(can, sub.Conf(PLACE_NAME), title):
|
// title? can.onexport.title(can, sub.Conf(PLACE_NAME), title):
|
||||||
|
title? can.onexport.title(can, title):
|
||||||
can.onexport.title(can, sub.Conf(PLACE_NAME), sub.ConfHelp(), msg.Option("_share_title")||"")
|
can.onexport.title(can, sub.Conf(PLACE_NAME), sub.ConfHelp(), msg.Option("_share_title")||"")
|
||||||
}
|
}
|
||||||
can.onexport.hash(can, can.Option(PLACE_UID), value.index, sub.Option(UID))
|
can.onexport.hash(can, can.Option(PLACE_UID), value.index, sub.Option(UID))
|
||||||
@ -141,7 +152,8 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
can.user.agent.init(can, msg.Option("_share_content"), msg.Option("_share_icons")||value.icons)
|
can.user.agent.init(can, msg.Option("_share_content"), msg.Option("_share_icons")||value.icons)
|
||||||
can.page.Appends(can, ui.action, list), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), ui.action, null, true)
|
can.page.Appends(can, ui.action, list), msg.Option(ice.MSG_ACTION) && can.onappend._action(sub, msg.Option(ice.MSG_ACTION), ui.action, null, true)
|
||||||
back = function() { can.page.ClassList.add(can, can._fields, "_back")
|
back = function() { can.page.ClassList.add(can, can._fields, "_back")
|
||||||
if (_sub.onaction._back) { return _sub.onaction._back(_sub) }
|
if (_sub.onaction._back) { _sub.onaction._back(_sub) }
|
||||||
|
can.Update()
|
||||||
}
|
}
|
||||||
_sub.onaction._back = function() {
|
_sub.onaction._back = function() {
|
||||||
if (sub.Option(UID)) {
|
if (sub.Option(UID)) {
|
||||||
@ -176,25 +188,19 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
sub.onexport.title = function(can, title) { can.user.title(can.core.List(arguments).slice(1).join(" ")) }
|
sub.onexport.title = function(can, title) { can.user.title(can.core.List(arguments).slice(1).join(" ")) }
|
||||||
}, action._output)
|
}, action._output)
|
||||||
},
|
},
|
||||||
float: function(can, value) { value.style = html.OUTPUT
|
float: function(can, value, cb) { value.style = html.OUTPUT
|
||||||
can.onappend.plugin(can, value, function(sub) {
|
can.onappend.plugin(can, value, function(sub) { var _back = can.onaction._back
|
||||||
sub.onexport.output = function(_sub, msg) {
|
can.onaction._back = function() { can.onaction._back = _back, can.page.Remove(can, sub._target), can.onexport.title(can) }
|
||||||
can.onexport.title(can, sub.ConfHelp()+" "+msg.Option("_share_title"))
|
|
||||||
}
|
|
||||||
var _back = can.onaction._back
|
|
||||||
can.onaction._back = function() { can.onaction._back = _back, can.page.Remove(can, sub._target)
|
|
||||||
can.onexport.title(can)
|
|
||||||
}
|
|
||||||
can.onaction._refresh = function() { sub.Update(), can.onmotion.delay(can, function() { can.user.toastSuccess(can, "refresh") }, 300) }
|
can.onaction._refresh = function() { sub.Update(), can.onmotion.delay(can, function() { can.user.toastSuccess(can, "refresh") }, 300) }
|
||||||
|
sub.onexport.output = function(_sub, msg) { can.onexport.title(can, sub.ConfHelp()+" "+msg.Option("_share_title"))
|
||||||
|
sub.onimport.size(sub, window.innerHeight-html.ACTION_HEIGHT, window.innerWidth, false)
|
||||||
|
}
|
||||||
|
cb && cb(sub)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
typeStyle: function(can, value, key) { return can.Conf("_trans.value."+key+".style."+value[key])||"" },
|
typeStyle: function(can, value, key) { return can.Conf("_trans.value."+key+".style."+value[key])||"" },
|
||||||
roleStyle: function(can, value, key) { return can.Conf("_trans.value."+key+".style."+value[key])||"" },
|
roleStyle: function(can, value, key) { return can.Conf("_trans.value."+key+".style."+value[key])||"" },
|
||||||
textView: function(can, value, key, type) { return value[key] && {text: [can.user.transValue(can, value, key), "", [type, value[key], can.Conf("_trans.value."+key+".style."+value[key])||""]]} },
|
textView: function(can, value, key, type) { return value[key] && {text: [can.user.transValue(can, value, key), "", [type, value[key], can.Conf("_trans.value."+key+".style."+value[key])||""]]} },
|
||||||
shareTitle: function(can, msg, title, content) {
|
|
||||||
if (msg.IsDetail()) { var value = msg.TableDetail()
|
|
||||||
msg.Option("_share_title", (value[title]||value.name||value.uid).slice(0, 6)), msg.Option("_share_content", value[content]||value.info)
|
|
||||||
} },
|
|
||||||
})
|
})
|
||||||
Volcanos(chat.ONEXPORT, {
|
Volcanos(chat.ONEXPORT, {
|
||||||
value: function(can, value, PLACE_UID, PLACE_NAME) {
|
value: function(can, value, PLACE_UID, PLACE_NAME) {
|
||||||
@ -207,4 +213,3 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
msg.Option("_share_content", can.user.transValue(can, msg, role)+" "+msg.Append("user_name"))
|
msg.Option("_share_content", can.user.transValue(can, msg, role)+" "+msg.Append("user_name"))
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
@ -32,7 +32,9 @@
|
|||||||
"place_name": "场景名称",
|
"place_name": "场景名称",
|
||||||
"place_type": "场景类型",
|
"place_type": "场景类型",
|
||||||
"place_address": "场景地址",
|
"place_address": "场景地址",
|
||||||
|
"message_status": "消息状态",
|
||||||
"street_name": "街道名称",
|
"street_name": "街道名称",
|
||||||
|
"company_name": "公司名称",
|
||||||
"city_name": "城市名称",
|
"city_name": "城市名称",
|
||||||
"apply_status": "申请状态",
|
"apply_status": "申请状态",
|
||||||
"allow_status": "审批状态",
|
"allow_status": "审批状态",
|
||||||
@ -77,6 +79,17 @@
|
|||||||
"landlord": "danger"
|
"landlord": "danger"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"message_status": {
|
||||||
|
"create": "未读",
|
||||||
|
"read": "待办",
|
||||||
|
"done": "完成"
|
||||||
|
},
|
||||||
|
"service_type": {
|
||||||
|
"worker": "空间"
|
||||||
|
},
|
||||||
|
"service_status": {
|
||||||
|
"online": "在线"
|
||||||
|
},
|
||||||
"place_type": {
|
"place_type": {
|
||||||
"house": "住宅",
|
"house": "住宅",
|
||||||
"hotel": "宾馆",
|
"hotel": "宾馆",
|
||||||
|
@ -3,7 +3,7 @@ Volcanos(chat.ONIMPORT, {
|
|||||||
can.onimport.itemcards(can, msg, function(value) { var args = can.core.Split(value.args)
|
can.onimport.itemcards(can, msg, function(value) { var args = can.core.Split(value.args)
|
||||||
var sub = can._root.Action._plugins[[value.space, value.index, args[0]].join(".")]
|
var sub = can._root.Action._plugins[[value.space, value.index, args[0]].join(".")]
|
||||||
return [
|
return [
|
||||||
{view: html.TITLE, list: [args[1]||value.name, sub? {text: ["load", "", mdb.STATUS]}: ""]},
|
{view: html.TITLE, list: [[args[1], value.name].join(" "), sub? {text: ["load", "", mdb.STATUS]}: ""]},
|
||||||
{view: html.STATUS, list: [value.uid.slice(0, 6), can.base.TimeTrim(value.created_at)]},
|
{view: html.STATUS, list: [value.uid.slice(0, 6), can.base.TimeTrim(value.created_at)]},
|
||||||
{view: html.STATUS, list: [value.space]},
|
{view: html.STATUS, list: [value.space]},
|
||||||
{view: html.STATUS, list: [value.index]},
|
{view: html.STATUS, list: [value.index]},
|
||||||
|
@ -99,6 +99,7 @@ func (s service) List(m *ice.Message, arg ...string) {
|
|||||||
m.PushAction(s.Open).Action()
|
m.PushAction(s.Open).Action()
|
||||||
}
|
}
|
||||||
m.Sort("status,updated_at", []string{web.ONLINE}, ice.STR_R).Display("")
|
m.Sort("status,updated_at", []string{web.ONLINE}, ice.STR_R).Display("")
|
||||||
|
m.RenameAppend("nodetype", model.SERVICE_TYPE, mdb.STATUS, model.SERVICE_STATUS)
|
||||||
}
|
}
|
||||||
func (s service) Open(m *ice.Message, arg ...string) {
|
func (s service) Open(m *ice.Message, arg ...string) {
|
||||||
m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(m.Option(ctx.INDEX)))
|
m.ProcessOpen(web.S(m.Option(tcp.NODENAME)) + web.C(m.Option(ctx.INDEX)))
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Volcanos(chat.ONIMPORT, {
|
Volcanos(chat.ONIMPORT, {
|
||||||
_init: function(can, msg) {
|
_init: function(can, msg) {
|
||||||
can.onimport.itemcards(can, msg, function(value) { return [
|
can.onimport.itemcards(can, msg, function(value) { return [
|
||||||
{view: html.TITLE, list: [value.name, can.onimport.textView(can, value, "nodetype", mdb.TYPE), can.onimport.textView(can, value, "status", mdb.STATUS)]},
|
{view: html.TITLE, list: [value.name, can.onimport.textView(can, value, "service_type", mdb.TYPE), can.onimport.textView(can, value, "service_status", mdb.STATUS)]},
|
||||||
{view: html.STATUS, list: [value.uid.slice(0, 6), can.base.TimeTrim(value.updated_at)]},
|
{view: html.STATUS, list: [value.uid.slice(0, 6), can.base.TimeTrim(value.updated_at)]},
|
||||||
{view: html.STATUS, list: [value.index]},
|
{view: html.STATUS, list: [value.index]},
|
||||||
{view: html.STATUS, list: [value.module, value.version]},
|
{view: html.STATUS, list: [value.module, value.version]},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user