This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-08-12 20:17:30 +08:00
parent 41ed1f8ac7
commit 251f90e3c0
11 changed files with 55 additions and 67 deletions

View File

@ -13,7 +13,7 @@ func (s class) Inputs(m *ice.Message, arg ...string) {
switch arg[0] {
case model.GRADE:
y := kit.Int(kit.Split(m.Time(), "-")[0])
for i := 0; i < 10; i++ {
for i := 0; i < 20; i++ {
m.Push(arg[0], kit.Format("%d级", y))
y--
}

View File

@ -1,14 +0,0 @@
package jiaowuxitong
import "shylinux.com/x/ice"
type classUser struct {
Tables
userClass userClass
}
func (s classUser) List(m *ice.Message, arg ...string) {
m.Cmdy(s.userClass, s.userClass.User, arg).Display("")
}
func init() { ice.TeamCtxCmd(classUser{}) }

View File

@ -1,13 +0,0 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { var USER_CLASS_ROLE = "user_class_role"
if (msg.IsDetail()) { can.onexport.share_title(can, msg, USER_CLASS_ROLE); return msg.Show(can) }
can.onimport.itemcards(can, msg, function(value) { value._style = [value[USER_CLASS_ROLE]]
return [
{view: html.TITLE, list: [{text: value.user_name},
{text: [can.user.transValue(can, value, USER_CLASS_ROLE), "", [aaa.ROLE, value[USER_CLASS_ROLE]]]},
]},
{view: html.STATUS, list: [{text: value.uid.slice(0, 6)}, {text: can.base.TimeTrim(value.created_at)}]},
]
})
},
})

View File

@ -8,10 +8,6 @@ import (
"shylinux.com/x/education/src/jiaowuxitong/model"
)
type Tables struct {
gonganxitong.Tables
list string `name:"list class_uid uid auto" role:"void"`
}
type Table struct {
gonganxitong.Table
list string `name:"list class_uid uid auto" role:"void"`
@ -41,6 +37,26 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
kit.If(key == model.USER_CLASS_ROLE, func() { value = UserClassRole(kit.Int(value)).String() })
return value
})
s.Table.RewriteAppend(m)
return s.Table.RewriteAppend(m)
}
func (s Table) checkRole(m *ice.Message, arg ...UserClassRole) bool {
kit.If(len(arg) == 0, func() { arg = append(arg, UserClassTeacher) })
role := UserClassRole(kit.Int(m.Cmd(userClass{}, s.Select, m.OptionSimple(model.CLASS_UID, model.USER_UID)).Append(model.ROLE)))
for _, v := range append(arg, UserClassCreator) {
if role == v {
return true
}
}
return !m.WarnNotRight(true, role.String())
}
func (s Table) recordEvent(m *ice.Message, info string, arg ...string) *ice.Message {
s.Table.RecordEvent(m, m.Option(model.CLASS_UID), info, kit.Select(m.Option(model.UID), arg, 0))
return m
}
type Tables struct {
Table
portal string `data:"true"`
}
func (s Tables) BeforeMigrate(m *ice.Message, arg ...string) {}

View File

@ -12,14 +12,17 @@ type homework struct {
class class
userClass userClass
portal string `data:"true"`
create string `name:"create content*" role:"void"`
create string `name:"create title* content*" role:"void"`
}
func (s homework) Create(m *ice.Message, arg ...string) {
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.USER_UID, model.CLASS_UID))...)
if s.checkRole(m) {
s.Table.Create(m, kit.Simple(arg, m.OptionSimple(model.CLASS_UID, model.USER_UID))...)
s.recordEvent(m, m.Trans("create homework ", "创建家庭作业 ")+m.Option(model.TITLE), m.Result())
}
}
func (s homework) List(m *ice.Message, arg ...string) {
s.TablesWithRole(m, arg, s, s.userClass, s.class, model.CONTENT).Display("")
s.TablesWithRole(m, arg, s.userClass, s.class, s, model.TITLE, model.CONTENT).Display("")
}
func init() { ice.TeamCtxCmd(homework{}) }

View File

@ -1,14 +1,12 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
if (msg.IsDetail()) { var value = msg.TableDetail(); msg.Option("_share_content", value.content)
msg.Option("_share_title", can.base.trimPrefix(value.created_at.split(" ")[0], can.base.Time(null, "%y-")))
return msg.Show(can)
}
if (msg.IsDetail()) { var value = msg.TableDetail(); msg.Option("_share_title", value.title), msg.Option("_share_content", value.content) }
can.onimport.itemcards(can, msg, function(value) { return [
{view: html.TITLE, list: [{text: value.user_name},
{text: [can.user.transValue(can, value, "user_class_role"), "", aaa.ROLE]},
{view: html.TITLE, list: [{text: value.title}]},
{view: html.STATUS, list: [
{text: value.uid.slice(0, 6)}, {text: can.base.TimeTrim(value.created_at)},
{text: value.user_name}, {text: [can.user.transValue(can, value, "user_class_role"), "", [aaa.ROLE, can.onimport.roleStyle(can, value, "user_class_role")]]},
]},
{view: html.STATUS, list: [{text: value.uid.slice(0, 6)}, {text: can.base.TimeTrim(value.created_at)},]},
{view: html.OUTPUT, list: [{text: value.content}]},
] })
},

View File

@ -7,7 +7,7 @@ const (
NAME = "name"
TYPE = "type"
ROLE = "role"
GRADE = "grade"
TITLE = "title"
CONTENT = "content"
USER_UID = "user_uid"
USER_CLASS_ROLE = "user_class_role"
@ -17,6 +17,7 @@ const (
SCHOOL_UID = "school_uid"
SCHOOL_NAME = "school_name"
CITY_UID = "city_uid"
GRADE = "grade"
)
type UserClass struct {
@ -27,21 +28,22 @@ type UserClass struct {
}
type Class struct {
db.ModelWithUID
SchoolUID string `gorm:"type:char(32)"`
SchoolUID string `gorm:"type:char(32);index"`
Grade string `gorm:"type:char(32)"`
Name string `gorm:"type:varchar(256)"`
Name string `gorm:"type:char(64)"`
Type uint8
}
type School struct {
db.ModelWithUID
CityUID string `gorm:"type:char(32);index"`
Name string `gorm:"type:varchar(256)"`
CityUID string `gorm:"type:char(32);index:idx_city"`
Name string `gorm:"type:char(64);index:idx_city"`
Info string
}
type Homework struct {
db.ModelWithUID
ClassUID string `gorm:"type:char(32)"`
ClassUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
Title string `gorm:"type:char(64)"`
Content string
}

View File

@ -6,7 +6,7 @@ type Portal struct {
gonganxitong.Portal
name string `data:"教务系统"`
list string `name:"list class_uid index uid auto" role:"void"`
placeCreate string `name:"placeCreate city_name* school_name* grade*:select name*" role:"void"`
placeCreate string `name:"placeCreate city_name* school_name* grade*:select class_name*" role:"void"`
}
func init() {

View File

@ -1,23 +1,19 @@
{
"service": "系统服务",
"portal": "教务系统",
"placeCreate": "创建班级",
"placeRemove": "删除班级",
"classUser": "班级成员",
"member": "班级成员",
"homework": "家庭作业",
"icons": {
"service": "https://img.icons8.com/officel/80/activity-grid.png",
"classUser": "https://img.icons8.com/officel/80/crowd.png",
"homework": "https://img.icons8.com/officel/80/homework.png"
},
"input": {
"My Class": "我的班级",
"grade": "入学年份",
"user_class_role": "用户角色",
"class_uid": "班级",
"class_name": "班级名称",
"class_type": "班级类型",
"school_name": "学校名称"
"school_name": "学校名称",
"grade": "入学年份"
},
"value": {
"user_class_role": {
@ -25,7 +21,11 @@
"visitor": "访客",
"teacher": "老师",
"student": "学生",
"parent": "家长"
"parent": "家长",
"style": {
"creator": "danger",
"teacher": "danger"
}
},
"class_type": {
"term": "学期制",

View File

@ -1,7 +1,3 @@
chapter "教务系统"
field web.chat.wx.access
field web.code.mysql.client
field web.code.mysql.query args `mysql jiaowuxitong`
field web.code.db.database
field web.code.db.driver
field web.code.db.models

View File

@ -13,10 +13,11 @@ type userClass struct {
}
func (s userClass) User(m *ice.Message, arg ...string) {
s.FieldsWithCreatedAT(m, s, model.USER_UID, model.ROLE)
if len(arg) == 1 {
s.Select(m, model.CLASS_UID, arg[0])
} else if len(arg) == 2 {
s.Select(m, model.CLASS_UID, arg[0], model.UID, arg[1])
s.SelectDetail(m, model.CLASS_UID, arg[0], model.UID, arg[1])
} else {
return
}
@ -27,13 +28,12 @@ func (s userClass) User(m *ice.Message, arg ...string) {
func (s userClass) List(m *ice.Message, arg ...string) {
s.Tables(m, s.class, s.school).FieldsWithCreatedAT(m, s,
model.CLASS_NAME, model.CLASS_TYPE, model.USER_CLASS_ROLE,
model.CITY_UID, model.SCHOOL_NAME, model.GRADE,
model.CLASS_UID,
model.CITY_UID, model.SCHOOL_NAME, model.GRADE, model.CLASS_UID,
)
if len(arg) == 1 {
s.Select(m, model.USER_UID, arg[0])
} else if len(arg) == 2 {
s.SelectDetail(m, model.USER_UID, arg[0], s.Key(s.class, model.UID), arg[1])
s.SelectDetail(m, model.USER_UID, arg[0], s.Key(s, model.CLASS_UID), arg[1])
} else {
return
}