瀏覽代碼

完成商品搜索的核心逻辑

张洋 4 年之前
父節點
當前提交
d6b18867ee

+ 5 - 3
bin/Win32/Debug/zhipuzi_pos_windows/skin/diandan_page.xml

@@ -100,10 +100,12 @@
 				
 				</TileLayout>
 				
-				<HorizontalLayout height="48" padding="15,15,15,15">
-					<Edit name="diandan_food_search_edit" tooltip="请输入商品名字搜索" width="300" height="48" normalimage="file='Chat_InputBox_BG.png' corner='4,4,4,4'" hotimage="file='Chat_InputBox_BG_Hover.png' corner='4,4,4,4'" />
+				<HorizontalLayout height="70" padding="0,0,0,0" bkcolor="#FFFFFFFF">
+					<Edit name="diandan_food_search_edit" tooltip="请输入商品名字搜索" width="500" height="50" padding="30,10,0,10" textpadding="50,0,50,0" borderround="45,45" bkcolor="#FFECEFED" nativebkcolor="#FFECEFED" />
 					
-					<Button name="btn_diandan_searchfood" width="100" height="48" padding="10,0,10,0" text="搜索商品" textcolor="#FFFFFFFF" />
+					<Control bkimage="search_icon.png" width="25" height="26" pos="45,23,70,49" float="true"></Control>
+					
+					<Button name="diandan_food_search_clear" visible="false" normalimage="search_clear.png" hotimage="search_clear.png" pushedimage="search_clear.png" bkimage="search_clear.png" width="23" height="23" pos="485,23,68,46" float="true"></Button>
 				</HorizontalLayout>
 			</VerticalLayout>
 			

二進制
bin/Win32/Debug/zhipuzi_pos_windows/skin/search_clear.png


二進制
bin/Win32/Debug/zhipuzi_pos_windows/skin/search_icon.png


+ 353 - 25
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -216,8 +216,31 @@ void CDiandanPageUI::InitFoodShow()
 			m_foodLayout->Add(pItem);
 		}
 	}
+	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);
 
@@ -671,6 +694,13 @@ void CDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
 
 		this->StartZidingyiShoukuan(name, selfpay_id);
 	}
+	else if (name == L"diandan_food_search_clear")
+	{
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("diandan_food_search_edit")));
+		m_pEdit->SetText(L"");
+
+		StopSerachFood();
+	}
 }
 
 //处理option切换事件
@@ -736,15 +766,39 @@ void CDiandanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
 void CDiandanPageUI::HandleTextChangedMsg(TNotifyUI& msg)
 {
 	CDuiString name = msg.pSender->GetName();
+
+	if (name == L"diandan_food_search_edit")
+	{
+		//商品搜索框的输入事件
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("diandan_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 CDiandanPageUI::HandleTextCapture(std::string content)
 {
-	//能收到这个消息,说明当前没有弹框,如果弹框了消息会被弹框本身拦截不会到MainWnd
-	string a = content;
-
-	::MessageBox(NULL, L"111", L"222", MB_OK);
+	if (m_is_show_modal_wnd == true)
+	{
+		m_curModalWnd->HandleTextCapture(content);
+	}
+	else
+	{
+		//没有任何弹框,那么就是按扫描商品条码来处理
+		this->SaomiaoBarcode(content);
+	}
 }
 
 void CDiandanPageUI::AddDiandanOrderItemShow(int index)
@@ -1452,12 +1506,20 @@ void CDiandanPageUI::ClickFoodAction()
 		clickItem.SetFoodpackageInfo(m_cur_click_food_item->GetFoodpackageInfo());
 		clickItem.SetIsTaocan(true);
 
+		if (m_is_show_modal_wnd == true)
+		{
+			return;
+		}
+
 		//先弹框进行选择属性
 		CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
 		pNatureFrame->SetFoodItemUI(m_cur_click_food_item);
 
 		if (pNatureFrame != NULL)
 		{
+			m_is_show_modal_wnd = true;
+			m_curModalWnd = pNatureFrame;
+
 			pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 			pNatureFrame->SetIcon(IDI_ICON_DUILIB);
 			pNatureFrame->CenterWindow();
@@ -1469,10 +1531,12 @@ void CDiandanPageUI::ClickFoodAction()
 				std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
 				clickItem.natureSelectedArray = natureSelectedArray;
 
+				m_is_show_modal_wnd = false;
 				delete pNatureFrame;
 			}
 			else
 			{
+				m_is_show_modal_wnd = false;
 				delete pNatureFrame;
 
 				return;
@@ -1553,11 +1617,19 @@ void CDiandanPageUI::ClickFoodAction()
 		{
 			clickItem.is_weight = true;
 
+			if (m_is_show_modal_wnd == true)
+			{
+				return;
+			}
+
 			//这里要弹出称重框,不弹属性框
 			CChengzhongWnd* pChengzhongFrame = new CChengzhongWnd();
 
 			if (pChengzhongFrame != NULL)
 			{
+				m_is_show_modal_wnd = true;
+				m_curModalWnd = pChengzhongFrame;
+
 				pChengzhongFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 				pChengzhongFrame->SetIcon(IDI_ICON_DUILIB);
 				pChengzhongFrame->CenterWindow();
@@ -1576,10 +1648,12 @@ void CDiandanPageUI::ClickFoodAction()
 
 					clickItem.num = weight;
 
+					m_is_show_modal_wnd = false;
 					delete pChengzhongFrame;
 				}
 				else
 				{
+					m_is_show_modal_wnd = false;
 					delete pChengzhongFrame;
 
 					return;
@@ -1595,12 +1669,20 @@ void CDiandanPageUI::ClickFoodAction()
 				//商品有商品属性
 				clickItem.is_nature = true;
 
+				if (m_is_show_modal_wnd == true)
+				{
+					return;
+				}
+
 				//先弹框进行选择属性
 				CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
 				pNatureFrame->SetFoodItemUI(m_cur_click_food_item);
 
 				if (pNatureFrame != NULL)
 				{
+					m_is_show_modal_wnd = true;
+					m_curModalWnd = pNatureFrame;
+
 					pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 					pNatureFrame->SetIcon(IDI_ICON_DUILIB);
 					pNatureFrame->CenterWindow();
@@ -1612,10 +1694,12 @@ void CDiandanPageUI::ClickFoodAction()
 						std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
 						clickItem.natureSelectedArray = natureSelectedArray;
 
+						m_is_show_modal_wnd = false;
 						delete pNatureFrame;
 					}
 					else
 					{
+						m_is_show_modal_wnd = false;
 						delete pNatureFrame;
 
 						return;
@@ -1710,12 +1794,20 @@ void CDiandanPageUI::ClickGuige()
 	bool is_taocan = m_cur_diandan_order.getDiandanOrderItem(nIndex).m_is_taocan;
 	if (is_taocan)
 	{
+		if (m_is_show_modal_wnd == true)
+		{
+			return;
+		}
+
 		//弹出属性框,开始重新选择属性
 		CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
 		pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
 
 		if (pNatureFrame != NULL)
 		{
+			m_is_show_modal_wnd = true;
+			m_curModalWnd = pNatureFrame;
+
 			pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 			pNatureFrame->SetIcon(IDI_ICON_DUILIB);
 			pNatureFrame->CenterWindow();
@@ -1727,6 +1819,7 @@ void CDiandanPageUI::ClickGuige()
 				std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
 				m_cur_diandan_order.UpdateItemGuige(nIndex, natureSelectedArray);
 
+				m_is_show_modal_wnd = false;
 				delete pNatureFrame;
 
 				//然后要刷新这个item的显示
@@ -1734,6 +1827,9 @@ void CDiandanPageUI::ClickGuige()
 			}
 			else
 			{
+				m_is_show_modal_wnd = false;
+				delete pNatureFrame;
+
 				return;
 			}
 		}
@@ -1805,10 +1901,18 @@ void CDiandanPageUI::ClickQingkong()
 
 void CDiandanPageUI::ClickZhengdanMemo()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CMemoWnd* pMemoDlg = new CMemoWnd();
 
 	if (pMemoDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pMemoDlg;
+
 		pMemoDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pMemoDlg->SetIcon(IDI_ICON_DUILIB);
 		pMemoDlg->CenterWindow();
@@ -1829,10 +1933,12 @@ void CDiandanPageUI::ClickZhengdanMemo()
 			//保存备注,提交订单的时候用
 			m_cur_diandan_order.SetMemo(sMemo);
 
+			m_is_show_modal_wnd = false;
 			delete pMemoDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pMemoDlg;
 
 			return;
@@ -1873,11 +1979,19 @@ void CDiandanPageUI::JixuJiacai()
 
 void CDiandanPageUI::ClickChakanYouhui()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	//弹框展示所有的优惠
 	CYouhuiShowWnd* pYouhuiDlg = new CYouhuiShowWnd();
 
 	if (pYouhuiDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pYouhuiDlg;
+
 		pYouhuiDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pYouhuiDlg->SetIcon(IDI_ICON_DUILIB);
 		pYouhuiDlg->CenterWindow();
@@ -1888,10 +2002,13 @@ void CDiandanPageUI::ClickChakanYouhui()
 
 		if (ret == IDOK)
 		{
-			
+			m_is_show_modal_wnd = false;
+
+			delete pYouhuiDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pYouhuiDlg;
 
 			return;
@@ -1901,10 +2018,18 @@ void CDiandanPageUI::ClickChakanYouhui()
 
 void CDiandanPageUI::ClickMemberLogin()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CMemberLoginWnd* pMemberLoginDlg = new CMemberLoginWnd();
 
 	if (pMemberLoginDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pMemberLoginDlg;
+
 		pMemberLoginDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pMemberLoginDlg->SetIcon(IDI_ICON_DUILIB);
 		pMemberLoginDlg->CenterWindow();
@@ -1931,10 +2056,12 @@ void CDiandanPageUI::ClickMemberLogin()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pMemberLoginDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pMemberLoginDlg;
 
 			return;
@@ -1944,10 +2071,18 @@ void CDiandanPageUI::ClickMemberLogin()
 
 void CDiandanPageUI::ClickZhekou()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CZhekouWnd* pZhekouDlg = new CZhekouWnd();
 
 	if (pZhekouDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pZhekouDlg;
+
 		pZhekouDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pZhekouDlg->SetIcon(IDI_ICON_DUILIB);
 		pZhekouDlg->CenterWindow();
@@ -1966,10 +2101,12 @@ void CDiandanPageUI::ClickZhekou()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pZhekouDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pZhekouDlg;
 
 			return;
@@ -1979,10 +2116,18 @@ void CDiandanPageUI::ClickZhekou()
 
 void CDiandanPageUI::ClickJiajia()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CjiajiaWnd* pJiajiaDlg = new CjiajiaWnd();
 
 	if (pJiajiaDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pJiajiaDlg;
+
 		pJiajiaDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pJiajiaDlg->SetIcon(IDI_ICON_DUILIB);
 		pJiajiaDlg->CenterWindow();
@@ -2001,10 +2146,12 @@ void CDiandanPageUI::ClickJiajia()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pJiajiaDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pJiajiaDlg;
 
 			return;
@@ -2014,10 +2161,18 @@ void CDiandanPageUI::ClickJiajia()
 
 void CDiandanPageUI::ClickRengongyouhui()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CRengongYouhuiWnd* pYouhuiDlg = new CRengongYouhuiWnd();
 
 	if (pYouhuiDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pYouhuiDlg;
+
 		pYouhuiDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pYouhuiDlg->SetIcon(IDI_ICON_DUILIB);
 		pYouhuiDlg->CenterWindow();
@@ -2036,10 +2191,12 @@ void CDiandanPageUI::ClickRengongyouhui()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pYouhuiDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pYouhuiDlg;
 
 			return;
@@ -2049,10 +2206,18 @@ void CDiandanPageUI::ClickRengongyouhui()
 
 void CDiandanPageUI::ClickSaomaYouhuiquan()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CSaomaYouhuiquanWnd* pSaomaYouhuiquanDlg = new CSaomaYouhuiquanWnd();
 
 	if (pSaomaYouhuiquanDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pSaomaYouhuiquanDlg;
+
 		pSaomaYouhuiquanDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pSaomaYouhuiquanDlg->SetIcon(IDI_ICON_DUILIB);
 		pSaomaYouhuiquanDlg->CenterWindow();
@@ -2075,10 +2240,12 @@ void CDiandanPageUI::ClickSaomaYouhuiquan()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pSaomaYouhuiquanDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pSaomaYouhuiquanDlg;
 
 			return;
@@ -2089,10 +2256,18 @@ void CDiandanPageUI::ClickSaomaYouhuiquan()
 //点击扫码商品券
 void CDiandanPageUI::ClickSaomaShangpinquan()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CSaomaShangpinquanWnd* pSaomaShangpinquanDlg = new CSaomaShangpinquanWnd();
 
 	if (pSaomaShangpinquanDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pSaomaShangpinquanDlg;
+
 		pSaomaShangpinquanDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pSaomaShangpinquanDlg->SetIcon(IDI_ICON_DUILIB);
 		pSaomaShangpinquanDlg->CenterWindow();
@@ -2115,10 +2290,12 @@ void CDiandanPageUI::ClickSaomaShangpinquan()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pSaomaShangpinquanDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pSaomaShangpinquanDlg;
 
 			return;
@@ -2129,10 +2306,18 @@ void CDiandanPageUI::ClickSaomaShangpinquan()
 //点击扫码权益卡
 void CDiandanPageUI::ClickSaomaQuanyika()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CSaomaQuanyikaWnd* pSaomaQuanyikaDlg = new CSaomaQuanyikaWnd();
 
 	if (pSaomaQuanyikaDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pSaomaQuanyikaDlg;
+
 		pSaomaQuanyikaDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pSaomaQuanyikaDlg->SetIcon(IDI_ICON_DUILIB);
 		pSaomaQuanyikaDlg->CenterWindow();
@@ -2153,10 +2338,12 @@ void CDiandanPageUI::ClickSaomaQuanyika()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pSaomaQuanyikaDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pSaomaQuanyikaDlg;
 
 			return;
@@ -2167,10 +2354,18 @@ void CDiandanPageUI::ClickSaomaQuanyika()
 //点击扫码次卡
 void CDiandanPageUI::ClickSaomaCika()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CSaomaCikaWnd* pSaomaCikaDlg = new CSaomaCikaWnd();
 
 	if (pSaomaCikaDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pSaomaCikaDlg;
+
 		pSaomaCikaDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pSaomaCikaDlg->SetIcon(IDI_ICON_DUILIB);
 		pSaomaCikaDlg->CenterWindow();
@@ -2199,10 +2394,12 @@ void CDiandanPageUI::ClickSaomaCika()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pSaomaCikaDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pSaomaCikaDlg;
 
 			return;
@@ -2212,10 +2409,18 @@ void CDiandanPageUI::ClickSaomaCika()
 
 void CDiandanPageUI::ClickCanpai()
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
 	CCanpaiWnd* pCanpaiDlg = new CCanpaiWnd();
 
 	if (pCanpaiDlg != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pCanpaiDlg;
+
 		pCanpaiDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
 		pCanpaiDlg->SetIcon(IDI_ICON_DUILIB);
 		pCanpaiDlg->CenterWindow();
@@ -2236,10 +2441,12 @@ void CDiandanPageUI::ClickCanpai()
 
 			this->UpdateJiesuanInfo();
 
+			m_is_show_modal_wnd = false;
 			delete pCanpaiDlg;
 		}
 		else
 		{
+			m_is_show_modal_wnd = false;
 			delete pCanpaiDlg;
 
 			return;
@@ -2383,12 +2590,13 @@ void CDiandanPageUI::StartWeixinzhifuShoukuan()
 	CWeixinzhifuShoukuanWnd* pShoukuanWnd = new CWeixinzhifuShoukuanWnd;
 	if (pShoukuanWnd != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pShoukuanWnd;
+
 		pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
 		pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
 		pShoukuanWnd->CenterWindow();
 
-		m_is_show_modal_wnd = true;
-
 		std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 		std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
 		pShoukuanWnd->InitMoney(watchValue);
@@ -2418,9 +2626,8 @@ void CDiandanPageUI::StartWeixinzhifuShoukuan()
 
 		}
 
-		delete pShoukuanWnd;
-
 		m_is_show_modal_wnd = false;
+		delete pShoukuanWnd;
 	}
 }
 
@@ -2441,12 +2648,13 @@ void CDiandanPageUI::StartHuiyuanShoukuan()
 	CHuiyuanShoukuanWnd* pShoukuanWnd = new CHuiyuanShoukuanWnd();
 	if (pShoukuanWnd != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pShoukuanWnd;
+
 		pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
 		pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
 		pShoukuanWnd->CenterWindow();
 
-		m_is_show_modal_wnd = true;
-
 		std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 		std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
 		pShoukuanWnd->InitMoney(watchValue);
@@ -2476,9 +2684,8 @@ void CDiandanPageUI::StartHuiyuanShoukuan()
 
 		}
 
-		delete pShoukuanWnd;
-
 		m_is_show_modal_wnd = false;
+		delete pShoukuanWnd;
 	}
 }
 
@@ -2500,12 +2707,13 @@ void CDiandanPageUI::StartXianjinShoukuan()
 	CXianjinShoukuanWnd* pShoukuanWnd = new CXianjinShoukuanWnd();
 	if (pShoukuanWnd != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pShoukuanWnd;
+
 		pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
 		pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
 		pShoukuanWnd->CenterWindow();
 
-		m_is_show_modal_wnd = true;
-
 		std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 		std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
 		pShoukuanWnd->InitMoney(watchValue);
@@ -2535,9 +2743,8 @@ void CDiandanPageUI::StartXianjinShoukuan()
 
 		}
 
-		delete pShoukuanWnd;
-
 		m_is_show_modal_wnd = false;
+		delete pShoukuanWnd;
 	}
 }
 
@@ -2558,12 +2765,13 @@ void CDiandanPageUI::StartFulikaShoukuan()
 	CFulikaShoukuanWnd* pShoukuanWnd = new CFulikaShoukuanWnd();
 	if (pShoukuanWnd != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pShoukuanWnd;
+
 		pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
 		pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
 		pShoukuanWnd->CenterWindow();
 
-		m_is_show_modal_wnd = true;
-
 		std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 		std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
 		pShoukuanWnd->InitMoney(watchValue);
@@ -2593,9 +2801,8 @@ void CDiandanPageUI::StartFulikaShoukuan()
 
 		}
 
-		delete pShoukuanWnd;
-
 		m_is_show_modal_wnd = false;
+		delete pShoukuanWnd;
 	}
 }
 
@@ -2616,12 +2823,13 @@ void CDiandanPageUI::StartZidingyiShoukuan(std::wstring name, std::wstring selfp
 	CZidingyiShoukuanWnd* pShoukuanWnd = new CZidingyiShoukuanWnd();
 	if (pShoukuanWnd != NULL)
 	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pShoukuanWnd;
+
 		pShoukuanWnd->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_TOOLWINDOW);
 		pShoukuanWnd->SetIcon(IDI_ICON_DUILIB);
 		pShoukuanWnd->CenterWindow();
 
-		m_is_show_modal_wnd = true;
-
 		std::string format_string = CLewaimaiString::DoubleToString(m_cur_total_price, 2);
 		std::wstring watchValue = CLewaimaiString::UTF8ToUnicode(format_string);
 		pShoukuanWnd->InitMoney(watchValue);
@@ -2654,9 +2862,8 @@ void CDiandanPageUI::StartZidingyiShoukuan(std::wstring name, std::wstring selfp
 
 		}
 
-		delete pShoukuanWnd;
-
 		m_is_show_modal_wnd = false;
+		delete pShoukuanWnd;
 	}
 }
 
@@ -2675,4 +2882,125 @@ void CDiandanPageUI::UpdateFoodStock(std::string food_stock)
 		CSqlite3 sqlite;
 		sqlite.UpdateFoodStock(food_id, stock);
 	}
+}
+
+//扫描了商品条码的逻辑处理
+void CDiandanPageUI::SaomiaoBarcode(std::string barcode)
+{
+	CSqlite3 sqlite;
+
+	CFood foodinfo;
+	bool ret = sqlite.GetFoodByBarcode(barcode, foodinfo);
+
+	if (ret == false)
+	{
+		//说明没找到对应的商品条码
+		m_pMainWnd->ShowToast(L"未找到对应的商品条码");
+		return;
+	}
+
+	//这里说明找到了,那么处理添加购物车逻辑,扫码的情况下,这里不管有没有属性,都按没属性处理,不管有没有称重都按没称重处理(以后标签秤可能会修改)
+
+	if (foodinfo.stockvalid == "1" && atof(foodinfo.stock.c_str()) < 1)
+	{
+		//库存为0了,不做任何处理
+		m_pMainWnd->ShowToast(L"该商品已售完");
+		return;
+	}
+
+	CDiandanOrderItem clickItem;
+
+	clickItem.food_id = foodinfo.id;
+	clickItem.food_name = foodinfo.name;
+	clickItem.type_id = foodinfo.type_id;
+	clickItem.price = foodinfo.price;
+	clickItem.is_dabao = false;
+	clickItem.dabao_money = foodinfo.dabao_money;
+	clickItem.num = "1";
+
+	if (foodinfo.member_price_used == "1")
+	{
+		clickItem.is_member_price_used = true;
+	}
+	else
+	{
+		clickItem.is_member_price_used = false;
+	}
+
+	//处理会员价的json
+	std::string member_price_json = foodinfo.member_price_json;
+
+	rapidjson::Document document;
+	document.Parse(member_price_json.c_str());
+
+	rapidjson::Value& member_price = document;
+	for (rapidjson::SizeType i = 0; i < member_price.Size(); ++i)
+	{
+		rapidjson::Value& member_price_info = member_price[i];
+
+		MemberPrice newPirce;
+		newPirce.id = member_price_info["id"].GetString();
+		newPirce.level = member_price_info["level"].GetString();
+		newPirce.price = member_price_info["price"].GetString();
+
+		clickItem.m_member_price.push_back(newPirce);
+	}
+
+	//把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
+	clickItem.SetFoodInfo(foodinfo);
+	clickItem.SetIsTaocan(false);
+
+	clickItem.is_weight = false;
+	clickItem.is_nature = false;
+
+	//商品没有商品属性
+	bool is_add_new = false;
+
+	int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
+
+	if (is_add_new)
+	{
+		//说明是新增了一项,要刷新一下购物车展示
+		this->AddDiandanOrderItemShow(index);
+	}
+	else
+	{
+		//没有新增,而是修改了一项
+		this->UpdateDiandanOrderItemShow(index);
+	}
+}
+
+//开始搜索某个商品名字
+void CDiandanPageUI::StartSearchFood(std::string foodname)
+{
+	//展示删除按钮
+	CButtonUI* pClear = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_food_search_clear")));
+	pClear->SetVisible(true);
+
+	//隐藏商品分类展示
+	CHorizontalLayoutUI* pFoodtype = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_fenlei_layout")));
+	pFoodtype->SetVisible(false);
+
+	m_type_id_before_sousuo = m_cur_type_id;
+	m_cur_type_id = "sousuo";
+
+	m_sousuo_foodname = foodname;
+
+	this->InitFoodShow();
+}
+
+//停止搜索商品
+void CDiandanPageUI::StopSerachFood()
+{
+	//隐藏删除按钮
+	CButtonUI* pClear = static_cast<CButtonUI*>(this->FindSubControl(_T("diandan_food_search_clear")));
+	pClear->SetVisible(false);
+
+	//展示商品分类展示
+	CHorizontalLayoutUI* pFoodtype = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_fenlei_layout")));
+	pFoodtype->SetVisible(true);
+
+	m_cur_type_id = m_type_id_before_sousuo;
+
+	this->InitFoodShow();
 }

+ 13 - 0
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -147,6 +147,15 @@ public:
 	//支付成功后,更新商品库存
 	void UpdateFoodStock(std::string food_stock);
 
+	//扫描了商品条码的逻辑处理
+	void SaomiaoBarcode(std::string barcode);
+
+	//开始搜索某个商品名字
+	void StartSearchFood(std::string foodname);
+
+	//停止搜索商品
+	void StopSerachFood();
+
 private:
 	//获取用于提交订单的参数结构
 	std::map<string, string> GetSendorderParams();
@@ -165,6 +174,10 @@ private:
 	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;
 	

+ 117 - 0
zhipuzi_pos_windows/tool/CSqlite3.cpp

@@ -1105,6 +1105,71 @@ std::vector<CFood> CSqlite3::GetFoodByTypeid(std::string type_id, bool is_shouyi
 	return data;
 }
 
+std::vector<CFood> CSqlite3::GetFoodByFoodname(std::string foodname, bool is_shouyinji_show)
+{
+	std::vector<CFood> data;
+
+	std::string sql;
+
+	if (is_shouyinji_show)
+	{
+		sql = "SELECT * FROM pos_food WHERE name LIKE '%" + foodname + "%' AND status='NORMAL' AND is_shouyinji_show = '1'";
+	}
+	else
+	{
+		sql = "SELECT * FROM pos_food WHERE name LIKE '%" + foodname + "%' AND status='NORMAL'";
+	}
+
+	sql += " ORDER BY tag";
+
+	sqlite3_stmt * stmt = NULL;
+
+	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+	{
+		while (sqlite3_step(stmt) == SQLITE_ROW)
+		{
+			CFood newFood;
+
+			newFood.id = (char*)sqlite3_column_text(stmt, 0);
+			newFood.shop_id = (char*)sqlite3_column_text(stmt, 1);
+			newFood.name = (char*)sqlite3_column_text(stmt, 2);
+			newFood.price = (char*)sqlite3_column_text(stmt, 3);
+			newFood.tag = (char*)sqlite3_column_text(stmt, 4);
+			newFood.status = (char*)sqlite3_column_text(stmt, 5);
+			newFood.type_id = (char*)sqlite3_column_text(stmt, 6);
+			newFood.is_dabao = (char*)sqlite3_column_text(stmt, 7);
+			newFood.dabao_money = (char*)sqlite3_column_text(stmt, 8);
+			newFood.is_nature = (char*)sqlite3_column_text(stmt, 9);
+			newFood.nature = (char*)sqlite3_column_text(stmt, 10);
+			newFood.autostocknum = (char*)sqlite3_column_text(stmt, 11);
+			newFood.goods_img = (char*)sqlite3_column_text(stmt, 12);
+			newFood.unit = (char*)sqlite3_column_text(stmt, 13);
+			newFood.barcode = (char*)sqlite3_column_text(stmt, 14);
+			newFood.member_price_used = (char*)sqlite3_column_text(stmt, 15);
+			newFood.member_price = (char*)sqlite3_column_text(stmt, 16);
+			newFood.buying_price = (char*)sqlite3_column_text(stmt, 17);
+			newFood.stock = (char*)sqlite3_column_text(stmt, 18);
+			newFood.stockvalid = (char*)sqlite3_column_text(stmt, 19);
+			newFood.stock_warning = (char*)sqlite3_column_text(stmt, 20);
+			newFood.is_shouyinji_show = (char*)sqlite3_column_text(stmt, 21);
+			newFood.expiration_date = (char*)sqlite3_column_text(stmt, 22);
+			newFood.is_weight = (char*)sqlite3_column_text(stmt, 23);
+			newFood.member_price_json = (char*)sqlite3_column_text(stmt, 24);
+
+			data.push_back(newFood);
+		}
+
+		sqlite3_finalize(stmt);
+	}
+	else
+	{
+		//异常情况
+		sqlite3_finalize(stmt);
+	}
+
+	return data;
+}
+
 std::vector<CFoodpackage> CSqlite3::GetFoodpackages(bool is_shouyinji_show)
 {
 	std::vector<CFoodpackage> data;
@@ -1209,6 +1274,58 @@ bool CSqlite3::GetFoodById(std::string food_id, CFood& newFood)
 	return is_found;
 }
 
+bool CSqlite3::GetFoodByBarcode(std::string barcode, CFood& newFood)
+{
+	bool is_found = false;
+
+	std::string sql = "SELECT * FROM pos_food WHERE barcode = '" + barcode + "'";
+
+	sqlite3_stmt * stmt = NULL;
+
+	if (sqlite3_prepare_v2(m_db, sql.c_str(), -1, &stmt, NULL) == SQLITE_OK)
+	{
+		while (sqlite3_step(stmt) == SQLITE_ROW)
+		{
+			is_found = true;
+
+			newFood.id = (char*)sqlite3_column_text(stmt, 0);
+			newFood.shop_id = (char*)sqlite3_column_text(stmt, 1);
+			newFood.name = (char*)sqlite3_column_text(stmt, 2);
+			newFood.price = (char*)sqlite3_column_text(stmt, 3);
+			newFood.tag = (char*)sqlite3_column_text(stmt, 4);
+			newFood.status = (char*)sqlite3_column_text(stmt, 5);
+			newFood.type_id = (char*)sqlite3_column_text(stmt, 6);
+			newFood.is_dabao = (char*)sqlite3_column_text(stmt, 7);
+			newFood.dabao_money = (char*)sqlite3_column_text(stmt, 8);
+			newFood.is_nature = (char*)sqlite3_column_text(stmt, 9);
+			newFood.nature = (char*)sqlite3_column_text(stmt, 10);
+			newFood.autostocknum = (char*)sqlite3_column_text(stmt, 11);
+			newFood.goods_img = (char*)sqlite3_column_text(stmt, 12);
+			newFood.unit = (char*)sqlite3_column_text(stmt, 13);
+			newFood.barcode = (char*)sqlite3_column_text(stmt, 14);
+			newFood.member_price_used = (char*)sqlite3_column_text(stmt, 15);
+			newFood.member_price = (char*)sqlite3_column_text(stmt, 16);
+			newFood.buying_price = (char*)sqlite3_column_text(stmt, 17);
+			newFood.stock = (char*)sqlite3_column_text(stmt, 18);
+			newFood.stockvalid = (char*)sqlite3_column_text(stmt, 19);
+			newFood.stock_warning = (char*)sqlite3_column_text(stmt, 20);
+			newFood.is_shouyinji_show = (char*)sqlite3_column_text(stmt, 21);
+			newFood.expiration_date = (char*)sqlite3_column_text(stmt, 22);
+			newFood.is_weight = (char*)sqlite3_column_text(stmt, 23);
+			newFood.member_price_json = (char*)sqlite3_column_text(stmt, 24);
+		}
+
+		sqlite3_finalize(stmt);
+	}
+	else
+	{
+		//异常情况
+		sqlite3_finalize(stmt);
+	}
+
+	return is_found;
+}
+
 //更新商品ID的库存
 void CSqlite3::UpdateFoodStock(std::string food_id, std::string stock)
 {

+ 7 - 0
zhipuzi_pos_windows/tool/CSqlite3.h

@@ -39,11 +39,18 @@ public:
 
 	std::vector<CFoodType> GetFoodtypes(bool is_shouyinji_show = true);
 	std::vector<CFood> GetFoodByTypeid(std::string type_id, bool is_shouyinji_show = true);
+
+	//用于商品搜索
+	std::vector<CFood> GetFoodByFoodname(std::string foodname, bool is_shouyinji_show = true);
+
 	std::vector<CFoodpackage> GetFoodpackages(bool is_shouyinji_show = true);
 
 	//通过商品ID查找商品,如果找到返回true,找不到返回false
 	bool GetFoodById(std::string food_id, CFood& newFood);
 
+	//通过商品条码查找商品,如果找到返回true,找不到返回false
+	bool GetFoodByBarcode(std::string barcode, CFood& newFood);
+
 	//更新商品ID的库存
 	void UpdateFoodStock(std::string food_id, std::string stock);
 

+ 26 - 2
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -207,7 +207,7 @@ void CMainWnd::Notify(TNotifyUI& msg)
 	else if (msg.sType == _T("textchanged"))
 	{
 		//编辑框内容改变事件
-
+		HandleTextChangedMsg(msg);
 	}
 }
 
@@ -320,7 +320,7 @@ void CMainWnd::HandleItemSelectMsg(TNotifyUI& msg)
 
 void CMainWnd::HandleTextChangedMsg(TNotifyUI& msg)
 {
-
+	this->m_curPageUI->HandleTextChangedMsg(msg);
 }
 
 LRESULT CMainWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
@@ -378,6 +378,10 @@ LRESULT CMainWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
 		lRes = OnInput(uMsg, wParam, lParam, bHandled);
 		break;
 
+	case WM_KEYDOWN:
+		lRes = OnKeydown(uMsg, wParam, lParam, bHandled);
+		break;
+
     default:
         bHandled = FALSE;
     }
@@ -755,6 +759,26 @@ LRESULT CMainWnd::OnInput(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandle
 	return 0;
 }
 
+LRESULT CMainWnd::OnKeydown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	if (wParam == VK_RETURN)
+	{
+		//这里目前主要作用是,拦截按钮自带的焦点enter响应
+
+		bHandled = true;
+		return 0;
+	}
+	else if (wParam == VK_ESCAPE)
+	{
+		bHandled = true;
+		return 0;
+	}
+
+	//其他的按键事件,不能返回0
+	bHandled = false;
+	return -1;
+}
+
 void CMainWnd::AddTrayIcon()
 {
     memset(&m_trayIcon, 0, sizeof(NOTIFYICONDATA));

+ 4 - 0
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -77,8 +77,12 @@ public:
 
     LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
+	//捕获键盘输入的消息
 	LRESULT OnInput(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
+	//键盘消息
+	LRESULT OnKeydown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
     LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 
 	//这个是用来处理一些自定义的消息