当前位置: 首页 > news >正文

广州房地产最新消息seo外链发布平台

广州房地产最新消息,seo外链发布平台,营销型b2b网站模板,网站建设成都本文介绍如何实现进销存管理系统的业务单据模块,业务单据模块包括采购进货单、采购退货单、销售出货单、销售退货单4个菜单页面。由于进销单据字段大同小异,因此设计共用一个页面组件类。 项目代码:JxcLite开源地址: 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.csJxBillList.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 void AddJxcLiteCore(this IServiceCollection services){services.AddScoped<IBillService, BillService>();}
}

6. 数据依赖

JxcLite.Web项目Repositories文件夹下面添加业务单据模块数据依赖类,文件名定义为BillRepository.cs,文章中只简单描述一下依赖类的定义,具体实现参见开源,定义如下:

namespace JxcLite.Web.Repositories;class BillRepository
{internal static Task<PagingResult<JxBillHead>> QueryBillsAsync(Database db, PagingCriteria criteria) { }internal static Task<List<JxBillList>> GetBillListsAsync(Database db, string headId) { }//根据前缀获取最大业务单号internal static Task<string> GetMaxBillNoAsync(Database db, string prefix) { }
}

7. 列表页面

JxcLite.Client项目Pages\BillData文件夹下面添加BillList.cs单据列表组件,该组件是进销单及退货单的列表组件共用类,具体实现参见开源,部分代码如下:

namespace JxcLite.Client.Pages.BillData;public class BillList : BaseTablePage<JxBillHead>
{private IBillService Service;//取得业务单据类型(进货、进退货、销货、销退货),由具体单据页面重写该类型protected virtual string Type { get; }protected override async Task OnPageInitAsync(){await base.OnPageInitAsync();Service = await CreateServiceAsync<IBillService>();//创建服务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.PrintAsync<BillPrint>(f => f.Set(c => c.Model, row));});//导出public async void Export() => await ExportDataAsync();private Task<PagingResult<JxBillHead>> 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 : BasePicker<JxPartner>
{private IBaseDataService Service;private TableModel<JxPartner> Table;//取得弹框选择的数据列表public override List<JxPartner> 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 : BasePicker<JxGoods>
{private IBaseDataService Service;private TableModel<JxGoods> Table;//取得弹框选择的数据列表public override List<JxGoods> SelectedItems => Table.SelectedRows?.ToList();protected override async Task OnInitAsync() {}protected override void BuildContent(RenderTreeBuilder builder) => builder.Table(Table);
}

10. 表单组件

首先在JxcLite.Client项目Shared文件夹下面添加TypeForms.csTypeTables.cs文件,添加业务单据表头类型表单组件和业务单据表体类型表格组件,代码如下:

namespace JxcLite.Client.Shared;public class BillHeadTypeForm : AntForm<JxBillHead> { }public class BillListTypeTable : AntTable<JxBillList> { }

再在JxcLite.Client项目Pages\BillData文件夹下面添加BillForm.razorBillForm.razor.cs文件,由于单据表单组件有点复杂,代码较长,所以采用razor语法来实现,该组件是进销单及退货单的列表组件共用类,具体实现参见开源,部分代码如下:

@inherits BaseForm<JxBillHead><BillHeadTypeForm Form="Model"><AntRow><DataItem Span="6" Label="业务单号" Required><AntInput Disabled @bind-Value="@context.BillNo" /></DataItem><DataItem Span="6" Label="单证状态"><KTag Text="@context.Status" /></DataItem><DataItem Span="6" Label="单证日期" Required><AntDatePicker @bind-Value="@context.BillDate" /></DataItem><DataItem Span="6" Label="商业伙伴" Required><PartnerPicker Value="@context.Partner" AllowClearType="@GetPartnerPickerType(context)" /></DataItem></AntRow>
</BillHeadTypeForm>
<KToolbar><KTitle Text="商品明细" /><div>@if (!Model.IsView){<Button Type="@ButtonType.Primary" Icon="plus" OnClick="OnAdd">添加</Button>}</div>
</KToolbar>
<BillListTypeTable DataSource="Model.Data.Lists" HidePagination ScrollX="1300px" ScrollY="200px"><IntegerColumn Title="序号" Field="@context.SeqNo" Width="60" Fixed="left" /><StringColumn Title="商品编码" Width="120" Fixed="left"><AntInput @bind-Value="@context.Code" Style="width:100px" /></StringColumn><StringColumn Title="金额" Width="100"><AntDecimal @bind-Value="@context.Amount" OnChange="e=>OnGoodsChange(3, context)" /></StringColumn>@if (!Model.IsView){<ActionColumn Title="操作" Align="ColumnAlign.Center" Width="100" Fixed="right"><Tag Color="red-inverse" OnClick="e=>OnDelete(context)">删除</Tag></ActionColumn>}<SummaryRow><SummaryCell Fixed="left">合计</SummaryCell><SummaryCell>@Model.Data.Lists.Sum(l => l.Amount)</SummaryCell><SummaryCell />@if (!Model.IsView){<SummaryCell />}</SummaryRow>
</BillListTypeTable>
namespace JxcLite.Client.Pages.BillData;partial class BillForm
{private KUpload upload;private static string GetPartnerPickerType(JxBillHead model) {}private async void OnFilesChanged(List<FileDataInfo> 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.hkea.cn/news/196998/

相关文章:

  • 网站视频上传怎么做百度站长平台论坛
  • wordpress农业模板下载小时seo
  • 做网站语言排名2018发帖推广哪个平台好
  • 销氪crmseo入门讲解
  • 蒙阴哪有做淘宝网站的钓鱼网站制作教程
  • 网站如何做导航条下拉菜单怎么做百度网页
  • 网站开发都做什么平台推广精准客源
  • 网站建设共享ip宁波seo搜索引擎优化
  • 学校网站建设必要性搜索引擎排名
  • 哪里有做区块链网站的百度网址大全在哪里找
  • 加盟平台网站怎么做竞价托管多少钱一个月
  • wordpress 微信 代码网站关键词怎么优化排名
  • 网站推广维护考研培训班哪个机构比较好
  • 网站后台生成器人工智能培训班收费标准
  • 在线做app的网站武汉网络营销公司排名
  • 了解深圳网站页面设计潍坊百度关键词优化
  • 制作网站怎样找公司来帮做seo词条
  • 网络销售有哪些站长工具seo排名
  • 做房产中介网站怎么注册一个自己的网站
  • 天津网站设计成功柚米全网推广成功再收费
  • 建设公司网站靠谱吗企业网站设计制作
  • 电子商务学什么课程内容兰州搜索引擎优化
  • 沧州网站建设制作设计优化能打开的a站
  • 石家庄网站建设推广报价怎么让百度快速收录网站
  • 建设局网站上开工日期选不了制作网站需要多少费用
  • 犬舍网站怎么做网页推广怎么做
  • 镇江核酸检测最新通知如何优化网页加载速度
  • wpf入可以做网站吗竞价托管外包费用
  • 公司设计网站需要包含什么资料优化排名软件
  • 日本樱花云服务器wan亚马逊seo关键词优化软件