瀏覽代碼

修改商品还剩一点

张洋 4 年之前
父節點
當前提交
b8bbf01945
共有 36 個文件被更改,包括 2540 次插入231 次删除
  1. 1 1
      bin/Win32/Debug/zhipuzi_pos_windows/skin/dianneiorder_info_page.xml
  2. 3 3
      bin/Win32/Debug/zhipuzi_pos_windows/skin/main.xml
  3. 二進制
      bin/Win32/Debug/zhipuzi_pos_windows/skin/red_dianji.png
  4. 二進制
      bin/Win32/Debug/zhipuzi_pos_windows/skin/red_xuanfu.png
  5. 二進制
      bin/Win32/Debug/zhipuzi_pos_windows/skin/red_zhengchang.png
  6. 186 154
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_create_page.xml
  7. 38 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_newtype_wnd.xml
  8. 11 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_page.xml
  9. 29 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_saomaluru_wnd.xml
  10. 196 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_update_page.xml
  11. 1 1
      bin/Win32/Debug/zhipuzi_pos_windows/skin/waimaiorder_info_page.xml
  12. 5 0
      zhipuzi_pos_windows/control/ControlEx.h
  13. 2 1
      zhipuzi_pos_windows/page/CDianneiOrderListPageUI.cpp
  14. 170 26
      zhipuzi_pos_windows/page/CShangpinCreatePageUI.cpp
  15. 6 4
      zhipuzi_pos_windows/page/CShangpinCreatePageUI.h
  16. 73 0
      zhipuzi_pos_windows/page/CShangpinPageUI.cpp
  17. 3 0
      zhipuzi_pos_windows/page/CShangpinPageUI.h
  18. 769 0
      zhipuzi_pos_windows/page/CShangpinUpdatePageUI.cpp
  19. 109 0
      zhipuzi_pos_windows/page/CShangpinUpdatePageUI.h
  20. 3 1
      zhipuzi_pos_windows/page/CWaimaiOrderListPageUI.cpp
  21. 9 0
      zhipuzi_pos_windows/print/CPosPrinter.cpp
  22. 3 0
      zhipuzi_pos_windows/print/CPosPrinter.h
  23. 124 0
      zhipuzi_pos_windows/print/CPosPrinterData.cpp
  24. 3 0
      zhipuzi_pos_windows/print/CPosPrinterData.h
  25. 15 1
      zhipuzi_pos_windows/tool/CFoodHandle.cpp
  26. 5 0
      zhipuzi_pos_windows/tool/CFoodHandle.h
  27. 19 2
      zhipuzi_pos_windows/tool/CSqlite3.cpp
  28. 1 0
      zhipuzi_pos_windows/tool/CSqlite3.h
  29. 10 24
      zhipuzi_pos_windows/wnd/CMainWnd.cpp
  30. 13 13
      zhipuzi_pos_windows/wnd/CMainWnd.h
  31. 285 0
      zhipuzi_pos_windows/wnd/CShangpinNewTypeWnd.cpp
  32. 75 0
      zhipuzi_pos_windows/wnd/CShangpinNewTypeWnd.h
  33. 268 0
      zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.cpp
  34. 81 0
      zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.h
  35. 6 0
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj
  36. 18 0
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

+ 1 - 1
bin/Win32/Debug/zhipuzi_pos_windows/skin/dianneiorder_info_page.xml

@@ -3,7 +3,7 @@
 	<DianneiOrderInfoPage>
 		<VerticalLayout>
 			<HorizontalLayout height="44" bkcolor="#FFFFFFFF" padding="0,0,0,0">
-				<Button name="diannei_order_info_page_return" float="true" pos="20,3,120,41" text="返回" textcolor="#FFFFFFFF"/>
+				<Button name="diannei_order_info_page_return" float="true" pos="20,6,120,38" text="返回" textcolor="#FFFFFFFF"/>
 			</HorizontalLayout>
 
 			<HorizontalLayout>

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


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


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


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


File diff suppressed because it is too large
+ 186 - 154
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_create_page.xml


+ 38 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_newtype_wnd.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="620,544" caption="0,0,0,44" roundcorner="4,4" >
+	<Font id="0" name="微软雅黑" size="24" />
+	<Font id="1" name="微软雅黑" size="40" />
+	<Font id="2" name="微软雅黑" size="20" />
+	<Font id="3" name="微软雅黑" size="32" />
+	<VerticalLayout bkimage="shoukuan_bkg.png" >
+		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF3CB371">
+			<Label name="memo_dlg_title" text="新建商品分类" height="44" align="center" valign="center" padding="0,0,0,0" textcolor="#FFFFFFFF" font="2"/>
+			<Button name="closebtn" keyboard="false" padding="0,13,15,0" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
+		</HorizontalLayout>
+		
+		<VerticalLayout visible="true" name="shoukuan_before_pay_layout" height="500" padding="0,20,0,0">		
+			<HorizontalLayout height="44" padding="0,30,0,0">
+				<Label text="分类名字:" width="80" height="44" padding="20,0,0,0"></Label>					
+				<Edit name="fenlei_create_page_name_edit" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+			
+			<HorizontalLayout height="44" padding="0,30,0,0">
+				<Label text="分类序号:" width="80" height="44" padding="20,0,0,0"></Label>					
+				<Edit name="fenlei_create_page_xuhao_edit" width="100" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="(序号越小,排序越靠前)" width="300" height="44" padding="20,0,0,0"></Label>		
+			</HorizontalLayout>
+			
+			<HorizontalLayout height="60" padding="0,80,0,50">
+				<Control></Control>
+				<Button name="fenlei_create_page_save_btn" width="400" height="60" text="保存" textcolor="#FFFFFFFF" normalimage="file='green_zhengchang.png' corner='5,5,5,5'" hotimage="file='green_xuanfu.png' corner='5,5,5,5'" pushedimage="file='green_dianji.png' corner='5,5,5,5'" />
+				<Control></Control>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="50" padding="0,30,0,0">
+				<Control></Control>
+				<Label name="errinfo" font="2" width="400" height="50" multiline="true" text="" visible="false" textcolor="#FF0000" align="center" />
+				<Control></Control>
+			</HorizontalLayout>			
+		</VerticalLayout>
+    </VerticalLayout>
+</Window>

+ 11 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_page.xml

@@ -10,6 +10,15 @@
 				<HorizontalLayout height="60" width="400" padding="43,80,0,0">
 					<Button name="shangpin_page_add_btn" width="400" height="60" text="新建商品" textcolor="#FFFFFFFF" normalimage="file='green_zhengchang.png' corner='5,5,5,5'" hotimage="file='green_xuanfu.png' corner='5,5,5,5'" pushedimage="file='green_dianji.png' corner='5,5,5,5'" />
 				</HorizontalLayout>
+				
+				<Control></Control>
+				
+				<HorizontalLayout height="30" padding="0,0,0,80">
+					<Control></Control>
+					<Control bkimage="beizhu_tishi.png" width="24" height="24" padding="50,2,10,0"></Control>
+					<Label text="推荐使用web后台管理商品,功能更多更方便" width="430" align="left" textcolor="#FF8D8D8D"></Label>
+					<Control></Control>
+				</HorizontalLayout>
 			</VerticalLayout>
 			
 			<Control width="1" bkcolor="#FFEBE8E8"></Control>
@@ -19,6 +28,8 @@
 
 				</HorizontalLayout>
 				
+				<Button name="shangpin_page_add_type_btn" width="120" height="42" text="新建分类" textcolor="#FF3CB371" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FF3CB371" />
+				
 				<TileLayout name="shangpin_foodlist" padding="0,0,0,0" inset="15,15,15,15" childpadding="1" itemsize="170,260" vscrollbar="true" hscrollbar="false">
 				
 				</TileLayout>

+ 29 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_saomaluru_wnd.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="620,544" caption="0,0,0,44" roundcorner="4,4" >
+	<Font id="0" name="微软雅黑" size="24" />
+	<Font id="1" name="微软雅黑" size="40" />
+	<Font id="2" name="微软雅黑" size="20" />
+	<Font id="3" name="微软雅黑" size="32" />
+	<VerticalLayout bkimage="shoukuan_bkg.png" >
+		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF3CB371">
+			<Label name="memo_dlg_title" text="扫码快速录入商品" height="44" align="center" valign="center" padding="0,0,0,0" textcolor="#FFFFFFFF" font="2"/>
+			<Button name="closebtn" keyboard="false" padding="0,13,15,0" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
+		</HorizontalLayout>
+		
+		<VerticalLayout visible="true" name="shoukuan_before_pay_layout" height="500" padding="0,20,0,0">						
+			<HorizontalLayout padding="0,50,0,0" height="129">
+				<Control></Control>
+				<Control bkimage="qrcode_attention.png" width="129" height="127"></Control>
+				<Control></Control>
+			</HorizontalLayout>
+			
+			<Label text="请扫描商品条码" align="center" padding="0,30,0,0" height="40" font="0"></Label>
+
+			<HorizontalLayout height="50" padding="0,30,0,0">
+				<Control></Control>
+				<Label name="errinfo" font="2" width="400" height="50" multiline="true" text="" visible="false" textcolor="#FF0000" align="center" />
+				<Control></Control>
+			</HorizontalLayout>			
+		</VerticalLayout>
+    </VerticalLayout>
+</Window>

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


+ 1 - 1
bin/Win32/Debug/zhipuzi_pos_windows/skin/waimaiorder_info_page.xml

@@ -3,7 +3,7 @@
 	<WaimaiOrderInfoPage>
 		<VerticalLayout>
 			<HorizontalLayout height="44" bkcolor="#FFFFFFFF" padding="0,0,0,0">
-				<Button name="waimai_order_info_page_return" float="true" pos="20,3,120,41" text="返回" textcolor="#FFFFFFFF"/>
+				<Button name="waimai_order_info_page_return" float="true" pos="20,6,120,38" text="返回" textcolor="#FFFFFFFF"/>
 			</HorizontalLayout>
 
 			<HorizontalLayout>

+ 5 - 0
zhipuzi_pos_windows/control/ControlEx.h

@@ -18,6 +18,7 @@
 #include "../page/CKucunPageUI.h"
 #include "../page/CCaigouPageUI.h"
 #include "../page/CShangpinCreatePageUI.h"
+#include "../page/CShangpinUpdatePageUI.h"
 
 #include "CWaimaiOrderItemUI.h"
 #include "CDianneiOrderItemUI.h"
@@ -96,6 +97,10 @@ public:
 		{
 			return new CShangpinCreatePageUI;
 		}
+		else if (_tcscmp(pstrClass, _T("ShangpinUpdatePage")) == 0)
+		{
+			return new CShangpinUpdatePageUI;
+		}
 
 		//控件相关的
 		else if (_tcscmp(pstrClass, _T("WaimaiOrderItem")) == 0)

+ 2 - 1
zhipuzi_pos_windows/page/CDianneiOrderListPageUI.cpp

@@ -46,7 +46,8 @@ void CDianneiOrderListPageUI::HandleClickMsg(TNotifyUI& msg)
 		CDianneiOrderItemUI* item = static_cast<CDianneiOrderItemUI*>(msg.pSender->GetParent()->GetParent());
 		std::string diannei_order_id = item->getOrderID();
 
-		m_pMainWnd->SetInfopageDianneiorderParam(diannei_order_id);
+		CDianneiOrderInfoPageUI* page = static_cast<CDianneiOrderInfoPageUI*>(m_pMainWnd->GetPage(CMainWnd::DIANNEIINFO));
+		page->m_order_id = diannei_order_id;
 
 		m_pMainWnd->SwitchPage(CMainWnd::DIANNEIINFO);
 	}

+ 170 - 26
zhipuzi_pos_windows/page/CShangpinCreatePageUI.cpp

@@ -6,6 +6,7 @@
 #include "../tool/CSqlite3.h"
 #include "../tool/CFoodHandle.h"
 #include "../wnd/CMainWnd.h"
+#include "../wnd/CShangpinSaomaluruWnd.h"
 
 CShangpinCreatePageUI::CShangpinCreatePageUI()
 {
@@ -19,8 +20,6 @@ CShangpinCreatePageUI::~CShangpinCreatePageUI()
 //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
 void CShangpinCreatePageUI::InitShow()
 {
-	//一个个初始化新建商品的默认值(每次都要清空)
-
 	//商品名字
 	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
 	pName->SetText(L"");
@@ -95,7 +94,7 @@ void CShangpinCreatePageUI::InitShow()
 
 	//当前库存
 	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
-	pDangqiankucun->SetText(L"");
+	pDangqiankucun->SetText(L"0");
 
 	//商品状态
 	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
@@ -103,7 +102,7 @@ void CShangpinCreatePageUI::InitShow()
 
 	//进货价
 	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
-	pJinhuojia->SetText(L"");
+	pJinhuojia->SetText(L"0");
 
 	//进货价模式
 	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
@@ -124,11 +123,13 @@ void CShangpinCreatePageUI::InitShow()
 
 	//打包费
 	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
-	pDaobaofei->SetText(L"");
+	pDaobaofei->SetText(L"0");
 
 	//商品加工方式
 	CCheckBoxUI* pJiagongfangshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
 	pJiagongfangshi->Selected(true, false);
+
+	ShowError(L"");
 }
 
 //处理按钮点击类事件
@@ -140,6 +141,14 @@ void CShangpinCreatePageUI::HandleClickMsg(TNotifyUI& msg)
 	{
 		StartSave();
 	}
+	else if (name == L"shangpin_create_page_return_btn")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN, false);
+	}
+	else if (name == L"shangpin_create_page_saoma_btn")
+	{
+		ShowSaomaluru();
+	}
 }
 
 //处理option切换事件
@@ -372,7 +381,12 @@ void CShangpinCreatePageUI::HandleTextChangedMsg(TNotifyUI& msg)
 //处理扫码枪捕捉到的扫码信息
 void CShangpinCreatePageUI::HandleTextCapture(std::string content)
 {
+	if (m_is_show_modal_wnd == true)
+	{
+		m_curModalWnd->HandleTextCapture(content);
 
+		return;
+	}
 }
 
 void CShangpinCreatePageUI::SetPos(RECT rc, bool bNeedInvalidate)
@@ -390,16 +404,30 @@ void CShangpinCreatePageUI::StartSave()
 	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
 	std::wstring ws_name = pName->GetText();
 	m_name = CLewaimaiString::UnicodeToUTF8(ws_name);
+	if (m_name == "")
+	{
+		ShowError(L"商品名字不能为空");
+		return;
+	}
 
 	//商品序号
 	CEditUI* pXuhao = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_xuhao_edit"));
 	std::wstring ws_xuhao = pXuhao->GetText();
 	m_xuhao = CLewaimaiString::UnicodeToUTF8(ws_xuhao);
+	if (m_xuhao == "")
+	{
+		m_xuhao = "0";
+	}
 
 	//初始化商品分类
 	CComboUI* com_fenlei = static_cast<CComboUI*>(this->FindSubControl(_T("shangpin_create_page_foodtype")));
 	std::wstring ws_type = com_fenlei->GetText();
 	m_fenlei = CLewaimaiString::UnicodeToUTF8(ws_type);
+	if (m_fenlei == "")
+	{
+		ShowError(L"商品分类不能为空,请先创建并选择商品分类");
+		return;
+	}
 
 	//商品条码
 	CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
@@ -410,6 +438,11 @@ void CShangpinCreatePageUI::StartSave()
 	CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
 	std::wstring ws_price = pPrice->GetText();
 	m_price = CLewaimaiString::UnicodeToUTF8(ws_price);
+	if (m_price == "")
+	{
+		ShowError(L"商品价格不能为空");
+		return;
+	}
 
 	//商品单位
 	CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
@@ -445,6 +478,10 @@ void CShangpinCreatePageUI::StartSave()
 	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
 	std::wstring ws_dangqiankucun = pDangqiankucun->GetText();
 	m_dangqiankucun = CLewaimaiString::UnicodeToUTF8(ws_dangqiankucun);
+	if (m_dangqiankucun == "")
+	{
+		m_dangqiankucun = "0";
+	}
 
 	//商品状态
 	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
@@ -461,6 +498,10 @@ void CShangpinCreatePageUI::StartSave()
 	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
 	std::wstring ws_jinhuojia = pJinhuojia->GetText();
 	m_jinhuojia = CLewaimaiString::UnicodeToUTF8(ws_jinhuojia);
+	if (m_jinhuojia == "")
+	{
+		m_jinhuojia = "0";
+	}
 
 	//进货价模式
 	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
@@ -480,7 +521,7 @@ void CShangpinCreatePageUI::StartSave()
 
 	m_is_shouyinji_show = pShouyinji->IsSelected();
 	m_is_waimai_show = pWaimai->IsSelected();
-	m_is_saomadiancan_shou = pSaomaidancan->IsSelected();
+	m_is_saomadiancan_show = pSaomaidancan->IsSelected();
 
 	//是否开启打包费
 	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_is_dabao"));
@@ -490,6 +531,10 @@ void CShangpinCreatePageUI::StartSave()
 	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
 	std::wstring ws_dabaofei = pDaobaofei->GetText();
 	m_dabaofei = CLewaimaiString::UnicodeToUTF8(ws_dabaofei);
+	if (m_dabaofei == "")
+	{
+		m_dabaofei = "0";
+	}
 
 	//商品加工方式
 	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
@@ -498,15 +543,15 @@ void CShangpinCreatePageUI::StartSave()
 	
 	if (pJiagongfangshi_1->IsSelected())
 	{
-		m_jiagong_type = 0;
+		m_jiagong_type = 1;
 	}
 	else if (pJiagongfangshi_2->IsSelected())
 	{
-		m_jiagong_type = 1;
+		m_jiagong_type = 2;
 	}
 	else if (pJiagongfangshi_3->IsSelected())
 	{
-		m_jiagong_type = 2;
+		m_jiagong_type = 3;
 	}
 
 	ShowError(L"正在保存商品...");
@@ -520,19 +565,22 @@ void CShangpinCreatePageUI::HandleSave()
 
 	params["goods_name"] = m_name;
 	params["goods_tag"] = m_xuhao;
-	params["stock"] = m_dangqiankucun;
+	params["type_lv1_id"] = m_foodtype_id_map[m_fenlei];
+	params["barcode"] = m_tiaoma;
 	params["goods_price"] = m_price;
+	params["unit"] = m_danwei;
 
-	if (m_status == 0)
+	if (m_is_chengzhong)
 	{
-		params["goods_status"] = "NORMAL";
+		params["is_weight"] = "1";
 	}
 	else
 	{
-		params["goods_status"] = "CLOSED";
+		params["is_weight"] = "0";
 	}
 
-	params["type_lv1_id"] = m_foodtype_id_map[m_fenlei];
+	params["weight_plu_code"] = m_plu;
+	params["weight_food_code"] = m_shangpinbianma;
 
 	if (m_kucuntype == 0)
 	{
@@ -543,35 +591,68 @@ void CShangpinCreatePageUI::HandleSave()
 		params["stock_status"] = "CLOSED";
 	}
 
-	params["open_autostock"] = "0";
-	params["stock_warning"] = "0";
+	params["stock"] = m_dangqiankucun;
 
-	params["unit"] = m_danwei;
+	if (m_status == 0)
+	{
+		params["goods_status"] = "NORMAL";
+	}
+	else
+	{
+		params["goods_status"] = "CLOSED";
+	}
 
-	if (m_is_dabao_fei)
+	params["buying_price"] = m_jinhuojia;
+	
+	//这里目前缺少一个进货价模式
+	
+	//哪里显示
+	if (m_is_shouyinji_show)
 	{
-		params["is_dabao"] = "1";
+		params["is_shouyinji_show"] = "1";
 	}
 	else
 	{
-		params["is_dabao"] = "0";
+		params["is_shouyinji_show"] = "0";
 	}
 
-	params["dabao_money"] = m_dabaofei;
+	if (m_is_waimai_show)
+	{
+		params["is_waimai_show"] = "1";
+	}
+	else
+	{
+		params["is_waimai_show"] = "0";
+	}
 
-	params["barcode"] = m_tiaoma;
-	params["buying_price"] = m_jinhuojia;
+	if (m_is_saomadiancan_show)
+	{
+		params["is_tangshi_show"] = "1";
+		params["is_zhengcan_show"] = "1";
+	}
+	else
+	{
+		params["is_tangshi_show"] = "0";
+		params["is_zhengcan_show"] = "0";
+	}
 
-	if (m_is_chengzhong)
+	if (m_is_dabao_fei)
 	{
-		params["is_weight"] = "1";
+		params["is_dabao"] = "1";
 	}
 	else
 	{
-		params["is_weight"] = "0";
+		params["is_dabao"] = "0";
 	}
 
+	params["dabao_money"] = m_dabaofei;
+
+	params["jiagong_type"] = m_jiagong_type;
+	
+	//这下面是接口要求必传参数
 	params["goods_img"] = "";
+	params["open_autostock"] = "0";
+	params["stock_warning"] = "0";
 
 	std::string response;
 
@@ -625,4 +706,67 @@ void CShangpinCreatePageUI::ShowError(std::wstring msg)
 {
 	CLabelUI* pResult = static_cast<CLabelUI*>(this->FindSubControl(L"shangpin_create_page_save_result"));
 	pResult->SetText(msg.c_str());
+	
+	if (msg == L"")
+	{
+		pResult->SetVisible(false);
+	}
+	else
+	{
+		pResult->SetVisible(true);
+	}
+}
+
+void CShangpinCreatePageUI::ShowSaomaluru()
+{
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
+	CShangpinSaomaluruWnd* pMemoDlg = new CShangpinSaomaluruWnd();
+
+	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();
+
+		UINT ret = pMemoDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			std::string code = pMemoDlg->m_code;
+			std::string name = pMemoDlg->m_name;
+			std::string price = pMemoDlg->m_price;
+			std::string unit = pMemoDlg->m_unit;
+			std::string des = pMemoDlg->m_des;
+
+			//获取到了值,初始化值
+			CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
+			pTiaoma->SetText(CLewaimaiString::UTF8ToUnicode(code).c_str());
+
+			CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
+			pName->SetText(CLewaimaiString::UTF8ToUnicode(name).c_str());
+
+			CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
+			pPrice->SetText(CLewaimaiString::UTF8ToUnicode(price).c_str());
+
+			CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
+			pDanwei->SetText(CLewaimaiString::UTF8ToUnicode(unit).c_str());
+
+			m_is_show_modal_wnd = false;
+			delete pMemoDlg;
+		}
+		else
+		{
+			m_is_show_modal_wnd = false;
+			delete pMemoDlg;
+
+			return;
+		}
+	}
 }

+ 6 - 4
zhipuzi_pos_windows/page/CShangpinCreatePageUI.h

@@ -49,6 +49,7 @@ public:
 
 	void HandleSave();
 
+	void ShowSaomaluru();
 private:
 	void ShowError(std::wstring msg);
 
@@ -81,15 +82,16 @@ private:
 
 	bool m_is_shouyinji_show;
 	bool m_is_waimai_show;
-	bool m_is_saomadiancan_shou;
+	bool m_is_saomadiancan_show;
 	bool m_is_dabao_fei;
 	std::string m_dabaofei;
 
-	//0 方案1 1:方案2 2:方案3
+	//加工类型 1 方案1 2:方案2 3:方案3
 	int m_jiagong_type;
 
+	//临时保存商品名字到ID的映射
+	std::map<std::string, std::string> m_foodtype_id_map;
+
 	//当前控件的实际宽度
 	int m_nPageWidth;
-
-	std::map<std::string, std::string> m_foodtype_id_map;
 };

+ 73 - 0
zhipuzi_pos_windows/page/CShangpinPageUI.cpp

@@ -6,6 +6,7 @@
 #include "../tool/CSqlite3.h"
 
 #include "../wnd/CMainWnd.h"
+#include "../wnd/CShangpinNewTypeWnd.h"
 
 CShangpinPageUI::CShangpinPageUI()
 {
@@ -35,6 +36,8 @@ void CShangpinPageUI::RefreshShow()
 void CShangpinPageUI::InitFoodtypeShow()
 {
 	//初始化商品渲染相关的信息
+	m_foodtype_mutex.lock();
+
 	m_foodtypeLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout")));
 	m_foodtypeLayout->RemoveAll();
 
@@ -70,6 +73,8 @@ void CShangpinPageUI::InitFoodtypeShow()
 		}
 	}
 
+	m_foodtype_mutex.unlock();
+
 	if (m_curFoodtypeOption != NULL)
 	{
 		m_curFoodtypeOption->SetBkColor(0xFF3CB371);
@@ -102,6 +107,8 @@ void CShangpinPageUI::UpdateFoodtypePos()
 
 	int num = 0;
 
+	m_foodtype_mutex.lock();
+
 	CHorizontalLayoutUI* pFenleiLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("shangpin_fenlei_layout")));
 	for (int i = 0; i < nFoodtypeNum; i++)
 	{
@@ -122,6 +129,24 @@ void CShangpinPageUI::UpdateFoodtypePos()
 		num++;
 	}
 
+	CButtonUI* pNewType = static_cast<CButtonUI*>(this->FindSubControl(_T("shangpin_page_add_type_btn")));
+
+	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;
+
+	pNewType->SetFloat(true);
+	pNewType->SetPos(rect);
+
+	num++;
+
+	m_foodtype_mutex.unlock();
+
 	//调整区域高度
 	int lastRow = (num - 1) / nMeihangNum + 1;
 	pFenleiLayout->SetFixedHeight(lastRow * 61 + 19);
@@ -236,8 +261,13 @@ void CShangpinPageUI::HandleClickMsg(TNotifyUI& msg)
 	}
 	else if (name == L"shangpin_page_add_btn")
 	{
+		CShangpinCreatePageUI* page = static_cast<CShangpinCreatePageUI*>(m_pMainWnd->GetPage(CMainWnd::SHANGPIN_CREATE));
 		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_CREATE);
 	}
+	else if (name == L"shangpin_page_add_type_btn")
+	{
+		ShowNewtype();
+	}
 }
 
 //处理option切换事件
@@ -313,6 +343,12 @@ void CShangpinPageUI::ClickFoodAction()
 {
 	//点击普通商品之后的处理逻辑
 	CFood foodinfo = m_cur_click_food_item->GetFoodInfo();
+
+	//点击了这个商品,进入商品修改页面
+	CShangpinUpdatePageUI* page = static_cast<CShangpinUpdatePageUI*>(m_pMainWnd->GetPage(CMainWnd::SHANGPIN_UPDATE));
+	page->SetFoodinfo(foodinfo);
+
+	m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_UPDATE);
 }
 
 //开始搜索某个商品名字
@@ -368,4 +404,41 @@ void CShangpinPageUI::SetPos(RECT rc, bool bNeedInvalidate)
 	UpdateFoodtypePos();
 
 	CContainerUI::SetPos(rc, bNeedInvalidate);
+}
+
+void CShangpinPageUI::ShowNewtype()
+{
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
+	CShangpinNewTypeWnd* pMemoDlg = new CShangpinNewTypeWnd();
+
+	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();
+
+		UINT ret = pMemoDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			
+
+			m_is_show_modal_wnd = false;
+			delete pMemoDlg;
+		}
+		else
+		{
+			m_is_show_modal_wnd = false;
+			delete pMemoDlg;
+
+			return;
+		}
+	}
 }

+ 3 - 0
zhipuzi_pos_windows/page/CShangpinPageUI.h

@@ -64,6 +64,7 @@ public:
 
 	void SetPos(RECT rc, bool bNeedInvalidate = true);
 
+	void ShowNewtype();
 private:
 	CTileLayoutUI* m_foodLayout;
 	CHorizontalLayoutUI* m_foodtypeLayout;
@@ -88,4 +89,6 @@ private:
 
 	//µ±Ç°¿Ø¼þµÄʵ¼Ê¿í¶È
 	int m_nPageWidth;
+
+	std::mutex m_foodtype_mutex;
 };

+ 769 - 0
zhipuzi_pos_windows/page/CShangpinUpdatePageUI.cpp

@@ -0,0 +1,769 @@
+#include "../pch/pch.h"
+#include "CShangpinUpdatePageUI.h"
+
+#include "../control/ControlEx.h"
+
+#include "../tool/CSqlite3.h"
+#include "../tool/CFoodHandle.h"
+#include "../wnd/CMainWnd.h"
+
+#include "../print/CPosPrinter.h"
+
+CShangpinUpdatePageUI::CShangpinUpdatePageUI()
+{
+}
+
+
+CShangpinUpdatePageUI::~CShangpinUpdatePageUI()
+{
+}
+
+//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
+void CShangpinUpdatePageUI::InitShow()
+{
+	//商品名字
+	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
+	pName->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.name).c_str());
+	pName->SetFocus();
+
+	//商品序号
+	CEditUI* pXuhao = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_xuhao_edit"));
+	pXuhao->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.tag).c_str());
+
+	//初始化商品分类
+	CComboUI* com_fenlei = static_cast<CComboUI*>(this->FindSubControl(_T("shangpin_create_page_foodtype")));
+	com_fenlei->RemoveAll();
+
+	CSqlite3 sqlite;
+	std::vector<CFoodType> foodtypes = sqlite.GetFoodtypes();
+
+	int nSelectType = -1;
+	int nCurNum = 0;
+	std::string select_foodtype_name;
+	for (std::vector<CFoodType>::iterator it = foodtypes.begin(); it != foodtypes.end(); it++)
+	{
+		CListLabelElementUI* elem = new CListLabelElementUI();
+
+		elem->SetText(CLewaimaiString::UTF8ToUnicode(it->name).c_str());
+		com_fenlei->Add(elem);
+
+		if (it->id == m_foodinfo.type_id)
+		{
+			nSelectType = nCurNum;
+			select_foodtype_name = it->name;
+		}
+
+		nCurNum++;
+
+		m_foodtype_id_map[it->name] = it->id;
+	}
+
+	com_fenlei->SetInternVisible(true);
+
+	if (nSelectType != -1)
+	{
+		com_fenlei->SelectItem(nSelectType, false, false);
+	}
+
+	com_fenlei->SetText(CLewaimaiString::UTF8ToUnicode(select_foodtype_name).c_str());
+
+	//商品条码
+	CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
+	pXuhao->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.barcode).c_str());
+
+	//商品价格
+	CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
+	pPrice->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.price).c_str());
+
+	//商品单位
+	CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
+	pDanwei->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.unit).c_str());
+
+	//是否称重
+	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_chengzhong"));
+	if (m_foodinfo.is_weight == "1")
+	{
+		pChengzhong->Selected(true, false);
+	}
+	else
+	{
+		pChengzhong->Selected(false, false);
+	}
+
+	//plu编码
+	CEditUI* pPlu = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_plu"));
+	pPlu->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.weight_plu_code).c_str());
+
+	//商品编码
+	CEditUI* pShangpin = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_shangpinbianma"));
+	pShangpin->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.weight_food_code).c_str());
+
+	//库存类型
+	CCheckBoxUI* pKucuntypeOpen = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_kucun_open"));	
+	CCheckBoxUI* pKucuntypeXiajia = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_xiajia"));
+	if (m_foodinfo.stockvalid == "1")
+	{
+		pKucuntypeOpen->Selected(true, false);
+		pKucuntypeXiajia->Selected(false, false);
+	}
+	else
+	{
+		pKucuntypeOpen->Selected(false, false);
+		pKucuntypeXiajia->Selected(true, false);
+	}
+
+	//当前库存
+	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
+	pDangqiankucun->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.stock).c_str());
+
+	//商品状态
+	CCheckBoxUI* pStatusNormal = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
+	CCheckBoxUI* pStatusXiajia = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_xiajia"));
+	if (m_foodinfo.status == "NORMAL")
+	{
+		pStatusNormal->Selected(true, false);
+		pStatusXiajia->Selected(false, false);
+	}
+	else
+	{
+		pStatusNormal->Selected(false, false);
+		pStatusXiajia->Selected(true, false);
+	}
+
+	//进货价
+	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
+	pJinhuojia->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.buying_price).c_str());
+
+	//进货价模式
+	CCheckBoxUI* pJinhuomoshiNormal = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
+	CCheckBoxUI* pJinhuomoshiJiaquan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_jiaquan"));	
+
+	//在哪些地方显示
+	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_shouyinji"));
+	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_waimai"));
+	CCheckBoxUI* pSaomaidancan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_saomadiancan"));
+
+	pShouyinji->Selected(true, false);
+	pWaimai->Selected(true, false);
+	pSaomaidancan->Selected(true, false);
+
+	//是否开启打包费
+	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_is_dabao"));
+	if (m_foodinfo.is_dabao == "1")
+	{
+		pDabao->Selected(true, false);
+	}
+	else
+	{
+		pDabao->Selected(false, false);
+	}
+
+	//打包费
+	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
+	pDaobaofei->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.dabao_money).c_str());
+
+	//商品加工方式
+	CCheckBoxUI* pJiagongfangshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
+	pJiagongfangshi->Selected(true, false);
+}
+
+//处理按钮点击类事件
+void CShangpinUpdatePageUI::HandleClickMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	if (name == L"shangpin_create_page_save_btn")
+	{
+		StartSave();
+	}
+	else if (name == L"shangpin_create_page_return_btn")
+	{
+		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN, false);
+	}
+	else if (name == L"shangpin_create_page_delete_btn")
+	{
+		StartDelete();
+	}
+	else if (name == L"shangpin_create_page_print_btn")
+	{
+		PrintShangpinTiaoma();
+	}
+}
+
+//处理option切换事件
+void CShangpinUpdatePageUI::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")
+	{
+
+	}
+}
+
+//处理下拉框、radio的切换事件
+void CShangpinUpdatePageUI::HandleItemSelectMsg(TNotifyUI& msg)
+{
+
+}
+
+//处理编辑框输入内容改变事件
+void CShangpinUpdatePageUI::HandleTextChangedMsg(TNotifyUI& msg)
+{
+	CDuiString name = msg.pSender->GetName();
+
+	if (name == L"shangpin_create_page_xuhao_edit")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_xuhao_edit")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48))
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (name == L"shangpin_create_page_barcode_edit")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_barcode_edit")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48))
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (name == L"shangpin_create_page_price_edit")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_price_edit")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48) && tmp != 46)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (name == L"shangpin_create_page_buyingprice_edit")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_buyingprice_edit")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48) && tmp != 46)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (name == L"shangpin_create_page_plu")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_plu")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48))
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (name == L"shangpin_create_page_shangpinbianma")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_shangpinbianma")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48))
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (name == L"shangpin_create_page_dabao_money")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_dabao_money")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48) && tmp != 46)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (name == L"shangpin_create_page_kucun_now")
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_kucun_now")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if ((tmp > 57 || tmp < 48))
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+}
+
+//处理扫码枪捕捉到的扫码信息
+void CShangpinUpdatePageUI::HandleTextCapture(std::string content)
+{
+
+}
+
+void CShangpinUpdatePageUI::SetPos(RECT rc, bool bNeedInvalidate)
+{
+	m_nPageWidth = rc.right - rc.left;
+
+	CContainerUI::SetPos(rc, bNeedInvalidate);
+}
+
+void CShangpinUpdatePageUI::StartSave()
+{
+	//把参数一个个读出来
+
+	//商品名字
+	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
+	std::wstring ws_name = pName->GetText();
+	m_name = CLewaimaiString::UnicodeToUTF8(ws_name);
+
+	//商品序号
+	CEditUI* pXuhao = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_xuhao_edit"));
+	std::wstring ws_xuhao = pXuhao->GetText();
+	m_xuhao = CLewaimaiString::UnicodeToUTF8(ws_xuhao);
+
+	//初始化商品分类
+	CComboUI* com_fenlei = static_cast<CComboUI*>(this->FindSubControl(_T("shangpin_create_page_foodtype")));
+	std::wstring ws_type = com_fenlei->GetText();
+	m_fenlei = CLewaimaiString::UnicodeToUTF8(ws_type);
+
+	//商品条码
+	CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
+	std::wstring ws_tiaoma = pTiaoma->GetText();
+	m_tiaoma = CLewaimaiString::UnicodeToUTF8(ws_tiaoma);
+
+	//商品价格
+	CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
+	std::wstring ws_price = pPrice->GetText();
+	m_price = CLewaimaiString::UnicodeToUTF8(ws_price);
+
+	//商品单位
+	CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
+	std::wstring ws_danwei = pDanwei->GetText();
+	m_danwei = CLewaimaiString::UnicodeToUTF8(ws_danwei);
+
+	//是否称重
+	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_chengzhong"));
+	m_is_chengzhong = pChengzhong->IsSelected();
+
+	//plu编码
+	CEditUI* pPlu = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_plu"));
+	std::wstring ws_plu = pPlu->GetText();
+	m_plu = CLewaimaiString::UnicodeToUTF8(ws_plu);
+
+	//商品编码
+	CEditUI* pShangpin = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_shangpinbianma"));
+	std::wstring ws_shangpin = pShangpin->GetText();
+	m_shangpinbianma = CLewaimaiString::UnicodeToUTF8(ws_shangpin);
+
+	//库存类型
+	CCheckBoxUI* pKucuntype = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_kucun_open"));
+	if (pKucuntype->IsSelected())
+	{
+		m_kucuntype = 0;
+	}
+	else
+	{
+		m_kucuntype = 1;
+	}
+
+	//当前库存
+	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
+	std::wstring ws_dangqiankucun = pDangqiankucun->GetText();
+	m_dangqiankucun = CLewaimaiString::UnicodeToUTF8(ws_dangqiankucun);
+
+	//商品状态
+	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
+	if (pStatus->IsSelected())
+	{
+		m_status = 0;
+	}
+	else
+	{
+		m_status = 1;
+	}
+
+	//进货价
+	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
+	std::wstring ws_jinhuojia = pJinhuojia->GetText();
+	m_jinhuojia = CLewaimaiString::UnicodeToUTF8(ws_jinhuojia);
+
+	//进货价模式
+	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
+	if (pJinhuomoshi->IsSelected())
+	{
+		m_jinhuo_type = 0;
+	}
+	else
+	{
+		m_jinhuo_type = 1;
+	}
+
+	//在哪些地方显示
+	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_shouyinji"));
+	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_waimai"));
+	CCheckBoxUI* pSaomaidancan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_saomadiancan"));
+
+	m_is_shouyinji_show = pShouyinji->IsSelected();
+	m_is_waimai_show = pWaimai->IsSelected();
+	m_is_saomadiancan_show = pSaomaidancan->IsSelected();
+
+	//是否开启打包费
+	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_is_dabao"));
+	m_is_dabao_fei = pDabao->IsSelected();
+
+	//打包费
+	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
+	std::wstring ws_dabaofei = pDaobaofei->GetText();
+	m_dabaofei = CLewaimaiString::UnicodeToUTF8(ws_dabaofei);
+
+	//商品加工方式
+	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
+	CCheckBoxUI* pJiagongfangshi_2 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_2"));
+	CCheckBoxUI* pJiagongfangshi_3 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_3"));
+
+	if (pJiagongfangshi_1->IsSelected())
+	{
+		m_jiagong_type = 0;
+	}
+	else if (pJiagongfangshi_2->IsSelected())
+	{
+		m_jiagong_type = 1;
+	}
+	else if (pJiagongfangshi_3->IsSelected())
+	{
+		m_jiagong_type = 2;
+	}
+
+	ShowError(L"正在保存商品...");
+
+	std::thread(&CShangpinUpdatePageUI::HandleSave, this).detach();
+}
+
+void CShangpinUpdatePageUI::HandleSave()
+{
+	std::map<string, string> params;
+
+	params["goods_name"] = m_name;
+	params["goods_tag"] = m_xuhao;
+	params["type_lv1_id"] = m_foodtype_id_map[m_fenlei];
+	params["barcode"] = m_tiaoma;
+	params["goods_price"] = m_price;
+	params["unit"] = m_danwei;
+
+	if (m_is_chengzhong)
+	{
+		params["is_weight"] = "1";
+	}
+	else
+	{
+		params["is_weight"] = "0";
+	}
+
+	params["weight_plu_code"] = m_plu;
+	params["weight_food_code"] = m_shangpinbianma;
+
+	if (m_kucuntype == 0)
+	{
+		params["stock_status"] = "OPEN";
+	}
+	else
+	{
+		params["stock_status"] = "CLOSED";
+	}
+
+	params["stock"] = m_dangqiankucun;	
+
+	if (m_status == 0)
+	{
+		params["goods_status"] = "NORMAL";
+	}
+	else
+	{
+		params["goods_status"] = "CLOSED";
+	}	
+
+	params["buying_price"] = m_jinhuojia;
+
+	if (m_is_shouyinji_show)
+	{
+		params["is_shouyinji_show"] = "1";
+	}
+	else
+	{
+		params["is_shouyinji_show"] = "0";
+	}
+
+	if (m_is_waimai_show)
+	{
+		params["is_waimai_show"] = "1";
+	}
+	else
+	{
+		params["is_waimai_show"] = "0";
+	}
+
+	if (m_is_saomadiancan_show)
+	{
+		params["is_tangshi_show"] = "1";
+		params["is_zhengcan_show"] = "1";
+	}
+	else
+	{
+		params["is_tangshi_show"] = "0";
+		params["is_zhengcan_show"] = "0";
+	}
+
+	if (m_is_dabao_fei)
+	{
+		params["is_dabao"] = "1";
+	}
+	else
+	{
+		params["is_dabao"] = "0";
+	}
+
+	params["dabao_money"] = m_dabaofei;
+
+	params["jiagong_type"] = m_jiagong_type;
+	
+	//这下面是接口要求必传参数
+	params["goods_img"] = "";
+	params["open_autostock"] = "0";
+	params["stock_warning"] = "0";
+
+	std::string response;
+
+	std::string url = "/goods/updategoods";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	if (ret == false)
+	{
+		ShowError(L"请求服务器失败,请检查网络设置!");
+
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		ShowError(L"服务器错误");
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		ShowError(L"服务器错误");
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		std::string v_errmsg = document["errmsg"].GetString();
+
+		ShowError(CLewaimaiString::UTF8ToUnicode(v_errmsg));
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+
+	std::string id = data["goods_id"].GetString();
+
+	//走到这里说明商品保存成功了,接着把商品的数据更新到数据库
+	CFoodHandle::GetInstance()->UpdateOneFood(id);
+
+	//然后返回到商品页面
+	m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN);
+}
+
+void CShangpinUpdatePageUI::StartDelete()
+{
+	std::thread(&CShangpinUpdatePageUI::HandleDelete, this).detach();
+}
+
+void CShangpinUpdatePageUI::HandleDelete()
+{
+	std::map<string, string> params;
+	params["goods_id"] = m_foodinfo.id;
+
+	std::string response;
+
+	std::string url = "/goods/deletegoods";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	if (ret == false)
+	{
+		ShowError(L"请求服务器失败,请检查网络设置!");
+
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		ShowError(L"服务器错误");
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		ShowError(L"服务器错误");
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		std::string v_errmsg = document["errmsg"].GetString();
+
+		ShowError(CLewaimaiString::UTF8ToUnicode(v_errmsg));
+		return;
+	}
+
+	//本地数据库删除这个商品
+	CFoodHandle::GetInstance()->DeleteOndeFood(m_foodinfo.id);
+
+	//然后返回到商品页面
+	m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN);
+}
+
+void CShangpinUpdatePageUI::ShowError(std::wstring msg)
+{
+	CLabelUI* pResult = static_cast<CLabelUI*>(this->FindSubControl(L"shangpin_create_page_save_result"));
+	pResult->SetText(msg.c_str());
+}
+
+void CShangpinUpdatePageUI::PrintShangpinTiaoma()
+{
+	CPosPrinter printer;
+	printer.PrintShangpinTiaoma(m_foodinfo);
+}

+ 109 - 0
zhipuzi_pos_windows/page/CShangpinUpdatePageUI.h

@@ -0,0 +1,109 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CBasePageUI.h"
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodtype.h"
+#include "../zhipuzi/CFoodpackage.h"
+
+#include "../control/CShangpinFoodItemUI.h"
+#include "../zhipuzi/CDiandanOrder.h"
+
+#include "../wnd/CModalWnd.h"
+
+class CShangpinUpdatePageUI : public CBasePageUI
+{
+public:
+	CShangpinUpdatePageUI();
+	~CShangpinUpdatePageUI();
+
+	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
+	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 SetFoodinfo(CFood foodinfo)
+	{
+		m_foodinfo = foodinfo;
+	}
+
+	void SetPos(RECT rc, bool bNeedInvalidate = true);
+
+	//开始处理保存商品的逻辑
+	void StartSave();
+
+	void HandleSave();
+
+	void StartDelete();
+
+	void HandleDelete();
+
+	void PrintShangpinTiaoma();
+
+private:
+	void ShowError(std::wstring msg);
+
+private:
+	//模态对话框有关的
+	bool m_is_show_modal_wnd = false;
+	CModalWnd* m_curModalWnd;
+
+	CFood m_foodinfo;
+
+	//商品字段
+	std::string m_name;
+	std::string m_xuhao;
+	std::string m_fenlei;
+	std::string m_tiaoma;
+	std::string m_price;
+	std::string m_danwei;
+	bool m_is_chengzhong;
+	std::string m_plu;
+	std::string m_shangpinbianma;
+
+	//0 下单扣减库存 1 无限库存
+	int m_kucuntype;
+	std::string m_dangqiankucun;
+
+	//0正常 1下架
+	int m_status;
+	std::string m_jinhuojia;
+
+	//0 当前成本价 1:加权平均
+	int m_jinhuo_type;
+
+	bool m_is_shouyinji_show;
+	bool m_is_waimai_show;
+	bool m_is_saomadiancan_show;
+	bool m_is_dabao_fei;
+	std::string m_dabaofei;
+
+	//加工类型 0 方案1 1:方案2 2:方案3
+	int m_jiagong_type;
+
+	//临时保存商品名字到ID的映射
+	std::map<std::string, std::string> m_foodtype_id_map;
+
+	//当前控件的实际宽度
+	int m_nPageWidth;
+};

+ 3 - 1
zhipuzi_pos_windows/page/CWaimaiOrderListPageUI.cpp

@@ -144,7 +144,9 @@ void CWaimaiOrderListPageUI::HandleClickMsg(TNotifyUI& msg)
 		std::string waimai_order_id = item->getOrderID();
 		std::string waimai_order_no = item->getOrderNo();
 
-		m_pMainWnd->SetInfopageWaimaiorderParam(waimai_order_id, waimai_order_no);
+		CWaimaiOrderInfoPageUI* page = static_cast<CWaimaiOrderInfoPageUI*>(m_pMainWnd->GetPage(CMainWnd::WAIMAIINFO));
+		page->m_order_id = waimai_order_id;
+		page->m_order_no = waimai_order_no;
 
 		m_pMainWnd->SwitchPage(CMainWnd::WAIMAIINFO);
 	}

+ 9 - 0
zhipuzi_pos_windows/print/CPosPrinter.cpp

@@ -150,6 +150,15 @@ void CPosPrinter::PrintHuiyuanchongzhiOrder(CHuiyuanchongzhiOrder& order)
 	CPosPrinterQueue::GetInstance()->AddShouyinPrinter(data);
 }
 
+void CPosPrinter::PrintShangpinTiaoma(CFood foodinfo)
+{
+	CPosPrinterData printData;
+
+	std::string data = printData.PrintShangpintiaomaBiaoqian(foodinfo);
+
+	CPosPrinterQueue::GetInstance()->AddBiaoqianPrinter(data);
+}
+
 //´ò¿ªÇ®Ïä
 void CPosPrinter::OpenQianxiang()
 {

+ 3 - 0
zhipuzi_pos_windows/print/CPosPrinter.h

@@ -30,6 +30,9 @@ public:
 	//打印会员充值订单
 	void PrintHuiyuanchongzhiOrder(CHuiyuanchongzhiOrder& order);
 
+	//打印某个商品的条码(用于商品管理里面)
+	void PrintShangpinTiaoma(CFood foodinfo);
+
 	//打开钱箱
 	void OpenQianxiang();
 

+ 124 - 0
zhipuzi_pos_windows/print/CPosPrinterData.cpp

@@ -2155,6 +2155,114 @@ std::string CPosPrinterData::PrintHuiyuanchongzhiOrder(CHuiyuanchongzhiOrder& or
 	return m_print_content;
 }
 
+std::string CPosPrinterData::PrintShangpintiaomaBiaoqian(CFood& foodinfo)
+{
+	std::string printer_usb = CSetting::GetInstance()->GetParam("setting_biaoqian_printer_usb");
+	std::wstring ws_printer_usb = CLewaimaiString::UTF8ToUnicode(printer_usb);
+
+	//读取标签纸的规格和方向
+	int biaoqian_width, biaoqian_height;
+	std::string printer_guige = CSetting::GetInstance()->GetParam("setting_biaoqian_printer_guige");
+	if (printer_guige == "40*30mm")
+	{
+		biaoqian_width = 40;
+		biaoqian_height = 30;
+	}
+	else  if (printer_guige == "35*25mm")
+	{
+		biaoqian_width = 35;
+		biaoqian_height = 25;
+	}
+	else  if (printer_guige == "30*25mm")
+	{
+		biaoqian_width = 30;
+		biaoqian_height = 25;
+	}
+	else  if (printer_guige == "30*20mm")
+	{
+		biaoqian_width = 30;
+		biaoqian_height = 20;
+	}
+	else
+	{
+		biaoqian_width = 40;
+		biaoqian_height = 30;
+	}
+
+	int nDIRECTION;
+	std::string printer_fangxiang = CSetting::GetInstance()->GetParam("setting_biaoqian_printer_fangxiang");
+	if (printer_fangxiang == "1")
+	{
+		nDIRECTION = 1;
+	}
+	else
+	{
+		nDIRECTION = 0;
+	}
+
+	//初始化标签打印机
+	BIAOQIAN_Reset(biaoqian_width, biaoqian_height, nDIRECTION);
+
+	std::string food_name = foodinfo.name;
+	std::string food_price = foodinfo.price;
+	std::string unit = foodinfo.unit;
+
+	std::string textData = "";
+
+	//每行最多显示12个汉字,这里要计算一下换行(要先转成ANSI格式)
+	std::string handle_food_name = CLewaimaiString::UTF8ToANSI(food_name);
+	std::vector<std::string> foodNameVector = HandleBiaoqianFoodname(handle_food_name, biaoqian_width);
+
+	int nRow = 0;
+
+	//考虑是否用大号字体
+	bool is_big_name = false;
+
+	for (std::vector<std::string>::iterator it = foodNameVector.begin(); it != foodNameVector.end(); it++)
+	{
+		LOG_INFO("nRow:" << nRow << ", 准备打印商品名字:" << (*it).c_str());
+
+		if (is_big_name)
+		{
+			textData += BIAOQIAN_TEXTGet(*it, 12, 12 + 60 * nRow, 1, 2);
+		}
+		else
+		{
+			textData += BIAOQIAN_TEXTGet(*it, 12, 12 + 30 * nRow, 1, 1);
+		}
+
+		nRow++;
+	}
+
+	BIAOQIAN_BARCODEOUT(foodinfo.barcode, 12, 22 + 30 * nRow);
+
+	int nPriceY;
+	if (biaoqian_height == 30)
+	{
+		nPriceY = 180;
+	}
+	else if (biaoqian_height == 25)
+	{
+		nPriceY = 140;
+	}
+	else if (biaoqian_height == 20)
+	{
+		nPriceY = 100;
+	}
+
+	//打印价格
+	std::string priceInfo = CLewaimaiString::UTF8ToANSI(food_price) + "元";
+	textData += BIAOQIAN_TEXTGet(priceInfo, 12, nPriceY, 1, 1);
+
+	WriteData(textData);
+
+	BIAOQIAN_PRINT();
+
+	BIAOQIAN_CLS();
+
+	return m_print_content;
+}
+
 std::string CPosPrinterData::GetQianxiangCommand()
 {
 	POS_QIANXIANG();
@@ -2592,6 +2700,22 @@ void CPosPrinterData::BIAOQIAN_TEXTOUT(std::string content, int x, int y, int x_
     WriteData(text);
 }
 
+void CPosPrinterData::BIAOQIAN_BARCODEOUT(std::string content, int x, int y)
+{
+	char endTag[3] = { 0x0d, 0x0a, 0x00 };
+
+	string text = "BARCODE ";
+
+	text += to_string(x) + "," + to_string(y) + ",";
+	text += "\"128\",";
+	text += to_string(48) + ",";
+	text += to_string(1) + "," + to_string(0) + "," + to_string(2) + "," + to_string(2) + ",";
+	text += "\"" + content + "\"";
+	text += endTag;
+
+	WriteData(text);
+}
+
 std::string CPosPrinterData::BIAOQIAN_TEXTGet(std::string content, int x, int y, int x_multiplication, int y_multiplication)
 {
 	char endTag[3] = { 0x0d, 0x0a, 0x00 };

+ 3 - 0
zhipuzi_pos_windows/print/CPosPrinterData.h

@@ -32,6 +32,8 @@ public:
 
 	std::string PrintHuiyuanchongzhiOrder(CHuiyuanchongzhiOrder& order);
 
+	std::string PrintShangpintiaomaBiaoqian(CFood& foodinfo);
+
 	std::string GetQianxiangCommand();
 
 private:
@@ -61,6 +63,7 @@ private:
 	void BIAOQIAN_Reset(int nWidth, int nHeight, int nDirection);
 	void BIAOQIAN_FORMFEED();
 	void BIAOQIAN_TEXTOUT(std::string content, int x, int y, int x_multiplication, int y_multiplication);
+	void BIAOQIAN_BARCODEOUT(std::string content, int x, int y);
 	std::string BIAOQIAN_TEXTGet(std::string content, int x, int y, int x_multiplication, int y_multiplication);
 	void BIAOQIAN_PRINT();
 	void BIAOQIAN_CLS();

+ 15 - 1
zhipuzi_pos_windows/tool/CFoodHandle.cpp

@@ -85,7 +85,7 @@ bool CFoodHandle::UpdateOneFood(std::string food_id)
 	CSqlite3 sqlite;
 
 	//先处理商品的
-	rapidjson::Value& v_goods_rows = data["goods_rows"];
+	rapidjson::Value& v_goods_rows = data["goods_row"];
 	ret = sqlite.UpdateOneFood(v_goods_rows);
 	if (!ret)
 	{
@@ -93,4 +93,18 @@ bool CFoodHandle::UpdateOneFood(std::string food_id)
 	}
 
 	return true;
+}
+
+bool CFoodHandle::DeleteOndeFood(std::string food_id)
+{
+	CSqlite3 sqlite;
+
+	//先处理商品的
+	bool ret = sqlite.DeleteOneFood(food_id);
+	if (!ret)
+	{
+		return false;
+	}
+
+	return true;
 }

+ 5 - 0
zhipuzi_pos_windows/tool/CFoodHandle.h

@@ -10,10 +10,15 @@ public:
 		return &instance;
 	}
 
+	//本地数据库全量同步云端商品
 	bool InitAllFood();
 
+	//本地数据库同步云端的某一个商品
 	bool UpdateOneFood(std::string food_id);
 
+	//本地数据库删除某一个删除
+	bool DeleteOndeFood(std::string food_id);
+
 private:
 	CFoodHandle();	
 };

+ 19 - 2
zhipuzi_pos_windows/tool/CSqlite3.cpp

@@ -971,8 +971,12 @@ bool CSqlite3::UpdateOneFood(rapidjson::Value& foodrows)
 	this->ExeSQl("begin;");
 
 	rapidjson::Value& foodinfo = foodrows;
-
 	std::string id = foodinfo["goods_id"].GetString();
+
+	//不管当前有没有这个商品,执行一下删除
+	std::string sql_delete = "delete from pos_food where id = '" + id + "';";
+	this->ExeSQl(sql_delete);
+	
 	std::string shop_id = foodinfo["shop_id"].GetString();
 	std::string name = foodinfo["goods_name"].GetString();
 	std::string price = foodinfo["goods_price"].GetString();
@@ -1002,7 +1006,7 @@ bool CSqlite3::UpdateOneFood(rapidjson::Value& foodrows)
 	std::string buying_price = foodinfo["buying_price"].GetString();
 	std::string stock = to_string(foodinfo["stock"].GetDouble());
 	std::string stockvalid = "1";
-	std::string stock_warning = foodinfo["stock_warning"].GetString();
+	std::string stock_warning = to_string(foodinfo["stock_warning"].GetDouble());
 	std::string is_shouyinji_show = foodinfo["is_shouyinji_show"].GetString();
 	std::string expiration_date = foodinfo["expiration_date"].GetString();
 	std::string is_weight = foodinfo["is_weight"].GetString();
@@ -1046,6 +1050,19 @@ bool CSqlite3::UpdateOneFood(rapidjson::Value& foodrows)
 	return true;
 }
 
+bool CSqlite3::DeleteOneFood(std::string food_id)
+{
+	this->ExeSQl("begin;");
+
+	//不管当前有没有这个商品,执行一下删除
+	std::string sql_delete = "delete from pos_food where id = '" + food_id + "';";
+	this->ExeSQl(sql_delete);
+
+	this->ExeSQl("commit;");
+
+	return true;
+}
+
 bool CSqlite3::ExeSQl(std::string sql)
 {
 	char *zErrMsg = 0;

+ 1 - 0
zhipuzi_pos_windows/tool/CSqlite3.h

@@ -35,6 +35,7 @@ public:
 	bool InitFoodpackageData(rapidjson::Value& foodpackagerows);
 
 	bool UpdateOneFood(rapidjson::Value& foodrows);
+	bool DeleteOneFood(std::string food_id);
 
 	//»ñÈ¡ÌײÍÉÌÆ·µÄÊýÁ¿
 	int GetFoodpackageNum();

+ 10 - 24
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -128,7 +128,7 @@ void CMainWnd::UpdateFoodImage()
 	}
 }
 
-void CMainWnd::SwitchPage(MainPageName name)
+void CMainWnd::SwitchPage(MainPageName name, bool is_init_show)
 {
 	if (m_curPageName == name)
 	{
@@ -151,20 +151,10 @@ void CMainWnd::SwitchPage(MainPageName name)
 	m_curPageName = name;
 	m_curPageUI = pChildContainer;
 
-	//对一些参数进行初始化
-	if (name == WAIMAIINFO)
+	if (is_init_show)
 	{
-		CWaimaiOrderInfoPageUI* pInfoPage = static_cast<CWaimaiOrderInfoPageUI*>(pChildContainer);
-		pInfoPage->m_order_id = m_infopage_waimaiorder_id;
-		pInfoPage->m_order_no = m_infopage_waimaiorder_no;
+		pChildContainer->InitShow();
 	}
-	else if (name == DIANNEIINFO)
-	{
-		CDianneiOrderInfoPageUI* pInfoPage = static_cast<CDianneiOrderInfoPageUI*>(pChildContainer);
-		pInfoPage->m_order_id = m_infopage_dianneiorder_id;
-	}
-
-	pChildContainer->InitShow();
 }
 
 LRESULT CMainWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
@@ -929,17 +919,6 @@ void CMainWnd::LoginOut(int mode)
     Close();
 }
 
-void CMainWnd::SetInfopageWaimaiorderParam(std::string order_id, std::string order_no)
-{
-	m_infopage_waimaiorder_id = order_id;
-	m_infopage_waimaiorder_no = order_no;
-}
-
-void CMainWnd::SetInfopageDianneiorderParam(std::string order_id)
-{
-	m_infopage_dianneiorder_id = order_id;
-}
-
 void CMainWnd::ShowToast(std::wstring toast_value)
 {
 	CToastWnd* pYouhuiDlg = new CToastWnd();
@@ -1371,6 +1350,13 @@ void CMainWnd::CreatePages()
 	{
 		CDialogBuilder builder;
 		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("shangpin_update_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[SHANGPIN_UPDATE] = pChildContainer;
+	}
+
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
 		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("zhengcan_page.xml"), (UINT)0, &cb, &m_pm));
 		m_pages[ZHENGCAN] = pChildContainer;
 	}

+ 13 - 13
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -27,6 +27,7 @@ public:
 		DIANNEIINFO, //店内订单详情
 		SHANGPIN, //商品管理
 		SHANGPIN_CREATE, //新建商品
+		SHANGPIN_UPDATE, //修改商品
 		ZHENGCAN, //正餐收银
 		SAOMASHOUYIN, //扫码收银
 		CAIGOU, //采购
@@ -51,7 +52,7 @@ public:
 	//退出登陆,或者直接关闭程序,窗口销毁的时候使用
 	void End();
 	
-	void SwitchPage(MainPageName name);
+	void SwitchPage(MainPageName name, bool is_init_show = true);
 
     void Notify(TNotifyUI& msg);
 
@@ -102,10 +103,6 @@ public:
 	//退出登陆
 	void LoginOut(int mode);
 
-	void SetInfopageWaimaiorderParam(std::string order_id, std::string order_no);
-
-	void SetInfopageDianneiorderParam(std::string order_id);
-
 	//展示toast
 	void ShowToast(std::wstring toast_value);
 
@@ -115,6 +112,16 @@ public:
 	//通过页面名字,切换页面,可以给更多页面调用
 	void SwitchPageByName(std::wstring name);
 
+	CBasePageUI* GetPage(int pageName)
+	{
+		if (m_pages.find(pageName) == m_pages.end())
+		{
+			return NULL;
+		}
+
+		return m_pages[pageName];
+	}
+
 private:
 	void UpdateFoodImage();
 
@@ -153,14 +160,6 @@ private:
 	//当前页面指针
 	CBasePageUI* m_curPageUI = NULL;
 
-	//这2个保存在这里,用于进去外卖订单详情之前设置,进入订单详情之后获取订单信息
-	std::string m_infopage_waimaiorder_id;
-	std::string m_infopage_waimaiorder_no;
-
-	//这2个保存在这里,用于进去店内订单详情之前设置,进入订单详情之后获取订单信息
-	std::string m_infopage_dianneiorder_id;
-	std::string m_infopage_dianneiorder_no;
-
 	//处理左侧tab高亮相关的
 	std::wstring m_curOptionName;
 	COptionUI* m_curOption;
@@ -173,5 +172,6 @@ private:
 	//表示下一个抓取字符是否大写字母
 	bool m_is_next_daxie;
 
+	//当前所有提前创建的page
 	std::map<int, CBasePageUI*> m_pages;
 };

+ 285 - 0
zhipuzi_pos_windows/wnd/CShangpinNewTypeWnd.cpp

@@ -0,0 +1,285 @@
+#include "../pch/pch.h"
+#include "CShangpinNewTypeWnd.h"
+
+LRESULT CShangpinNewTypeWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	return 0;
+}
+
+LRESULT CShangpinNewTypeWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	POINT pt;
+	pt.x = GET_X_LPARAM(lParam);
+	pt.y = GET_Y_LPARAM(lParam);
+	::ScreenToClient(*this, &pt);
+
+	RECT rcClient;
+	::GetClientRect(*this, &rcClient);
+
+	RECT rcCaption = m_pm.GetCaptionRect();
+	if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
+		&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
+	{
+		CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
+		if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
+		{
+			return HTCAPTION;
+		}
+	}
+
+	return HTCLIENT;
+}
+
+LRESULT CShangpinNewTypeWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	SIZE szRoundCorner = m_pm.GetRoundCorner();
+	if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
+	{
+		CDuiRect rcWnd;
+		::GetWindowRect(*this, &rcWnd);
+		rcWnd.Offset(-rcWnd.left, -rcWnd.top);
+		rcWnd.right++;
+		rcWnd.bottom++;
+		HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
+		::SetWindowRgn(*this, hRgn, TRUE);
+		::DeleteObject(hRgn);
+	}
+
+	bHandled = FALSE;
+	return 0;
+}
+
+LRESULT CShangpinNewTypeWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lRes = 0;
+	BOOL bHandled = TRUE;
+	switch (uMsg)
+	{
+	case WM_CREATE:
+		lRes = OnCreate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCACTIVATE:
+		lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCCALCSIZE:
+		lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCPAINT:
+		lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCHITTEST:
+		lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_SIZE:
+		lRes = OnSize(uMsg, wParam, lParam, bHandled);
+		break;
+	default:
+		bHandled = FALSE;
+	}
+	if (bHandled)
+	{
+		return lRes;
+	}
+	if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
+	{
+		return lRes;
+	}
+	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
+}
+
+LRESULT CShangpinNewTypeWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
+{
+	if (uMsg == WM_KEYDOWN)
+	{
+		if (wParam == VK_RETURN)
+		{
+			if (m_status == 0)
+			{
+				StartSave();
+			}
+
+			return true;
+		}
+		else if (wParam == VK_ESCAPE)
+		{
+			Close(IDCANCEL);
+
+			return true;
+		}
+	}
+	else if (uMsg == WM_MEMBER_CHECK_SUCCESS)
+	{
+		m_status = 2;
+
+		//验证成功了
+		Close(IDOK);
+
+		return true;
+	}
+	else if (uMsg == WM_MEMBER_CHECK_FAIL)
+	{
+		m_status = 2;
+
+		//验证失败了
+		CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(_T("errinfo")));
+		pErrorInfo->SetText(m_errorInfo.c_str());
+		pErrorInfo->SetVisible(true);
+
+		return true;
+	}
+
+	return false;
+}
+
+LRESULT CShangpinNewTypeWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+	styleValue &= ~WS_CAPTION;
+	::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+	// 把自己的窗口句柄与窗口绘制管理器挂接在一起
+	m_pm.Init(m_hWnd);
+
+	m_pm.AddPreMessageFilter(this);
+
+	CDialogBuilder builder;
+
+	CControlUI* pRoot = builder.Create(_T("shangpin_newtype_wnd.xml"), (UINT)0, NULL, &m_pm);
+	ASSERT(pRoot && "Failed to parse XML");
+
+	// 把这些控件绘制到本窗口上
+	m_pm.AttachDialog(pRoot);
+
+	// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
+	m_pm.AddNotifier(this);
+
+	Init();
+
+	return 0;
+}
+
+void CShangpinNewTypeWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("closebtn"))
+		{
+			Close(IDCANCEL);
+			return;
+		}
+		else if (senderName == L"fenlei_create_page_save_btn")
+		{
+			StartSave();
+		}
+	}
+	else if (msg.sType == _T("textchanged"))
+	{
+		//只能输入数字,其他的全部删除
+		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("fenlei_create_page_xuhao_edit")));
+		if (!m_pEdit->GetText().IsEmpty())
+		{
+			wstring ws_Value = m_pEdit->GetText();
+			string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+			{
+				unsigned char tmp = strValue.at(nIndex);
+				if (tmp > 57 || tmp < 48)
+				{
+					//ASCII码不是数字的都过滤掉
+					strValue = strValue.substr(0, nIndex);
+
+					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+					break;
+				}
+			}
+		}
+	}
+	else if (msg.sType == L"windowinit")
+	{
+		m_pm.SetNextTabControl(false);
+
+		CEditUI* pFukuanEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("fenlei_create_page_name_edit")));
+		pFukuanEdit->SetFocus();
+	}
+}
+
+void CShangpinNewTypeWnd::Init()
+{
+
+}
+
+void CShangpinNewTypeWnd::SetTitle(std::wstring title)
+{
+	CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("memo_dlg_title")));
+	pLabel->SetText(title.c_str());
+}
+
+void CShangpinNewTypeWnd::StartSave()
+{
+	m_status = 1;
+
+	//开始处理
+	std::thread(&CShangpinNewTypeWnd::HandleSave, this).detach();
+}
+
+void CShangpinNewTypeWnd::HandleSave()
+{
+	std::map<string, string> params;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::GetInstance()->Request("/goods/newtype", params, response);
+	if (!ret)
+	{
+		m_errorInfo = _T("网络请求出错");
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_errorInfo = _T("服务器返回数据格式错误");
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+
+		return;
+	}
+	else
+	{
+		if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+		{
+			m_errorInfo = _T("服务器返回数据格式错误");
+			PostMessage(WM_MEMBER_CHECK_FAIL);
+
+			return;
+		}
+
+		rapidjson::Value& v_errcode = document["errcode"];
+		int errcode = v_errcode.GetInt();
+		if (errcode != 0)
+		{
+			std::string errmsg = CLewaimaiString::UnicodeToUTF8(L"权益卡扫码失败:") + string(document["errmsg"].GetString());
+			m_errorInfo = CLewaimaiString::UTF8ToUnicode(errmsg);
+			PostMessage(WM_MEMBER_CHECK_FAIL);
+
+			return;
+		}
+
+		rapidjson::Value& data = document["data"];
+
+		PostMessage(WM_MEMBER_CHECK_SUCCESS);
+	}
+}
+
+//处理键盘捕捉结果
+void CShangpinNewTypeWnd::HandleTextCapture(std::string content)
+{
+
+}

+ 75 - 0
zhipuzi_pos_windows/wnd/CShangpinNewTypeWnd.h

@@ -0,0 +1,75 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CMainWnd.h"
+#include "CModalWnd.h"
+
+class CShangpinNewTypeWnd : public CModalWnd
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIMemoWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+
+		//delete this;
+	};
+
+	void Init();
+
+	void SetTitle(std::wstring title);
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		if (::IsIconic(*this))
+		{
+			bHandled = FALSE;
+		}
+		return (wParam == 0) ? TRUE : FALSE;
+	}
+
+	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
+
+	void StartSave();
+
+	void HandleSave();
+
+	//处理键盘捕捉结果
+	void HandleTextCapture(std::string content);
+
+public:
+	CPaintManagerUI m_pm;
+
+	std::wstring m_errorInfo;
+
+	//是否正在请求中
+	int m_status = 0; //0 未开始请求 1 请求中 2请求有结果了
+};
+

+ 268 - 0
zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.cpp

@@ -0,0 +1,268 @@
+#include "../pch/pch.h"
+#include "CShangpinSaomaluruWnd.h"
+
+LRESULT CShangpinSaomaluruWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	return 0;
+}
+
+LRESULT CShangpinSaomaluruWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	POINT pt;
+	pt.x = GET_X_LPARAM(lParam);
+	pt.y = GET_Y_LPARAM(lParam);
+	::ScreenToClient(*this, &pt);
+
+	RECT rcClient;
+	::GetClientRect(*this, &rcClient);
+
+	RECT rcCaption = m_pm.GetCaptionRect();
+	if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
+		&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
+	{
+		CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
+		if (pControl && _tcscmp(pControl->GetClass(), DUI_CTR_BUTTON) != 0)
+		{
+			return HTCAPTION;
+		}
+	}
+
+	return HTCLIENT;
+}
+
+LRESULT CShangpinSaomaluruWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	SIZE szRoundCorner = m_pm.GetRoundCorner();
+	if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
+	{
+		CDuiRect rcWnd;
+		::GetWindowRect(*this, &rcWnd);
+		rcWnd.Offset(-rcWnd.left, -rcWnd.top);
+		rcWnd.right++;
+		rcWnd.bottom++;
+		HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
+		::SetWindowRgn(*this, hRgn, TRUE);
+		::DeleteObject(hRgn);
+	}
+
+	bHandled = FALSE;
+	return 0;
+}
+
+LRESULT CShangpinSaomaluruWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lRes = 0;
+	BOOL bHandled = TRUE;
+	switch (uMsg)
+	{
+	case WM_CREATE:
+		lRes = OnCreate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCACTIVATE:
+		lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCCALCSIZE:
+		lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCPAINT:
+		lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCHITTEST:
+		lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_SIZE:
+		lRes = OnSize(uMsg, wParam, lParam, bHandled);
+		break;
+	default:
+		bHandled = FALSE;
+	}
+	if (bHandled)
+	{
+		return lRes;
+	}
+	if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
+	{
+		return lRes;
+	}
+	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
+}
+
+LRESULT CShangpinSaomaluruWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
+{
+	if (uMsg == WM_KEYDOWN)
+	{
+		if (wParam == VK_RETURN)
+		{
+			return true;
+		}
+		else if (wParam == VK_ESCAPE)
+		{
+			if (m_status != 1)
+			{
+				Close(IDCANCEL);
+			}
+
+			return true;
+		}
+	}
+	else if (uMsg == WM_MEMBER_CHECK_SUCCESS)
+	{
+		m_status = 2;
+
+		//验证成功了
+		Close(IDOK);
+
+		return true;
+	}
+	else if (uMsg == WM_MEMBER_CHECK_FAIL)
+	{
+		m_status = 2;
+
+		//验证失败了
+		CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(_T("errinfo")));
+		pErrorInfo->SetText(m_errorInfo.c_str());
+		pErrorInfo->SetVisible(true);
+
+		return true;
+	}
+
+	return false;
+}
+
+LRESULT CShangpinSaomaluruWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+	styleValue &= ~WS_CAPTION;
+	::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+	// 把自己的窗口句柄与窗口绘制管理器挂接在一起
+	m_pm.Init(m_hWnd);
+
+	m_pm.AddPreMessageFilter(this);
+
+	CDialogBuilder builder;
+
+	CControlUI* pRoot = builder.Create(_T("shangpin_saomaluru_wnd.xml"), (UINT)0, NULL, &m_pm);
+	ASSERT(pRoot && "Failed to parse XML");
+
+	// 把这些控件绘制到本窗口上
+	m_pm.AttachDialog(pRoot);
+
+	// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
+	m_pm.AddNotifier(this);
+
+	Init();
+
+	return 0;
+}
+
+void CShangpinSaomaluruWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("closebtn"))
+		{
+			if (m_status != 1)
+			{
+				Close(IDCANCEL);
+			}
+			
+			return;
+		}
+	}
+}
+
+void CShangpinSaomaluruWnd::Init()
+{
+
+}
+
+void CShangpinSaomaluruWnd::SetTitle(std::wstring title)
+{
+	CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("memo_dlg_title")));
+	pLabel->SetText(title.c_str());
+}
+
+void CShangpinSaomaluruWnd::StartYanzheng()
+{
+	if (m_code.length() == 0)
+	{
+		return;
+	}
+
+	//开始处理
+	std::thread(&CShangpinSaomaluruWnd::ConfirmMember, this).detach();
+}
+
+void CShangpinSaomaluruWnd::ConfirmMember()
+{
+	m_status = 1;
+
+	std::map<string, string> params;
+	params["barcode"] = m_code;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::GetInstance()->Request("/goods/getinfobythirdbarcode", params, response);
+	if (!ret)
+	{
+		m_errorInfo = _T("网络请求出错");
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_errorInfo = _T("服务器返回数据格式错误");
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+
+		return;
+	}
+	else
+	{
+		if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+		{
+			m_errorInfo = _T("服务器返回数据格式错误");
+			PostMessage(WM_MEMBER_CHECK_FAIL);
+
+			return;
+		}
+
+		rapidjson::Value& v_errcode = document["errcode"];
+		int errcode = v_errcode.GetInt();
+		if (errcode != 0)
+		{
+			std::string errmsg = CLewaimaiString::UnicodeToUTF8(L"扫码失败:") + string(document["errmsg"].GetString());
+			m_errorInfo = CLewaimaiString::UTF8ToUnicode(errmsg);
+			PostMessage(WM_MEMBER_CHECK_FAIL);
+
+			return;
+		}
+
+		rapidjson::Value& data = document["data"];
+
+		m_code = data["code"].GetString();
+		m_name = data["name"].GetString();
+		m_price = data["price"].GetString();
+		m_unit = data["unit"].GetString();
+		m_des = data["des"].GetString();
+
+		PostMessage(WM_MEMBER_CHECK_SUCCESS);
+	}
+}
+
+//处理键盘捕捉结果
+void CShangpinSaomaluruWnd::HandleTextCapture(std::string content)
+{
+	m_code = content;
+
+	if (m_status == 0)
+	{
+		StartYanzheng();
+	}
+}

+ 81 - 0
zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.h

@@ -0,0 +1,81 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CMainWnd.h"
+#include "CModalWnd.h"
+
+class CShangpinSaomaluruWnd : public CModalWnd
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIMemoWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		//WindowImplBase::OnFinalMessage(hWnd);
+		m_pm.RemovePreMessageFilter(this);
+
+		//delete this;
+	};
+
+	void Init();
+
+	void SetTitle(std::wstring title);
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		if (::IsIconic(*this))
+		{
+			bHandled = FALSE;
+		}
+		return (wParam == 0) ? TRUE : FALSE;
+	}
+
+	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
+
+	void StartYanzheng();
+
+	void ConfirmMember();
+
+	//处理键盘捕捉结果
+	void HandleTextCapture(std::string content);
+
+public:
+	CPaintManagerUI m_pm;
+
+	std::string m_code;
+
+	std::wstring m_errorInfo;
+
+	//是否正在请求中
+	int m_status = 0; //0 未开始请求 1 请求中 2请求有结果了
+
+	std::string m_name;
+	std::string m_price;
+	std::string m_unit;
+	std::string m_des;
+};

+ 6 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj

@@ -227,6 +227,9 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemGroup>
+    <ClInclude Include="wnd\CShangpinSaomaluruWnd.h" />
+    <ClInclude Include="wnd\CShangpinNewTypeWnd.h" />
+    <ClInclude Include="page\CShangpinUpdatePageUI.h" />
     <ClInclude Include="tool\CFoodHandle.h" />
     <ClInclude Include="page\CShangpinCreatePageUI.h" />
     <ClInclude Include="page\CSaomashouyinPageUI.h" />
@@ -321,6 +324,9 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="helper\CSystem.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="wnd\CShangpinSaomaluruWnd.cpp" />
+    <ClCompile Include="wnd\CShangpinNewTypeWnd.cpp" />
+    <ClCompile Include="page\CShangpinUpdatePageUI.cpp" />
     <ClCompile Include="tool\CFoodHandle.cpp" />
     <ClCompile Include="page\CShangpinCreatePageUI.cpp" />
     <ClCompile Include="page\CSaomashouyinPageUI.cpp" />

+ 18 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -291,6 +291,15 @@
     <ClInclude Include="tool\CFoodHandle.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="page\CShangpinUpdatePageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="wnd\CShangpinNewTypeWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="wnd\CShangpinSaomaluruWnd.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -542,6 +551,15 @@
     <ClCompile Include="tool\CFoodHandle.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="page\CShangpinUpdatePageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="wnd\CShangpinNewTypeWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="wnd\CShangpinSaomaluruWnd.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">