mirror of
https://shylinux.com/x/community
synced 2025-07-03 05:51:20 +08:00
228 lines
7.8 KiB
Go
228 lines
7.8 KiB
Go
package gonganxitong
|
|
|
|
import (
|
|
"shylinux.com/x/ice"
|
|
"shylinux.com/x/icebergs/base/web/html"
|
|
kit "shylinux.com/x/toolkits"
|
|
|
|
"shylinux.com/x/community/src/api"
|
|
"shylinux.com/x/community/src/gonganxitong/model"
|
|
)
|
|
|
|
type member struct {
|
|
Tables
|
|
user user
|
|
order string `data:"102"`
|
|
role string `data:"leader,worker,server"`
|
|
remove string `name:"remove" role:"leader"`
|
|
disable string `name:"disable" role:"leader"`
|
|
demote string `name:"demote" role:"creator"`
|
|
promote string `name:"promote" role:"creator"`
|
|
enable string `name:"enable" role:"leader"`
|
|
auth string `name:"auth" help:"认证" role:"void"`
|
|
main string `name:"main" help:"主页" role:"void"`
|
|
setCookie string `name:"setCookie" help:"切换"`
|
|
setInfo string `name:"setInfo info" help:"备注" role:"worker"`
|
|
setLanguage string `name:"setLanguage language" help:"语言" role:"worker"`
|
|
sessList string `name:"sessList" role:"leader"`
|
|
}
|
|
|
|
func (s member) Remove(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.UserPlace, s.Delete, s.option(m, model.ROLE, kit.Format(UserPlaceTenant), model.STATUS, kit.Format(MemberDisabled)))
|
|
s.recordEvent(m, "❌", m.Trans("remove member", "删除成员"), html.DANGER)
|
|
}
|
|
func (s member) Disable(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberDisabled, s.option(m, model.ROLE, kit.Format(UserPlaceTenant)))
|
|
s.recordEvent(m, "❌", m.Trans("disable member", "禁用成员"), html.DANGER)
|
|
}
|
|
func (s member) Demote(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceTenant), s.option(m))
|
|
s.recordEvent(m, "❌", m.Trans("demote worker", "降级成为工作人员"), html.DANGER)
|
|
}
|
|
func (s member) Promote(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceLandlord), s.option(m))
|
|
s.recordEvent(m, "✅", m.Trans("promote leader", "升级成为管理人员"), html.NOTICE)
|
|
}
|
|
func (s member) Enable(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberNormal, s.option(m, model.ROLE, kit.Format(UserPlaceTenant)))
|
|
s.recordEvent(m, "✅", m.Trans("enable member", "启用成员"), html.NOTICE)
|
|
}
|
|
|
|
func (s member) Auth(m *ice.Message, arg ...string) {
|
|
msg := m.Cmd(city{}, s.Select, model.NAME, m.Option(model.CITY_NAME))
|
|
if m.WarnNotValid(msg.Append(model.AUTH_UID) == "") {
|
|
return
|
|
}
|
|
m.Cmdy(user{}, s.AuthCreate, kit.Dict(msg.AppendSimple(model.AUTH_UID)))
|
|
}
|
|
func (s member) Main(m *ice.Message, arg ...string) {
|
|
m.ProcessField(api.RENZHENGSHOUQUAN_PORTAL, []string{m.Option(model.AUTH_UID)})
|
|
}
|
|
func (s member) SetCookie(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.UserPlace, s.Select, model.UID, m.Option(model.UID))
|
|
m.ProcessCookie(model.USER_UID, m.Append(model.USER_UID))
|
|
}
|
|
func (s member) SetInfo(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.UserPlace, s.Modify, arg)
|
|
}
|
|
func (s member) UserInfo(m *ice.Message, arg ...string) {
|
|
if msg := m.Cmd(api.RENZHENGSHOUQUAN_AUTH, s.Select, model.USER_UID, m.Option(model.UID)); msg.Append(model.UID) == "" {
|
|
m.ProcessHold()
|
|
} else {
|
|
m.ProcessField(api.RENZHENGSHOUQUAN_PORTAL, []string{msg.Append(model.UID)}, arg...)
|
|
}
|
|
}
|
|
func (s Portal) UserInfo(m *ice.Message, arg ...string) {
|
|
msg := m.Cmd(s.UserPlace, s.Table.Select, s.Keys(s.Place, model.UID), m.Option(model.PLACE_UID), model.USER_UID, m.Option(model.UID))
|
|
m.ProcessField(s.PrefixMember(m), []string{m.Option(model.PLACE_UID), msg.Append(model.UID)}, arg...)
|
|
}
|
|
func (s Table) UserInfo(m *ice.Message, arg ...string) {
|
|
m.Cmdy(s.PrefixPortal(m), s.UserInfo, arg)
|
|
}
|
|
func (s member) SetLanguage(m *ice.Message, arg ...string) {
|
|
msg := m.Cmd(s.UserPlace, s.Select, s.Keys(s.Place, model.UID), m.Option(model.PLACE_UID), s.Key(s.UserPlace, model.UID), m.Option(model.UID))
|
|
m.Cmdy(user{}, s.UpdateField, arg, model.UID, msg.Append(model.USER_UID))
|
|
}
|
|
func (s member) SessList(m *ice.Message, arg ...string) {
|
|
msg := m.Cmd(s.UserPlace, s.Select, s.Keys(s.Place, model.UID), m.Option(model.PLACE_UID), s.Key(s.UserPlace, model.UID), m.Option(model.UID))
|
|
s.OtherList(m, sess{}, msg.AppendSimple(model.USER_UID)...)
|
|
m.Display("sess.js")
|
|
}
|
|
func (s member) List(m *ice.Message, arg ...string) {
|
|
USER_PLACE_ROLE := s.Keys(s.UserPlace, model.ROLE)
|
|
user_uid, isLeader, isCreator := m.Option(model.USER_UID), s.IsLeader(m), s.IsCreator(m)
|
|
s.FieldsWithCreatedAT(m, s.UserPlace, s.AS(s.Key(s.UserPlace, model.STATUS), model.MEMBER_STATUS), USER_PLACE_ROLE, model.INFO, model.USER_UID).Limit(m, 300)
|
|
if len(arg) == 1 {
|
|
m.Cmdy(s.UserPlace, s.Select, s.Keys(s.Place, model.UID), arg[0]).Action()
|
|
defer m.Sort(kit.Fields(model.MEMBER_STATUS, USER_PLACE_ROLE, model.AUTH_STATUS, model.CREATED_AT))
|
|
} else if len(arg) == 2 {
|
|
m.FieldsSetDetail().Cmdy(s.UserPlace, s.Select, s.Keys(s.Place, model.UID), arg[0], s.Key(s.UserPlace, model.UID), arg[1]).Action()
|
|
} else {
|
|
return
|
|
}
|
|
s.SelectJoinUser(m, model.NAME, model.INFO, model.AVATAR, model.LANGUAGE, model.AUTH_UID)
|
|
if s.IsLeader(m) {
|
|
s.SelectJoinSess(m)
|
|
s.OtherListCmd(m, s.SessList)
|
|
}
|
|
s.SelectJoinAuth(m)
|
|
m.Table(func(value ice.Maps) {
|
|
if !m.FieldsIsDetail() {
|
|
if user_uid == value[model.USER_UID] {
|
|
m.Push("who", "myself")
|
|
} else {
|
|
m.Push("who", "")
|
|
}
|
|
}
|
|
button := []ice.Any{}
|
|
if value[model.AUTH_UID] == "" {
|
|
if value[model.USER_UID] == user_uid {
|
|
button = append(button, s.Auth)
|
|
}
|
|
} else {
|
|
button = append(button, s.Main)
|
|
}
|
|
if value[model.USER_UID] != user_uid && m.IsTech() {
|
|
button = append(button, s.SetCookie)
|
|
}
|
|
if value[model.USER_UID] == user_uid || isLeader {
|
|
button = append(button, s.SetInfo)
|
|
}
|
|
if value[model.USER_UID] == user_uid {
|
|
button = append(button, s.SetLanguage)
|
|
}
|
|
if MemberStatus(kit.Int(value[model.MEMBER_STATUS])) == MemberNormal {
|
|
if isCreator {
|
|
switch kit.Int(value[USER_PLACE_ROLE]) {
|
|
case 2:
|
|
button = append(button, s.Demote)
|
|
case 3:
|
|
button = append(button, s.Promote)
|
|
}
|
|
}
|
|
if isLeader {
|
|
switch kit.Int(value[USER_PLACE_ROLE]) {
|
|
case 3:
|
|
button = append(button, s.Disable)
|
|
}
|
|
}
|
|
} else {
|
|
if isCreator {
|
|
button = append(button, s.Enable, s.Remove)
|
|
} else if isLeader {
|
|
switch kit.Int(value[USER_PLACE_ROLE]) {
|
|
case 3:
|
|
button = append(button, s.Enable, s.Remove)
|
|
}
|
|
}
|
|
}
|
|
m.PushButton(button...)
|
|
})
|
|
s.DisplayBase(m, "").DisplayCSS("")
|
|
}
|
|
|
|
func init() { ice.TeamCtxCmd(member{Tables: newTables()}) }
|
|
|
|
func (s member) option(m *ice.Message, arg ...string) []string {
|
|
return kit.Simple(m.OptionSimple(s.Keys(s.Place, model.UID), model.UID), arg)
|
|
}
|
|
func (s member) recordEvent(m *ice.Message, icon, title, style string, arg ...string) {
|
|
s.RecordEvent(m, kit.JoinWord(icon, title, kit.Cut(m.Option(model.UID), 6), s.TransRole(m, "", style), m.Option(model.USER_NAME)), m.Option(model.UID))
|
|
}
|
|
|
|
type MemberStatus int
|
|
|
|
const (
|
|
MemberNormal MemberStatus = iota
|
|
MemberDisabled
|
|
)
|
|
|
|
var MemberStatusList = map[MemberStatus]string{
|
|
MemberNormal: "normal",
|
|
MemberDisabled: "disabled",
|
|
}
|
|
|
|
func (s MemberStatus) String() string { return MemberStatusList[s] }
|
|
|
|
type AuthStatus int
|
|
|
|
const (
|
|
AuthCreate AuthStatus = iota
|
|
AuthRequest
|
|
AuthIssued
|
|
AuthRevoked
|
|
)
|
|
|
|
var AuthStatusList = map[AuthStatus]string{
|
|
AuthCreate: "create",
|
|
AuthRequest: "request",
|
|
AuthIssued: "issued",
|
|
AuthRevoked: "revoked",
|
|
}
|
|
|
|
func (s AuthStatus) String() string { return AuthStatusList[s] }
|
|
|
|
type AuthType int
|
|
|
|
const (
|
|
AuthRoot AuthType = iota
|
|
AuthCity // 1
|
|
AuthPersonal // 2
|
|
AuthService // 3
|
|
AuthCompany // 4
|
|
AuthSchool // 5
|
|
AuthStreet // 6
|
|
)
|
|
|
|
var AuthTypeList = map[AuthType]string{
|
|
AuthRoot: "root",
|
|
AuthCity: "city",
|
|
AuthPersonal: "personal",
|
|
AuthService: "service",
|
|
AuthCompany: "company",
|
|
AuthSchool: "school",
|
|
AuthStreet: "street",
|
|
}
|
|
|
|
func (s AuthType) String() string { return AuthTypeList[s] }
|