CDiandanPageUI.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. #include "../pch/pch.h"
  2. #include "CDiandanPageUI.h"
  3. #include "../control/ControlEx.h"
  4. #include "../tool/CSqlite3.h"
  5. #include "../wnd/CDiandanNatureWnd.h"
  6. #include "../wnd/CMemoWnd.h"
  7. CDiandanPageUI::CDiandanPageUI()
  8. {
  9. }
  10. CDiandanPageUI::~CDiandanPageUI()
  11. {
  12. }
  13. //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
  14. void CDiandanPageUI::InitShow()
  15. {
  16. m_foodLayout = static_cast<CTileLayoutUI*>(this->FindSubControl(_T("diandan_foodlist")));
  17. m_foodtypeLayout = static_cast<CHorizontalLayoutUI*>(this->FindSubControl(_T("diandan_fenlei_layout")));
  18. CSqlite3 sqlite;
  19. m_nFoodpackageNum = sqlite.GetFoodpackageNum();
  20. m_types = sqlite.GetFoodtypes(); //只包含收银机显示的分类
  21. if (m_nFoodpackageNum > 0)
  22. {
  23. //默认选中的分类是商品套餐
  24. m_cur_type_id = "taocan";
  25. }
  26. else
  27. {
  28. //没有套餐,默认选中第一个商品分类
  29. if (m_types.size() > 0)
  30. {
  31. m_cur_type_id = m_types[0].id;
  32. }
  33. }
  34. //先初始化商品分类
  35. this->InitFoodtypeShow();
  36. //如果不是一个分类都没有,选中第一个分类
  37. if (m_cur_type_id != "")
  38. {
  39. CFoodtypeOptionUI* curTypeUI = static_cast<CFoodtypeOptionUI*>(m_foodtypeLayout->GetItemAt(0));
  40. curTypeUI->Selected(true, false);
  41. }
  42. this->RefreshFoodlist();
  43. }
  44. //处理按钮点击类事件
  45. void CDiandanPageUI::HandleClickMsg(TNotifyUI& msg)
  46. {
  47. CDuiString name = msg.pSender->GetName();
  48. if (name == L"diandan_fooditem")
  49. {
  50. CDiandanFoodItemUI* fooditemUI = static_cast<CDiandanFoodItemUI*>(msg.pSender);
  51. m_cur_click_food_item = fooditemUI;
  52. this->ClickFoodAction();
  53. }
  54. else if (name == L"btn_diandan_jia")
  55. {
  56. this->ClickAdd();
  57. }
  58. else if (name == L"btn_diandan_jian")
  59. {
  60. this->ClickDel();
  61. }
  62. else if (name == L"btn_diandan_shanchu")
  63. {
  64. this->ClickRemove();
  65. }
  66. else if (name == L"btn_diandan_guige")
  67. {
  68. this->ClickGuige();
  69. }
  70. else if (name == L"btn_diandan_qingkong")
  71. {
  72. this->ClickQingkong();
  73. }
  74. else if (name == L"btn_diandan_zhengdanbeizhu")
  75. {
  76. this->ClickZhengdanMemo();
  77. }
  78. }
  79. //处理option切换事件
  80. void CDiandanPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
  81. {
  82. COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
  83. std::wstring groupname = curOption->GetGroup();
  84. if (groupname == L"diandan_foodtype")
  85. {
  86. //商品分类切换
  87. CFoodtypeOptionUI* typeUI = static_cast<CFoodtypeOptionUI*>(curOption);
  88. std::string id = typeUI->GetTypeId();
  89. m_cur_type_id = id;
  90. this->RefreshFoodlist();
  91. }
  92. }
  93. //处理下拉框、radio的切换事件
  94. void CDiandanPageUI::HandleItemSelectMsg(TNotifyUI& msg)
  95. {
  96. }
  97. void CDiandanPageUI::InitFoodtypeShow()
  98. {
  99. //先判断有没有套餐分类
  100. if (m_nFoodpackageNum > 0)
  101. {
  102. CDialogBuilder builder;
  103. CDialogBuilderCallbackEx cb;
  104. CFoodtypeOptionUI* pItem = static_cast<CFoodtypeOptionUI*>(builder.Create(_T("foodtype_option.xml"), (UINT)0, &cb, m_pManager));
  105. pItem->SetName(L"商品套餐");
  106. pItem->SetTypeId("taocan");
  107. pItem->SetTaocan();
  108. pItem->SetGroup(L"diandan_foodtype");
  109. m_foodtypeLayout->Add(pItem);
  110. }
  111. //接下来开始处理商品分类
  112. for (std::vector<CFoodType>::iterator it = m_types.begin(); it != m_types.end(); it++)
  113. {
  114. CFoodType type = *it;
  115. CDialogBuilder builder;
  116. CDialogBuilderCallbackEx cb;
  117. CFoodtypeOptionUI* pItem = static_cast<CFoodtypeOptionUI*>(builder.Create(_T("foodtype_option.xml"), (UINT)0, &cb, m_pManager));
  118. pItem->SetName(CLewaimaiString::UTF8ToUnicode(type.name));
  119. pItem->SetTypeId(type.id);
  120. pItem->SetGroup(L"diandan_foodtype");
  121. m_foodtypeLayout->Add(pItem);
  122. }
  123. }
  124. void CDiandanPageUI::RefreshFoodlist()
  125. {
  126. m_foodLayout->RemoveAll();
  127. //如果当前一个分类都没有,那么就不处理了
  128. if (m_cur_type_id == "")
  129. {
  130. return;
  131. }
  132. else if (m_cur_type_id == "taocan")
  133. {
  134. //选择的是套餐分类
  135. CSqlite3 sqlite;
  136. std::vector<CFoodpackage> foodlist = sqlite.GetFoodpackages(true);
  137. for (std::vector<CFoodpackage>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
  138. {
  139. CFoodpackage food = *it;
  140. CDialogBuilder builder;
  141. CDialogBuilderCallbackEx cb;
  142. CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(_T("diandan_fooditem.xml"), (UINT)0, &cb, m_pManager));
  143. pItem->SetFoodpackageInfo(food);
  144. pItem->UpdateShow();
  145. m_foodLayout->Add(pItem);
  146. }
  147. }
  148. else
  149. {
  150. CSqlite3 sqlite;
  151. std::vector<CFood> foodlist = sqlite.GetFoodByTypeid(m_cur_type_id);
  152. for (std::vector<CFood>::iterator it = foodlist.begin(); it != foodlist.end(); it++)
  153. {
  154. CFood food = *it;
  155. CDialogBuilder builder;
  156. CDialogBuilderCallbackEx cb;
  157. CDiandanFoodItemUI* pItem = static_cast<CDiandanFoodItemUI*>(builder.Create(_T("diandan_fooditem.xml"), (UINT)0, &cb, m_pManager));
  158. pItem->SetFoodInfo(food);
  159. pItem->UpdateShow();
  160. m_foodLayout->Add(pItem);
  161. }
  162. }
  163. }
  164. void CDiandanPageUI::AddDiandanOrderItemShow(int index)
  165. {
  166. CDiandanOrderItem item = m_cur_diandan_order.getDiandanOrderItem(index);
  167. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  168. CDialogBuilder builder;
  169. CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("diandan_cart_item.xml"), (UINT)0, NULL, m_pManager));
  170. pList->Add(pEle);
  171. CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
  172. pName->SetText(CLewaimaiString::UTF8ToUnicode(item.food_name).c_str());
  173. CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
  174. pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
  175. CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
  176. pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
  177. CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
  178. if (item.is_nature)
  179. {
  180. pEle->SetFixedHeight(84);
  181. pNature->SetVisible(true);
  182. pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
  183. }
  184. else
  185. {
  186. pEle->SetFixedHeight(42);
  187. pNature->SetVisible(false);
  188. }
  189. //更新总价显示
  190. CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
  191. pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
  192. }
  193. void CDiandanPageUI::UpdateDiandanOrderItemShow(int index)
  194. {
  195. CDiandanOrderItem item = m_cur_diandan_order.getDiandanOrderItem(index);
  196. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  197. CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(pList->GetItemAt(index));
  198. CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
  199. pName->SetText(CLewaimaiString::UTF8ToUnicode(item.food_name).c_str());
  200. CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
  201. pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
  202. CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
  203. pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
  204. CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
  205. if (item.is_nature)
  206. {
  207. pEle->SetFixedHeight(84);
  208. pNature->SetVisible(true);
  209. pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
  210. }
  211. else
  212. {
  213. pEle->SetFixedHeight(42);
  214. pNature->SetVisible(false);
  215. }
  216. //更新总价显示
  217. CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
  218. pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
  219. }
  220. void CDiandanPageUI::DelDiandanOrderItemShow(int index)
  221. {
  222. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  223. pList->RemoveAt(index);
  224. //更新总价显示
  225. CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
  226. pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
  227. }
  228. void CDiandanPageUI::ClearDiandanOrderItemShow()
  229. {
  230. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  231. pList->RemoveAll();
  232. //更新总价显示
  233. CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_totalprice")));
  234. pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(m_cur_diandan_order.getTotalPriceShow())).c_str());
  235. }
  236. void CDiandanPageUI::ClickFoodAction()
  237. {
  238. bool is_taocan = m_cur_click_food_item->GetIsTaocan();
  239. if (is_taocan)
  240. {
  241. //点击套餐之后的处理逻辑
  242. }
  243. else
  244. {
  245. //点击普通商品之后的处理逻辑
  246. CFood foodinfo = m_cur_click_food_item->GetFoodInfo();
  247. CDiandanOrderItem clickItem;
  248. clickItem.food_id = foodinfo.id;
  249. clickItem.food_name = foodinfo.name;
  250. clickItem.type_id = foodinfo.type_id;
  251. clickItem.price = foodinfo.price;
  252. clickItem.is_dabao = "";
  253. clickItem.num = "1";
  254. clickItem.is_foodpackage = "0";
  255. clickItem.is_weight = "0";
  256. //把当前点击商品的信息,保存到orderitem里面,方便后面修改规格的时候使用
  257. clickItem.SetFoodInfo(m_cur_click_food_item->GetFoodInfo());
  258. clickItem.SetFoodpackageInfo(m_cur_click_food_item->GetFoodpackageInfo());
  259. clickItem.SetIsTaocan(m_cur_click_food_item->GetIsTaocan());
  260. if (foodinfo.is_nature == "1")
  261. {
  262. //商品有商品属性
  263. clickItem.is_nature = true;
  264. //先弹框进行选择属性
  265. CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(1);
  266. pNatureFrame->SetFoodItemUI(m_cur_click_food_item);
  267. if (pNatureFrame != NULL)
  268. {
  269. pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  270. pNatureFrame->SetIcon(IDI_ICON_DUILIB);
  271. pNatureFrame->CenterWindow();
  272. UINT ret = pNatureFrame->ShowModal();
  273. if (ret == IDOK)
  274. {
  275. //保存选择的属性
  276. std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
  277. clickItem.natureSelectedArray = natureSelectedArray;
  278. delete pNatureFrame;
  279. }
  280. else
  281. {
  282. delete pNatureFrame;
  283. return;
  284. }
  285. }
  286. }
  287. //商品没有商品属性
  288. bool is_add_new = false;
  289. int index = m_cur_diandan_order.AddItem(clickItem, is_add_new);
  290. if (is_add_new)
  291. {
  292. //说明是新增了一项,要刷新一下购物车展示
  293. this->AddDiandanOrderItemShow(index);
  294. }
  295. else
  296. {
  297. //没有新增,而是修改了一项
  298. this->UpdateDiandanOrderItemShow(index);
  299. }
  300. }
  301. }
  302. void CDiandanPageUI::ClickAdd()
  303. {
  304. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  305. int nIndex = pList->GetCurSel();
  306. if (nIndex == -1)
  307. {
  308. return;
  309. }
  310. m_cur_diandan_order.AddNum(nIndex);
  311. //没有新增,而是修改了一项
  312. this->UpdateDiandanOrderItemShow(nIndex);
  313. }
  314. void CDiandanPageUI::ClickDel()
  315. {
  316. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  317. int nIndex = pList->GetCurSel();
  318. if (nIndex == -1)
  319. {
  320. return;
  321. }
  322. bool is_del = m_cur_diandan_order.DelNum(nIndex);
  323. //如果是删掉了,那么就刷新显示
  324. if (is_del)
  325. {
  326. this->DelDiandanOrderItemShow(nIndex);
  327. }
  328. else
  329. {
  330. this->UpdateDiandanOrderItemShow(nIndex);
  331. }
  332. }
  333. void CDiandanPageUI::ClickRemove()
  334. {
  335. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  336. int nIndex = pList->GetCurSel();
  337. if (nIndex == -1)
  338. {
  339. return;
  340. }
  341. m_cur_diandan_order.Remove(nIndex);
  342. this->DelDiandanOrderItemShow(nIndex);
  343. }
  344. void CDiandanPageUI::ClickGuige()
  345. {
  346. CListUI* pList = static_cast<CListUI*>(this->FindSubControl(_T("list_diandan_cart")));
  347. int nIndex = pList->GetCurSel();
  348. if (nIndex == -1)
  349. {
  350. return;
  351. }
  352. bool is_nature = m_cur_diandan_order.getDiandanOrderItem(nIndex).is_nature;
  353. if (!is_nature)
  354. {
  355. //当前商品没有商品属性
  356. return;
  357. }
  358. //弹出属性框,开始重新选择属性
  359. CDiandanNatureWnd* pNatureFrame = new CDiandanNatureWnd(2);
  360. pNatureFrame->SetDiandanOrderItem(m_cur_diandan_order.getDiandanOrderItem(nIndex));
  361. if (pNatureFrame != NULL)
  362. {
  363. pNatureFrame->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  364. pNatureFrame->SetIcon(IDI_ICON_DUILIB);
  365. pNatureFrame->CenterWindow();
  366. UINT ret = pNatureFrame->ShowModal();
  367. if (ret == IDOK)
  368. {
  369. //保存选择的属性
  370. std::vector<FoodNatureSelectValue> natureSelectedArray = pNatureFrame->GetNatureSelectedArray();
  371. m_cur_diandan_order.UpdateItemGuige(nIndex, natureSelectedArray);
  372. delete pNatureFrame;
  373. //然后要刷新这个item的显示
  374. this->UpdateDiandanOrderItemShow(nIndex);
  375. }
  376. else
  377. {
  378. return;
  379. }
  380. }
  381. }
  382. void CDiandanPageUI::ClickQingkong()
  383. {
  384. m_cur_diandan_order.Clear();
  385. this->ClearDiandanOrderItemShow();
  386. }
  387. void CDiandanPageUI::ClickZhengdanMemo()
  388. {
  389. CMemoWnd* pMemoDlg = new CMemoWnd();
  390. if (pMemoDlg != NULL)
  391. {
  392. pMemoDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
  393. pMemoDlg->SetIcon(IDI_ICON_DUILIB);
  394. pMemoDlg->CenterWindow();
  395. pMemoDlg->SetTitle(L"整单备注");
  396. UINT ret = pMemoDlg->ShowModal();
  397. if (ret == IDOK)
  398. {
  399. //保存选择的属性
  400. std::string sMemo = pMemoDlg->getMemo();
  401. //渲染整单备注的展示
  402. CLabelUI* pLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("diandan_page_label_zhengdanbeizhu")));
  403. pLabel->SetText((L"整单备注:" + CLewaimaiString::UTF8ToUnicode(sMemo)).c_str());
  404. //保存备注,提交订单的时候用
  405. m_cur_diandan_order.SetMemo(sMemo);
  406. delete pMemoDlg;
  407. }
  408. else
  409. {
  410. delete pMemoDlg;
  411. return;
  412. }
  413. }
  414. }