using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using DevComponents.DotNetBar; using DevComponents.DotNetBar.Metro; using POSV.Component; using POSV.Entity; namespace POSV.Report { public partial class DeskNoSelect : BusinessForm { private int DefaultItemWidth = 87; private Size DefaultItemSize = Size.Empty; private int DefaultPaddingLeftRight = -2; private Table selectTable = null; /// /// 餐桌类型数据源 /// private List _tableTypeList = null; /// /// 餐桌区域数据源 /// private List _tableAreaList = null; private Dictionary AreaMap = new Dictionary(); public DeskNoSelect() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (DesignMode) return; Task.Factory.StartNew(() => { this.Invoke(new Action(() => { InstallDeskTypeAndNo(); })); }); } /// /// 加载当前门店后台设置的餐桌 /// private void InstallDeskTypeAndNo() { ///按餐桌区域选择 var autoDeskArea = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_CHECKAUTOOPENDESKAREA, false); if (autoDeskArea) { this._tableAreaList = new List(); TableArea tableArea = new TableArea(); tableArea.Id = ""; tableArea.Name = "全部"; this._tableAreaList.Add(tableArea); //餐桌分类数据源 using (var db = Global.Instance.OpenDataBase) { List tableAreaListTemp = db.Query().OrderBy(x => x.No).ToList(); if (tableAreaListTemp != null) { this._tableAreaList.AddRange(tableAreaListTemp); } foreach (TableArea area in tableAreaListTemp) { AreaMap.Add(area.Id, area.Name); } } //餐桌分类 this.desktopCategoryPage.OnPageChange += OnMainCategoryPageChange; DefaultItemSize = new Size(DefaultItemWidth, this.desktopCategoryPage.Height); } else { this._tableTypeList = new List(); TableType tableArea = new TableType(); tableArea.Id = ""; tableArea.Name = "全部"; this._tableTypeList.Add(tableArea); //餐桌分类数据源 using (var db = Global.Instance.OpenDataBase) { List tableAreaListTemp = db.Query().OrderBy(x => x.No).ToList(); if (tableAreaListTemp != null) { this._tableTypeList.AddRange(tableAreaListTemp); } } //餐桌分类 this.desktopCategoryPage.OnPageChange += OnMainCategoryPageChange; DefaultItemSize = new Size(DefaultItemWidth, this.desktopCategoryPage.Height); } //餐桌全部做法 this.RefreshMain(); } private void OnMainCategoryPageChange(object sender, EventArgs e) { PageNumber = 1; RefreshMain(); } private void RefreshMain() { ItemContainer ic = new ItemContainer(); MetroTileItem firstItem = null; ///按餐桌区域选择 var autoDeskArea = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_CHECKAUTOOPENDESKAREA, false); if (autoDeskArea) { if (this._tableAreaList != null && this._tableAreaList.Count > 0) { this.desktopCategoryPage.TotalCount = this._tableAreaList.Count; this.desktopCategoryPage.itemWidth = DefaultItemWidth; //分页 var pageTypeList = this.desktopCategoryPage.ListPager(this._tableAreaList); ic.MultiLine = false; ic.ItemSpacing = 1; ic.ResizeItemsToFit = false; //很关键 foreach (var type in pageTypeList) { MetroTileItem item = new MetroTileItem(); item.CheckBehavior = eMetroTileCheckBehavior.None; item.Checked = false; item.OptionGroup = "tableType"; item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = type.Name; item.TileSize = DefaultItemSize; item.TileStyle.TextColor = Color.White; item.TileStyle.BackColor = ColorTranslator.FromHtml("#DDA254"); item.TileStyle.BackColor2 = ColorTranslator.FromHtml("#DDA254"); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; item.TileStyle.PaddingLeft = DefaultPaddingLeftRight; item.TileStyle.PaddingRight = DefaultPaddingLeftRight; //圆角 item.TileStyle.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; item.Tag = type; if (firstItem == null) { firstItem = item; } item.MouseDown += OnMainMenuMouseDown; item.CheckedChanged += OnMainItemCheckedChange; ic.SubItems.Add(item); } } this.desktopCategoryPage.RefreshUI(ic); if (firstItem != null) { firstItem.Checked = true; } } else { if (this._tableTypeList != null && this._tableTypeList.Count > 0) { this.desktopCategoryPage.TotalCount = this._tableTypeList.Count; this.desktopCategoryPage.itemWidth = DefaultItemWidth; //分页 var pageTypeList = this.desktopCategoryPage.ListPager(this._tableTypeList); ic.MultiLine = false; ic.ItemSpacing = 1; ic.ResizeItemsToFit = false; //很关键 foreach (var type in pageTypeList) { MetroTileItem item = new MetroTileItem(); item.CheckBehavior = eMetroTileCheckBehavior.None; item.Checked = false; item.OptionGroup = "tableType"; item.TileStyle.TextAlignment = eStyleTextAlignment.Center; item.Text = type.Name; item.TileSize = DefaultItemSize; item.TileStyle.TextColor = Color.White; item.TileStyle.BackColor = ColorTranslator.FromHtml("#DDA254"); item.TileStyle.BackColor2 = ColorTranslator.FromHtml("#DDA254"); item.TileStyle.BorderColor = Color.Transparent; item.TileStyle.BorderColor2 = Color.Transparent; item.TileStyle.PaddingLeft = DefaultPaddingLeftRight; item.TileStyle.PaddingRight = DefaultPaddingLeftRight; //圆角 item.TileStyle.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; item.Tag = type; if (firstItem == null) { firstItem = item; } item.MouseDown += OnMainMenuMouseDown; item.CheckedChanged += OnMainItemCheckedChange; ic.SubItems.Add(item); } } this.desktopCategoryPage.RefreshUI(ic); if (firstItem != null) { firstItem.Checked = true; } } } /// /// 加载子菜单 /// /// /// private void OnMainMenuMouseDown(object sender, MouseEventArgs e) { MetroTileItem obj = sender as MetroTileItem; obj.Checked = true; } private void OnMainItemCheckedChange(object sender, EventArgs e) { MetroTileItem obj = sender as MetroTileItem; if (obj.Checked) { obj.TileStyle.BackColor = ColorTranslator.FromHtml("#ED7F2A"); obj.TileStyle.BackColor2 = ColorTranslator.FromHtml("#ED7F2A"); ///按餐桌区域选择 var autoDeskArea = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_CHECKAUTOOPENDESKAREA, false); if (autoDeskArea) { //加载子类 var type = obj.Tag as TableArea; //加载大类下商品 LoadTableDetail(type.Id); } else { //加载子类 var type = obj.Tag as TableType; //加载大类下商品 LoadTableDetail(type.Id); } } else { obj.TileStyle.BackColor = ColorTranslator.FromHtml("#DDA254"); obj.TileStyle.BackColor2 = ColorTranslator.FromHtml("#DDA254"); } } /// /// 类型切换 /// /// /// private void LoadTableDetail(string typeId) { PageNumber = 1; List tableList = null; if ("".Equals(typeId)) { //加载所有餐桌 using (var db = Global.Instance.OpenDataBase) { tableList = db.Query
("order by no").ToList(); } } else { ///按餐桌区域选择 var autoDeskArea = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_CHECKAUTOOPENDESKAREA, false); if (autoDeskArea) { using (var db = Global.Instance.OpenDataBase) { tableList = db.Query
("where areaId = @0 order by no", typeId).ToList(); } } else { using (var db = Global.Instance.OpenDataBase) { tableList = db.Query
("where typeId = @0 order by no", typeId).ToList(); } } } BindDataSource(tableList); } /// /// 数据源 /// private List
_dataSource = null; public void BindDataSource(List
dataSource, KeyboardAction action = KeyboardAction.None) { this._dataSource = dataSource; if (this._dataSource == null) { this._dataSource = new List
(); } //总数量 this.TotalCount = dataSource.Count; //每页的显示数量 this.PageSize = this.Rows * this.Columns; //清空历史数据 this.deskNoPanel.Items.Clear(); //复制新的数据源,进行分页运算 var merge = TableMerge.Merge(this.Rows, this.Columns, dataSource, false); var pager = ListPager(merge); ItemContainer ic = new ItemContainer(); ic.MultiLine = true; ic.ItemSpacing = 0; ic.LayoutOrientation = eOrientation.Horizontal; foreach (Table entity in pager) { MetroTileItem item = this.GetTableItemTemplate(); item.Name = entity.Id; item.Tag = entity; item.Checked = false; switch (entity.Name) { case Constant.PREV_PAGER: { item.Image = POSV.Properties.Resources.left; item.ImageTextAlignment = System.Drawing.ContentAlignment.MiddleCenter; item.TileStyle.BackColor = ColorTranslator.FromHtml("#ED7F2A"); item.TileStyle.BackColor2 = ColorTranslator.FromHtml("#ED7F2A"); item.TileStyle.BorderColor = ColorTranslator.FromHtml("#ED7F2A"); item.TileStyle.BorderColor2 = ColorTranslator.FromHtml("#ED7F2A"); } break; case Constant.NEXT_PAGER: { item.Image = POSV.Properties.Resources.right; item.ImageTextAlignment = System.Drawing.ContentAlignment.MiddleCenter; item.TileStyle.BackColor = ColorTranslator.FromHtml("#ED7F2A"); item.TileStyle.BackColor2 = ColorTranslator.FromHtml("#ED7F2A"); item.TileStyle.BorderColor = ColorTranslator.FromHtml("#ED7F2A"); item.TileStyle.BorderColor2 = ColorTranslator.FromHtml("#ED7F2A"); } break; default: { item.Text = entity.Name; item.TitleText = entity.Number + "人"; } break; } //圆角 item.TileStyle.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; ic.SubItems.Add(item); } this.deskNoPanel.Items.Add(ic); this.deskNoPanel.Invalidate(); } private MetroTileItem GetTableItemTemplate() { MetroTileItem template = new MetroTileItem(); template.TileStyle.PaddingLeft = template.TileStyle.PaddingRight = -2; template.EnableMarkup = true; template.OptionGroup = "table"; template.TileStyle.Font = this.deskNoPanel.Font; //this.itemPanel1.ResizeItemsToFit = false; this.deskNoPanel.BackgroundStyle.Class = "MetroTileGroupTitle";//很关键 template.TileStyle.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; template.TileStyle.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; template.TitleTextAlignment = ContentAlignment.BottomCenter; template.TitleTextFont = new Font("宋体", 12f); template.TileStyle.TextColor = Color.White; template.TitleTextColor = Color.White; template.TileStyle.BackColor = ColorTranslator.FromHtml("#DDA254"); template.TileStyle.BackColor2 = ColorTranslator.FromHtml("#DDA254"); template.TileStyle.BorderWidth = 1; template.TileStyle.BorderColor = ColorTranslator.FromHtml("#DDA254"); template.TileStyle.BorderColor2 = ColorTranslator.FromHtml("#DDA254"); //显示大小 template.TileSize = new Size(this.deskNoPanel.Width / DEFAULT_COLUMNS, DEFAULT_ITEM_HIGHT); //圆角 template.TileStyle.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; template.MouseDown += OnItemMouseDown; return template; } /// /// 分页List数据 /// /// /// public List
ListPager(List
data) { var result = new List
(); result.AddRange(data.Skip((this.PageNumber - 1) * this.PageSize).Take(this.PageSize)); return result; } public delegate void EventHandler(Table table); public event EventHandler OnSelected; private void OnItemMouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { MetroTileItem item = (MetroTileItem)sender; var table = item.Tag as Table; switch (table.Name) { case Constant.PREV_PAGER: { this.PageNumber = table.Pager; this.BindDataSource(this._dataSource); } break; case Constant.NEXT_PAGER: { this.PageNumber = table.Pager; this.BindDataSource(this._dataSource); } break; default: { OnSelected?.Invoke(table); OnCancelTouchClick(this, null); //var autoDeskArea = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_CHECKAUTOOPENDESKAREA, false); //if (autoDeskArea) //{ // selectTable = table; //} //else //{ // this.OnAcceptButtonClick(new TransparentEventArgs(TransparentAction.Accept, "deskNo", new Tuple(table.No, table.Name, ""))); // this.DialogResult = DialogResult.OK; // OnCancelTouchClick(this, null); //} } break; } } } private void OnCancelTouchClick(object sender, Component.TouchEventArgs e) { this.Close(); } private static int DEFAULT_ITEM_HIGHT = 80; private static int DEFAULT_COLUMNS = 5; private int _columns = DEFAULT_COLUMNS; /// /// 每一行显示的数量 /// public int Columns { get { return _columns; } set { _columns = (value <= 0 ? 1 : value); } } /// ///品类默认行数 /// public int Rows => this.deskNoPanel.Height / DEFAULT_ITEM_HIGHT; /// /// 每页的大小 /// public int PageSize { get; private set; } /// /// 总页数 /// public int PageCount => this.PageSize <= 0 ? 0 : ((this.TotalCount + this.PageSize - 1) / this.PageSize); /// /// 当前页码 /// public int PageNumber { get; set; } /// /// 总数量 /// public int TotalCount { get; private set; } } }