diff --git a/src/gonganxitong/grant.go b/src/gonganxitong/grant.go index 1a9a4fd..ac1da57 100644 --- a/src/gonganxitong/grant.go +++ b/src/gonganxitong/grant.go @@ -20,8 +20,9 @@ type grant struct { } func (s grant) List(m *ice.Message, arg ...string) { - if m.Option(ice.FROM_DAEMON) == "" { + if m.Option(ice.FROM_DAEMON) == "" || m.Option(ice.MSG_USERUID) == "" { m.EchoQRCode(m.MergePodCmd("", m.PrefixKey(), ice.FROM_DAEMON, m.Option(ice.MSG_DAEMON))) + m.Echo("
请使用微信扫码授权登录
") } else { msg := s.spaceInfo(m) m.Option(ice.MSG_USERUA, msg.Append(aaa.UA)) @@ -30,6 +31,7 @@ func (s grant) List(m *ice.Message, arg ...string) { m.Option(model.AGENT), m.Option(model.SYSTEM), msg.Append(aaa.IP), kit.Format(web.PublicIP(m.Message, m.Option(ice.MSG_USERIP))), ), s.Confirm) + m.Option("display.style", "output") } kit.If(m.IsTech(), func() { m.Action(s.Header) }) } diff --git a/src/gonganxitong/portal.css b/src/gonganxitong/portal.css index daddb3d..30fdf5d 100644 --- a/src/gonganxitong/portal.css +++ b/src/gonganxitong/portal.css @@ -3,7 +3,7 @@ $body.light { --plugin-bg-color:#f2f4f8; --output-bg-color:white; --notice-bg-co body.light fieldset.web.team.portal>div.output>div.header { background-image:linear-gradient(#dbe7fe, var(--plugin-bg-color)); } body.dark $output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:yellow; white-space:pre; } $action { width:100%; height:48px; position:absolute; top:0; z-index:1; display:none; align-items:center; } -$action div.item { margin-right:0; } +$action div.item { margin-right:0; margin-left:0 !important; } $action div.item input[type=button] { background-color:transparent; color:var(--notice-bg-color); min-width:20px; padding:0 10px; } $action div.item.danger input[type=button] { color:var(--danger-bg-color); } $action div.item.button i { display:none; } @@ -28,7 +28,7 @@ $output>div.header img { height:100%; width:100%; object-fit:cover; } $output>div.action>div.list { margin:0 10px; } $output>div>div.code { margin-bottom:20px; display:flex; flex-direction:column; align-items:center; } $output>div>div.list { border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px; } -$output>div>div.list>div.title { font-weight:bold; border-left:var(--box-notice3); padding-left:10px; margin:10px 0; display:flex; align-items:center; } +$output>div>div.list>div.title { font-weight:bold; border-left:var(--box-notice3); padding-left:10px; margin-bottom:10px; 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; } $output>div>div.list>div.title div.action div.item { margin-right:5px; } @@ -69,7 +69,7 @@ $output>div.action { background-color:var(--output-bg-color); } $output div.item.card:not(:last-child) { margin-bottom:2px; } $output div.item.card.sticky { position:sticky; top:0; z-index:2; } $output div.item.card.loaded { position:sticky; top:0; z-index:2; } -body:not(.mobile) $output div.item.card>div.action { top:24px; } +// body:not(.mobile) $output div.item.card>div.action { top:24px; } $output fieldset.story>div.output div.place_info div.item.card>div.action { top:12px; } $output div.item.card div.title { font-size:var(--body-font-size); width:100%; display:flex; align-items:center; position:relative; } $output div.item.card div.title span:first-child { word-break:break-all; } @@ -79,7 +79,7 @@ $output div.item.card div.title span.status { line-height:18px; } $output div.item.card div.title span.price { color:var(--danger-bg-color); } body.width1 $output div.item.card div.title span.price { margin-left:auto; } $output div.item.card div.title span.score { background-color:var(--hover-bg-color); color:var(--danger-bg-color); padding:0 5px; } -$output div.item.card div.title span.time { color:gray; font-size:12px; position:absolute; right:0; } +$output div.item.card div.title span.time { color:gray; font-size:12px; } body.width1 $output div.item.card div.title div.space { flex-grow:1; } $output div.item.card div.title div.action input { margin-right:0; } $output div.item.card div.action input { padding:0 10px; margin-left:0; margin-right:0; } @@ -141,7 +141,8 @@ $output div.item.title.meetList { border-left:var(--box-danger3); } $output div.item.title.dealList { border-left:var(--box-danger3); } $output div.item.title div.action div.item.notice input { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } $output fieldset.story>div.output { background-color:var(--plugin-bg-color); } -$output fieldset.story>div.output>div.tabs { flex-direction:column; height:unset; } +$output fieldset.story>div.output>div.tabs.multi { flex-direction:column; height:unset; } +$output fieldset.story>div.output>div.tabs { height:unset; } $output fieldset.story>div.output>div.tabs { line-height:32px; background-color:var(--plugin-bg-color); display:flex; overflow:auto; position:sticky; top:0; z-index:2; } $output fieldset.story>div.output>div.tabs div.tabs { height:32px; } $output fieldset.story>div.output>div.tabs.wrap { height:unset; max-height:320px; flex-direction:column; } @@ -215,10 +216,13 @@ $output fieldset.story>div.output>div.code>input[type=button].danger { border:va $output fieldset.story>div.output>div.code div.item.button { margin-top:20px; } $output fieldset.story>div.output>div.code div.item.button input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:18px; min-width:240px; height:36px; } $output fieldset.story>div.output>div.code div.item.button input[type=button][name=cancel] { border:var(--box-border); background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +// $output fieldset.story.profile>div.output div.item.card div.action { top:18px; } +// body:not(.width1) $output fieldset.story>div.output div.item.card div.action { top:28px; right:10px; } $output fieldset.story>div.output>div.code div.item.button.danger input[type=button] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } $output fieldset.story>div.output>div.info>input[type=button] { box-shadow:var(--box-shadow); border:none; background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:20px; height:48px; width:100%; max-width:320px; } $output fieldset.story>div.output>div.info { padding:10px 20px; text-align:center; white-space:pre; } $output>fieldset.story>div.output div.item.card>div.output { padding:10px; width:100%; } +body:not(.mobile) $output>fieldset.story>div.output div.item.card>div.output:hover { background-color:var(--hover-bg-color); } $output>fieldset.story>div.output div.item.card>div.output div.output { padding:5px 0; white-space:pre-line; } $output>fieldset.story>div.output div.item.card.loaded>div.output { background-color:var(--plugin-bg-color); } $output fieldset.story.form>div.output>div.code>input[type=button] { font-size:18px; margin:10px; height:36px; } diff --git a/src/gonganxitong/portal.go b/src/gonganxitong/portal.go index 510dab7..8ef5e36 100644 --- a/src/gonganxitong/portal.go +++ b/src/gonganxitong/portal.go @@ -134,7 +134,7 @@ func (s Portal) Run(m *ice.Message, arg ...string) { if len(arg) > 0 && strings.HasSuffix(arg[0], ".portal") { return } - if kit.IndexOf(arg, mdb.INPUTS) == -1 && !strings.HasSuffix(arg[1], ".member") { + if kit.IndexOf(arg, mdb.INPUTS) == -1 && !strings.HasSuffix(kit.Select("", arg, 1), ".member") { s.Place.RewriteAppend(m) } }) diff --git a/src/gonganxitong/portal.js b/src/gonganxitong/portal.js index c9f5330..eb031bf 100644 --- a/src/gonganxitong/portal.js +++ b/src/gonganxitong/portal.js @@ -14,6 +14,7 @@ Volcanos(chat.ONIMPORT, { value.auth_name||value._name, can.onimport.authView(can, value), {text: [value.__type, "", [mdb.TYPE, value._type, value._type_style]]}, value._role != "visitor" && {text: [value.__role, "", [aaa.ROLE, value._role, value._role_style]]}, + can.onimport.titleAction(can, value), ]}, can.onimport.shipView(can, {city_name: value.city_name, street_name: value._street, service_name: can.ConfHelp()+" "+(value.space_title||can.user.info.titles)}), {view: html.STATUS, list: [value.auth_info||value._info]}, @@ -75,10 +76,15 @@ 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 { can.onappend.style(can, "public", can._output), can.Conf(mdb.ICONS, msg.Option("portal_icon")) - var _msg = can.request({}); if (msg.Option(PLACE_NAME)) { _msg.Push(kit.Dict(UID, "", msg.OptionSimple( + var _msg = can.request({}); + can.user.trans(can, {credit: "服务名片", member: "成员列表"}) + 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, "member_status", "auth_status", "auth_name", "auth_info", "auth_avatar", "auth_background", "dashboard_uid", "space_title", - ))) } can.onimport.myPlace(can, _msg, can.ui.myplace) + ))) } + // _msg.PushButton("credit", "member", "setting") + _msg.PushButton("credit", "member") + 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) } msg.Echo([msg.Option(CITY_NAME), msg.Option(STREET_NAME), msg.Option(PLACE_NAME)].join(" ")) can.misc.isDebug(can) && can.onimport.qrcode(can, msg, can.sup.current.auth_avatar) @@ -150,7 +156,9 @@ Volcanos(chat.ONIMPORT, { } var cmd = value.index.split(".").pop() return {view: [[html.ITEM, ctx.INDEX].concat( - value.type? [mdb.TYPE]: [], can.core.Split(value.type||""), value.role? [aaa.ROLE]: [], can.core.Split(value.role||""), + value.type? [mdb.TYPE]: [], + value.index, + can.core.Split(value.type||""), value.role? [aaa.ROLE]: [], can.core.Split(value.role||""), value.auth, value.view, )], style: {width: width}, list: [ can.onimport.imageView(can, value), @@ -239,6 +247,9 @@ Volcanos(chat.ONACTION, { can.user.isMobile && can.page.style(can, can._root.Action._target, html.DISPLAY, "") can.user.isMobile && can.onmotion.toggle(can, can._output, true) }, + credit: function(event, can, button) { can.onimport.myStory(can, {index: button, args: [can.sup.current._uid]}) }, + member: function(event, can, button) { can.onimport.myStory(can, {index: button, args: [can.sup.current._uid]}) }, + setting: function(event, can, button) { can.onimport.myStory(can, {index: button, args: [can.sup.current._uid]}) }, request: function(event, can) { can.runAction(event, "request", [], function(msg) { if(msg.IsErr()) { return can.user.toastFailure(can, msg.Result()) } WeixinJSBridge.invoke('getBrandWCPayRequest', msg.Table()[0], function(res) { @@ -256,13 +267,15 @@ Volcanos(chat.ONACTION, { Volcanos(chat.ONEXPORT, { place: function(can, value) { return can.onexport.session(can, PLACE_UID, value) }, value: function(can, value) { if (!value || !value._uid) { return } can.sup.current = value - can.onexport.index(can, can.sup.current) - can.onexport.index(can, can.sup.current, "", can.ui.myallow) - can.onexport.place(can, value._uid), can.onexport.hash(can, value._uid), can.onexport.title(can, value._name, can.ConfHelp()) + can.onexport.place(can, value._uid), + // can.onexport.hash(can, value._uid), + // can.onexport.title(can, value._name, can.ConfHelp()) + can.onimport.myOption(can.sup) can.page.Select(can, can.ui._target, "div.item.card.uid-"+value._uid, function(target) { can.onmotion.select(can, can.ui._target, html.DIV_ITEM, target) can.onmotion.scrollIntoView(can, target) }) + can.onexport.index(can, can.sup.current), can.onexport.index(can, can.sup.current, "", can.ui.myallow) var status = !value.member_status || value.member_status == "normal" 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) @@ -270,7 +283,6 @@ Volcanos(chat.ONEXPORT, { can.ui.myallow && can.onmotion.toggle(can, can.ui.myallow, can.user.isTechOrRoot(can) || status && (value._role == "creator" || parseInt(value._role) > 0 || can.page.Select(can, can.ui.myallow, "div.item.index.role."+value._role).length > 0)) can.ui.myindex && can.onmotion.toggle(can, can.ui.myindex, status) if (!can.onmotion.cache(can, function() { return value._uid }, can.ui.header) && value.auth_background) {} - can.onimport.myOption(can.sup) }, index: function(can, value, role, _target) { role = role||value._role can.ui.role && can.onmotion.toggle(can, can.ui.role, value._role == "creator") diff --git a/src/gonganxitong/portal.json b/src/gonganxitong/portal.json index 8273e96..5a85773 100644 --- a/src/gonganxitong/portal.json +++ b/src/gonganxitong/portal.json @@ -1,6 +1,6 @@ { "placeCreate": "创建", "placeRemove": "删除", - "credit": "用户名片", "member": "组织成员", "setting": "服务配置", + "credit": "服务名片", "member": "组织成员", "setting": "服务配置", "qrcode": "场景码", "event": "事件流", "apply": "权限申请", "allow": "权限审批", "notice": "通知公告", "market": "人民广场", "message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持", "auth": "认证", "authCreate": "认证申请", "authCity": "城市认证", "authPersonal": "个人认证", "authService": "服务认证", "authCompany": "公司认证", diff --git a/src/gonganxitong/recent.js b/src/gonganxitong/recent.js index f223261..6ad4ca3 100644 --- a/src/gonganxitong/recent.js +++ b/src/gonganxitong/recent.js @@ -4,7 +4,10 @@ Volcanos(chat.ONIMPORT, { if (can._stacks_root && can._stacks_root._stacks[[value.space,value.index, value.place_uid].join(",")]) { value._style.push("loaded") } value.icons = can.misc.Resource(can, value.place_avatar||value.service_icon.split("?")[0], value.space) return [ - {view: html.TITLE, list: [value.place_name, can.onimport.authView(can, value), can.onimport.timeView(can, value)]}, + {view: html.TITLE, list: [value.place_name, can.onimport.authView(can, value), + can.onimport.spaceView(can, value), + can.onimport.timeView(can, value), + ]}, can.onimport.shipView(can, value), ] }, function(event, value) { can.onaction._goback? can.onaction._goback(event, function() { diff --git a/src/gonganxitong/setting.css b/src/gonganxitong/setting.css index 2de0ab1..107789b 100644 --- a/src/gonganxitong/setting.css +++ b/src/gonganxitong/setting.css @@ -1,4 +1,6 @@ -$output>div.item:not(.title) { border-radius:10px; margin:0 10px; } +$output>div.item:not(.title) { + // border-radius:10px; +margin:0 10px; } $output>div.item { background-color:var(--output-bg-color); padding:10px; margin:10px; display:flex; align-items:center; } $output>div.item span.name { flex-grow:1; } $output>div.item span.outer { background-color:gray; border-radius:12px; padding:2px; height:24px; width:40px; display:inline-block; float:right; } @@ -6,5 +8,9 @@ $output>div.item span.inner { border-radius:10px; background-color:white; height $output>div.item span.outer.on { background-color:var(--notice-bg-color); } $output>div.item span.outer.on span.inner { float:right; } $output>div.item.story i { width:40px; text-align:center; } +body:not(.mobile) $output>div.item:hover { background-color:var(--hover-bg-color); } $output>div.item.title { margin-left:20px; } -$output>div.item.input input[type=text] { border:none; border-bottom:var(--box-border); text-align:right; flex-shrink:1; padding:0 20px; max-width:100px; } \ No newline at end of file +$output>div.item.input input[type=text] { border:none; border-bottom:var(--box-border); text-align:right; flex-shrink:1; padding:0 20px; max-width:100px; } +$output>div.item.button { justify-content:center; margin:10px; } +$output>div.item.button.logout { height:48px; } +$output>div.item.button.logout input[type=button] { width:100%; max-width:240px; } \ No newline at end of file diff --git a/src/gonganxitong/setting.go b/src/gonganxitong/setting.go index 24a8dfe..41db111 100644 --- a/src/gonganxitong/setting.go +++ b/src/gonganxitong/setting.go @@ -155,4 +155,5 @@ const ( SETTING_ALLOW_AUTO = "setting_allow_auto" SETTING_RADIO = "radio" SETTING_STORY = "story" + SETTING_BUTTON = "button" ) diff --git a/src/gonganxitong/setting.js b/src/gonganxitong/setting.js index 4b1381b..1cb0fb3 100644 --- a/src/gonganxitong/setting.js +++ b/src/gonganxitong/setting.js @@ -1,16 +1,23 @@ Volcanos(chat.ONIMPORT, { _init: function(can, msg) { can.page.Append(can, can._output, msg.Table(function(value) { - if (value.type == "title") { - return {view: [[html.ITEM, html.TITLE], "", can.user.trans(can, value.name, value.help)]} - } + if (value.type == "title") { return {view: [[html.ITEM, html.TITLE], "", can.user.trans(can, value.name, value.help)]} } return {view: [[html.ITEM, value.type, value.name]], list: [{text: [can.user.trans(can, value.name, value.help, "value.setting"), "", mdb.NAME]}, can.onimport[value.type](can, value)]} })) + can.onappend.input(can, {type: html.BUTTON, name: "website", value: "进入官网", onclick: function() { + can.user.open("/") + }}, "", can._output) + + can.onappend.input(can, {type: html.BUTTON, name: "logout", value: "退出登录", style: "danger", onclick: function() { + if (can.user.confirm("请确认退出登录")) { can.misc.CookieSessid(can, ""), location.reload() } + }}, "", can._output) + if (!can.misc.isDebug(can)) { return } can.user.isTechOrRoot(can) && can.onimport._plugin(can, {index: "can.cookie"}) localStorage.length && can.onimport._plugin(can, {index: "can.localStorage"}) sessionStorage.length && can.onimport._plugin(can, {index: "can.sessionStorage"}) // can.onimport._plugin(can, {index: "can.runtime"}) + can.page.Append(can, can._output, [{text: "debug"}]) }, _plugin: function(can, value) { value.width = can.ConfWidth()-20 can.onappend.plugin(can, value, function(sub) { @@ -43,4 +50,9 @@ Volcanos(chat.ONIMPORT, { } }} }, +}) +Volcanos(chat.ONIMPORT, { + logout: function(event, can, button) { + can.user.logout(can) + }, }) \ No newline at end of file diff --git a/src/renzhengshouquan/profile.css b/src/renzhengshouquan/profile.css index fa689f6..59a0f68 100644 --- a/src/renzhengshouquan/profile.css +++ b/src/renzhengshouquan/profile.css @@ -2,5 +2,5 @@ $output>div>div.title { border-left:var(--box-notice3); padding-left:10px; margi $output>div.from>div.title { border-left:var(--box-danger3); } $output>div.head { margin-bottom:0; } $output>div.list { height:unset !important; } -$output div.item.card div.title span.type { margin-left:auto; } -$output div.item.card div.title div.action { top:16px; } \ No newline at end of file +body.width1 $output div.item.card div.title span.type { margin-left:auto; } +body.width1 $output div.item.card div.title div.action { top:16px; } \ No newline at end of file