|
|
@@ -0,0 +1,312 @@
|
|
|
+#include "../pch/pch.h"
|
|
|
+#include "CShoukuanOrderListPageUI.h"
|
|
|
+
|
|
|
+#include "../control/CShoukuanOrderItemUI.h"
|
|
|
+
|
|
|
+#include "../control/ControlEx.h"
|
|
|
+
|
|
|
+#include "../wnd/CWaimaiOrderFailReasonWnd.h"
|
|
|
+
|
|
|
+#include "../print/CPosPrinter.h"
|
|
|
+
|
|
|
+#include "../wnd/CMainWnd.h"
|
|
|
+
|
|
|
+CShoukuanOrderListPageUI::CShoukuanOrderListPageUI()
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+CShoukuanOrderListPageUI::~CShoukuanOrderListPageUI()
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
|
|
|
+void CShoukuanOrderListPageUI::InitShow()
|
|
|
+{
|
|
|
+ SetPage(1);
|
|
|
+ Refresh();
|
|
|
+}
|
|
|
+
|
|
|
+//处理按钮点击类事件
|
|
|
+void CShoukuanOrderListPageUI::HandleClickMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ CDuiString name = msg.pSender->GetName();
|
|
|
+
|
|
|
+ if (name == _T("shoukuan_order_list_print"))
|
|
|
+ {
|
|
|
+ CShoukuanOrderItemUI* item = static_cast<CShoukuanOrderItemUI*>(msg.pSender->GetParent()->GetParent());
|
|
|
+ std::string shoukuan_order_id = item->getOrderID();
|
|
|
+
|
|
|
+ CPosPrinter printer;
|
|
|
+ printer.PrintShoukuanOrder(shoukuan_order_id);
|
|
|
+ }
|
|
|
+ else if (name == _T("shoukuan_order_list_info"))
|
|
|
+ {
|
|
|
+ CShoukuanOrderItemUI* item = static_cast<CShoukuanOrderItemUI*>(msg.pSender->GetParent()->GetParent());
|
|
|
+ std::string shoukuan_order_id = item->getOrderID();
|
|
|
+
|
|
|
+ CShoukuanOrderInfoPageUI* page = static_cast<CShoukuanOrderInfoPageUI*>(m_pMainWnd->GetPage(CMainWnd::SHOUKUANINFO));
|
|
|
+ page->m_order_id = shoukuan_order_id;
|
|
|
+
|
|
|
+ m_pMainWnd->SwitchPage(CMainWnd::SHOUKUANINFO);
|
|
|
+ }
|
|
|
+ else if (name == _T("shoukuan_order_list_last"))
|
|
|
+ {
|
|
|
+ this->LastPage();
|
|
|
+ }
|
|
|
+ else if (name == _T("shoukuan_order_list_next"))
|
|
|
+ {
|
|
|
+ this->NextPage();
|
|
|
+ }
|
|
|
+ else if (name == _T("shoukuan_order_list_refresh"))
|
|
|
+ {
|
|
|
+ this->Refresh();
|
|
|
+ }
|
|
|
+ else if (name == L"orderlist_waimai")
|
|
|
+ {
|
|
|
+ m_pMainWnd->SwitchPage(CMainWnd::DINGDAN);
|
|
|
+ }
|
|
|
+ else if (name == L"orderlist_diandan_btn")
|
|
|
+ {
|
|
|
+ m_pMainWnd->SwitchPage(CMainWnd::DIANNEIDINGDAN);
|
|
|
+ }
|
|
|
+ else if (name == L"orderlist_zhengcan_btn")
|
|
|
+ {
|
|
|
+ m_pMainWnd->SwitchPage(CMainWnd::ZHENGCANDINGDAN);
|
|
|
+ }
|
|
|
+ else if (name == L"orderlist_shoukuan_btn")
|
|
|
+ {
|
|
|
+ m_pMainWnd->SwitchPage(CMainWnd::SHOUKUANDINGDAN);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//处理option切换事件
|
|
|
+void CShoukuanOrderListPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+ CDuiString name = msg.pSender->GetName();
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//处理下拉框、radio的切换事件
|
|
|
+void CShoukuanOrderListPageUI::HandleItemSelectMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//处理编辑框输入内容改变事件
|
|
|
+void CShoukuanOrderListPageUI::HandleTextChangedMsg(TNotifyUI& msg)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//处理扫码枪捕捉到的扫码信息
|
|
|
+void CShoukuanOrderListPageUI::HandleTextCapture(std::string content)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+bool CShoukuanOrderListPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
+{
|
|
|
+ if (uMsg == WM_ORDERLIST_REFRESH)
|
|
|
+ {
|
|
|
+ DoRefresh();
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+void CShoukuanOrderListPageUI::Refresh()
|
|
|
+{
|
|
|
+ //开始转菊花
|
|
|
+ CContainerUI* pOrderListLayout = static_cast<CContainerUI*>(this->FindSubControl(_T("orderlist")));
|
|
|
+ pOrderListLayout->SetVisible(false);
|
|
|
+
|
|
|
+ this->FindSubControl(_T("main_orderlist_loading"))->SetVisible(true);
|
|
|
+
|
|
|
+ //启动一个线程,进行网络请求操作
|
|
|
+ ShoukuanOrderListStatus* status = new ShoukuanOrderListStatus;
|
|
|
+ status->m_page = m_page;
|
|
|
+
|
|
|
+ std::thread t(&CShoukuanOrderListPageUI::HandleRefresh, this, status);
|
|
|
+ t.detach();
|
|
|
+}
|
|
|
+
|
|
|
+void CShoukuanOrderListPageUI::HandleRefresh(ShoukuanOrderListStatus* status)
|
|
|
+{
|
|
|
+ std::string url = "/shouyin/getoldorderlist";
|
|
|
+
|
|
|
+ //请求外卖的未处理订单,直接用当前的page值去请求
|
|
|
+ std::map<string, string> params;
|
|
|
+ params["page"] = to_string(status->m_page);
|
|
|
+ params["content"] = "";
|
|
|
+ params["ordercode"] = "";
|
|
|
+ std::string response;
|
|
|
+
|
|
|
+ CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
|
|
|
+
|
|
|
+ //走到这里,网络请求结束了,对比状态是否发生了改变
|
|
|
+ if (status->m_page != m_page)
|
|
|
+ {
|
|
|
+ //用户已经点击了其他状态,这个状态结果无效了,直接返回
|
|
|
+ delete status;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //将网络返回结果保存起来,等待消息处理重新渲染页面
|
|
|
+ m_response = response;
|
|
|
+
|
|
|
+ ::PostMessage(m_pManager->GetPaintWindow(), WM_ORDERLIST_REFRESH, 0, 0);
|
|
|
+
|
|
|
+ delete status;
|
|
|
+}
|
|
|
+
|
|
|
+void CShoukuanOrderListPageUI::DoRefresh()
|
|
|
+{
|
|
|
+ //请求成功之后,清空之前的数据
|
|
|
+ CContainerUI* pOrderListLayout = static_cast<CContainerUI*>(this->FindSubControl(_T("orderlist")));
|
|
|
+ pOrderListLayout->RemoveAll();
|
|
|
+
|
|
|
+ rapidjson::Document document;
|
|
|
+ document.Parse(m_response.c_str());
|
|
|
+
|
|
|
+ if (document.HasParseError())
|
|
|
+ {
|
|
|
+ LOG_INFO("parse response error!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
|
|
|
+ {
|
|
|
+ LOG_INFO("json error!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ rapidjson::Value& v_errcode = document["errcode"];
|
|
|
+ int errcode = v_errcode.GetInt();
|
|
|
+ if (errcode != 0)
|
|
|
+ {
|
|
|
+ LOG_INFO("response failed! message:" << document["errmsg"].GetString());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获得数据成功
|
|
|
+ rapidjson::Value& data = document["data"];
|
|
|
+
|
|
|
+ rapidjson::Value& v_count = data["count"];
|
|
|
+ string count = v_count.GetString();
|
|
|
+
|
|
|
+ //处理页数
|
|
|
+ int nCount = atoi(count.c_str());
|
|
|
+ m_total_page = (int)ceil(nCount / 20.0);
|
|
|
+ if (m_total_page < 1)
|
|
|
+ {
|
|
|
+ m_total_page = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_page <= 1)
|
|
|
+ {
|
|
|
+ m_page = 1;
|
|
|
+ CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_last")));
|
|
|
+ pControl->SetEnabled(false);
|
|
|
+ }
|
|
|
+ if (m_page >= m_total_page)
|
|
|
+ {
|
|
|
+ m_page = m_total_page;
|
|
|
+ CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_next")));
|
|
|
+ pControl->SetEnabled(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_page > 1)
|
|
|
+ {
|
|
|
+ CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_last")));
|
|
|
+ pControl->SetEnabled(true);
|
|
|
+ }
|
|
|
+ if (m_page < m_total_page)
|
|
|
+ {
|
|
|
+ CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_next")));
|
|
|
+ pControl->SetEnabled(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ CLabelUI* pControl = static_cast<CLabelUI*>(this->FindSubControl(_T("shoukuan_order_list_page")));
|
|
|
+ wstring pageinfo = _T("第 ") + CLewaimaiString::ANSIToUnicode(to_string(m_page)) + _T("页/共 ") + CLewaimaiString::ANSIToUnicode(to_string(m_total_page)) + _T("页");
|
|
|
+ pControl->SetText(pageinfo.c_str());
|
|
|
+
|
|
|
+ rapidjson::Value& v_rows = data["rows"];
|
|
|
+
|
|
|
+ for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
|
|
|
+ {
|
|
|
+ rapidjson::Value& v_row_i = v_rows[i];
|
|
|
+
|
|
|
+ //创建一个对象
|
|
|
+ CDialogBuilder builder;
|
|
|
+ CDialogBuilderCallbackEx cb;
|
|
|
+
|
|
|
+ CShoukuanOrderItemUI* pItem = static_cast<CShoukuanOrderItemUI*>(builder.Create(_T("shoukuan_order_item.xml"), (UINT)0, &cb, m_pManager));
|
|
|
+ if (pItem != NULL)
|
|
|
+ {
|
|
|
+ //初始化该对应的数据
|
|
|
+ pItem->SetData(v_row_i);
|
|
|
+
|
|
|
+ pOrderListLayout->Add(pItem);
|
|
|
+
|
|
|
+ pItem = NULL;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LOG_INFO("create shoukuan_order_item fail!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //重置滚动条的位置
|
|
|
+ tagSIZE size;
|
|
|
+ size.cx = 0;
|
|
|
+ size.cy = 0;
|
|
|
+ pOrderListLayout->SetScrollPos(size);
|
|
|
+
|
|
|
+ pOrderListLayout->SetVisible(true);
|
|
|
+
|
|
|
+ this->FindSubControl(_T("main_orderlist_loading"))->SetVisible(false);
|
|
|
+}
|
|
|
+
|
|
|
+void CShoukuanOrderListPageUI::LastPage()
|
|
|
+{
|
|
|
+ m_page--;
|
|
|
+ if (m_page < 1)
|
|
|
+ {
|
|
|
+ m_page = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_page == 1)
|
|
|
+ {
|
|
|
+ CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_last")));
|
|
|
+ pControl->SetEnabled(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ Refresh();
|
|
|
+}
|
|
|
+
|
|
|
+void CShoukuanOrderListPageUI::NextPage()
|
|
|
+{
|
|
|
+ m_page++;
|
|
|
+ if (m_page > m_total_page)
|
|
|
+ {
|
|
|
+ m_page = m_total_page;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_page == m_total_page)
|
|
|
+ {
|
|
|
+ CButtonUI* pControl = static_cast<CButtonUI*>(this->FindSubControl(_T("shoukuan_order_list_next")));
|
|
|
+ pControl->SetEnabled(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ Refresh();
|
|
|
+}
|
|
|
+
|
|
|
+void CShoukuanOrderListPageUI::SetPage(int n)
|
|
|
+{
|
|
|
+ m_page = n;
|
|
|
+}
|