mirror of
https://shylinux.com/x/education
synced 2025-07-02 13:41:19 +08:00
opt some
This commit is contained in:
parent
a190cf91bf
commit
adf4897156
@ -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 }
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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] }
|
21
src/jiaocaiziliao/library.go
Normal file
21
src/jiaocaiziliao/library.go
Normal 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] }
|
@ -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{}) }
|
||||
|
@ -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))
|
||||
}
|
||||
|
||||
|
@ -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{})})
|
||||
}
|
||||
|
@ -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": "出版社"
|
||||
}
|
||||
|
@ -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] }
|
16
src/jiaocaiziliao/userLibrary.go
Normal file
16
src/jiaocaiziliao/userLibrary.go
Normal 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
|
@ -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{})}
|
||||
}
|
||||
|
@ -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("")
|
||||
|
@ -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 }
|
||||
|
@ -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 }
|
||||
|
||||
|
@ -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] }
|
||||
|
@ -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
|
||||
|
@ -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{})})
|
||||
}
|
||||
|
@ -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": {
|
||||
|
@ -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{}) }
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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) {}
|
||||
|
@ -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] }
|
||||
|
@ -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{}) }
|
||||
|
@ -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
|
||||
|
@ -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{})})
|
||||
}
|
||||
|
@ -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": {
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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": "消息待办",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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": "消息待办",
|
||||
|
@ -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": "场景成员",
|
||||
|
Loading…
x
Reference in New Issue
Block a user