From c1b5b76412612170cb3c7c57d81b2bd7ee38212b Mon Sep 17 00:00:00 2001 From: shy Date: Tue, 1 Oct 2024 00:12:44 +0800 Subject: [PATCH] add some --- src/gonganxitong/common.go | 15 ++++++--- src/gonganxitong/credit.go | 13 +++----- src/gonganxitong/model/model.go | 2 ++ src/gonganxitong/portal.css | 12 +++++-- src/gonganxitong/portal.go | 14 +++++--- src/gonganxitong/portal.js | 25 +++++++++++--- src/gonganxitong/portal.json | 3 +- src/gonganxitong/service.js | 13 +++++--- src/gonganxitong/street.go | 9 ++--- src/gonganxitong/user.go | 24 ++++++-------- src/renzhengshouquan/auth.go | 18 ++-------- src/renzhengshouquan/model/model.go | 1 + src/renzhengshouquan/portal.go | 6 ++-- src/renzhengshouquan/portal.json | 6 +++- src/renzhengshouquan/profile.go | 51 +++++++++++++++++++++-------- src/renzhengshouquan/profile.js | 51 ++++++++++++++++++++--------- 16 files changed, 170 insertions(+), 93 deletions(-) diff --git a/src/gonganxitong/common.go b/src/gonganxitong/common.go index 9d3bc09..39520ce 100644 --- a/src/gonganxitong/common.go +++ b/src/gonganxitong/common.go @@ -42,6 +42,8 @@ type Table struct { inputs string `name:"inputs" role:"void"` list string `name:"list place_uid uid auto" role:"void"` marketInsert string `name:"marketInsert domain_uid* title* content" role:"leader"` + memberList string `name:"memberList" role:"void"` + noticeList string `name:"noticeList" role:"void"` } func (s Table) LoadTrans(m *ice.Message, arg ...string) { @@ -177,7 +179,9 @@ func (s Table) SelectJoinAuth(m *ice.Message, arg ...string) *ice.Message { if kit.IndexOf(m.Appendv(model.AUTH_TYPE), model.AUTH_TYPE) > -1 { return m } - kit.If(len(arg) == 0, func() { arg = append(arg, model.NAME, model.AUTH_TYPE, model.AUTH_STATUS, model.DASHBOARD_UID) }) + kit.If(len(arg) == 0, func() { + arg = append(arg, model.NAME, model.AUTH_TYPE, model.AUTH_STATUS, model.AVATAR, model.DASHBOARD_UID) + }) defer s.SaveBack(m, ice.MSG_USERPOD, ice.MSG_USERROLE)() return s.SelectJoin(m, s.findSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), arg...) } @@ -188,8 +192,7 @@ func (s Table) SelectJoinRecent(m *ice.Message, PLACE_UID string, arg ...string) kit.If(len(arg) == 0, func() { arg = append(arg, model.CITY_NAME, model.STREET_NAME, model.PLACE_NAME) }) list := []string{} m.Table(func(value ice.Maps) { kit.If(value[PLACE_UID], func(v string) { list = kit.AddUniq(list, v) }) }) - msg := m.Spawn() - recents := msg.CmdMap(recent{}, s.SelectList, model.PLACE_UID, list, model.PLACE_UID) + recents := m.CmdMap(recent{}, s.SelectList, model.PLACE_UID, list, model.PLACE_UID) m.Table(func(value ice.Maps) { recent := recents[value[PLACE_UID]] kit.For(arg, func(k string) { m.Push(k, recent[k]) }) @@ -197,7 +200,7 @@ func (s Table) SelectJoinRecent(m *ice.Message, PLACE_UID string, arg ...string) return m } func (s Table) SelectJoinService(m *ice.Message, arg ...string) *ice.Message { - kit.If(len(arg) == 0, func() { arg = append(arg, model.NODENAME, model.INDEX) }) + kit.If(len(arg) == 0, func() { arg = append(arg, model.NODENAME, model.INDEX, model.NAME, model.ICON) }) return s.SelectJoin(m, service{}, arg...) } func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message { @@ -319,7 +322,9 @@ func (s Table) CityList(m *ice.Message, arg ...string) *ice.Message { func (s Table) AuthCreate(m *ice.Message, authType int, fromUID string, arg ...string) { s.AutoCmdy(m, api.RENZHENGSHOUQUAN_PORTAL, Portal{}.PlaceCreate, model.AUTH_NAME, m.Option(model.NAME), model.AUTH_INFO, m.Option(model.INFO), - model.AUTH_TYPE, authType, model.FROM_UID, kit.Select(ice.AUTO, fromUID)) + model.AUTH_TYPE, authType, model.FROM_UID, kit.Select(ice.AUTO, fromUID), + model.SERVICE_UID, m.Option(model.SERVICE_UID), + ) s.Update(m, kit.Dict(m.OptionSimple(model.AUTH_UID)), arg...) } func (s Table) DashboardUpdate(m *ice.Message, arg ...string) { diff --git a/src/gonganxitong/credit.go b/src/gonganxitong/credit.go index ceffd2e..8746041 100644 --- a/src/gonganxitong/credit.go +++ b/src/gonganxitong/credit.go @@ -27,13 +27,6 @@ func (s credit) List(m *ice.Message, arg ...string) { } m.SetResult().EchoInfoButton("请申请服务认证", s.AuthService) - /* - if msg := m.Cmd(s.user, s.Select, model.UID, m.Option(model.USER_UID)); msg.Append(model.AUTH_UID) == "" { - m.SetResult().EchoInfoButton("请申请个人认证", s.AuthPersonal) - return - } - */ - msg = m.Cmd(s.Street, s.Select, model.UID, msg.Append(s.Keys(s.Street, model.UID))) if msg.Append(model.AUTH_UID) != "" { return @@ -42,6 +35,9 @@ func (s credit) List(m *ice.Message, arg ...string) { msg = m.Cmd(s.city, s.Select, model.UID, msg.Append(model.CITY_UID)) if msg.Append(model.AUTH_UID) != "" { + if msg := m.Cmd(s.user, s.Select, model.UID, m.Option(model.USER_UID)); msg.Append(model.AUTH_UID) == "" { + m.SetResult().EchoInfoButton("请申请个人认证", s.AuthPersonal) + } return } m.SetResult().EchoInfoButton("请申请城市认证", s.AuthCity) @@ -50,7 +46,8 @@ func (s credit) AuthService(m *ice.Message, arg ...string) { m.Cmdy(s.PrefixPortal(m), Portal{}.PlaceAuth, kit.Dict(s.placeInfo(m).AppendSimple())).ProcessRefresh() } func (s credit) AuthPersonal(m *ice.Message, arg ...string) { - m.Cmdy(s.user, s.AuthCreate, kit.Dict(model.AUTH_UID, s.cityInfo(m).Append(model.AUTH_UID))) + msg := m.Cmd(s.city, s.Select, model.NAME, m.Option(model.CITY_NAME)) + m.Cmdy(s.user, s.AuthCreate, kit.Dict(msg.AppendSimple(model.AUTH_UID))) } func (s credit) AuthCompany(m *ice.Message, arg ...string) { m.Cmdy(s.Street, s.AuthCreate, kit.Dict(s.streetInfo(m).AppendSimple(model.NAME, model.INFO, model.UID, model.CITY_UID))) diff --git a/src/gonganxitong/model/model.go b/src/gonganxitong/model/model.go index 7d21259..5cccc97 100644 --- a/src/gonganxitong/model/model.go +++ b/src/gonganxitong/model/model.go @@ -46,6 +46,7 @@ const ( AUTH_INFO = "auth_info" AUTH_TYPE = "auth_type" AUTH_STATUS = "auth_status" + AUTH_AVATAR = "auth_avatar" DASHBOARD_UID = "dashboard_uid" DASHBOARD_NAME = "dashboard_name" DASHBOARD_TYPE = "dashboard_type" @@ -92,6 +93,7 @@ const ( NODETYPE = "nodetype" SPACE = "space" INDEX = "index" + ICON = "icon" ARGS = "args" INIT = "init" QUERY = "query" diff --git a/src/gonganxitong/portal.css b/src/gonganxitong/portal.css index aafb0f7..f0d4929 100644 --- a/src/gonganxitong/portal.css +++ b/src/gonganxitong/portal.css @@ -5,13 +5,16 @@ body.mobile div.upload.float div.action { display:flex; } body.mobile div.upload.float div.action div.item.upload { flex-grow:1; } body.mobile div.upload.float div.action div.item.upload input { width:100%; } $action { background-color:transparent; position:absolute; top:0; width:100%; z-index:1; } -$action div.item.button { margin-right:5px; padding:0; height:48px; align-items:center; } +$action div.item.button { margin-left:10px; margin-right:0; padding:0; height:48px; align-items:center; } $action div.item.button input { border:none; background-color:var(--plugin-bg-color); color:var(--notice-bg-color); min-width:60px; display:unset; } $action div.item.button input:hover { background-color:var(--hover-bg-color); } $action div.item.button span { display:none; } $action div.item.button i { display:none; } +$output div.title div.action div.item.notice input { + background-color:var(--notice-bg-color); color:var(--notice-fg-color); +} $output { background-color:var(--plugin-bg-color); } -$output div.head { margin-bottom:20px; } +// $output div.head { margin-bottom:20px; } $output div.head>img { height:200px; width:100%; object-fit:cover; } $output div.head div.item.card img { border-radius:25px; } $output div.head>div.item.card div.title div.item.button i { display:none; } @@ -20,8 +23,11 @@ $output>div.footer { border-radius:100px; background-color:var(--notice-bg-color $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 { padding:0 10px; max-height:420px; } +$output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:yellow; margin-right:10px; } $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 div.item.filter input:focus { width:200px; transition:width 0.5s; } +$output>div>div.list>div.title div.action div.item.filter input { transition:width 0.8s; } $output>div>div.list>div.title div.action { overflow:hidden; } $output>div>div.list>div.title div.action div.item { margin-right:5px; } $output>div>div.list>div.title div.action div.item.button.icons input { display:none; } @@ -72,6 +78,7 @@ $output span.role.danger { border:var(--box-danger); color:var(--danger-bg-color $output span.level.danger { border:var(--box-danger); color:var(--danger-bg-color); } $output span.status.danger { border:var(--box-danger); color:var(--danger-bg-color); } $output>fieldset.story { margin-top:48px; } +$output>fieldset.story.web.team.renzhengshouquan.profile { margin-top:0; } $output fieldset.story { box-shadow:none; } $output fieldset.story>legend { display:none; } $output fieldset.story>form.option { display:none; } @@ -81,6 +88,7 @@ $output fieldset.story>div.output { background-color:var(--plugin-bg-color); } $output fieldset.story>div.output table.content td { box-shadow:none; } $output fieldset.story>div.output table.content td img { max-width:100%; } $output fieldset.story>div.output table.content tr.user_avatar td img { max-height:128px; max-width:128px; } +$output fieldset.story>div.output table.content tr.auth_avatar td img { max-height:128px; max-width:128px; } $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.story>div.output>div.code>input[type=button] { diff --git a/src/gonganxitong/portal.go b/src/gonganxitong/portal.go index 0292339..ee5c34c 100644 --- a/src/gonganxitong/portal.go +++ b/src/gonganxitong/portal.go @@ -30,7 +30,6 @@ type Portal struct { 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"` - placeAuth string `name:"placeAuth" role:"void"` } func (s Portal) Init(m *ice.Message, arg ...string) { @@ -69,14 +68,14 @@ func (s Portal) Inputs(m *ice.Message, arg ...string) { } func (s Portal) Command(m *ice.Message, arg ...string) { if cmdPortal[arg[0]] != "" && cmdPortal[arg[0]] != m.PrefixKey() { - s.AutoCmdy(m, cmdPortal[arg[0]], m.ActionKey(), arg) + 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]], m.ActionKey(), arg) + s.AutoCmdy(m, cmdPortal[arg[0]], ctx.ACTION, m.ActionKey(), arg) return } s.DisplayBase(m, "common.js") @@ -144,7 +143,7 @@ func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message { 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.AUTH_STATUS, model.DASHBOARD_UID, + model.CITY_NAME, s.Keys(s.Street, model.NAME), model.AUTH_STATUS, model.AUTH_AVATAR, 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))) @@ -194,6 +193,9 @@ func (s Portal) PlaceAuth(m *ice.Message, arg ...string) { } 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), @@ -280,6 +282,10 @@ func (s Portal) StorageCreate(m *ice.Message, name string, arg ...string) { 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()}) } diff --git a/src/gonganxitong/portal.js b/src/gonganxitong/portal.js index 872aa54..3801bd3 100644 --- a/src/gonganxitong/portal.js +++ b/src/gonganxitong/portal.js @@ -16,7 +16,7 @@ Volcanos(chat.ONIMPORT, { myTrans: function(can, value) { var PLACE_UID = can.Conf("_place_uid"), PLACE_NAME = can.Conf("_place_name"), PLACE_TYPE = can.Conf("_place_type") var USER_PLACE_ROLE = can.Conf("_user_place_role"), STREET_NAME = can.Conf("_street_name") - value.icons = value.icons||can.Conf(can.core.Keys("_trans.value", PLACE_TYPE, mdb.ICONS, value[PLACE_TYPE]||"what")) + value.icons = value.icons||value.avatar||value.auth_avatar||can.Conf(can.core.Keys("_trans.value", PLACE_TYPE, mdb.ICONS, value[PLACE_TYPE]||"what")) value._uid = value[PLACE_UID], value._name = value[PLACE_NAME], value._street = value[STREET_NAME] value._type = value[PLACE_TYPE], value.__type = can.user.transValue(can, value, PLACE_TYPE) value._role = value[USER_PLACE_ROLE], value.__role = can.user.transValue(can, value, USER_PLACE_ROLE) @@ -37,13 +37,15 @@ Volcanos(chat.ONIMPORT, { }) }) } can.ui = can.page.Append(can, can._output, [{view: html.HEADER}, - {view: html.OUTPUT, list: ["myplace.list", "myinit.list", "mycount.list", "myindex.list", "myallow.list"]}, + {view: html.OUTPUT, list: ["myplace.list", "myinit.list", "mycount.list", "mynotice.list", "myindex.list", "myallow.list"]}, {view: html.ACTION, list: ["myorder.list"]}, ]) can.onmotion.hidden(can, can.ui.myinit) can.onmotion.hidden(can, can.ui.mycount) + can.onmotion.hidden(can, can.ui.mynotice) can.onmotion.hidden(can, can.ui.myallow) function showIndex(msg) { if (msg.Length() == 0) { return } + can.onimport.myNotice(can, msg, can.ui.mynotice) can.onimport.myCount(can, msg, can.ui.mycount) can.onimport.myIndex(can, msg, can.ui.myindex), can.onexport.index(can, can.sup.current) can.onimport.myAllow(can, msg, can.ui.myallow) @@ -53,7 +55,7 @@ Volcanos(chat.ONIMPORT, { msg.Length() > 0? can.run({}, [uid], function(msg) { showIndex(can._index_msg = msg) }): can.run({}, [uid], function(msg) { can.onimport.myOrder(can, can._index_msg = msg, can.ui.myorder) }) } else { var _msg = can.request({}); if (msg.Option(PLACE_NAME)) { - _msg.Push(kit.Dict(UID, "", msg.OptionSimple(PLACE_UID, PLACE_NAME, PLACE_TYPE, USER_PLACE_ROLE, STREET_NAME, CITY_NAME, "auth_status", "dashboard_uid"))) + _msg.Push(kit.Dict(UID, "", msg.OptionSimple(PLACE_UID, PLACE_NAME, PLACE_TYPE, USER_PLACE_ROLE, STREET_NAME, CITY_NAME, "auth_status", "auth_avatar", "dashboard_uid"))) } can.onimport.myPlace(can, _msg, can.ui.myplace) if (_msg.Length() == 0) { can.onimport.myOrder(can, msg, can.ui.myorder) } else { showIndex(can._index_msg = msg) } } @@ -61,6 +63,7 @@ Volcanos(chat.ONIMPORT, { myPlace: function(can, msg, target) { var place_uid can.page.Append(can, target, [{view: html.TITLE, list: [ {text: can.user.trans(can, "My "+can.base.capital(can.Conf("_place_name").replace("_name", "")), null, html.INPUT)}, + msg.Length() > 5 && {view: html.ACTION, _init: function(target) { can.onmotion.delay(can, function() { can.onappend.filter(can, target, can.ui._target) }) }}, msg.Option(ice.MSG_ACTION) && {view: html.ACTION, _init: function(target) { can.onappend._action(can, msg.Option(ice.MSG_ACTION), target) }} ]}]), can.ui._target = can.page.Append(can, target||can._output, [html.OUTPUT])._target msg.Length() > 0 && can.page.Append(can, can.ui._target, msg.Table(function(value) { can.onimport.myTrans(can, value) @@ -80,6 +83,16 @@ Volcanos(chat.ONIMPORT, { can.onmotion.toggle(can, target, value._count = true) }, target) }, + myNotice: function(can, value, target) { if (value._notice_hide) { return can.onmotion.toggle(can, target, false) } + if (can.onmotion.cache(can, function() { return value._uid }, target)) { return can.onmotion.toggle(can, target, true) } + target.onclick = function() { + can.onimport.myStory(can, {index: can.ConfIndex().split(".").slice(0, -1).concat(["notice"]).join("."), args: [value._uid]}) + } + can.runAction({}, "noticeList", [value._uid], function(msg) { + if (msg.Length() == 0) { value._notice_hide = true; return can.onmotion.hidden(can, target) } can.onmotion.toggle(can, target, true) + can.page.Append(can, target, [{text: "通知公告"}, {text: can.base.TimeTrim(msg.Append("created_at"))}, {text: " "}, {text: msg.Append("title")}]) + }) + }, 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.onimport.myTitle(can, "My Init", "我的初始化", target) msg.Table(function(val) { if (parseInt(val.init) == parseInt(value.init)+1) { value._init = true, val.args = [value._uid] @@ -148,6 +161,8 @@ Volcanos(chat.ONACTION, { sub.Option("street_name", "航城街道") sub.Option("school_name", "深圳中学") sub.Option("company_name", "云境互联") + sub.Option("class_name", "初一二班") + sub.Option("grade", "2024级") // sub.Option("company_name", "老邵木器加工") sub.Option("store_name", "老邵木器加工") sub.Option("place_name", "易尚三维") @@ -165,7 +180,9 @@ Volcanos(chat.ONEXPORT, { can.onexport.place(can, value._uid), can.onexport.hash(can, value._uid), can.onexport.title(can, value._name, can.ConfHelp()) can.user.agent.init(can, value.city_name+" "+value._street) 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.mycount && can.onimport.myCount(can, value, can.ui.mycount), can.ui.myinit && can.onimport.myInit(can, can._index_msg, value, can.ui.myinit) + can.ui.myinit && can.onimport.myInit(can, can._index_msg, value, can.ui.myinit) + can.ui.mycount && can.onimport.myCount(can, value, can.ui.mycount) + can.ui.mynotice && can.onimport.myNotice(can, value, can.ui.mynotice) can.ui.myallow && can.onmotion.toggle(can, can.ui.myallow, value._role == "creator" || can.page.Select(can, can.ui.myallow, "div.item.index.role."+value._role).length > 0) can.onmotion.toggle(can, can.ui.myindex, !value.member_status || value.member_status == "normal") }, diff --git a/src/gonganxitong/portal.json b/src/gonganxitong/portal.json index 93dac47..95db6d9 100644 --- a/src/gonganxitong/portal.json +++ b/src/gonganxitong/portal.json @@ -4,7 +4,7 @@ "placeSearch": "搜索", "scanQRCode": "扫码", "qrcode": "场景码", "event": "事件流", "apply": "权限申请", "allow": "权限审批", "notice": "通知公告", "member": "场景成员", - "credit": "实名认证", + "credit": "用户名片", "setting": "配置", "email": "邮箱配置", "domain": "领域分类", "market": "人民广场", "message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持", "cancel": "取消", "submit": "提交", "finish": "完成", "reject": "驳回", "approve": "通过", @@ -64,6 +64,7 @@ "auth_info": "认证信息", "auth_type": "认证类型", "auth_status": "认证状态", + "auth_avatar": "认证头像", "qrcode_type": "链接类型", "apply_status": "申请状态", "allow_status": "审批状态", diff --git a/src/gonganxitong/service.js b/src/gonganxitong/service.js index 118aa9a..c8c9e3d 100644 --- a/src/gonganxitong/service.js +++ b/src/gonganxitong/service.js @@ -1,10 +1,13 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { - can.onimport.myView(can, msg, function(value) { return [ - {view: html.TITLE, list: [value.name]}, - {view: html.STATUS, list: [value.index]}, - {view: html.STATUS, list: [value.module, value.version]}, - ] }, function(event, value) { can.onaction._goback(event, function() { + can.onimport.myView(can, msg, function(value) { + value.icons = can.misc.Resource(can, value.icon.split("?")[0], value.space) + return [ + {view: html.TITLE, list: [value.name]}, + {view: html.STATUS, list: [value.index]}, + {view: html.STATUS, list: [value.module, value.version]}, + ] + }, function(event, value) { can.onaction._goback(event, function() { can.onimport.myPlugin(can, {space: value.space, index: value.index}) }) }) }, diff --git a/src/gonganxitong/street.go b/src/gonganxitong/street.go index 99e2f88..b434a03 100644 --- a/src/gonganxitong/street.go +++ b/src/gonganxitong/street.go @@ -10,9 +10,9 @@ import ( type street struct { Table city city - modify string `name:"modify street_info" role:"void"` + modify string `name:"modify info" role:"tech"` list string `name:"list city_name street_name auto" role:"void"` - authCreate string `name:"authCreate city_name* company_name* street_name* street_info" role:"void"` + authCreate string `name:"authCreate" role:"tech"` } func (s street) FindOrCreateByName(m *ice.Message, arg ...string) { @@ -24,7 +24,7 @@ func (s street) FindOrCreateByName(m *ice.Message, arg ...string) { } } func (s street) Modify(m *ice.Message, arg ...string) { - s.Update(m, kit.Dict(model.INFO, m.Option(model.STREET_INFO)), model.NAME, m.Option(model.STREET_NAME), model.CITY_UID, m.Option(model.CITY_UID)) + s.Update(m, kit.Dict(m.OptionSimple(model.INFO)), m.OptionSimple(model.UID)...) } func (s street) List(m *ice.Message, arg ...string) { if len(arg) == 0 { @@ -39,7 +39,8 @@ func (s street) List(m *ice.Message, arg ...string) { } } func (s street) AuthCreate(m *ice.Message, arg ...string) { - s.Table.AuthCreate(m, 6, s.Select(m.Spawn(), m.OptionSimple(model.CITY_UID)...).Append(model.AUTH_UID)) + msg := m.Cmd("web.team.gonganxitong.city", s.Select, model.UID, m.Option(model.CITY_UID)) + s.Table.AuthCreate(m, 6, msg.Append(model.AUTH_UID), m.OptionSimple(model.UID)...) } func init() { ice.TeamCtxCmd(street{}) } diff --git a/src/gonganxitong/user.go b/src/gonganxitong/user.go index 6e5479a..d4d94e9 100644 --- a/src/gonganxitong/user.go +++ b/src/gonganxitong/user.go @@ -13,13 +13,12 @@ import ( type user struct { Table - setting setting - template string `data:"4b-Z_r8dZmm1pHdd2h4A10VVYX4OIHvemlLjsHKBj2s"` - create string `name:"create open_id* avatar usernick"` - modify string `name:"modify user_name* user_info" role:"void"` - email string `name:"email email*"` - list string `name:"list uid auto" role:"void"` - authCreate string `name:"authCreate" role:"void"` + setting setting + template string `data:"4b-Z_r8dZmm1pHdd2h4A10VVYX4OIHvemlLjsHKBj2s"` + create string `name:"create open_id* avatar usernick"` + modify string `name:"modify info" role:"void"` + list string `name:"list uid auto" role:"void"` + email string `name:"email email*"` } func (s user) Create(m *ice.Message, arg ...string) { @@ -35,10 +34,7 @@ func (s user) Create(m *ice.Message, arg ...string) { } } func (s user) Modify(m *ice.Message, arg ...string) { - s.Update(m, kit.Dict(model.NAME, m.Option(model.USER_NAME), model.INFO, m.Option(model.USER_INFO))) -} -func (s user) Delete(m *ice.Message, arg ...string) { - m.Options(model.NAME, "profile", model.VALUE, "off").Cmd(s.setting, s.Update) + s.Update(m, kit.Dict(m.OptionSimple(model.INFO)), model.UID, m.Option(model.USER_UID)) } func (s user) List(m *ice.Message, arg ...string) { if len(arg) == 0 { @@ -58,9 +54,6 @@ func (s user) List(m *ice.Message, arg ...string) { } } } -func (s user) SetCookie(m *ice.Message, arg ...string) { - m.ProcessCookie(model.USER_UID, m.Option(model.UID)) -} func (s user) AuthCreate(m *ice.Message, arg ...string) { m.Options(s.Select(m.Spawn(), model.UID, m.Option(model.USER_UID)).AppendSimple(model.NAME, model.INFO)) s.Table.AuthCreate(m, 2, m.Option(model.AUTH_UID)) @@ -72,6 +65,9 @@ func (s user) SendTemplate(m *ice.Message, arg ...string) { // from uid url type "time11", time.Now().Format("2006年01月02日 15:04"), "thing18", kit.Select(kit.Select(m.Option(ice.MSG_USERNAME), m.Option(ice.MSG_USERNICK)), arg, 0), ) } +func (s user) SetCookie(m *ice.Message, arg ...string) { + m.ProcessCookie(model.USER_UID, m.Option(model.UID)) +} func (s user) Email(m *ice.Message, arg ...string) { s.Table.Update(m, kit.Dict(m.OptionSimple(model.EMAIL))) } diff --git a/src/renzhengshouquan/auth.go b/src/renzhengshouquan/auth.go index 61d38ed..eb966a9 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:"name,info,auth_type,auth_status,avatar,background,service_uid,place_uid,user_uid"` + fields string `data:"from_uid,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"` @@ -50,25 +50,13 @@ 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{}, s.Select, m.OptionSimple(model.USER_UID), model.UID, m.Option(model.AUTH_UID)) + msg := s.Select(m.Spawn(), 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) { + 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, 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.USER_UID)) - case AuthCompany: - m.Cmd("web.team.guanlixitong.company", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME)) - case AuthSchool: - m.Cmd("web.team.jiaowuxitong.school", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME)) - case AuthStreet: - m.Cmd("web.team.gonganxitong.street", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME)) - } } 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)) diff --git a/src/renzhengshouquan/model/model.go b/src/renzhengshouquan/model/model.go index d0710be..5fa4f39 100644 --- a/src/renzhengshouquan/model/model.go +++ b/src/renzhengshouquan/model/model.go @@ -20,6 +20,7 @@ const ( AUTH_INFO = "auth_info" AUTH_TYPE = "auth_type" AUTH_STATUS = "auth_status" + AUTH_AVATAR = "auth_avatar" CERT_UID = "cert_uid" COMPANY_UID = "company_uid" COMPANY_NAME = "company_name" diff --git a/src/renzhengshouquan/portal.go b/src/renzhengshouquan/portal.go index 2b2aafe..bb629d9 100644 --- a/src/renzhengshouquan/portal.go +++ b/src/renzhengshouquan/portal.go @@ -25,10 +25,11 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) { if m.WarnNotRight(!m.IsTech()) { return } - arg = append(arg, model.STATUS, kit.Format(AuthIssued)) - arg = append(arg, model.FROM_UID, aaa.ROOT) + arg = append(arg, model.FROM_UID, aaa.ROOT, model.STATUS, kit.Format(AuthIssued)) case AuthCity: arg = append(arg, model.FROM_UID, s.findAuthFrom(m, AuthRoot)) + case AuthPersonal: + arg = append(arg, model.USER_UID, m.Option(model.USER_UID)) } arg = kit.TransArgKeys(arg, model.AUTH_NAME, model.NAME, model.AUTH_INFO, model.INFO, model.AUTH_TYPE, model.TYPE) if m.Options(arg).Cmdy(s.Place, s.Insert, arg).IsErr() { @@ -40,6 +41,7 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) { func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message { s.Tables(m, s.Place).FieldsWithCreatedAT(m, s.UserPlace, model.AUTH_UID, model.AUTH_NAME, model.AUTH_INFO, model.AUTH_TYPE, model.USER_AUTH_ROLE, model.AUTH_STATUS, + model.AUTH_AVATAR, ) if len(arg) == 1 { m.Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0]) diff --git a/src/renzhengshouquan/portal.json b/src/renzhengshouquan/portal.json index 58f0e57..998c580 100644 --- a/src/renzhengshouquan/portal.json +++ b/src/renzhengshouquan/portal.json @@ -40,6 +40,8 @@ "personal": "个人", "service": "服务", "company": "公司", + "school": "学校", + "street": "街道", "style": { "root": "danger", "city": "danger", @@ -50,7 +52,9 @@ "city": "https://img.icons8.com/officel/80/city-buildings.png", "personal": "https://img.icons8.com/officel/80/identification-documents--v1.png", "service": "https://img.icons8.com/officel/80/meeting-room.png", - "company": "https://img.icons8.com/officel/80/organization.png" + "company": "https://img.icons8.com/officel/80/organization.png", + "school": "https://img.icons8.com/officel/80/school.png", + "street": "https://img.icons8.com/officel/80/building.png" } }, "auth_status": { diff --git a/src/renzhengshouquan/profile.go b/src/renzhengshouquan/profile.go index 2d1e8f2..c52dc0d 100644 --- a/src/renzhengshouquan/profile.go +++ b/src/renzhengshouquan/profile.go @@ -3,6 +3,7 @@ package renzhengshouquan 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/web" kit "shylinux.com/x/toolkits" @@ -12,12 +13,15 @@ import ( type profile struct { Auth - order string `data:"3"` - modify string `name:"modify info" role:"leader,worker"` - upload string `name:"upload" role:"leader,worker"` + order string `data:"3"` + modify string `name:"modify info" role:"tech"` + // modify string `name:"modify info" role:"leader,worker"` + upload string `name:"upload" role:"tech"` + // upload string `name:"upload" role:"leader,worker"` authList string `name:"authList" role:"void"` + fromList string `name:"fromList" role:"void"` memberList string `name:"memberList" role:"void"` - systemList string `name:"systemList" role:"void"` + serviceList string `name:"serviceList" role:"void"` authPersonal string `name:"authPersonal" role:"void"` } @@ -31,14 +35,35 @@ func (s profile) Upload(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]) - kit.If(s.IsVisitor(m), func() { m.Action() }, func() { m.Action(s.Modify) }) + kit.If(!m.IsTech() && s.IsVisitor(m), func() { m.Action() }, func() { m.Action(s.Modify) }) + } + switch AuthType(kit.Int(m.Append(model.AUTH_TYPE))) { + case AuthService: + kit.If(!m.IsTech() && s.IsVisitor(m), func() { m.Action() }, func() { m.Action(s.Modify, s.Enter) }) + s.SelectJoinRecent(m, model.PLACE_UID) + s.SelectJoinService(m) + case AuthPersonal: + s.SelectJoinUser(m) } s.RewriteAppend(m) - m.Display("") + m.EchoQRCode(s.Link(m, arg[0], m.PrefixKey())) + m.Display("").DisplayCSS("") +} +func (s profile) FromList(m *ice.Message, arg ...string) { + from := arg[0] + for { + msg := s.Select(m.Spawn(), model.UID, from) + m.Copy(msg) + if msg.Append(model.FROM_UID) != "" { + from = msg.Append(model.FROM_UID) + } else { + break + } + } } func (s profile) AuthList(m *ice.Message, arg ...string) { m.Cmdy(s.Auth, m.Option(model.AUTH_UID)).Table(func(value ice.Maps) { - if value[model.SERVICE_UID] == "" { + if value[model.PLACE_UID] == "" { m.PushButton() } else { m.PushButton(s.Enter) @@ -47,13 +72,10 @@ func (s profile) AuthList(m *ice.Message, arg ...string) { s.SelectJoinService(m) s.RewriteAppend(m) } -func (s profile) AuthPersonal(m *ice.Message, arg ...string) { - m.Cmdy(m.Prefix("credit"), m.ActionKey()) -} func (s profile) MemberList(m *ice.Message, arg ...string) { msg := s.Select(m.Spawn(), model.UID, m.Option(model.AUTH_UID)) - service := s.ServiceList(m, msg.Append(model.PLACE_UID), msg.Append(model.SERVICE_UID)) - m.Cmdy(web.SPACE, service.Append(model.SPACE), service.Append(model.INDEX), m.ActionKey(), msg.Append(model.PLACE_UID)) + service := s.Table.ServiceList(m, msg.Append(model.PLACE_UID), msg.Append(model.SERVICE_UID)) + m.Cmdy(web.SPACE, service.Append(model.SPACE), service.Append(model.INDEX), ctx.ACTION, m.ActionKey(), msg.Append(model.PLACE_UID)) m.Table(func(value ice.Maps) { if value[model.AUTH_STATUS] == "" && value[model.USER_UID] == m.Option(model.USER_UID) { m.PushButton(s.AuthPersonal) @@ -63,7 +85,7 @@ func (s profile) MemberList(m *ice.Message, arg ...string) { }) s.RewriteAppend(m) } -func (s profile) SystemList(m *ice.Message, arg ...string) { +func (s profile) ServiceList(m *ice.Message, arg ...string) { list := s.SettingProfile(m.Spawn(), arg...).Appendv(model.PLACE_UID) s.FieldsWithCreatedAT(m, s.Auth, kit.TransArgs(kit.Split(m.Config(mdb.FIELDS), ",", ","))...) s.SelectList(m, kit.Simple(model.PLACE_UID, kit.Sort(list))...) @@ -71,5 +93,8 @@ func (s profile) SystemList(m *ice.Message, arg ...string) { s.RewriteAppend(m) } func (s profile) Enter(m *ice.Message, arg ...string) {} +func (s profile) AuthPersonal(m *ice.Message, arg ...string) { + m.Cmdy(m.Prefix("credit"), m.ActionKey()) +} func init() { ice.TeamCtxCmd(profile{}) } diff --git a/src/renzhengshouquan/profile.js b/src/renzhengshouquan/profile.js index 4ce5e5c..57eaf07 100644 --- a/src/renzhengshouquan/profile.js +++ b/src/renzhengshouquan/profile.js @@ -1,26 +1,45 @@ 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) } - can.ui = can.page.Appends(can, can._output, [html.HEAD, html.LIST]) + // 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, "from"]) msg.Table(function(value) { 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||html.AVATAR_JPG}, [ + can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, value, [ {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.city_name, value.street_name, value.service_name]}, {view: html.STATUS, list: [value.info]}, - ])]) + ], function() {})]) + }) + var cmd = msg.Append(AUTH_TYPE) == "personal"? can.onimport.serviceList(can, msg): msg.Append(AUTH_TYPE) == "service"? can.onimport.memberList(can, msg): can.onimport.authList(can, msg) + can.onimport.myTitle(can, "My Count", "成员列表", can.ui.list) + can.onimport.myTitle(can, "My Count", "认证机构", can.ui.from) + can.onimport.fromList(can, msg, can.ui.from) + can.onappend.board(can, msg) + }, + myTitle: function(can, name, help, target) { + can.page.Append(can, target, [{view: html.TITLE, list: [{text: can.user.trans(can, name, help)}]}]) + }, + fromList: function(can, msg, target) { + can.runAction(can.request({}, {}), "fromList", [msg.Append("from_uid")], function(msg) { + if (msg.Length() == 0) { return can.onmotion.hidden(can, target) } + can.onimport.myView(can, msg, function(value) { + 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.STATUS, list: [value.info, value.service_name]}, + ] + }, function(event, value) { + can.Option(AUTH_UID, value.uid), can.Update(event) + }, target) }) - 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||html.AVATAR_JPG + can.onimport.myView(can, msg, function(value) { 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.STATUS, list: [value.info]}, + {view: html.STATUS, list: [value.info, value.service_name]}, ] }, function(event, value) { can.Option(AUTH_UID, value.uid), can.Update(event) @@ -29,7 +48,7 @@ Volcanos(chat.ONIMPORT, { }, 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||html.AVATAR_JPG + can.onimport.myView(can, msg, function(value) { value.icons = value.auth_avatar||value.user_avatar||html.AVATAR_JPG return [ {view: html.TITLE, list: [value.auth_name||value.user_name, can.onimport.authView(can, value), can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value), @@ -45,12 +64,12 @@ Volcanos(chat.ONIMPORT, { }, can.ui.list) }) }, - 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||html.AVATAR_JPG + serviceList: function(can, msg) { + can.runAction(can.request({}, {}), "serviceList", [msg.Append(USER_UID)||msg.Option(USER_UID)], function(msg) { + can.onimport.myView(can, msg, function(value) { value.icons = value.avatar||value.service_icon||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.STATUS, list: [value.info]}, + {view: html.STATUS, list: [value.info, value.service_name]}, ] }, function(event, value) { can.Option(AUTH_UID, value.uid), can.Update(event) @@ -59,7 +78,9 @@ Volcanos(chat.ONIMPORT, { }, }) 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, { + nodename: can._msg.Append("nodename"), index: can._msg.Append("index"), place_uid: can._msg.Append("place_uid"), + }); can.onimport.myPlugin(can, {space: msg.Option("nodename"), index: msg.Option("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