This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-10-01 00:12:44 +08:00
parent 03e3dd1a21
commit c1b5b76412
16 changed files with 170 additions and 93 deletions

View File

@ -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) {

View File

@ -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)))

View File

@ -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"

View File

@ -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] {

View File

@ -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()}) }

View File

@ -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")
},

View File

@ -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": "审批状态",

View File

@ -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})
}) })
},

View File

@ -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{}) }

View File

@ -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)))
}

View File

@ -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))

View File

@ -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"

View File

@ -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])

View File

@ -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": {

View File

@ -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{}) }

View File

@ -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) },
})