mirror of
https://shylinux.com/x/education
synced 2025-04-25 18:18:06 +08:00
opt some
This commit is contained in:
parent
f8e3e79d37
commit
912e0ad35a
@ -1,2 +1,4 @@
|
|||||||
|
~web.code.db
|
||||||
|
config database driver mysql
|
||||||
~ssh
|
~ssh
|
||||||
source local.shy
|
source local.shy
|
||||||
|
7
go.mod
7
go.mod
@ -2,4 +2,9 @@ module shylinux.com/x/education
|
|||||||
|
|
||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require shylinux.com/x/ice v1.5.40 // indirect
|
require (
|
||||||
|
shylinux.com/x/ice v1.5.40
|
||||||
|
shylinux.com/x/icebergs v1.9.38
|
||||||
|
shylinux.com/x/mysql-story v0.6.13
|
||||||
|
shylinux.com/x/toolkits v1.0.12
|
||||||
|
)
|
||||||
|
49
go.sum
49
go.sum
@ -1,11 +1,60 @@
|
|||||||
|
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
|
||||||
|
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||||
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||||
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
|
||||||
|
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
|
||||||
|
gorm.io/driver/sqlite v1.5.6/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
|
||||||
|
gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||||
|
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
||||||
|
gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg=
|
||||||
|
gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
||||||
shylinux.com/x/go-git/v5 v5.6.7 h1:WD5QSco7m3QooPCgdvQ6/GyGIFPun8C+hex5N41LYlk=
|
shylinux.com/x/go-git/v5 v5.6.7 h1:WD5QSco7m3QooPCgdvQ6/GyGIFPun8C+hex5N41LYlk=
|
||||||
shylinux.com/x/go-git/v5 v5.6.7/go.mod h1:Qb0lA+uIrofZg8NQerhYcJHgGWixFqvS6p3aJ/L5Nlk=
|
shylinux.com/x/go-git/v5 v5.6.7/go.mod h1:Qb0lA+uIrofZg8NQerhYcJHgGWixFqvS6p3aJ/L5Nlk=
|
||||||
shylinux.com/x/go-qrcode v0.0.3 h1:RMo+Vidbgq3HatLBj7DDXcTbTLFUwzis5K7TqBkD38U=
|
shylinux.com/x/go-qrcode v0.0.3 h1:RMo+Vidbgq3HatLBj7DDXcTbTLFUwzis5K7TqBkD38U=
|
||||||
shylinux.com/x/go-qrcode v0.0.3/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po=
|
shylinux.com/x/go-qrcode v0.0.3/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po=
|
||||||
|
shylinux.com/x/go-sql-mysql v0.0.2/go.mod h1:lHjRMZz5Lii6U+49fhkbCWgsnL+yux54SYJYWqASN8Y=
|
||||||
shylinux.com/x/ice v1.5.40 h1:OC++Fb1CxOU1R0Vlrfm+J9pf1mg5uH1n1trXFIHQHaw=
|
shylinux.com/x/ice v1.5.40 h1:OC++Fb1CxOU1R0Vlrfm+J9pf1mg5uH1n1trXFIHQHaw=
|
||||||
shylinux.com/x/ice v1.5.40/go.mod h1:nYLBfYfOacaxvIRgD4ryknBJTqUIZD0zkV72it7iHqU=
|
shylinux.com/x/ice v1.5.40/go.mod h1:nYLBfYfOacaxvIRgD4ryknBJTqUIZD0zkV72it7iHqU=
|
||||||
shylinux.com/x/icebergs v1.9.38 h1:LS4n8KE3qV8uvdpWwnrgStgkU90f6Ww6prSpv7Eztyw=
|
shylinux.com/x/icebergs v1.9.38 h1:LS4n8KE3qV8uvdpWwnrgStgkU90f6Ww6prSpv7Eztyw=
|
||||||
shylinux.com/x/icebergs v1.9.38/go.mod h1:zLsVvLKuFEyFRwKoa3li75nSqbJo/GVIYacAQVdTsxA=
|
shylinux.com/x/icebergs v1.9.38/go.mod h1:zLsVvLKuFEyFRwKoa3li75nSqbJo/GVIYacAQVdTsxA=
|
||||||
|
shylinux.com/x/mysql-story v0.6.13 h1:+PCSRK9IoaeNU8/zonq1jFZY5UW2dKpqTANyFUzLxAI=
|
||||||
|
shylinux.com/x/mysql-story v0.6.13/go.mod h1:HIBUuqZ/kQqwiFtPpekaiJB98qij+d9uhmnkAfahDXw=
|
||||||
shylinux.com/x/toolkits v0.7.10/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
|
shylinux.com/x/toolkits v0.7.10/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
|
||||||
shylinux.com/x/toolkits v1.0.12 h1:dwskBNtOLBfis1XtjEGfJhrjBXiwga3M/wNCERsXsyo=
|
shylinux.com/x/toolkits v1.0.12 h1:dwskBNtOLBfis1XtjEGfJhrjBXiwga3M/wNCERsXsyo=
|
||||||
shylinux.com/x/toolkits v1.0.12/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
|
shylinux.com/x/toolkits v1.0.12/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
|
||||||
|
26
src/jiaowuxitong/class.go
Normal file
26
src/jiaowuxitong/class.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package jiaowuxitong
|
||||||
|
|
||||||
|
import (
|
||||||
|
"shylinux.com/x/ice"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Class struct {
|
||||||
|
Table
|
||||||
|
create string `name:"create school_uid* grade* name*"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Class) Inputs(m *ice.Message, arg ...string) {
|
||||||
|
switch arg[0] {
|
||||||
|
case mdb.NAME:
|
||||||
|
m.Push(arg[0], "高一二班")
|
||||||
|
m.Push(arg[0], "高二三班")
|
||||||
|
m.Push(arg[0], "初一一班")
|
||||||
|
m.Push(arg[0], "初一二班")
|
||||||
|
m.Push(arg[0], "一年级一班")
|
||||||
|
default:
|
||||||
|
s.Table.Inputs(m, arg...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { ice.Cmd(prefixKey(), Class{}) }
|
54
src/jiaowuxitong/common.go
Normal file
54
src/jiaowuxitong/common.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package jiaowuxitong
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"shylinux.com/x/ice"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
"shylinux.com/x/icebergs/base/web"
|
||||||
|
kit "shylinux.com/x/toolkits"
|
||||||
|
|
||||||
|
"shylinux.com/x/education/src/jiaowuxitong/model"
|
||||||
|
"shylinux.com/x/mysql-story/src/db"
|
||||||
|
_ "shylinux.com/x/mysql-story/src/db/mysql"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Table struct {
|
||||||
|
db.Table
|
||||||
|
create string `name:"create name*"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Table) Init(m *ice.Message, arg ...string) {
|
||||||
|
kit.If(m.Config(web.PORTAL) == ice.TRUE, func() { m.GoSleep("30ms", func() { portal{}.Show(m) }) })
|
||||||
|
}
|
||||||
|
func (s Table) Inputs(m *ice.Message, arg ...string) {
|
||||||
|
switch arg[0] {
|
||||||
|
case model.USER_UID, model.CLASS_UID, model.SCHOOL_UID:
|
||||||
|
m.Optionv(mdb.SELECT, model.UID, model.NAME)
|
||||||
|
m.Cmdy(m.Prefix(strings.TrimSuffix(arg[0], "_uid"))).RenameAppend(model.UID, arg[0])
|
||||||
|
case GRADE:
|
||||||
|
y := kit.Int(kit.Split(m.Time(), "-")[0])
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
m.Push(arg[0], kit.Format("%d级", y))
|
||||||
|
y--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (s Table) LeftJoin(target ice.Any) string {
|
||||||
|
model, models := "", ""
|
||||||
|
switch target := target.(type) {
|
||||||
|
case string:
|
||||||
|
model = target
|
||||||
|
default:
|
||||||
|
model = kit.LowerCapital(kit.Select("", kit.Split(reflect.TypeOf(target).String(), "."), -1))
|
||||||
|
}
|
||||||
|
if kit.HasSuffix(model, "s") {
|
||||||
|
models = model + "es"
|
||||||
|
} else {
|
||||||
|
models = model + "s"
|
||||||
|
}
|
||||||
|
return kit.Format("left join %s on %s_uid = %s.uid", models, model, models)
|
||||||
|
}
|
||||||
|
|
||||||
|
func prefixKey() string { return kit.Keys("web.team", kit.PathName(-1), kit.FileName(-1)) }
|
13
src/jiaowuxitong/homework.go
Normal file
13
src/jiaowuxitong/homework.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package jiaowuxitong
|
||||||
|
|
||||||
|
import "shylinux.com/x/ice"
|
||||||
|
|
||||||
|
type homework struct {
|
||||||
|
Table
|
||||||
|
portal string `data:"true"`
|
||||||
|
driver string `data:"mysql"`
|
||||||
|
models string `data:"homework"`
|
||||||
|
create string `name:"create class_uid* content*"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { ice.Cmd(prefixKey(), homework{}) }
|
52
src/jiaowuxitong/model/model.go
Normal file
52
src/jiaowuxitong/model/model.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"shylinux.com/x/ice"
|
||||||
|
"shylinux.com/x/mysql-story/src/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
UID = "uid"
|
||||||
|
NAME = "name"
|
||||||
|
USER_UID = "user_uid"
|
||||||
|
USER_NAME = "user_name"
|
||||||
|
CLASS_UID = "class_uid"
|
||||||
|
CLASS_NAME = "class_name"
|
||||||
|
SCHOOL_UID = "school_uid"
|
||||||
|
SCHOOL_NAME = "school_name"
|
||||||
|
)
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
db.ModelWithUID
|
||||||
|
Name string `gorm:"type:char(32)"`
|
||||||
|
}
|
||||||
|
type UserClass struct {
|
||||||
|
db.Model
|
||||||
|
UserUID string `gorm:"type:char(32);index"`
|
||||||
|
ClassUID string `gorm:"type:char(32)"`
|
||||||
|
}
|
||||||
|
type Class struct {
|
||||||
|
db.ModelWithUID
|
||||||
|
SchoolUID string `gorm:"type:char(32)"`
|
||||||
|
Grade string `gorm:"type:char(32)"`
|
||||||
|
Name string `gorm:"type:varchar(256)"`
|
||||||
|
}
|
||||||
|
type School struct {
|
||||||
|
db.ModelWithUID
|
||||||
|
Name string `gorm:"type:varchar(256)"`
|
||||||
|
Address string `gorm:"type:varchar(4096)"`
|
||||||
|
Info string
|
||||||
|
}
|
||||||
|
type Homework struct {
|
||||||
|
db.ModelWithUID
|
||||||
|
ClassUID string `gorm:"type:char(32);index"`
|
||||||
|
Content string
|
||||||
|
}
|
||||||
|
|
||||||
|
type models struct{ db.Models }
|
||||||
|
|
||||||
|
func (s models) Init(m *ice.Message, arg ...string) {
|
||||||
|
s.Models.Register(m, &User{}, &UserClass{}, &Class{}, &School{}, &Homework{})
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { ice.Cmd("web.team.education.jiaowuxitong.models", models{}) }
|
1
src/jiaowuxitong/model/model.sql
Normal file
1
src/jiaowuxitong/model/model.sql
Normal file
@ -0,0 +1 @@
|
|||||||
|
CREATE DATABASE IF NOT EXISTS jiaowuxitong CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
59
src/jiaowuxitong/portal.go
Normal file
59
src/jiaowuxitong/portal.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package jiaowuxitong
|
||||||
|
|
||||||
|
import (
|
||||||
|
"shylinux.com/x/ice"
|
||||||
|
"shylinux.com/x/icebergs/base/aaa"
|
||||||
|
"shylinux.com/x/icebergs/base/ctx"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
"shylinux.com/x/toolkits"
|
||||||
|
|
||||||
|
"shylinux.com/x/education/src/jiaowuxitong/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type portal struct {
|
||||||
|
ice.Hash
|
||||||
|
Class Class
|
||||||
|
userClass userClass
|
||||||
|
export string `data:"true"`
|
||||||
|
short string `data:"index"`
|
||||||
|
field string `data:"time,name,icons,index,order,enable"`
|
||||||
|
list string `name:"list class_uid index uid auto" role:"void"`
|
||||||
|
classCreate string `name:"classCreate school_uid* grade* name*" role:"void"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s portal) Inputs(m *ice.Message, arg ...string) {
|
||||||
|
s.Class.Inputs(m, arg...)
|
||||||
|
}
|
||||||
|
func (s portal) List(m *ice.Message, arg ...string) {
|
||||||
|
if m.Display(""); m.Option(model.USER_UID) == "" {
|
||||||
|
m.EchoInfoButton("please login", aaa.LOGIN)
|
||||||
|
} else if len(arg) == 0 {
|
||||||
|
m.Cmdy(s.userClass, s.userClass.MyClass, m.Option(model.USER_UID)).Action(s.ClassCreate, aaa.LOGIN).PushAction(s.ClassRemove)
|
||||||
|
kit.If(m.Length() == 0, func() { m.EchoInfoButton("please create class") })
|
||||||
|
m.StatusTimeCount(m.OptionSimple(model.USER_UID))
|
||||||
|
} else if len(arg) == 1 {
|
||||||
|
s.Hash.List(m, arg[1:]...).SortInt(mdb.ORDER)
|
||||||
|
} else if len(arg) == 2 {
|
||||||
|
m.Cmdy(arg[1]).PushAction().Action()
|
||||||
|
} else {
|
||||||
|
m.FieldsSetDetail()
|
||||||
|
m.Cmdy(arg[1], mdb.SELECT, "uid = ?", arg[2]).PushAction().Action()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (s portal) ClassCreate(m *ice.Message, arg ...string) {
|
||||||
|
if !m.Cmdy(s.Class, s.Class.Create, arg).IsErr() {
|
||||||
|
m.Cmdy(s.userClass, s.userClass.Create, m.OptionSimple(model.USER_UID), model.CLASS_UID, m.Result())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (s portal) ClassRemove(m *ice.Message, arg ...string) {
|
||||||
|
if !m.Cmdy(s.Class, s.Class.Remove, arg).IsErr() {
|
||||||
|
m.Cmdy(s.userClass, s.userClass.Remove, m.OptionSimple(model.USER_UID), model.CLASS_UID, m.Result())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { ice.TeamCtxCmd(portal{}) }
|
||||||
|
|
||||||
|
func (s portal) Show(m *ice.Message, arg ...string) {
|
||||||
|
cmd := m.GetCommand()
|
||||||
|
m.Cmd(s, s.Create, mdb.NAME, cmd.Help, mdb.ICONS, cmd.Icon, ctx.INDEX, m.PrefixKey())
|
||||||
|
}
|
10
src/jiaowuxitong/portal.js
Normal file
10
src/jiaowuxitong/portal.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Volcanos(chat.ONIMPORT, {
|
||||||
|
_init: function(can, msg) { msg.Dump(can) },
|
||||||
|
})
|
||||||
|
Volcanos(chat.ONACTION, {
|
||||||
|
login: function(event, can) {
|
||||||
|
can.user.input(event, can, ["user_uid"], function(data) {
|
||||||
|
can.misc.Cookie(can, data)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
21
src/jiaowuxitong/portal.json
Normal file
21
src/jiaowuxitong/portal.json
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"school": "学校",
|
||||||
|
"class": "班级",
|
||||||
|
"homework": "家庭作业",
|
||||||
|
"user": "用户",
|
||||||
|
"classCreate": "创建班级",
|
||||||
|
"input": {
|
||||||
|
"migrate": "迁移",
|
||||||
|
"uid": "主键",
|
||||||
|
"info": "信息",
|
||||||
|
"address": "地址",
|
||||||
|
"grade": "入学年份",
|
||||||
|
"school_uid": "学校",
|
||||||
|
"school_name": "学校名称",
|
||||||
|
"class_uid": "班级",
|
||||||
|
"class_name": "班级名称",
|
||||||
|
"homework_uid": "作业",
|
||||||
|
"user_uid": "用户",
|
||||||
|
"user_name": "用户昵称"
|
||||||
|
}
|
||||||
|
}
|
13
src/jiaowuxitong/portal.shy
Normal file
13
src/jiaowuxitong/portal.shy
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
chapter "教务系统"
|
||||||
|
refer `
|
||||||
|
日照市学校 http://jyj.rizhao.gov.cn/art/2019/4/29/art_33083_5757467.html
|
||||||
|
GORM https://gorm.io/docs/indexes.html
|
||||||
|
`
|
||||||
|
|
||||||
|
field web.code.db.models
|
||||||
|
field web.code.db.driver
|
||||||
|
field web.code.db.database
|
||||||
|
field web.code.mysql.client
|
||||||
|
field web.code.mysql.query args `mysql jiaowuxitong`
|
||||||
|
field web.code.sqlite.client args `var/db/web.code.db.sqlite.db`
|
||||||
|
field web.code.golang.runtime
|
14
src/jiaowuxitong/school.go
Normal file
14
src/jiaowuxitong/school.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package jiaowuxitong
|
||||||
|
|
||||||
|
import "shylinux.com/x/ice"
|
||||||
|
|
||||||
|
const (
|
||||||
|
GRADE = "grade"
|
||||||
|
)
|
||||||
|
|
||||||
|
type school struct {
|
||||||
|
Table
|
||||||
|
create string `name:"create name* info address"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { ice.Cmd(prefixKey(), school{}) }
|
7
src/jiaowuxitong/user.go
Normal file
7
src/jiaowuxitong/user.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package jiaowuxitong
|
||||||
|
|
||||||
|
import "shylinux.com/x/ice"
|
||||||
|
|
||||||
|
type user struct{ Table }
|
||||||
|
|
||||||
|
func init() { ice.Cmd(prefixKey(), user{}) }
|
22
src/jiaowuxitong/userClass.go
Normal file
22
src/jiaowuxitong/userClass.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package jiaowuxitong
|
||||||
|
|
||||||
|
import (
|
||||||
|
"shylinux.com/x/ice"
|
||||||
|
"shylinux.com/x/icebergs/base/mdb"
|
||||||
|
)
|
||||||
|
|
||||||
|
type userClass struct {
|
||||||
|
Table
|
||||||
|
Class Class
|
||||||
|
school school
|
||||||
|
create string `name:"create user_uid* class_uid*"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s userClass) Remove(m *ice.Message, arg ...string) {
|
||||||
|
}
|
||||||
|
func (s userClass) MyClass(m *ice.Message, arg ...string) {
|
||||||
|
m.Optionv(mdb.SELECT, "schools.name AS school_name", "grade", "classes.name AS class_name", "class_uid", "school_uid")
|
||||||
|
s.Show(m, s.Open(m).Select(m.Optionv(mdb.SELECT)).Joins(s.LeftJoin(s.Class)).Joins(s.LeftJoin(s.school)).Where("user_uid = ?", arg[0]))
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { ice.Cmd(prefixKey(), userClass{}) }
|
@ -1,6 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "shylinux.com/x/ice"
|
import (
|
||||||
|
"shylinux.com/x/ice"
|
||||||
|
|
||||||
|
_ "shylinux.com/x/education/src/jiaowuxitong"
|
||||||
|
)
|
||||||
|
|
||||||
func main() { print(ice.Run()) }
|
func main() { print(ice.Run()) }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user