diff --git a/src/gonganxitong/common.go b/src/gonganxitong/common.go index d2f9dd6..9d3d34c 100644 --- a/src/gonganxitong/common.go +++ b/src/gonganxitong/common.go @@ -11,6 +11,7 @@ import ( "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/mdb" + "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web/html" kit "shylinux.com/x/toolkits" @@ -188,6 +189,9 @@ func (s Table) RenameAppend(m *ice.Message, arg ...string) Table { } func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { m.RewriteAppend(func(value, key string, index int) string { + if value != "" && kit.IsIn(key, model.BACKGROUND, model.AVATAR) { + value = m.Resource(value) + } if _, e := strconv.ParseInt(value, 10, 64); e != nil { return value } @@ -211,6 +215,20 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { }) return m } +func (s Table) UploadUpdate(m *ice.Message, field, uid string, arg ...string) { + if m.IsErr() { + return + } + p := m.UploadSave(path.Join(nfs.USR, kit.Select(field, m.Option("field")), uid) + nfs.PS) + s.Update(m, kit.Dict(kit.Select(m.Option("field"), field), p), model.UID, uid) +} +func (s Table) UploadCreate(m *ice.Message, field, uid string, arg ...string) { + if m.IsErr() { + return + } + p := m.UploadSave(path.Join(nfs.USR, kit.Select(field, m.Option("field")), uid) + nfs.PS) + s.Create(m, kit.Select(m.Option("field"), field), p, model.UID, uid) +} 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...) diff --git a/src/gonganxitong/portal.css b/src/gonganxitong/portal.css index 8bbb75f..143a602 100644 --- a/src/gonganxitong/portal.css +++ b/src/gonganxitong/portal.css @@ -19,7 +19,7 @@ $output>div.header { border-radius:100px; background-color:var(--notice-bg-color $output>div.footer { border-radius:100px; background-color:var(--notice-bg-color); height:300px; width:100%; position:absolute; bottom:-100px; left:0; } $output>div>div.list { box-shadow:var(--box-shadow); border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px; } $output>div>div.list.mycount { min-height:105px; } -$output>div>div.list.myplace>div.output { max-height:420px; } +$output>div>div.list.myplace>div.output { padding:0 10px; max-height:420px; } $output>div>div.list>div.title { font-weight:bold; display:flex; align-items:center; } $output>div>div.list>div.title span:first-child { flex-grow:1; } $output>div>div.list>div.title div.action { overflow:hidden; } diff --git a/src/gonganxitong/portal.go b/src/gonganxitong/portal.go index bd48eed..27a2f63 100644 --- a/src/gonganxitong/portal.go +++ b/src/gonganxitong/portal.go @@ -279,12 +279,13 @@ func (s Portal) MarketInsert(m *ice.Message, arg ...string) { 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, title, unit string, index ice.Any, field string, arg ...ice.Any) { +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, s.Keys(s.Place, model.UID), m.Option(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)) diff --git a/src/gonganxitong/portal.js b/src/gonganxitong/portal.js index 8ecc19c..a7d7e27 100644 --- a/src/gonganxitong/portal.js +++ b/src/gonganxitong/portal.js @@ -1,4 +1,5 @@ var UID = "uid", PLACE_UID = "place_uid", PLACE_NAME = "place_name", PLACE_TYPE = "place_type", STREET_NAME = "street_name", CITY_NAME = "city_name" +var USER_UID = "user_uid", USER_ROLE = "user_role", AUTH_UID = "auth_uid", AUTH_TYPE = "auth_type" Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onappend.style(can, html.OUTPUT), can.onimport.myPortal(can, msg) diff --git a/src/gonganxitong/setting.go b/src/gonganxitong/setting.go index bd462e3..03a1a3f 100644 --- a/src/gonganxitong/setting.go +++ b/src/gonganxitong/setting.go @@ -12,6 +12,7 @@ type setting struct { service service recent recent order string `data:"102"` + role string `data:"leader,worker,server"` short string `data:"name"` field string `data:"name,type,help"` fields string `data:"name,value"` @@ -36,14 +37,7 @@ func (s setting) Update(m *ice.Message, arg ...string) { } func (s setting) Profile(m *ice.Message, arg ...string) { s.Fields(m, s.Key(s, model.PLACE_UID)) - s.Select(m, s.Key(s, model.USER_UID), arg[0], s.Key(s, model.NAME), "profile", s.Key(s, model.VALUE), "on") - return - s.Tables(m, "LEFT JOIN recents ON args = settings.place_uid AND recents.user_uid = settings.user_uid AND recents.deleted_at IS NULL", s.service).Fields(m, - model.SERVICE_ICON, model.SERVICE_NAME, - s.Key(s.recent, model.CITY_NAME), s.Key(s.recent, model.STREET_NAME), s.Key(s.recent, model.PLACE_NAME), - s.AS(model.NODENAME, model.SPACE), model.INDEX, s.Key(s, model.PLACE_UID), - ) - s.Select(m, s.Key(s, model.USER_UID), arg[0], s.Key(s, model.NAME), "profile", s.Key(s, model.VALUE), "on") + s.Select(m, s.Key(s, model.USER_UID), arg[0], s.Key(s, model.NAME), m.ActionKey(), s.Key(s, model.VALUE), "on") } func (s Table) SettingProfile(m *ice.Message, arg ...string) *ice.Message { return m.Cmdy(s.Prefix(m, setting{}), setting{}.Profile, arg) diff --git a/src/huodongzuzhi/activity.go b/src/huodongzuzhi/activity.go index 5844ba5..5a033ef 100644 --- a/src/huodongzuzhi/activity.go +++ b/src/huodongzuzhi/activity.go @@ -6,6 +6,7 @@ type activity struct { Table fields string `data:"title,content,user_uid"` create string `name:"create title* content*" role:"leader"` + modify string `name:"modify title content" role:"leader"` remove string `name:"remove" role:"leader"` } diff --git a/src/renzhengshouquan/auth.go b/src/renzhengshouquan/auth.go index c8e636a..312989e 100644 --- a/src/renzhengshouquan/auth.go +++ b/src/renzhengshouquan/auth.go @@ -12,7 +12,7 @@ type Auth struct { cert cert order string `data:"2"` models string `data:"auth"` - fields string `data:"creator,name,info,auth_type,auth_status,avatar,background,service_uid,place_uid"` + fields string `data:"name,info,auth_type,auth_status,avatar,background,service_uid,place_uid,user_uid"` memberList string `name:"memberList" role:"leader,worker"` certList string `name:"certList" role:"leader,worker"` issue string `name:"issue" role:"leader,worker"` @@ -51,18 +51,18 @@ func (s Auth) CertList(m *ice.Message, arg ...string) { kit.If(m.Length() == 0, func() { m.Echo("没有上传证件") }) } func (s Auth) Issue(m *ice.Message, arg ...string) { - msg := m.Cmd(userAuth{}, m.Option(model.USER_UID), m.Option(model.AUTH_UID)) + msg := m.Cmd(userAuth{}, s.Select, m.OptionSimple(model.USER_UID), model.UID, m.Option(model.AUTH_UID)) if !m.IsTech() || AuthType(kit.Int(msg.Append(model.AUTH_TYPE))) != AuthRoot { if m.WarnNotValid(AuthStatus(kit.Int(msg.Append(model.AUTH_STATUS))) != AuthIssued) { return } } s.Update(m, kit.Dict(model.STATUS, AuthIssued), model.FROM_UID, m.Option(model.AUTH_UID), model.UID, m.Option(model.UID)) - switch s.Select(m, model.UID, m.Option(model.UID)); AuthType(kit.Int(m.Append(model.AUTH_TYPE))) { + switch s.Select(m, m.OptionSimple(model.UID)...); AuthType(kit.Int(m.Append(model.AUTH_TYPE))) { case AuthCity: m.Cmd("web.team.gonganxitong.city", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME)) case AuthPersonal: - m.Cmd("web.team.gonganxitong.user", s.UpdateAuth, m.Option(model.UID), model.UID, m.Append(model.CREATOR)) + m.Cmd("web.team.gonganxitong.user", s.UpdateAuth, m.Option(model.UID), model.UID, m.Append(model.USER_UID)) case AuthCompany: m.Cmd("web.team.guanlixitong.company", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME)) case AuthSchool: diff --git a/src/renzhengshouquan/auth.js b/src/renzhengshouquan/auth.js index b365959..089465b 100644 --- a/src/renzhengshouquan/auth.js +++ b/src/renzhengshouquan/auth.js @@ -1,7 +1,7 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.name, can.onimport.textView(can, value, "auth_type"), can.onimport.titleAction(can, value)]}, + {view: html.TITLE, list: [value.name, can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value)]}, {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value)]}, ] }) }, diff --git a/src/renzhengshouquan/cert.go b/src/renzhengshouquan/cert.go index 003bc21..a3dcdad 100644 --- a/src/renzhengshouquan/cert.go +++ b/src/renzhengshouquan/cert.go @@ -1,11 +1,9 @@ package renzhengshouquan import ( - "path" - "shylinux.com/x/ice" "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/toolkits" "shylinux.com/x/community/src/renzhengshouquan/model" ) @@ -19,8 +17,8 @@ type cert struct { } func (s cert) Upload(m *ice.Message, arg ...string) { - p := m.UploadSave(path.Join(nfs.USR, m.Option(mdb.FIELD), m.Option(model.AUTH_UID)) + nfs.PS) - s.Create(m, model.PATH, p, model.AUTH_UID, m.Option(model.AUTH_UID)) + m.WarnNotValid(!kit.IsIn(m.OptionDefault(mdb.FIELD, "cert"), "cert")) + s.UploadCreate(m, model.PATH, m.Option(model.AUTH_UID)) } func (s cert) List(m *ice.Message, arg ...string) { if len(arg) == 1 { diff --git a/src/renzhengshouquan/cert.js b/src/renzhengshouquan/cert.js index 4f7af69..4576fe0 100644 --- a/src/renzhengshouquan/cert.js +++ b/src/renzhengshouquan/cert.js @@ -8,5 +8,5 @@ Volcanos(chat.ONIMPORT, { }, }) Volcanos(chat.ONACTION, { - upload: function(event, can) { can.user.upload(can.request(event, {field: "cert", _handle: ice.TRUE}), can) }, + upload: function(event, can) { can.user.upload(can.request(event, {_handle: ice.TRUE}), can) }, }) \ No newline at end of file diff --git a/src/renzhengshouquan/common.go b/src/renzhengshouquan/common.go index a2496a9..bbc61d6 100644 --- a/src/renzhengshouquan/common.go +++ b/src/renzhengshouquan/common.go @@ -4,7 +4,6 @@ import ( "strconv" "shylinux.com/x/ice" - "shylinux.com/x/icebergs/base/aaa" kit "shylinux.com/x/toolkits" "shylinux.com/x/community/src/renzhengshouquan/model" @@ -24,20 +23,6 @@ func (s Table) Inputs(m *ice.Message, arg ...string) { s.InputsListSkip(m, AuthTypeList, kit.Select("0", "-1", m.IsTech()), arg...) case model.AUTH_STATUS: s.InputsList(m, AuthStatusList, arg...) - case model.FROM_UID: - switch AuthType(kit.Int(m.Option(model.AUTH_TYPE))) { - case AuthRoot: - m.Push(model.UID, aaa.ROOT).Push(model.NAME, aaa.ROOT) - case AuthCity: - m.Cmdy(Auth{}, s.Select, model.TYPE, AuthRoot) - case AuthCompany, AuthPersonal: - m.Cmdy(Auth{}, s.Select, model.TYPE, AuthCity) - default: - msg := m.Cmd(Auth{}, s.Select, model.TYPE, AuthCity, model.NAME, m.Option(model.CITY_NAME)) - m.Cmdy(Auth{}, s.Select, model.TYPE, AuthCompany, model.FROM_UID, msg.Append(model.UID)) - } - m.Cut(model.UID, model.NAME).RenameAppend(model.UID, model.FROM_UID) - m.DisplayInputKeyNameIconTitle() default: s.Table.Inputs(m, arg...) } diff --git a/src/renzhengshouquan/model/model.go b/src/renzhengshouquan/model/model.go index 41f1594..27c7b07 100644 --- a/src/renzhengshouquan/model/model.go +++ b/src/renzhengshouquan/model/model.go @@ -10,15 +10,14 @@ const ( STATUS = "status" TITLE = "title" CONTENT = "content" - CREATOR = "creator" + AVATAR = "avatar" + BACKGROUND = "background" USER_UID = "user_uid" USER_AUTH_ROLE = "user_auth_role" AUTH_UID = "auth_uid" AUTH_NAME = "auth_name" AUTH_TYPE = "auth_type" AUTH_STATUS = "auth_status" - DASHBOARD_UID = "dashboard_uid" - STORAGE_UID = "storage_uid" CERT_UID = "cert_uid" COMPANY_UID = "company_uid" COMPANY_NAME = "company_name" @@ -27,11 +26,11 @@ const ( FROM_UID = "from_uid" SERVICE_UID = "service_uid" PLACE_UID = "place_uid" + STORAGE_UID = "storage_uid" + DASHBOARD_UID = "dashboard_uid" SPACE = "space" INDEX = "index" PATH = "path" - BACKGROUND = "background" - AVATAR = "avatar" ) type UserAuth struct { @@ -48,11 +47,11 @@ type Auth struct { Status uint8 `gorm:"default:0"` Avatar string `gorm:"type:varchar(255)"` Background string `gorm:"type:varchar(255)"` - StorageUID string `gorm:"type:char(32)"` - DashboardUID string `gorm:"type:char(32)"` ServiceUID string `gorm:"type:char(32)"` PlaceUID string `gorm:"type:char(32)"` UserUID string `gorm:"type:char(32)"` + StorageUID string `gorm:"type:char(32)"` + DashboardUID string `gorm:"type:char(32)"` } type Cert struct { db.ModelContent diff --git a/src/renzhengshouquan/portal.go b/src/renzhengshouquan/portal.go index 2883762..f064819 100644 --- a/src/renzhengshouquan/portal.go +++ b/src/renzhengshouquan/portal.go @@ -23,6 +23,12 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) { if m.Option(model.AUTH_TYPE) == ice.AUTO { arg = append(arg, model.AUTH_TYPE, m.Option(model.AUTH_TYPE, AuthService)) } + if m.WarnNotRight(AuthType(kit.Int(m.Option(model.AUTH_TYPE))) == AuthRoot && !m.IsTech()) { + return + } + if AuthType(kit.Int(m.Option(model.AUTH_TYPE))) == AuthRoot && m.IsTech() { + arg = append(arg, model.STATUS, kit.Format(AuthIssued)) + } from := "" switch AuthType(kit.Int(m.Option(model.AUTH_TYPE))) { case AuthRoot: @@ -41,18 +47,10 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) { if from == "" { return } - arg = append(arg, model.FROM_UID, m.Option(model.FROM_UID, from)) - arg = append(arg, model.USER_UID, m.Option(model.USER_UID)) - if m.WarnNotRight(AuthType(kit.Int(m.Option(model.AUTH_TYPE))) == AuthRoot && !m.IsTech()) { - return - } - if AuthType(kit.Int(m.Option(model.AUTH_TYPE))) == AuthRoot && m.IsTech() { - arg = append(arg, model.STATUS, kit.Format(AuthIssued)) - } - s.Portal.PlaceCreate(m, arg...) + s.Portal.PlaceCreate(m, append(arg, model.FROM_UID, m.Option(model.FROM_UID, from), model.USER_UID, m.Option(model.USER_UID))...) } func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message { - s.Tables(m, "left join auths on user_auths.auth_uid = auths.uid").FieldsWithCreatedAT(m, s.UserPlace, + s.Tables(m, s.Place).FieldsWithCreatedAT(m, s.UserPlace, model.AUTH_NAME, model.AUTH_TYPE, model.AUTH_STATUS, model.USER_AUTH_ROLE, s.AS(s.Key(s.Place, model.UID), model.AUTH_UID), model.COMPANY_UID, ) diff --git a/src/renzhengshouquan/portal.json b/src/renzhengshouquan/portal.json index 2fa2778..58f0e57 100644 --- a/src/renzhengshouquan/portal.json +++ b/src/renzhengshouquan/portal.json @@ -2,12 +2,11 @@ "portal": "认证授权", "cert": "上传证件", "auth": "认证授权", "profile": "用户名片", "certList": "证件", "memberList": "成员", - "issue": "认证", "revoke": "吊销", - "enter": "进入", + "issue": "认证", "revoke": "吊销", "enter": "进入", "style": { - "enter": "notice", "issue": "notice", - "revoke": "danger" + "revoke": "danger", + "enter": "notice" }, "icons": { "auth": "https://img.icons8.com/officel/80/activity-grid.png", diff --git a/src/renzhengshouquan/profile.go b/src/renzhengshouquan/profile.go index 1b57428..c64db7e 100644 --- a/src/renzhengshouquan/profile.go +++ b/src/renzhengshouquan/profile.go @@ -1,11 +1,9 @@ package renzhengshouquan import ( - "path" - "shylinux.com/x/ice" + "shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/mdb" - "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/web" kit "shylinux.com/x/toolkits" @@ -26,20 +24,26 @@ func (s profile) Modify(m *ice.Message, arg ...string) { s.Update(m, kit.Dict(m.OptionSimple(model.INFO)), model.UID, m.Option(model.AUTH_UID)) } func (s profile) Upload(m *ice.Message, arg ...string) { - p := m.UploadSave(path.Join(nfs.USR, m.Option(mdb.FIELD), m.Option(model.AUTH_UID)) + nfs.PS) - s.Update(m, kit.Dict(m.Option(mdb.FIELD), p), model.UID, m.Option(model.AUTH_UID)) + m.WarnNotValid(!kit.IsIn(m.OptionDefault(mdb.FIELD, aaa.AVATAR), aaa.AVATAR, aaa.BACKGROUND)) + s.Table.UploadUpdate(m, "", m.Option(model.AUTH_UID)) +} +func (s profile) List(m *ice.Message, arg ...string) { + if len(arg) == 1 { + s.Select(m, model.UID, arg[0]) + kit.If(s.IsVisitor(m), func() { m.Action() }, func() { m.Action(s.Modify) }) + } + s.RewriteAppend(m) + m.Display("") } func (s profile) AuthList(m *ice.Message, arg ...string) { - m.Cmdy(s.Auth, m.Option(model.AUTH_UID)) - kit.If(s.IsVisitor(m), func() { m.PushAction() }) - s.SelectJoinService(m) - m.Table(func(value ice.Maps) { + m.Cmdy(s.Auth, m.Option(model.AUTH_UID)).Table(func(value ice.Maps) { if value[model.SERVICE_UID] == "" { m.PushButton() } else { m.PushButton(s.Enter) } }) + s.SelectJoinService(m) s.RewriteAppend(m) } func (s profile) MemberList(m *ice.Message, arg ...string) { @@ -57,21 +61,5 @@ func (s profile) SystemList(m *ice.Message, arg ...string) { } func (s profile) Enter(m *ice.Message, arg ...string) { } -func (s profile) List(m *ice.Message, arg ...string) { - if len(arg) == 1 { - s.Select(m, model.UID, arg[0]).Display("") - kit.If(s.IsVisitor(m), func() { m.Action() }, func() { m.Action(s.Modify) }) - } - s.RewriteAppend(m) -} -func (s profile) RewriteAppend(m *ice.Message, arg ...string) { - s.Table.RewriteAppend(m) - m.RewriteAppend(func(value, key string, index int) string { - if value != "" && kit.IsIn(key, model.BACKGROUND, model.AVATAR) { - value = m.Resource(value) - } - return value - }) -} func init() { ice.TeamCtxCmd(profile{}) } diff --git a/src/renzhengshouquan/profile.js b/src/renzhengshouquan/profile.js index 1130ced..4c55529 100644 --- a/src/renzhengshouquan/profile.js +++ b/src/renzhengshouquan/profile.js @@ -1,42 +1,42 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { msg.Option("_share_title", msg.Append(mdb.NAME)) - if (!can.base.isIn(msg.Option("user_role"), "1", "2", "3")) { delete(can.onaction.updateAvatar), delete(can.onaction.updateBackground) } + if (!can.base.isIn(msg.Option(USER_ROLE), "1", "2", "3")) { delete(can.onaction.updateAvatar), delete(can.onaction.updateBackground) } can.ui = can.page.Appends(can, can._output, [html.HEAD, html.LIST]) msg.Table(function(value) { - can.page.Append(can, can.ui.head, [{img: can.misc.Resource(can, value.background||"usr/icons/background.jpg"), onclick: function(event) { + can.page.Append(can, can.ui.head, [{img: can.misc.Resource(can, value.background||html.BACKGROUND_JPG), onclick: function(event) { can.onaction.updateBackground && can.onaction.updateBackground(event, can) }}]) - can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, {avatar: value.avatar||"usr/icons/avatar.jpg"}, [ - {view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type"), can.onimport.titleAction(can, msg)]}, + can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, {avatar: value.avatar||html.AVATAR_JPG}, [ + {view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, msg)]}, {view: html.STATUS, list: [value.info]}, ])]) }) - var cmd = msg.Append("auth_type") == "personal"? can.onimport.systemList(can, msg): - msg.Append("auth_type") == "service"? can.onimport.memberList(can, msg): + var cmd = msg.Append(AUTH_TYPE) == "personal"? can.onimport.systemList(can, msg): + msg.Append(AUTH_TYPE) == "service"? can.onimport.memberList(can, msg): can.onimport.authList(can, msg) }, authList: function(can, msg) { can.runAction(can.request({}, {auth_uid: msg.Append(UID)}), "authList", [], function(msg) { - can.onimport.myView(can, msg, function(value) { value.avatar = value.avatar||"usr/icons/avatar.jpg" + can.onimport.myView(can, msg, function(value) { value.avatar = value.avatar||html.AVATAR_JPG return [ - {view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type"), can.onimport.titleAction(can, value)]}, + {view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value)]}, {view: html.STATUS, list: [value.info]}, ] }, function(event, value) { - can.Option("auth_uid", value.uid), can.Update(event) + can.Option(AUTH_UID, value.uid), can.Update(event) }, can.ui.list) }) }, memberList: function(can, msg) { can.runAction(can.request({}, {auth_uid: msg.Append(UID)}), "memberList", [], function(msg) { - can.onimport.myView(can, msg, function(value) { value.avatar = value.user_avatar||"usr/icons/avatar.jpg" + can.onimport.myView(can, msg, function(value) { value.avatar = value.user_avatar||html.AVATAR_JPG return [ - {view: html.TITLE, list: [value.auth_name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type")]}, + {view: html.TITLE, list: [value.auth_name, can.onimport.authView(can, value), can.onimport.textView(can, value, AUTH_TYPE)]}, {view: html.STATUS, list: [value.user_info]}, ] }, function(event, value) { if (value.auth_uid) { - can.Option("auth_uid", value.auth_uid), can.Update(event) + can.Option(AUTH_UID, value.auth_uid), can.Update(event) } else { can.onimport.myStory(can, {index: "web.team.gonganxitong.user", args: [value.user_uid]}) } @@ -44,22 +44,20 @@ Volcanos(chat.ONIMPORT, { }) }, systemList: function(can, msg) { - can.runAction(can.request({}, {}), "systemList", [msg.Append("user_uid")||msg.Option("user_uid")], function(msg) { - can.onimport.myView(can, msg, function(value) { value.avatar = value.avatar||"usr/icons/avatar.jpg" + can.runAction(can.request({}, {}), "systemList", [msg.Append(USER_UID)||msg.Option(USER_UID)], function(msg) { + can.onimport.myView(can, msg, function(value) { value.avatar = value.avatar||html.AVATAR_JPG return [ - {view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type"), can.onimport.titleAction(can, value)]}, + {view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value)]}, {view: html.STATUS, list: [value.info]}, ] }, function(event, value) { - can.Option("auth_uid", value.uid), can.Update(event) + can.Option(AUTH_UID, value.uid), can.Update(event) }, can.ui.list) }) }, }) Volcanos(chat.ONACTION, { - enter: function(event, can) { var msg = can.request(event) - can.onimport.myPlugin(can, {space: msg.Option("service_nodename"), index: msg.Option("service_index"), args: [msg.Option("place_uid")]}) - }, + enter: function(event, can) { var msg = can.request(event); can.onimport.myPlugin(can, {space: msg.Option("service_nodename"), index: msg.Option("service_index"), args: [msg.Option("place_uid")]}) }, updateBackground: function(event, can) { can.user.upload(can.request(event, {field: aaa.BACKGROUND}), can) }, updateAvatar: function(event, can) { can.user.upload(can.request(event, {field: aaa.AVATAR}), can) }, }) \ No newline at end of file diff --git a/src/yuehaoxitong/call.go b/src/yuehaoxitong/call.go index 756eeab..b455cf6 100644 --- a/src/yuehaoxitong/call.go +++ b/src/yuehaoxitong/call.go @@ -10,18 +10,19 @@ import ( type call struct { Schedule - list string `name:"list queue_uid uid reception_uid auto" role:"leader,worker"` + reception reception + list string `name:"list queue_uid reception_uid uid auto" role:"leader,worker"` } func (s call) Call(m *ice.Message, arg ...string) { m.Cmdy(s.Schedule, m.ActionKey(), arg) } func (s call) List(m *ice.Message, arg ...string) { if len(arg) == 1 { - s.SelectByStatus(m.Options(mdb.ORDER, model.TAKE_TIME), arg[0], kit.Format(ScheduleTake)) - kit.If(m.Length() == 0, func() { m.Echo(m.Trans("wait take", "等待取号")) }, func() { m.Action(s.Call) }) + m.Cmdy(s.reception, arg).RenameAppend(model.UID, model.RECEPTION_UID).PushAction().Action() } else if len(arg) == 2 { - s.Schedule.List(m, arg[0], arg[1]).Action(s.Call) + s.SelectByStatus(m.Options(mdb.ORDER, model.TAKE_TIME), arg[0], kit.Format(ScheduleTake), s.Key(s.Schedule, model.RECEPTION_UID), arg[1]) + kit.If(m.Length() == 0, func() { m.Echo(m.Trans("wait take", "等待取号")) }, func() { m.Action(s.Call) }) } else if len(arg) == 3 { - s.Select(m, model.QUEUE_UID, arg[0], model.RECEPTION_UID, arg[2], model.STATUS, kit.Format(ScheduleTake)).Action(s.Call) + s.Schedule.List(m, arg[0], arg[2]).Action(s.Call) } } func (s call) Expire(m *ice.Message, arg ...string) { m.Cmdy(s.Schedule, m.ActionKey(), arg) } diff --git a/src/yuehaoxitong/plan.css b/src/yuehaoxitong/plan.css index 6164621..e84337d 100644 --- a/src/yuehaoxitong/plan.css +++ b/src/yuehaoxitong/plan.css @@ -1,8 +1,8 @@ $output { display:flex; } $output>div.reception { max-width:50%; } -$output>div.reception div.item { padding:10px; } +$output>div.reception div.item { padding:var(--item-padding); } $output>div.reception div.item.select { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } $output>div.volume { flex-grow:1; } -$output>div.volume div.item { background-color:var(--output-bg-color); padding:10px; margin-bottom:5px; position:relative; } +$output>div.volume div.item { background-color:var(--output-bg-color); padding:var(--item-padding); margin-bottom:5px; position:relative; } $output>div.volume div.item div.status { display:flex; align-items:center; } -$output>div.volume div.item div.action { position:absolute; right:10px; top:13px; } \ No newline at end of file +$output>div.volume div.item div.action { position:absolute; right:var(--item-padding); top:13px; } \ No newline at end of file diff --git a/src/yuehaoxitong/plan.go b/src/yuehaoxitong/plan.go index 9c4781e..e851895 100644 --- a/src/yuehaoxitong/plan.go +++ b/src/yuehaoxitong/plan.go @@ -8,19 +8,18 @@ import ( type plan struct { Schedule - volume Volume - reception reception - volumeList string `name:"volumeList" role:"void"` - receptionList string `name:"receptionList" role:"void"` + volume Volume + reception reception + volumeList string `name:"volumeList" role:"void"` } -func (s plan) Create(m *ice.Message, arg ...string) { +func (s plan) Create(m *ice.Message) { s.Schedule.Create(m, m.OptionSimple(model.QUEUE_UID, model.RECEPTION_UID, model.VOLUME_UID, model.USER_UID)...) } -func (s plan) Cancel(m *ice.Message, arg ...string) { +func (s plan) Cancel(m *ice.Message) { s.Schedule.Cancel(m.Options(model.UID, m.Option(model.SCHEDULE_UID))) } -func (s plan) VolumeList(m *ice.Message, arg ...string) { +func (s plan) VolumeList(m *ice.Message) { s.Tables(m, "LEFT JOIN schedules ON schedules.volume_uid = volumes.uid AND status = 0") s.Fields(m, s.Key(s.volume, model.UID), model.BEGIN_TIME, model.END_TIME, model.STATUS, s.AS(s.Key(s.Schedule, model.UID), model.SCHEDULE_UID)).Orders(m, model.BEGIN_TIME) m.Cmdy(s.volume, s.Select, "volumes.queue_uid = ? AND volumes.reception_uid = ? AND end_time > ?", m.Option(model.QUEUE_UID), m.Option(model.RECEPTION_UID), m.Time()) diff --git a/src/yuehaoxitong/plan.js b/src/yuehaoxitong/plan.js index 5eea89d..74fe231 100644 --- a/src/yuehaoxitong/plan.js +++ b/src/yuehaoxitong/plan.js @@ -7,16 +7,19 @@ Volcanos(chat.ONIMPORT, { return {view: [html.ITEM, "", value.name], onclick: function(event) { can.onmotion.select(can, can.ui.reception, html.DIV_ITEM, event.target) if (can.onmotion.cache(can, function() { return value.name }, can.ui.volume)) { return } can.onimport.volume(can, value) }} - })); var list = can.page.Select(can, can.ui.reception, html.DIV_ITEM); list[0].click() + })); var list = can.page.Select(can, can.ui.reception, html.DIV_ITEM); list[0] && list[0].click() + }, + volume: function(can, reception) { + can.runAction(can.request({}, {reception_uid: reception.uid}), "volumeList", [], function(msg) { + can.page.Append(can, can.ui.volume, msg.Table(function(value) { value.reception_uid = reception.uid, value.volume_uid = value.uid + return {view: html.ITEM, list: [ + {view: html.STATUS, list: [{text: "开始时间: "+value.begin_time}]}, + {view: html.STATUS, list: [{text: "结束时间: "+value.end_time}]}, + can.onimport.titleAction(can, value, "create", "cancel"), + ]} + })) + }) }, - volume: function(can, reception) { can.runAction(can.request({}, {reception_uid: reception.uid}), "volumeList", [], function(msg) { - can.page.Append(can, can.ui.volume, msg.Table(function(value) { value.reception_uid = reception.uid, value.volume_uid = value.uid - return {view: html.ITEM, list: [can.onimport.titleAction(can, value, "create", "cancel"), - {view: html.STATUS, list: [{text: "开始时间: "+value.begin_time}]}, - {view: html.STATUS, list: [{text: "结束时间: "+value.end_time}]}, - ]} - })) - }) }, }) Volcanos(chat.ONACTION, { create: function(event, can, button) { can.runAction(event, button) }, diff --git a/src/yuehaoxitong/portal.go b/src/yuehaoxitong/portal.go index 27f35e7..1b89325 100644 --- a/src/yuehaoxitong/portal.go +++ b/src/yuehaoxitong/portal.go @@ -16,12 +16,12 @@ type Portal struct { func (s Portal) AfterPlaceAuth(m *ice.Message, arg ...string) { defer s.DashboardCreate(m, "")() - s.DashboardInsertOrder(m, "1", "订单总量") - s.DashboardInsertOrder(m, "2", "订单已预约", model.STATUS, SchedulePlan) - s.DashboardInsertOrder(m, "3", "订单已取号", model.STATUS, ScheduleTake) - s.DashboardInsertOrder(m, "4", "订单已完成", model.STATUS, ScheduleFinish) + s.DashboardInsertOrder(m, 1, "订单总量") + s.DashboardInsertOrder(m, 2, "订单已预约", model.STATUS, SchedulePlan) + s.DashboardInsertOrder(m, 3, "订单已取号", model.STATUS, ScheduleTake) + s.DashboardInsertOrder(m, 4, "订单已完成", model.STATUS, ScheduleFinish) } -func (s Portal) DashboardInsertOrder(m *ice.Message, order, title string, arg ...ice.Any) { - s.DashboardInsert(m, order, title, "order", Schedule{}, "", kit.TransArgs(kit.Simple(model.QUEUE_UID, m.Option(model.QUEUE_UID), arg))) +func (s Portal) DashboardInsertOrder(m *ice.Message, order int, title string, arg ...ice.Any) { + s.DashboardInsert(m, order, title, "order", Schedule{}, "", kit.TransArgs(kit.Simple(m.OptionSimple(model.QUEUE_UID), arg))...) } func init() { gonganxitong.PortalCmd(Portal{Portal: guanlixitong.NewPortal(userQueue{}, queue{})}) } diff --git a/src/yuehaoxitong/portal.json b/src/yuehaoxitong/portal.json index bb9010a..239a925 100644 --- a/src/yuehaoxitong/portal.json +++ b/src/yuehaoxitong/portal.json @@ -1,15 +1,15 @@ { "portal": "约号系统", - "reception": "服务场所", "volume": "服务计划", "open": "放号", "plan": "约号", "take": "取号", "call": "叫号", - "schedule": "订单数据", "history": "我的订单", + "reception": "服务场所", "open": "放号", "plan": "约号", "take": "取号", "call": "叫号", + "volume": "服务计划", "schedule": "订单数据", "history": "我的订单", "expire": "过号", "finish": "完成", "icons": { "reception": "https://img.icons8.com/officel/80/meeting-room.png", - "volume": "https://img.icons8.com/officel/80/combo-chart.png", "open": "https://img.icons8.com/officel/80/open-sign.png", "plan": "https://img.icons8.com/officel/80/calendar-plus.png", "take": "https://img.icons8.com/officel/80/receipt.png", "call": "https://img.icons8.com/officel/80/calling.png", + "volume": "https://img.icons8.com/officel/80/combo-chart.png", "schedule": "https://img.icons8.com/officel/80/List-of-parts.png", "history": "https://img.icons8.com/officel/80/order-history.png" }, @@ -28,6 +28,7 @@ "queue_type": "场景类型", "reception_uid": "服务场所", "reception_name": "服务场所", + "reception_info": "服务信息", "volume_uid": "服务计划", "volume_total": "放号总量", "schedule_status": "订单状态", @@ -39,7 +40,9 @@ "expire_time": "过期时间", "finish_time": "完成时间", "total": "放号总量", - "count": "约号数量" + "count": "约号数量", + "expire": "过号数量", + "finish": "完成数量" }, "value": { "user_queue_role": { diff --git a/src/yuehaoxitong/schedule.go b/src/yuehaoxitong/schedule.go index 684bb4a..68d421f 100644 --- a/src/yuehaoxitong/schedule.go +++ b/src/yuehaoxitong/schedule.go @@ -39,11 +39,7 @@ func (s Schedule) Create(m *ice.Message, arg ...string) { func (s Schedule) Call(m *ice.Message, arg ...string) { user_uid := m.Option(model.USER_UID) s.Orders(m, model.TAKE_TIME).Limit(m, 1) - if m.Option(model.RECEPTION_UID) != "" { - s.SelectByStatus(m, kit.Simple(m.Option(model.QUEUE_UID), kit.Format(ScheduleTake), m.OptionSimple(model.RECEPTION_UID))...).PushAction(s.Expire, s.Finish) - } else { - s.SelectByStatus(m, m.Option(model.QUEUE_UID), kit.Format(ScheduleTake)).PushAction(s.Expire, s.Finish) - } + s.SelectByStatus(m, kit.Simple(m.Option(model.QUEUE_UID), kit.Format(ScheduleTake), s.Key(s, model.RECEPTION_UID), m.Option(model.RECEPTION_UID))...).PushAction(s.Expire, s.Finish) if m.Length() == 0 { m.ProcessRewrite(model.UID, "") return @@ -107,9 +103,7 @@ func (s Schedule) List(m *ice.Message, arg ...string) *ice.Message { } if len(arg) == 2 { status := ScheduleStatus(kit.Int(m.Append(model.SCHEDULE_STATUS))) - if status == ScheduleExpire || status == ScheduleFinish { - s.DoneMessage(m) - } + kit.If(status == ScheduleExpire || status == ScheduleFinish, func() { s.DoneMessage(m) }) } s.SelectJoin(m, s.reception) s.SelectJoinUser(m) @@ -136,6 +130,7 @@ func (s Schedule) Cancel(m *ice.Message, arg ...string) { s.addCount(m, model.COUNT, "-1") s.changeStatus(m, SchedulePlan, ScheduleCancel) }) + s.DashboardUpdate(m) m.ProcessRefresh() } func (s Schedule) Take(m *ice.Message, arg ...string) { @@ -157,6 +152,7 @@ func (s Schedule) Expire(m *ice.Message, arg ...string) { }) s.Select(m.FieldsSetDetail(), args...) s.sendTemplate(m, "已过号") + s.DashboardUpdate(m) } func (s Schedule) Finish(m *ice.Message, arg ...string) { args := kit.Simple(model.CALL_UID, m.Option(model.USER_UID), m.OptionSimple(model.UID)) diff --git a/src/yuehaoxitong/volume.go b/src/yuehaoxitong/volume.go index 2585863..4060d4e 100644 --- a/src/yuehaoxitong/volume.go +++ b/src/yuehaoxitong/volume.go @@ -18,31 +18,21 @@ func (s Volume) Create(m *ice.Message, arg ...string) { arg = kit.TransArgKeys(arg, model.VOLUME_TOTAL, model.TOTAL) arg = kit.ArgDef(arg, model.BEGIN_TIME, m.Time(), model.END_TIME, m.Time("24h")) s.Insert(m.Options(arg), kit.Simple(arg, m.OptionSimple(model.QUEUE_UID))...) - s.RecordEvent(m, "✅ "+m.Trans("create volume", "创建服务计划")+" "+s.joinKV(m, model.VOLUME_TOTAL, model.BEGIN_TIME, model.END_TIME)) + s.RecordEvent(m, "✅ "+m.Trans("create volume", "创建服务计划")+" "+kit.JoinKV(": ", "\n", m.OptionSimple(model.VOLUME_TOTAL, model.BEGIN_TIME, model.END_TIME)...)) } func (s Volume) List(m *ice.Message, arg ...string) *ice.Message { - if len(arg) == 0 { - if m.Option(model.RECEPTION_UID) != "" { - s.Fields(m, model.UID, model.BEGIN_TIME, model.END_TIME, model.TOTAL, model.COUNT) - s.Select(m, m.OptionSimple(model.QUEUE_UID, model.RECEPTION_UID)...) - } - return m - } else if len(arg) == 1 { - s.Tables(m, s.reception).FieldsWithCreatedAT(m, s, - model.RECEPTION_NAME, model.BEGIN_TIME, model.END_TIME, - model.TOTAL, model.COUNT, model.EXPIRE, model.FINISH, model.USER_UID, - ) + s.Tables(m, s.reception).FieldsWithCreatedAT(m, s, + model.RECEPTION_NAME, model.BEGIN_TIME, model.END_TIME, + model.TOTAL, model.COUNT, model.EXPIRE, model.FINISH, model.USER_UID, + ) + if len(arg) == 1 { s.Select(m, s.Key(s, model.QUEUE_UID), arg[0]) - s.SelectJoinUser(m) - m.Display("") + } else if len(arg) == 2 { + s.SelectDetail(m, s.Key(s, model.QUEUE_UID), arg[0], s.Key(s, model.UID), arg[1]) } + s.SelectJoinUser(m) + m.Display("") return m } func init() { ice.TeamCtxCmd(Volume{}) } - -func (s Volume) joinKV(m *ice.Message, arg ...string) string { - list := []string{} - kit.For(arg, func(k string) { list = append(list, k, m.Option(k)) }) - return kit.JoinKV(": ", "\n", list...) -}