mirror of
https://shylinux.com/x/operation
synced 2025-07-03 14:01:20 +08:00
126 lines
4.1 KiB
Go
126 lines
4.1 KiB
Go
package production
|
|
|
|
import (
|
|
"shylinux.com/x/ice"
|
|
"shylinux.com/x/icebergs/base/ctx"
|
|
"shylinux.com/x/icebergs/base/web"
|
|
kit "shylinux.com/x/toolkits"
|
|
|
|
"shylinux.com/x/operation/src/production/model"
|
|
)
|
|
|
|
type take struct {
|
|
Tables
|
|
order string `data:"7"`
|
|
role string `data:"leader,worker"`
|
|
info string `name:"info" help:"详情" style:"notice" role:"worker"`
|
|
main string `name:"main" help:"主页" style:"notice" role:"worker"`
|
|
}
|
|
|
|
func (s take) List(m *ice.Message, arg ...string) {
|
|
s.Limit(m, 300)
|
|
isLeader := s.IsLeader(m)
|
|
s.SelectAuthPlace(m, story{}).Table(func(value ice.Maps) {
|
|
if value["auth_status"] != "issued" {
|
|
return
|
|
}
|
|
push := func(val ice.Maps, t string) {
|
|
m.Push(model.UPDATED_AT, kit.Select(val[model.CREATED_AT], val[model.UPDATED_AT]))
|
|
m.Push(model.TYPE, t)
|
|
m.Push(model.UID, val[model.UID])
|
|
m.Push(model.TITLE, val[model.TITLE])
|
|
m.Push(model.CONTENT, kit.Select(val[model.CONTENT], val[model.ISSUE_CONTENT], val[model.DESIGN_CONTENT]))
|
|
m.Push(model.LINK, val[model.LINK])
|
|
m.Push(model.STORY_NAME, value[model.NAME])
|
|
m.Push(model.STORY_UID, val[model.STORY_UID])
|
|
m.Push(model.USER_UID, val[model.USER_UID])
|
|
if val[model.LINK] == "" {
|
|
m.PushButton(s.Info, s.Main)
|
|
} else {
|
|
m.PushButton(s.Preview, s.Info, s.Main)
|
|
}
|
|
}
|
|
m.Cmd(Plan{}, s.Select, model.STORY_UID, value[model.UID]).Table(func(val ice.Maps) {
|
|
task_count := 0
|
|
switch PlanStatus(kit.Int(val[model.PLAN_STATUS])) {
|
|
case PlanProcess:
|
|
if kit.Int(val[model.ISSUE_COUNT]) == 0 {
|
|
push(val, "PM可接单")
|
|
} else {
|
|
m.Cmd(Issue{}, s.Select, model.STORY_UID, value[model.UID], model.PLAN_UID, val[model.UID], model.DESIGN_COUNT, "0").Table(func(val ice.Maps) {
|
|
task_count += kit.Int(val[model.TASK_COUNT])
|
|
switch IssueStatus(kit.Int(val[model.STATUS])) {
|
|
case IssueProcess, IssueFinish:
|
|
push(val, "UI可接单")
|
|
}
|
|
})
|
|
}
|
|
case PlanFinish:
|
|
if task_count == 0 && m.IsTech() {
|
|
push(val, "RD可接单")
|
|
}
|
|
}
|
|
})
|
|
deadline := m.Time("-120h")
|
|
check := func(target ice.Any, t string) {
|
|
m.Cmd(target, s.Select, model.STORY_UID, value[model.UID]).Table(func(val ice.Maps) {
|
|
if !isLeader {
|
|
kit.If(kit.IsIn(val[model.SCORE], "4", "5"), func() { push(val, t+"优秀项目") })
|
|
return
|
|
}
|
|
switch IssueStatus(kit.Int(val[model.STATUS])) {
|
|
case IssueCreate:
|
|
push(val, t+"待审批")
|
|
case IssueProcess:
|
|
kit.If(kit.Select(val[model.CREATED_AT], val[model.UPDATED_AT]) < deadline, func() {
|
|
})
|
|
push(val, t+"待提交")
|
|
case IssueSubmit:
|
|
push(val, t+"待验收")
|
|
case IssueFinish:
|
|
kit.If(kit.IsIn(val[model.SCORE], "4", "5"), func() { push(val, t+"优秀项目") })
|
|
}
|
|
})
|
|
}
|
|
check(Issue{}, "PM")
|
|
check(Design{}, "UI")
|
|
if isLeader {
|
|
m.Cmd(Task{}, s.Select, model.STORY_UID, value[model.UID]).Table(func(val ice.Maps) {
|
|
val[model.LINK] = s.coderLink(m.Spawn(val))
|
|
push(val, "RD可编程")
|
|
})
|
|
m.Cmd(Case{}, s.Select, model.STORY_UID, value[model.UID]).Table(func(val ice.Maps) {
|
|
val[model.LINK] = web.S(val[web.SPACE]) + web.C(val[ctx.INDEX])
|
|
push(val, "QA可测试")
|
|
})
|
|
}
|
|
})
|
|
m.Display("").DisplayCSS("").Sort(kit.Fields(model.TYPE, model.UPDATED_AT), []string{
|
|
"PM可接单", "UI可接单", "PM优秀项目", "UI优秀项目",
|
|
"PM待审批", "PM待提交", "PM待验收",
|
|
"UI待审批", "UI待提交", "UI待验收",
|
|
"RD可接单", "RD可编程", "QA可测试",
|
|
}, ice.STR_R)
|
|
}
|
|
func (s take) Info(m *ice.Message, arg ...string) {
|
|
var target ice.Any
|
|
switch m.Option(model.TYPE) {
|
|
case "PM可接单", "RD可接单":
|
|
target = Plan{}
|
|
case "UI可接单", "PM优秀项目", "PM待审批", "PM待提交", "PM待验收":
|
|
target = Issue{}
|
|
case "UI优秀项目", "UI待审批", "UI待提交", "UI待验收":
|
|
target = Design{}
|
|
case "RD可测试":
|
|
target = Task{}
|
|
case "QA可测试":
|
|
target = Case{}
|
|
}
|
|
m.ProcessField(target, []string{m.Option(model.STORY_UID), m.Option(model.UID)}, arg...)
|
|
}
|
|
func (s take) Main(m *ice.Message, arg ...string) {
|
|
m.ProcessField(Portal{}, []string{m.Option(model.STORY_UID)}, arg...)
|
|
}
|
|
|
|
func init() { ice.TeamCtxCmd(take{}) }
|