到哪里做网站,做网站收入怎样,潍坊搜易网站建设,花乡科技园区网站建设本文介绍如何实现进销存管理系统的业务单据模块#xff0c;业务单据模块包括采购进货单、采购退货单、销售出货单、销售退货单4个菜单页面。由于进销单据字段大同小异#xff0c;因此设计共用一个页面组件类。
项目代码#xff1a;JxcLite开源地址#xff1a; https://git…本文介绍如何实现进销存管理系统的业务单据模块业务单据模块包括采购进货单、采购退货单、销售出货单、销售退货单4个菜单页面。由于进销单据字段大同小异因此设计共用一个页面组件类。
项目代码JxcLite开源地址 https://gitee.com/known/JxcLite
1. 配置模块
运行项目在【系统管理-模块管理】中配置如下模块菜单配置教程参考之前的教程。
一级模块二级模块代码图标Url描述进货管理Importimport采购进货单ImportListunordered-list/bms/ImportList查询和维护采购进货单信息。采购退货单ImportReturnunordered-list/bms/ImportReturn查询和维护采购退货单信息。销货管理Exportexport销售出货单ExportListunordered-list/bms/ExportList查询和维护销售出货单信息。销售退货单ExportReturnunordered-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
{//分页查询业务单据信息TaskPagingResultJxBillHead QueryBillsAsync(PagingCriteria criteria);//根据单据类型获取默认单据信息TaskJxBillHead GetDefaultBillAsync(string type);//根据表头ID获取单据表体信息列表TaskListJxBillList GetBillListsAsync(string headId);//批量删除业务单据信息TaskResult DeleteBillsAsync(ListJxBillHead models);//保存业务单据信息TaskResult SaveBillAsync(UploadInfoJxBillHead info);
}5. 服务实现
在JxcLite.Web项目Services文件夹下面添加业务单据模块服务接口的实现类文件名定义为BillService.cs文章中只简单描述一下实现类的定义和继承具体实现参见开源定义如下
namespace JxcLite.Web.Services;class BillService(Context context) : ServiceBase(context), IBaseDataService
{public TaskPagingResultJxBillHead QueryBillsAsync(PagingCriteria criteria) { }public TaskJxBillHead GetDefaultBillAsync(string type) { }public TaskListJxBillList GetBillListsAsync(string headId) { }public TaskResult DeleteBillsAsync(ListJxBillHead models) { }public TaskResult SaveBillAsync(UploadInfoJxBillHead info) { }
}双击打开JxcLite.Web项目中的AppWeb.cs文件在AddJxcLiteCore方法中注册服务类前端组件可以通过依赖注入工厂创建服务的实例。代码如下
public static class AppWeb
{public static void AddJxcLiteCore(this IServiceCollection services){services.AddScopedIBillService, BillService();}
}6. 数据依赖
在JxcLite.Web项目Repositories文件夹下面添加业务单据模块数据依赖类文件名定义为BillRepository.cs文章中只简单描述一下依赖类的定义具体实现参见开源定义如下
namespace JxcLite.Web.Repositories;class BillRepository
{internal static TaskPagingResultJxBillHead QueryBillsAsync(Database db, PagingCriteria criteria) { }internal static TaskListJxBillList GetBillListsAsync(Database db, string headId) { }//根据前缀获取最大业务单号internal static Taskstring GetMaxBillNoAsync(Database db, string prefix) { }
}7. 列表页面
在JxcLite.Client项目Pages\BillData文件夹下面添加BillList.cs单据列表组件该组件是进销单及退货单的列表组件共用类具体实现参见开源部分代码如下
namespace JxcLite.Client.Pages.BillData;public class BillList : BaseTablePageJxBillHead
{private IBillService Service;//取得业务单据类型进货、进退货、销货、销退货由具体单据页面重写该类型protected virtual string Type { get; }protected override async Task OnPageInitAsync(){await base.OnPageInitAsync();Service await CreateServiceAsyncIBillService();//创建服务Table.FormType typeof(BillForm);//自定义表单类型Table.OnQuery QueryBillsAsync; //查询方法//下面是设置列表栏位显示的模板Table.Column(c c.Status).Template((b, r) b.Tag(r.Status));Table.Column(c c.BillDate).Type(FieldType.Date);}//新增public async void New(){var row await Service.GetDefaultBillAsync(Type);Table.NewForm(Service.SaveBillAsync, row);}//编辑public async void Edit(JxBillHead row){row.Lists await Service.GetBillListsAsync(row.Id);Table.EditForm(Service.SaveBillAsync, row);}//批量删除和删除public void DeleteM() Table.DeleteM(Service.DeleteBillsAsync);public void Delete(JxBillHead row) Table.Delete(Service.DeleteBillsAsync, row);//复制和退货public void Copy() Table.SelectRow(async row {});public void Return() Table.SelectRow(async row {});//打印public void Print() Table.SelectRow(async row {row.Lists await Service.GetBillListsAsync(row.Id);//BillPrint为业务单据打印组件await JS.PrintAsyncBillPrint(f f.Set(c c.Model, row));});//导出public async void Export() await ExportDataAsync();private TaskPagingResultJxBillHead QueryBillsAsync(PagingCriteria criteria){//设置单据类型查询条件criteria.SetQuery(nameof(JxBillHead.Type), QueryType.Equal, Type);return Service.QueryBillsAsync(criteria);}
}8. 供应商和客户选择框
在JxcLite.Client项目Shared文件夹下面添加PartnerPicker.cs该组件继承BasePicker用于弹窗选择客户和供应商信息具体实现参见开源部分代码如下
namespace JxcLite.Client.Shared;public class PartnerPicker : BasePickerJxPartner
{private IBaseDataService Service;private TableModelJxPartner Table;//取得弹框选择的数据列表public override ListJxPartner SelectedItems Table.SelectedRows?.ToList();//取得或设置商业伙伴类型客户、供应商[Parameter] public string Type { get; set; }protected override async Task OnInitAsync() {}protected override void BuildContent(RenderTreeBuilder builder) builder.Table(Table);
}9. 商品信息选择框
在JxcLite.Client项目Shared文件夹下面添加GoodsPicker.cs该组件继承BasePicker用于弹窗选择商品信息具体实现参见开源部分代码如下
namespace JxcLite.Client.Shared;public class GoodsPicker : BasePickerJxGoods
{private IBaseDataService Service;private TableModelJxGoods Table;//取得弹框选择的数据列表public override ListJxGoods SelectedItems Table.SelectedRows?.ToList();protected override async Task OnInitAsync() {}protected override void BuildContent(RenderTreeBuilder builder) builder.Table(Table);
}10. 表单组件
首先在JxcLite.Client项目Shared文件夹下面添加TypeForms.cs和TypeTables.cs文件添加业务单据表头类型表单组件和业务单据表体类型表格组件代码如下
namespace JxcLite.Client.Shared;public class BillHeadTypeForm : AntFormJxBillHead { }public class BillListTypeTable : AntTableJxBillList { }再在JxcLite.Client项目Pages\BillData文件夹下面添加BillForm.razor和BillForm.razor.cs文件由于单据表单组件有点复杂代码较长所以采用razor语法来实现该组件是进销单及退货单的列表组件共用类具体实现参见开源部分代码如下
inherits BaseFormJxBillHeadBillHeadTypeForm FormModelAntRowDataItem Span6 Label业务单号 RequiredAntInput Disabled bind-Valuecontext.BillNo //DataItemDataItem Span6 Label单证状态KTag Textcontext.Status //DataItemDataItem Span6 Label单证日期 RequiredAntDatePicker bind-Valuecontext.BillDate //DataItemDataItem Span6 Label商业伙伴 RequiredPartnerPicker Valuecontext.Partner AllowClearTypeGetPartnerPickerType(context) //DataItem/AntRow
/BillHeadTypeForm
KToolbarKTitle Text商品明细 /divif (!Model.IsView){Button TypeButtonType.Primary Iconplus OnClickOnAdd添加/Button}/div
/KToolbar
BillListTypeTable DataSourceModel.Data.Lists HidePagination ScrollX1300px ScrollY200pxIntegerColumn Title序号 Fieldcontext.SeqNo Width60 Fixedleft /StringColumn Title商品编码 Width120 FixedleftAntInput bind-Valuecontext.Code Stylewidth:100px //StringColumnStringColumn Title金额 Width100AntDecimal bind-Valuecontext.Amount OnChangeeOnGoodsChange(3, context) //StringColumnif (!Model.IsView){ActionColumn Title操作 AlignColumnAlign.Center Width100 FixedrightTag Colorred-inverse OnClickeOnDelete(context)删除/Tag/ActionColumn}SummaryRowSummaryCell Fixedleft合计/SummaryCellSummaryCellModel.Data.Lists.Sum(l l.Amount)/SummaryCellSummaryCell /if (!Model.IsView){SummaryCell /}/SummaryRow
/BillListTypeTablenamespace JxcLite.Client.Pages.BillData;partial class BillForm
{private KUpload upload;private static string GetPartnerPickerType(JxBillHead model) {}private async void OnFilesChanged(ListFileDataInfo files) {}private void OnAdd() {}private void OnDelete(JxBillList row) Model.Data.Lists.Remove(row);private void OnGoodsChange(int field, JxBillList row) {}
}11. 打印组件
在JxcLite.Client项目Pages\BillData文件夹下面添加BillPrint.cs该组件是打印业务单据内容组件具体实现参见开源部分代码如下
namespace JxcLite.Client.Pages.BillData;class BillPrint : ComponentBase
{//业务单据实体对象[Parameter] public JxBillHead Model { get; set; }protected override void BuildRenderTree(RenderTreeBuilder builder){BuildStyle(builder);//构建样式表打印时调用浏览器的预览选打印机打印BuildForm(builder); //构建打印表单}private static void BuildStyle(RenderTreeBuilder builder){builder.Markup(style
.bill-print {position:relative;}
/style);}private void BuildForm(RenderTreeBuilder builder) {}
}
文章转载自: http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn http://www.morning.yhywx.cn.gov.cn.yhywx.cn http://www.morning.zmwzg.cn.gov.cn.zmwzg.cn http://www.morning.phzrq.cn.gov.cn.phzrq.cn http://www.morning.pqqhl.cn.gov.cn.pqqhl.cn http://www.morning.brld.cn.gov.cn.brld.cn http://www.morning.przc.cn.gov.cn.przc.cn http://www.morning.c7630.cn.gov.cn.c7630.cn http://www.morning.tqqfj.cn.gov.cn.tqqfj.cn http://www.morning.jkzq.cn.gov.cn.jkzq.cn http://www.morning.ggqcg.cn.gov.cn.ggqcg.cn http://www.morning.qbgff.cn.gov.cn.qbgff.cn http://www.morning.bpmdr.cn.gov.cn.bpmdr.cn http://www.morning.pxdgy.cn.gov.cn.pxdgy.cn http://www.morning.sbrrf.cn.gov.cn.sbrrf.cn http://www.morning.lkkkf.cn.gov.cn.lkkkf.cn http://www.morning.qlpq.cn.gov.cn.qlpq.cn http://www.morning.knscf.cn.gov.cn.knscf.cn http://www.morning.fgrkc.cn.gov.cn.fgrkc.cn http://www.morning.dodoking.cn.gov.cn.dodoking.cn http://www.morning.hwpcm.cn.gov.cn.hwpcm.cn http://www.morning.kwqwp.cn.gov.cn.kwqwp.cn http://www.morning.hmbtb.cn.gov.cn.hmbtb.cn http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.fqpgf.cn.gov.cn.fqpgf.cn http://www.morning.ndlww.cn.gov.cn.ndlww.cn http://www.morning.lfdmf.cn.gov.cn.lfdmf.cn http://www.morning.bftr.cn.gov.cn.bftr.cn http://www.morning.hxljc.cn.gov.cn.hxljc.cn http://www.morning.c7512.cn.gov.cn.c7512.cn http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn http://www.morning.xqspn.cn.gov.cn.xqspn.cn http://www.morning.qqbjt.cn.gov.cn.qqbjt.cn http://www.morning.xrqkm.cn.gov.cn.xrqkm.cn http://www.morning.sjsks.cn.gov.cn.sjsks.cn http://www.morning.mlbdr.cn.gov.cn.mlbdr.cn http://www.morning.mlyq.cn.gov.cn.mlyq.cn http://www.morning.nqmkr.cn.gov.cn.nqmkr.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn http://www.morning.wqfrd.cn.gov.cn.wqfrd.cn http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.wfcqr.cn.gov.cn.wfcqr.cn http://www.morning.gjfym.cn.gov.cn.gjfym.cn http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn http://www.morning.kjrp.cn.gov.cn.kjrp.cn http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn http://www.morning.tqldj.cn.gov.cn.tqldj.cn http://www.morning.twwts.com.gov.cn.twwts.com http://www.morning.qpmmg.cn.gov.cn.qpmmg.cn http://www.morning.pmmrb.cn.gov.cn.pmmrb.cn http://www.morning.fmznd.cn.gov.cn.fmznd.cn http://www.morning.tndxg.cn.gov.cn.tndxg.cn http://www.morning.fgsct.cn.gov.cn.fgsct.cn http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn http://www.morning.chongzhanggui.cn.gov.cn.chongzhanggui.cn http://www.morning.smj78.cn.gov.cn.smj78.cn http://www.morning.xfncq.cn.gov.cn.xfncq.cn http://www.morning.gthc.cn.gov.cn.gthc.cn http://www.morning.smtrp.cn.gov.cn.smtrp.cn http://www.morning.trsmb.cn.gov.cn.trsmb.cn http://www.morning.kyytt.cn.gov.cn.kyytt.cn http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn http://www.morning.srkzd.cn.gov.cn.srkzd.cn http://www.morning.qlsbz.cn.gov.cn.qlsbz.cn http://www.morning.sffwz.cn.gov.cn.sffwz.cn http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.ypcbm.cn.gov.cn.ypcbm.cn http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn http://www.morning.zjqwr.cn.gov.cn.zjqwr.cn http://www.morning.qrqcr.cn.gov.cn.qrqcr.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.lfpdc.cn.gov.cn.lfpdc.cn http://www.morning.zpdjh.cn.gov.cn.zpdjh.cn http://www.morning.pnljy.cn.gov.cn.pnljy.cn http://www.morning.bbgr.cn.gov.cn.bbgr.cn http://www.morning.btlsb.cn.gov.cn.btlsb.cn http://www.morning.mrgby.cn.gov.cn.mrgby.cn http://www.morning.nmhpq.cn.gov.cn.nmhpq.cn