2025-06-07 14:26:36 +08:00

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] }