Files
qitongxue-api/api/admin/v1/project.go
2026-09-30 17:01:18 +08:00

342 lines
14 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package v1
import "github.com/gogf/gf/v2/frame/g"
// ============================================================================
// 管理端开发项目契约(迭代-2026-09-30 三期)
//
// 建单 → 生成绑定小程序码(scene 携带 bind_token)→ 用户扫码绑定;
// 阶段/小节点/交付物(原型、UI 设计稿)均为即时保存接口(管理端逐项操作)。
// 阶段状态变更 / 交付物上传 / 交付 会向绑定用户推站内信。
// ============================================================================
// AdminProjectPayItem 项目分期
type AdminProjectPayItem struct {
Id int64 `json:"id"`
Seq int `json:"seq"`
Percent int `json:"percent"`
AmountCents int64 `json:"amount_cents"`
Trigger string `json:"trigger"`
TriggerText string `json:"trigger_text"`
Status int `json:"status"`
PaidAt string `json:"paid_at"`
PaidNote string `json:"paid_note"`
}
// AdminProjectItem 项目列表项
type AdminProjectItem struct {
Id int64 `json:"id"`
UserId int64 `json:"user_id"`
UserNickname string `json:"user_nickname"`
Title string `json:"title"`
Description string `json:"description"`
PriceCents int64 `json:"price_cents"`
PriceNote string `json:"price_note"`
DueNote string `json:"due_note"`
Status int `json:"status"`
StatusText string `json:"status_text"`
StageTotal int `json:"stage_total"`
StageDone int `json:"stage_done"`
BindToken string `json:"bind_token"`
CodeUrl string `json:"code_url"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Stages []AdminProjectStageItem `json:"stages"`
MaintainPlanId int64 `json:"maintain_plan_id"`
PayPlanId int64 `json:"pay_plan_id"`
MaintainPlanName string `json:"maintain_plan_name"`
PayPlanName string `json:"pay_plan_name"`
Accepted int `json:"accepted"`
AcceptedAt string `json:"accepted_at"`
MaintainStartAt string `json:"maintain_start_at"`
MaintainPaidUntil string `json:"maintain_paid_until"`
MaintainDaysLeft int `json:"maintain_days_left"` // 距下次缴费天数(未启用维护为 -1)
Pays []AdminProjectPayItem `json:"pays"`
}
// AdminProjectListReq 项目列表
type AdminProjectListReq struct {
g.Meta `path:"/admin/service/project/list" method:"get" tags:"admin" summary:"开发项目列表"`
Keyword string `json:"keyword"`
Status *int `json:"status"`
Page int `json:"page"`
PageSize int `json:"pageSize"`
}
type AdminProjectListRes struct {
List []AdminProjectItem `json:"list"`
Total int `json:"total"`
}
// AdminProjectSaveReq 新增/编辑项目(id=0 新建并生成绑定令牌;userId>0 直接绑定)
type AdminProjectSaveReq struct {
g.Meta `path:"/admin/service/project/save" method:"post" tags:"admin" summary:"保存开发项目"`
Id int64 `json:"id"`
Title string `v:"required#请填写项目名称" json:"title"`
Description string `v:"length:0,1000#需求描述最多 1000 字" json:"description"`
PriceCents int64 `v:"min:0#金额不能为负" json:"priceCents"`
PriceNote string `v:"length:0,64#金额备注最多 64 字" json:"priceNote"`
DueNote string `v:"length:0,64#交付周期最多 64 字" json:"dueNote"`
Status int `v:"in:1,2,3#状态不合法" json:"status"`
UserId int64 `json:"userId"` // 编辑时可直接改绑(填 0 = 解绑待扫码)
MaintainPlanId int64 `json:"maintainPlanId"` // 维护模板(0=未选)
PayPlanId int64 `json:"payPlanId"` // 付款分期模板(0=未选)
}
type AdminProjectSaveRes struct {
Id int64 `json:"id"`
BindToken string `json:"bind_token"` // 新建时返回,供前端直接弹码
}
// AdminProjectDeleteReq 删除项目(软删除;阶段/节点/交付物一并硬删)
type AdminProjectDeleteReq struct {
g.Meta `path:"/admin/service/project/delete" method:"post" tags:"admin" summary:"删除开发项目"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectDeleteRes struct{}
// AdminProjectStageItem 阶段(含节点与文件,管理端详情用)
type AdminProjectStageItem struct {
Id int64 `json:"id"`
Title string `json:"title"`
Status int `json:"status"`
StatusText string `json:"status_text"`
Sort int `json:"sort"`
IsEnabled int `json:"is_enabled"`
Nodes []AdminProjectNodeItem `json:"nodes"`
Files []AdminProjectFileItem `json:"files"`
}
// AdminProjectNodeItem 小节点
type AdminProjectNodeItem struct {
Id int64 `json:"id"`
Title string `json:"title"`
IsDone int `json:"is_done"`
Sort int `json:"sort"`
}
// AdminProjectFileItem 交付物(绝对 URL 直显)
type AdminProjectFileItem struct {
Id int64 `json:"id"`
FileName string `json:"file_name"`
FileUrl string `json:"file_url"`
}
// AdminProjectDetailReq 项目详情(管理态全量:阶段/节点/文件)
type AdminProjectDetailReq struct {
g.Meta `path:"/admin/service/project/detail" method:"get" tags:"admin" summary:"开发项目详情"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectDetailRes struct {
AdminProjectItem
}
// AdminProjectQrcodeReq 生成/重取绑定小程序码(微信 getUnlimited,scene=项目+令牌)
type AdminProjectQrcodeReq struct {
g.Meta `path:"/admin/service/project/qrcode" method:"post" tags:"admin" summary:"生成项目绑定小程序码"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectQrcodeRes struct {
CodeUrl string `json:"code_url"`
}
// AdminProjectStageSaveReq 新增/编辑阶段
type AdminProjectStageSaveReq struct {
g.Meta `path:"/admin/service/project/stage/save" method:"post" tags:"admin" summary:"保存项目阶段"`
Id int64 `json:"id"`
ProjectId int64 `v:"required" json:"projectId"`
Title string `v:"required#请填写阶段名称" json:"title"`
Status int `v:"in:0,1,2#状态不合法" json:"status"`
Sort int `json:"sort"`
IsEnabled int `json:"isEnabled"`
}
type AdminProjectStageSaveRes struct {
Id int64 `json:"id"`
}
// AdminProjectStageDeleteReq 删除阶段(其节点与交付物一并删除)
type AdminProjectStageDeleteReq struct {
g.Meta `path:"/admin/service/project/stage/delete" method:"post" tags:"admin" summary:"删除项目阶段"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectStageDeleteRes struct{}
// AdminProjectNodeSaveReq 新增/编辑小节点(isDone 变更即时生效)
type AdminProjectNodeSaveReq struct {
g.Meta `path:"/admin/service/project/node/save" method:"post" tags:"admin" summary:"保存阶段小节点"`
Id int64 `json:"id"`
StageId int64 `v:"required" json:"stageId"`
Title string `v:"required#请填写节点内容" json:"title"`
IsDone int `json:"isDone"`
Sort int `json:"sort"`
}
type AdminProjectNodeSaveRes struct {
Id int64 `json:"id"`
}
// AdminProjectNodeDeleteReq 删除小节点
type AdminProjectNodeDeleteReq struct {
g.Meta `path:"/admin/service/project/node/delete" method:"post" tags:"admin" summary:"删除阶段小节点"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectNodeDeleteRes struct{}
// AdminProjectFileAddReq 登记交付物(文件本体先经 /admin/upload 上传,此处只落 path)
type AdminProjectFileAddReq struct {
g.Meta `path:"/admin/service/project/file/add" method:"post" tags:"admin" summary:"登记项目交付物"`
ProjectId int64 `v:"required" json:"projectId"`
StageId int64 `json:"stageId"`
FileName string `v:"required#请填写文件名" json:"fileName"`
FilePath string `v:"required#缺少文件路径" json:"filePath"`
}
type AdminProjectFileAddRes struct {
Id int64 `json:"id"`
}
// AdminProjectFileDeleteReq 删除交付物登记
type AdminProjectFileDeleteReq struct {
g.Meta `path:"/admin/service/project/file/delete" method:"post" tags:"admin" summary:"删除项目交付物"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectFileDeleteRes struct{}
// ---------- 维护模板 ----------
// AdminMaintainPlanItem 维护模板
type AdminMaintainPlanItem struct {
Id int64 `json:"id"`
Name string `json:"name"`
FreeYears int `json:"free_years"`
YearlyFeeCents int64 `json:"yearly_fee_cents"`
SourceOnly int `json:"source_only"`
Sort int `json:"sort"`
IsEnabled int `json:"is_enabled"`
Remark string `json:"remark"`
}
// AdminMaintainPlanListReq 维护模板列表
type AdminMaintainPlanListReq struct {
g.Meta `path:"/admin/service/maintain-plan/list" method:"get" tags:"admin" summary:"维护模板列表"`
}
type AdminMaintainPlanListRes struct {
List []AdminMaintainPlanItem `json:"list"`
}
// AdminMaintainPlanSaveReq 保存维护模板
type AdminMaintainPlanSaveReq struct {
g.Meta `path:"/admin/service/maintain-plan/save" method:"post" tags:"admin" summary:"保存维护模板"`
Id int64 `json:"id"`
Name string `v:"required#请填写模板名称" json:"name"`
FreeYears int `v:"min:0" json:"freeYears"`
YearlyFeeCents int64 `v:"min:0" json:"yearlyFeeCents"`
SourceOnly int `json:"sourceOnly"`
Sort int `json:"sort"`
IsEnabled int `json:"isEnabled"`
Remark string `v:"length:0,255" json:"remark"`
}
type AdminMaintainPlanSaveRes struct {
Id int64 `json:"id"`
}
// AdminMaintainPlanDeleteReq 删除维护模板
type AdminMaintainPlanDeleteReq struct {
g.Meta `path:"/admin/service/maintain-plan/delete" method:"post" tags:"admin" summary:"删除维护模板"`
Id int64 `v:"required" json:"id"`
}
type AdminMaintainPlanDeleteRes struct{}
// ---------- 付款分期模板 ----------
// AdminPayPlanItem 付款分期模板
type AdminPayPlanItem struct {
Id int64 `json:"id"`
Name string `json:"name"`
Schedule string `json:"schedule"` // JSON:[{seq,percent,trigger}]
Sort int `json:"sort"`
IsEnabled int `json:"is_enabled"`
Remark string `json:"remark"`
}
// AdminPayPlanListReq 分期模板列表
type AdminPayPlanListReq struct {
g.Meta `path:"/admin/service/pay-plan/list" method:"get" tags:"admin" summary:"付款分期模板列表"`
}
type AdminPayPlanListRes struct {
List []AdminPayPlanItem `json:"list"`
}
// AdminPayPlanSaveReq 保存分期模板
type AdminPayPlanSaveReq struct {
g.Meta `path:"/admin/service/pay-plan/save" method:"post" tags:"admin" summary:"保存付款分期模板"`
Id int64 `json:"id"`
Name string `v:"required#请填写模板名称" json:"name"`
Schedule string `v:"required#请填写分期计划 JSON" json:"schedule"`
Sort int `json:"sort"`
IsEnabled int `json:"isEnabled"`
Remark string `v:"length:0,255" json:"remark"`
}
type AdminPayPlanSaveRes struct {
Id int64 `json:"id"`
}
// AdminPayPlanDeleteReq 删除分期模板
type AdminPayPlanDeleteReq struct {
g.Meta `path:"/admin/service/pay-plan/delete" method:"post" tags:"admin" summary:"删除付款分期模板"`
Id int64 `v:"required" json:"id"`
}
type AdminPayPlanDeleteRes struct{}
// ---------- 分期到账 / 维护期 ----------
// AdminProjectPayMarkReq 标记分期到账(后台确认收款,用户端推站内信)
type AdminProjectPayMarkReq struct {
g.Meta `path:"/admin/service/project/pay/mark" method:"post" tags:"admin" summary:"标记分期到账"`
Id int64 `v:"required" json:"id"`
PaidNote string `v:"length:0,64#备注最多 64 字" json:"paidNote"`
}
type AdminProjectPayMarkRes struct{}
// AdminProjectPayUnmarkReq 撤销分期到账(误操作回退)
type AdminProjectPayUnmarkReq struct {
g.Meta `path:"/admin/service/project/pay/unmark" method:"post" tags:"admin" summary:"撤销分期到账"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectPayUnmarkRes struct{}
// AdminProjectMaintainRenewReq 维护费 +1 年已收(paid_until 顺延一年并通知用户)
type AdminProjectMaintainRenewReq struct {
g.Meta `path:"/admin/service/project/maintain/renew" method:"post" tags:"admin" summary:"维护费续收一年"`
Id int64 `v:"required" json:"id"`
}
type AdminProjectMaintainRenewRes struct {
PaidUntil string `json:"paid_until"`
}
// AdminProjectMaintainAdjustReq 调整维护期起算日(重算已缴至与到期提醒)
type AdminProjectMaintainAdjustReq struct {
g.Meta `path:"/admin/service/project/maintain/adjust" method:"post" tags:"admin" summary:"调整维护期起算日"`
Id int64 `v:"required" json:"id"`
StartAt string `v:"required#请选择起算日期" json:"startAt"` // YYYY-MM-DD
}
type AdminProjectMaintainAdjustRes struct {
PaidUntil string `json:"paid_until"`
}
// ---------- 缴费提醒设置 ----------
// AdminMaintainRemindGetReq 提醒设置读取
type AdminMaintainRemindGetReq struct {
g.Meta `path:"/admin/service/maintain-remind/get" method:"get" tags:"admin" summary:"维护费提醒设置读取"`
}
type AdminMaintainRemindGetRes struct {
RemindDays int `json:"remind_days"`
AdminNotifyUserId int64 `json:"admin_notify_user_id"`
}
// AdminMaintainRemindSaveReq 提醒设置保存
type AdminMaintainRemindSaveReq struct {
g.Meta `path:"/admin/service/maintain-remind/save" method:"post" tags:"admin" summary:"维护费提醒设置保存"`
RemindDays int `v:"min:1|max:90#提醒天数需在 1-90 之间" json:"remindDays"`
AdminNotifyUserId int64 `json:"adminNotifyUserId"`
}
type AdminMaintainRemindSaveRes struct{}