mirror of
https://shylinux.com/x/community
synced 2025-04-25 09:38:06 +08:00
add some
This commit is contained in:
parent
aae5dc83c6
commit
0ffedac920
@ -32,7 +32,7 @@ func (s allow) List(m *ice.Message, arg ...string) {
|
||||
)
|
||||
if len(arg) == 1 {
|
||||
s.Table.Select(m, s.Key(s, model.USER_UID), m.Option(model.USER_UID), model.PLACE_UID, arg[0])
|
||||
defer m.Sort(kit.Fields(model.ALLOW_STATUS, model.CREATED_AT), []string{OrderCreate.String(), OrderApproved.String(), OrderRejected.String()}, ice.STR_R)
|
||||
defer m.Sort(kit.Fields(model.ALLOW_STATUS, model.CREATED_AT), []string{AllowCreate.String(), AllowApproved.String(), AllowRejected.String()}, ice.STR_R)
|
||||
} else if len(arg) == 2 {
|
||||
s.Table.SelectDetail(m, s.Key(s, model.USER_UID), m.Option(model.USER_UID), model.PLACE_UID, arg[0], s.Key(s.apply, model.UID), arg[1])
|
||||
} else {
|
||||
@ -40,40 +40,37 @@ func (s allow) List(m *ice.Message, arg ...string) {
|
||||
}
|
||||
s.RenameAppend(m, model.PLACE_UID, s.Keys(s.Place, model.UID)).SelectJoin(m, s.Place, model.NAME, model.TYPE)
|
||||
m.Table(func(value ice.Maps) {
|
||||
if OrderStatus(kit.Int(value[model.ALLOW_STATUS])) == OrderCreate {
|
||||
if AllowStatus(kit.Int(value[model.ALLOW_STATUS])) == AllowCreate {
|
||||
m.PushButton(s.Reject, s.Approve)
|
||||
} else {
|
||||
s.DoneMessage(m)
|
||||
m.PushButton()
|
||||
}
|
||||
}).Action()
|
||||
}
|
||||
func (s allow) Reject(m *ice.Message, arg ...string) {
|
||||
defer m.ToastProcess()()
|
||||
if s.changeStatus(m, OrderCreate, OrderRejected); m.IsErr() {
|
||||
return
|
||||
}
|
||||
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.sendTemplate(m, m.Trans("role order rejected", "权限审批 已驳回"))
|
||||
s.DoneMessage(m)
|
||||
s.process(m, AllowCreate, AllowRejected, m.Trans("role order rejected", "权限审批 已驳回"))
|
||||
}
|
||||
func (s allow) Approve(m *ice.Message, arg ...string) {
|
||||
s.process(m, AllowCreate, AllowApproved, m.Trans("role allow approved", "权限审批 已通过"))
|
||||
}
|
||||
func (s allow) process(m *ice.Message, from, to AllowStatus, title string) {
|
||||
defer m.ToastProcess()()
|
||||
if s.changeStatus(m, OrderCreate, OrderApproved); m.IsErr() {
|
||||
if s.changeStatus(m, from, to); m.IsErr() {
|
||||
return
|
||||
}
|
||||
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.sendTemplate(m, m.Trans("role order approved", "权限审批 已通过"))
|
||||
m.Cmdy(m.Prefix("apply"), m.ActionKey(), m.Option(model.UID)).ProcessRefresh()
|
||||
s.RecordEvent(m, "", kit.JoinWord("✅", title, kit.Cut(m.Option(model.UID), 6), s.TransRole(m), m.Option(model.USER_NAME)), m.Option(model.UID))
|
||||
s.DoneMessage(m)
|
||||
// s.sendTemplate(m, title)
|
||||
}
|
||||
|
||||
func init() { ice.TeamCtxCmd(allow{Table: newTable()}) }
|
||||
|
||||
func (s allow) changeStatus(m *ice.Message, from, todo OrderStatus, arg ...string) *ice.Message {
|
||||
func (s allow) changeStatus(m *ice.Message, from, todo AllowStatus, arg ...string) *ice.Message {
|
||||
msg := s.Table.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 status := OrderStatus(kit.Int(msg.Append(model.STATUS))); !m.WarnNotValid(status != from, status.String()) {
|
||||
if status := AllowStatus(kit.Int(msg.Append(model.STATUS))); !m.WarnNotValid(status != from, status.String()) {
|
||||
s.Table.Update(m, kit.Dict(model.STATUS, todo), model.UID, m.Option(model.ALLOW_UID))
|
||||
}
|
||||
}
|
||||
@ -84,18 +81,18 @@ func (s allow) sendTemplate(m *ice.Message, info string) *ice.Message {
|
||||
return m
|
||||
}
|
||||
|
||||
type OrderStatus int
|
||||
type AllowStatus int
|
||||
|
||||
const (
|
||||
OrderCreate OrderStatus = iota
|
||||
OrderRejected
|
||||
OrderApproved
|
||||
AllowCreate AllowStatus = iota
|
||||
AllowRejected
|
||||
AllowApproved
|
||||
)
|
||||
|
||||
var OrderStatusList = map[OrderStatus]string{
|
||||
OrderCreate: "create",
|
||||
OrderRejected: "rejected",
|
||||
OrderApproved: "approved",
|
||||
var AllowStatusList = map[AllowStatus]string{
|
||||
AllowCreate: "create",
|
||||
AllowRejected: "rejected",
|
||||
AllowApproved: "approved",
|
||||
}
|
||||
|
||||
func (s OrderStatus) String() string { return OrderStatusList[s] }
|
||||
func (s AllowStatus) String() string { return AllowStatusList[s] }
|
||||
|
@ -48,6 +48,8 @@ func (s apply) List(m *ice.Message, arg ...string) {
|
||||
switch ApplyStatus(kit.Int(m.Append(model.APPLY_STATUS))) {
|
||||
case ApplySubmit:
|
||||
m.EchoQRCode(Portal{}.Link(m, arg[0], ice.GetTypeKey(allow{}), arg[1]))
|
||||
case ApplyRejected, ApplyApproved:
|
||||
s.DoneMessage(m)
|
||||
}
|
||||
} else {
|
||||
return
|
||||
@ -82,7 +84,7 @@ func (s apply) Submit(m *ice.Message, arg ...string) {
|
||||
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(m.Prefix("allow"), s.Create, msg.AppendSimple(model.USER_UID), model.APPLY_UID, m.Option(model.UID), model.STATUS, AllowCreate)
|
||||
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))
|
||||
}
|
||||
|
@ -76,6 +76,10 @@ func (s Table) InputsListRole(m *ice.Message, list ice.Any, arg ...string) {
|
||||
}
|
||||
m.SortInt(arg[0]).DisplayInputKeyNameIconTitle()
|
||||
}
|
||||
func (s Table) Create(m *ice.Message, arg ...string) {
|
||||
s.Table.Create(m, arg...)
|
||||
s.UserPlaceInit(m)
|
||||
}
|
||||
func (s Table) List(m *ice.Message, arg ...string) {
|
||||
if m.IsTech() {
|
||||
if len(arg) == 0 {
|
||||
@ -102,7 +106,9 @@ func (s Table) TablesWithRole(m *ice.Message, arg []string, userPlace UserPlacer
|
||||
}
|
||||
func (s Table) Select(m *ice.Message, arg ...string) *ice.Message {
|
||||
defer s.Display(m, "")
|
||||
return s.Table.Select(m, arg...)
|
||||
s.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 {
|
||||
defer s.Display(m, "")
|
||||
@ -128,7 +134,7 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
|
||||
case model.APPLY_STATUS:
|
||||
value = ApplyStatus(kit.Int(value)).String()
|
||||
case model.ALLOW_STATUS:
|
||||
value = OrderStatus(kit.Int(value)).String()
|
||||
value = AllowStatus(kit.Int(value)).String()
|
||||
case model.MESSAGE_STATUS:
|
||||
value = MessageStatus(kit.Int(value)).String()
|
||||
}
|
||||
@ -158,6 +164,12 @@ func (s Table) ChangeStatus(m *ice.Message, uid string, from, to int, arg ...str
|
||||
}
|
||||
return m
|
||||
}
|
||||
func (s Table) UserPlaceInit(m *ice.Message, arg ...string) {
|
||||
if m.Option("user_place_init") == "" {
|
||||
return
|
||||
}
|
||||
m.Cmd(m.Prefix("portal"), "userPlaceCmd", "addCount", model.INIT, 1, m.Option("user_place_uid"), m.Option("user_place_init"))
|
||||
}
|
||||
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...)
|
||||
|
@ -1,6 +1,10 @@
|
||||
Volcanos(chat.ONIMPORT, {
|
||||
_init: function(can, msg) { can.onimport.shareTitle && can.onimport.shareTitle(can, msg)
|
||||
var PLACE_NAME = msg.Option("_place_name"), PLACE_TYPE = msg.Option("_place_type"), USER_PLACE_ROLE = msg.Option("_user_place_role")
|
||||
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.itemcards(can, msg, function(value) { return [
|
||||
{view: html.TITLE, list:[value.title||value.name||value.user_name,
|
||||
can.onimport.textView(can, value, PLACE_TYPE, mdb.TYPE), can.onimport.textView(can, value, USER_PLACE_ROLE, aaa.ROLE),
|
||||
|
@ -47,6 +47,7 @@ const (
|
||||
EMAIL = "email"
|
||||
AVATAR = "avatar"
|
||||
ADDRESS = "address"
|
||||
INIT = "init"
|
||||
)
|
||||
|
||||
type Sess struct {
|
||||
@ -67,6 +68,7 @@ type UserPlace struct {
|
||||
UserUID string `gorm:"type:char(32);index"`
|
||||
PlaceUID string `gorm:"type:char(32);index"`
|
||||
Role uint8 `gorm:"default:0"`
|
||||
Init uint8 `gorm:"default:0"`
|
||||
BeginTime db.Time
|
||||
EndTime db.Time
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
$output { background-color:var(--plugin-bg-color); }
|
||||
$output div.item.card { margin-bottom:5px; }
|
||||
$output div.item.card { margin-bottom:2px; }
|
||||
$output div.item.card div.status span { word-break:break-all; }
|
||||
$output div.item.card img { border-radius:5px; padding:0; margin:0; margin-right:10px; height:48px; width:48px; }
|
||||
$output>div>div.list { border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px; }
|
||||
@ -42,6 +42,10 @@ $output fieldset>div.output>div.code>input[type=button].danger { background-colo
|
||||
$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; height:100%; width:100%; }
|
||||
$output fieldset.story { box-shadow:none; }
|
||||
$output fieldset.story>legend { display:none; }
|
||||
$output fieldset.story>form.option { display:none; }
|
||||
$output fieldset.story>div.action { display:none; }
|
||||
$output fieldset.story>div.status { display:none; }
|
||||
$output fieldset.story>div.output { background-color:var(--plugin-bg-color); }
|
||||
$output fieldset.story>div.output table.content td { box-shadow:none; }
|
||||
$output fieldset.story>div.output table.content tr.uid { display:none; }
|
||||
|
@ -18,7 +18,7 @@ type Portal struct {
|
||||
city city
|
||||
export string `data:"true"`
|
||||
short string `data:"index"`
|
||||
field string `data:"time,index,name,icons,order,enable,type,role,view"`
|
||||
field string `data:"time,index,name,icons,order,enable,type,role,view,init"`
|
||||
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_type*:select place_name* address*" icon:"bi bi-plus-square-dotted" role:"void"`
|
||||
@ -129,6 +129,9 @@ func (s Portal) ScanQRCode(m *ice.Message, arg ...string) {
|
||||
}
|
||||
}
|
||||
}
|
||||
func (s Portal) UserPlaceCmd(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(s.UserPlace, arg)
|
||||
}
|
||||
|
||||
func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) }
|
||||
|
||||
|
@ -29,17 +29,22 @@ Volcanos(chat.ONIMPORT, {
|
||||
{view: html.OUTPUT, list: [
|
||||
// "mydebug.list",
|
||||
"myplace.list",
|
||||
"myinit.list",
|
||||
"myindex.list",
|
||||
"myallow.list",
|
||||
]},
|
||||
{view: html.ACTION, list: ["myorder.list"]},
|
||||
])
|
||||
can.ui.mydebug && can.onimport.myDebug(can, msg, can.ui.mydebug)
|
||||
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._index_msg = msg
|
||||
can.onimport.myIndex(can, msg, can.ui.myindex, PLACE_UID, USER_PLACE_ROLE), can.onimport.selectIndex(can, can.sup.current)
|
||||
can.onimport.myAllow(can, msg, can.ui.myallow, PLACE_UID, USER_PLACE_ROLE)
|
||||
can.onimport.myOrder(can, msg, can.ui.myorder, PLACE_UID, USER_PLACE_ROLE)
|
||||
}): can.run({}, [uid], function(msg) {
|
||||
can.sup.current && can.onexport.value(can, can.sup.current, PLACE_UID, PLACE_NAME)
|
||||
}): can.run({}, [uid], function(msg) { can._index_msg = msg
|
||||
can.onimport.myOrder(can, msg, can.ui.myorder, PLACE_UID, USER_PLACE_ROLE)
|
||||
can.sup.current && can.onexport.value(can, can.sup.current, PLACE_UID, PLACE_NAME)
|
||||
}), can.ui.place_count = msg.Length()
|
||||
} else if (can.Option(ctx.INDEX) == "") {
|
||||
can.ui = can.page.Append(can, can._output, [
|
||||
@ -62,6 +67,22 @@ Volcanos(chat.ONIMPORT, {
|
||||
can.page.Append(can, target, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Debug", "我的调试")}]}])
|
||||
can.page.Append(can, target, [{text: window.innerWidth+", "+window.innerHeight}])
|
||||
},
|
||||
myInit: function(can, msg, value, target) { if (!msg) { return }
|
||||
can.page.Append(can, target, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Init", "我的初始化")}]}])
|
||||
msg.Table(function(val) {
|
||||
if (parseInt(val.init) == parseInt(value.init)+1) { val.args = [value._uid], val.style = html.OUTPUT, value._init = true
|
||||
can.onappend.plugin(can, val, function(sub) { var run = sub.run
|
||||
sub.run = function(event, cmds, cb) {
|
||||
run(can.request(event, {user_place_uid: value.uid, user_place_init: value.init}), cmds, function(msg) {
|
||||
if (cmds[1] == mdb.CREATE || cmds.length == 1 && msg.Length() > 0) {
|
||||
can.onmotion.clearInput(can), can.Update()
|
||||
} else { cb(msg) }
|
||||
})
|
||||
}
|
||||
}, target)
|
||||
}
|
||||
})
|
||||
},
|
||||
myPlace: function(can, msg, target, PLACE_UID, PLACE_NAME, PLACE_TYPE) { var place_uid
|
||||
can.page.Append(can, target, [{view: html.TITLE, list: [
|
||||
{text: can.user.trans(can, "My "+can.base.capital(PLACE_NAME.replace("_name", "")), null, html.INPUT)},
|
||||
@ -104,13 +125,21 @@ Volcanos(chat.ONIMPORT, {
|
||||
var role = can.page.Append(can, target, [{view: aaa.ROLE, list: can.core.Item(can.Conf("_trans.value."+USER_PLACE_ROLE), function(key, value) {
|
||||
if (can.base.isIn(key, ctx.STYLE, mdb.ICONS)) { return }
|
||||
return {text: [can.user.trans(can, key, value), "", key], onclick: function(event) {
|
||||
can.onexport.value(can, can.sup.current, PLACE_UID)
|
||||
can.onimport.selectIndex(can, can.sup.current, key), can.onmotion.select(can, role, html.SPAN, event.target)
|
||||
}}
|
||||
}) }])._target; can.ui.role = 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 < 90) { _msg.Push(value) } })
|
||||
var output = can.page.Append(can, target, [html.OUTPUT])._target
|
||||
can.onimport.myList(can, _msg, output, PLACE_UID, USER_PLACE_ROLE)
|
||||
},
|
||||
myAllow: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
|
||||
can.page.Append(can, target, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Allow", "我的权限")}]}])
|
||||
var _msg = can.request(); msg.Table(function(value) { if (value.order > 89 && value.order < 100) { _msg.Push(value) } })
|
||||
var output = can.page.Append(can, target, [html.OUTPUT])._target
|
||||
can.onimport.myList(can, _msg, output, PLACE_UID, USER_PLACE_ROLE)
|
||||
can.onimport.layout(can)
|
||||
},
|
||||
myOrder: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
|
||||
can.page.Append(can, target, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Order", "我的系统")}]}])
|
||||
var _msg = can.request(); msg.Table(function(value) { if (value.order > 99) { _msg.Push(value) } })
|
||||
@ -217,10 +246,14 @@ Volcanos(chat.ONIMPORT, {
|
||||
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])||""]]} },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {
|
||||
value: function(can, value, PLACE_UID, PLACE_NAME) {
|
||||
value: function(can, value, PLACE_UID) {
|
||||
can.page.Select(can, can.ui._target, "div.item.card.uid-"+value._uid, function(item) { can.onmotion.select(can, can.ui._target, html.DIV_ITEM, item) })
|
||||
can.sup.current = value, can.onimport.selectIndex(can, can.sup.current), can.onexport.title(can, value[PLACE_NAME], can.ConfHelp())
|
||||
can.onexport.session(can, PLACE_UID, value[PLACE_UID]), can.onexport.hash(can, value[PLACE_UID]), can.user.agent.init(can)
|
||||
can.sup.current = value, can.onimport.selectIndex(can, can.sup.current), can.onexport.title(can, value._name, can.ConfHelp())
|
||||
can.onexport.session(can, PLACE_UID, value._uid), can.onexport.hash(can, value._uid), can.user.agent.init(can)
|
||||
can.onmotion.delay(can, function() { can.onmotion.toggle(can, can.ui.myinit, !!value._init) })
|
||||
can.onmotion.toggle(can, can.ui.myallow, can.page.Select(can, can.ui.myallow, "div.item.index.role."+value._role).length > 0)
|
||||
if (!can._index_msg || can.onmotion.cache(can, function() { return value._uid }, can.ui.myinit)) { return }
|
||||
can.ui.myinit && can.onimport.myInit(can, can._index_msg, value, can.ui.myinit)
|
||||
},
|
||||
share_title: function(can, msg, title, role) {
|
||||
msg.Option("_share_icons", msg.Append("user_avatar"))
|
||||
|
@ -28,6 +28,7 @@ func (s userPlace) List(m *ice.Message, arg ...string) {
|
||||
s.Tables(m, s.place, s.street, s.city).FieldsWithCreatedAT(m, s,
|
||||
model.PLACE_NAME, model.PLACE_TYPE, model.USER_PLACE_ROLE,
|
||||
model.CITY_NAME, model.STREET_NAME, model.PLACE_ADDRESS, model.PLACE_UID,
|
||||
model.INIT,
|
||||
)
|
||||
if len(arg) == 1 {
|
||||
s.Select(m, model.USER_UID, arg[0])
|
||||
|
Loading…
x
Reference in New Issue
Block a user