2025-06-07 14:26:44 +08:00

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{}) }