张洋 4 anni fa
parent
commit
ad8ac6bea8

BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-13-15-35-12.dmp


BIN
bin/Win32/Debug/zhipuzi_pos_windows/dump/2021-11-13-15-37-19.dmp


+ 7 - 4
bin/Win32/Debug/zhipuzi_pos_windows/skin/diandan_page.xml

@@ -11,8 +11,7 @@
 					<VerticalLayout bkcolor="#FFFFFFFF" width="350" padding="15,15,0,0">
 					<VerticalLayout bkcolor="#FFFFFFFF" width="350" padding="15,15,0,0">
 						<HorizontalLayout height="70">
 						<HorizontalLayout height="70">
 							<Control></Control>
 							<Control></Control>
-							<Button name="btn_diandan_cundan" width="70" height="36" padding="0,15,20,0" text="存单" textcolor="#FFFFFFFF" />
-							<Button name="btn_diandan_qudan" width="70" height="36" padding="0,15,20,0" text="取单" textcolor="#FFFFFFFF" />
+							<Button name="btn_diandan_qingkong" width="80" height="36" padding="0,15,20,0" text="清空" textcolor="#FFFFFFFF" />
 						</HorizontalLayout>
 						</HorizontalLayout>
 						
 						
 						<Label text="整单备注:" heiht="32" padding="0,10,10,0" bkcolor="#FFDCDCDC"></Label>
 						<Label text="整单备注:" heiht="32" padding="0,10,10,0" bkcolor="#FFDCDCDC"></Label>
@@ -27,8 +26,7 @@
 						<Label name="diandan_page_totalprice" text="" font="0" textcolor="#FFFF0000" height="40" align="right" padding="0,10,15,0"></Label>
 						<Label name="diandan_page_totalprice" text="" font="0" textcolor="#FFFF0000" height="40" align="right" padding="0,10,15,0"></Label>
 						
 						
 						<HorizontalLayout height="70">
 						<HorizontalLayout height="70">
-							<Button name="btn_diandan_zhengdanbeizhu" width="80" height="36" padding="0,15,20,0" text="整单备注" textcolor="#FFFFFFFF" />
-							<Button name="btn_diandan_qingkong" width="80" height="36" padding="0,15,20,0" text="清空" textcolor="#FFFFFFFF" />
+							
 							<Control></Control>
 							<Control></Control>
 						</HorizontalLayout>
 						</HorizontalLayout>
 					</VerticalLayout>
 					</VerticalLayout>
@@ -41,6 +39,11 @@
 						
 						
 						<Button name="btn_diandan_dabao" width="80" height="36" padding="10,50,10,0" text="打包" textcolor="#FFFFFFFF" />
 						<Button name="btn_diandan_dabao" width="80" height="36" padding="10,50,10,0" text="打包" textcolor="#FFFFFFFF" />
 						<Button name="btn_diandan_budabao" width="80" height="36" padding="10,15,10,0" text="不打包" textcolor="#FFFFFFFF" />
 						<Button name="btn_diandan_budabao" width="80" height="36" padding="10,15,10,0" text="不打包" textcolor="#FFFFFFFF" />
+						
+						<Button name="btn_diandan_cundan" width="80" height="36" padding="10,50,10,0" text="存单" textcolor="#FFFFFFFF" />
+						<Button name="btn_diandan_qudan" width="80" height="36" padding="10,15,10,0" text="取单" textcolor="#FFFFFFFF" />
+						
+						<Button name="btn_diandan_zhengdanbeizhu" width="80" height="36" padding="10,50,10,0" text="整单备注" textcolor="#FFFFFFFF" />
 					</VerticalLayout>
 					</VerticalLayout>
 				</HorizontalLayout>
 				</HorizontalLayout>
 				
 				

+ 5 - 0
zhipuzi_pos_windows/control/CDiandanFoodItemUI.cpp

@@ -46,6 +46,11 @@ void CDiandanFoodItemUI::SetFoodpackageInfo(CFoodpackage info)
 	m_is_taocan = true;
 	m_is_taocan = true;
 }
 }
 
 
+void CDiandanFoodItemUI::SetIsTaocan(bool is_taocan)
+{
+	m_is_taocan = is_taocan;
+}
+
 CFood CDiandanFoodItemUI::GetFoodInfo()
 CFood CDiandanFoodItemUI::GetFoodInfo()
 {
 {
 	return m_foodinfo;
 	return m_foodinfo;

+ 1 - 0
zhipuzi_pos_windows/control/CDiandanFoodItemUI.h

@@ -19,6 +19,7 @@ public:
 
 
 	void SetFoodInfo(CFood info);
 	void SetFoodInfo(CFood info);
 	void SetFoodpackageInfo(CFoodpackage info);
 	void SetFoodpackageInfo(CFoodpackage info);
+	void SetIsTaocan(bool is_taocan);
 
 
 	CFood GetFoodInfo();
 	CFood GetFoodInfo();
 	CFoodpackage GetFoodpackageInfo();
 	CFoodpackage GetFoodpackageInfo();

+ 5 - 5
zhipuzi_pos_windows/control/CDiandanNatureItemUI.cpp

@@ -30,7 +30,7 @@ void CDiandanNatureItemUI::addNatureValue(FoodNatureValue value)
 	m_nature_value.push_back(value);
 	m_nature_value.push_back(value);
 }
 }
 
 
-void CDiandanNatureItemUI::ShowNatureValue()
+void CDiandanNatureItemUI::ShowNatureValue(int nSelected)
 {
 {
 	CHorizontalLayoutUI* pValueLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_nature_layout_value")));
 	CHorizontalLayoutUI* pValueLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_nature_layout_value")));
 
 
@@ -85,11 +85,11 @@ void CDiandanNatureItemUI::ShowNatureValue()
 		newButton->SetFloat(true);
 		newButton->SetFloat(true);
 		newButton->SetPos(rect);
 		newButton->SetPos(rect);
 
 
-		//默认选中第一个
-		if (value_num == 0)
+		//找到了选中的属性
+		if (value_num == nSelected)
 		{
 		{
-			m_nSelectIndex = 0;
-			m_nature_value[0].is_select = true;
+			m_nSelectIndex = nSelected;
+			m_nature_value[nSelected].is_select = true;
 			newButton->SetBorderColor(0xFFFF4500);
 			newButton->SetBorderColor(0xFFFF4500);
 			newButton->SetTextColor(0xFFFF4500);
 			newButton->SetTextColor(0xFFFF4500);
 		}
 		}

+ 2 - 2
zhipuzi_pos_windows/control/CDiandanNatureItemUI.h

@@ -38,8 +38,8 @@ public:
 	//添加属性值
 	//添加属性值
 	void addNatureValue(FoodNatureValue value);
 	void addNatureValue(FoodNatureValue value);
 
 
-	//刷新属性值的位置
-	void ShowNatureValue();
+	//刷新属性值的位置,nSelected表示选中第几个属性
+	void ShowNatureValue(int nSelected = 0);
 
 
 	//选中第1几个属性
 	//选中第1几个属性
 	void SetNatureSelected(int index);
 	void SetNatureSelected(int index);

+ 56 - 1
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -78,6 +78,10 @@ void CDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
 	{
 	{
 		this->ClickRemove();
 		this->ClickRemove();
 	}
 	}
+	else if (name == L"btn_diandan_guige")
+	{
+		this->ClickGuige();
+	}
 }
 }
 
 
 //处理option切换事件
 //处理option切换事件
@@ -301,6 +305,11 @@ void CDiandanPageUI::ClickFoodAction()
 		clickItem.is_foodpackage = "0";
 		clickItem.is_foodpackage = "0";
 		clickItem.is_weight = "0";
 		clickItem.is_weight = "0";
 
 
+		//把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
+		clickItem.SetFoodInfo(m_cur_click_food_item->GetFoodInfo());
+		clickItem.SetFoodpackageInfo(m_cur_click_food_item->GetFoodpackageInfo());
+		clickItem.SetIsTaocan(m_cur_click_food_item->GetIsTaocan());
+
 		if (foodinfo.is_nature == "1")
 		if (foodinfo.is_nature == "1")
 		{
 		{
 			//商品有商品属性
 			//商品有商品属性
@@ -308,7 +317,7 @@ void CDiandanPageUI::ClickFoodAction()
 
 
 			//先弹框进行选择属性
 			//先弹框进行选择属性
 			CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
 			CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
-			pNatureFrame->SetFooditemUI(m_cur_click_food_item);
+			pNatureFrame->SetFoodItemUI(m_cur_click_food_item);
 
 
 			if (pNatureFrame != NULL)
 			if (pNatureFrame != NULL)
 			{
 			{
@@ -404,3 +413,49 @@ void CDiandanPageUI::ClickRemove()
 
 
 	this->DelDiandanOrderItemShow(nIndex);
 	this->DelDiandanOrderItemShow(nIndex);
 }
 }
+
+void CDiandanPageUI::ClickGuige()
+{
+	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
+
+	int nIndex = pList->GetCurSel();
+	if (nIndex == -1)
+	{
+		return;
+	}
+
+	bool is_nature = m_cur_diandan_order.getDiandanOrderItem(nIndex).is_nature;
+	if (!is_nature)
+	{
+		//当前商品没有商品属性
+		return;
+	}
+
+	//弹出属性框,开始重新选择属性
+	CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
+	pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
+
+	if (pNatureFrame != NULL)
+	{
+		pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pNatureFrame->SetIcon(IDI_ICON_DUILIB);
+		pNatureFrame->CenterWindow();
+		UINT ret = pNatureFrame->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//保存选择的属性
+			std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
+			m_cur_diandan_order.UpdateItemGuige(nIndex, natureSelectedArray);
+
+			delete pNatureFrame;
+
+			//然后要刷新这个item的显示
+			this->UpdateDiandanOrderItemShow(nIndex);
+		}
+		else
+		{
+			return;
+		}
+	}
+}

+ 4 - 0
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -54,6 +54,9 @@ public:
 	//点击删除之后的逻辑
 	//点击删除之后的逻辑
 	void ClickRemove();
 	void ClickRemove();
 
 
+	//点击规格之后的逻辑
+	void ClickGuige();
+
 private:
 private:
 	CTileLayoutUI* m_foodLayout;
 	CTileLayoutUI* m_foodLayout;
 	CHorizontalLayoutUI* m_foodtypeLayout;
 	CHorizontalLayoutUI* m_foodtypeLayout;
@@ -69,6 +72,7 @@ private:
 
 
 	CDiandanFoodItemUI* m_cur_click_food_item;
 	CDiandanFoodItemUI* m_cur_click_food_item;
 	
 	
+	//当前购物车的订单,根据这个来进行渲染显示
 	CDiandanOrder m_cur_diandan_order;
 	CDiandanOrder m_cur_diandan_order;
 };
 };
 
 

+ 71 - 39
zhipuzi_pos_windows/wnd/CDiandanNatureWnd.cpp

@@ -6,70 +6,102 @@
 
 
 void CDiandanNatureWnd::Init()
 void CDiandanNatureWnd::Init()
 {
 {
-	if (m_fooditemUI->GetIsTaocan())
+	bool is_taocan;
+	CFood foodinfo;
+	CFoodpackage foodpackageinfo;
+
+	if (m_mode == 1)
 	{
 	{
-		//当前展示的是套餐
+		//点击商品弹框
+		is_taocan = m_fooditemUI->GetIsTaocan();
+		foodinfo = m_fooditemUI->GetFoodInfo();
+		foodpackageinfo = m_fooditemUI->GetFoodpackageInfo();
 	}
 	}
 	else
 	else
 	{
 	{
-		//当前展示的是普通商品
-		std::string nature = m_fooditemUI->GetFoodInfo().nature;
+		//修改规格属性弹框
+		is_taocan = m_DiandanOrderItem.GetIsTaocan();
+		foodinfo = m_DiandanOrderItem.GetFoodInfo();
+		foodpackageinfo = m_DiandanOrderItem.GetFoodpackageInfo();
+	}
 
 
-		rapidjson::Document document;
-		document.Parse(nature.c_str());
+	//当前展示的是普通商品
+	std::string nature = foodinfo.nature;
 
 
-		if (document.HasParseError())
-		{
-			//属性json报错,直接不处理了
-			Close(IDCANCEL);
-			return;
-		}
+	rapidjson::Document document;
+	document.Parse(nature.c_str());
 
 
-		CVerticalLayoutUI* pNatureLayout = static_cast<CVerticalLayoutUI*>(this->m_pm.FindControl(_T("diandan_nature_layout")));
+	if (document.HasParseError())
+	{
+		//属性json报错,直接不处理了
+		Close(IDCANCEL);
+		return;
+	}
 
 
-		rapidjson::Value& data = document;
-		for (rapidjson::SizeType i = 0; i < data.Size(); ++i)
-		{
-			//创建一个属性控件
-			CDialogBuilder builder;
-			CDialogBuilderCallbackEx cb;
-			CDiandanNatureItemUI* pItem = static_cast<CDiandanNatureItemUI*>(builder.Create(_T("diandan_nature_item.xml"), (UINT)0, &cb, &m_pm));
+	CVerticalLayoutUI* pNatureLayout = static_cast<CVerticalLayoutUI*>(this->m_pm.FindControl(_T("diandan_nature_layout")));
+
+	std::vector<FoodNatureSelectValue> natureSelectedArray;
+	if (m_mode == 2)
+	{
+		//这个是修改属性才有,要把属性弹框初始化为这个里面的选项			
+		natureSelectedArray = m_DiandanOrderItem.natureSelectedArray;
+	}		
 
 
-			//要先Add,子控件才能调用SetPos
-			pNatureLayout->Add(pItem);
+	rapidjson::Value& data = document;
+	for (rapidjson::SizeType i = 0; i < data.Size(); ++i)
+	{
+		//创建一个属性控件
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
+		CDiandanNatureItemUI* pItem = static_cast<CDiandanNatureItemUI*>(builder.Create(_T("diandan_nature_item.xml"), (UINT)0, &cb, &m_pm));
 
 
-			m_natureitems.push_back(pItem);
+		//要先Add,子控件才能调用SetPos
+		pNatureLayout->Add(pItem);
 
 
-			//这里面的是属性名字信息
-			rapidjson::Value& natureinfo = data[i];
+		m_natureitems.push_back(pItem);
 
 
-			std::string name = natureinfo["name"].GetString();
-			std::string limit_choose = natureinfo["limit_choose"].GetString();
+		//这里面的是属性名字信息
+		rapidjson::Value& natureinfo = data[i];
 
 
-			rapidjson::Value& value = natureinfo["value"];
+		std::string name = natureinfo["name"].GetString();
+		std::string limit_choose = natureinfo["limit_choose"].GetString();
 
 
-			for (rapidjson::SizeType j = 0; j < value.Size(); ++j)
-			{
-				FoodNatureValue newvalueItem;
+		rapidjson::Value& value = natureinfo["value"];
+
+		for (rapidjson::SizeType j = 0; j < value.Size(); ++j)
+		{
+			FoodNatureValue newvalueItem;
+
+			newvalueItem.name = value[j]["name"].GetString();
+			newvalueItem.value = value[j]["value"].GetInt();
 
 
-				newvalueItem.name = value[j]["name"].GetString();
-				newvalueItem.value = value[j]["value"].GetInt();
+			pItem->addNatureValue(newvalueItem);
+		}			
 
 
-				pItem->addNatureValue(newvalueItem);
-			}			
+		pItem->SetNatureName(name);
+		pItem->SetNatureNameNum(i);
 
 
-			pItem->SetNatureName(name);
-			pItem->SetNatureNameNum(i);
-			pItem->ShowNatureValue();
+		if (m_mode == 1)
+		{
+			pItem->ShowNatureValue(0);
+		}
+		else
+		{
+			pItem->ShowNatureValue(natureSelectedArray[i].nature_select_index);
 		}
 		}
 	}
 	}
 }
 }
 
 
-void CDiandanNatureWnd::SetFooditemUI(CDiandanFoodItemUI* item)
+void CDiandanNatureWnd::SetFoodItemUI(CDiandanFoodItemUI* item)
 {
 {
 	m_fooditemUI = item;
 	m_fooditemUI = item;
 }
 }
 
 
+void CDiandanNatureWnd::SetDiandanOrderItem(CDiandanOrderItem item)
+{
+	m_DiandanOrderItem = item;
+}
+
 std::vector<FoodNatureSelectValue> CDiandanNatureWnd::GetNatureSelectedArray()
 std::vector<FoodNatureSelectValue> CDiandanNatureWnd::GetNatureSelectedArray()
 {
 {
 	return m_NatureSelectedArray;
 	return m_NatureSelectedArray;

+ 9 - 3
zhipuzi_pos_windows/wnd/CDiandanNatureWnd.h

@@ -5,6 +5,7 @@
 
 
 #include "../control/CDiandanFoodItemUI.h"
 #include "../control/CDiandanFoodItemUI.h"
 #include "../control/CDiandanNatureItemUI.h"
 #include "../control/CDiandanNatureItemUI.h"
+#include "../zhipuzi/CDiandanOrder.h"
 
 
 class CDiandanNatureWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
 class CDiandanNatureWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
 {
 {
@@ -33,7 +34,9 @@ public:
 
 
 	void Init();
 	void Init();
 
 
-	void SetFooditemUI(CDiandanFoodItemUI* item);
+	void SetFoodItemUI(CDiandanFoodItemUI* item);
+
+	void SetDiandanOrderItem(CDiandanOrderItem item);
 
 
 	std::vector<FoodNatureSelectValue> GetNatureSelectedArray();
 	std::vector<FoodNatureSelectValue> GetNatureSelectedArray();
 
 
@@ -58,11 +61,14 @@ public:
 public:
 public:
 	CPaintManagerUI m_pm;
 	CPaintManagerUI m_pm;
 
 
-	int m_mode; //为1表示新建,为2表示修改
+	int m_mode; //为1表示点击商品弹出属性,为2表示修改商品属性
 
 
-	//这个表示点击哪个商品(或者套餐)弹出的属性框
+	//这个表示点击哪个商品(或者套餐)弹出的属性框,m_model为1的时候有用
 	CDiandanFoodItemUI* m_fooditemUI;
 	CDiandanFoodItemUI* m_fooditemUI;
 
 
+	//这个是点击购物车的某个商品,修改商品规格的时候,保存当前选中的那个item,用来初始化属性窗口,m_mode为2的时候有用
+	CDiandanOrderItem m_DiandanOrderItem;
+
 	//当前弹框下的属性控件数组
 	//当前弹框下的属性控件数组
 	std::vector<CDiandanNatureItemUI*> m_natureitems;
 	std::vector<CDiandanNatureItemUI*> m_natureitems;
 
 

+ 58 - 0
zhipuzi_pos_windows/zhipuzi/CDiandanOrder.h

@@ -5,6 +5,9 @@
 
 
 #include "../control/CDiandanNatureItemUI.h"
 #include "../control/CDiandanNatureItemUI.h"
 
 
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodpackage.h"
+
 /**
 /**
  * 订单中的一个商品
  * 订单中的一个商品
  */
  */
@@ -30,6 +33,14 @@ public:
 	//这个是商品对外展示的价格,根据数量和属性来计算的
 	//这个是商品对外展示的价格,根据数量和属性来计算的
 	std::string show_price;
 	std::string show_price;
 
 
+private:
+	CFood m_foodinfo;
+	CFoodpackage m_foodpackageinfo;
+
+	bool m_is_taocan = false;
+
+public:
+
 	bool operator==(CDiandanOrderItem& t)
 	bool operator==(CDiandanOrderItem& t)
 	{
 	{
 		if (this->food_id != t.food_id)
 		if (this->food_id != t.food_id)
@@ -60,6 +71,38 @@ public:
 
 
 		return true;
 		return true;
 	}
 	}
+
+	void CDiandanOrderItem::SetFoodInfo(CFood info)
+	{
+		m_foodinfo = info;
+	}
+
+	void CDiandanOrderItem::SetFoodpackageInfo(CFoodpackage info)
+	{
+		m_foodpackageinfo = info;
+
+		m_is_taocan = true;
+	}
+
+	void CDiandanOrderItem::SetIsTaocan(bool is_taocan)
+	{
+		m_is_taocan = is_taocan;
+	}
+
+	CFood CDiandanOrderItem::GetFoodInfo()
+	{
+		return m_foodinfo;
+	}
+
+	CFoodpackage CDiandanOrderItem::GetFoodpackageInfo()
+	{
+		return m_foodpackageinfo;
+	}
+
+	bool CDiandanOrderItem::GetIsTaocan()
+	{
+		return m_is_taocan;
+	}
 	
 	
 	//根据当前选中的商品属性,重新设置price字段值
 	//根据当前选中的商品属性,重新设置price字段值
 	void UpdateShowPrice()
 	void UpdateShowPrice()
@@ -193,6 +236,13 @@ public:
 		return index;
 		return index;
 	}
 	}
 
 
+	void UpdateItemGuige(int index, std::vector<FoodNatureSelectValue>& natureSelectedArray)
+	{
+		m_items[index].natureSelectedArray = natureSelectedArray;
+
+		this->UpdateGuigePrice(index);
+	}
+
 	void UpdateTotalPriceShow()
 	void UpdateTotalPriceShow()
 	{
 	{
 		double total_price_show = 0;
 		double total_price_show = 0;
@@ -271,4 +321,12 @@ public:
 		m_items.erase(m_items.begin() + index);
 		m_items.erase(m_items.begin() + index);
 		UpdateTotalPriceShow();
 		UpdateTotalPriceShow();
 	}
 	}
+
+	//更新了某项的规格,那么重新刷新显示和价格
+	void UpdateGuigePrice(int index)
+	{
+		m_items[index].UpdateShowPrice();
+
+		UpdateTotalPriceShow();
+	}
 };
 };