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