فهرست منبع

修复跟导航有关的bug

张洋 3 سال پیش
والد
کامیت
387cb31dbc

+ 2 - 63
zhipuzi_pos_windows/page/CGengduoPageUI.cpp

@@ -19,73 +19,12 @@ CGengduoPageUI::~CGengduoPageUI()
 //初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
 void CGengduoPageUI::InitShow()
 {
+	//在CMainWnd初始化的时候已经对常用和更多2个字符串,根据餐饮和零售的差异进行处理了,这里直接读取数据库最新配置就行,不用再进行任何处理
+
 	//根据当前数据库里面对功能的配置,来初始化显示
 	m_changyongString = CSetting::GetInstance()->GetParam("setting_gongneng_changyong_string");
-
 	m_gengduoString = CSetting::GetInstance()->GetParam("setting_gongneng_gengduo_string");
 
-	//处理一下餐饮和零售版的区别
-	if (CShopinfo::GetInstance()->m_version_type == "1")
-	{
-		//餐饮版不显示扫码收银		
-		std::vector<string> changyong_v = CLewaimaiString::Split(m_changyongString, ",");
-
-		for (std::vector<string>::iterator it = changyong_v.begin(); it != changyong_v.end(); it++)
-		{
-			if (*it == "saomashouyin")
-			{
-				changyong_v.erase(it);
-				break;
-			}
-		}
-
-		m_changyongString = CLewaimaiString::Merge(changyong_v, ",");
-
-		//开始处理更多
-		std::vector<string> gengduo_v = CLewaimaiString::Split(m_gengduoString, ",");
-
-		for (std::vector<string>::iterator it = gengduo_v.begin(); it != gengduo_v.end(); it++)
-		{
-			if (*it == "saomashouyin")
-			{
-				gengduo_v.erase(it);
-				break;
-			}
-		}
-
-		m_gengduoString = CLewaimaiString::Merge(gengduo_v, ",");
-	}
-	else if (CShopinfo::GetInstance()->m_version_type == "2")
-	{
-		//零售版不显示正餐收银
-		std::vector<string> changyong_v = CLewaimaiString::Split(m_changyongString, ",");
-
-		for (std::vector<string>::iterator it = changyong_v.begin(); it != changyong_v.end(); it++)
-		{
-			if (*it == "zhengcan")
-			{
-				changyong_v.erase(it);
-				break;
-			}
-		}
-
-		m_changyongString = CLewaimaiString::Merge(changyong_v, ",");
-
-		//开始处理更多
-		std::vector<string> gengduo_v = CLewaimaiString::Split(m_gengduoString, ",");
-
-		for (std::vector<string>::iterator it = gengduo_v.begin(); it != gengduo_v.end(); it++)
-		{
-			if (*it == "zhengcan")
-			{
-				gengduo_v.erase(it);
-				break;
-			}
-		}
-
-		m_gengduoString = CLewaimaiString::Merge(gengduo_v, ",");
-	}
-
 	Refresh();
 }
 

+ 9 - 5
zhipuzi_pos_windows/wnd/CLoginWnd.cpp

@@ -563,12 +563,16 @@ void CLoginWnd::HandleLogin()
 			return;
 		}
 
-		ret = CShopinfo::GetInstance()->GetTabletypeInfo();
-		if (!ret)
+		if (CShopinfo::GetInstance()->m_version_type == "1")
 		{
-			m_wsLoginErrMsg = L"获取店铺桌子分类失败";
-			PostMessage(WM_LOGIN_ERROR);
-			return;
+			//餐饮版获取桌子分类保存在这里,零售版不用获取
+			ret = CShopinfo::GetInstance()->GetTabletypeInfo();
+			if (!ret)
+			{
+				m_wsLoginErrMsg = L"获取店铺桌子分类失败";
+				PostMessage(WM_LOGIN_ERROR);
+				return;
+			}
 		}
 
 		PostMessage(WM_LOGIN_SUCCESS);

+ 151 - 15
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -38,7 +38,7 @@ void CMainWnd::Init()
 	//初始化所有页面,先创建页面对象,避免切换页面的时候被释放了
 	CreatePages();
 
-	//初始化左侧的功能的导航
+	//初始化左侧的功能的导航(一定要先初始化页面,再初始化导航,因为初始化导航的时候也会初始化默认选中的页面)
 	UpdateGongnengDaohang();
 
     m_pCloseBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("closebtn")));
@@ -962,6 +962,9 @@ void CMainWnd::ShowToast(std::wstring toast_value)
 //根据更多里面的设置,刷新左边的功能导航
 void CMainWnd::UpdateGongnengDaohang()
 {
+	//根据餐饮和零售的差异,先对常用和更多的字符串进行处理
+	this->UpdateGongnengString();
+
 	std::string changyongString = CSetting::GetInstance()->GetParam("setting_gongneng_changyong_string");
 	std::vector<string> changyongVector;
 	if (changyongString == "")
@@ -1072,12 +1075,6 @@ void CMainWnd::UpdateGongnengDaohang()
 		}
 		else if (curName == "zhengcan")
 		{
-			if (CShopinfo::GetInstance()->m_version_type == "2")
-			{
-				//零售版不显示桌台
-				continue;;
-			}
-
 			newOption->SetName(L"main_zhengcan");
 			newOption->SetText(L"桌台");
 
@@ -1086,12 +1083,6 @@ void CMainWnd::UpdateGongnengDaohang()
 		}
 		else if (curName == "saomashouyin")
 		{
-			if (CShopinfo::GetInstance()->m_version_type == "1")
-			{
-				//餐饮版不显示扫码收银
-				continue;;
-			}
-
 			newOption->SetName(L"main_saomashouyin");
 			newOption->SetText(L"收银");
 
@@ -1194,6 +1185,10 @@ void CMainWnd::SwitchPageByName(std::wstring name)
 	{
 		this->SwitchPage(ZHENGCAN);
 	}
+	else if (name == L"main_saomashouyin")
+	{
+		this->SwitchPage(SAOMASHOUYIN);
+	}
 	else if (name == L"main_kucun")
 	{
 		this->SwitchPage(KUCUN);
@@ -1205,6 +1200,7 @@ void CMainWnd::SwitchPageByName(std::wstring name)
 	else
 	{
 		//没开通的页面暂时不跳转
+		return;
 	}
 
 	//处理左侧的高亮与选中状态
@@ -1242,6 +1238,7 @@ void CMainWnd::SwitchPageByName(std::wstring name)
 		}
 	}
 
+	//先取消当前选中的导航
 	if (m_curOption != NULL)
 	{
 		m_curOption->SetBkColor(0x00000000);
@@ -1388,8 +1385,8 @@ void CMainWnd::CreatePages()
 	{
 		CDialogBuilder builder;
 		CDialogBuilderCallbackEx cb;
-		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("kucun_page.xml"), (UINT)0, &cb, &m_pm));
-		m_pages[KUCUN] = pChildContainer;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("saomashouyin_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[SAOMASHOUYIN] = pChildContainer;
 	}
 
 	{
@@ -1402,6 +1399,13 @@ void CMainWnd::CreatePages()
 	{
 		CDialogBuilder builder;
 		CDialogBuilderCallbackEx cb;
+		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("kucun_page.xml"), (UINT)0, &cb, &m_pm));
+		m_pages[KUCUN] = pChildContainer;
+	}
+
+	{
+		CDialogBuilder builder;
+		CDialogBuilderCallbackEx cb;
 		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("zhengcan_diandan_page.xml"), (UINT)0, &cb, &m_pm));
 		m_pages[ZHENGCANDIANDAN] = pChildContainer;
 	}
@@ -1498,4 +1502,136 @@ void CMainWnd::ShowShangcheng()
 
 		pYouhuiDlg->ShowModal();
 	}
+}
+
+void CMainWnd::UpdateGongnengString()
+{
+	//这个map用于记录当前常用和更多有哪些元素
+	std::map<string, string> TmpMap;
+
+	std::string changyongString = CSetting::GetInstance()->GetParam("setting_gongneng_changyong_string");
+	std::vector<string> changyongVector;
+	if (changyongString == "")
+	{
+		changyongVector.clear();
+	}
+	else
+	{
+		changyongVector = CLewaimaiString::Split(changyongString, ",");
+	}
+
+	//考虑到餐饮和零售的差异,这里要对功能导航的内容进行过滤处理
+	std::vector<string> TmpchangyongVector;
+	for (std::vector<string>::iterator it = changyongVector.begin(); it != changyongVector.end(); it++)
+	{
+		if (CShopinfo::GetInstance()->m_version_type == "1")
+		{
+			if (*it == "saomashouyin")
+			{
+				//餐饮版不显示扫码收银
+				continue;
+			}
+
+			//如果以后有其他不显示的,继续加在这里就行
+
+			TmpchangyongVector.push_back(*it);
+
+			TmpMap[*it] = "1";
+		}
+		else if (CShopinfo::GetInstance()->m_version_type == "2")
+		{
+			if (*it == "zhengcan")
+			{
+				//零售版不显示正餐
+				continue;
+			}
+
+			//如果以后有其他不显示的,继续加在这里就行
+
+			TmpchangyongVector.push_back(*it);
+
+			TmpMap[*it] = "1";
+		}
+	}
+
+	//这个时候已经过滤掉了,保存到数据库
+	changyongVector = TmpchangyongVector;
+
+	std::string newChangyong = CLewaimaiString::Merge(changyongVector, ",");
+	CSetting::GetInstance()->SetParam("setting_gongneng_changyong_string", newChangyong);
+
+	//常用的处理完了,开始处理更多的
+	std::string gengduoString = CSetting::GetInstance()->GetParam("setting_gongneng_gengduo_string");
+	std::vector<string> gengduoVector;
+	if (gengduoString == "")
+	{
+		gengduoVector.clear();
+	}
+	else
+	{
+		gengduoVector = CLewaimaiString::Split(gengduoString, ",");
+	}
+
+	//考虑到餐饮和零售的差异,这里要对功能导航的内容进行过滤处理
+	std::vector<string> TmpgengduoVector;
+
+	for (std::vector<string>::iterator it = gengduoVector.begin(); it != gengduoVector.end(); it++)
+	{
+		if (CShopinfo::GetInstance()->m_version_type == "1")
+		{
+			if (*it == "saomashouyin")
+			{
+				//餐饮版不显示扫码收银
+				continue;
+			}
+
+			//如果以后有其他不显示的,继续加在这里就行
+
+			TmpgengduoVector.push_back(*it);
+
+			TmpMap[*it] = "1";
+		}
+		else if (CShopinfo::GetInstance()->m_version_type == "2")
+		{
+			if (*it == "zhengcan")
+			{
+				//零售版不显示正餐
+				continue;
+			}
+
+			//如果以后有其他不显示的,继续加在这里就行
+
+			TmpgengduoVector.push_back(*it);
+
+			TmpMap[*it] = "1";
+		}
+	}
+	
+	//如果发生了餐饮和零售的切换,比如从餐饮切换到零售,因为之前登录餐饮的时候把saomashouyin删除了,现在登录零售的话常用和更多都没有saomashouyin,这里要加入到更多的最后面
+	if (CShopinfo::GetInstance()->m_version_type == "1")
+	{
+		if (TmpMap.find("zhengcan") == TmpMap.end())
+		{
+			//餐饮版这时候没有zhengcan,说明切换过零售版被删除了,这里要加上
+			TmpgengduoVector.push_back("zhengcan");
+		}
+
+		//如果以后有其他餐饮版专属的,要在这里继续添加
+	}
+	else if (CShopinfo::GetInstance()->m_version_type == "2")
+	{
+		if (TmpMap.find("saomashouyin") == TmpMap.end())
+		{
+			//零售版这时候没有saomashouyin,说明切换过餐饮版被删除了,这里要加上
+			TmpgengduoVector.push_back("saomashouyin");
+		}
+
+		//如果以后有其他零售版专属的,要在这里继续添加
+	}
+
+	//这个时候已经过滤掉了不需要的,加上了被删除的,可以保存数据库了
+	gengduoVector = TmpgengduoVector;
+
+	std::string newGengduo = CLewaimaiString::Merge(gengduoVector, ",");
+	CSetting::GetInstance()->SetParam("setting_gongneng_gengduo_string", newGengduo);
 }

+ 3 - 0
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -148,6 +148,9 @@ private:
 	//展示进入智铺子商城的小程序
 	void ShowShangcheng();
 
+	//通过餐饮版、零售版差异,对导航的常用和更多字符串进行处理
+	void UpdateGongnengString();
+
 public:
     CPaintManagerUI m_pm;