Files
yunzerwebsiteallinone/go/controllers/app_erp_archive.go
T
2026-10-19 01:13:17 +08:00

116 lines
3.4 KiB
Go

package controllers
// 移动端进销存档案接口:商品、分类、仓库、客商。
//
// 档案维护(新建/修改/删除)仍留在 Web 端,手机端只读——开单时需要选商品、
// 选仓库、选客户/供应商,因此这里提供与 Web 端同一份过滤与补字段口径的列表/详情。
// AppErpArchiveController 档案查询(移动端只读)
type AppErpArchiveController struct {
AppErpBaseController
}
// ProductList GET /api/erp/product/list 商品列表(含分类名、全仓库存与预警状态)
func (c *AppErpArchiveController) ProductList() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
page, pageSize := c.erpPage()
f := erpProductFilter{
Keyword: c.erpQuery("keyword"),
CategoryID: c.erpUint("category_id"),
Brand: c.erpQuery("brand"),
Status: c.erpQuery("status"),
IsDraft: c.erpQuery("is_draft"),
OnlyEnabled: c.erpFlag("only_enabled"),
}
list, total, code, msg := erpProductListCore(c.actor(cl), f, page, pageSize)
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpListOK(list, total, page, pageSize, nil)
}
// ProductDetail GET /api/erp/product/detail/:id 商品详情(含分仓/分批次结存)
func (c *AppErpArchiveController) ProductDetail() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
p, code, msg := erpProductDetailCore(c.actor(cl), c.erpPathID())
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpOk(p)
}
// CategoryList GET /api/erp/product/category/list 商品分类(列表 + 树)
func (c *AppErpArchiveController) CategoryList() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
rows, tree, code, msg := erpCategoryListCore(c.actor(cl))
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpOk(map[string]interface{}{"list": rows, "tree": tree})
}
// WarehouseList GET /api/erp/warehouse/list 仓库列表(含在库品种数与货值)
func (c *AppErpArchiveController) WarehouseList() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
rows, code, msg := erpWarehouseListCore(c.actor(cl), c.erpQuery("keyword"), c.erpQuery("status"), c.erpFlag("only_enabled"))
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpOk(map[string]interface{}{"list": rows})
}
// PartnerList GET /api/erp/partner/list?partner_type=supplier|customer 客商列表
// 供应商与客户统一出参(partner_type/partner_name/open_amount),手机端开单与对账只需对接一种结构。
func (c *AppErpArchiveController) PartnerList() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
page, pageSize := c.erpPage()
partnerType := c.erpQuery("partner_type")
if partnerType != "supplier" {
partnerType = "customer"
}
list, total, code, msg := erpPartnerListCore(c.actor(cl), partnerType,
c.erpQuery("keyword"), c.erpFlag("only_enabled"), page, pageSize)
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpListOK(list, total, page, pageSize, nil)
}
// PartnerDetail GET /api/erp/partner/detail/:id?partner_type= 客商详情
func (c *AppErpArchiveController) PartnerDetail() {
cl, err := c.erpClaims()
if c.erpDenied(err) {
return
}
partnerType := c.erpQuery("partner_type")
if partnerType != "supplier" {
partnerType = "customer"
}
data, code, msg := erpPartnerDetailCore(c.actor(cl), partnerType, c.erpPathID())
if msg != "" {
c.erpFail(code, code, msg)
return
}
c.erpOk(data)
}