FoodLabeling.Application.Contracts
当前登录用户简要信息(不含敏感字段)
当前用户可见菜单树节点(与权限分配一致)
当前登录用户的菜单与权限码(用于前端动态路由/按钮权限)
分页返回(包含当前页、总页数)
列表项类型
当前页码(从 1 开始)
每页条数
总条数
总页数
列表数据
分类分布项
分类Id
分类名称
数量
占比(百分比)
日趋势点
日期(yyyy-MM-dd)
值
仪表盘指标卡片
指标唯一标识(如 labelsPrintedToday)
指标标题
当前值
对比周期值
增减值(Value - PreviousValue)
增减比例(百分比)
仪表盘总览输出
今日打印标签
启用模板数
活跃用户数
门店数
人员数
产品数
指标卡片
近7天打印趋势
按分类分布
分类分布总数
按分类分布(前端直观命名)
按分类分布总数(前端直观命名)
最近打印标签(全门店最新若干条,用于 Recent Labels 区块)
统计时间
Dashboard「Recent Labels」单行数据(最近打印记录)
打印任务 Id(fl_label_print_task.Id)
标签编码(界面 Serial / Label ID,如 1-251201)
展示名称:优先产品名,否则标签名称
打印人用户 Id(CreatedBy)
打印人展示名(User.Name 或 UserName)
打印时间(PrintedAt 优先,否则 CreationTime)
状态:active 或 expired(依据 PrintInputJson 中保质期与当前日期比较)
角标/尺寸短文案(如 2"x2",用于左侧圆标)
新建组织入参
指派到的合作伙伴 Id(Assign to Partner)
组织(Group)分页查询入参
模糊搜索(GroupName、所属 Partner 的 PartnerName)
按所属合作伙伴筛选(fl_partner.Id)
启用状态
组织列表项
所属合作伙伴名称(列表「Parent Partner」列)
组织详情
编辑组织入参
按钮展示文案(为空则默认使用 CategoryName)
COLOR 模式存色值、IMAGE 模式存图片 URL、TEXT 可为分类小图或空(与 buttonAppearance 配合)
按钮外观:TEXT / COLOR / IMAGE(展示值见 categoryPhotoUrl)
门店可用范围:ALL / SPECIFIED
指定门店 Id 列表(当 AvailabilityType=SPECIFIED 时必填)
editor JSON 里的 id,对应数据库 fl_label_template.TemplateCode
editor JSON 里的 name,对应数据库 fl_label_template.TemplateName
editor JSON 里的 appliedLocation(ALL / SPECIFIED)
预留:前端可能不传;如果不传则默认 true
elements(前端 editor 的 elements[],会全量重建)
当 AppliedLocationType=SPECIFIED 时生效
模板与产品/标签类型绑定默认值
模板元素(对齐 editor JSON:id/type/typeAdd/elementName/x/y/width/height/rotation/border/config 等)
元素附加类型(分组前缀 + 控件名),如 label_Duration
值来源:FIXED / AUTO_DB / PRINT_INPUT
元素配置
标签模板分页查询入参
关键字(模板名称/模板编码)
门店Id(用于筛选:ALL 或指定门店)
标签类型(例如 PRICE)
状态
位置展示:All Locations 或首个指定门店的名称
elements 数量(Contents)
模板与产品/标签类型绑定后的默认值行
默认值JSON(建议结构:{ "el-xxx": "默认值" })
标签分页列表入参(按产品展示多个标签)
门店Id(可选)
产品Id(可选;用于“一个产品展示多个标签”)
模板编码(可选)
同一个标签绑定的产品名称,用 “,” 分割
绑定模板的编码(与详情接口一致,供管理端「录入数据」等按模板操作)
模板缺失字段告警(当前阶段暂定 false)
标签编码(fl_label.LabelCode)
选择用于预览的产品Id(fl_product.Id)
如果不传,默认取该标签绑定的第一个产品
业务基准时间(用于 DATE/TIME 元素的渲染计算)
不传则默认使用服务器当前时间
打印输入(前端传,用于 PRINT_INPUT 元素)
key 建议使用模板元素的 InputKey
预览输出:与前端 LabelCanvas/LabelPreviewOnly 的 LabelTemplate 结构尽量一致
新增门店 Support 联系方式
门店 Support 联系方式详情
编辑门店 Support 联系方式
Location Manager 批量导入(Excel)
上传的 Excel 文件(与模板列一致)
Location 批量导入结果
门店批量编辑(网格「保存全部」)请求体
待保存的行;id 为 。可含空行:忽略 的项。
单行编辑数据:主键 + 与单条 PUT /location/{id} 相同的可编辑字段。
门店主键(非空、非 Empty 时才会更新)
门店批量编辑结果
批量编辑中单条失败信息
在请求 items 数组中的序号(从 1 开始,与前端网格行对应)
新增门店入参
Location ID(业务编码)
门店分页查询入参
模糊搜索(Location ID/Name/Street/City/State/Country/Zip/Phone/Email)
Partner
Group
启用状态
门店列表输出
编辑门店入参
Location Name
启用状态
新建合作伙伴入参
合作伙伴分页查询入参
模糊搜索(PartnerName / ContactEmail / PhoneNumber)
启用状态(与列表筛选一致)
合作伙伴列表项
合作伙伴详情
编辑合作伙伴入参
可选子目录(相对路径),例如:category、category/2026-03
可直接保存到业务表的访问 URL(相对路径)
产品模块:新增类别入参
按钮展示文案(为空则默认使用 CategoryName)
COLOR 模式存色值、IMAGE 模式存图片 URL、TEXT 可为分类小图或空(与 buttonAppearance 配合)
按钮外观:TEXT / COLOR / IMAGE(展示值见 categoryPhotoUrl)
门店可用范围:ALL / SPECIFIED
指定门店 Id 列表(当 AvailabilityType=SPECIFIED 时必填)
产品模块:类别分页列表入参
模糊搜索(CategoryCode/CategoryName)
启用状态过滤
产品模块:类别列表行
产品模块:类别详情
COLOR 色值 / IMAGE 图片 URL / TEXT 可选图
产品模块:编辑类别入参
门店Id
产品Id列表
产品-门店分页查询入参
门店Id(location.Id,string 表示)
产品Id(fl_product.Id,string)
产品Id列表(将替换当前门店下的全部产品关联)
Product 批量导入(Excel)
上传的 Excel(列:Location / Product Category / Product / Product Code)
Product 批量编辑(网格保存全部)
单行:产品主键(字符串 Guid)+ 与单条 PUT 相同的 body 字段。
可选。不传或空则创建时由后端生成唯一编码(如 PRD_xxxxxxxx)。
可选。门店 Id 列表;每个 Id 在 fl_location_product 落一行(同一 fl_product 可对应多门店)。
不传或空列表则不在本接口写入门店关联(仍可用 product-location 接口维护)。
产品分页查询入参
模糊搜索(ProductCode/ProductName/CategoryName)
启用状态
该产品关联的标签数量(fl_label_product + fl_label)
该产品关联的门店Id列表(来自 fl_location_product)
新增权限(Menu)入参(美国版对外)
父级ID(menu 表为字符串ID,可能是数字;根节点默认 0)
权限(Menu)分页查询入参(美国版对外)
菜单来源(与 rbac 的 MenuSource 含义一致,int 存储)
权限(Menu)列表输出(美国版对外)
权限树节点(返回菜单表全部字段)
编辑权限(Menu)入参(美国版对外)
角色-权限移除入参
角色-权限设置入参(覆盖式)
角色ID
菜单ID列表(覆盖式)
新增角色入参(美国版对外)
数据范围(与 rbac 的 DataScope 含义一致,int 存储)
角色分页查询入参(美国版对外)
角色名称(模糊)
角色编码(模糊)
启用状态
角色列表输出(美国版对外)
角色详情输出(美国版对外)
该角色已分配的菜单权限ID列表
编辑角色入参(美国版对外)
Label Report 聚合结果(卡片 + 图表 + Top 产品表)
按标签分类的打印量(柱状图)
折线图:默认统计区间内最后 7 个自然日(按日汇总)
用量最高的产品(含占比)
相对上一同长周期变化率(百分比,如 20.1 表示 +20.1%)
Label Report 统计与导出共用筛选
Web Reports — Print Log 分页查询
Print Log 列表行(Reports 管理端)
打印任务 Id(fl_label_print_task.Id),重打时使用
标签编码(展示为 Label ID)
分类展示名(优先产品分类,否则标签分类)
模板展示(尺寸 + 模板名)
打印人姓名
门店展示:名称 (编码)
门店 Id(重打校验用)
从 PrintInputJson 尽力解析的保质期文本;无则「无」
Team Member 批量导入(Excel)
上传的 Excel 文件(与模板列一致)
Team Member 批量导入结果
Team Member 批量编辑(网格「保存全部」)请求体
待保存的行;id 为成员主键。可含空行:忽略 id 为全零 GUID 的项。
单行:主键 + 与单条 PUT 更新相同的字段。
登录账号(建议用邮箱或自定义用户名)
关联门店(至少1个)
成员分页查询入参
关键字(姓名/用户名/邮箱/电话)
角色ID(可选)
门店ID(可选)
启用状态(可选)
角色(当前仅返回第一个)
为空表示不改密码
App 端展示的绑定门店信息
门店主键 Id(Guid 字符串)
业务编码,如 LOC-1
门店名称
拼接后的完整地址,便于移动端展示
门店是否启用
App 修改密码入参
当前密码
新密码
确认新密码
App「Location」门店详情(与原型字段对齐)
门店主键(Guid 字符串)
门店名称
完整地址(街道、城市、州、邮编拼接;无则为「无」)
门店电话(来自 location.Phone;空为「无」)
营业时间;当前库无字段,固定返回「无」直至业务落库
店长姓名;优先取绑定本店且角色名/编码含 manager 的用户
店长电话;同上用户 User.Phone 格式化;无则为「无」
美国版 App 登录入参(使用邮箱作为账号,支持图形验证码)
登录邮箱(对应 user.Email)
图形验证码 UUID(开启验证码时必填)
图形验证码(开启验证码时必填)
美国版 App 登录返回(含 Token 与绑定门店)
当前账号在 userlocation 中绑定的门店列表
App「我的资料」展示数据(My Profile)
全名(Name,无则 Nick,再无则 UserName)
邮箱
电话展示(如 +1 (555) 123-4567);无则「无」
员工号/登录名(当前使用 User.UserName,可与业务约定为工号)
角色展示名(多角色英文逗号拼接,按角色 OrderNum)
主角色编码(第一个角色 RoleCode,供前端样式)
打印明细快照(接口 10,对应 fl_label_print_data 解析后的元素级信息)
元素完整 JSON(与 LabelTemplateElementDto / 编辑器 elements[] 项同构),供 App 重打组装模板。
App 打印日志分页查询入参(仅当前登录账号 + 当前门店)
当前门店 Id(location.Id,Guid 字符串)
打印日志列表项
任务Id(fl_label_print_task.Id)
批次Id(同一次点击 Print 共享)
第几份(从 1 开始)
标签Id
标签编码
产品Id
产品名称
标签类型名称(来自 fl_label_type.TypeName)
模板尺寸(来自 fl_label_template.Width/Height/Unit)
打印入参 JSON(直接来自 fl_label_print_task.PrintInputJson 列)
打印时间(PrintedAt ?? CreationTime)
操作人姓名(当前登录账号 Name)
门店名称
第一级:标签分类(fl_label_category)
按钮外观:TEXT / COLOR / IMAGE(COLOR/IMAGE 的展示值在 categoryPhotoUrl)
第三级:产品卡片(同一产品 Id 若存在多套标签模板,按 TemplateId 拆成多条,便于端上多卡展示)
当前卡片对应 fl_label.TemplateId;与 ProductId 共同唯一标识一张卡
当前卡片所用模板编码(与四级节点一致)
当前卡片模板尺寸文案(如 6.00x12.00cm)
副标题(无独立业务字段时:有编码显示编码,否则「无」)
第四级:该产品在当前标签分类+门店下可选的标签种类
App Labeling 四级列表入参
当前门店 Id(location.Id,Guid 字符串)
关键词(匹配标签分类/产品分类/产品名/标签类型/标签名称)
仅展示某一标签分类(侧边栏选中时传);不传则返回全部分类
App 标签预览出参(顶部信息 + 预览模板结构)
预览图(base64 png,可空;若为空,客户端可用 Template 自行渲染)
预览模板结构(与 LabelCanvas/LabelPreviewOnly 结构尽量一致)
当前预览上下文(模板+产品+标签类型)命中的默认值配置。
数据来源:fl_label_template_product_default.DefaultValuesJson
App 标签预览入参
门店Id(fl_label.LocationId)
标签编码(fl_label.LabelCode)
选择用于预览的产品Id(fl_product.Id)
不传则默认取该标签绑定的第一个产品
业务基准时间(用于 DATE/TIME 等元素的计算)
打印输入(用于 PRINT_INPUT 元素)
App 打印入参
门店Id(fl_label.LocationId)
标签编码(fl_label.LabelCode)
选择用于打印的产品Id(fl_product.Id)
不传则默认取该标签绑定的第一个产品
打印份数(<=0 则按 1 处理)
客户端幂等请求Id(可选)。
同一个 clientRequestId 重复调用 print 接口时,后端会直接返回首次创建的 batchId/taskIds,不会重复写库。
业务基准时间(用于 DATE/TIME 等元素的计算)
打印数据(对齐《标签模块接口对接说明(10)》):
- App 推荐传:与平台导出 label-template-*.json 同构的合并后模板(含 elements[].config),便于落库后直接重打;
- 兼容旧客户端:扁平字典(key 对齐元素 inputKey),由服务端 PreviewAsync 解析生成 RenderDataJson。
打印机Id(可选,若业务需要追踪)
打印机蓝牙 MAC(可选)
打印机地址(可选)
App 打印出参(接口 9 / 11)
App 重新打印入参(根据历史任务Id重打)
当前门店Id(用于权限校验,必须与历史任务一致)
历史打印任务Id(fl_label_print_task.Id)
重新打印份数(<=0 则按 1 处理;默认 1)
客户端幂等请求Id(可选)。
同一个 clientRequestId 重复调用 reprint 接口时,后端会直接返回首次创建的 batchId/taskIds,不会重复写库。
重新打印时可覆盖打印机Id(可选)
重新打印时可覆盖打印机蓝牙 MAC(可选)
重新打印时可覆盖打印机地址(可选)
第四级:标签种类(对应一条可打印的标签实例)
业务标签编码,预览/打印流程使用
模板物理尺寸描述,如 2"x2"
第二级:产品分类(fl_product.CategoryId join fl_product_category)
产品分类Id;当产品未归类或分类不存在时为空
产品分类图片地址;当产品未归类或分类不存在时为空
分类显示名;空为「无」
按钮展示文案;为空时客户端可回退使用 Name
按钮外观:TEXT / COLOR / IMAGE(COLOR/IMAGE 的展示值在 categoryPhotoUrl)
门店可用范围:ALL / SPECIFIED(本树已按当前门店过滤)
排序号(来自 fl_product_category;未归类为较大值以排在后)
Food Labeling 模块 - 应用契约层(美国版)
当前登录会话:菜单权限与退出(美国版 Web 管理端)
获取当前登录用户的角色编码、权限码与可见菜单树
与框架 UserManager.GetInfoAsync 一致;用户名为 admin 时返回全部未删除菜单(与 AccountService.GetVue3Router 行为对齐)。
用户简要信息、权限码与菜单树
成功
未登录或令牌无效
服务器错误
退出登录:清除服务端用户信息缓存(JWT 仍由前端丢弃)
与框架 AccountService.PostLogout 一致;未登录时返回 false。
是否执行了缓存清理(已登录为 true)
成功
服务器错误
Dashboard 统计接口(美国版)
获取 Dashboard 总览统计(卡片 + 周趋势 + 分类分布 + Recent Labels 最近打印)
Food Labeling 示例应用服务接口(美国版)
简单问候示例接口
姓名
问候语
组织(Group)管理接口(fl_group)
组织分页列表(与导出使用相同筛选条件)
分页与筛选;SkipCount 为页码(从 1 起)
组织详情
新增组织
编辑组织
删除组织(逻辑删除)
按列表相同筛选条件全量导出组织(Region)为 PDF(不分页;与 相同筛选;单次最多 5000 条)
Keyword、PartnerId、State、Sorting;分页字段忽略
application/pdf
标签管理接口(美国版)
按产品分页列表(一个产品展示多个标签)
标签详情(id=LabelCode)
新增标签
编辑标签(id=LabelCode)
删除标签(逻辑删除)
标签预览:解析模板 AUTO_DB/PRINT_INPUT(不做打印落库)
标签模板管理接口(美国版对外)
标签模板分页列表
标签模板详情(含 elements 与适用门店)
新增标签模板
编辑标签模板(版本号 +1,重建 elements)
删除标签模板(逻辑删除;若已被标签引用则禁止)
门店管理接口(美国版)
门店分页列表
查询条件
新增门店
门店信息
编辑门店
门店Id
门店信息
删除门店(逻辑删除)
门店Id
下载 Location Manager 批量导入模板(读取服务器 batchImportOfFiles 目录下 xlsx)
按列表筛选条件全量导出门店为 Excel(与列表相同过滤与排序,不分页、不限条数)
批量导入门店(Excel,multipart/form-data 字段 file)
批量编辑门店(网格保存全部,JSON 一次提交多行)
每行通过 id 定位门店,字段与单条 PUT /location/{id} 一致;id 为 的项忽略。
示例请求:
```json
{
"items": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"partner": "MedVantage Cafe Group",
"groupName": "NC Region",
"locationName": "UNCC store",
"street": "222 School House Lane",
"city": "Charlotte",
"stateCode": "NC",
"country": "USA",
"zipCode": "29889",
"phone": "2123456789",
"email": "nc@example.com",
"latitude": 35.3,
"longitude": -80.7,
"state": true
}
]
}
```
参数说明:
- items: 编辑行数组;单行失败不影响其它行提交结果汇总
批量编辑请求体
成功数、失败数及失败明细
全部或部分行处理完成,见返回体中的计数与 errors
整单校验失败(如超过单次条数上限、items 为空)
服务器错误
全局 Support 联系方式(全平台共用;Web 可增改查,App 仅可查)
查询全局 Support 联系方式(已登录即可;App / Web 共用)
新增全局 Support 联系方式(系统仅允许一条;Web 管理端)
联系方式
编辑全局 Support 联系方式(Web 管理端)
联系方式主键
联系方式
合作伙伴管理接口(fl_partner)
合作伙伴分页列表(与导出使用相同筛选条件)
分页与筛选;SkipCount 为页码(从 1 起)
分页数据
成功
参数错误
服务器错误
合作伙伴详情
主键 Id
详情
成功
Id 无效
服务器错误
新增合作伙伴
名称、邮箱、电话、启用状态
新建后的详情
示例请求:
```json
{
"partnerName": "Global Foods Inc.",
"contactEmail": "admin@globalfoods.com",
"phoneNumber": "+1 (555) 100-2000",
"state": true
}
```
成功
校验失败
服务器错误
编辑合作伙伴
主键 Id
名称、邮箱、电话、启用状态
更新后的详情
成功
校验失败或记录不存在
服务器错误
删除合作伙伴(逻辑删除)
主键 Id
成功
Id 无效或记录不存在
服务器错误
按当前列表筛选条件批量导出合作伙伴为 PDF(Account Management「Company」页签;不分页,上限 5000 条)
与列表相同的 Keyword、State;分页字段忽略
PDF 文件流
筛选条件需与 一致,便于统计与导出数据对齐。
成功返回 application/pdf
参数错误
服务器错误
产品管理接口(Products,fl_product)
产品分页列表
产品详情
产品主键(Guid,与 fl_product.Id 一致;使用 Guid 路由约束,避免与 export-* 等字面路径冲突)
新增产品
可选;为空时后端生成唯一编码(如 PRD_ + Guid)。
若 有值,将在同一事务内批量写入 fl_location_product(一门店一条)。
编辑产品
当请求体包含 属性时,按该列表整表替换本产品在各门店的关联;
不传该属性则不改门店关联(兼容仅改名称/分类等调用)。
删除产品(逻辑删除)
下载 Product 批量导入模板(服务器 TemplateDirectory 下 xlsx)
按列表筛选条件全量导出产品为 Excel(与列表相同过滤;不分页)
批量导入产品(Excel,multipart/form-data 字段 file)
批量编辑产品(JSON 一次提交多行,与单条 PUT 字段一致)
产品模块:类别(Categories)接口
产品-门店关联管理(fl_location_product)
关联分页列表(可按门店Id/产品Id过滤)
门店下的全部产品(id=LocationId)
新增/批量建立门店与产品的关联
编辑:替换该门店下的全部产品关联
删除:删除该门店的全部产品关联
权限(Menu)管理接口(仅用于食品标签-美国版对外)
权限列表(不分页)
权限详情
新增权限
编辑权限
删除权限(逻辑删除)
获取全部权限树(GET)
树状权限列表
角色管理接口(仅用于食品标签-美国版对外)
角色分页列表
角色详情
新增角色
编辑角色
删除角色(逻辑删除)
角色-权限关联接口(仅用于食品标签-美国版对外)
覆盖式设置角色的菜单权限
获取角色已分配的菜单ID列表
移除角色的指定菜单权限
Reports(Print Log / Label Report)管理端接口
Print Log 分页列表;角色 admin 可查全部,否则仅当前用户打印记录。
Print Log 导出 PDF(筛选与列表一致,最多 5000 条)
Print Log 全量导出 Excel(筛选与列表一致;排序与列表 PrintedAt 规则一致;最多 5000 条)
根据历史任务重打(与 App 入参一致);admin 可重打任意用户任务,否则仅本人任务。
Label Report 统计(卡片 + 分类柱数据 + 7 日趋势 + Top 产品);admin 统计全部,否则仅当前用户。
Label Report 导出 PDF
下载 Team Member 批量导入模板(服务器 batchImportOfFiles 目录下 xlsx)
按列表筛选条件全量导出成员为 PDF(与列表相同过滤;不分页、不限条数)
批量导入成员(Excel,multipart/form-data 字段 file)
批量编辑成员(JSON 一次提交多行)
美国版移动端认证(登录返回绑定门店)
App 登录:使用邮箱 + 密码校验并签发 Token,同时返回 userlocation 绑定的门店
获取当前登录账号已绑定的门店(用于切换门店等场景)
获取当前登录用户资料(My Profile:姓名、邮箱、电话、员工号、角色)
资料 DTO
成功
未登录或用户不存在
服务器错误
当前登录用户修改密码(校验原密码与复杂度规则)
当前密码、新密码、确认密码
新密码需满足:至少 8 位;含大写与小写字母;至少 1 位数字;至少 1 个非字母数字特殊字符。
成功
参数或校验失败
服务器错误
按门店 Id 查询 Location 详情(须为当前账号 userlocation 绑定门店)
门店 Guid 字符串
店名、地址、电话、营业时间占位、店长信息
成功
参数非法、未绑定或无权限
服务器错误
App Labeling:四级列表(标签分类 → 产品分类 → 产品卡片「按模板拆分」→ 标签种类)
获取当前门店下四级嵌套树,供移动端 Labeling 首页使用
App 打印预览:按标签编码解析模板并返回顶部展示字段 + 预览模板结构
App 打印:创建打印任务并落库打印明细(fl_label_print_task / fl_label_print_data)
App 重新打印:根据历史任务Id重打(创建新任务与明细)
App 打印日志:获取当前登录账号在当前门店打印的记录(分页,时间倒序)
美国版 App JWT 自定义声明(用于与 Web 管理端 Token 区分能力)
声明类型:客户端种类
美国版移动端 App