package v1 import "github.com/gogf/gf/v2/frame/g" // ============================================================================ // 管理端软件开发服务二期契约(迭代-2026-09-30): // 介绍页模块(blocks)/ 作品案例(works)/ 报价申请(quotes) // // 图片字段库内只存相对路径(/static/...),响应里 *Url 为按 site.base_url 拼接的 // 绝对地址;保存时提交上传接口返回的 path。报价处理(handle)后向用户推站内信。 // ============================================================================ // ---------- 介绍页模块 ---------- // AdminServiceBlockItem 模块项(响应 snake_case) type AdminServiceBlockItem struct { Id int64 `json:"id"` Kind string `json:"kind"` Title string `json:"title"` Subtitle string `json:"subtitle"` ImagePath string `json:"image_path"` ImageUrl string `json:"image_url"` Images []string `json:"images"` // 相对路径数组(编辑回填用) ImageUrls []string `json:"image_urls"` Content string `json:"content"` Sort int `json:"sort"` IsEnabled int `json:"is_enabled"` UpdatedAt string `json:"updated_at"` } // AdminServiceBlockListReq 模块列表(含停用;管理端全部可见) type AdminServiceBlockListReq struct { g.Meta `path:"/admin/service/block/list" method:"get" tags:"admin" summary:"服务介绍页模块列表"` } type AdminServiceBlockListRes struct { List []AdminServiceBlockItem `json:"list"` } // AdminServiceBlockSaveReq 新增/编辑模块(id=0 新建)。images 传相对路径数组。 type AdminServiceBlockSaveReq struct { g.Meta `path:"/admin/service/block/save" method:"post" tags:"admin" summary:"保存服务介绍页模块"` Id int64 `json:"id"` Kind string `v:"required|in:hero,rich,image_text,image_list,flow,checklist,price,developer,works,goods#请选择模块类型|模块类型不合法" json:"kind"` Title string `v:"length:0,128#标题最多 128 字" json:"title"` Subtitle string `v:"length:0,255#副标题最多 255 字" json:"subtitle"` ImagePath string `json:"imagePath"` Images []string `json:"images"` Content string `json:"content"` Sort int `json:"sort"` IsEnabled int `json:"isEnabled"` } type AdminServiceBlockSaveRes struct { Id int64 `json:"id"` } // AdminServiceBlockDeleteReq 删除模块 type AdminServiceBlockDeleteReq struct { g.Meta `path:"/admin/service/block/delete" method:"post" tags:"admin" summary:"删除服务介绍页模块"` Id int64 `v:"required" json:"id"` } type AdminServiceBlockDeleteRes struct{} // ---------- 作品案例 ---------- // AdminServiceWorkItem 作品列表项(不含 content_md) type AdminServiceWorkItem struct { Id int64 `json:"id"` Category int `json:"category"` CategoryName string `json:"category_name"` Title string `json:"title"` Summary string `json:"summary"` CoverPath string `json:"cover_path"` CoverUrl string `json:"cover_url"` PriceCents int64 `json:"price_cents"` PriceNote string `json:"price_note"` Sort int `json:"sort"` IsEnabled int `json:"is_enabled"` CreatedAt string `json:"created_at"` } // AdminServiceWorkListReq 作品列表 type AdminServiceWorkListReq struct { g.Meta `path:"/admin/service/work/list" method:"get" tags:"admin" summary:"软件开发作品列表"` Keyword string `json:"keyword"` Category int `json:"category"` IsEnabled *int `json:"isEnabled"` Page int `json:"page"` PageSize int `json:"pageSize"` } type AdminServiceWorkListRes struct { List []AdminServiceWorkItem `json:"list"` Total int `json:"total"` } // AdminServiceWorkDetailReq 作品详情(编辑回填) type AdminServiceWorkDetailReq struct { g.Meta `path:"/admin/service/work/detail" method:"get" tags:"admin" summary:"软件开发作品详情"` Id int64 `v:"required" json:"id"` } type AdminServiceWorkDetailRes struct { Id int64 `json:"id"` Category int `json:"category"` Title string `json:"title"` Summary string `json:"summary"` ContentMd string `json:"content_md"` CoverPath string `json:"cover_path"` CoverUrl string `json:"cover_url"` Images []string `json:"images"` PriceCents int64 `json:"price_cents"` PriceNote string `json:"price_note"` Sort int `json:"sort"` IsEnabled int `json:"is_enabled"` } // AdminServiceWorkSaveReq 新增/编辑作品 type AdminServiceWorkSaveReq struct { g.Meta `path:"/admin/service/work/save" method:"post" tags:"admin" summary:"保存软件开发作品"` Id int64 `json:"id"` Category int `v:"required|in:1,2,3,4#请选择分类|分类不合法" json:"category"` Title string `v:"required#请填写作品名称" json:"title"` Summary string `v:"length:0,500#简介最多 500 字" json:"summary"` ContentMd string `json:"contentMd"` CoverPath string `json:"coverPath"` Images []string `json:"images"` PriceCents int64 `v:"min:0#价格不能为负" json:"priceCents"` PriceNote string `v:"length:0,64#价格备注最多 64 字" json:"priceNote"` Sort int `json:"sort"` IsEnabled int `json:"isEnabled"` } type AdminServiceWorkSaveRes struct { Id int64 `json:"id"` } // AdminServiceWorkDeleteReq 删除作品(软删除) type AdminServiceWorkDeleteReq struct { g.Meta `path:"/admin/service/work/delete" method:"post" tags:"admin" summary:"删除软件开发作品"` Id int64 `v:"required" json:"id"` } type AdminServiceWorkDeleteRes struct{} // ---------- 报价申请 ---------- // AdminServiceQuoteItem 报价申请列表项 type AdminServiceQuoteItem struct { Id int64 `json:"id"` UserId int64 `json:"user_id"` UserNickname string `json:"user_nickname"` WorkId int64 `json:"work_id"` WorkTitle string `json:"work_title"` Contact string `json:"contact"` Requirement string `json:"requirement"` Budget string `json:"budget"` Status int `json:"status"` StatusText string `json:"status_text"` QuoteCents int64 `json:"quote_cents"` QuoteNote string `json:"quote_note"` HandledAt string `json:"handled_at"` CreatedAt string `json:"created_at"` } // AdminServiceQuoteListReq 报价申请列表 type AdminServiceQuoteListReq struct { g.Meta `path:"/admin/service/quote/list" method:"get" tags:"admin" summary:"报价申请列表"` Status *int `json:"status"` // nil=全部 Page int `json:"page"` PageSize int `json:"pageSize"` } type AdminServiceQuoteListRes struct { List []AdminServiceQuoteItem `json:"list"` Total int `json:"total"` } // AdminServiceQuoteHandleReq 处理报价申请(填报价 + 状态),用户端推站内信 type AdminServiceQuoteHandleReq struct { g.Meta `path:"/admin/service/quote/handle" method:"post" tags:"admin" summary:"处理报价申请"` Id int64 `v:"required" json:"id"` Status int `v:"in:0,1,2,3#状态不合法" json:"status"` QuoteCents int64 `v:"min:0#报价不能为负" json:"quoteCents"` QuoteNote string `v:"length:0,500#报价说明最多 500 字" json:"quoteNote"` } type AdminServiceQuoteHandleRes struct{}