From 027834cad264297ee0a6e05952e8c1835604c75c Mon Sep 17 00:00:00 2001 From: shy Date: Tue, 27 May 2025 08:14:58 +0800 Subject: [PATCH] opt some --- go.mod | 3 ++ go.sum | 9 +++++ src/main.go | 12 +++--- src/peixunguanli/common.go | 41 +++++++++++++++++++++ src/peixunguanli/course.go | 17 +++++++++ src/peixunguanli/course.png | Bin 0 -> 4010 bytes src/peixunguanli/evaluation.go | 17 +++++++++ src/peixunguanli/evaluation.png | Bin 0 -> 4520 bytes src/peixunguanli/feedback.go | 17 +++++++++ src/peixunguanli/feedback.png | Bin 0 -> 4231 bytes src/peixunguanli/model/model.go | 51 ++++++++++++++++++++++++++ src/peixunguanli/plan.go | 15 ++++++++ src/peixunguanli/plan.js | 9 +++++ src/peixunguanli/plan.png | Bin 0 -> 4659 bytes src/peixunguanli/portal.go | 13 +++++++ src/peixunguanli/portal.json | 39 ++++++++++++++++++++ src/peixunguanli/record.go | 17 +++++++++ src/peixunguanli/record.png | Bin 0 -> 4471 bytes src/peixunguanli/train.go | 23 ++++++++++++ src/peixunguanli/userTrain.go | 15 ++++++++ src/yingxiaotuiguang/common.go | 41 +++++++++++++++++++++ src/yingxiaotuiguang/model/model.go | 34 +++++++++++++++++ src/yingxiaotuiguang/portal.go | 13 +++++++ src/yingxiaotuiguang/portal.json | 31 ++++++++++++++++ src/yingxiaotuiguang/product.go | 15 ++++++++ src/yingxiaotuiguang/product.js | 9 +++++ src/yingxiaotuiguang/promotion.go | 23 ++++++++++++ src/yingxiaotuiguang/userPromotion.go | 15 ++++++++ usr/local/export/mdb.export/hash.json | 14 +++++++ 29 files changed, 487 insertions(+), 6 deletions(-) create mode 100644 src/peixunguanli/common.go create mode 100644 src/peixunguanli/course.go create mode 100644 src/peixunguanli/course.png create mode 100644 src/peixunguanli/evaluation.go create mode 100644 src/peixunguanli/evaluation.png create mode 100644 src/peixunguanli/feedback.go create mode 100644 src/peixunguanli/feedback.png create mode 100644 src/peixunguanli/model/model.go create mode 100644 src/peixunguanli/plan.go create mode 100644 src/peixunguanli/plan.js create mode 100644 src/peixunguanli/plan.png create mode 100644 src/peixunguanli/portal.go create mode 100644 src/peixunguanli/portal.json create mode 100644 src/peixunguanli/record.go create mode 100644 src/peixunguanli/record.png create mode 100644 src/peixunguanli/train.go create mode 100644 src/peixunguanli/userTrain.go create mode 100644 src/yingxiaotuiguang/common.go create mode 100644 src/yingxiaotuiguang/model/model.go create mode 100644 src/yingxiaotuiguang/portal.go create mode 100644 src/yingxiaotuiguang/portal.json create mode 100644 src/yingxiaotuiguang/product.go create mode 100644 src/yingxiaotuiguang/product.js create mode 100644 src/yingxiaotuiguang/promotion.go create mode 100644 src/yingxiaotuiguang/userPromotion.go diff --git a/go.mod b/go.mod index f58ab47..f0cdfdd 100644 --- a/go.mod +++ b/go.mod @@ -21,6 +21,8 @@ require ( ) require ( + 2025-dev.shylinux.com/x/20250211-service v0.0.6 // indirect + 2025-dev.shylinux.com/x/20250215-cluster v0.0.7 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/emersion/go-imap v1.2.1 // indirect @@ -44,4 +46,5 @@ require ( modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.5.0 // indirect modernc.org/sqlite v1.23.1 // indirect + shylinux.com/x/operation v0.0.14 // indirect ) diff --git a/go.sum b/go.sum index abee4bd..a4aa0c6 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,8 @@ +2025-dev.shylinux.com/x/20250211-service v0.0.6 h1:FOQ6Z+eHsY+3qfIoKHjblbIs6BUyHPq1xGK1wvFdfXo= +2025-dev.shylinux.com/x/20250211-service v0.0.6/go.mod h1:iHH7uHRP7WasG19pNjujlXwZFjJqzX3dS0/T1imfsj0= +2025-dev.shylinux.com/x/20250215-cluster v0.0.6/go.mod h1:4sbNfB+nBVmIpRSzVlY+uiEQv44JdPfwwBpwWzbQktw= +2025-dev.shylinux.com/x/20250215-cluster v0.0.7 h1:GhQImaF6RbliJ6467gdeB4AVzCNyz5LwmA9AeCphEvo= +2025-dev.shylinux.com/x/20250215-cluster v0.0.7/go.mod h1:rhNacwQogLrmiNkmoptqpKY9ieRXAhVHenHwZRcdBB8= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= @@ -186,14 +191,18 @@ shylinux.com/x/go-qrcode v0.0.3/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4O shylinux.com/x/go-sql-mysql v0.0.2/go.mod h1:lHjRMZz5Lii6U+49fhkbCWgsnL+yux54SYJYWqASN8Y= shylinux.com/x/golang-story v0.0.32 h1:7xu28iREL2cuZzf80luJwI9BWptow+ME00L1lgyjmDI= shylinux.com/x/golang-story v0.0.32/go.mod h1:NsI5fULu3q7o2b+VzZ5tiJ3+0pUTjE9DdQxa870htmw= +shylinux.com/x/ice v1.5.72/go.mod h1:ouTMN0stkJu1RGAQrMHrGj/BqDynyD1VV53shR9zQm4= shylinux.com/x/ice v1.5.73/go.mod h1:uGI73gYkk+FiJt5qmy/aYhoKRJ4wobcJk3WrPGh8Waw= shylinux.com/x/ice v1.5.74 h1:5hTPmchO79b1d2+/DwBDLiG2WkTL65G/hOEAcGJVeB8= shylinux.com/x/ice v1.5.74/go.mod h1:/XAib8Ha+z6jzLRs2Pig+qxDx4C8dT8Vfaq2InJ/lkU= +shylinux.com/x/icebergs v1.9.73/go.mod h1:3Bdp3tjzw+hUKJF+kR8pfsrbjAf72DVZmCaE8/MPFtk= shylinux.com/x/icebergs v1.9.75/go.mod h1:3Bdp3tjzw+hUKJF+kR8pfsrbjAf72DVZmCaE8/MPFtk= shylinux.com/x/icebergs v1.9.76 h1:SHOTbiO+jh09GEFzoo8t8kmR1BCu+zkNCpdfxPCLeu0= shylinux.com/x/icebergs v1.9.76/go.mod h1:3Bdp3tjzw+hUKJF+kR8pfsrbjAf72DVZmCaE8/MPFtk= shylinux.com/x/mysql-story v0.6.32 h1:Q274WFJ09ocnf8nhlQnKr02FMMdPYBLWqu2IjTVqGiM= shylinux.com/x/mysql-story v0.6.32/go.mod h1:8HCeDUV6ghaIeJD1IEhSeSOfVC9wEI93y2G9QBLtJJY= +shylinux.com/x/operation v0.0.14 h1:tS8JOJwrM6ZpO6WmvQ0Fpl4vOOx0PcyC+7eq1j5aFwY= +shylinux.com/x/operation v0.0.14/go.mod h1:QYPjnjzoWh9VMpU8GJU2wL06djzBHhZzif5nhnjJMCE= shylinux.com/x/toolkits v0.7.10/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q= shylinux.com/x/toolkits v1.0.19 h1:Nrx0xYRc5ph1WS66EZ1hJUCe+2FdSWQ4QP6tBlguikQ= shylinux.com/x/toolkits v1.0.19/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q= diff --git a/src/main.go b/src/main.go index dc5bda8..bf77565 100644 --- a/src/main.go +++ b/src/main.go @@ -5,12 +5,12 @@ import ( _ "shylinux.com/x/enterprise/src/gongyinglian" _ "shylinux.com/x/enterprise/src/guanlixitong" - _ "shylinux.com/x/enterprise/src/shichangyingxiao" - _ "shylinux.com/x/enterprise/src/zijinlian" - - _ "shylinux.com/x/enterprise/src/xiangmuguanli" - _ "shylinux.com/x/enterprise/src/peixunguanli" + _ "shylinux.com/x/enterprise/src/shichangyingxiao" + _ "shylinux.com/x/enterprise/src/xiangmuguanli" + _ "shylinux.com/x/enterprise/src/yingxiaotuiguang" + _ "shylinux.com/x/enterprise/src/zijinlian" + _ "shylinux.com/x/operation/src/production" ) func main() { print(ice.Run()) } @@ -18,4 +18,4 @@ func main() { print(ice.Run()) } func init() { ice.Info.CodeMain = "src/guanlixitong/portal.go" ice.Info.NodeMain = "web.team.guanlixitong.portal" -} \ No newline at end of file +} diff --git a/src/peixunguanli/common.go b/src/peixunguanli/common.go new file mode 100644 index 0000000..fd570e8 --- /dev/null +++ b/src/peixunguanli/common.go @@ -0,0 +1,41 @@ +package peixunguanli + +import ( + "shylinux.com/x/ice" + kit "shylinux.com/x/toolkits" + + "shylinux.com/x/enterprise/src/guanlixitong" + "shylinux.com/x/enterprise/src/peixunguanli/model" +) + +type Table struct { + guanlixitong.Table + list string `name:"list train_uid uid auto" role:"void"` +} + +func (s Table) Inputs(m *ice.Message, arg ...string) { + switch arg[0] { + case model.USER_TRAIN_ROLE: + s.InputsListRole(m, UserTrainRoleList, arg...) + case model.TRAIN_TYPE: + s.InputsList(m, TrainTypeList, arg...) + default: + s.Table.Inputs(m, arg...) + } +} +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_TRAIN_ROLE: + value = UserTrainRole(kit.Int(value)).String() + case model.TRAIN_TYPE: + value = TrainType(kit.Int(value)).String() + } + return value + }) + return s.Table.RewriteAppend(m) +} + +type Tables struct { Table } + +func (s Tables) BeforeMigrate(m *ice.Message, arg ...string) {} \ No newline at end of file diff --git a/src/peixunguanli/course.go b/src/peixunguanli/course.go new file mode 100644 index 0000000..714ba3c --- /dev/null +++ b/src/peixunguanli/course.go @@ -0,0 +1,17 @@ +package peixunguanli + +import "shylinux.com/x/ice" + +type course struct { + Table + order string `data:"2"` + fields string `data:"title,content"` + create string `name:"create title* content*" role:"leader"` + remove string `name:"remove" role:"leader"` +} + +func (s course) List(m *ice.Message, arg ...string) { + // s.ValueList(m, arg).Display("") +} + +func init() { ice.TeamCtxCmd(course{}) } diff --git a/src/peixunguanli/course.png b/src/peixunguanli/course.png new file mode 100644 index 0000000000000000000000000000000000000000..7d709f34ce2cad7776c35d20084b4c3cac19471b GIT binary patch literal 4010 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 literal 0 HcmV?d00001 diff --git a/src/peixunguanli/model/model.go b/src/peixunguanli/model/model.go new file mode 100644 index 0000000..526fd6a --- /dev/null +++ b/src/peixunguanli/model/model.go @@ -0,0 +1,51 @@ +package model + +import "shylinux.com/x/mysql-story/src/db" + +const ( + UID = "uid" + NAME = "name" + INFO = "info" + TYPE = "type" + TITLE = "title" + CONTENT = "content" + USER_UID = "user_uid" + USER_TRAIN_ROLE = "user_train_role" + TRAIN_UID = "train_uid" + TRAIN_NAME = "train_name" + TRAIN_TYPE = "train_type" + PLAN_UID = "plan_uid" +) + +type UserTrain struct { + db.ModelUserPlace + TrainUID string `gorm:"type:char(32);index"` +} +type Train struct { + db.ModelPlace + CompanyUID string `gorm:"type:char(32);index"` +} +type Plan struct { + db.ModelContent + TrainUID string `gorm:"type:char(32);index"` +} +type Course struct { + db.ModelContent + TrainUID string `gorm:"type:char(32);index"` +} +type Record struct { + db.ModelContent + TrainUID string `gorm:"type:char(32);index"` +} +type Evaluation struct { + db.ModelContent + TrainUID string `gorm:"type:char(32);index"` +} +type Feedback struct { + db.ModelContent + TrainUID string `gorm:"type:char(32);index"` +} + +func init() { + db.CmdModels("", &UserTrain{}, &Train{}, &Plan{}, &Course{}, &Record{}, &Evaluation{}, &Feedback{}) +} diff --git a/src/peixunguanli/plan.go b/src/peixunguanli/plan.go new file mode 100644 index 0000000..1cc46cf --- /dev/null +++ b/src/peixunguanli/plan.go @@ -0,0 +1,15 @@ +package peixunguanli + +import "shylinux.com/x/ice" + +type plan struct { + Table + order string `data:"1"` + fields string `data:"title,content,user_uid"` + create string `name:"create title* content*" role:"leader"` + remove string `name:"remove" role:"leader"` +} + +func (s plan) List(m *ice.Message, arg ...string) { s.ValueList(m, arg).Display("") } + +func init() { ice.TeamCtxCmd(plan{}) } diff --git a/src/peixunguanli/plan.js b/src/peixunguanli/plan.js new file mode 100644 index 0000000..8041e96 --- /dev/null +++ b/src/peixunguanli/plan.js @@ -0,0 +1,9 @@ +Volcanos(chat.ONIMPORT, { + _init: function(can, msg) { + can.onimport.myView(can, msg, function(value) { return [ + {view: html.TITLE, list: [value.title||value.name]}, + {view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]}, + {view: html.OUTPUT, list: [value.content||value.info]}, + ] }) + }, +}) \ No newline at end of file diff --git a/src/peixunguanli/plan.png b/src/peixunguanli/plan.png new file mode 100644 index 0000000000000000000000000000000000000000..b19dfc69f3c02a656712dc21f6a7cdfd21a32017 GIT binary patch literal 4659 zcmZ{oWmppqxWzYOgyg7+6A%z|2uPQ7D>;ykjSxwJ(E~;!-CYu+L{dPSfuu_MC#6$| zbm#SczxTuWo#(tC-{(1BPLz(8DkV8HIRF5lR991i|8t}N6)ET+-O`>5|1&aIHDeS2 z!1(xo1yqM~?*BUiQE*iSK=lap_rE}7C$A|F0MsSiyG9ZN0JMYZO7i+Xz`thZvF3)J z7WiD$UY?XSI?#zrHq!=dom@&LP6m!*?go-w%F#8anb63)mB8Sv?2*wKGJSl?X_o{p z43AF2KNu)0(8DWIn{-xF-y3iuNQz4yi3@q{%zPEfs*^s=yF#5>-RyLXw#2XC&M4}! z4XZ+D*E?;aolC}7rkE?D59uZj71;j|8!wr{qHWJIq)K_!3%g%P&B9nZ3^0En&( zZmj_*09}dZ5Y(0mcMFg9V`xp=3L_ICgMrced>3BsREEjl7w!vRtaRZ6W6<-;D`Xti zC0P9HR|E{|`8{;;xenE_c|`OJZloZP1bksl8%;3cwceb3>!$Un@drzEE(b?JjRI!t>5xgULZjWoDK8y^>Ed5=GW6NkVVqPX(@%s<{sM}@a&J3bV zpw{1qn<*R*e=APZPH8`GBH$@$%{~|$>n|&ZD!gm7=u9qZqSPnISl^E>kqiQsdVo26 z5PaHZY)CsOeq3=4wZHz!IZP(iHqGgtR?{glhH!koztVq|^4&^pRj7VBu2Mqy5FxFz zDAwDvc|X?TWQ@3vixg_E6LmX2YqNRu_YC3?+SPAgp#USCffCzAi$rVb0IM}u_VJVy z{J82>gpg7YlXuBV*j4A&3 zx%W%jL@rWi5ZXPYLF+G(ORnZJ;oi`)kShAiLeU^ujAd+viv#!fBEr1?C& z9luFoA)VDb9XJ-QH7dVrpYLDJ19-ezAn}+{4Xj_I(EIo6+Ygh3lKxc*s!VhhWA0{Os|!DZO^a-nQS4Gptx(&5vc_Tu1a&9Z$~+21|G#2`_zu_1fd#CGqyL;Wyg zh)$l`qw{^^(f7!*SNn%iP|>C&mUFp#WnyfBXFAkVuVCLuOp`MrzMLOQvO9?YZjU?D znXC7pI}@|1I)*oB>2f z$xBK;v|5J#iaDm?g{nkA-{bD5iq|`n7>N#7w;aZV?Ub`P+|UNp!snB=??@f!LG7=o zNLqk!>)F|VsETQe*KV9ghn$$b24|dI14(cDx4fzoS_?mpGSh0!t$04FPWQF+9ollE z%JtBSE}(u1JB%1A$)wPERdckf=-Ja-GUz zQu6f3S|?$a^PY+P7sb=L-_H8s@zT1aN;t!oa2fLTG7 z8e-n5bu4^+B&XDk7?wEP@jm(PGFJJzuzi`1r?3OtY8B?S#~arYT62QfXs2Tv7oQf^ zrk`wkL;g8br%|r;#{7QZVd$Fcq!ZU9G`=IN*W1!8l(l2ddKVCrtQfDvN`6Tp2#!cf zeynKNMztuJfXWeb2yo%oXG_x!yXVVSKv@jO3F@aK_NtY7FgLjuOs`t(U9KeBgj*22W=a=TDaG&*Jy8UTt&EYDY0i1DlaL5@D z$3bTOxitzbderp`HF_?-StcGihyVNQV z{ys=H!{Q-eHvF-w1LJNf^~H8P?%NHws>}YBcbsx1Ry?B6?JEjt=5INK)QEdroeV>T zGebWMwK}=EsQe|S2KjKTvko@l;o^RN-Ptk12t=QV^;%>l?$0DMBmIK�fZg+l_H3 z${HN7QtR9%I{9P-`Mpl>>FV)+cR`pWH>m*}DdExce_xqePi4LVB8{A_uVa*RX3U1^ z2zFOzp#~!xZ)KbX2(OFig!L8SpFUITysWj>w6xS8uo-Sc`xxC$FXK+<{aBKC$b=pm$rZ$ zohKC}ETo;>_m!EB#CApwg)t~!HeV2Z{tx2yU)pF9*X&=qkG;Y-pOznW?WjJF8QnJz zxo5sN(igcL$4TTZUUeQjN=u;XjT-ul-3z6~&Sje&FIaE%Ya7(IW?0sdyVVg+q-#FS zHyKhl6ROFE=#mA{t+>Yh$lTubZhp>=N>V$*zkv(Y5`{lJdX0rFgzM@F=qCkQ4m1<0 zr2b)V`A}+7_IYS0A^6%4WE_dmSZRzJ6_cpr$Q{VWcYuoNZs@gpp5>lENKNqeVM~Fx zA+7H6j?$5MF1_p70?!cBhnr-y@XVJ^OE_fyOY1V*E;FE!X8N3(h@udmDOzJ#R`5XDhelc-!qaj&+1h-M@*crcXa zEJ92kFB3#S?=d%*Dn8Gj1wAA;LsEPyPJGC7J&W;mNvlBoK+^)2ZpVF3Sq|UN4D2~M z?$@tvzCkYZ*g>qHom_R3Ce?y{cr0euawR&mnUu`0-^zDc#2tfxt}TA2{!|a<2FK}? zKe8BP%GLRoRCydI0$NWZxFQF#B7T0~*ze-^MtH&ca;oizxqo#8XejQTy?bZhX#65Z zD0j~YulLgsnXd%O-kwmXXtD|wQoW{QL?~6b2e?v*{S~TSDt^QlxAYvcF`(tfh&Qtf zimE=t?ymyVGx+2Xw!7~_Bu*5)V<#8pO?~Dmf1H1b=RL))Qx{wn-_M-Q+&%*Z{s^@h zlkq^Co?)4PfRZWnSZR>&5j!r%MMA3-u}{*Nq><;mg%dBKq%m?IjLPHoH?wl9k#SOW z!eejj2d$}QA&UOrY(l*jq~eRx{-$eMG5JP_Kg`<3Gh1Fx3BEX8rq|#Z6u0p-l={lB z5f8D6<4vUm=ZKRmDHDnlzY0wOz($P$fI8;(a;fIFMZ_p`*L$xI=Tk_ z(_fqnLl>SscvSNtSsZhALMh%UKIU(_n`do}-YY5O zT7RlZjQC8FWilIun>uJ}VRdPE-d5;K`mb5SnF?|xfti>FHS%cY%Z)xq zHk)?Q?KIX5G<9}G7g4hknaqZS&D5|&n1oOGfUL3Cu3$ykV?we$(Wd z4LV59Cg5ixSsw=`o_&MkI(0aFAq`+qOQWyr`J%zlG*ZN;I26tq_W7qnon=<_w1qXL z)WsBF_t#VilX1?EyF}F#9iz852}@Ge2`~?Sl_>dCv4|ew=BMwNhn80kszw`tg?*l4 zLqc8tRRay2kMbD=71ic!EMjag(f}R4itMlIZoRzpL~3RX497pL{|3_;9dfsiS%t5& z3#~V{8sTIbPhxPp9L93WtJvH zqnc9inu|=e_bvIt$iFPhYiZ;(0?5C(Ju~hOJhUxWgH0l|cy{fk?ZhCOKD}Hf_~;#< zpYq1!zopGz@z%b}?rn%1?Nwcr0xn5;ETX&nCIX)cdIT*-RI)loL@VV8nUj*jbq!>v z#Gzp+x;VL)$98j-`Ff%d(Kv8 zX(09Pb+y{+H9df(4+Etn<~l31(qDY)bBaUwS}y*QR^wq7ZttS+6) z;aV{NE^7ktq`ar)(2O2IM0_U+YF-HP1Trm?6C2s&%kPS|qOS<&jwbNZ+o!z@=z|B> z?Cfsez%kcf|AVjlTE4h<0`t&q8jr9r^p34jFPCl;*oaiPYIbs}nx8*4eAX==pKF4C zp`OgWXvC}$^(Zwq)4dj>EODRnFrt{iqj>!$)C8+Wu}!UHnDQpZW$^~rd4Rv%h52Byc9N6y?x l0vdn9U-ACmsMk8=NsZEVcNgSx__y%@)RncAsud6+{{wFq_Kg4l literal 0 HcmV?d00001 diff --git a/src/peixunguanli/portal.go b/src/peixunguanli/portal.go new file mode 100644 index 0000000..2854cd2 --- /dev/null +++ b/src/peixunguanli/portal.go @@ -0,0 +1,13 @@ +package peixunguanli + +import ( + "shylinux.com/x/community/src/gonganxitong" + "shylinux.com/x/enterprise/src/guanlixitong" +) + +type Portal struct { + guanlixitong.Portal + placeCreate string `name:"placeCreate city_name* company_name* train_name* train_type:select" role:"void"` +} + +func init() { gonganxitong.PortalCmd(Portal{Portal: guanlixitong.NewPortal(userTrain{}, train{})}) } \ No newline at end of file diff --git a/src/peixunguanli/portal.json b/src/peixunguanli/portal.json new file mode 100644 index 0000000..fe8a809 --- /dev/null +++ b/src/peixunguanli/portal.json @@ -0,0 +1,39 @@ +{ + "portal": "培训管理", + "plan": "培训计划", + "course": "培训课程", + "record": "培训记录", + "evaluation": "考核评估", + "feedback": "建议反馈", + "icons": { + "plan": "plan.png", + "course": "course.png", + "record": "record.png", + "evaluation": "evaluation.png", + "feedback": "feedback.png" + }, + "input": { + "My Train": "我的场景", + "user_train_role": "成员角色", + "train_name": "场景名称", + "train_type": "场景类型" + }, + "value": { + "user_train_role": { + "visitor": "访客", + "creator": "创建人", + "leader": "管理人员", + "worker": "工作人员", + "server": "服务人员", + "style": { + "creator": "danger", + "leader": "danger" + } + }, + "train_type": { + "RD": "研发群", + "OP": "运维群", + "HR": "人力群" + } + } +} \ No newline at end of file diff --git a/src/peixunguanli/record.go b/src/peixunguanli/record.go new file mode 100644 index 0000000..10788d2 --- /dev/null +++ b/src/peixunguanli/record.go @@ -0,0 +1,17 @@ +package peixunguanli + +import "shylinux.com/x/ice" + +type record struct { + Table + order string `data:"3"` + fields string `data:"title,content"` + create string `name:"create title* content*" role:"leader"` + remove string `name:"remove" role:"leader"` +} + +func (s record) List(m *ice.Message, arg ...string) { + // s.ValueList(m, arg).Display("") +} + +func init() { ice.TeamCtxCmd(record{}) } diff --git a/src/peixunguanli/record.png b/src/peixunguanli/record.png new file mode 100644 index 0000000000000000000000000000000000000000..eddbc183c8ff5e81d0d15934009db4cc3650a7b8 GIT binary patch literal 4471 zcmZ`-XFD4V8%@L>kG*0G)@&ZqO~yfHJ;qoW2>0{{Rz{Ri3>f7RwcP?G;;c($bMU!n4S zVCxS6unGPLpuU9w{_hj$Z=t6Nz>IV6{yj*aYZz+)0H4xmuARsL07hDUZH%*A>!uB_=wVj|mFG56OH4K6YrG=pmSF1LA>F`DKvONj zae-oyS-*FZFr+4L2Qt*K|7R0l&`$L0mgr0?G?;}79Ldqm2MQjZFOUXIFuBiFB1B!M zv3$&762Bg^`Kbxck5Ihj9^Dk4CS1c6?Xfw3V7nQ+O_(Tk&3-Qh(=4SPepq6gzGmJ6_~bLhn$~&D@%~kNYmk!MmCY2MIh_ zyO^9J#HWYJ6UC0^z8>M6JRy#0PgD7~m*2sjrYYABKqq!21x;JYNp*=j1e~vNBN-#} zvuRD8E{!`cbOUe@_`mUv2OzQK>4KYq+$)g~^o^t*zd4|kLo-Tnu_jWitG1hmNn=vA zSI&JpWEC#Fu{QqX3XplF;8zR|o?6vrAQM>jb>N+%g0As8M8??Yr*8PaMeT_-+*?s5 z5ry*3UniaO-nz1RIb&i=1$b^k7Gj#p0_unE9<^vYu(rY8L5A1;sR#s38b?aIgtyMV zbZfn5M?hS`vRs#~5^T$ibld#H4rj6W`xWC7XF%7^dfS@hX7})|vn49rjqdTKCR8Ss zPs}3or>}@wTWketYPQSBGBiOTJA}2&m1zW#c+zN4X6M(xxY-;{n|XSxa_;l$_*3tV zKjy*Wy3%6d-f;DI!T+jue0i%o;o_K4(>JTua|Z>YC82bn-_xszt1qN5Nh61fkR+jj z(!ul*%L+>OYq0LWlL?BJ8dx{DOB?y!{j2Aqby@PR`Q4`5;PU?xcpn_yvfbB+05+z- zYz)oyL5i7LLU8N84E+84aRi9=4`uh%eK7z_Sjc zR)`PRQw!uxHDwTWr&0=S!TFJwI+KG3sB4^J?6kP`SZ$IEq;B) z5|1F$=By=&9Tuq7iQ`$P-#++3it`=SuYR)LFB`hdhKZv45|^^*)X&+6|Kxw=bTD}S z9o%l1qTx*MV09fyMEYBKUV121|zxIp^wIgjI=6n?^jOmoyrhMOy zzr!L%I>0i#LQ5@4wD&=;&>Fty>47COvwU{-WR81tz|;;Peqa59cMvsYMNaV{)cpb9 zd&)x^4Gn|Xgz%ZGu0KorK?-lVV_Fv&&#VY)#wTVXk&O>Mwo+7FzG`=Ud#nscVzEp{ zDkS*%6)4xH;Wf2Z4z!}CkdK|BVfLE=i7n=Jk*lY7MbX@TDE0|guc?X8Jipz9N`&LQDM25xcHsWM#21; zMyeBGSwZ1pw&|_S#Hs6j&;)~lg2@CdY8PiU#+~Ne!e>w4d02#PIqrPtlgVtOHfmyxg*NP1Oz?L3J*B7NdIZ70yw>_3)*WOo+~TY zy=Ds4WaF`3C5&(Z+4hEh{i_SvF(^0gI&2lD!l`v|<~IauQJ}SXj5t&pDV?PzDfwao zg0sS}YYx_e8f3zdU3Hu$zLLzt&uH%WBnnq_c*~kKZ{?bqRY5aBO4w;XMwdQ=$ST!| zOVKZeH*ThCDn=3zks|RCD!*H;2`X~G&HNw`5+oO3CMMc01GV))NiC44)QD!Vg5#@F z9XtQDE#ox1Ik6xxstsTtyef_N0C^Qr&zEz&>>CJ2kEje+zX!VeyM>(Ul&4%UDup#3z_}ZT&YUmd$6UlsKBS;1Nnh~ zm8)Alwm<#d25pyFpKc^$Br0ORA|$Hb-S-LK3q+N?t?y_l7i0hL(3u^k6e^aKx8bCewY8=-NC z1(nDlQFmpXz&~)yrfccQ&`rr32Z`9E(R7cu^16@20Ac{na|Lu~g(-Z@QKmy`7&%T= zS-N|)ghrsbnd{iuwc8E&G6)P-7|opn5M5N&UGVnsm%eHj-z}cPtgsyiOE$Hgt&uM? z`rJ+W0|~=HBE2J=pPPZY3rXahGKq161gDeRbo_QL;Sou)pek;LTVT5T;@S0XvyHlp zM@$Cu0c1V>1^XUpEA;rGrx!$W59H$}wpDOBwh3gG+i;w-Vt|V0dL{^nk$RRxHsHT8 zabDD*7kbd|bbTK8Y9cOM3g#o>sSIBm9MhrfBg9ts#2?Ybx9sr(PmKt-J*kbkdsNf{ z0o817eDW}D(dhbD-qpTRJ$=Nes4JeJjv0{Ry`h7{3%Z_2VPL3ri#(le5lv4_WKO4k zovO>2+eBV2WXa$mqfit~CMiqnUw-JGf+EBrI5klJ7_7?wqFRhPf!Fb^+f5Ov!qIKY zz-@__I=^}=9Xj25$SjC0?XQjTzg=j(pZ-%tV&Hv`Pk8e!MQuzyc`9Cfp8b9GdFY6^tmC_1DZ1SrcfN16ffK7T zU%C*z^Q$E>pY^@g57eHk;xc98C%pQqko(j~h6e*(bGs~uBpA|nduZ~4DM6sp<4cAn zYJee&Qip$#w&&9a%Gb_#*T&n%C`p6;m95kQ&ZYPvgcmPO#QHunKaUS?KX;7UXyWrj zQ9Ydy+wCdm8&ns`JHvWs9b*im!*o<@McP+Q6j{gh#-F=zCeI-7>RAD;s~`4w_q?bX zV06v1B=%k_?hOe0CvmO`-W&|G-IQ z^0p#mPU?O$-gCrV$C`aNJVi^dhO3e9_aN832bWd(q>UB4LAH-Y29(LP;IU(`p|WM4 z@%EI0Hu}xv+Gji5)E}XN*CL?cN?lmx`Dtq7NP>9#N z7s9c-N|;r!Dje+TRQtu6!DA{a{ieWg_ztl)P@g?N?tYCJ4=h37oQHpFH6~|KM)ZCp zn@>o9O-AevjNZU)3e^#OpNX*Dw1<`!nwyo&+}QWVy`YXRIVsMk7uCn^{35Y0&1C_c z9c|%OL?NwR6?%nXOg|c#$W^D_n_-m;rW&AR;$r~n%zMuO7Sz&%6)zjpG5``YcG+TU zb3APQ^NCeBZ7P6jSS6 zz3o^stZLqNd)-i2Ah^*GO_qO!`7uu{vSPmC1eb5{)s>flZa;=UD)_(|pSD;7-nnja zR7}4wda`n>{3bV*T2-haV{;!qjbLKa5ROOM75aW^cVx9bhMn|iTaVwcKr zWF|KQEGT|fI*_(B`hy;00i7G!t5d{vS4YB{{4&CO}q$GjyV@ZQU^_9jQfTXv#K=2?o*3e*^lP@ZZ8G-Nw7uqhvf;iy*QB|BVF$3o);}P1lP5-UeTOa z1-Ga8Jj>Do3tfxen^&G;@+U6}EnE0-?0ZBV<1dlFiL*!~CT63e%Phv_G>0xQHlMQ& z^c_C09YNGDrXL=!$Hp$#og}L&rE`i15mb`%O_KEPio7wlJ}s_L6_oO(+YKCxEY!86 zk+c@oXhOmpvXmn?zD$&5nq_1|8SyOL=d%n$LrhgjHffId{%sMQ%yF@Y@Y!jK`75XN zPQP~YyGQ+Z`(BVU+?ULsf|{55-AEXiyaCwq3%o0x?}6d^JBXK#@*!`2$HB>iC9>QF z&9p;RUr&XTqtvNgNRlZRx$tMgrXL+sRA2E=SNg1{@ml?{V zjfREZnP%Dd5=%g^l4Oa-e??qfn)`7|cl+R^Qy0+P~AA>r=` zJgRFu$x)!%&Kt1tNfG> z%F;}eU+-LH*}X6^(|Mf_nN8U*KA(x9KsZc_j9~KmgxTULj#xiM;^;#i@Pp%-&(cW5 zKX)St{^XS19-_eO%2_Im>*hUinm=hGUUQJdP0?J0I4Z%<#Bm;<7|6j&ObO@ z@f_D~-33*0V=qOUQmJsS({tWPQ_KJV#o