Selaa lähdekoodia

开始做正餐的点单页面

张洋 3 vuotta sitten
vanhempi
commit
cdb3bdf8a3

BIN
bin/Win32/Debug/zhipuzi_pos_windows/skin/zhengcan_back.png


+ 270 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/zhengcan_diandan_page.xml

@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window>
+	<ZhengcanDiandanPage>
+		<VerticalLayout name="page_layout">
+			<HorizontalLayout height="60" bkcolor="#FFFFFFFF">
+				<Button name="diandan_page_return" tooltip="返回" width="38" height="38" padding="10,11,0,0" normalimage="file='zhengcan_back.png'" hotimage="" pushedimage=""/>
+				<Label name="diandan_page_table_name" text="" font="28" textcolor="#FF1087FF" width="130" heiht="30" padding="10,10,10,10"></Label>
+			</HorizontalLayout>
+			
+			<Control height="1" bkcolor="#FFEBE8E8"></Control>
+			
+			<HorizontalLayout>
+				<Control width="1" bkcolor="#FFD1D1D1"></Control>
+				
+				<VerticalLayout width="490" bkcolor="#FFFFFFFF">
+					<HorizontalLayout>					
+						<VerticalLayout width="380" padding="0,0,0,0">					
+							<HorizontalLayout height="60">
+								<Control bkimage="member_login.png" width="32" height="32" padding="10,14,0,0"></Control>
+								<Button name="btn_diandan_member_login" align="left" text="会员登录" heiht="38" width="100" padding="10,2,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+								<Label name="diandan_page_member_info" text="" width="130" heiht="30" padding="10,10,10,10" visible="false"></Label>
+								<Control></Control>
+								<Button name="btn_diandan_canpaihao" text="输入餐牌号" heiht="38" width="100" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+								<Control width="1" bkcolor="#FFEBE8E8" padding="5,15,15,15"></Control>
+								<Control bkimage="order_delete.png" width="20" height="20" padding="0,20,0,0"></Control>
+								<Button name="btn_diandan_qingkong" text="清空" heiht="38" width="40" padding="0,0,10,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+							</HorizontalLayout>
+							
+							<HorizontalLayout height="50" bkcolor="#FFF5F5F5">
+								<Control bkimage="beizhu_tishi.png" width="24" height="24" padding="10,13,0,0"></Control>
+								<Label name="diandan_page_label_zhengdanbeizhu" text="整单备注:" heiht="30" padding="10,10,10,10" textcolor="#FF8D8D8D"></Label>
+							</HorizontalLayout>
+													
+							<List name="list_diandan_cart" padding="0,10,0,0" itemlinecolor="#FF000000" vscrollbar="true">
+								<ListHeader inset="10,0,0,0"/>
+								<ListHeaderItem text="商品" width="220" align="left" />
+								<ListHeaderItem text="数量" width="80" align="center" />
+								<ListHeaderItem text="金额" width="80" align="center" />
+							</List>
+							
+							<HorizontalLayout name="diandan_page_youhui_tishi_layout" height="40" bkcolor="#FFFBEEEE" visible="false">
+								<Label name="diandan_page_youhui_tishi" text="已优惠10元" textcolor="#FFFF3838" padding="15,0,0,0" width="270" hegiht="40"></Label>
+								<Button name="btn_diandan_chakanyouhui" text="查看优惠>" heiht="30" width="80" padding="5,0,25,0" textcolor="#FF3CB371" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
+							</HorizontalLayout>
+						</VerticalLayout>
+						
+						<Control width="1" bkcolor="#FFEBE8E8"></Control>
+						
+						<VerticalLayout width="110" padding="0,0,0,0" vscrollbar="true">
+							<Button name="btn_diandan_jia" width="90" height="46" padding="10,80,10,0" text="+" font="24" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+							<Button name="btn_diandan_jian" width="90" height="46" padding="10,15,10,0" text="-" font="24" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+							<Button name="btn_diandan_shanchu" width="90" height="46" padding="10,15,10,0" text="删除" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+							<Button name="btn_diandan_guige" width="90" height="46" padding="10,30,10,0" text="规格/做法" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+							
+							<Button name="btn_diandan_dabao" width="90" height="46" padding="10,15,10,0" text="打包" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+
+							<Label name="diandan_page_qudan_num" text="10" mouse="false" width="19" height="19" align="center" textcolor="#FFFFFFFF" bkimage="num_bkg.png" float="true" pos="85,490,104,509" bordercolor="#FFFF0000" bordersize="0"></Label>
+							
+							<Button name="btn_diandan_zhengdanbeizhu" width="90" height="46" padding="10,15,10,0" text="整单备注" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+							
+							<Button name="btn_diandan_qianxiang" width="90" height="46" padding="10,50,10,30" text="打开钱箱" normalimage="file='Btn_White.png' corner='5,5,5,5'" hotimage="file='Btn_White_Hover.png' corner='5,5,5,5'" pushedimage="file='Btn_White_Click.png' corner='5,5,5,5'" />
+						</VerticalLayout>
+					</HorizontalLayout>
+					
+					<Control height="1" bkcolor="#FFEBE8E8"></Control>
+					
+					<VerticalLayout height="165" bkcolor="#FFFFFFFF">
+						<HorizontalLayout height="70">
+							<Label name="diandan_page_otherprice" text="" width="260" align="left" padding="15,8,0,0"></Label>
+							<Label name="diandan_page_totalprice" text="总价:¥0.00" font="22" textcolor="#FFFF0000" width="200" align="right" padding="0,0,15,0"></Label>
+						</HorizontalLayout>
+						
+						<HorizontalLayout height="90" name="diandan_pay_layout">
+							<Button name="btn_diandan_weixinzhifu_pay" text="" heiht="75" width="110" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFFF4242"></Button>
+							<Control bkimage="weixinzhifu_icon.png" width="24" height="22" float="true" pos="56,10,80,32" mouse="false"></Control>
+							<Label text="微信支付/支付宝/云闪付" multiline="true" width="110" height="40" font="14" float="true" pos="11,35,121,75" textcolor="#FFFFFFFF" mouse="false"></Label>
+							
+							<Button name="btn_diandan_huiyuanzhifu_pay" text="" heiht="75" width="110" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFFF8910"></Button>
+							<Control bkimage="huiyuanzhifu_icon.png" width="26" height="20" float="true" pos="176,12,202,32" mouse="false"></Control>
+							<Label text="会员支付" width="110" height="35" font="14" float="true" pos="159,35,269,70" textcolor="#FFFFFFFF" mouse="false"></Label>
+						
+							<Button name="btn_diandan_xianjinzhifu_pay" text="" heiht="75" width="110" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FF52CB4B"></Button>
+							<Control bkimage="xianjinzhifu_icon.png" width="21" height="24" float="true" pos="297,10,318,34" mouse="false"></Control>
+							<Label text="现金支付" width="110" height="35" font="14" float="true" pos="279,35,389,70" textcolor="#FFFFFFFF" mouse="false"></Label>
+							
+							<Button name="btn_diandan_gengduozhifu_pay" text="" heiht="75" width="108" padding="10,0,0,15" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFC1C1C1" bkcolor="#FFF7F7F7"></Button>
+							<Control bkimage="gengduozhifu_icon.png" width="21" height="21" float="true" pos="413,10,434,31" mouse="false"></Control>
+							<Label text="更多支付" width="110" height="35" font="14" float="true" pos="394,35,504,70" mouse="false"></Label>
+						</HorizontalLayout>
+						
+						<Button visible="false" name="btn_diandan_jixujiacai" text="继续点单" height="55" padding="20,20,20,15" textcolor="#FFFFFFFF"></Button>
+					</VerticalLayout>
+				</VerticalLayout>
+				
+				<Control width="1" bkcolor="#FFEBE8E8"></Control>
+				
+				<VerticalLayout name="diandan_food_layout">
+					<VerticalLayout name="diandan_fenlei_layout_scrolllayout" vscrollbar="true">
+						<HorizontalLayout name="diandan_fenlei_layout" padding="0,0,0,0" bkcolor="#FFFFFFFF">
+
+						</HorizontalLayout>
+					</VerticalLayout>
+					
+					<TileLayout name="diandan_foodlist" padding="0,0,0,0" inset="15,15,15,15" childpadding="1" itemsize="160,250" vscrollbar="true" hscrollbar="false">
+					
+					</TileLayout>
+					
+					<HorizontalLayout height="70" padding="0,0,0,0" bkcolor="#FFFFFFFF">
+						<Edit name="diandan_food_search_edit" tooltip="请输入商品名字搜索" width="380" height="50" padding="30,10,0,10" textpadding="50,0,50,0" borderround="45,45" bkcolor="#FFECEFED" nativebkcolor="#FFECEFED" />
+						
+						<Label name="diandan_food_search_tishi" text="请输入商品名字搜索" width="120" height="35" font="16" float="true" pos="90,18,425,50" mouse="false"></Label>
+						
+						<Control bkimage="search_icon.png" width="25" height="26" pos="45,23,70,49" float="true"></Control>
+						
+						<Button name="diandan_food_search_clear" visible="false" normalimage="search_clear.png" hotimage="search_clear.png" pushedimage="search_clear.png" bkimage="search_clear.png" width="23" height="23" pos="365,23,68,46" float="true"></Button>
+					</HorizontalLayout>
+				</VerticalLayout>
+				
+				<HorizontalLayout name="diandan_jiesuan_layout" bkcolor="#FFFFFFFF" visible="false" hscrollbar="true">
+					<VerticalLayout width="390">
+						<Label text="选择优惠" width="100" height="58" padding="20,0,0,0" font="20"></Label>
+						
+						<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
+						
+						<HorizontalLayout padding="0,15,0,0" height="48">
+							<Label text="整单折扣:" width="90" height="48" padding="20,0,0,0"></Label>
+							<Button name="diandan_jiesuan_zhekou_value" text="" heiht="48" width="220" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFA9A9A9" bkcolor="#00FFFFFF"></Button>
+							<Label text="%" width="60" height="48" padding="20,0,0,0"></Label>
+						</HorizontalLayout>
+						
+						<HorizontalLayout padding="0,15,0,0" height="48">
+							<Label text="加价:" width="90" height="48" padding="20,0,0,0"></Label>
+							<Button name="diandan_jiesuan_jiajia_value" text="" heiht="48" width="220" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFA9A9A9" bkcolor="#00FFFFFF"></Button>
+							<Label text="元" width="60" height="48" padding="20,0,0,0"></Label>
+						</HorizontalLayout>
+						
+						<HorizontalLayout padding="0,15,0,0" height="48">
+							<Label text="优惠:" width="90" height="48" padding="20,0,0,0"></Label>
+							<Button name="diandan_jiesuan_youhui_value" text="" heiht="48" width="220" padding="0,0,0,0" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFA9A9A9" bkcolor="#00FFFFFF"></Button>
+							<Label text="元" width="60" height="48" padding="20,0,0,0"></Label>
+						</HorizontalLayout>
+						
+						<HorizontalLayout padding="0,15,0,0" height="48">
+							<Label text="优惠券:" width="90" height="48" padding="20,0,0,0"></Label>
+							<Label name="diandan_jiesuan_youhuiquan_status" text="未使用" width="70" height="48" padding="0,0,0,0"></Label>
+							<Button name="diandan_jiesuan_youhuiquan_btn" text="扫码使用" heiht="35" width="90" padding="0,6,0,0" textcolor="#FF41A846" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FF41A846" bkcolor="#FFFFFFFF"></Button>
+							<Button name="diandan_jiesuan_youhuiquan_btn_cancel" visible="false" text="取消使用" heiht="35" width="90" padding="15,6,0,0" textcolor="#FFFF6666" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFFF6666" bkcolor="#FFFFFFFF"></Button>
+						</HorizontalLayout>
+						
+						<HorizontalLayout padding="0,15,0,0" height="48">
+							<Label text="商品券:" width="90" height="48" padding="20,0,0,0"></Label>
+							<Label name="diandan_jiesuan_shangpinquan_status" text="未使用" width="70" height="48" padding="0,0,0,0"></Label>
+							<Button name="diandan_jiesuan_shangpinquan_btn" text="扫码使用" heiht="35" width="90" padding="0,6,0,0" textcolor="#FF41A846" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FF41A846" bkcolor="#FFFFFFFF"></Button>
+							<Button name="diandan_jiesuan_shangpinquan_btn_cancel" visible="false" text="取消使用" heiht="35" width="90" padding="15,6,0,0" textcolor="#FFFF6666" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFFF6666" bkcolor="#FFFFFFFF"></Button>
+						</HorizontalLayout>
+						
+						<HorizontalLayout padding="0,15,0,0" height="48">
+							<Label text="次卡:" width="90" height="48" padding="20,0,0,0"></Label>
+							<Label name="diandan_jiesuan_cika_status" text="未使用" width="70" height="48" padding="0,0,0,0"></Label>
+							<Button name="diandan_jiesuan_cika_btn" text="扫码使用" heiht="35" width="90" padding="0,6,0,0" textcolor="#FF41A846" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FF41A846" bkcolor="#FFFFFFFF"></Button>
+							<Button name="diandan_jiesuan_cika_btn_cancel" visible="false" text="取消使用" heiht="35" width="90" padding="15,6,0,0" textcolor="#FFFF6666" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFFF6666" bkcolor="#FFFFFFFF"></Button>
+						</HorizontalLayout>
+						
+						<HorizontalLayout padding="0,15,0,0" height="48">
+							<Label text="权益卡:" width="90" height="48" padding="20,0,0,0"></Label>
+							<Label name="diandan_jiesuan_quanyika_status" text="未使用" width="70" height="48" padding="0,0,0,0"></Label>
+							<Button name="diandan_jiesuan_quanyika_btn" text="扫码使用" heiht="35" width="90" padding="0,6,0,0" textcolor="#FF41A846" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FF41A846" bkcolor="#FFFFFFFF"></Button>
+							<Button name="diandan_jiesuan_quanyika_btn_cancel" visible="false" text="取消使用" heiht="35" width="90" padding="15,6,0,0" textcolor="#FFFF6666" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFFF6666" bkcolor="#FFFFFFFF"></Button>
+						</HorizontalLayout>
+						
+						<HorizontalLayout padding="0,15,0,0" height="130">
+							<Label text="抹零:" width="90" height="48" padding="20,0,0,0"></Label>
+							<VerticalLayout padding="0,10,0,0">
+								<HorizontalLayout padding="0,0,30,0" width="200" height="30">
+									<CheckBox name="diandan_jiesuan_moling_bumoling" group="diandan_jiesuan_moling" padding="0,7,0,7" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+									<Label name="" text="不抹零" width="150" height="30" padding="15,0,0,0"/>
+								</HorizontalLayout>
+								
+								<HorizontalLayout padding="0,0,30,0" width="200" height="30">
+									<CheckBox name="diandan_jiesuan_moling_molingdaojiao" group="diandan_jiesuan_moling" padding="0,7,0,7" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+									<Label name="" text="抹零到角" width="150" height="30" padding="15,0,0,0"/>
+								</HorizontalLayout>
+								
+								<HorizontalLayout padding="0,0,30,0" width="200" height="30">
+									<CheckBox name="diandan_jiesuan_moling_molingdaoyuan" group="diandan_jiesuan_moling" padding="0,7,0,7" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+									<Label name="" text="抹零到元" width="150" height="30" padding="15,0,0,0"/>
+								</HorizontalLayout>
+							</VerticalLayout>
+						</HorizontalLayout>
+					</VerticalLayout>
+					
+					<Control width="1" bkcolor="#FFEBE8E8"></Control>
+					
+					<VerticalLayout name="diandan_page_jiesuan_zhangdan_layout" vscrollbar="true">
+						<Label text="账单明细" height="58" padding="20,0,0,0" font="20"></Label>
+						
+						<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
+						
+						<VerticalLayout name="diandan_jiesuan_zhangdanmingxi_jiage_layout" padding="20,0,20,0" height="100">
+						
+						</VerticalLayout>
+						
+						<Control height="1" bkcolor="#FFEBE8E8" padding="10,10,10,0"></Control>
+						
+						<HorizontalLayout height="50">
+							<Control></Control>
+							<Label name="diandan_jiesuan_total_yingshou" text="" width="150" height="50" align="right" padding="0,0,15,0"/>
+						</HorizontalLayout>
+						
+						<Label text="支付方式" width="100" height="58" padding="20,30,0,0" font="20"></Label>
+						
+						<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
+						
+						<HorizontalLayout name="diandan_jiesuan_zhifufangshi_layout">
+							<HorizontalLayout name="diandan_jiesuan_zhifufangshi_weixinzhifu" width="120" hegiht="80" float="true">
+								<Button name="diandan_jiesuan_zhifufangshi_weixinzhifu_btn" text="" heiht="80" width="120" padding="0,0,0,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFFF4242"></Button>
+								<Control name="zhifu_icon" bkimage="weixinzhifu_icon.png" width="24" height="22" float="true" pos="53,10,77,32" mouse="false"></Control>
+								<Label name="zhifu_name" text="微信支付/支付宝/云闪付" multiline="true" width="115" height="40" font="14" float="true" pos="2,35,117,75" textcolor="#FFFFFFFF" mouse="false"></Label>
+							</HorizontalLayout>
+							
+							<HorizontalLayout name="diandan_jiesuan_zhifufangshi_huiyuan" width="120" hegiht="80" float="true">
+								<Button name="diandan_jiesuan_zhifufangshi_huiyuan_btn" text="" heiht="80" width="120" padding="0,0,0,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FFFF8910"></Button>
+								<Control name="zhifu_icon" bkimage="huiyuanzhifu_icon.png" width="26" height="20" float="true" pos="50,10,76,30" mouse="false"></Control>
+								<Label name="zhifu_name" text="会员支付" width="180" height="35" font="14" float="true" pos="30,35,210,70" textcolor="#FFFFFFFF" mouse="false"></Label>
+							</HorizontalLayout>
+							
+							<HorizontalLayout name="diandan_jiesuan_zhifufangshi_xianjin" width="120" hegiht="80" float="true">
+								<Button name="diandan_jiesuan_zhifufangshi_xianjin_btn" text="" heiht="80" width="120" padding="0,0,0,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#FF52CB4B"></Button>
+								<Control name="zhifu_icon" bkimage="xianjinzhifu_icon.png" width="21" height="24" float="true" pos="50,10,71,34" mouse="false"></Control>
+								<Label name="zhifu_name" text="现金支付" width="180" height="35" font="14" float="true" pos="30,35,210,70" textcolor="#FFFFFFFF" mouse="false"></Label>
+							</HorizontalLayout>
+							
+							<!--
+							<HorizontalLayout name="diandan_jiesuan_zhifufangshi_gouwuka" width="122" hegiht="80" float="true">
+								<Button name="diandan_jiesuan_zhifufangshi_gouwuka_btn" text="" heiht="80" width="120" padding="0,0,0,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFC1C1C1" bkcolor="#FFF7F7F7"></Button>
+								<Control name="zhifu_icon" bkimage="gouwuka_icon.png" width="34" height="28" float="true" pos="45,10,79,38" mouse="false"></Control>
+								<Label name="zhifu_name" text="购物卡" width="180" height="35" font="14" float="true" pos="38,35,218,70" mouse="false"></Label>
+							</HorizontalLayout>
+							
+							<HorizontalLayout name="diandan_jiesuan_zhifufangshi_meishicheng" width="122" hegiht="80" float="true">
+								<Button name="diandan_jiesuan_zhifufangshi_meishicheng_btn" text="" heiht="80" width="120" padding="0,0,0,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFC1C1C1" bkcolor="#FFF7F7F7"></Button>
+								<Control name="zhifu_icon" bkimage="meishicheng_icon.png" width="37" height="27" float="true" pos="48,10,85,37" mouse="false"></Control>
+								<Label name="zhifu_name" text="美食城临时卡" width="180" height="35" font="14" float="true" pos="25,35,205,70" mouse="false"></Label>
+							</HorizontalLayout>
+							-->
+							
+							<HorizontalLayout name="diandan_jiesuan_zhifufangshi_fulika" width="122" hegiht="80" float="true">
+								<Button name="diandan_jiesuan_zhifufangshi_fulika_btn" text="" heiht="80" width="120" padding="0,0,0,0" textcolor="#FF999999" normalimage="" hotimage="" pushedimage="" bordersize="1" bordercolor="#FFC1C1C1" bkcolor="#FFF7F7F7"></Button>
+								<Control name="zhifu_icon" bkimage="fulika_icon.png" width="30" height="30" float="true" pos="48,10,78,40" mouse="false"></Control>
+								<Label name="zhifu_name" text="福利卡" width="180" height="35" font="14" float="true" pos="40,35,220,70" mouse="false"></Label>
+							</HorizontalLayout>
+						</HorizontalLayout>
+					</VerticalLayout>
+				</HorizontalLayout>
+			</HorizontalLayout>
+		</VerticalLayout>
+		
+		<HorizontalLayout name="loading">
+			<Control></Control>
+			<VerticalLayout width="24">
+				<Control></Control>
+				<HorizontalLayout height="24">
+					<GifAnim bkimage="loading.gif" autosize="true"></GifAnim>
+				</HorizontalLayout>
+				<Control></Control>
+			</VerticalLayout>
+			<Control></Control>
+		</HorizontalLayout>
+	</ZhengcanDiandanPage>
+</Window>

+ 1 - 1
bin/Win32/Debug/zhipuzi_pos_windows/skin/zhengcan_tableitem.xml

@@ -9,7 +9,7 @@
 		<Control></Control>
 		<HorizontalLayout name="zhengcan_tableitem_bottom" height="32" bkcolor="#FFEBEBEB">
 			<Control name="people_image" bkimage="zhengcan_people_2.png" float="true" pos="10,9,28,25"></Control>
-			<Label name="renshu" visible="true" width="50" height="26" font="14" text="6人" float="true" pos="33,5,63,30"></Label>
+			<Label name="renshu" visible="true" width="50" height="26" font="14" text="6人" float="true" pos="33,5,90,30"></Label>
 
 			<Control name="time_image" bkimage="zhengcan_time_2.png" float="true" pos="97,10,115,26"></Control>			
 			<Label name="shijian" visible="true" font="14" text="" float="true" pos="113,5,175,30"></Label>	

+ 4 - 1
zhipuzi_pos_windows/control/CZhengcanTableItemUI.cpp

@@ -34,7 +34,7 @@ void CZhengcanTableItemUI::DoEvent(TEventUI& event)
 	CVerticalLayoutUI::DoEvent(event);
 }
 
-void CZhengcanTableItemUI::SetInfo(std::string table_id, std::string table_name, std::string type_id, std::string status, std::string order_init_time, std::string from_type, std::string order_status, std::string order_id)
+void CZhengcanTableItemUI::SetInfo(std::string table_id, std::string table_name, std::string type_id, std::string status, std::string order_init_time, std::string from_type, std::string order_status, std::string order_id, std::string limit_number)
 {
 	m_table_id = table_id;
 	m_table_name = table_name;
@@ -44,6 +44,7 @@ void CZhengcanTableItemUI::SetInfo(std::string table_id, std::string table_name,
 	m_from_type = from_type;
 	m_order_status = order_status;
 	m_order_id = order_id;
+	m_limit_number = limit_number;
 }
 
 void CZhengcanTableItemUI::UpdateShow()
@@ -59,6 +60,8 @@ void CZhengcanTableItemUI::UpdateShow()
 	CControlUI* pPeopleImage = static_cast<CControlUI*>(this->FindSubControl(_T("people_image")));
 	CControlUI* pTimeImage = static_cast<CControlUI*>(this->FindSubControl(_T("time_image")));
 
+	pRenshu->SetText(CLewaimaiString::UTF8ToUnicode(m_limit_number).c_str());
+
 	if (m_status == "0")
 	{
 		//δ¿ªÌ¨

+ 2 - 1
zhipuzi_pos_windows/control/CZhengcanTableItemUI.h

@@ -13,7 +13,7 @@ public:
 
 	void DoEvent(TEventUI& event);
 
-	void SetInfo(std::string table_id, std::string table_name, std::string type_id, std::string status, std::string order_init_time, std::string from_type, std::string order_status, std::string order_id);
+	void SetInfo(std::string table_id, std::string table_name, std::string type_id, std::string status, std::string order_init_time, std::string from_type, std::string order_status, std::string order_id, std::string limit_number);
 
 	//刷新显示
 	void UpdateShow();
@@ -47,5 +47,6 @@ private:
 	std::string m_from_type;
 	std::string m_order_status;
 	std::string m_order_id;
+	std::string m_limit_number;
 };
 

+ 5 - 0
zhipuzi_pos_windows/control/ControlEx.h

@@ -19,6 +19,7 @@
 #include "../page/CCaigouPageUI.h"
 #include "../page/CShangpinCreatePageUI.h"
 #include "../page/CShangpinUpdatePageUI.h"
+#include "../page/CZhengcanDiandanPageUI.h"
 
 #include "CWaimaiOrderItemUI.h"
 #include "CDianneiOrderItemUI.h"
@@ -103,6 +104,10 @@ public:
 		{
 			return new CShangpinUpdatePageUI;
 		}
+		else if (_tcscmp(pstrClass, _T("ZhengcanDiandanPage")) == 0)
+		{
+			return new CZhengcanDiandanPageUI;
+		}
 
 		//控件相关的
 		else if (_tcscmp(pstrClass, _T("WaimaiOrderItem")) == 0)

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 3852 - 0
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.cpp


+ 343 - 0
zhipuzi_pos_windows/page/CZhengcanDiandanPageUI.h

@@ -0,0 +1,343 @@
+#pragma once
+
+#include "../pch/pch.h"
+#include "CBasePageUI.h"
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodtype.h"
+#include "../zhipuzi/CFoodpackage.h"
+
+#include "../control/CDiandanFoodItemUI.h"
+#include "../zhipuzi/CZhengcanOrder.h"
+
+#include "../wnd/CModalWnd.h"
+
+class CZhengcanDiandanPageUI : public CBasePageUI
+{
+public:
+	CZhengcanDiandanPageUI();
+	~CZhengcanDiandanPageUI();
+
+	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
+	void InitShow();
+
+	//这个是获取到桌位和订单相关信息之后执行的函数,初始化桌位和订单的显示
+	void InitTableShow();
+
+	//收款一个订单成功,准备开始收款第2个订单的时候调用(会多次调度用)
+	void RefreshShow();
+
+	//获取桌子信息和参数
+	void GetTableInfo();
+
+	//实际执行获取桌子信息的线程
+	void DoGetTableInfo();
+
+	//初始化商品分类的显示
+	void InitFoodtypeShow();
+
+	void UpdateFoodtypePos();
+
+	//根据当前选择的分类,刷新商品展示
+	void InitFoodShow();
+
+	//仅仅初始化结算相关的显示(比如折扣、优惠、价格等)
+	void InitJiesuanShow();
+
+	//初始化结算页面的支付方式展示(仅需要在页面初始化的时候调用一次,这里只添加支付方式,不设置位置)
+	void InitJiesuanZhifu();
+
+	//这个只更新结算页面支付方式的位置,不处理控件添加
+	void UpdateJiesuanZhifuPos();
+
+	//展示结算页面,隐藏选购页面
+	void ShowJiesuanPage();
+
+	//展示选购页面,隐藏结算页面
+	void ShowXuangouPage();
+
+	//只是刷新取单数量
+	void RefreshGuadanNum();
+
+	//处理按钮点击类事件
+	void HandleClickMsg(TNotifyUI& msg);
+
+	//处理option切换事件
+	void HandleSelectChangeMsg(TNotifyUI& msg);
+
+	//处理下拉框、radio的切换事件
+	void HandleItemSelectMsg(TNotifyUI& msg);
+
+	//处理编辑框输入内容改变事件
+	void HandleTextChangedMsg(TNotifyUI& msg);
+
+	//处理扫码枪捕捉到的扫码信息
+	void HandleTextCapture(std::string content);
+
+	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
+	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+	{
+		return false;
+	}
+
+	//添加一个新的商品到购物车展示
+	void AddDiandanOrderItemShow(int index);
+
+	//刷新某个购物车商品的显示
+	void UpdateDiandanOrderItemShow(int index);
+
+	//删除购物车中某一个商品
+	void DelDiandanOrderItemShow(int index);
+
+	//清空购物车中所有商品的展示
+	void ClearDiandanOrderItemShow();
+
+	//任何可以引起价格变化的,比如添加、修改、删除商品,或者修改优惠等,需要重新计算总价格,刷新结算账单等地方的显示,都要调用这个方法
+	void UpdateJiesuanInfo();
+
+	//点击某一个商品的item之后的处理逻辑
+	void ClickFoodAction();
+
+	//点击加号之后的逻辑
+	void ClickAdd();
+
+	//点击减号之后的逻辑
+	void ClickDel();
+
+	//点击删除之后的逻辑
+	void ClickRemove();
+
+	//点击规格之后的逻辑
+	void ClickGuige();
+
+	//点击打包之后的逻辑
+	void ClickDabao();
+
+	//点击清空之后的逻辑
+	void ClickQingkong();
+
+	//点击整单备注之后的逻辑
+	void ClickZhengdanMemo();
+
+	//点击更多支付之后的逻辑
+	void ClickGengduoPay();
+
+	//点击继续加菜之后的逻辑
+	void JixuJiacai();
+
+	//点击查看优惠
+	void ClickChakanYouhui();
+
+	//处理会员登录
+	void ClickMemberLogin();
+
+	//点击整单折扣
+	void ClickZhekou();
+
+	//点击加价
+	void ClickJiajia();
+
+	//点击优惠
+	void ClickRengongyouhui();
+
+	//点击扫码使用优惠券
+	void ClickSaomaYouhuiquan();
+
+	//点击扫码商品券
+	void ClickSaomaShangpinquan();
+
+	//点击扫码权益卡
+	void ClickSaomaQuanyika();
+
+	//点击扫码次卡
+	void ClickSaomaCika();
+
+	//点击取消使用优惠券
+	void ClickQuxiaoYouhuiquan();
+
+	//点击取消商品券
+	void ClickQuxiaoShangpinquan();
+
+	//点击取消权益卡
+	void ClickQuxiaoQuanyika();
+
+	//点击取消次卡
+	void ClickQuxiaoCika();
+
+	//点击餐牌号按钮
+	void ClickCanpai();
+
+	//开始进行微信支付收款,如果fukuanma不为空,默认自动唤起支付
+	void StartWeixinzhifuShoukuan(std::string fukuanma = "");
+
+	//开始进行会员收款
+	void StartHuiyuanShoukuan();
+
+	//开始进行现金收款
+	void StartXianjinShoukuan();
+
+	//开始进行福利卡收款
+	void StartFulikaShoukuan();
+
+	//开始自定义支付收款
+	void StartZidingyiShoukuan(std::wstring name, std::wstring selfpay_id);
+
+	//支付成功后,更新商品库存
+	void UpdateFoodStock(std::string food_stock);
+
+	//扫描了商品条码的逻辑处理,如果找到了这个条码的商品就返回true,如果没找到就返回false
+	bool SaomiaoBarcode(std::string barcode);
+
+	//判断是不是标签秤的条码,并进行处理,返回true表示是标签秤的条码,返回false表示不是
+	bool BiaoqianchengSaomaBarcode(std::string barcode);
+
+	//开始搜索某个商品名字
+	void StartSearchFood(std::string foodname);
+
+	//停止搜索商品
+	void StopSerachFood();
+
+	//执行付款成功后的所有操作逻辑
+	void StartWorkAfterShoukuan(std::string kucunstring, std::string take_food_code, std::string show_trade_no, std::string shoukuan_type, std::string balance = "", std::string member_number = "");
+
+	void SetPos(RECT rc, bool bNeedInvalidate = true);
+
+	void SetTableId(std::string table_id);
+
+private:
+	//获取用于提交订单的参数结构
+	std::map<string, string> GetSendorderParams();
+
+	//用于支付完成后,获取用于打印的order
+	CZhengcanOrder GetPrintOrderinfo(std::string take_food_code, std::string show_trade_no, std::string shoukuan_type, std::string balance, std::string member_number);
+
+private:
+	CTileLayoutUI* m_foodLayout;
+	CHorizontalLayoutUI* m_foodtypeLayout;
+
+	bool m_is_zidingyizhifu_init = false;
+
+	//套餐商品数量
+	int m_nFoodpackageNum;
+
+	//所有商品分类(只包含收银机显示的分类)
+	std::vector<CFoodType> m_types;
+
+	//当前选中的商品分类ID,为空表示没选中任何分类,为taocan表示选中套餐分类,如果选中普通商品分类就是分类ID
+	std::string m_cur_type_id = "";
+	CControlUI* m_curFoodtypeOption;
+
+	//商品搜索相关
+	std::string m_type_id_before_sousuo;
+	std::string m_sousuo_foodname;
+
+	//当前点击的哪个商品
+	CDiandanFoodItemUI* m_cur_click_food_item;
+
+	//当前购物车的订单,根据这个来进行渲染显示
+	CZhengcanOrder m_cur_diandan_order;
+
+	//当前挂单的订单
+	std::vector<CZhengcanOrder> m_guadan_orders;
+
+	//下面是结算相关信息
+
+	//总的优惠
+	double m_total_youhui;
+
+	//折扣
+	int m_zhekou_value;
+	double m_zhekou_youhui;
+
+	//人工加价
+	double m_jiajia;
+
+	//人工优惠
+	double m_rengong_youhui;
+
+	//开台费
+	double m_kaitai;
+
+	//茶位费
+	double m_chawei;
+
+	//打包费
+	double m_dabao;
+
+	//优惠券
+	bool m_is_youhuiquan;
+	std::string m_youhuiquan_id;
+	std::string m_coupon_basic_price;
+	std::string m_coupon_deadline;
+	std::string m_coupon_value;
+	double m_youhuiquan_youhui;
+
+	//商品券
+	bool m_is_shangpinquan; //是否核销的商品券
+	std::string m_shangpinquan_lewaimai_customer_id;
+	std::string m_shangpinquan_id;
+	std::string m_shangpinquan_name;
+	std::string m_shangpinquan_foodid;
+	double m_shangpinquan_youhui; //商品券优惠金额
+
+	//次卡
+	bool m_is_cika;
+	std::string m_cika_lewaimai_customer_id;
+	std::string m_cika_id;
+	std::string m_cika_deduct_type; //次卡优惠类型,0=>折扣,1=>满减,2=>抵扣,3=>指定商品兑换
+	std::string m_cika_discount; //折扣信息
+	std::string m_cika_discount_value; //折扣打折值
+	std::string m_cika_full_reduce; //满减信息
+	std::string m_cika_full_reduce_value; //满减,例如 200,100中间逗号隔开
+	std::string m_cika_offer;
+	std::string m_cika_offer_value;
+	std::string m_cika_bind_foods_id;
+	double m_cika_youhui;
+
+	//权益卡
+	bool m_is_quanyika;
+	std::string m_quanyika_discount; //这里是接口返回的,实际上店铺设置里面也有一个
+	double m_quanyika_youhui;
+
+	//抹零 0:不抹零 1:抹零到角 2:抹零到元
+	int m_moling_type;
+	double m_moling_youhui;
+
+	//会员相关
+	bool m_is_member = false;
+	std::string m_member_name;
+	std::string m_member_level;
+	std::string m_member_level_name;
+
+	double m_total_member_youhui; //会员商品优惠
+
+	bool m_is_member_zhekou = false;
+	std::string m_member_zhekou_value; //具体会员打几折
+	double m_member_zhekou_youhui; //会员店铺折扣优惠
+
+	//满减
+	double m_manjian_youhui;
+
+	//当前应收总价
+	double m_cur_total_price;
+
+	//仅用于现金收银成功后,对于实收和找零的临时记录
+	std::string m_shishou_value;
+	std::string m_zhaoling_value;
+
+	//餐牌
+	std::string m_canpai;
+
+	//模态对话框有关的
+	bool m_is_show_modal_wnd = false;
+	CModalWnd* m_curModalWnd;
+
+	//结算页面总的支付方式数量
+	int m_nZhiufuNum;
+
+	//当前控件的实际宽度
+	int m_nPageWidth;
+
+	//当前点餐对应的桌子id
+	std::string m_table_id;
+};

+ 6 - 3
zhipuzi_pos_windows/page/CZhengcanPageUI.cpp

@@ -312,12 +312,12 @@ void CZhengcanPageUI::DoRefreshTable()
 
 		CZhengcanTableItemUI* pItem = static_cast<CZhengcanTableItemUI*>(builder.Create(_T("zhengcan_tableitem.xml"), (UINT)0, &cb, m_pManager));
 
-		pItem->SetInfo(CLewaimaiJson::ToString(tableinfo["table_id"]), CLewaimaiJson::ToString(tableinfo["name"]), CLewaimaiJson::ToString(tableinfo["type_id"]), CLewaimaiJson::ToString(tableinfo["status"]), CLewaimaiJson::ToString(tableinfo["order_init_time"]), CLewaimaiJson::ToString(tableinfo["from_type"]), CLewaimaiJson::ToString(tableinfo["order_status"]), CLewaimaiJson::ToString(tableinfo["order_id"]));
+		pItem->SetInfo(CLewaimaiJson::ToString(tableinfo["table_id"]), CLewaimaiJson::ToString(tableinfo["name"]), CLewaimaiJson::ToString(tableinfo["type_id"]), CLewaimaiJson::ToString(tableinfo["status"]), CLewaimaiJson::ToString(tableinfo["order_init_time"]), CLewaimaiJson::ToString(tableinfo["from_type"]), CLewaimaiJson::ToString(tableinfo["order_status"]), CLewaimaiJson::ToString(tableinfo["order_id"]), CLewaimaiJson::ToString(tableinfo["limit_number"]));
 
 		pItem->UpdateShow();
 
 		m_tableLayout->Add(pItem);
-
+		
 		m_table_num++;
 	}
 
@@ -444,7 +444,7 @@ void CZhengcanPageUI::ClickTableAction()
 	else if (status == "2")
 	{
 		//ÒÑ¿ªÌ¨
-
+		this->EnterTable(table_id);
 	}
 }
 
@@ -499,5 +499,8 @@ bool CZhengcanPageUI::Kaitai(std::string table_id, std::string renshu)
 
 void CZhengcanPageUI::EnterTable(std::string table_id)
 {
+	CZhengcanDiandanPageUI* page = static_cast<CZhengcanDiandanPageUI*>(m_pMainWnd->GetPage(CMainWnd::ZHENGCANDIANDAN));
+	page->SetTableId(table_id);
 
+	m_pMainWnd->SwitchPage(CMainWnd::ZHENGCANDIANDAN);
 }

+ 12 - 0
zhipuzi_pos_windows/print/CPosPrinter.cpp

@@ -132,6 +132,18 @@ void CPosPrinter::PrintDiandanOrder(std::string order_id)
 	PrintDiandanOrder(order);
 }
 
+//完成所有打印一个正餐订单的操作(不等待,立即返回)
+void CPosPrinter::PrintZhengcanOrder(CZhengcanOrder& order)
+{
+
+}
+
+//通过订单号打印订单,后面要改成异步才行
+void CPosPrinter::PrintZhengcanOrder(std::string order_id)
+{
+
+}
+
 void CPosPrinter::PirntJiaobanOrder(CJiaobaoOrder& order)
 {
 	CPosPrinterData printData;

+ 6 - 0
zhipuzi_pos_windows/print/CPosPrinter.h

@@ -24,6 +24,12 @@ public:
 	//通过订单号打印订单,后面要改成异步才行
 	void PrintDiandanOrder(std::string order_id);
 
+	//完成所有打印一个正餐订单的操作(不等待,立即返回)
+	void PrintZhengcanOrder(CZhengcanOrder& order);
+
+	//通过订单号打印订单,后面要改成异步才行
+	void PrintZhengcanOrder(std::string order_id);
+
 	//打印交班单
 	void PirntJiaobanOrder(CJiaobaoOrder& order);
 

+ 1 - 0
zhipuzi_pos_windows/print/CPosPrinterData.h

@@ -3,6 +3,7 @@
 #include "../pch/pch.h"
 #include "../zhipuzi/CWaimaiOrder.h"
 #include "../zhipuzi/CDiandanOrder.h"
+#include "../zhipuzi/CZhengcanOrder.h"
 #include "../zhipuzi/CJiaobanOrder.h"
 #include "../zhipuzi/CHuiyuanchognzhiOrder.h"
 

+ 11 - 0
zhipuzi_pos_windows/tool/CShuangpingTool.cpp

@@ -117,3 +117,14 @@ void CShuangpingTool::UpdateShow(CDiandanOrder& order, double total_youhui, doub
 
 	m_pFuping->UpdateShow(order, total_youhui, total_price, dabao_money);
 }
+
+void CShuangpingTool::UpdateShow(CZhengcanOrder& order, double total_youhui, double total_price, double dabao_money)
+{
+	if (m_is_shuangping == false)
+	{
+		//如果都没双屏,就不处理了
+		return;
+	}
+
+	m_pFuping->UpdateShow(order, total_youhui, total_price, dabao_money);
+}

+ 3 - 0
zhipuzi_pos_windows/tool/CShuangpingTool.h

@@ -2,6 +2,7 @@
 
 #include "../wnd/CFupingWnd.h"
 #include "../zhipuzi/CDiandanOrder.h"
+#include "../zhipuzi/CZhengcanOrder.h"
 
 class CShuangpingTool
 {
@@ -25,6 +26,8 @@ public:
 	//刷新副屏显示,在点单页面的商品或价格发生变化时调用,重新计算渲染副屏显示数据
 	void UpdateShow(CDiandanOrder& order, double total_youhui, double total_price, double dabao_money);
 
+	void UpdateShow(CZhengcanOrder& order, double total_youhui, double total_price, double dabao_money);
+
 private:
 	CShuangpingTool();
 

+ 1 - 0
zhipuzi_pos_windows/wnd/CDiandanNatureWnd.h

@@ -7,6 +7,7 @@
 #include "../control/CDiandanNatureItemUI.h"
 #include "../zhipuzi/CDiandanOrder.h"
 
+
 #include "CModalWnd.h"
 
 class CDiandanNatureWnd : public CModalWnd

+ 93 - 0
zhipuzi_pos_windows/wnd/CFupingWnd.cpp

@@ -300,6 +300,99 @@ void CFupingWnd::UpdateShow(CDiandanOrder& order, double total_youhui, double to
 	pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(total_price, 2))).c_str());
 }
 
+void CFupingWnd::UpdateShow(CZhengcanOrder& order, double total_youhui, double total_price, double dabao_money)
+{
+	//先清空当前的显示
+	CListUI* pList = static_cast<CListUI*>(m_pm.FindControl(_T("list_diandan_cart")));
+	pList->RemoveAll();
+
+	//然后依次渲染所有的
+	int nItemNum = order.getItemNum();
+	for (int i = 0; i < nItemNum; i++)
+	{
+		CZhengcanOrderItem item = order.getDiandanOrderItem(i);
+
+		CDialogBuilder builder;
+		CListContainerElementUI* pEle = static_cast<CListContainerElementUI*>(builder.Create(_T("diandan_cart_item.xml"), (UINT)0, NULL, &m_pm));
+
+		pList->Add(pEle);
+
+		if (item.m_is_taocan)
+		{
+			CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
+			pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
+
+			CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
+			pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
+
+			CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
+			pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
+
+			CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
+
+			pEle->SetFixedHeight(84);
+			pNature->SetVisible(true);
+			pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
+		}
+		else
+		{
+			CLabelUI* pName = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_name")));
+			pName->SetText(CLewaimaiString::UTF8ToUnicode(item.getNameShow()).c_str());
+
+			CLabelUI* pNum = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_num")));
+			pNum->SetText(CLewaimaiString::UTF8ToUnicode(item.num).c_str());
+
+			CLabelUI* pPrice = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_price")));
+			pPrice->SetText(CLewaimaiString::UTF8ToUnicode(item.show_price).c_str());
+
+			CLabelUI* pNature = static_cast<CLabelUI*>(pEle->FindSubControl(_T("diandan_cart_item_nature")));
+			if (item.is_nature)
+			{
+				pEle->SetFixedHeight(84);
+				pNature->SetVisible(true);
+				pNature->SetText(CLewaimaiString::UTF8ToUnicode(item.getNatureShow()).c_str());
+			}
+			else
+			{
+				pEle->SetFixedHeight(42);
+				pNature->SetVisible(false);
+			}
+		}
+	}
+
+	//刷新优惠展示
+	CHorizontalLayoutUI* pYouhuiLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("diandan_page_youhui_tishi_layout")));
+	CLabelUI* pYouhuiLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("diandan_page_youhui_tishi")));
+
+	if (total_youhui > 0)
+	{
+		wstring youhuilabel = L"已优惠 " + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(total_youhui, 2)) + L" 元";
+		pYouhuiLabel->SetText(youhuilabel.c_str());
+
+		pYouhuiLayout->SetVisible(true);
+	}
+	else
+	{
+		pYouhuiLayout->SetVisible(false);
+	}
+
+	//再刷新打包费展示
+	CLabelUI* pOtherPriceLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("diandan_page_otherprice")));
+	if (dabao_money > 0)
+	{
+		std::wstring ws_dabaofei = L"打包费 " + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(dabao_money, 2)) + L" 元";
+		pOtherPriceLabel->SetText(ws_dabaofei.c_str());
+	}
+	else
+	{
+		pOtherPriceLabel->SetText(L"");
+	}
+
+	//再刷新总价展示
+	CLabelUI* pTotalPrice = static_cast<CLabelUI*>(this->m_pm.FindControl(_T("diandan_page_totalprice")));
+	pTotalPrice->SetText((L"总价:¥" + CLewaimaiString::UTF8ToUnicode(CLewaimaiString::DoubleToString(total_price, 2))).c_str());
+}
+
 void CFupingWnd::Stop()
 {
 	m_is_work = false;

+ 3 - 0
zhipuzi_pos_windows/wnd/CFupingWnd.h

@@ -3,6 +3,7 @@
 #include "../pch/pch.h"
 
 #include "../zhipuzi/CDiandanOrder.h"
+#include "../zhipuzi/CZhengcanOrder.h"
 
 class CFupingWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
 {
@@ -67,6 +68,8 @@ public:
 	//ˢи±ÆÁÏÔʾ
 	void UpdateShow(CDiandanOrder& order, double total_youhui, double total_price, double dabao_money);
 
+	void UpdateShow(CZhengcanOrder& order, double total_youhui, double total_price, double dabao_money);
+
 public:
 	CPaintManagerUI m_pm;
 

+ 7 - 0
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -1388,6 +1388,13 @@ void CMainWnd::CreatePages()
 		m_pages[CAIGOU] = 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;
+	}
+
 	//这里纯粹只是创建对象,不做任何初始化等处理
 }
 

+ 1 - 0
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -32,6 +32,7 @@ public:
 		SAOMASHOUYIN, //扫码收银
 		CAIGOU, //采购
 		KUCUN, //库存
+		ZHENGCANDIANDAN, //正餐点单
 	};
 
     LPCTSTR GetWindowClassName() const

+ 578 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.cpp

@@ -0,0 +1,578 @@
+#include "../pch/pch.h"
+#include "CZhengcanOrder.h"
+
+void CZhengcanOrder::RefreshDiandanInfo()
+{
+	m_items.clear();
+
+	m_total_price_show = "";
+	m_guadan_time = "";
+	m_memo = "";
+
+	shopname = "";
+	take_food_code = "";
+	show_trade_no = "";
+	balance = "";
+	member_number = "";
+	m_renshu = "";
+	shoukuan_type = "";
+
+	int order_from = 1;
+
+	init_time = "";
+	m_shangpinquan_youhui = "";
+	m_cika_youhui = "";
+	m_total_member_youhui = "";
+	m_zhekou_youhui = "";
+	m_member_zhekou_youhui = "";
+	m_quanyika_youhui = "";
+	m_manjian_youhui = "";
+	m_youhuiquan_youhui = "";
+	m_rengong_youhui = "";
+	m_moling_youhui = "";
+	m_jiajia = "";
+	m_shishou_value = "";
+	m_zhaoling_value = "";
+	m_zhekou_value = "";
+	m_dabao_money = "";
+	m_total_price = "";
+	m_canpai = "";
+
+	m_items_print.clear();
+
+	m_order_id = "";
+	is_refund = "";
+	refund_time = "";
+	is_guazhang = "";
+	guazhang = "";
+}
+
+int CZhengcanOrder::getItemNum()
+{
+	return m_items.size();
+}
+
+std::string CZhengcanOrder::getTotalPriceShow()
+{
+	double total_price_show = 0;
+
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		total_price_show += std::stod((*it).show_price);
+	}
+
+	m_total_price_show = CLewaimaiString::DoubleToString(total_price_show, 2);
+
+	return m_total_price_show;
+}
+
+double CZhengcanOrder::getTotalPrice()
+{
+	double total_price_show = 0;
+
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		total_price_show += std::stod((*it).show_price);
+	}
+
+	return total_price_show;
+}
+
+CZhengcanOrderItem CZhengcanOrder::getDiandanOrderItem(int index)
+{
+	return m_items[index];
+}
+
+//这个函数的逻辑是选择一个新商品的时候,与已有商品进行对比,看看是加一个新的商品,还是对已有商品增加数量
+//返回值是表示新加的item,在第几个元素,方便刷新显示
+int CZhengcanOrder::AddItem(CZhengcanOrderItem newitem, bool& is_add_new)
+{
+	int index = 0;
+	bool is_found = false;
+
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		CZhengcanOrderItem curItem = *it;
+
+		if (curItem == newitem)
+		{
+			is_found = true;
+			break;
+		}
+
+		index++;
+	}
+
+	//如果找到了,更新数量
+	if (is_found)
+	{
+		std::string old_num = m_items[index].num;
+
+		double d_old_num = std::stod(old_num);
+		double d_new_num = d_old_num + std::stod(newitem.num);
+
+		//如果新的数量是一个整数,那么展示的时候就把小数去掉
+		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();
+
+		is_add_new = false;
+	}
+	else
+	{
+		//如果没找到,直接加一个新的item
+		m_items.push_back(newitem);
+
+		m_items[index].UpdateShowPrice();
+
+		is_add_new = true;
+	}
+
+	return index;
+}
+
+void CZhengcanOrder::UpdateItemGuige(int index, std::vector<FoodNatureSelectValue>& natureSelectedArray)
+{
+	m_items[index].natureSelectedArray = natureSelectedArray;
+
+	this->UpdateGuigePrice(index);
+}
+
+//给某一项添加一个数量
+void CZhengcanOrder::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();
+}
+
+//给某一项减少一个数量,返回值为true表示商品本删掉了,也就是为0份;如果为false表示没被删掉
+bool CZhengcanOrder::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);
+
+		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();
+	}
+
+	return false;
+}
+
+//删除某一项
+void CZhengcanOrder::Remove(int index)
+{
+	//已经减为0了,那么就删掉这个item
+	m_items.erase(m_items.begin() + index);
+}
+
+//更新了某项的规格,那么重新刷新显示和价格
+void CZhengcanOrder::UpdateGuigePrice(int index)
+{
+	m_items[index].UpdateShowPrice();
+}
+
+void CZhengcanOrder::SetDabao(int index)
+{
+	m_items[index].SetDabao();
+}
+
+//清空商品
+void CZhengcanOrder::Clear()
+{
+	m_items.clear();
+}
+
+void CZhengcanOrder::SetMemo(std::string memo)
+{
+	m_memo = memo;
+}
+
+std::string CZhengcanOrder::GetMemo()
+{
+	return m_memo;
+}
+
+bool CZhengcanOrder::UseShangpinquan(std::string shangpinquan_food_id, double& youhui_value)
+{
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		CZhengcanOrderItem curItem = *it;
+
+		if (curItem.m_is_taocan == false && curItem.food_id == shangpinquan_food_id)
+		{
+			//找到了可以使用的商品
+			if (atof(curItem.num.c_str()) > 0.99999)
+			{
+				//如果当前份数大于1,那么抵扣价格就是商品单价
+				youhui_value = atof(curItem.price.c_str());
+			}
+			else
+			{
+				//如果当前份数不足1份,那么就抵扣价格就是单价乘以数量
+				youhui_value = atof(curItem.price.c_str()) * atof(curItem.num.c_str());
+			}
+
+			return true;
+		}
+	}
+
+	return false;
+}
+
+bool CZhengcanOrder::UseCikaDikou(std::string cika_food_id, double& youhui_value, bool is_shangpinquan_dikou)
+{
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		CZhengcanOrderItem curItem = *it;
+
+		if (curItem.m_is_taocan == false && curItem.food_id == cika_food_id)
+		{
+			//找到了可以使用的商品
+			if (is_shangpinquan_dikou)
+			{
+				if (atof(curItem.num.c_str()) > 1.99999)
+				{
+					//如果当前份数大于2,那么抵扣价格就是商品单价
+					youhui_value = atof(curItem.price.c_str());
+				}
+				else if (atof(curItem.num.c_str()) > 0.99999)
+				{
+					//如果当前份数不足2份,但是大于1份,那么就抵扣价格就是单价乘以数量
+					youhui_value = atof(curItem.price.c_str()) * (atof(curItem.num.c_str()) - 1);
+				}
+				else
+				{
+					//如果当前份数不足1份,那么已经被商品券抵扣了,次卡不再抵扣
+					youhui_value = 0;
+
+					return false;
+				}
+			}
+			else
+			{
+				if (atof(curItem.num.c_str()) > 0.99999)
+				{
+					//如果当前份数大于1,那么抵扣价格就是商品单价
+					youhui_value = atof(curItem.price.c_str());
+				}
+				else
+				{
+					//如果当前份数不足1份,那么就抵扣价格就是单价乘以数量
+					youhui_value = atof(curItem.price.c_str()) * atof(curItem.num.c_str());
+				}
+			}
+
+			return true;
+		}
+	}
+
+	return false;
+}
+
+double CZhengcanOrder::getTotalMemberYouhui(std::string member_level)
+{
+	double total_youhui = 0;
+
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		CZhengcanOrderItem curItem = *it;
+
+		double item_youhui = curItem.getMemberYouhui(member_level);
+
+		total_youhui += item_youhui;
+	}
+
+	return total_youhui;
+}
+
+//计算所有商品的总的打包费
+double CZhengcanOrder::getDabaoMoney()
+{
+	double total_dabao = 0;
+
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		CZhengcanOrderItem curItem = *it;
+
+		double item_dabao = curItem.getDabaoMoney();
+
+		total_dabao += item_dabao;
+	}
+
+	return total_dabao;
+}
+
+//获取点单相关的参数(仅用于非套餐)
+std::string CZhengcanOrder::getDiandanFoodlistParam()
+{
+	std::vector<std::map<string, string>> params;
+
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		if (it->m_is_taocan)
+		{
+			continue;
+		}
+
+		params.push_back(it->getDiandanParam());
+	}
+
+	std::string s_params = CLewaimaiJson::ParamArrayToJsonstring(params);
+
+	return s_params;
+}
+
+//获取点单相关的套餐参数(仅用于套餐)
+std::string CZhengcanOrder::getDiandanTaocanParam()
+{
+	rapidjson::Document doc;
+	doc.SetArray();
+	rapidjson::Document::AllocatorType &allocator = doc.GetAllocator(); //获取分配器
+
+	for (std::vector<CZhengcanOrderItem>::iterator it = m_items.begin(); it != m_items.end(); it++)
+	{
+		if (it->m_is_taocan == false)
+		{
+			continue;
+		}
+
+		Value& data = it->getDiandanTaocanParam(allocator);
+		doc.PushBack(data, allocator);
+	}
+
+	std::string paramString = CLewaimaiJson::JsonToString(doc);
+
+	return paramString;
+}
+
+bool CZhengcanOrder::InitData(std::string order_id)
+{
+	std::map<string, string> params;
+	params["id"] = order_id;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::GetInstance()->Request("/diancan/getorderdetail", params, response);
+	if (!ret)
+	{
+		LOG_INFO("网络请求出错");
+		return false;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return false;
+	}
+	else
+	{
+		if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+		{
+			LOG_INFO("json error!");
+			return false;
+		}
+
+		rapidjson::Value& v_errcode = document["errcode"];
+		int errcode = v_errcode.GetInt();
+		if (errcode != 0)
+		{
+			LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+			return false;
+		}
+
+		//获得数据成功
+		rapidjson::Value& data = document["data"];
+
+		m_order_id = data["id"].GetString();
+		take_food_code = data["take_food_code"].GetString();
+		show_trade_no = data["show_trade_no"].GetString();
+		m_jiajia = data["price_plus"].GetString();
+		m_shishou_value = data["shishou_value"].GetString();
+		m_zhaoling_value = data["zhaoling_value"].GetString();
+		m_moling_youhui = data["price_moling"].GetString();
+		m_rengong_youhui = data["coupon"].GetString();
+		m_zhekou_value = data["discount"].GetString();
+		m_renshu = data["person_num"].GetString();
+		m_total_price = data["yingshou_price"].GetString();
+		init_time = data["init_time"].GetString();
+		m_canpai = data["table_name"].GetString();
+		shoukuan_type = data["zhifu_type"].GetString();
+		m_dabao_money = data["dabao_price"].GetString();
+		shopname = data["shop_name"].GetString();
+		m_memo = data["note"].GetString();
+		is_refund = data["is_refund"].GetString();
+		refund_time = data["refund_time"].GetString();
+		is_guazhang = data["is_guazhang"].GetString();
+		guazhang = data["guazhang"].GetString();
+		m_youhuiquan_youhui = data["coupon_value"].GetString();
+		m_total_member_youhui = data["member_delete"].GetString();
+		m_manjian_youhui = data["promotion_value"].GetString();
+		m_member_zhekou_youhui = data["member_discount_money"].GetString();
+		m_zhekou_youhui = data["shop_discount_money"].GetString();
+		m_cika_youhui = data["timescoupon_discount_money"].GetString();
+		m_quanyika_youhui = data["eq_card_discount_money"].GetString();
+
+		std::string fromtype = data["from_type"].GetString();
+		if (fromtype == "1")
+		{
+			order_from = 1;
+		}
+		else if (fromtype == "4")
+		{
+			order_from = 2;
+		}
+		else if (fromtype == "2" || fromtype == "3")
+		{
+			order_from = 3;
+		}
+
+		//开始保存订单详情
+		rapidjson::Value& v_rows = data["order_item"];
+
+		for (rapidjson::SizeType i = 0; i < v_rows.Size(); ++i)
+		{
+
+			rapidjson::Value& v_row_i = v_rows[i];
+
+			CZhengcanOrderItemPrint itemPrint;
+			itemPrint.m_food_name = v_row_i["food_name"].GetString();
+			itemPrint.m_quantity = v_row_i["quantity"].GetString();
+			itemPrint.m_item_price = v_row_i["single_price"].GetString();
+			itemPrint.m_type_id = v_row_i["type_id"].GetString();
+
+			m_items_print.push_back(itemPrint);
+		}
+
+		//保存套餐的
+		rapidjson::Value& foodpackage_array = data["foodpackage_array"];
+
+		for (rapidjson::SizeType i = 0; i < foodpackage_array.Size(); ++i)
+		{
+
+			rapidjson::Value& cur_foodpackage = foodpackage_array[i];
+
+			CZhengcanOrderItemPrint itemPrint;
+
+			std::string taocan_name = cur_foodpackage["food_name"].GetString();
+
+			itemPrint.m_quantity = cur_foodpackage["quantity"].GetString();
+			itemPrint.m_item_price = cur_foodpackage["single_price"].GetString();
+			itemPrint.m_type_id = cur_foodpackage["type_id"].GetString();
+
+			itemPrint.is_taocan = true;
+
+			taocan_name += CLewaimaiString::UnicodeToUTF8(L"【");
+
+			//接着保存套餐的item
+			rapidjson::Value& food_item = cur_foodpackage["food_item"];
+			for (rapidjson::SizeType j = 0; j < food_item.Size(); ++j)
+			{
+				CZhengcanOrderItemPrint foodpackageitemPrint;
+				foodpackageitemPrint.m_food_name = food_item[j]["food_name"].GetString();
+				foodpackageitemPrint.m_quantity = food_item[j]["quantity"].GetString();
+				foodpackageitemPrint.m_item_price = food_item[j]["single_price"].GetString();
+				foodpackageitemPrint.m_type_id = food_item[j]["type_id"].GetString();
+
+				foodpackageitemPrint.is_taocan = false;
+				foodpackageitemPrint.is_taocan_item = true;
+
+				m_items_print.push_back(foodpackageitemPrint);
+
+				taocan_name += foodpackageitemPrint.m_food_name;
+
+				if (j < food_item.Size() - 1)
+				{
+					taocan_name += CLewaimaiString::UnicodeToUTF8(L"、");
+				}
+			}
+
+			taocan_name += CLewaimaiString::UnicodeToUTF8(L"】");
+
+			itemPrint.m_food_name = taocan_name;
+
+			m_items_print.push_back(itemPrint);
+		}
+	}
+
+	return true;
+}
+
+bool CZhengcanOrder::Refund(std::string order_id)
+{
+	std::string url = "/diancan/refund";
+
+	//请求外卖的未处理订单
+	std::map<string, string> params;
+	params["id"] = order_id;
+	std::string response;
+
+	CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		LOG_INFO("parse response error!");
+		return false;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg") || !document.HasMember("data"))
+	{
+		LOG_INFO("json error!");
+		return false;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		LOG_INFO("response failed! message:" << document["errmsg"].GetString());
+		return false;
+	}
+
+	return true;
+}

+ 164 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrder.h

@@ -0,0 +1,164 @@
+#pragma once
+
+#include <string>
+#include <vector>
+
+#include "../control/CDiandanNatureItemUI.h"
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodpackage.h"
+
+#include "CZhengcanOrderItem.h"
+
+class CZhengcanOrderItemPrint
+{
+public:
+	std::string m_food_name; //这个是完整展示的名字
+	std::string m_quantity;
+	std::string m_item_price; //注意这个是单价,不是总价
+	std::string m_type_id;
+
+	//表示这个Item是否是套餐的名字
+	bool is_taocan = false;
+
+	//表示这个是否是套餐下面的商品详情,主要用于厨房打印的时候,一个套餐下面的每个商品都会生成一个CZhengcanOrderItemPrint对象
+	bool is_taocan_item = false;
+};
+
+/**
+ * 点单里面的一个“订单”,每个选中的商品被加入订单,通过订单数据来计算价格,渲染界面,提交订单也是通过这个数据来提交
+ * 挂单、取单操作的也是订单
+ */
+class CZhengcanOrder
+{
+public:
+	std::vector<CZhengcanOrderItem> m_items;
+
+	//这个是不包含其他费用的纯商品原价
+	std::string m_total_price_show;
+
+	std::string m_guadan_time;
+
+	//订单的整单备注
+	std::string m_memo;
+
+	/******  下面这些是专门用于打印的参数,不作为其他用途,点单逻辑中用不到,点单成功后赋值用于打印而已  ***********/
+	std::string shopname;
+	std::string take_food_code;
+	std::string show_trade_no;
+
+	//会员余额和会员卡号,仅会员支付时有用
+	std::string balance;
+	std::string member_number;
+
+	std::string m_renshu;
+
+	//微信支付 会员支付 现金支付 福利卡支付 自定义支付
+	std::string shoukuan_type;
+
+	int order_from; //1 收银机下单 2 商家app下单 3 扫码下单
+	std::string init_time;
+
+	//各种优惠
+	std::string m_shangpinquan_youhui;
+	std::string m_cika_youhui;
+	std::string m_total_member_youhui;
+	std::string m_zhekou_youhui;
+	std::string m_member_zhekou_youhui;
+	std::string m_quanyika_youhui;
+	std::string m_manjian_youhui;
+	std::string m_youhuiquan_youhui;
+	std::string m_rengong_youhui;
+	std::string m_moling_youhui;
+
+	//加价金额
+	std::string m_jiajia;
+
+	std::string m_shishou_value;
+	std::string m_zhaoling_value;
+
+	//折扣值(1-100)
+	std::string m_zhekou_value;
+
+	//实际最终总价
+	std::string m_dabao_money;
+	std::string m_total_price;
+
+	std::string m_canpai;
+
+	std::vector<CZhengcanOrderItemPrint> m_items_print;
+
+	//下面是从订单接口从服务端获取的参数,暂时存在这里
+	std::string m_order_id;
+	std::string is_refund;
+	std::string refund_time;
+	std::string is_guazhang;
+	std::string guazhang;
+
+public:
+	//刷新点单相关的参数,比如一个订单收银成功后准备开始收银下一个订单时,清空之前的信息
+	void RefreshDiandanInfo();
+
+	int getItemNum();
+
+	std::string getTotalPriceShow();
+
+	double getTotalPrice();
+
+	CZhengcanOrderItem getDiandanOrderItem(int index);
+
+	//这个函数的逻辑是选择一个新商品的时候,与已有商品进行对比,看看是加一个新的商品,还是对已有商品增加数量
+	//返回值是表示新加的item,在第几个元素,方便刷新显示
+	int AddItem(CZhengcanOrderItem newitem, bool& is_add_new);
+
+	void UpdateItemGuige(int index, std::vector<FoodNatureSelectValue>& natureSelectedArray);
+
+	//给某一项添加一个数量
+	void AddNum(int index);
+
+	//给某一项减少一个数量,返回值为true表示商品本删掉了,也就是为0份;如果为false表示没被删掉
+	bool DelNum(int index);
+
+	//删除某一项
+	void Remove(int index);
+
+	//更新了某项的规格,那么重新刷新显示和价格
+	void UpdateGuigePrice(int index);
+
+	//打包
+	void SetDabao(int index);
+
+	//清空商品
+	void Clear();
+
+	void SetMemo(std::string memo);
+
+	std::string GetMemo();
+
+	//判断某个商品券是否能使用,如果可以返回true,如果不行返回false,youhui_value是对应的商品券优惠金额
+	bool UseShangpinquan(std::string shangpinquan_food_id, double& youhui_value);
+
+	//判断某个次卡是否能使用,如果可以返回true,如果不行返回false,youhui_value是对应的商品券优惠金额
+	//is_shangpinquan_dikou 同一个商品,是否被商品券抵扣过了,用于商品券和次卡抵扣同一个商品时候的处理
+	bool UseCikaDikou(std::string cika_food_id, double& youhui_value, bool is_shangpinquan_dikou);
+
+	//计算所有商品的总的会员优惠金额
+	double getTotalMemberYouhui(std::string member_level);
+
+	//计算所有商品的总的打包费
+	double getDabaoMoney();
+
+	//获取点单相关的参数(仅用于非套餐)
+	std::string getDiandanFoodlistParam();
+
+	//获取点单相关的套餐参数(仅用于套餐)
+	std::string getDiandanTaocanParam();
+
+	/****************************下面这里开始,用于与服务器交互的函数*/
+
+	//根据订单ID,从服务器获取订单的数据,主要用于打印和展示订单详情
+	bool InitData(std::string order_id);
+
+	//根据订单ID,进行退款操作
+	bool Refund(std::string order_id);
+};

+ 74 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrderItem.cpp

@@ -0,0 +1,74 @@
+#include "../pch/pch.h"
+#include "CZhengcanOrderItem.h"
+
+#include "../tool/CSqlite3.h"
+
+bool CZhengcanOrderItem::operator==(CZhengcanOrderItem& t)
+{
+	if (this->m_is_taocan != t.m_is_taocan)
+	{
+		return false;
+	}
+
+	if (this->is_dabao != t.is_dabao)
+	{
+		return false;
+	}
+
+	if (this->m_is_taocan == true)
+	{
+		if (this->foodpackage_id != t.foodpackage_id)
+		{
+			return false;
+		}
+
+		int i = 0;
+		for (std::vector<FoodNatureSelectValue>::iterator it = this->natureSelectedArray.begin(); it != this->natureSelectedArray.end(); it++)
+		{
+			if ((*it).nature_name != t.natureSelectedArray[i].nature_name)
+			{
+				return false;
+			}
+
+			if ((*it).nature_select_index != t.natureSelectedArray[i].nature_select_index)
+			{
+				return false;
+			}
+
+			i++;
+		}
+	}
+	else
+	{
+		if (this->food_id != t.food_id)
+		{
+			return false;
+		}
+
+		if (this->is_nature != t.is_nature)
+		{
+			return false;
+		}
+
+		if (this->is_nature == true)
+		{
+			int i = 0;
+			for (std::vector<FoodNatureSelectValue>::iterator it = this->natureSelectedArray.begin(); it != this->natureSelectedArray.end(); it++)
+			{
+				if ((*it).nature_name != t.natureSelectedArray[i].nature_name)
+				{
+					return false;
+				}
+
+				if ((*it).nature_select_index != t.natureSelectedArray[i].nature_select_index)
+				{
+					return false;
+				}
+
+				i++;
+			}
+		}
+	}
+
+	return true;
+}

+ 17 - 0
zhipuzi_pos_windows/zhipuzi/CZhengcanOrderItem.h

@@ -0,0 +1,17 @@
+#pragma once
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodpackage.h"
+
+#include "../control/CDiandanNatureItemUI.h"
+
+#include "CDiandanOrderItem.h"
+
+/**
+ * ¶©µ¥ÖеÄÒ»¸öÉÌÆ·
+ */
+class CZhengcanOrderItem : public CDiandanOrderItem
+{
+public:
+	bool operator==(CZhengcanOrderItem& t);
+};

+ 6 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj

@@ -231,6 +231,9 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
   <ItemGroup>
     <ClInclude Include="control\CTabletypeOptionUI.h" />
     <ClInclude Include="control\CZhengcanTableItemUI.h" />
+    <ClInclude Include="zhipuzi\CZhengcanOrderItem.h" />
+    <ClInclude Include="zhipuzi\CZhengcanOrder.h" />
+    <ClInclude Include="page\CZhengcanDiandanPageUI.h" />
     <ClInclude Include="wnd\CZhengcanKaitaiWnd.h" />
     <ClInclude Include="wnd\CFupingWnd.h" />
     <ClInclude Include="tool\CShuangpingTool.h" />
@@ -333,6 +336,9 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
   <ItemGroup>
     <ClCompile Include="control\CTabletypeOptionUI.cpp" />
     <ClCompile Include="control\CZhengcanTableItemUI.cpp" />
+    <ClCompile Include="zhipuzi\CZhengcanOrderItem.cpp" />
+    <ClCompile Include="zhipuzi\CZhengcanOrder.cpp" />
+    <ClCompile Include="page\CZhengcanDiandanPageUI.cpp" />
     <ClCompile Include="wnd\CZhengcanKaitaiWnd.cpp" />
     <ClCompile Include="wnd\CFupingWnd.cpp" />
     <ClCompile Include="tool\CShuangpingTool.cpp" />

+ 18 - 0
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -315,6 +315,15 @@
     <ClInclude Include="wnd\CZhengcanKaitaiWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
+    <ClInclude Include="page\CZhengcanDiandanPageUI.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="zhipuzi\CZhengcanOrder.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
+    <ClInclude Include="zhipuzi\CZhengcanOrderItem.h">
+      <Filter>头文件</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -590,6 +599,15 @@
     <ClCompile Include="wnd\CZhengcanKaitaiWnd.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="page\CZhengcanDiandanPageUI.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="zhipuzi\CZhengcanOrder.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
+    <ClCompile Include="zhipuzi\CZhengcanOrderItem.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">