This commit is contained in:
jingganjiaoyu 2024-09-01 23:44:41 +08:00
parent a190cf91bf
commit adf4897156
34 changed files with 435 additions and 275 deletions

View File

@ -5,20 +5,20 @@ import (
kit "shylinux.com/x/toolkits"
"shylinux.com/x/education/src/jiaocaiziliao/model"
"shylinux.com/x/enterprise/src/guanlixitong"
"shylinux.com/x/education/src/jiaowuxitong"
)
type Table struct {
guanlixitong.Table
jiaowuxitong.Table
list string `name:"list issuer_uid uid auto" role:"void"`
}
func (s Table) Inputs(m *ice.Message, arg ...string) {
switch arg[0] {
case model.USER_ISSUER_ROLE:
s.InputsListRole(m, UserIssuerRoleList, arg...)
case model.ISSUER_TYPE:
s.InputsList(m, IssuerTypeList, arg...)
case model.USER_LIBRARY_ROLE:
s.InputsListRole(m, UserLibraryRoleList, arg...)
case model.LIBRARY_TYPE:
s.InputsList(m, LibraryTypeList, arg...)
case model.DOCUMENT_TYPE:
s.InputsList(m, DocumentTypeList, arg...)
default:
@ -28,10 +28,10 @@ func (s Table) Inputs(m *ice.Message, arg ...string) {
func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
m.RewriteAppend(func(value, key string, index int) string {
switch key {
case model.USER_ISSUER_ROLE:
value = UserIssuerRole(kit.Int(value)).String()
case model.ISSUER_TYPE:
value = IssuerType(kit.Int(value)).String()
case model.USER_LIBRARY_ROLE:
value = UserLibraryRole(kit.Int(value)).String()
case model.LIBRARY_TYPE:
value = LibraryType(kit.Int(value)).String()
case model.DOCUMENT_TYPE:
value = DocumentType(kit.Int(value)).String()
}
@ -39,17 +39,6 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
})
return s.Table.RewriteAppend(m)
}
func (s Table) CheckRole(m *ice.Message, arg ...string) *ice.Message {
role := UserIssuerRole(kit.Int(m.Cmd(userIssuer{}, s.Select, m.OptionSimple(model.ISSUER_UID, model.USER_UID)).Append(model.ROLE)))
m.WarnNotRight(!kit.IsIn(role.String(), append(arg, UserIssuerCreator.String())...), role.String())
return m
}
func (s Table) recordEvent(m *ice.Message, info string, arg ...string) {
s.Table.RecordEvent(m, m.Option(model.ISSUER_UID), info, kit.Select(m.Option(model.UID), arg, 0))
}
func (s Table) recordEventWithName(m *ice.Message, info string, arg ...string) {
s.Table.RecordEventWithName(m, m.Option(model.ISSUER_UID), info)
}
type Tables struct{ Table }

View File

@ -9,19 +9,23 @@ import (
type document struct {
Table
create string `name:"create school* subject* grade* document_type*:select title* content* icon* link*" role:"leader,worker"`
create string `name:"create subject* grade* document_type*:select title* content* icon link" role:"teacher,student"`
}
func (s document) Create(m *ice.Message, arg ...string) {
arg = kit.TransArgKeys(arg, model.DOCUMENT_TYPE, model.TYPE)
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.USER_UID, model.ISSUER_UID))...)
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.USER_UID, model.LIBRARY_UID))...)
}
func (s document) Remove(m *ice.Message, arg ...string) {
s.Table.Remove(m, m.OptionSimple(model.USER_UID, model.UID)...)
}
func (s document) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.ISSUER_UID, arg[0])
s.Select(m, model.LIBRARY_UID, arg[0])
} else if len(arg) == 2 {
s.SelectDetail(m, model.ISSUER_UID, arg[0], model.UID, arg[1])
s.SelectDetail(m, model.LIBRARY_UID, arg[0], model.UID, arg[1])
}
m.PushAction(s.Remove)
m.RenameAppend(model.TYPE, model.DOCUMENT_TYPE)
}

View File

@ -1,21 +0,0 @@
package jiaocaiziliao
import "shylinux.com/x/ice"
type issuer struct{ Table }
func init() { ice.TeamCtxCmd(issuer{}) }
type IssuerType int
const (
IssuerPersonal IssuerType = iota
IssuerPublisher
)
var IssuerTypeList = map[IssuerType]string{
IssuerPersonal: "personal",
IssuerPublisher: "publisher",
}
func (s IssuerType) String() string { return IssuerTypeList[s] }

View File

@ -0,0 +1,21 @@
package jiaocaiziliao
import "shylinux.com/x/ice"
type library struct{ Table }
func init() { ice.TeamCtxCmd(library{}) }
type LibraryType int
const (
LibraryPersonal LibraryType = iota
LibraryPublisher
)
var LibraryTypeList = map[LibraryType]string{
LibraryPersonal: "personal",
LibraryPublisher: "publisher",
}
func (s LibraryType) String() string { return LibraryTypeList[s] }

View File

@ -3,44 +3,41 @@ package model
import "shylinux.com/x/mysql-story/src/db"
const (
UID = "uid"
NAME = "name"
TYPE = "type"
ROLE = "role"
LINK = "link"
TITLE = "title"
CONTENT = "content"
USER_UID = "user_uid"
USER_ISSUER_ROLE = "user_issuer_role"
ISSUER_UID = "issuer_uid"
ISSUER_NAME = "issuer_name"
ISSUER_TYPE = "issuer_type"
DOCUMENT_UID = "document_uid"
DOCUMENT_TYPE = "document_type"
COMPANY_UID = "company_uid"
CITY_UID = "city_uid"
INDEX = "index"
INIT = "init"
UID = "uid"
NAME = "name"
TYPE = "type"
ROLE = "role"
TITLE = "title"
CONTENT = "content"
USER_UID = "user_uid"
USER_LIBRARY_ROLE = "user_library_role"
LIBRARY_UID = "library_uid"
LIBRARY_TYPE = "library_type"
DOCUMENT_UID = "document_uid"
DOCUMENT_TYPE = "document_type"
CITY_UID = "city_uid"
INDEX = "index"
INIT = "init"
LINK = "link"
)
type UserIssuer struct {
type UserLibrary struct {
db.ModelUserPlace
IssuerUID string `gorm:"type:char(32);index"`
LibraryUID string `gorm:"type:char(32);index"`
}
type Issuer struct {
type Library struct {
db.ModelPlace
CompanyUID string `gorm:"type:char(32);index"`
Link string `gorm:"type:varchar(255)"`
SchoolUID string `gorm:"type:char(32);index"`
Link string `gorm:"type:varchar(255)"`
}
type Document struct {
db.ModelContent
IssuerUID string `gorm:"type:char(32);index"`
School string `gorm:"type:varchar(32)"`
Subject string `gorm:"type:varchar(32)"`
Grade string `gorm:"type:varchar(32)"`
Type uint8 `gorm:"default:0"`
Icon string `gorm:"type:varchar(64)"`
Link string `gorm:"type:varchar(255)"`
LibraryUID string `gorm:"type:char(32);index"`
Subject string `gorm:"type:varchar(32)"`
Grade string `gorm:"type:varchar(32)"`
Type uint8 `gorm:"default:0"`
Icon string `gorm:"type:varchar(128)"`
Link string `gorm:"type:varchar(255)"`
}
func init() { db.CmdModels("", &UserIssuer{}, &Issuer{}, &Document{}) }
func init() { db.CmdModels("", &UserLibrary{}, &Library{}, &Document{}) }

View File

@ -8,11 +8,11 @@ import (
type offical struct {
Tables
userIssuer userIssuer
userLibrary userLibrary
}
func (s offical) List(m *ice.Message, arg ...string) {
m.Cmdy(s.userIssuer, m.Option(model.USER_UID), arg)
m.Cmdy(s.userLibrary, m.Option(model.USER_UID), arg)
m.ProcessOpen(m.Append(model.LINK))
}

View File

@ -2,14 +2,14 @@ package jiaocaiziliao
import (
"shylinux.com/x/community/src/gonganxitong"
"shylinux.com/x/enterprise/src/guanlixitong"
"shylinux.com/x/education/src/jiaowuxitong"
)
type Portal struct {
gonganxitong.Portal
placeCreate string `name:"placeCreate city_name* company_name* issuer_type*:select issuer_name* link" role:"void"`
jiaowuxitong.Portal
placeCreate string `name:"placeCreate city_name* school_name* library_type*:select library_name* link" role:"void"`
}
func init() {
gonganxitong.PortalCmd(Portal{Portal: gonganxitong.NewPortal(userIssuer{}, issuer{}, guanlixitong.Company{})})
gonganxitong.PortalCmd(Portal{Portal: jiaowuxitong.NewPortal(userLibrary{}, library{})})
}

View File

@ -1,34 +1,35 @@
{
"portal": "教材资料",
"document": "教材资料",
"official": "官方网站",
"document": "教材资料",
"icons": {
"official": "https://img.icons8.com/officel/80/activity-grid.png",
"document": "https://img.icons8.com/officel/80/activity-grid.png"
},
"input": {
"My Issuer": "我的文库",
"user_issuer_role": "用户角色",
"My Library": "我的文库",
"user_library_role": "用户角色",
"library_name": "文库名称",
"library_type": "文库类型",
"document_type": "文档类型",
"school_name": "学校名称",
"school": "学校",
"subject": "学科",
"grade": "年级",
"document_type": "文档类型",
"issuer_name": "文库名称",
"issuer_type": "文库类型"
"grade": "年级"
},
"value": {
"user_issuer_role": {
"user_library_role": {
"visitor": "访客",
"creator": "创建人",
"leader": "管理人员",
"worker": "工作人员",
"server": "服务人员",
"teacher": "老师",
"student": "学生",
"parent": "家长",
"style": {
"creator": "danger",
"leader": "danger"
"teacher": "danger"
}
},
"issuer_type": {
"library_type": {
"personal": "个人版",
"publisher": "出版社"
}

View File

@ -1,27 +0,0 @@
package jiaocaiziliao
import "shylinux.com/x/ice"
type userIssuer struct{ Table }
func init() { ice.TeamCtxCmd(userIssuer{}) }
type UserIssuerRole int
const (
UserIssuerVisitor UserIssuerRole = iota
UserIssuerCreator
UserIssuerLeader
UserIssuerWorker
UserIssuerServer
)
var UserIssuerRoleList = map[UserIssuerRole]string{
UserIssuerVisitor: "visitor",
UserIssuerCreator: "creator",
UserIssuerLeader: "leader",
UserIssuerWorker: "worker",
UserIssuerServer: "server",
}
func (s UserIssuerRole) String() string { return UserIssuerRoleList[s] }

View File

@ -0,0 +1,16 @@
package jiaocaiziliao
import (
"shylinux.com/x/ice"
"shylinux.com/x/education/src/jiaowuxitong"
)
type userLibrary struct{ Table }
func init() { ice.TeamCtxCmd(userLibrary{}) }
type UserLibraryRole = jiaowuxitong.UserClassRole
var UserLibraryCreator = jiaowuxitong.UserClassCreator
var UserLibraryRoleList = jiaowuxitong.UserClassRoleList

View File

@ -19,6 +19,9 @@ func (s Table) Inputs(m *ice.Message, arg ...string) {
s.InputsListRole(m, UserClassRoleList, arg...)
case model.CLASS_TYPE:
s.InputsList(m, ClassTypeList, arg...)
case model.SCHOOL_UID:
m.Cmdy(school{}, s.Select).Cut(model.UID, model.NAME).RenameAppend(model.UID, arg[0])
m.DisplayInputKeyNameIconTitle()
default:
s.Table.Inputs(m, arg...)
}
@ -35,20 +38,19 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
})
return s.Table.RewriteAppend(m)
}
func (s Table) CheckRole(m *ice.Message, arg ...string) *ice.Message {
role := UserClassRole(kit.Int(m.Cmd(userClass{}, s.Select, m.OptionSimple(model.CLASS_UID, model.USER_UID)).Append(model.ROLE)))
role := UserClassRole(s.UserPlaceRole(m))
m.WarnNotRight(!kit.IsIn(role.String(), append(arg, UserClassCreator.String())...), role.String())
return m
}
func (s Table) recordEvent(m *ice.Message, info string, arg ...string) {
s.Table.RecordEvent(m, m.Option(model.CLASS_UID), info, kit.Select(m.Option(model.UID), arg, 0))
}
func (s Table) recordEventWithName(m *ice.Message, info string) {
s.Table.RecordEventWithName(m, m.Option(model.CLASS_UID), info)
}
type Tables struct{ Table }
func (s Tables) BeforeMigrate(m *ice.Message, arg ...string) {}
func newTable() Table { return Table{Table: gonganxitong.NewTable(userClass{}, class{}, school{})} }
func NewPortal(userPlace gonganxitong.UserPlacer, place gonganxitong.Placer) Portal {
return Portal{Portal: gonganxitong.NewPortal(userPlace, place, school{})}
}

View File

@ -16,7 +16,7 @@ type homework struct {
func (s homework) Create(m *ice.Message, arg ...string) {
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.CLASS_UID, model.USER_UID))...)
s.recordEventWithName(m, "")
s.RecordEventWithName(m, "")
}
func (s homework) List(m *ice.Message, arg ...string) {
s.TablesWithRole(m, arg, s.userClass, s.class, s, model.TITLE, model.CONTENT).Display("")

View File

@ -8,6 +8,11 @@ import (
type school struct{ Table }
func (s school) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
s.Select(m)
}
}
func (s school) FindOrCreateByName(m *ice.Message, arg ...string) {
if msg := m.Cmd(s, s.Select, model.NAME, arg[3], arg[0], arg[1]); msg.Length() == 0 {
msg := m.Cmd(s, s.Create, model.NAME, arg[3], arg[0], arg[1])
@ -18,3 +23,5 @@ func (s school) FindOrCreateByName(m *ice.Message, arg ...string) {
}
func init() { ice.TeamCtxCmd(school{}) }
type School struct{ school }

View File

@ -4,12 +4,12 @@ import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/education/src/jiaowuxitong"
"shylinux.com/x/education/src/kaoshixitong/model"
"shylinux.com/x/enterprise/src/guanlixitong"
)
type Table struct {
guanlixitong.Table
jiaowuxitong.Table
list string `name:"list exam_uid uid auto" role:"void"`
}
@ -35,17 +35,6 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
})
return s.Table.RewriteAppend(m)
}
func (s Table) CheckRole(m *ice.Message, arg ...string) *ice.Message {
role := UserExamRole(kit.Int(m.Cmd(userExam{}, s.Select, m.OptionSimple(model.EXAM_UID, model.USER_UID)).Append(model.ROLE)))
m.WarnNotRight(!kit.IsIn(role.String(), append(arg, UserExamCreator.String())...), role.String())
return m
}
func (s Table) recordEvent(m *ice.Message, info string, arg ...string) {
s.Table.RecordEvent(m, m.Option(model.EXAM_UID), info, kit.Select(m.Option(model.UID), arg, 0))
}
func (s Table) recordEventWithName(m *ice.Message, info string, arg ...string) {
s.Table.RecordEventWithName(m, m.Option(model.EXAM_UID), info)
}
type Tables struct{ Table }

View File

@ -9,15 +9,17 @@ func init() { ice.TeamCtxCmd(exam{}) }
type ExamType int
const (
ExamRD ExamType = iota
ExamOP
ExamHR
ExamTerm ExamType = iota
ExamWeekly
ExamStep
ExamFree
)
var ExamTypeList = map[ExamType]string{
ExamRD: "RD",
ExamOP: "OP",
ExamHR: "HR",
ExamTerm: "term",
ExamWeekly: "weekly",
ExamStep: "step",
ExamFree: "free",
}
func (s ExamType) String() string { return ExamTypeList[s] }
func (s ExamType) String() string { return ExamTypeList[s] }

View File

@ -15,7 +15,7 @@ const (
EXAM_NAME = "exam_name"
EXAM_TYPE = "exam_type"
QUESTION_UID = "question_uid"
COMPANY_UID = "company_uid"
SCHOOL_UID = "school_uid"
CITY_UID = "city_uid"
)
@ -25,7 +25,7 @@ type UserExam struct {
}
type Exam struct {
db.ModelPlace
CompanyUID string `gorm:"type:char(32);index"`
SchoolUID string `gorm:"type:char(32);index"`
}
type Question struct {
db.ModelContent

View File

@ -2,14 +2,14 @@ package kaoshixitong
import (
"shylinux.com/x/community/src/gonganxitong"
"shylinux.com/x/enterprise/src/guanlixitong"
"shylinux.com/x/education/src/jiaowuxitong"
)
type Portal struct {
gonganxitong.Portal
placeCreate string `name:"placeCreate city_name* company_name* exam_name*" role:"void"`
jiaowuxitong.Portal
placeCreate string `name:"placeCreate city_name* school_name* exam_name*" role:"void"`
}
func init() {
gonganxitong.PortalCmd(Portal{Portal: gonganxitong.NewPortal(userExam{}, exam{}, guanlixitong.Company{})})
}
gonganxitong.PortalCmd(Portal{Portal: jiaowuxitong.NewPortal(userExam{}, exam{})})
}

View File

@ -5,20 +5,22 @@
"question": "https://img.icons8.com/officel/80/activity-grid.png"
},
"input": {
"My Exam": "我的场景",
"My Exam": "我的考试",
"user_exam_role": "用户角色",
"exam_name": "场景名称",
"exam_type": "场景类型"
"exam_name": "考试名称",
"exam_type": "考试类型",
"school_name": "学校名称"
},
"value": {
"user_exam_role": {
"visitor": "访客",
"creator": "创建人",
"leader": "管理人员",
"worker": "工作人员",
"server": "服务人员",
"teacher": "老师",
"student": "学生",
"parent": "家长",
"style": {
"creator": "danger"
"creator": "danger",
"teacher": "danger"
}
},
"exam_type": {

View File

@ -11,15 +11,15 @@ type question struct {
Table
exam exam
userExam userExam
create string `name:"create title* content*" role:"leader"`
create string `name:"create title* content*" role:"leader"`
}
func (s question) Create(m *ice.Message, arg ...string) {
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.USER_UID, model.EXAM_UID))...)
s.recordEventWithName(m, "")
s.RecordEventWithName(m, "")
}
func (s question) List(m *ice.Message, arg ...string) {
s.TablesWithRole(m, arg, s.userExam, s.exam, s, model.TITLE, model.CONTENT).Display("")
}
func init() { ice.TeamCtxCmd(question{}) }
func init() { ice.TeamCtxCmd(question{}) }

View File

@ -1,27 +1,16 @@
package kaoshixitong
import "shylinux.com/x/ice"
import (
"shylinux.com/x/ice"
"shylinux.com/x/education/src/jiaowuxitong"
)
type userExam struct{ Table }
func init() { ice.TeamCtxCmd(userExam{}) }
type UserExamRole int
type UserExamRole = jiaowuxitong.UserClassRole
const (
UserExamVisitor UserExamRole = iota
UserExamCreator
UserExamLeader
UserExamWorker
UserExamServer
)
var UserExamRoleList = map[UserExamRole]string{
UserExamVisitor: "visitor",
UserExamCreator: "creator",
UserExamLeader: "leader",
UserExamWorker: "worker",
UserExamServer: "server",
}
func (s UserExamRole) String() string { return UserExamRoleList[s] }
var UserExamCreator = jiaowuxitong.UserClassCreator
var UserExamRoleList = jiaowuxitong.UserClassRoleList

View File

@ -3,6 +3,7 @@ package main
import (
"shylinux.com/x/ice"
_ "shylinux.com/x/community/src/renzhengshouquan"
_ "shylinux.com/x/education/src/jiaocaiziliao"
_ "shylinux.com/x/education/src/jiaowuxitong"
_ "shylinux.com/x/education/src/kaoshixitong"

View File

@ -4,12 +4,12 @@ import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/enterprise/src/guanlixitong"
"shylinux.com/x/education/src/jiaowuxitong"
"shylinux.com/x/education/src/zaixianketang/model"
)
type Table struct {
guanlixitong.Table
jiaowuxitong.Table
list string `name:"list course_uid uid auto" role:"void"`
}
@ -35,18 +35,7 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
})
return s.Table.RewriteAppend(m)
}
func (s Table) CheckRole(m *ice.Message, arg ...string) *ice.Message {
role := UserCourseRole(kit.Int(m.Cmd(userCourse{}, s.Select, m.OptionSimple(model.COURSE_UID, model.USER_UID)).Append(model.ROLE)))
m.WarnNotRight(!kit.IsIn(role.String(), append(arg, UserCourseCreator.String())...), role.String())
return m
}
func (s Table) recordEvent(m *ice.Message, info string, arg ...string) {
s.Table.RecordEvent(m, m.Option(model.COURSE_UID), info, kit.Select(m.Option(model.UID), arg, 0))
}
func (s Table) recordEventWithName(m *ice.Message, info string, arg ...string) {
s.Table.RecordEventWithName(m, m.Option(model.COURSE_UID), info)
}
type Tables struct { Table }
type Tables struct{ Table }
func (s Tables) BeforeMigrate(m *ice.Message, arg ...string) {}
func (s Tables) BeforeMigrate(m *ice.Message, arg ...string) {}

View File

@ -9,15 +9,17 @@ func init() { ice.TeamCtxCmd(course{}) }
type CourseType int
const (
CourseRD CourseType = iota
CourseOP
CourseHR
CourseTerm CourseType = iota
CourseWeekly
CourseStep
CourseFree
)
var CourseTypeList = map[CourseType]string{
CourseRD: "RD",
CourseOP: "OP",
CourseHR: "HR",
CourseTerm: "term",
CourseWeekly: "weekly",
CourseStep: "step",
CourseFree: "free",
}
func (s CourseType) String() string { return CourseTypeList[s] }
func (s CourseType) String() string { return CourseTypeList[s] }

View File

@ -11,15 +11,15 @@ type lesson struct {
Table
course course
userCourse userCourse
create string `name:"create title* content*" role:"leader"`
create string `name:"create title* content*" role:"leader"`
}
func (s lesson) Create(m *ice.Message, arg ...string) {
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.USER_UID, model.COURSE_UID))...)
s.recordEventWithName(m, "")
s.RecordEventWithName(m, "")
}
func (s lesson) List(m *ice.Message, arg ...string) {
s.TablesWithRole(m, arg, s.userCourse, s.course, s, model.TITLE, model.CONTENT).Display("")
}
func init() { ice.TeamCtxCmd(lesson{}) }
func init() { ice.TeamCtxCmd(lesson{}) }

View File

@ -15,7 +15,7 @@ const (
COURSE_NAME = "course_name"
COURSE_TYPE = "course_type"
LESSON_UID = "lesson_uid"
COMPANY_UID = "company_uid"
SCHOOL_UID = "school_uid"
CITY_UID = "city_uid"
)
@ -25,7 +25,7 @@ type UserCourse struct {
}
type Course struct {
db.ModelPlace
CompanyUID string `gorm:"type:char(32);index"`
SchoolUID string `gorm:"type:char(32);index"`
}
type Lesson struct {
db.ModelContent

View File

@ -2,14 +2,14 @@ package zaixianketang
import (
"shylinux.com/x/community/src/gonganxitong"
"shylinux.com/x/enterprise/src/guanlixitong"
"shylinux.com/x/education/src/jiaowuxitong"
)
type Portal struct {
gonganxitong.Portal
placeCreate string `name:"placeCreate city_name* company_name* course_name*" role:"void"`
jiaowuxitong.Portal
placeCreate string `name:"placeCreate city_name* school_name* course_name*" role:"void"`
}
func init() {
gonganxitong.PortalCmd(Portal{Portal: gonganxitong.NewPortal(userCourse{}, course{}, guanlixitong.Company{})})
}
gonganxitong.PortalCmd(Portal{Portal: jiaowuxitong.NewPortal(userCourse{}, course{})})
}

View File

@ -1,24 +1,28 @@
{
"portal": "在线课堂",
"": "场景应用",
"course": "课程",
"lesson": "章节",
"icons": {
"": "https://img.icons8.com/officel/80/activity-grid.png"
"course": "https://img.icons8.com/officel/80/activity-grid.png",
"lesson": "https://img.icons8.com/officel/80/activity-grid.png"
},
"input": {
"My Course": "我的场景",
"My Course": "我的课程",
"user_course_role": "用户角色",
"course_name": "场景名称",
"course_type": "场景类型"
"course_name": "课程名称",
"course_type": "课程类型",
"school_name": "学校名称"
},
"value": {
"user_course_role": {
"visitor": "访客",
"creator": "创建人",
"leader": "管理人员",
"worker": "工作人员",
"server": "服务人员",
"teacher": "老师",
"student": "学生",
"parent": "家长",
"style": {
"creator": "danger"
"creator": "danger",
"teacher": "danger"
}
},
"course_type": {

View File

@ -1,27 +1,16 @@
package zaixianketang
import "shylinux.com/x/ice"
import (
"shylinux.com/x/ice"
"shylinux.com/x/education/src/jiaowuxitong"
)
type userCourse struct{ Table }
func init() { ice.TeamCtxCmd(userCourse{}) }
type UserCourseRole int
type UserCourseRole = jiaowuxitong.UserClassRole
const (
UserCourseVisitor UserCourseRole = iota
UserCourseCreator
UserCourseLeader
UserCourseWorker
UserCourseServer
)
var UserCourseRoleList = map[UserCourseRole]string{
UserCourseVisitor: "visitor",
UserCourseCreator: "creator",
UserCourseLeader: "leader",
UserCourseWorker: "worker",
UserCourseServer: "server",
}
func (s UserCourseRole) String() string { return UserCourseRoleList[s] }
var UserCourseCreator = jiaowuxitong.UserClassCreator
var UserCourseRoleList = jiaowuxitong.UserClassRoleList

View File

@ -174,6 +174,13 @@
"type": "hash"
}
},
"c14bbc5551aa7569bdfdd98235dcf3ee": {
"meta": {
"index": "web.team.renzhengshouquan.portal",
"time": "2024-08-31 11:18:46.747",
"type": "hash"
}
},
"c73251765fb5286cea9c8ceefb74530c": {
"meta": {
"index": "web.team.jiaowuxitong.event",

View File

@ -1,6 +1,9 @@
{
"030e2a53ca3561a0d0d123c133a88b59": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"index": "web.team.guanlixitong.qrcode",
"name": "场景码",
@ -11,6 +14,9 @@
},
"057616b7366e1930ef4e4a921fe45f1f": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.guanlixitong.service",
"name": "服务发现",
@ -20,6 +26,9 @@
},
"30bfa47cab4cd689901fd2e1b87eb235": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"index": "web.team.guanlixitong.allow",
"name": "权限审批",
@ -30,6 +39,9 @@
},
"5695d50b28872804a01d7c923ee91cd1": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"index": "web.team.guanlixitong.member",
"name": "场景成员",
@ -39,6 +51,9 @@
},
"9c18032c5bc252f2986e1b20e7e77db7": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"index": "web.team.guanlixitong.event",
"name": "事件流",
@ -49,6 +64,9 @@
},
"9fffbe375e2d2a1a8e6cb1f341e35b55": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"index": "web.team.guanlixitong.recent",
"name": "最近访问",
@ -58,6 +76,9 @@
},
"c27ad1df8aa9059d6018fb5add5ee546": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"index": "web.team.guanlixitong.support",
"name": "客服支持",
@ -67,6 +88,9 @@
},
"c36d47e2611b0d1e7a14088bc3293d04": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"index": "web.team.guanlixitong.apply",
"name": "权限申请",
@ -77,6 +101,9 @@
},
"d25f3f88261ead2a0079415a26aa6853": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"index": "web.team.guanlixitong.message",
"name": "消息待办",

View File

@ -1,17 +1,25 @@
{
"15db829c1f8a370e0552660dc7dfaefe": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "918545d057d450bf66f48964bf653fe0",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"index": "web.team.jiaocaiziliao.allow",
"name": "权限审批",
"order": "93",
"role": "creator",
"order": "92",
"role": "creator,teacher",
"time": "2024-08-28 10:02:38.221"
}
},
"2336db685278dbd1bea0323ca19092df": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "e20c2a537cbb32b28598ff29c8990ae6",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"index": "web.team.jiaocaiziliao.message",
@ -22,39 +30,55 @@
},
"336a95ad3daa41459416f205fcb2a214": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "08d979f2d0886329f1f44e5053f4f2ed",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"index": "web.team.jiaocaiziliao.apply",
"name": "权限申请",
"order": "92",
"role": "creator",
"order": "91",
"role": "creator,teacher",
"time": "2024-08-28 10:02:38.213"
}
},
"3bff71619be0601340aca525c5ce868c": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "a4c1b4eb862b538a948acbe9501fb9b2",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"index": "web.team.jiaocaiziliao.event",
"name": "事件流",
"order": "91",
"role": "creator",
"order": "93",
"role": "creator,teacher",
"time": "2024-08-28 10:02:38.198"
}
},
"7dcf10436f0a3f7d2df292986fda78c0": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "5a10ef9f6114b771c27e0c279151186b",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"index": "web.team.jiaocaiziliao.qrcode",
"name": "场景码",
"order": "90",
"role": "creator",
"role": "creator,teacher",
"time": "2024-08-28 10:02:38.210"
}
},
"908f00d36bcefeedd146b686e9722adc": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "6279e41bbe8e65600b5f5d2a5ab9e877",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"index": "web.team.jiaocaiziliao.support",
@ -63,17 +87,12 @@
"time": "2024-08-28 10:02:38.205"
}
},
"9d626688b4503479b2486f7d450d127f": {
"meta": {
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.jiaocaiziliao.search",
"name": "搜索",
"time": "2024-08-28 18:59:34.762"
}
},
"a539e711473c35bbdb37923875a24368": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "ee23f7d11906866b1f1b3e791d9be17b",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"index": "web.team.jiaocaiziliao.recent",
@ -84,6 +103,10 @@
},
"a77adb6fd1068b2a1969e38b4977d4d4": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "4e32b8b16bde7aa3c33d9cc5c60098ab",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.jiaocaiziliao.document",
@ -94,6 +117,10 @@
},
"d2d67fa16aa8ff85bd5acf61b1c632ee": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "1c8457e856a32e0f1a2bb2f6b60eb3df",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.jiaocaiziliao.official",
@ -104,6 +131,10 @@
},
"e3c2a7ae4469e3664b27184722b91a20": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "37237da52c3151a3b39245868edc092d",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.jiaocaiziliao.service",
@ -114,6 +145,10 @@
},
"ed416856a9404f238884a165a23c5dac": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "ed0dd7c3b1ed141849832871a04f3cb0",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"index": "web.team.jiaocaiziliao.member",

View File

@ -2,21 +2,23 @@
"098ffee875d4ef07e55cf6d08ad69dd5": {
"meta": {
"_target": [
"cf1a1e28a869cdf700b1f329451f8371"
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "e850b9729832dcaaf7f2c70382bc0b74",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/homework.png",
"index": "web.team.jiaowuxitong.homework",
"name": "家庭作业",
"order": "2",
"order": "1",
"time": "2024-08-06 18:38:58.586"
}
},
"1a3d216c5a854d78045f3d2acacf567b": {
"meta": {
"_target": [
"cf1a1e28a869cdf700b1f329451f8371"
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "c708cf3a7100c56089337b37860835af",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"index": "web.team.jiaowuxitong.apply",
@ -28,6 +30,10 @@
},
"2012c7765aca492cdec6427c9ab24ad9": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "8fdf441551972c333b355a6a0403255e",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"index": "web.team.jiaowuxitong.support",
@ -39,13 +45,14 @@
"42eb12c2731727764a4e27397c526931": {
"meta": {
"_target": [
"cf1a1e28a869cdf700b1f329451f8371"
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "533039cdd9baba2fb809349bd00cb411",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"index": "web.team.jiaowuxitong.member",
"name": "班级成员",
"order": "1",
"order": "80",
"role": "creator,teacher,student,parent",
"time": "2024-08-12 08:56:55.724"
}
@ -53,8 +60,9 @@
"4719bb45bb02427346be9634cc7a8fe3": {
"meta": {
"_target": [
"cf1a1e28a869cdf700b1f329451f8371"
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "90b5128b6ce6c1113ca888960a375f91",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"index": "web.team.jiaowuxitong.qrcode",
@ -66,6 +74,10 @@
},
"7e64183251edf9e9852903554f37a95c": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "4a33b6fd7c80e5734fabe4a6b51f5e55",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"index": "web.team.jiaowuxitong.allow",
@ -78,8 +90,9 @@
"954e1293098e7eba09d20c9869f5fbf0": {
"meta": {
"_target": [
"cf1a1e28a869cdf700b1f329451f8371"
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "373177e63c5db029fcb0c9c664ec2027",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.jiaowuxitong.service",
@ -91,8 +104,9 @@
"c73251765fb5286cea9c8ceefb74530c": {
"meta": {
"_target": [
"cf1a1e28a869cdf700b1f329451f8371"
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "538b610e0cafc4fd6d10a9ee5a1f6f40",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"index": "web.team.jiaowuxitong.event",
@ -104,6 +118,10 @@
},
"dd4a880b9048d00d8d0f8b55562a1491": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "81239d47d3028c91eb994eb8c93c5499",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"index": "web.team.jiaowuxitong.message",
@ -114,6 +132,10 @@
},
"f17ffa67fa176278072580eefc7e9016": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "a037ebd8aac00ecb5fd75558f22e495a",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"index": "web.team.jiaowuxitong.recent",

View File

@ -1,6 +1,10 @@
{
"08f66b55e6a2219682a786a354e0d073": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "75d9229fd41f62fd671dee4d284f76b3",
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"index": "web.team.kaoshixitong.recent",
"name": "最近访问",
@ -10,6 +14,10 @@
},
"57efe30a4d4c35dd54c05f7d9415e3af": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "d3109069ec7a9a7f6606726e5a9b2bf4",
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"index": "web.team.kaoshixitong.member",
"name": "场景成员",
@ -19,6 +27,10 @@
},
"5fc02e6d3bcc0f31a750a38c169fbe08": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "d08786bd09f032e608c515fbd931f8d4",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.kaoshixitong.service",
"name": "服务发现",
@ -28,6 +40,10 @@
},
"6791e4d7e2ee439b8beea5d1c147f251": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "548288bb7c4e9cbe8093704060fbc916",
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"index": "web.team.kaoshixitong.event",
"name": "事件流",
@ -38,6 +54,10 @@
},
"72eb3fc89623556cfa348503328811e1": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "ca7cfd78d79ed9dc1cca44c9aff8178e",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.kaoshixitong.question",
"name": "场景应用",
@ -46,6 +66,10 @@
},
"ab6b14b549c110a29e13f8ea06e75b08": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "08af8961cb058dab4685f29dd58f4acc",
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"index": "web.team.kaoshixitong.qrcode",
"name": "场景码",
@ -56,6 +80,10 @@
},
"d730c38222e45cbdce4729e8460803f2": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "9c20322b25cd353fd44b9771fb2cf2d5",
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"index": "web.team.kaoshixitong.apply",
"name": "权限申请",
@ -66,6 +94,10 @@
},
"e40fff64cf054838cf918d2eeae1cae7": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "b4119165b313418e5acaa26aa435ed70",
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"index": "web.team.kaoshixitong.support",
"name": "客服支持",
@ -75,6 +107,10 @@
},
"eebb336a8af77dee7e8dfd5efb25834e": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "c648e79f19f4134833d5d5bf622571c3",
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"index": "web.team.kaoshixitong.allow",
"name": "权限审批",
@ -85,6 +121,10 @@
},
"efa7c9dc8edbb8935ef079156d4f9071": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "3599ecc84a12db93c4a293ce74e3e7a4",
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"index": "web.team.kaoshixitong.message",
"name": "消息待办",

View File

@ -1,6 +1,25 @@
{
"2d7a4642b57423b336cc23d053eb347b": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "6a3cf25d751f7ca78c4979d148ae794c",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.zaixianketang.lesson",
"name": "章节",
"order": "2",
"time": "2024-09-01 22:47:28.665"
}
},
"4ff09e3f86605fdc9050681f72470d33": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "b2d32aa01e68db2f2f74d346c0e1a6f1",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"index": "web.team.zaixianketang.message",
"name": "消息待办",
@ -8,18 +27,42 @@
"time": "2024-08-28 10:05:04.044"
}
},
"52d02d396244389be96bbac3c543e582": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "f9fd6ff304aceb357944bea5ad9e0c95",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.zaixianketang.course",
"name": "课程",
"order": "1",
"time": "2024-09-01 22:47:28.669"
}
},
"6af91cbf33dbd478e24c3db663e88dfd": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "09bff6964199cb68fb7ce29aee9b84de",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"index": "web.team.zaixianketang.apply",
"name": "权限申请",
"order": "92",
"role": "creator",
"role": "creator,teacher",
"time": "2024-08-28 10:05:04.026"
}
},
"7f48c17bb72a6f8d4ec3124adea5b614": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "1e3637ed11a13f85573087a881491076",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"index": "web.team.zaixianketang.recent",
"name": "最近访问",
@ -29,36 +72,56 @@
},
"96a41adc804b1ab7c4a434a31559f11a": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "f7aba1dc22b0b3be1ac286129e52ccf7",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"index": "web.team.zaixianketang.event",
"name": "事件流",
"order": "91",
"role": "creator",
"role": "creator,teacher",
"time": "2024-08-28 10:05:04.038"
}
},
"ad52eb079362f84a80d1bd5c7d280e2c": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "b9cd95a28a12517c5040f5011697cea3",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"index": "web.team.zaixianketang.qrcode",
"name": "场景码",
"order": "90",
"role": "creator",
"role": "creator,teacher",
"time": "2024-08-28 10:05:04.032"
}
},
"b38dbac90b9a2df29c66b476f77af5d4": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "9e9e98bb431596667168bfaf68771827",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"index": "web.team.zaixianketang.allow",
"name": "权限审批",
"order": "93",
"role": "creator",
"role": "creator,teacher",
"time": "2024-08-28 10:05:04.060"
}
},
"bf50aebe8e103b7e627bc2222a4a7a43": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "5cd0539df786bb4046edb5ac3b263957",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"index": "web.team.zaixianketang.support",
"name": "客服支持",
@ -68,6 +131,11 @@
},
"c082a4be5e1bfc0486ea1ca4affb5ff8": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "dc727d6cbfdfe7af6d009e7b2c4eeb9e",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"index": "web.team.zaixianketang.service",
"name": "服务发现",
@ -77,6 +145,11 @@
},
"fcbe63f1af465ccde7cde55736373714": {
"meta": {
"_target": [
"8a3cfc3e956cfb17ce75e32281293dd6"
],
"command_uid": "e860efcd3ce5c14988bf925f95455325",
"enable": "true",
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"index": "web.team.zaixianketang.member",
"name": "场景成员",