This commit is contained in:
jingganjiaoyu 2024-09-07 17:11:02 +08:00
parent 95bcab02db
commit 99f04b17b9
29 changed files with 587 additions and 89 deletions

View File

@ -0,0 +1,17 @@
package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/community/src/gonganxitong/model"
)
type comment struct{ Table }
func (s comment) Create(m *ice.Message, arg ...string) {
s.Table.Create(m, append(arg, m.OptionSimple(model.MARKET_UID, model.USER_UID)...)...)
}
func (s comment) List(m *ice.Message, arg ...string) {
}
func init() { ice.TeamCtxCmd(comment{}) }

View File

@ -12,6 +12,7 @@ import (
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
@ -135,7 +136,10 @@ func (s Table) ValueList(m *ice.Message, arg []string, fields ...ice.Any) *ice.M
kit.If(len(fields) == 0, func() { fields = kit.TransArgs(kit.Split(m.Config(mdb.FIELDS))) })
defer m.Options(db.FIELDS, fields).Set(ice.MSG_OPTION, db.FIELDS)
defer m.Options(db.TARGET, m.CommandKey()).Set(ice.MSG_OPTION, db.TARGET)
return s.ValueModel(m, s.ValueList, arg...).PushAction(s.Remove).Action(s.Create)
s.ValueModel(m, s.ValueList, arg...).PushAction(s.Remove).Action(s.Create)
kit.If(m.Length() > 0, func() { s.UserPlaceInit(m) })
s.Button(m, "")
return m
}
func (s Table) List(m *ice.Message, arg ...string) *ice.Message {
if m.IsTech() {
@ -164,7 +168,7 @@ func (s Table) SelectJoinCity(m *ice.Message) *ice.Message {
}
func (s Table) SelectJoinAuth(m *ice.Message) *ice.Message {
defer m.Options(ice.MSG_USERROLE, aaa.VOID)
return s.SelectJoin(m, s.FindSpaceCmd(m, web.TEAM_RENZHENGSHOUQUAN_AUTH), model.NAME, model.STATUS)
return s.SelectJoin(m, s.FindSpaceCmd(m, web.TEAM_RENZHENGSHOUQUAN_AUTH), model.NAME, model.STATUS, model.DASHBOARD_UID)
}
func (s Table) RenameAppend(m *ice.Message, arg ...string) Table {
m.RenameAppend(arg...)
@ -238,6 +242,14 @@ func (s Table) UserPlaceInit(m *ice.Message, arg ...string) {
}
m.Cmd(s.Prefix(m, Portal{}), "placeCmd", "addCount", model.INIT, 1, m.Option(model.PLACE_UID), m.Option(model.PLACE_INIT))
}
func (s Table) MarketInsert(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, Portal{}), s.MarketInsert, arg)
}
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 Table) RecordEvent(m *ice.Message, info string, arg ...string) {
m.Cmd(s.Prefix(m, Portal{}), s.RecordEvent, info, arg)
}
@ -283,6 +295,10 @@ func (s Portal) SendTemplate(m *ice.Message, arg ...string) {
link := s.Link(m, place_uid, arg[0], uid)
m.Cmd(s.FindSpaceCmd(m, user{}), s.SendTemplate, arg[1], arg[2], link, kit.JoinWord(m.Option(model.PORTAL_NAME), arg[3]), name, kit.Cut(uid, 6))
}
func (s Table) Button(m *ice.Message, info string, arg ...ice.Any) *ice.Message {
kit.If(!m.IsErr() && m.Length() == 0, func() { m.EchoInfoButton(info, arg...) })
return m
}
func (s Table) DisplayBase(m *ice.Message, file string) *ice.Message {
if s.Place != nil {
m.Option("_place_uid", s.ToLower(kit.TypeName(s.Place))+"_uid")
@ -332,6 +348,19 @@ func (s Table) Prefix(m *ice.Message, target ice.Any) string {
func (s Table) PrefixPortal(m *ice.Message) string {
return m.Prefix(kit.TypeName(Portal{}))
}
func (s Table) ProcessPodCmd(m, msg *ice.Message, arg ...string) *ice.Message {
m.ProcessPodCmd(msg.Append(web.SPACE), msg.Append(ctx.INDEX), kit.Split(msg.Append(ctx.ARGS)))
m.RewriteAppend(func(value, key string, index int) string {
kit.If(key == ctx.STYLE, func() { value = html.OUTPUT })
kit.If(key == web.SPACE, func() { value = m.Appendv("_space")[index] })
return value
})
if msg.Append(web.SPACE) != "" {
m.Optionv(ice.FIELD_PREFIX, ctx.ACTION, ctx.RUN, kit.Join(kit.Slice(kit.Split(msg.Append(ctx.INDEX), "."), 0, -1), ".")+".portal", ctx.ACTION, ctx.RUN, msg.Append(ctx.INDEX))
}
m.Option("field.option", kit.Format(kit.Dict(arg)))
return m
}
func (s Table) SpaceCmd(m *ice.Message, space string, arg ...ice.Any) *ice.Message {
if space == ice.Info.NodeName {
return m.Cmd(arg...)
@ -340,14 +369,18 @@ func (s Table) SpaceCmd(m *ice.Message, space string, arg ...ice.Any) *ice.Messa
}
}
func (s Table) FindSpaceCmd(m *ice.Message, cmd ice.Any) ice.Any {
switch cmds := ice.GetTypeKey(cmd); cmds {
case web.TEAM_GONGANXITONG_USER, web.TEAM_RENZHENGSHOUQUAN_AUTH, web.CODE_MYSQL_CLIENT:
if ice.Info.NodeName == "20240724-community" {
return cmd
} else {
m.Options(ice.MSG_USERROLE, aaa.TECH)
return []string{web.SPACE, kit.Keys(ice.OPS, "20240724-community"), cmds}
}
route := map[string]string{
"web.team.dashboard.portal": "20240903-operation",
"web.team.dashboard.summary": "20240903-operation",
"web.team.renzhengshouquan.portal": "20240724-community",
web.TEAM_RENZHENGSHOUQUAN_AUTH: "20240724-community",
web.TEAM_GONGANXITONG_USER: "20240724-community",
web.CODE_MYSQL_CLIENT: "20240724-community",
}
cmds := ice.GetTypeKey(cmd)
if space, ok := route[cmds]; ok && space != ice.Info.NodeName {
m.Options(ice.MSG_USERROLE, aaa.TECH)
return []string{web.SPACE, kit.Keys(ice.OPS, space), cmds}
}
return cmd
}
@ -389,7 +422,10 @@ func PortalCmd(portal ice.Any) {
cmd("event", event{Table: table})
cmd("apply", apply{Table: table})
cmd("allow", allow{Table: table})
cmd("notice", notice{Table: table})
cmd("domain", domain{Table: table})
cmd("member", member{Tables: Tables{Table: table}})
cmd("market", market{Table: table})
cmd("message", message{Table: table})
cmd("recent", recent{Table: table})
cmd("service", service{Table: table})

View File

@ -4,7 +4,7 @@ Volcanos(chat.ONIMPORT, {
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), can.onimport.textView(can, value, USER_PLACE_ROLE)]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.company_name]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.company_name||value.place_name]},
{view: html.STATUS, list: [value.uid && value.uid.slice(0, 6), can.base.TimeTrim(value.created_at||value.updated_at)]},
value.address && {view: html.STATUS, list: [value.address]},
value.content && {view: html.OUTPUT, list: [value.content]},

View File

@ -0,0 +1,25 @@
package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/community/src/gonganxitong/model"
)
type domain struct {
Table
create string `name:"create name* info" role:"void"`
remove string `name:"remove" role:"void"`
}
func (s domain) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
s.Select(m)
} else if len(arg) == 1 {
s.Select(m)
} else if len(arg) == 2 {
s.Select(m, model.UID, arg[1])
}
}
func init() { ice.TeamCtxCmd(domain{Table: newTable()}) }

10
src/gonganxitong/favor.go Normal file
View File

@ -0,0 +1,10 @@
package gonganxitong
import "shylinux.com/x/ice"
type favor struct {
Table
thumb
}
func init() { ice.TeamCtxCmd(favor{}) }

View File

@ -0,0 +1,86 @@
package gonganxitong
import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
)
type market struct {
Table
domain domain
command command
service service
thumb thumb
comment comment
favor favor
order string `data:"100"`
create string `name:"create domain_uid* title* content" role:"void"`
remove string `name:"remove" role:"void"`
thumbToggle string `name:"thumbToggle" role:"void"`
commentCreate string `name:"commentCreate content" role:"void"`
favorToggle string `name:"favorToggle" role:"void"`
shareCreate string `name:"shareCreate" role:"void"`
}
func (s market) Create(m *ice.Message, arg ...string) {
defer m.ToastProcess()()
s.Table.Create(m, append(arg, m.OptionSimple(
model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME,
model.COMMAND_UID, model.PLACE_UID, model.USER_UID, model.ARGS,
)...)...)
}
func (s market) List(m *ice.Message, arg ...string) {
s.Tables(m, s.domain, s.command, s.service,
kit.Format("LEFT JOIN thumbs ON thumbs.market_uid = markets.uid AND thumbs.user_uid = '%s'", m.Option(model.USER_UID)),
kit.Format("LEFT JOIN favors ON favors.market_uid = favors.uid AND favors.user_uid = '%s'", m.Option(model.USER_UID)),
).FieldsWithCreatedAT(m, s,
s.Key(s, model.USER_UID), model.TITLE, model.CONTENT,
s.Key(s, model.CITY_NAME), s.Key(s, model.STREET_NAME), s.Key(s, model.PLACE_NAME), model.SERVICE_NAME,
s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS,
model.THUMB_COUNT, model.COMMENT_COUNT, model.FAVOR_COUNT, model.SHARE_COUNT,
model.THUMB_STATUS, model.FAVOR_STATUS,
)
if len(arg) < 2 {
if m.Option(model.DOMAIN_UID) != "" {
s.Select(m, m.OptionSimple(model.DOMAIN_UID)...)
} else {
s.Select(m)
}
} else if len(arg) == 2 {
msg := s.Select(m.Spawn(), s.Key(s, model.UID), arg[1])
s.ProcessPodCmd(m, msg, model.MARKET_UID, arg[1])
} else {
return
}
s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
m.Action().Display("")
}
func (s market) ThumbToggle(m *ice.Message, arg ...string) {
m.OptionDefault(model.MARKET_UID, m.Option(model.UID))
if kit.Int(m.Cmdx(s.thumb, s.thumb.Toggle))%2 == 1 {
s.AddCount(m, model.THUMB_COUNT, "1", m.Option(model.UID))
} else {
s.AddCount(m, model.THUMB_COUNT, "-1", m.Option(model.UID))
}
}
func (s market) CommentCreate(m *ice.Message, arg ...string) {
m.OptionDefault(model.MARKET_UID, m.Option(model.UID))
m.Cmd(s.comment, s.Create, arg)
s.AddCount(m, model.COMMENT_COUNT, "1", m.Option(model.UID))
}
func (s market) FavorToggle(m *ice.Message, arg ...string) {
m.OptionDefault(model.MARKET_UID, m.Option(model.UID))
if kit.Int(m.Cmdx(s.favor, s.favor.Toggle))%2 == 1 {
s.AddCount(m, model.FAVOR_COUNT, "1", m.Option(model.UID))
} else {
s.AddCount(m, model.FAVOR_COUNT, "-1", m.Option(model.UID))
}
}
func (s market) ShareCreate(m *ice.Message, arg ...string) {
s.AddCount(m, model.SHARE_COUNT, "1", m.Option(model.UID))
}
func init() { ice.TeamCtxCmd(market{Table: newTable()}) }

View File

@ -0,0 +1,57 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.ui = can.page.Append(can, can._output, ["tabs", "list"])
can.run({}, [ctx.ACTION, ctx.RUN, "web.team.gonganxitong.domain"], function(msg) {
var domain_uid = can.misc.Cookie(can, "domain_uid")
can.page.Append(can, can.ui.tabs, [{view: [[html.ITEM, domain_uid? "": "select"], "", "全部"], onclick: function(event) {
can.misc.Cookie(can, "domain_uid", "")
can.onmotion.select(can, can.ui.tabs, html.DIV_ITEM, event.target)
can.run(event, [], function(msg) { can.onimport._data(can, msg) })
}}])
can.page.Append(can, can.ui.tabs, msg.Table(function(value) {
return {view: [[html.ITEM, value.uid == domain_uid? "select": ""], "", value.name], onclick: function(event) {
can.misc.Cookie(can, "domain_uid", value.uid)
can.onmotion.select(can, can.ui.tabs, html.DIV_ITEM, event.target)
can.run(event, [], function(msg) { can.onimport._data(can, msg) })
}}
}))
})
can.onimport._data(can, msg)
},
_data: function(can, msg) { can.onmotion.clear(can, can.ui.list)
can.onimport.itemcards(can, msg, function(value) { return [
{view: html.STATUS, list: [{text: [value.user_name, "", "username"]}, can.onimport.authView(can, value), can.onimport.timeView(can, value)]},
{view: html.STATUS, list: [
// {text: [value.city_name, "", "street"]},
{text: [value.street_name, "", "street"]},
{text: [value.place_name, "", "place"]},
{text: [value.service_name.split(" ")[0], "", "service"]},
]},
{view: html.TITLE, list: [value.title]},
{view: html.OUTPUT, list: [value.content]},
{view: html.ACTION, list: [
{view: html.ITEM, list: [{icon: "bi bi-hand-thumbs-up"}, {text: value.thumb_count||"点赞"}], onclick: function(event) {
can.onimport.thumbs(event, can, value, "thumbToggle")
}, className: value.thumb_status%2==1? "done": ""},
{view: html.ITEM, list: [{icon: "bi bi-chat-left-text"}, {text: value.comment_count||"评论"}], onclick: function(event) {
can.onimport.thumbs(event, can, value, "commentCreate")
}},
{view: html.ITEM, list: [{icon: "bi bi-star"}, {text: value.favor_count||"收藏"}], onclick: function(event) {
can.onimport.thumbs(event, can, value, "favorToggle")
}, className: value.favor_status%2==1? "done": ""},
{view: html.ITEM, list: [{icon: "bi bi-box-arrow-up"}, {text: value.share_count||"分享"}], onclick: function(event) {
can.onimport.thumbs(event, can, value, "shareCreate")
}},
]},
] }, null, can.ui.list)
},
thumbs: function(event, can, value, button) { can.onkeymap.prevent(event)
var target = can.page.SelectOne(can, event.currentTarget, "span")
can.run(can.request(event, value), [ctx.ACTION, button], function(msg) {
target.innerHTML = msg.Result()
})
},
layout: function(can) {
can.ui.list && can.page.styleHeight(can, can.ui.list, can.ConfHeight()-can.ui.tabs.offsetHeight)
},
})

View File

@ -3,8 +3,6 @@ package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/web"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
@ -14,7 +12,7 @@ type message struct {
Table
command command
service service
order string `data:"100"`
order string `data:"103"`
create string `name:"create from_user_uid to_user_uid"`
read string `name:"read" role:"void"`
done string `name:"done" role:"void"`
@ -23,9 +21,6 @@ type message struct {
}
func (s message) Create(m *ice.Message, arg ...string) {
m.Info("what %v", m.FormatChain())
m.Info("what %v", m.Option(s.Keys(s.Place, model.UID)))
m.Info("what %v", s.Keys(s.Place, model.UID))
kit.If(m.Option(ctx.ARGS) == "", func() {
arg = append(arg, ctx.ARGS, kit.Join([]string{m.Option(s.Keys(s.Place, model.UID)), m.Option(model.UID)}))
})
@ -61,16 +56,7 @@ func (s message) List(m *ice.Message, arg ...string) {
s.DisplayBase(m, "")
} else if len(arg) == 2 {
msg := s.SelectDetail(m.Spawn(), model.TO_USER_UID, m.Option(model.USER_UID), s.Key(s, model.UID), arg[1])
m.ProcessPodCmd(msg.Append(web.SPACE), msg.Append(ctx.INDEX), kit.Split(msg.Append(ctx.ARGS)))
m.RewriteAppend(func(value, key string, index int) string {
kit.If(key == ctx.STYLE, func() { value = html.OUTPUT })
kit.If(key == web.SPACE, func() { value = m.Appendv("_space")[index] })
return value
})
if m.Append(web.SPACE) != "" {
m.Optionv(ice.FIELD_PREFIX, ctx.ACTION, ctx.RUN, kit.Join(kit.Slice(kit.Split(msg.Append(ctx.INDEX), "."), 0, -1), ".")+".portal", ctx.ACTION, ctx.RUN, msg.Append(ctx.INDEX))
}
m.Option("field.option", kit.Format(kit.Dict(model.MESSAGE_UID, arg[1])))
s.ProcessPodCmd(m, msg, model.MESSAGE_UID, arg[1])
if m.Option(model.MESSAGE_STATUS) == MessageCreate.String() {
s.update(m.Spawn(kit.Dict(model.UID, arg[1])), kit.Dict(model.STATUS, MessageRead), model.STATUS, MessageCreate)
}

View File

@ -43,7 +43,12 @@ const (
ALLOW_STATUS = "allow_status"
EVENT_UID = "event_uid"
PORTAL_NAME = "portal_name"
DOMAIN_UID = "domain_uid"
DOMAIN_NAME = "domain_name"
COMMAND_UID = "command_uid"
COMMAND_ICON = "command_icon"
COMMAND_NAME = "command_name"
MARKET_UID = "market_uid"
MESSAGE_UID = "message_uid"
MESSAGE_STATUS = "message_status"
SERVICE_UID = "service_uid"
@ -51,6 +56,16 @@ const (
SERVICE_NAME = "service_name"
SERVICE_TYPE = "service_type"
SERVICE_STATUS = "service_status"
DASHBOARD_UID = "dashboard_uid"
THUMB_COUNT = "thumb_count"
FAVOR_COUNT = "favor_count"
COMMENT_COUNT = "comment_count"
SHARE_COUNT = "share_count"
THUMB_STATUS = "thumb_status"
FAVOR_STATUS = "favor_status"
CLIENT_UID = "client_uid"
CLIENT_NAME = "client_name"
CLIENT_TYPE = "client_type"
FROM_UID = "from_uid"
FROM_USER_UID = "from_user_uid"
TO_USER_UID = "to_user_uid"
@ -65,6 +80,7 @@ const (
SPACE = "space"
OPERATE = "operate"
INDEX = "index"
QUERY = "query"
ARGS = "args"
INIT = "init"
SCORE = "score"
@ -125,6 +141,46 @@ type Event struct {
UserUID string `gorm:"type:char(32)"`
Info string `gorm:"type:varchar(255)"`
}
type Notice struct {
db.ModelContent
PlaceUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
}
type Domain struct {
db.ModelNameInfo
}
type Market struct {
db.ModelCommand
DomainUID string `gorm:"type:char(32);index"`
CommandUID string `gorm:"type:char(32)"`
PlaceUID string `gorm:"type:char(32)"`
UserUID string `gorm:"type:char(32)"`
Title string `gorm:"type:varchar(64)"`
Content string
ThumbCount int `gorm:"default:0"`
CommentCount int `gorm:"default:0"`
FavorCount int `gorm:"default:0"`
ShareCount int `gorm:"default:0"`
}
type Thumb struct {
db.ModelWithUID
MarketUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32);index"`
Status uint `gorm:"default:0"`
}
type Comment struct {
db.ModelWithUID
MarketUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32);index"`
CommentUID string `gorm:"type:char(32)"`
Content string
}
type Favor struct {
db.ModelWithUID
MarketUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32);index"`
Status uint `gorm:"default:0"`
}
type Message struct {
db.ModelCommand
CommandUID string `gorm:"type:char(32)"`
@ -170,6 +226,8 @@ type Support struct {
func init() {
db.CmdModels("",
&Sess{}, &User{}, &UserPlace{}, &Place{}, &Street{}, &City{},
&Apply{}, &Allow{}, &Event{}, &Message{}, &Recent{}, &Command{}, &Service{}, &Support{},
&Apply{}, &Allow{}, &Event{}, &Notice{},
&Domain{}, &Market{}, &Thumb{}, &Comment{}, &Favor{},
&Message{}, &Recent{}, &Command{}, &Service{}, &Support{},
)
}

View File

@ -0,0 +1,25 @@
package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/community/src/gonganxitong/model"
)
type notice struct {
Table
order string `data:"94"`
create string `name:"create title* content" role:"void"`
}
func (s notice) Create(m *ice.Message, arg ...string) { s.ValueCreate(m, arg...) }
func (s notice) Remove(m *ice.Message, arg ...string) { s.ValueRemove(m, arg...) }
func (s notice) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.PLACE_UID, arg[0])
} else if len(arg) == 2 {
s.Select(m, model.PLACE_UID, arg[0], model.UID, arg[1])
}
}
func init() { ice.TeamCtxCmd(notice{Table: newTable()}) }

View File

@ -15,14 +15,21 @@ $output>div>div.list>div.title div.action div.item.button.icons input { display:
$output>div>div.list>div.role:not(.hide) { display:flex; align-items:center; justify-content:space-around; }
$output>div>div.list>div.role span { padding:5px; cursor:pointer; }
$output>div>div.list>div.role span.select { border-bottom:var(--box-notice); }
$output>div>div.list>div.role span.creator.select { border-bottom:var(--box-danger); }
$output>div>div.list>div.role span.landlord.select { border-bottom:var(--box-danger); }
$output>div>div.list>div.role span.teacher.select { border-bottom:var(--box-danger); }
$output>div>div.list>div.role span.leader.select { border-bottom:var(--box-danger); }
$output>div>div.list>div.role span.boss.select { border-bottom:var(--box-danger); }
$output>div>div.list>div.role span:not(.select) { color:gray; }
$output>div>div.list>div.output>div.item.index:not(.hide) { padding:5px 10px; display:flex; flex-direction:column; align-items:center; float:left; }
$output>div>div.list>div.output>div.item.index img { height:48px; width:48px; object-fit:contain; }
$output>div>div.list>div.action { display:flex; justify-content:center; }
$output>div>div.list>div.action { display:flex; justify-content:center; display:none; }
$output>div>div.list>div.action div.item { margin-right:5px; }
$output>div>div.list>div.action div.item input[type=button] { color:var(--notice-bg-color); border:none; }
$output>div>div.list>div.action div.item i { display:none; }
// $output>div.output>div.list:last-child { margin-bottom:0; }
$output>div.action { background-color:transparent; }
$output>div.action>div.list { background-color:transparent; }
$output>div.action div.item.button { margin-right:5px; }
$output>div.action div.item.button input { border:none; color:var(--notice-bg-color); min-width:60px; float:left; }
$output>div.action div.item.button input:hover { background-color:var(--hover-bg-color); }
@ -62,6 +69,19 @@ $output fieldset.story>div.output>div.code { text-align:center; }
$output fieldset.story>div.output>div.code>img { display:block; margin:auto; width:100%; max-width:390px; }
$output>fieldset.qrcode table.content td { text-align:center; }
$output>fieldset.qrcode div.code { text-align:center; }
$output>fieldset.market>div.output>div.list div.item.card img { border-radius:50%; height:40px; width:40px; }
$output>fieldset.market>div.output>div.list div.item.card div.status { font-size:14px; }
$output>fieldset.market>div.output>div.list div.item.card div.status>span.username { color:var(--body-fg-color); font-size:14px; }
$output>fieldset.market>div.output>div.list div.item.card div.status>span.time { float:right; }
$output>fieldset.market>div.output>div.list div.item.card div.output div.action { color:gray; font-size:14px; width:100%; max-width:100%; display:flex; justify-content:space-around; position:relative; }
$output>fieldset.market>div.output>div.list div.item.card div.output div.action i { margin-right:5px; }
$output>fieldset.market>div.output>div.list div.item.card div.output div.action div.item.done { color:var(--notice-bg-color); }
// $output>fieldset.market>div.output>div.list div.item.card div.status>span.street { color:var(--notice-bg-color); }
// $output>fieldset.market>div.output>div.list div.item.card div.status>span.place { color:var(--notice-bg-color); }
$output>fieldset.market>div.output>div.tabs { display:flex; width:100%; overflow:auto; height:30px; position:sticky; top:0; z-index:1; }
$output>fieldset.market>div.output>div.tabs::-webkit-scrollbar { width:0 !important; height:0 !important; }
$output>fieldset.market>div.output>div.tabs>div.item { padding:5px 10px; float:left; white-space:pre; }
$output>fieldset.market>div.output>div.tabs>div.item.select { border-top:var(--box-danger); background-color:var(--output-bg-color); color:var(--danger-bg-color); font-weight:bold; position:sticky; left:0; right:0; }
body.light.mobile { --plugin-bg-color:#f4f5f9; --output-bg-color:#fefefd; }
body.mobile $output>div>div.list div.item.index span { font-size:12px; white-space:pre; }
body.mobile fieldset.panel.Action>div.output { background-color:var(--plugin-bg-color); }

View File

@ -81,7 +81,7 @@ func (s Portal) Run(m *ice.Message, arg ...string) {
sub, role = arg[1], action.Role
}
}
if kit.IsIn(role, "", aaa.VOID) {
if 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(arg[0], s.CheckRole, role).IsErr() {
@ -111,7 +111,7 @@ func (s Portal) List(m *ice.Message, arg ...string) {
default:
m.PushButton(s.PlaceRemove)
}
}).Action(s.PlaceCreate, s.ScanQRCode, s.PlaceSearch)
}).Action(s.PlaceCreate, s.PlaceSearch)
kit.If(!m.IsErr() && m.Length() == 0, func() { m.EchoInfoButton("", s.PlaceCreate, s.ScanQRCode, s.PlaceSearch) })
} else if len(arg) == 1 {
if arg[0] != "" {
@ -139,9 +139,10 @@ func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message {
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)
}
s.Place.RewriteAppend(msg)
m.Options(msg.AppendSimple(model.AUTH_STATUS, s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE), s.Keys(s.Street, model.NAME), model.CITY_NAME))
m.Options(msg.AppendSimple(model.AUTH_STATUS, model.DASHBOARD_UID, s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE), s.Keys(s.Street, model.NAME), model.CITY_NAME))
return msg
}
func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
@ -160,9 +161,12 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
s.RecordEventWithName(m.Options(mdb.NAME, name, 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.Create, 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) {
defer m.ToastProcess()()
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 {
@ -177,6 +181,10 @@ func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message {
} else {
return m
}
m.Table(func(value ice.Maps) {
m.Push(model.SERVICE_ICON, ice.Info.NodeIcon)
m.Push(model.NODENAME, ice.Info.NodeName)
})
s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID)
s.SelectJoinCity(m)
s.SelectJoinAuth(m)
@ -187,7 +195,7 @@ func (s Portal) PlaceAuth(m *ice.Message, arg ...string) {
place_uid := m.Option(s.Keys(s.Place, model.UID))
place_name := m.Option(s.Keys(s.Place, model.NAME))
m.Option(model.COMPANY_NAME, m.Option(s.Keys(s.Street, model.NAME)))
msg := s.SpaceCmd(m, "20240724-community", "web.team.renzhengshouquan.portal", "placeCreate", m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME),
msg := m.Cmd(s.FindSpaceCmd(m, "web.team.renzhengshouquan.portal"), "placeCreate", m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME),
model.AUTH_TYPE, ice.AUTO, model.AUTH_NAME, place_name, model.FROM_UID, ice.AUTO)
if msg.IsErr() {
m.Copy(msg)
@ -195,6 +203,7 @@ func (s Portal) PlaceAuth(m *ice.Message, arg ...string) {
}
m.Cmd(s.Place, s.UpdateAuth, msg.Option(model.AUTH_UID), model.UID, place_uid)
s.RecordEventWithName(m.Options(model.NAME, place_name, model.UID, place_uid), "")
msg.Cmd(s.Prefix(m, s), s.AfterPlaceAuth)
} else {
m.ProcessHold()
}
@ -213,18 +222,6 @@ func (s Portal) ScanQRCode(m *ice.Message, arg ...string) {
}
}
}
func (s Portal) UserPlaceRole(m *ice.Message, arg ...string) {
m.Echo(m.Cmd(s.UserPlace, s.Table.Select, m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID)).Append(model.ROLE))
}
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) 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) AddRecent(m *ice.Message, arg ...string) {
m.Options(m.ConfigSimple(model.SERVICE_UID))
if kit.IsIn(m.Append(model.AUTH_STATUS), "2", "issued") {
@ -233,6 +230,9 @@ func (s Portal) AddRecent(m *ice.Message, arg ...string) {
m.Cmd(s.Prefix(m, s.recent), s.Create, s.GetCommands(m, model.SERVICE_UID, arg...))
}
}
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) ValueCreate(m *ice.Message, arg ...string) {
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.USER_UID, s.Keys(s.Place, model.UID)))...)
}
@ -245,9 +245,42 @@ func (s Portal) ValueModify(m *ice.Message, arg ...string) {
func (s Portal) ValueList(m *ice.Message, arg ...string) {
s.TablesWithRole(m, arg, s.UserPlace, s.Place, m.Option("target"), m.Optionv(mdb.FIELDS).([]ice.Any)...)
}
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) DashboardCreate(m *ice.Message, name string, arg ...string) *ice.Message {
kit.If(name == "", func() { name = m.Option(s.Keys(s.Place, model.NAME)) })
m.Cmdy(s.FindSpaceCmd(m, "web.team.dashboard.portal"), s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME), model.CLIENT_NAME, name, model.CLIENT_TYPE, "0")
m.Cmd(s.FindSpaceCmd(m, web.TEAM_RENZHENGSHOUQUAN_AUTH), "dashboard", m.Option(model.AUTH_UID), m.Option(model.CLIENT_UID))
return m
}
func (s Portal) DashboardInsert(m *ice.Message, score, title string, index ice.Any, field string, arg ...ice.Any) *ice.Message {
kit.If(len(arg) == 0, func() { arg = append(arg, s.Keys(s.Place, model.UID), m.Option(s.Keys(s.Place, model.UID))) })
return m.Cmd(s.FindSpaceCmd(m, "web.team.dashboard.summary"), s.Create,
model.TITLE, title, model.SPACE, m.Option(ice.MSG_USERPOD), model.INDEX, s.Prefix(m, index), model.QUERY, kit.Format(arg), mdb.FIELD, field, model.SCORE, score,
m.OptionSimple(model.CLIENT_UID))
}
func (s Portal) DashboardUpdate(m *ice.Message, arg ...string) {
if m.Option(model.DASHBOARD_UID) != "" {
m.Cmd(s.FindSpaceCmd(m, "web.team.dashboard.summary"), "scan", kit.Dict(model.CLIENT_UID, m.Option(model.DASHBOARD_UID)))
}
}
func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) }
func (s Portal) UserPlaceRole(m *ice.Message, arg ...string) {
m.Echo(m.Cmd(s.UserPlace, s.Table.Select, m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID)).Append(model.ROLE))
}
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) UpdateCommand(m *ice.Message, arg ...string) {
m.Config(model.SERVICE_UID, arg[0])
s.Hash.Select(m.Spawn()).Table(func(value ice.Maps) {
@ -271,6 +304,12 @@ func (s Portal) Create(m *ice.Message, arg ...string) {
})
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())
}

View File

@ -35,7 +35,6 @@ Volcanos(chat.ONIMPORT, {
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) { can._index_msg = msg
can.onimport.myCount(can, msg, can.ui.mycount)
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)
@ -53,7 +52,7 @@ Volcanos(chat.ONIMPORT, {
STREET_NAME, msg.Option(STREET_NAME), CITY_NAME, msg.Option(CITY_NAME),
"auth_status", msg.Option("auth_status"),
))
_msg.Option(ice.MSG_ACTION, msg.Option(USER_PLACE_ROLE) == "visitor"? '["placeSearch"]': '["placeCreate","scanQRCode","placeSearch"]')
_msg.Option(ice.MSG_ACTION, msg.Option(USER_PLACE_ROLE) == "visitor"? '[]': '["placeCreate","placeSearch"]')
can.onimport.myPlace(can, _msg, can.ui.myplace, PLACE_UID, PLACE_NAME, PLACE_TYPE)
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)
@ -71,8 +70,7 @@ Volcanos(chat.ONIMPORT, {
value._role_style = can.onimport.roleStyle(can, value, USER_PLACE_ROLE)
value.icons = can.Conf(can.core.Keys("_trans.value", PLACE_TYPE, mdb.ICONS, value[PLACE_TYPE]))
},
myDebug: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
can.onmotion.hidden(can, target)
myDebug: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) { can.onmotion.hidden(can, target)
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}])
},
@ -93,28 +91,28 @@ Volcanos(chat.ONIMPORT, {
})), can.page.Append(can, target, [{view: html.ACTION, _init: function(target) { can.onappend._action(can, msg.Option(ice.MSG_ACTION), target) }}])
return place_uid||""
},
myCount: function(can, msg, target) { var dashboard_uid = msg.Option("dashboard_uid")
myCount: function(can, msg, value, target) { if (!msg) { return } can.onmotion.toggle(can, target, !!value._count)
if (can.onmotion.cache(can, function() { return value._uid }, target)) { return } if (!value.dashboard_uid) { return }
can.page.Append(can, target, [{view: html.TITLE, list: [{text: can.user.trans(can, "My Count", "我的数据")}]}])
can.onappend.plugin(can._root.Action, {width: can.ConfWidth()-40, space: "20240903-operation", index: "web.team.dashboard.summary", args: [dashboard_uid||"e61693838bfe34ab15485b0bc2355d19"]}, function() {}, target)
can.onappend.plugin(can._root.Action, {width: can.ConfWidth()-40, space: "20240903-operation", index: "web.team.dashboard.summary", args: [value.dashboard_uid]}, function(sub) {
can.onmotion.toggle(can, target, value._count = true)
}, target)
},
myInit: function(can, msg, value, target) { if (!msg) { return } can.onmotion.hidden(can, target)
return
myInit: function(can, msg, value, target) { if (!msg) { return } can.onmotion.toggle(can, target, !!value._init)
if (can.onmotion.cache(can, function() { return value._uid }, target)) { 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
debugger
can.onappend.plugin(can, val, function(sub) { var run = sub.run
sub.run = function(event, cmds, cb) {
run(can.request(event, {place_uid: value._uid, 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)
}
})
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, {place_uid: value._uid, 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), can.onmotion.toggle(can, target, !!value._init)
} })
},
myList: function(can, msg, target, PLACE_UID, USER_PLACE_ROLE) {
var width = (can.ConfWidth()-40)/parseInt((can.ConfWidth()-40)/100); can.user.isMobile && !can.user.isLandscape() && (width = (can.ConfWidth()-40)/4)
var width = (can.ConfWidth()-40)/parseInt((can.ConfWidth()-40)/100); can.user.isMobile && !can.user.isLandscape() && (width = (can.ConfWidth()-40)/5)
can.page.Append(can, target, msg.Table(function(value) { if (value.enable == ice.FALSE) { return }
return {view: [[html.ITEM, ctx.INDEX].concat(
value.type? [mdb.TYPE]: [], can.core.Split(value.type||""),
@ -154,7 +152,7 @@ Volcanos(chat.ONIMPORT, {
},
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.select(can, can.ui.role, html.SPAN, can.page.SelectOne(can, can.ui.role, "span."+role))
if (isNaN(parseInt(role))) { can.ui.role && can.onmotion.select(can, can.ui.role, html.SPAN, can.page.SelectOne(can, can.ui.role, "span."+role)) }
can.page.Select(can, can.ui.myindex, html.DIV_ITEM, function(target) { var list = target.className.split(" ")
if (list.indexOf(mdb.TYPE) > -1 && list.indexOf(value._type) == -1) {
can.onmotion.toggle(can, target, false)
@ -181,6 +179,7 @@ Volcanos(chat.ONIMPORT, {
run(can.request(event, {
city_name: msg.Option(CITY_NAME), street_name: msg.Option(STREET_NAME), place_name: msg.Option(PLACE_NAME),
command_uid: msg.Option("command_uid"), portal_name: can.ConfHelp(),
dashboard_uid: msg.Option("dashboard_uid"),
}), cmds, cb)
}
can.page.Appends(can, ui.action, list)
@ -260,18 +259,13 @@ Volcanos(chat.ONIMPORT, {
}) },
})
Volcanos(chat.ONEXPORT, {
value: function(can, value, PLACE_UID) { if (!value) { return }
can.sup.current = value, can.onimport.selectIndex(can, can.sup.current)
can.onexport.session(can, PLACE_UID, value._uid), can.onexport.hash(can, value._uid)
can.onexport.title(can, value._name, can.ConfHelp()), can.user.agent.init(can)
value: function(can, value, PLACE_UID) { if (!value) { return } can.sup.current = value, can.onimport.selectIndex(can, can.sup.current)
can.onexport.session(can, PLACE_UID, value._uid), can.onexport.hash(can, value._uid), can.onexport.title(can, value._name, can.ConfHelp()), can.user.agent.init(can)
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.ui.myallow && can.onmotion.toggle(can, can.ui.myallow, can.page.Select(can, can.ui.myallow, "div.item.index.role."+value._role).length > 0)
can.ui.myinit && can.onmotion.delay(can, function() { can.onmotion.toggle(can, can.ui.myinit, !!value._init) })
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)
can.onimport.myCount(can, can._index_msg, value, can.ui.mycount), 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"))
msg.Option("_share_content", can.user.transValue(can, msg, role)+" "+msg.Append("user_name"))
msg.Option("_share_icons", msg.Append("user_avatar")), msg.Option("_share_content", can.user.transValue(can, msg, role)+" "+msg.Append("user_name"))
},
})

View File

@ -4,7 +4,8 @@
"placeSearch": "搜索", "scanQRCode": "扫码",
"qrcode": "场景码", "event": "事件流", "apply": "权限申请", "allow": "权限审批",
"email": "邮箱配置", "member": "场景成员", "placeUser": "场景成员",
"message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持",
"notice": "通知公告", "domain": "领域分类",
"market": "人民广场", "message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持",
"cancel": "取消", "submit": "提交", "finish": "完成", "reject": "驳回", "approve": "通过",
"read": "已读", "done": "完成", "sticky": "置顶", "unSticky": "取消置顶",
"autogen": "生成", "compile": "编译", "oauth": "授权", "project": "项目",
@ -14,8 +15,10 @@
"apply": "https://img.icons8.com/officel/80/edit-property.png",
"allow": "https://img.icons8.com/officel/80/receipt-approved.png",
"email": "https://img.icons8.com/officel/80/reading-confirmation.png",
"notice": "https://img.icons8.com/officel/80/commercial.png",
"member": "https://img.icons8.com/officel/80/person-at-home.png",
"placeUser": "https://img.icons8.com/officel/80/person-at-home.png",
"domain": "https://img.icons8.com/officel/80/categorize.png",
"market": "https://img.icons8.com/officel/80/square.png",
"message": "https://img.icons8.com/officel/80/test-partial-passed.png",
"recent": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"service": "https://img.icons8.com/officel/80/activity-grid.png",
@ -39,6 +42,7 @@
"company_name": "公司名称",
"city_name": "城市名称",
"auth_name": "认证主体",
"domain_uid": "领域分类",
"auth_status": "认证状态",
"service_name": "服务名称",
"qrcode_type": "链接类型",

View File

@ -12,7 +12,7 @@ import (
type recent struct {
Table
service service
order string `data:"101"`
order string `data:"102"`
create string `name:"create service_uid args"`
remove string `name:"remove" role:"void"`
open string `name:"open" role:"void"`

View File

@ -4,7 +4,7 @@ import "shylinux.com/x/ice"
type support struct {
Table
order string `data:"103"`
order string `data:"104"`
}
func (s support) List(m *ice.Message, arg ...string) {}

22
src/gonganxitong/thumb.go Normal file
View File

@ -0,0 +1,22 @@
package gonganxitong
import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
)
type thumb struct{ Table }
func (s thumb) Toggle(m *ice.Message, arg ...string) {
if msg := s.Select(m.Spawn(), m.OptionSimple(model.MARKET_UID, model.USER_UID)...); msg.Length() == 0 {
s.Create(m.Spawn(), kit.Simple(m.OptionSimple(model.MARKET_UID, model.USER_UID), model.STATUS, 1)...)
m.Echo("1")
} else {
s.AddCount(m.Spawn(), model.STATUS, "1", msg.Append(model.UID))
m.Echo(kit.Format(kit.Int(msg.Append(model.STATUS)) + 1))
}
}
func init() { ice.TeamCtxCmd(thumb{}) }

View File

@ -11,4 +11,4 @@ import (
func main() { print(ice.Run()) }
func init() { ice.Info.Titles = "云社区" }
func init() { ice.Info.Titles = "云社区" }

View File

@ -61,6 +61,9 @@ func (s auth) Issue(m *ice.Message, arg ...string) {
func (s auth) Revoke(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.STATUS, AuthRevoked), model.FROM_UID, m.Option(model.AUTH_UID), model.UID, m.Option(model.UID))
}
func (s auth) Dashboard(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.DASHBOARD_UID, arg[1]), model.UID, arg[0])
}
func init() { ice.TeamCtxCmd(auth{}) }

View File

@ -12,6 +12,7 @@ const (
CONTENT = "content"
CREATOR = "creator"
USER_UID = "user_uid"
DASHBOARD_UID = "dashboard_uid"
USER_AUTH_ROLE = "user_auth_role"
AUTH_UID = "auth_uid"
AUTH_NAME = "auth_name"
@ -31,11 +32,12 @@ type UserAuth struct {
}
type Auth struct {
db.ModelWithUID
CompanyUID string `gorm:"type:char(32);index"`
FromUID string `gorm:"type:char(32);index"`
Name string `gorm:"type:varchar(64)"`
Type uint8 `gorm:"default:0"`
Status uint8 `gorm:"default:0"`
DashboardUID string `gorm:"type:char(32);index"`
CompanyUID string `gorm:"type:char(32);index"`
FromUID string `gorm:"type:char(32);index"`
Name string `gorm:"type:varchar(64)"`
Type uint8 `gorm:"default:0"`
Status uint8 `gorm:"default:0"`
}
type Cert struct {
db.ModelContent

View File

@ -1,5 +1,5 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { can.onimport.shareTitle(can, msg)
_init: function(can, msg) {
can.onimport.itemcards(can, msg, function(value) { return [
{view: html.TITLE, list: [value.name||value.title||value.user_name]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.base.TimeTrim(value.created_at)]},

View File

@ -1,7 +1,10 @@
package yuehaoxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/community/src/gonganxitong"
"shylinux.com/x/community/src/yuehaoxitong/model"
"shylinux.com/x/enterprise/src/guanlixitong"
)
@ -10,4 +13,11 @@ type Portal struct {
placeCreate string `name:"placeCreate city_name* company_name* queue_name* queue_type*:select" role:"void"`
}
func (s Portal) AfterPlaceAuth(m *ice.Message, arg ...string) {
s.DashboardCreate(m, "")
s.DashboardInsert(m, "3", "订单总量", Schedule{}, "", model.QUEUE_UID, m.Option(model.QUEUE_UID))
s.DashboardInsert(m, "3", "订单已预约", Schedule{}, "", model.QUEUE_UID, m.Option(model.QUEUE_UID), model.STATUS, SchedulePlan)
s.DashboardInsert(m, "3", "订单已取号", Schedule{}, "", model.QUEUE_UID, m.Option(model.QUEUE_UID), model.STATUS, ScheduleTake)
s.DashboardInsert(m, "3", "订单已完成", Schedule{}, "", model.QUEUE_UID, m.Option(model.QUEUE_UID), model.STATUS, ScheduleFinish)
}
func init() { gonganxitong.PortalCmd(Portal{Portal: guanlixitong.NewPortal(userQueue{}, queue{})}) }

View File

@ -30,6 +30,7 @@ func (s Schedule) Create(m *ice.Message, arg ...string) {
})
s.SendMessage(m, m.Option(model.USER_UID), m.Option(model.USER_UID))
s.sendTemplate(m, "约号成功", m.Result())
Portal{}.DashboardUpdate(m)
m.ProcessRefresh()
}
func (s Schedule) Call(m *ice.Message, arg ...string) {
@ -143,6 +144,7 @@ func (s Schedule) Take(m *ice.Message, arg ...string) {
}
s.changeStatus(m, SchedulePlan, ScheduleTake)
m.ProcessRefresh()
Portal{}.DashboardUpdate(m)
}
func (s Schedule) Expire(m *ice.Message, arg ...string) {
defer m.ToastProcess("过号中...")("过号成功")
@ -169,6 +171,7 @@ func (s Schedule) Finish(m *ice.Message, arg ...string) {
})
s.Select(m.FieldsSetDetail(), args...)
s.sendTemplate(m, "服务已完成")
Portal{}.DashboardUpdate(m)
}
func init() { ice.TeamCtxCmd(Schedule{}) }

View File

@ -40,7 +40,7 @@
"river": "1",
"scene": "main",
"space": "20240724-community",
"storm": "3",
"storm": "4",
"time": "2024-08-29 16:38:41.517",
"type": "view"
}
@ -158,7 +158,7 @@
"river": "1",
"scene": "main",
"space": "20240724-community",
"storm": "4",
"storm": "3",
"time": "2024-08-29 16:38:04.352",
"type": "view"
}

View File

@ -14,6 +14,13 @@
"time": "2024-08-06 18:49:10.193"
}
},
"3971882ea4f32c86386ad04b39d3e3d4": {
"meta": {
"index": "web.team.gonganxitong.market",
"order": "100",
"time": "2024-09-07 08:23:04.093"
}
},
"8ce4dfb877e04e3be5144253fdd5d8ff": {
"meta": {
"index": "web.team.gonganxitong.allow",
@ -44,6 +51,19 @@
"time": "2024-08-20 10:37:42.641"
}
},
"c1526ecd405021d6d47798c066bf70c0": {
"meta": {
"index": "web.team.gonganxitong.notice",
"order": "94",
"time": "2024-09-07 08:23:04.082"
}
},
"d86e4e63183c8fae4ceb50498b0bcfde": {
"meta": {
"index": "web.team.gonganxitong.domain",
"time": "2024-09-07 08:23:04.094"
}
},
"e2117b53c036a72fe7e4885449488a6f": {
"meta": {
"index": "web.team.gonganxitong.qrcode",

View File

@ -7,6 +7,12 @@
"time": "2024-08-07 08:09:16.505"
}
},
"04c6ed833d5cf77fef12937a0e58f2ba": {
"meta": {
"index": "web.team.guanlixitong.domain",
"time": "2024-09-07 08:23:04.067"
}
},
"057616b7366e1930ef4e4a921fe45f1f": {
"meta": {
"index": "web.team.guanlixitong.service",
@ -36,6 +42,20 @@
"time": "2024-08-07 12:36:07.524"
}
},
"78d29149539be88d7561b8e17bd65882": {
"meta": {
"index": "web.team.guanlixitong.market",
"order": "100",
"time": "2024-09-07 08:23:04.073"
}
},
"809b63c1819fc3ac1452e3b71889aec5": {
"meta": {
"index": "web.team.guanlixitong.notice",
"order": "70",
"time": "2024-09-07 08:23:04.061"
}
},
"9c18032c5bc252f2986e1b20e7e77db7": {
"meta": {
"index": "web.team.guanlixitong.event",

View File

@ -6,6 +6,12 @@
"time": "2024-08-25 12:53:13.205"
}
},
"41c4e4d621c05725b5d963b25562329d": {
"meta": {
"index": "web.team.huodongzuzhi.domain",
"time": "2024-09-07 08:23:04.049"
}
},
"595eb34d7ebe62e160c02ed5b127d637": {
"meta": {
"index": "web.team.huodongzuzhi.message",
@ -42,6 +48,13 @@
"time": "2024-08-25 12:56:19.033"
}
},
"aa74e6bf51d1d1abab57fdb03b08c5c2": {
"meta": {
"index": "web.team.huodongzuzhi.market",
"order": "100",
"time": "2024-09-07 08:23:04.054"
}
},
"baec1db59218f2da9d560fa719c6a12f": {
"meta": {
"index": "web.team.huodongzuzhi.apply",
@ -66,6 +79,13 @@
"time": "2024-08-25 12:53:13.191"
}
},
"ee364ed77eb0383868d48260f8b5aeb2": {
"meta": {
"index": "web.team.huodongzuzhi.notice",
"order": "70",
"time": "2024-09-07 08:23:04.056"
}
},
"f77a8f8d7dfe49f8e82ecd8d0b99f233": {
"meta": {
"index": "web.team.huodongzuzhi.recent",

View File

@ -61,6 +61,12 @@
"time": "2024-08-29 12:42:12.281"
}
},
"b0a322b1aeb3772b09477be3e47c8e89": {
"meta": {
"index": "web.team.renzhengshouquan.domain",
"time": "2024-09-07 08:23:04.033"
}
},
"bfecb55b11fe68186270fe1b4b8de8cf": {
"meta": {
"index": "web.team.renzhengshouquan.member",
@ -68,6 +74,13 @@
"time": "2024-08-29 12:42:12.278"
}
},
"d9f55b517f4b2579693523ed3b5bd088": {
"meta": {
"index": "web.team.renzhengshouquan.market",
"order": "100",
"time": "2024-09-07 08:23:04.025"
}
},
"e038450591f3c8e7babc0c21b1c6fa6d": {
"meta": {
"index": "web.team.renzhengshouquan.recent",
@ -75,6 +88,13 @@
"time": "2024-08-29 12:42:12.297"
}
},
"ecfb11fad5b4bdf21384e2e1ff571598": {
"meta": {
"index": "web.team.renzhengshouquan.notice",
"order": "70",
"time": "2024-09-07 08:23:04.024"
}
},
"f6b093d122ff3cec363b00093e0a6f19": {
"meta": {
"index": "web.team.renzhengshouquan.service",

View File

@ -15,6 +15,13 @@
"time": "2024-08-11 09:30:00.536"
}
},
"2ed70cba7eb6d3cf5fbe712c63da87a7": {
"meta": {
"index": "web.team.yuehaoxitong.market",
"order": "100",
"time": "2024-09-07 08:23:04.006"
}
},
"377f3c0dae9dbf423a8e188bfd245b7a": {
"meta": {
"index": "web.team.yuehaoxitong.recent",
@ -38,6 +45,13 @@
"time": "2024-08-16 10:29:53.817"
}
},
"6644f2fe4b9315d864e0f6d54b0dea96": {
"meta": {
"enable": "false",
"index": "web.team.yuehaoxitong.domain",
"time": "2024-09-07 08:23:04.001"
}
},
"75c5c1863c1bdaf0bcbd3065b661528d": {
"meta": {
"index": "web.team.yuehaoxitong.call",
@ -77,6 +91,13 @@
"time": "2024-08-11 09:30:00.509"
}
},
"b66f57a7a84d982b1b3a74ac3bdc045c": {
"meta": {
"index": "web.team.yuehaoxitong.notice",
"order": "94",
"time": "2024-09-07 08:23:04.019"
}
},
"b811b4ed8b1b372958bbb4bb1b2709b8": {
"meta": {
"index": "web.team.yuehaoxitong.support",