You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

584 lines
20 KiB
C#

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;
/// <summary>
/// 餐桌类型数据源
/// </summary>
private List<TableType> _tableTypeList = null;
/// <summary>
/// 餐桌区域数据源
/// </summary>
private List<TableArea> _tableAreaList = null;
private Dictionary<string, string> AreaMap = new Dictionary<string, string>();
public DeskNoSelect()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (DesignMode) return;
Task.Factory.StartNew(() =>
{
this.Invoke(new Action(() =>
{
InstallDeskTypeAndNo();
}));
});
}
/// <summary>
/// 加载当前门店后台设置的餐桌
/// </summary>
private void InstallDeskTypeAndNo()
{
///按餐桌区域选择
var autoDeskArea = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CASHIER_CHECKAUTOOPENDESKAREA, false);
if (autoDeskArea)
{
this._tableAreaList = new List<TableArea>();
TableArea tableArea = new TableArea();
tableArea.Id = "";
tableArea.Name = "全部";
this._tableAreaList.Add(tableArea);
//餐桌分类数据源
using (var db = Global.Instance.OpenDataBase)
{
List<TableArea> tableAreaListTemp = db.Query<TableArea>().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>();
TableType tableArea = new TableType();
tableArea.Id = "";
tableArea.Name = "全部";
this._tableTypeList.Add(tableArea);
//餐桌分类数据源
using (var db = Global.Instance.OpenDataBase)
{
List<TableType> tableAreaListTemp = db.Query<TableType>().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<TableArea>(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;
}
}
}
/// <summary>
/// 加载子菜单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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");
}
}
/// <summary>
/// 类型切换
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LoadTableDetail(string typeId)
{
PageNumber = 1;
List<Table> tableList = null;
if ("".Equals(typeId))
{
//加载所有餐桌
using (var db = Global.Instance.OpenDataBase)
{
tableList = db.Query<Table>("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<Table>("where areaId = @0 order by no", typeId).ToList();
}
}
else
{
using (var db = Global.Instance.OpenDataBase)
{
tableList = db.Query<Table>("where typeId = @0 order by no", typeId).ToList();
}
}
}
BindDataSource(tableList);
}
/// <summary>
/// 数据源
/// </summary>
private List<Table> _dataSource = null;
public void BindDataSource(List<Table> dataSource, KeyboardAction action = KeyboardAction.None)
{
this._dataSource = dataSource;
if (this._dataSource == null)
{
this._dataSource = new List<Table>();
}
//总数量
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;
}
/// <summary>
/// 分页List数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public List<Table> ListPager(List<Table> data)
{
var result = new List<Table>();
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<string, string, string>(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;
/// <summary>
/// 每一行显示的数量
/// </summary>
public int Columns
{
get
{
return _columns;
}
set
{
_columns = (value <= 0 ? 1 : value);
}
}
/// <summary>
///品类默认行数
/// </summary>
public int Rows => this.deskNoPanel.Height / DEFAULT_ITEM_HIGHT;
/// <summary>
/// 每页的大小
/// </summary>
public int PageSize { get; private set; }
/// <summary>
/// 总页数
/// </summary>
public int PageCount => this.PageSize <= 0 ? 0 : ((this.TotalCount + this.PageSize - 1) / this.PageSize);
/// <summary>
/// 当前页码
/// </summary>
public int PageNumber { get; set; }
/// <summary>
/// 总数量
/// </summary>
public int TotalCount { get; private set; }
}
}