本文介绍如何实现进销存管理系统的业务单据模块,业务单据模块包括采购进货单、采购退货单、销售出货单、销售退货单4个菜单页面。由于进销单据字段大同小异,因此设计共用一个页面组件类。
- 项目代码:JxcLite
- 开源地址: https://gitee.com/known/JxcLite
1. 配置模块
运行项目,在【系统管理-模块管理】中配置如下模块菜单,配置教程参考之前的教程。
一级模块 | 二级模块 | 代码 | 图标 | Url | 描述 |
---|---|---|---|---|---|
进货管理 | Import | import | |||
采购进货单 | ImportList | unordered-list | /bms/ImportList | 查询和维护采购进货单信息。 | |
采购退货单 | ImportReturn | unordered-list | /bms/ImportReturn | 查询和维护采购退货单信息。 | |
销货管理 | Export | export | |||
销售出货单 | ExportList | unordered-list | /bms/ExportList | 查询和维护销售出货单信息。 | |
销售退货单 | ExportReturn | unordered-list | /bms/ExportReturn | 查询和维护销售退货单信息。 |
2. 实体类
在JxcLite
项目Entities
文件夹下面添加JxBillHead.cs
和JxBillList.cs
两个实体类文件,实体类代码可以直接复制模块管理中由模型设置生成的代码。文章中只简单描述一下实体类的定义,具体代码参见开源,代码定义如下:
namespace JxcLite.Entities;
/// <summary>
/// 业务单据表头信息类。
/// </summary>
public class JxBillHead : EntityBase {
}
/// <summary>
/// 业务单据表体信息类。
/// </summary>
public class JxBillList : EntityBase {
}
3. 建表脚本
打开JxcLite.Web
项目Resources
文件夹下的Tables.sql
资源文件,复制粘贴由【模块管理-模型设置】中生成的建表脚本。文章中只简单描述一下建表脚本,具体脚本参见开源,内容如下:
CREATE TABLE [JxBillHead] (
[Id] varchar(50) NOT NULL PRIMARY KEY,
...
[Files] nvarchar(500) NULL
);
CREATE TABLE [JxBillList] (
[Id] varchar(50) NOT NULL PRIMARY KEY,
...
[Note] ntext NULL
);
4. 服务接口
在JxcLite
项目Services
文件夹下面添加业务单据模块服务接口,文件名定义为IBillService.cs
,该接口定义前后端交互的Api访问方法,包括分页查询、批量删除实体、保存实体。具体方法定义如下:
namespace JxcLite.Services;
public interface IBillService : IService
{
//分页查询业务单据信息
Task<PagingResult<JxBillHead>> QueryBillsAsync(PagingCriteria criteria);
//根据单据类型获取默认单据信息
Task<JxBillHead> GetDefaultBillAsync(string type);
//根据表头ID获取单据表体信息列表
Task<List<JxBillList>> GetBillListsAsync(string headId);
//批量删除业务单据信息
Task<Result> DeleteBillsAsync(List<JxBillHead> models);
//保存业务单据信息
Task<Result> SaveBillAsync(UploadInfo<JxBillHead> info);
}
5. 服务实现
在JxcLite.Web
项目Services
文件夹下面添加业务单据模块服务接口的实现类,文件名定义为BillService.cs
,文章中只简单描述一下实现类的定义和继承,具体实现参见开源,定义如下:
namespace JxcLite.Web.Services;
class BillService(Context context) : ServiceBase(context), IBaseDataService
{
public Task<PagingResult<JxBillHead>> QueryBillsAsync(PagingCriteria criteria) {
}
public Task<JxBillHead> GetDefaultBillAsync(string type) {
}
public Task<List<JxBillList>> GetBillListsAsync(string headId) {
}
public Task<Result> DeleteBillsAsync(List<JxBillHead> models) {
}
public Task<Result> SaveBillAsync(UploadInfo<JxBillHead> info) {
}
}
双击打开JxcLite.Web
项目中的AppWeb.cs
文件,在AddJxcLiteCore
方法中注册服务类,前端组件可以通过依赖注入工厂创建服务的实例。代码如下:
public static class AppWeb
{
public static