package gonganxitong import ( "shylinux.com/x/ice" "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/tcp" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" "shylinux.com/x/community/src/api" "shylinux.com/x/community/src/gonganxitong/model" "shylinux.com/x/mysql-story/src/db" ) type Portal struct { ice.Hash Table user user city city event event message message recent recent service service export string `data:"true"` short string `data:"index"` field string `data:"time,icons,name,index,order,enable,init,type,role,view,public"` 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"` } func (s Portal) Init(m *ice.Message, arg ...string) { m.Design(s.List, "", kit.JoinWord(s.Keys(s.Place, model.UID), ctx.INDEX, model.UID, ice.AUTO)) s.LoadTrans(m, arg...) s.Hash.Init(m, arg...) } func (s Portal) Exit(m *ice.Message, arg ...string) { mdb.HashSelectUpdate(m.Message, "", func(value ice.Map) { delete(value, model.COMMAND_UID); delete(value, mdb.TARGET) }) s.Hash.Exit(m, arg...) } func (s Portal) BeforeMigrate(m *ice.Message, arg ...string) { if m.Cmd(web.CODE_MYSQL_CLIENT).Length() == 0 { if s.AutoCmd(m, web.CODE_MYSQL_CLIENT).Table(func(value ice.Maps) { m.Cmd(web.CODE_MYSQL_CLIENT, s.Create, aaa.SESS, "", kit.Simple(value)) }).Length() == 0 { m.Cmd(web.CODE_MYSQL_CLIENT, s.Create, aaa.SESS, "mysql", "driver", "mysql", "database", "mysql", tcp.HOST, "localhost", tcp.PORT, "10001", aaa.USERNAME, "root", aaa.PASSWORD, "root") } } } func (s Portal) AfterMigrate(m *ice.Message, arg ...string) { if name := kit.Select("", kit.Split(m.PrefixKey(), "."), -2); !m.Exists("src/" + name) { return } cmd := m.GetCommand() m.Cmdy(s.Prefix(m, s.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))) m.Cmd(command{}).Table(func(value ice.Maps) { if kit.HasSuffix(value[model.INDEX], ".allow") { cmdPortal[kit.ReplaceAll(value[model.INDEX], ".allow", ".portal")] = value[model.PORTAL] cmdSpace[kit.ReplaceAll(value[model.INDEX], ".allow", ".portal")] = value[model.SPACE] } cmdPortal[value[model.INDEX]] = value[model.PORTAL] cmdSpace[value[model.INDEX]] = value[model.SPACE] }) } func (s Portal) Inputs(m *ice.Message, arg ...string) { m.Cmdy(s.Place, m.ActionKey(), arg) } func (s Portal) Command(m *ice.Message, arg ...string) { if cmdPortal[arg[0]] != "" && cmdPortal[arg[0]] != m.PrefixKey() { s.AutoCmdy(m, cmdPortal[arg[0]], ctx.ACTION, m.ActionKey(), arg) } else { ctx.Command(m.Message, arg...) } } func (s Portal) Run(m *ice.Message, arg ...string) { if cmdPortal[arg[0]] != "" && cmdPortal[arg[0]] != m.PrefixKey() { s.AutoCmdy(m, cmdPortal[arg[0]], ctx.ACTION, m.ActionKey(), arg) return } s.DisplayBase(m, "common.js") 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) { role := cmd.Role if len(arg) > 1 && arg[1] == ctx.ACTION { if action, ok := cmd.Actions[arg[2]]; ok { role = action.Role } } else if len(arg) > 1 { if action, ok := cmd.Actions[arg[1]]; ok { role = action.Role } else { m.Option(s.Keys(s.Place, model.UID), arg[1]) } } if action, ok := cmd.Actions["beforeAction"]; ok { action.Hand(m.Message, arg[1:]...) } 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(s.Place, s.CheckRole, kit.Split(role)).IsErr() { m.Cmdy(arg) } } if kit.IndexOf(arg, mdb.INPUTS) == -1 { s.Place.RewriteAppend(m) } }) } func (s Portal) List(m *ice.Message, arg ...string) { if m.Option(mdb.VIEW) == mdb.TABLE || len(arg) > 0 && arg[0] == mdb.TABLE { s.Hash.List(m, kit.Slice(arg, 1)...).PushAction(mdb.DETAIL, s.Hash.Remove).Action().SortInt(mdb.ORDER) return } m.Option(model.SERVICE_UID, ServiceUID(m)) if len(arg) == 0 { m.Cmdy(m.PrefixKey(), s.PlaceList, m.Option(model.USER_UID)).PushAction(s.PlaceRemove).Action(s.PlaceCreate) kit.If(m.Length() > 0, func() { m.EchoQRCode(m.Cmdx("", s.Link)) }) s.Button(m, "", s.PlaceCreate) } else { if msg := s.PlaceListOption(m, arg...); arg[0] != "" && msg.Length() > 0 { defer s.AddRecent(msg, arg[0]) defer m.EchoQRCode(m.Cmdx("", s.Link, arg[0])) } s.Hash.List(m).SortInt(mdb.ORDER) } s.Place.RewriteAppend(m) s.DisplayBase(m, "").DisplayCSS("") } func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message { 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 { return msg } msg.Push(s.Keys(s.UserPlace, model.ROLE), "0") msg.RenameAppend(model.NAME, s.Keys(s.Place, model.NAME), model.TYPE, s.Keys(s.Place, model.TYPE)) s.SelectJoin(msg, s.Street, model.NAME, model.CITY_UID) s.SelectJoinCity(msg) s.SelectJoinAuth(msg) } if kit.Int(msg.Append(s.Keys(s.UserPlace, model.ROLE))) == 0 { msg.Append(model.DASHBOARD_UID, "") } s.Place.RewriteAppend(msg) m.Options(msg.AppendSimple( 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.MEMBER_STATUS, model.AUTH_STATUS, model.AUTH_NAME, model.AUTH_INFO, model.AUTH_AVATAR, model.AUTH_BACKGROUND, model.DASHBOARD_UID, )) 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) { if s.city.FindOrCreateByName(m, arg...); m.IsErr() { return } else if s.Street.FindOrCreateByName(m, arg...); m.IsErr() { return } prefix := s.Keys(s.Place, "") for i := 0; i < len(arg); i += 2 { arg[i] = kit.TrimPrefix(arg[i], prefix) } if m.Options(arg).Cmdy(s.Place, s.Insert, arg[2:]).IsErr() { return } s.RecordEventWithName(m.Options(s.Keys(s.Place, model.UID), m.Result()), "") args := kit.Simple(m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID), model.ROLE, UserPlaceCreator) m.SetResult().Cmdy(s.UserPlace, s.Insert, args) args = append(args, s.Keys(s.UserPlace, model.UID), m.Result()) m.Options(args).Cmd("", s.AfterPlaceCreate, args) } func (s Portal) PlaceRemove(m *ice.Message, arg ...string) { m.Cmd("", s.BeforePlaceRemove, m.OptionSimple(model.USER_UID, model.UID)) m.Cmdy(s.UserPlace, s.Delete, m.OptionSimple(model.USER_UID, model.UID)) } func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message { s.Tables(m, s.Place).FieldsWithCreatedAT(m, s.UserPlace, s.Keys(s.Place, model.UID), s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE), s.Key(s.Place, model.INIT), s.AS(s.Key(s.UserPlace, model.STATUS), model.MEMBER_STATUS), s.Keys(s.Street, model.UID), model.AUTH_UID, ) if len(arg) == 1 { m.Cmdy(s.UserPlace, s.Table.Select, model.USER_UID, arg[0]) } else if len(arg) == 2 { m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, model.USER_UID, arg[0], s.Keys(s.Place, model.UID), arg[1]) } else { return m } s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID) s.SelectJoinCity(m) s.SelectJoinAuth(m) return m } func (s Portal) PlaceAuth(m *ice.Message, arg ...string) { if m.Option(model.AUTH_UID) != "" { return } msg := m.Cmd(s.Place, s.Table.Select, model.UID, m.Option(s.Keys(s.Place, model.UID))) street := m.Cmd(s.Street, s.Table.Select, model.UID, msg.Append(s.Keys(s.Street, model.UID))) m.Option(model.COMPANY_NAME, street.Append(model.NAME)) m.Option(s.Keys(s.Street, model.NAME), street.Append(model.NAME)) m.Option(s.Keys(s.Place, model.NAME), msg.Append(model.NAME)) s.AutoCmdy(m, api.RENZHENGSHOUQUAN_PORTAL, s.PlaceCreate, model.AUTH_NAME, msg.Append(model.NAME), model.AUTH_TYPE, 3, model.FROM_UID, street.Append(model.AUTH_UID), model.SERVICE_UID, ServiceUID(m), model.PLACE_UID, msg.Append(model.UID), ) m.Cmd(s.Place, s.UpdateField, m.OptionSimple(model.AUTH_UID), model.UID, msg.Append(model.UID)) s.RecordEventWithName(m.Options(msg.AppendSimple(model.NAME, model.UID)), "") msg.Append(model.AUTH_UID, m.Option(model.AUTH_UID)) msg.Cmd(s.Prefix(msg, s), s.AfterPlaceAuth) } func (s Portal) ValueCreate(m *ice.Message, arg ...string) { 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)...) } func (s Portal) ValueModify(m *ice.Message, arg ...string) { s.Table.Update(m, kit.Dict(arg), m.OptionSimple(s.Keys(s.Place, model.UID), model.UID)...) } func (s Portal) ValueList(m *ice.Message, arg ...string) { PLACE_UID := s.Keys(s.Place, model.UID) if len(arg) == 0 { if m.Option(PLACE_UID) != "" { s.Table.Select(m, m.OptionSimple(PLACE_UID)...) } return } s.Table.FieldsWithCreatedAT(m, m.Option(db.TARGET), m.Optionv(mdb.FIELDS).([]ice.Any)...) if len(arg) == 1 { s.Table.Select(m, PLACE_UID, arg[0]).Action(s.Create) } else if len(arg) == 2 { s.Table.SelectDetail(m, PLACE_UID, arg[0], model.UID, arg[1]) } else { return } if s.IsVisitor(m) { m.Action() } else { m.PushAction(s.Remove) } } func (s Portal) BeforePlaceCreate(m *ice.Message, arg ...string) {} func (s Portal) AfterPlaceCreate(m *ice.Message, arg ...string) {} func (s Portal) BeforePlaceRemove(m *ice.Message, arg ...string) {} func (s Portal) AfterPlaceRemove(m *ice.Message, arg ...string) {} 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) { 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:]...) } func (s Portal) MarketInsert(m *ice.Message, arg ...string) { m.Option(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID))) m.Option(ctx.ARGS, kit.Join([]string{m.Option(model.PLACE_UID), m.Option(model.UID)})) m.Cmdy(s.Prefix(m, market{}), s.Create, arg) } 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)) 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, 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)) } func (s Portal) DashboardUpdate(m *ice.Message, arg ...string) { if m.Option(model.DASHBOARD_UID) != "" { s.AutoCmd(m, api.DASHBOARD_SUMMARY, "scan", kit.Dict(m.OptionSimple(model.DASHBOARD_UID))) } } 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)) } 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)) } func (s Table) NoticeList(m *ice.Message, arg ...string) { s.Limit(m, 1) m.Cmdy(s.Prefix(m, notice{}), arg) } func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) } func (s Portal) UserPlaceRole(m *ice.Message, arg ...string) *ice.Message { if m.Option(model.USER_ROLE) == "" { msg := m.Cmd(s.UserPlace, s.Table.Select, m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID)) if MemberStatus(kit.Int(msg.Append(model.STATUS))) == MemberNormal { m.Option(model.USER_ROLE, msg.Append(model.ROLE)) } else { m.Option(model.USER_ROLE, "0") } } return m } func (s Portal) UserPlaceCmd(m *ice.Message, arg ...string) { m.Cmdy(s.UserPlace, arg) } func (s Portal) PlaceCmd(m *ice.Message, arg ...string) { m.Cmdy(s.Place, arg) } func (s Portal) CommandUpdate(m *ice.Message, arg ...string) { s.Hash.Select(m.Spawn()).Table(func(value ice.Maps) { 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) { s.Hash.Select(m, arg...) } func (s Portal) Create(m *ice.Message, arg ...string) { 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) { args = append(args, mdb.NAME, cmd.Help, mdb.ICONS, cmd.Icon) kit.For([]string{mdb.ORDER, mdb.TYPE, aaa.ROLE, mdb.VIEW}, func(key string) { value := m.Conf(m.Option(ctx.INDEX), kit.Keym(key)) args = append(args, key, kit.Select(value, msg.Append(key))) }) }) s.Hash.Create(m, args...) } func (s Portal) Remove(m *ice.Message, arg ...string) { s.Hash.Remove(m, arg...) } 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) *ice.Message { if len(arg) == 0 { return m.Echo(m.MergePodCmd("", s.Prefix(m, s))) } return 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()}) }