zhangyang 4 سال پیش
والد
کامیت
7d5413ac3d

+ 79 - 1
zhipuzi_pos_windows/page/CDiandanPageUI.cpp

@@ -66,6 +66,18 @@ void CDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
 
 		this->ClickFoodAction();
 	}
+	else if (name == L"btn_diandan_jia")
+	{
+		this->ClickAdd();
+	}
+	else if (name == L"btn_diandan_jian")
+	{
+		this->ClickDel();
+	}
+	else if (name == L"btn_diandan_shanchu")
+	{
+		this->ClickRemove();
+	}
 }
 
 //处理option切换事件
@@ -254,6 +266,17 @@ void CDiandanPageUI::UpdateDiandanOrderItemShow(int index)
 	pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
 }
 
+void CDiandanPageUI::DelDiandanOrderItemShow(int index)
+{
+	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
+
+	pList->RemoveAt(index);
+
+	//更新总价显示
+	CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
+	pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
+}
+
 void CDiandanPageUI::ClickFoodAction()
 {
 	bool is_taocan = m_cur_click_food_item->GetIsTaocan();
@@ -325,4 +348,59 @@ void CDiandanPageUI::ClickFoodAction()
 			this->UpdateDiandanOrderItemShow(index);
 		}
 	}
-}
+}
+
+void CDiandanPageUI::ClickAdd()
+{
+	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
+
+	int nIndex = pList->GetCurSel();
+
+	if (nIndex == -1)
+	{
+		return;
+	}
+
+	m_cur_diandan_order.AddNum(nIndex);
+
+	//没有新增,而是修改了一项
+	this->UpdateDiandanOrderItemShow(nIndex);
+}
+
+void CDiandanPageUI::ClickDel()
+{
+	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
+
+	int nIndex = pList->GetCurSel();
+	if (nIndex == -1)
+	{
+		return;
+	}
+
+	bool is_del = m_cur_diandan_order.DelNum(nIndex);
+
+	//如果是删掉了,那么就刷新显示
+	if (is_del)
+	{
+		this->DelDiandanOrderItemShow(nIndex);
+	}
+	else
+	{
+		this->UpdateDiandanOrderItemShow(nIndex);
+	}
+}
+
+void CDiandanPageUI::ClickRemove()
+{
+	CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
+
+	int nIndex = pList->GetCurSel();
+	if (nIndex == -1)
+	{
+		return;
+	}
+
+	m_cur_diandan_order.Remove(nIndex);
+
+	this->DelDiandanOrderItemShow(nIndex);
+}

+ 12 - 0
zhipuzi_pos_windows/page/CDiandanPageUI.h

@@ -39,9 +39,21 @@ public:
 	//刷新某个购物车商品的显示
 	void UpdateDiandanOrderItemShow(int index);
 
+	//删除购物车中某一个商品
+	void DelDiandanOrderItemShow(int index);
+
 	//点击某一个商品的item之后的处理逻辑
 	void ClickFoodAction();
 
+	//点击加号之后的逻辑
+	void ClickAdd();
+
+	//点击减号之后的逻辑
+	void ClickDel();
+
+	//点击删除之后的逻辑
+	void ClickRemove();
+
 private:
 	CTileLayoutUI* m_foodLayout;
 	CHorizontalLayoutUI* m_foodtypeLayout;

+ 1 - 0
zhipuzi_pos_windows/wnd/CDiandanNatureWnd.h

@@ -66,5 +66,6 @@ public:
 	//当前弹框下的属性控件数组
 	std::vector<CDiandanNatureItemUI*> m_natureitems;
 
+	//这个就是所选中的所有属性的信息,对话框关闭后就返回这个,利用这个数据就知道选中的是哪些属性
 	std::vector<FoodNatureSelectValue> m_NatureSelectedArray;
 };

+ 69 - 0
zhipuzi_pos_windows/zhipuzi/CDiandanOrder.h

@@ -23,6 +23,8 @@ public:
 	std::string is_weight;
 
 	bool is_nature = false;
+
+	//这个用来存储所有属性选择的信息,每个属性选择的是第几个,什么价格等等
 	std::vector<FoodNatureSelectValue> natureSelectedArray;
 
 	//这个是商品对外展示的价格,根据数量和属性来计算的
@@ -202,4 +204,71 @@ public:
 
 		m_total_price_show = CLewaimaiString::DoubleToString(total_price_show, 2);
 	}
+
+	//给某一项添加一个数量
+	void AddNum(int index)
+	{
+		std::string old_num = m_items[index].num;
+
+		double d_old_num = std::stod(old_num);
+		double d_new_num = d_old_num + 1;
+
+		//如果新的数量是一个整数,那么展示的时候就把小数去掉
+		if (d_new_num - (int)d_new_num < 0.0001)
+		{
+			m_items[index].num = std::to_string((int)d_new_num);
+		}
+		else
+		{
+			m_items[index].num = CLewaimaiString::DoubleToString(d_new_num, 3);
+		}
+
+		m_items[index].UpdateShowPrice();
+
+		UpdateTotalPriceShow();
+	}
+
+	//给某一项减少一个数量,返回值为true表示商品本删掉了,也就是为0份;如果为false表示没被删掉
+	bool DelNum(int index)
+	{
+		std::string old_num = m_items[index].num;
+
+		double d_old_num = std::stod(old_num);
+		double d_new_num = d_old_num - 1;
+
+		if (d_new_num < 0.0001)
+		{
+			//已经减为0了,那么就删掉这个item
+			m_items.erase(m_items.begin() + index);
+			UpdateTotalPriceShow();
+
+			return true;
+		}
+		else
+		{
+			//如果新的数量是一个整数,那么展示的时候就把小数去掉
+			if (d_new_num - (int)d_new_num < 0.0001)
+			{
+				m_items[index].num = std::to_string((int)d_new_num);
+			}
+			else
+			{
+				m_items[index].num = CLewaimaiString::DoubleToString(d_new_num, 3);
+			}
+
+			m_items[index].UpdateShowPrice();
+		}
+
+		UpdateTotalPriceShow();
+
+		return false;
+	}
+
+	//删除某一项
+	void Remove(int index)
+	{
+		//已经减为0了,那么就删掉这个item
+		m_items.erase(m_items.begin() + index);
+		UpdateTotalPriceShow();
+	}
 };