瀏覽代碼

开始处理商品管理

zhangyang 4 年之前
父節點
當前提交
e0fc6ca90b
共有 25 個文件被更改,包括 1041 次插入0 次删除
  1. 17 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/caigou_page.xml
  2. 17 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/kucun_page.xml
  3. 4 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/main.xml
  4. 17 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/saomashouyin_page.xml
  5. 15 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_fooditem.xml
  6. 14 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_fooditem_wutu.xml
  7. 45 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_page.xml
  8. 17 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/zhengcan_page.xml
  9. 155 0
      zhipuzi_pos_windows/control/CShangpinFoodItemUI.cpp
  10. 42 0
      zhipuzi_pos_windows/control/CShangpinFoodItemUI.h
  11. 30 0
      zhipuzi_pos_windows/control/ControlEx.h
  12. 二進制
      zhipuzi_pos_windows/page/CCaigouPageUI.cpp
  13. 二進制
      zhipuzi_pos_windows/page/CCaigouPageUI.h
  14. 二進制
      zhipuzi_pos_windows/page/CKucunPageUI.cpp
  15. 二進制
      zhipuzi_pos_windows/page/CKucunPageUI.h
  16. 二進制
      zhipuzi_pos_windows/page/CSaomashouyinPageUI.cpp
  17. 二進制
      zhipuzi_pos_windows/page/CSaomashouyinPageUI.h
  18. 367 0
      zhipuzi_pos_windows/page/CShangpinPageUI.cpp
  19. 91 0
      zhipuzi_pos_windows/page/CShangpinPageUI.h
  20. 63 0
      zhipuzi_pos_windows/page/CZhengcanPageUI.cpp
  21. 50 0
      zhipuzi_pos_windows/page/CZhengcanPageUI.h
  22. 44 0
      zhipuzi_pos_windows/wnd/CMainWnd.cpp
  23. 5 0
      zhipuzi_pos_windows/wnd/CMainWnd.h
  24. 12 0
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj
  25. 36 0
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

File diff suppressed because it is too large
+ 17 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/caigou_page.xml


File diff suppressed because it is too large
+ 17 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/kucun_page.xml


File diff suppressed because it is too large
+ 4 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/main.xml


File diff suppressed because it is too large
+ 17 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/saomashouyin_page.xml


+ 15 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_fooditem.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<Font id="diandan_price" name="微软雅黑" size="18" />
+	<Font id="1" name="微软雅黑" size="14" />
+	
+	<ShangpinFoodItem name="diandan_fooditem" bkcolor="#FFFFFFFF" padding="0,0,7,7">
+		<Control name="image" height="155" bkimage="file='food_image_default.png'" padding="0,0,0,0"></Control>
+		<Label name="foodname" width="155" height="60" multiline="true" endellipsis="true"></Label>
+		<Label name="price" height="30" font="daindan_price" textcolor="#FFFF7F50" align="left"></Label>
+		
+		<Label name="nature" visible="false" width="50" height="26" font="1" text="多属性" float="true" pos="100,214,150,240" textcolor="#FFFFFFFF" bkcolor="#FF2E8B57" align="center"></Label>		
+		<Label name="chengzhong" visible="false" width="50" height="26" font="1" text="称重" float="true" pos="100,214,150,240" textcolor="#FFFFFFFF" bkcolor="#FFFF4500" align="center"></Label>		
+		<Label name="kucun" visible="false" width="50" height="35" font="1" text="已售空" float="true" pos="0,210,155,245" textcolor="#FFFFFFFF" bkcolor="#FF696969" align="center"></Label>
+	</ShangpinFoodItem>
+</Window>

+ 14 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_fooditem_wutu.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<Font id="diandan_price" name="微软雅黑" size="18" />
+	<Font id="1" name="微软雅黑" size="14" />
+	
+	<ShangpinFoodItem name="diandan_fooditem" bkcolor="#FFFFFFFF" padding="0,0,7,7">
+		<Label name="foodname" width="155" height="60" multiline="true" endellipsis="true"></Label>
+		<Label name="price" height="30" font="daindan_price" textcolor="#FFFF7F50" align="left"></Label>
+		
+		<Label name="nature" visible="false" width="50" height="26" font="1" text="多属性" float="true" pos="100,59,150,85" textcolor="#FFFFFFFF" bkcolor="#FF2E8B57" align="center"></Label>		
+		<Label name="chengzhong" visible="false" width="50" height="26" font="1" text="称重" float="true" pos="100,59,150,85" textcolor="#FFFFFFFF" bkcolor="#FFFF4500" align="center"></Label>		
+		<Label name="kucun" visible="false" width="50" height="35" font="1" text="已售空" float="true" pos="0,55,155,90" textcolor="#FFFFFFFF" bkcolor="#FF696969" align="center"></Label>
+	</ShangpinFoodItem>
+</Window>

File diff suppressed because it is too large
+ 45 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_page.xml


File diff suppressed because it is too large
+ 17 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/zhengcan_page.xml


+ 155 - 0
zhipuzi_pos_windows/control/CShangpinFoodItemUI.cpp

@@ -0,0 +1,155 @@
+#include "CShangpinFoodItemUI.h"
+
+#include "../pch/pch.h"
+
+CShangpinFoodItemUI::CShangpinFoodItemUI()
+{
+
+}
+
+
+CShangpinFoodItemUI::~CShangpinFoodItemUI()
+{
+}
+
+void CShangpinFoodItemUI::DoEvent(TEventUI& event)
+{
+	if (event.Type == UIEVENT_BUTTONUP)
+	{
+		m_pManager->SendNotify(this, DUI_MSGTYPE_CLICK);
+	}
+	else if (event.Type == UIEVENT_MOUSEENTER)
+	{
+		HCURSOR hcur = LoadCursor(NULL, IDC_HAND);  //加载系统自带鼠标样式
+		HWND hwnd = m_pManager->GetPaintWindow(); // 获取绘图窗口句柄
+		SetClassLong(hwnd, GCL_HCURSOR, (long)hcur);
+	}
+	else if (event.Type == UIEVENT_MOUSELEAVE)
+	{
+		HCURSOR hcur = LoadCursor(NULL, IDC_ARROW);  //加载系统自带鼠标样式
+		HWND hwnd = m_pManager->GetPaintWindow(); // 获取绘图窗口句柄
+		SetClassLong(hwnd, GCL_HCURSOR, (long)hcur);
+	}
+
+	CVerticalLayoutUI::DoEvent(event);
+}
+
+void CShangpinFoodItemUI::SetFoodInfo(CFood info)
+{
+	m_foodinfo = info;
+}
+
+void CShangpinFoodItemUI::SetFoodpackageInfo(CFoodpackage info)
+{
+	m_foodpackageinfo = info;
+
+	m_is_taocan = true;
+}
+
+void CShangpinFoodItemUI::SetIsTaocan(bool is_taocan)
+{
+	m_is_taocan = is_taocan;
+}
+
+CFood CShangpinFoodItemUI::GetFoodInfo()
+{
+	return m_foodinfo;
+}
+
+CFoodpackage CShangpinFoodItemUI::GetFoodpackageInfo()
+{
+	return m_foodpackageinfo;
+}
+
+bool CShangpinFoodItemUI::GetIsTaocan()
+{
+	return m_is_taocan;
+}
+
+void CShangpinFoodItemUI::UpdateShow()
+{
+	if (m_is_taocan)
+	{
+		if (m_is_youtu)
+		{
+			CControlUI* pImage = static_cast<CControlUI*>(this->FindSubControl(_T("image")));
+
+			//获取本地图片的路径
+			std::wstring imagepath = m_foodpackageinfo.getImageTmpPath();
+			if (CSystem::IsFileExist(imagepath.c_str()))
+			{
+				//图片已经存在,直接显示
+				pImage->SetBkImage(imagepath.c_str());
+			}
+		}
+
+		CLabelUI* pName = static_cast<CLabelUI*>(this->FindSubControl(_T("foodname")));
+		pName->SetText(CLewaimaiString::UTF8ToUnicode(m_foodpackageinfo.name).c_str());
+
+		CLabelUI* pPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("price")));
+
+		wstring price = L"¥" + CLewaimaiString::UTF8ToUnicode(m_foodpackageinfo.price);
+
+		pPrice->SetText(price.c_str());
+
+		//属性商品,显示多属性标签
+		CLabelUI* pNature = static_cast<CLabelUI*>(this->FindSubControl(_T("nature")));
+		pNature->SetVisible(true);
+	}
+	else
+	{
+		if (m_is_youtu)
+		{
+			CControlUI* pImage = static_cast<CControlUI*>(this->FindSubControl(_T("image")));
+
+			//获取本地图片的路径
+			std::wstring imagepath = m_foodinfo.getImageTmpPath();
+			if (CSystem::IsFileExist(imagepath.c_str()))
+			{
+				//图片已经存在,直接显示
+				pImage->SetBkImage(imagepath.c_str());
+			}
+		}
+
+		CLabelUI* pName = static_cast<CLabelUI*>(this->FindSubControl(_T("foodname")));
+		pName->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.name).c_str());
+
+		CLabelUI* pPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("price")));
+
+		wstring price = L"¥" + CLewaimaiString::UTF8ToUnicode(m_foodinfo.price);
+		if (m_foodinfo.is_nature == "1")
+		{
+			price += L"起";
+		}
+
+		pPrice->SetText(price.c_str());
+
+		if (m_foodinfo.is_weight == "1")
+		{
+			//称重商品,显示称重的标签(称重的标签与属性的标签不同时存在,优先显示称重的)
+			CLabelUI* pChenzhong = static_cast<CLabelUI*>(this->FindSubControl(_T("chengzhong")));
+			pChenzhong->SetVisible(true);
+		}
+		else
+		{
+			if (m_foodinfo.is_nature == "1")
+			{
+				//属性商品,显示多属性标签
+				CLabelUI* pNature = static_cast<CLabelUI*>(this->FindSubControl(_T("nature")));
+				pNature->SetVisible(true);
+			}
+		}
+
+		if (m_foodinfo.stockvalid == "1" && atof(m_foodinfo.stock.c_str()) < 0.001)
+		{
+			//库存为0了
+			CLabelUI* pKucun = static_cast<CLabelUI*>(this->FindSubControl(_T("kucun")));
+			pKucun->SetVisible(true);
+		}
+	}
+}
+
+void CShangpinFoodItemUI::SetYoutuModel(bool is_youtu)
+{
+	m_is_youtu = is_youtu;
+}

+ 42 - 0
zhipuzi_pos_windows/control/CShangpinFoodItemUI.h

@@ -0,0 +1,42 @@
+#pragma once
+
+#include "../pch/pch.h"
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodpackage.h"
+
+
+/**
+ * 商品和商品套餐的ITEM,都用这个
+ */
+class CShangpinFoodItemUI : public CVerticalLayoutUI
+{
+public:
+	CShangpinFoodItemUI();
+	~CShangpinFoodItemUI();
+
+	void DoEvent(TEventUI& event);
+
+	void SetFoodInfo(CFood info);
+	void SetFoodpackageInfo(CFoodpackage info);
+	void SetIsTaocan(bool is_taocan);
+
+	CFood GetFoodInfo();
+	CFoodpackage GetFoodpackageInfo();
+	bool GetIsTaocan();
+
+	//刷新显示
+	void UpdateShow();
+
+	void SetYoutuModel(bool is_youtu);
+
+private:
+	CFood m_foodinfo;
+	CFoodpackage m_foodpackageinfo;
+
+	bool m_is_taocan = false;
+
+	//默认有图模式
+	bool m_is_youtu = true;
+};
+

+ 30 - 0
zhipuzi_pos_windows/control/ControlEx.h

@@ -12,12 +12,18 @@
 #include "../page/CBaobiaoPageUI.h"
 #include "../page/CJiaobanPageUI.h"
 #include "../page/CGengduoPageUI.h"
+#include "../page/CShangpinPageUI.h"
+#include "../page/CZhengcanPageUI.h"
+#include "../page/CSaomashouyinPageUI.h"
+#include "../page/CKucunPageUI.h"
+#include "../page/CCaigouPageUI.h"
 
 #include "CWaimaiOrderItemUI.h"
 #include "CDianneiOrderItemUI.h"
 #include "CDiandanFoodItemUI.h"
 #include "CFoodtypeOptionUI.h"
 #include "CDiandanNatureItemUI.h"
+#include "CShangpinFoodItemUI.h"
 
 class CDialogBuilderCallbackEx : public IDialogBuilderCallback
 {
@@ -65,6 +71,26 @@ public:
 		{
 			return new CGengduoPageUI;
 		}
+		else if (_tcscmp(pstrClass, _T("ShangpinPage")) == 0)
+		{
+			return new CShangpinPageUI;
+		}
+		else if (_tcscmp(pstrClass, _T("ZhengcanPage")) == 0)
+		{
+			return new CZhengcanPageUI;
+		}
+		else if (_tcscmp(pstrClass, _T("SaomashouyinPage")) == 0)
+		{
+			return new CSaomashouyinPageUI;
+		}
+		else if (_tcscmp(pstrClass, _T("KucunPage")) == 0)
+		{
+			return new CKucunPageUI;
+		}
+		else if (_tcscmp(pstrClass, _T("CaigouPage")) == 0)
+		{
+			return new CCaigouPageUI;
+		}
 
 		//控件相关的
 		else if (_tcscmp(pstrClass, _T("WaimaiOrderItem")) == 0)
@@ -87,6 +113,10 @@ public:
 		{
 			return new CDiandanNatureItemUI;
 		}
+		else if (_tcscmp(pstrClass, _T("ShangpinFoodItem")) == 0)
+		{
+			return new CShangpinFoodItemUI;
+		}
 
 		return NULL;
 	}

二進制
zhipuzi_pos_windows/page/CCaigouPageUI.cpp


二進制
zhipuzi_pos_windows/page/CCaigouPageUI.h


二進制
zhipuzi_pos_windows/page/CKucunPageUI.cpp


二進制
zhipuzi_pos_windows/page/CKucunPageUI.h


二進制
zhipuzi_pos_windows/page/CSaomashouyinPageUI.cpp


二進制
zhipuzi_pos_windows/page/CSaomashouyinPageUI.h


+ 367 - 0
zhipuzi_pos_windows/page/CShangpinPageUI.cpp

@@ -0,0 +1,367 @@
+#include "../pch/pch.h"
+#include "CShangpinPageUI.h"
+
+#include "../control/ControlEx.h"
+
+#include "../tool/CSqlite3.h"
+
+CShangpinPageUI::CShangpinPageUI()
+{
+}
+
+
+CShangpinPageUI::~CShangpinPageUI()
+{
+}
+
+//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
+void CShangpinPageUI::InitShow()
+{
+	//先初始化商品分类
+	this->InitFoodtypeShow();
+
+	//再初始化商品显示
+	this->InitFoodShow();
+}
+
+void CShangpinPageUI::RefreshShow()
+{
+	//初始化商品显示(因为这里要刷新商品库存状态)
+	this->InitFoodShow();
+}
+
+void CShangpinPageUI::InitFoodtypeShow()
+{
+	//初始化商品渲染相关的信息
+	m_foodtypeLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout")));
+	m_foodtypeLayout->RemoveAll();
+
+	CSqlite3 sqlite;
+	m_types = sqlite.GetFoodtypes(); //只包含收银机显示的分类
+
+	if (m_types.size() > 0)
+	{
+		m_cur_type_id = m_types[0].id;
+	}
+
+	m_curFoodtypeOption = NULL;
+
+	//接下来开始处理商品分类
+	for (std::vector<CFoodType>::iterator it = m_types.begin(); it != m_types.end(); it++)
+	{
+		CFoodType type = *it;
+
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+
+		CFoodtypeOptionUI* pItem = static_cast<CFoodtypeOptionUI*>(builder.Create(_T("foodtype_option.xml"), (UINT)0, &cb, m_pManager));
+
+		pItem->SetName(CLewaimaiString::UTF8ToUnicode(type.name));
+		pItem->SetTypeId(type.id);
+		pItem->SetGroup(L"shangpin_foodtype");
+
+		m_foodtypeLayout->Add(pItem);
+
+		if (m_cur_type_id == type.id)
+		{
+			m_curFoodtypeOption = pItem;
+		}
+	}
+
+	if (m_curFoodtypeOption != NULL)
+	{
+		m_curFoodtypeOption->SetBkColor(0xFF3CB371);
+	}
+
+	//如果不是一个分类都没有,选中第一个分类
+	if (m_cur_type_id != "")
+	{
+		CFoodtypeOptionUI* curTypeUI = static_cast<CFoodtypeOptionUI*>(m_foodtypeLayout->GetItemAt(0));
+
+		curTypeUI->Selected(true, false);
+	}
+
+	UpdateFoodtypePos();
+}
+
+void CShangpinPageUI::UpdateFoodtypePos()
+{
+	int nFoodtypeNum = m_types.size();
+
+	//添加支付方式
+	int nWidth = m_nPageWidth;
+	if (nWidth == 0)
+	{
+		return;
+	}
+
+	//根据宽度计算每行显示的数量
+	int nMeihangNum = (nWidth - 521) / 135;
+
+	int num = 0;
+
+	CHorizontalLayoutUI* pFenleiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout")));
+	for (int i = 0; i < nFoodtypeNum; i++)
+	{
+		CButtonUI* curItem = static_cast<CButtonUI*>(pFenleiLayout->GetItemAt(i));
+
+		int curRow = num / nMeihangNum + 1;
+		int curCol = num % nMeihangNum + 1;
+
+		RECT rect;
+		rect.left = (curCol - 1) * 135 + 15;
+		rect.right = rect.left + 120;
+		rect.top = (curRow - 1) * 61 + 19;
+		rect.bottom = rect.top + 42;
+
+		curItem->SetFloat(true);
+		curItem->SetPos(rect);
+
+		num++;
+	}
+
+	//调整区域高度
+	int lastRow = (num - 1) / nMeihangNum + 1;
+	pFenleiLayout->SetFixedHeight(lastRow * 61 + 19);
+}
+
+void CShangpinPageUI::InitFoodShow()
+{
+	bool is_youtu;
+	if (CSetting::GetInstance()->GetParam("setting_xianshi_is_youtu") == "1")
+	{
+		is_youtu = true;
+	}
+	else
+	{
+		is_youtu = false;
+	}
+
+	m_foodLayout = static_cast<CTileLayoutUI*>(this->FindSubControl(_T("shangpin_foodlist")));
+	m_foodLayout->RemoveAll();
+
+	std::wstring xml_name;
+
+	if (is_youtu)
+	{
+		SIZE itemsize;
+		itemsize.cx = 170;
+		itemsize.cy = 260;
+		m_foodLayout->SetItemSize(itemsize);
+
+		xml_name = _T("shangpin_fooditem.xml");
+	}
+	else
+	{
+		SIZE itemsize;
+		itemsize.cx = 170;
+		itemsize.cy = 105;
+		m_foodLayout->SetItemSize(itemsize);
+
+		xml_name = _T("shangpin_fooditem_wutu.xml");
+	}
+
+	//如果当前一个分类都没有,那么就不处理了
+	if (m_cur_type_id == "")
+	{
+		return;
+	}
+	else if (m_cur_type_id == "sousuo")
+	{
+		//展示的是商品搜索的结果
+		CSqlite3 sqlite;
+		std::vector<CFood> foodlist = sqlite.GetFoodByFoodname(m_sousuo_foodname);
+
+		for (std::vector<CFood>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
+		{
+			CFood food = *it;
+
+			CDialogBuilder builder;
+			CDialogBuilderCallbackEx cb;
+
+			CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager));
+
+			pItem->SetYoutuModel(is_youtu);
+			pItem->SetFoodInfo(food);
+			pItem->UpdateShow();
+
+			m_foodLayout->Add(pItem);
+		}
+	}
+	else
+	{
+		//选择的是普通商品分类
+		CSqlite3 sqlite;
+		std::vector<CFood> foodlist = sqlite.GetFoodByTypeid(m_cur_type_id);
+
+		for (std::vector<CFood>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
+		{
+			CFood food = *it;
+
+			CDialogBuilder builder;
+			CDialogBuilderCallbackEx cb;
+
+			CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(xml_name.c_str(), (UINT)0, &cb, m_pManager));
+
+			pItem->SetYoutuModel(is_youtu);
+			pItem->SetFoodInfo(food);
+			pItem->UpdateShow();
+
+			m_foodLayout->Add(pItem);
+		}
+	}
+}
+
+//处理按钮点击类事件
+void CShangpinPageUI::HandleClickMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	if (name == L"shangpin_fooditem")
+	{
+		CDiandanFoodItemUI* fooditemUI = static_cast<CDiandanFoodItemUI*>(msg.pSender);
+
+		m_cur_click_food_item = fooditemUI;
+
+		this->ClickFoodAction();
+	}
+	else if (name == L"shangpin_food_search_clear")
+	{
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_food_search_edit")));
+		m_pEdit->SetText(L"");
+
+		StopSerachFood();
+	}
+}
+
+//处理option切换事件
+void CShangpinPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
+	std::wstring groupname = curOption->GetGroup();
+
+	if (groupname == L"shangpin_foodtype")
+	{
+		//商品分类切换
+		CFoodtypeOptionUI* typeUI = static_cast<CFoodtypeOptionUI*>(curOption);
+		std::string id = typeUI->GetTypeId();
+
+		if (m_cur_type_id != id)
+		{
+			//切换了商品分类
+			m_curFoodtypeOption->SetBkColor(0xFFECECEC);
+
+			msg.pSender->SetBkColor(0xFF3CB371);
+
+			m_curFoodtypeOption = static_cast<CControlUI*>(msg.pSender);
+
+			m_cur_type_id = id;
+
+			this->InitFoodShow();
+
+			return;
+		}
+	}
+}
+
+//处理下拉框、radio的切换事件
+void CShangpinPageUI::HandleItemSelectMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理编辑框输入内容改变事件
+void CShangpinPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	if (name == L"shangpin_food_search_edit")
+	{
+		//商品搜索框的输入事件
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_food_search_edit")));
+		wstring ws_Value = m_pEdit->GetText();
+		string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+		if (strValue.length() == 0)
+		{
+			//搜索词被清空了,退出搜索
+			this->StopSerachFood();
+		}
+		else
+		{
+			//搜索词没清空,进入搜索
+			this->StartSearchFood(strValue);
+		}
+	}
+}
+
+//处理扫码枪捕捉到的扫码信息
+void CShangpinPageUI::HandleTextCapture(std::string content)
+{
+	
+}
+
+void CShangpinPageUI::ClickFoodAction()
+{
+	bool is_taocan = m_cur_click_food_item->GetIsTaocan();
+
+	//点击普通商品之后的处理逻辑
+	CFood foodinfo = m_cur_click_food_item->GetFoodInfo();
+}
+
+//开始搜索某个商品名字
+void CShangpinPageUI::StartSearchFood(std::string foodname)
+{
+	//展示删除按钮
+	CButtonUI* pClear = static_cast<CButtonUI*>(this->FindSubControl(_T("shangpin_food_search_clear")));
+	pClear->SetVisible(true);
+
+	//隐藏商品分类展示
+	CHorizontalLayoutUI* pFoodtype = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout")));
+	pFoodtype->SetVisible(false);
+
+	if (m_cur_type_id != "sousuo")
+	{
+		m_type_id_before_sousuo = m_cur_type_id;
+	}
+
+	m_cur_type_id = "sousuo";
+
+	m_sousuo_foodname = foodname;
+
+	CLabelUI* pTishi = static_cast<CLabelUI*>(this->FindSubControl(_T("shangpin_food_search_tishi")));
+	pTishi->SetVisible(false);
+
+	this->InitFoodShow();
+}
+
+//停止搜索商品
+void CShangpinPageUI::StopSerachFood()
+{
+	//隐藏删除按钮
+	CButtonUI* pClear = static_cast<CButtonUI*>(this->FindSubControl(_T("shangpin_food_search_clear")));
+	pClear->SetVisible(false);
+
+	//展示商品分类展示
+	CHorizontalLayoutUI* pFoodtype = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout")));
+	pFoodtype->SetVisible(true);
+
+	m_cur_type_id = m_type_id_before_sousuo;
+
+	CLabelUI* pTishi = static_cast<CLabelUI*>(this->FindSubControl(_T("shangpin_food_search_tishi")));
+	pTishi->SetVisible(true);
+
+	this->InitFoodShow();
+}
+
+void CShangpinPageUI::SetPos(RECT rc, bool bNeedInvalidate)
+{
+	m_nPageWidth = rc.right - rc.left;
+
+	//更新分类位置
+	UpdateFoodtypePos();
+
+	CContainerUI::SetPos(rc, bNeedInvalidate);
+}

+ 91 - 0
zhipuzi_pos_windows/page/CShangpinPageUI.h

@@ -0,0 +1,91 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CBasePageUI.h"
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodtype.h"
+#include "../zhipuzi/CFoodpackage.h"
+
+#include "../control/CDiandanFoodItemUI.h"
+#include "../zhipuzi/CDiandanOrder.h"
+
+#include "../wnd/CModalWnd.h"
+
+class CShangpinPageUI : public CBasePageUI
+{
+public:
+	CShangpinPageUI();
+	~CShangpinPageUI();
+
+	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
+	void InitShow();
+
+	//收款一个订单成功,准备开始收款第2个订单的时候调用(会多次调度用)
+	void RefreshShow();
+
+	//初始化商品分类的显示
+	void InitFoodtypeShow();
+
+	void UpdateFoodtypePos();
+
+	//根据当前选择的分类,刷新商品展示
+	void InitFoodShow();
+
+	//处理按钮点击类事件
+	void HandleClickMsg(TNotifyUI& msg);
+
+	//处理option切换事件
+	void HandleSelectChangeMsg(TNotifyUI& msg);
+
+	//处理下拉框、radio的切换事件
+	void HandleItemSelectMsg(TNotifyUI& msg);
+
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
+	//处理扫码枪捕捉到的扫码信息
+	void HandleTextCapture(std::string content);
+
+	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
+	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+	{
+		return false;
+	}
+
+	//点击某一个商品的item之后的处理逻辑
+	void ClickFoodAction();
+
+	//开始搜索某个商品名字
+	void StartSearchFood(std::string foodname);
+
+	//停止搜索商品
+	void StopSerachFood();
+
+	void SetPos(RECT rc, bool bNeedInvalidate = true);
+
+private:
+	CTileLayoutUI* m_foodLayout;
+	CHorizontalLayoutUI* m_foodtypeLayout;
+
+	//所有商品分类(只包含收银机显示的分类)
+	std::vector<CFoodType> m_types;
+
+	//当前选中的商品分类ID,为空表示没选中任何分类,为taocan表示选中套餐分类,如果选中普通商品分类就是分类ID
+	std::string m_cur_type_id = "";
+	CControlUI* m_curFoodtypeOption;
+
+	//商品搜索相关
+	std::string m_type_id_before_sousuo;
+	std::string m_sousuo_foodname;
+
+	//当前点击的哪个商品
+	CDiandanFoodItemUI* m_cur_click_food_item;
+
+	//模态对话框有关的
+	bool m_is_show_modal_wnd = false;
+	CModalWnd* m_curModalWnd;
+
+	//当前控件的实际宽度
+	int m_nPageWidth;
+};

+ 63 - 0
zhipuzi_pos_windows/page/CZhengcanPageUI.cpp

@@ -0,0 +1,63 @@
+#include "../pch/pch.h"
+#include "CZhengcanPageUI.h"
+
+#include "../control/ControlEx.h"
+
+#include "../tool/CSqlite3.h"
+
+CZhengcanPageUI::CZhengcanPageUI()
+{
+}
+
+
+CZhengcanPageUI::~CZhengcanPageUI()
+{
+}
+
+//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
+void CZhengcanPageUI::InitShow()
+{
+
+}
+
+//处理按钮点击类事件
+void CZhengcanPageUI::HandleClickMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+}
+
+//处理option切换事件
+void CZhengcanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
+	std::wstring groupname = curOption->GetGroup();
+
+}
+
+//处理下拉框、radio的切换事件
+void CZhengcanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理编辑框输入内容改变事件
+void CZhengcanPageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+}
+
+//处理扫码枪捕捉到的扫码信息
+void CZhengcanPageUI::HandleTextCapture(std::string content)
+{
+
+}
+
+void CZhengcanPageUI::SetPos(RECT rc, bool bNeedInvalidate)
+{
+	m_nPageWidth = rc.right - rc.left;
+
+	CContainerUI::SetPos(rc, bNeedInvalidate);
+}

+ 50 - 0
zhipuzi_pos_windows/page/CZhengcanPageUI.h

@@ -0,0 +1,50 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CBasePageUI.h"
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodtype.h"
+#include "../zhipuzi/CFoodpackage.h"
+
+#include "../control/CDiandanFoodItemUI.h"
+#include "../zhipuzi/CDiandanOrder.h"
+
+#include "../wnd/CModalWnd.h"
+
+class CZhengcanPageUI : public CBasePageUI
+{
+public:
+	CZhengcanPageUI();
+	~CZhengcanPageUI();
+
+	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
+	void InitShow();
+
+	//处理按钮点击类事件
+	void HandleClickMsg(TNotifyUI& msg);
+
+	//处理option切换事件
+	void HandleSelectChangeMsg(TNotifyUI& msg);
+
+	//处理下拉框、radio的切换事件
+	void HandleItemSelectMsg(TNotifyUI& msg);
+
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
+	//处理扫码枪捕捉到的扫码信息
+	void HandleTextCapture(std::string content);
+
+	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
+	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+	{
+		return false;
+	}
+
+	void SetPos(RECT rc, bool bNeedInvalidate = true);
+
+private:
+	//当前控件的实际宽度
+	int m_nPageWidth;
+};

+ 44 - 0
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -1183,6 +1183,22 @@ void CMainWnd::SwitchPageByName(std::wstring name)
 	{
 		this->SwitchPage(GENGDUO);
 	}
+	else if (name == L"main_shangpin")
+	{
+		this->SwitchPage(SHANGPIN);
+	}
+	else if (name == L"main_zhengcan")
+	{
+		this->SwitchPage(ZHENGCAN);
+	}
+	else if (name == L"main_kucun")
+	{
+		this->SwitchPage(KUCUN);
+	}
+	else if (name == L"main_caigou")
+	{
+		this->SwitchPage(CAIGOU);
+	}
 	else
 	{
 		//没开通的页面暂时不跳转
@@ -1338,6 +1354,34 @@ void CMainWnd::CreatePages()
 		m_pages[GENGDUO] = pChildContainer;
 	}
 
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("shangpin_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[SHANGPIN] = pChildContainer;
+	}
+
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("zhengcan_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[ZHENGCAN] = pChildContainer;
+	}
+
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("kucun_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[KUCUN] = pChildContainer;
+	}
+
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("caigou_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[CAIGOU] = pChildContainer;
+	}
+
 	//这里纯粹只是创建对象,不做任何初始化等处理
 }
 

+ 5 - 0
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -25,6 +25,11 @@ public:
 		WAIMAIINFO, //外卖订单详情
 		DIANNEIDINGDAN, //店内订单列表
 		DIANNEIINFO, //店内订单详情
+		SHANGPIN, //商品管理
+		ZHENGCAN, //正餐收银
+		SAOMASHOUYIN, //扫码收银
+		CAIGOU, //采购
+		KUCUN, //库存
 	};
 
     LPCTSTR GetWindowClassName() const

+ 12 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj

@@ -227,6 +227,12 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="page\CSaomashouyinPageUI.h" />
+    <ClInclude Include="page\CCaigouPageUI.h" />
+    <ClInclude Include="page\CKucunPageUI.h" />
+    <ClInclude Include="control\CShangpinFoodItemUI.h" />
+    <ClInclude Include="page\CZhengcanPageUI.h" />
+    <ClInclude Include="page\CShangpinPageUI.h" />
     <ClInclude Include="tool\CAppEnv.h" />
     <ClInclude Include="page\CGengduoPageUI.h" />
     <ClInclude Include="wnd\CImageAttentionWnd.h" />
@@ -312,6 +318,12 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="helper\CSystem.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="page\CSaomashouyinPageUI.cpp" />
+    <ClCompile Include="page\CCaigouPageUI.cpp" />
+    <ClCompile Include="page\CKucunPageUI.cpp" />
+    <ClCompile Include="control\CShangpinFoodItemUI.cpp" />
+    <ClCompile Include="page\CZhengcanPageUI.cpp" />
+    <ClCompile Include="page\CShangpinPageUI.cpp" />
     <ClCompile Include="tool\CAppEnv.cpp" />
     <ClCompile Include="page\CGengduoPageUI.cpp" />
     <ClCompile Include="wnd\CImageAttentionWnd.cpp" />

+ 36 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -264,6 +264,24 @@
     <ClInclude Include="tool\CAppEnv.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="page\CShangpinPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="control\CShangpinFoodItemUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="page\CZhengcanPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="page\CCaigouPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="page\CKucunPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="page\CSaomashouyinPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -491,6 +509,24 @@
     <ClCompile Include="tool\CAppEnv.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="page\CShangpinPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="control\CShangpinFoodItemUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="page\CZhengcanPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="page\CCaigouPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="page\CKucunPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="page\CSaomashouyinPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">