Browse Source

现金收款改完了

张洋 1 month ago
parent
commit
26463088c5

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


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


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


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


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


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


BIN
bin/Win32/Debug/zhipuzi_pos_windows/skin/hs_ring.gif


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


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


+ 105 - 45
bin/Win32/Debug/zhipuzi_pos_windows/skin/huiyuan_shoukuan_wnd.xml

@@ -1,76 +1,136 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Window size="700,560" caption="0,0,0,44" roundcorner="4,4" shadowsize="3" showshadow="true">
-	<VerticalLayout bkimage="shoukuan_bkg.png" >
+	<VerticalLayout bkimage="shoukuan_bkg.png">
 		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF60B177">
 			<Label name="shoukuan_version" text="会员收款" height="44" align="center" valign="center" padding="0,0,0,0" textcolor="#FFFFFFFF" font="18"/>
 			<Button name="closebtn" keyboard="false" padding="0,13,15,0" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
 		</HorizontalLayout>
-		
-		<VerticalLayout visible="true" name="shoukuan_before_pay_layout" padding="0,0,0,0">			
-			<HorizontalLayout name="shoukuan_money_show_layout" height="50" padding="0,25,0,15">\
+
+		<!-- ============ 确认态(定稿 C1) ============ -->
+		<VerticalLayout name="shoukuan_before_pay_layout" visible="true" padding="26,24,26,22">
+			<!-- 首裸 Control:与按钮前的尾裸 Control 一起平分剩余高度(nAdjustables=2)→ 内容组垂直居中、主按钮锚底。
+			     只放尾部一个的话内容会全部顶到上面、中间留一大片空白(现状就是留了 70px)。 -->
+			<Control></Control>
+
+			<!-- 应收金额条 648x88 r10:左标签 / 右金额两端对齐(现状是两个定宽 Label 整组居中,位数少会偏左 31px) -->
+			<VerticalLayout name="hs_amt_bar" height="88" bkimage="file='hs_amtbar_r10.png' corner='10,10,10,10'">
+				<HorizontalLayout height="88" padding="22,0,22,0">
+					<Label text="应收金额" font="13" textcolor="0xFF2E9B5C" autocalcwidth="true"/>
+					<!-- 本行唯一的自适应子项:吃掉剩余宽度,把 ¥+金额 推到右端 -->
+					<Control></Control>
+					<!-- ¥ 用 20 粗(设计稿 .val em 是 20/600)。padding.top=8 让它比数字低 4px:
+					     CSS 里 em 与数字是 baseline 对齐,而 DuiLib 两个独立 Label 各自垂直居中。 -->
+					<Label text="¥" font="120" textcolor="0xFF2E9B5C" autocalcwidth="true" padding="0,8,0,0"/>
+					<!-- 动态文本:autocalcwidth 依赖测量缓存,C++ SetText 后必须 SetFont(GetFont()) 刷新 -->
+					<Label name="shoukuan_money_show_money" font="132" textcolor="0xFF2E9B5C" autocalcwidth="true"/>
+				</HorizontalLayout>
+			</VerticalLayout>
+
+			<!-- 会员信息卡 648x141 r10:2x2 网格(列间距 16 / 行间距 14) -->
+			<VerticalLayout name="hs_member_card" height="141" padding="0,18,0,0" bkimage="file='hs_card_r10.png' corner='10,10,10,10'">
+				<HorizontalLayout height="47" padding="20,16,20,0">
+					<VerticalLayout width="296">
+						<Label text="会员卡号" font="12" textcolor="0xFF8A9099" height="20"/>
+						<Label name="huiyuan_num" text="" font="115" textcolor="0xFF1F2329" height="22" padding="0,5,0,0"/>
+					</VerticalLayout>
+					<VerticalLayout width="296" padding="16,0,0,0">
+						<Label text="会员姓名" font="12" textcolor="0xFF8A9099" height="20"/>
+						<Label name="huiyuan_name" text="" font="115" textcolor="0xFF1F2329" height="22" padding="0,5,0,0"/>
+					</VerticalLayout>
+				</HorizontalLayout>
+				<HorizontalLayout height="48" padding="20,14,20,16">
+					<VerticalLayout width="296">
+						<Label text="当前余额" font="12" textcolor="0xFF8A9099" height="20"/>
+						<Label name="huiyuan_yue" text="" font="115" textcolor="0xFF1F2329" height="22" padding="0,5,0,0"/>
+					</VerticalLayout>
+					<VerticalLayout width="296" padding="16,0,0,0">
+						<Label text="会员级别" font="12" textcolor="0xFF8A9099" height="20"/>
+						<Label name="huiyuan_levelname" text="" font="112" textcolor="0xFF2E9B5C" height="24" padding="0,4,0,0" autocalcwidth="true" bkimage="file='hs_pill_r12.png' corner='12,12,12,12'" textpadding="10,0,10,0"/>
+					</VerticalLayout>
+				</HorizontalLayout>
+			</VerticalLayout>
+
+			<!-- 问句 22 高。现状写成 height=60 又被 wordbreak 顶对齐 → 文字下方空 40px -->
+			<Label name="hs_before_pay_ask" text="确认使用当前登录会员进行支付吗?" font="14" textcolor="0xFF5F6368" align="center" height="22" padding="0,18,0,0"/>
+
+			<!-- 尾裸 Control -->
+			<Control></Control>
+
+			<HorizontalLayout height="48">
 				<Control></Control>
-				<Label text="¥" font="34" textcolor="0xFF60B177" width="25"/>
-				<Label name="shoukuan_money_show_money" font="34" textcolor="0xFF60B177" width="130"/>
+				<Button name="shoukuanBtn" text="确认收款" font="116" textcolor="#FFFFFFFF" height="48" width="350" tooltip="点击这里确认收款" normalimage="file='gd_btn_green_n.png' corner='8,8,8,8'" hotimage="file='gd_btn_green_h.png' corner='8,8,8,8'" pushedimage="file='gd_btn_green_p.png' corner='8,8,8,8'"/>
 				<Control></Control>
 			</HorizontalLayout>
-			
-			<Label name="huiyuan_num" text="会员卡号:" height="30" padding="250,20,10,10"></Label>
-			<Label name="huiyuan_yue" text="当前余额:" height="30" padding="250,10,10,10"></Label>
-			<Label name="huiyuan_name" text="会员姓名:" height="30" padding="250,10,10,10"></Label>
-			<Label name="huiyuan_levelname" text="会员级别:" height="30" padding="250,10,10,10"></Label>
-			
-			<Label height="60" padding="20,50,20,0" name="shouyin_paying_attention" text="确认使用当前登录会员进行支付吗?" font="18" textcolor="0xFF808080" wordbreak="true" align="center" />
-			
-			<HorizontalLayout height="80" padding="0,30,0,0">
+		</VerticalLayout>
+
+		<!-- ============ 支付中(定稿 P1) ============ -->
+		<VerticalLayout name="shoukuan_paying_layout" visible="false" padding="26,24,26,22">
+			<!-- 首裸 Control -->
+			<Control></Control>
+
+			<!-- 进度环 64x64:DuiLib 只有 GifAnim 能动,不能用 CSS animation -->
+			<HorizontalLayout name="shoukuan_paying_loading" height="64">
 				<Control></Control>
-				<Button name="shoukuanBtn" text="确认" font="18" textcolor="#FFFFFFFF" height="50" width="350" padding="0,0,0,0" tooltip="点击这里确认收款" normalimage="file='btn_green_zhengchang.png' corner='5,5,5,5'" hotimage="file='btn_green_xuanfu.png' corner='5,5,5,5'" pushedimage="file='btn_green_dianji.png' corner='5,5,5,5'" />
+				<GifAnim name="hs_paying_ring" bkimage="hs_ring.gif" width="64" height="64" maxheight="64"/>
 				<Control></Control>
-			</HorizontalLayout>	
+			</HorizontalLayout>
 
-			<HorizontalLayout height="50" padding="0,20,0,0">
+			<!-- 金额:¥ 用 19 粗、数字用 30 粗(设计稿 .p1 .pmoney / em)。
+			     两个裸 Control 吸宽把「¥+数字」这一组居中;¥ 的 padding.top=8 复刻基线对齐。
+			     动态数字是 autocalcwidth —— C++ SetText 后必须 SetFont(GetFont()) 刷新,否则宽度停在旧值。 -->
+			<HorizontalLayout height="42" padding="0,20,0,0">
 				<Control></Control>
-				<Label name="shoukuanresult" font="18" width="400" height="50" wordbreak="true" text="" visible="false" textcolor="#FF0000" align="center" />
+				<Label text="¥" font="119" textcolor="0xFF2E9B5C" autocalcwidth="true" padding="0,8,0,0"/>
+				<Label name="shoukuan_paying_money" text="" font="130" textcolor="0xFF2E9B5C" autocalcwidth="true"/>
 				<Control></Control>
-			</HorizontalLayout>			
-		</VerticalLayout>
-		
-		<VerticalLayout name="shoukuan_paying_layout" visible="false">
-			<HorizontalLayout name="shoukuan_paying_loading" height="24" padding="0, 120, 0, 20">
+			</HorizontalLayout>
+			<!-- 状态:与金额拉开颜色与字号两级(现状两个都是绿的一样大) -->
+			<Label name="shoukuan_paying_status" text="请求支付中..." font="15" textcolor="0xFF5F6368" align="center" height="22" padding="0,4,0,0"/>
+
+			<!-- 风险警示条 648x45 r8:把最贵的一句话从"最弱的灰字"提到橙色警示条 -->
+			<VerticalLayout name="hs_paying_risk" height="45" padding="0,22,0,0" bkimage="file='hs_riskbar_r8.png' corner='8,8,8,8'">
+				<HorizontalLayout height="45" padding="14,0,14,0" childvalign="vcenter">
+					<Control bkimage="file='hs_risk_ico18.png'" width="18" height="18" maxheight="18" mouse="false"/>
+					<!-- mini-html:{} 与 <> 两种写法都认,闭合标签必须成对(UIRender.cpp:2194 走 Remove 分支) -->
+					<Label name="hs_paying_risk_text" font="12" textcolor="#FF8A5A10" padding="10,0,0,0" showhtml="true" text="{c #C47410}{b}请勿关闭本窗口。{/b}{/c}关闭窗口不会自动撤销本次支付;若顾客未支付成功,请点下方「取消本次支付」。"/>
+				</HorizontalLayout>
+			</VerticalLayout>
+
+			<Label name="hs_paying_tip" text="支付成功后窗口会自动关闭" font="12" textcolor="#FF8A9099" align="center" height="18" padding="0,10,0,0"/>
+
+			<!-- 尾裸 Control -->
+			<Control></Control>
+
+			<HorizontalLayout height="48">
 				<Control></Control>
-				<VerticalLayout width="24">
-					<Control></Control>
-					<HorizontalLayout height="24">
-						<GifAnim bkimage="loading.gif" autosize="true"></GifAnim>
-					</HorizontalLayout>
-					<Control></Control>
-				</VerticalLayout>
+				<!-- 次按钮:触屏收银机没有 Esc;C++ Notify 里接 StartClose()(现成函数,零新逻辑)。
+				     底图 gd_btn_ghost_n/h/p.png = 白底 + 1px #DCDFE3 描边(设计稿 .btn.ghost 原义),配色对齐工程既有 hyinfo_btn_ghost_* -->
+				<Button name="cancelShoukuanBtn" text="取消本次支付" font="16" textcolor="#FF5F6368" height="48" width="350" tooltip="取消本次支付" normalimage="file='gd_btn_ghost_n.png' corner='8,8,8,8'" hotimage="file='gd_btn_ghost_h.png' corner='8,8,8,8'" pushedimage="file='gd_btn_ghost_p.png' corner='8,8,8,8'"/>
 				<Control></Control>
 			</HorizontalLayout>
-			
-			<Label height="40" padding="0,10,0,10" name="shoukuan_paying_money" text="收款金额:" font="32" textcolor="0xFF60B177" align="center"></Label>
-			
-			<Label height="32" padding="0,10,0,10" name="shoukuan_paying_status" text="请求支付中..." font="18" textcolor="0xFF60B177" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_paying_attention" text="如果用户没有支付成功,则请确认客户不再进行支付时再关闭此窗口,按【Esc】取消本次支付" font="18" textcolor="0xFF808080" wordbreak="true" align="center" />
 		</VerticalLayout>
-		
+
+		<!-- ============ 成功态 / 失败态(本次不改) ============ -->
 		<VerticalLayout name="shoukuan_pay_success_layout" visible="false">
-			
 			<Label height="40" padding="0,180,0,20" name="shoukuan_pay_success_money" text="成功收款:" font="32" textcolor="0xFF60B177" align="center"></Label>
-			
 			<Label height="60" padding="20,30,20,0" name="shouyin_pay_success_attention" text="按任意键关闭窗口" font="18" textcolor="0xFF808080" wordbreak="true" align="center" />
 		</VerticalLayout>
-		
 		<VerticalLayout name="shoukuan_pay_fail_layout" visible="false">
 			<HorizontalLayout height="100" padding="0,20,0,0">
 				<Control></Control>
 				<Control bkimage="pay_fail.png" width="100" height="100" align="center"></Control>
 				<Control></Control>
 			</HorizontalLayout>
-			
 			<Label height="40" padding="0,120,0,20" name="shoukuan_pay_fail_money" text="订单支付失败" font="32" textcolor="0xFFD33E3A" align="center"></Label>
-			
 			<Label height="60" padding="20,30,20,0" name="shouyin_pay_fail_attention" text="" font="18" textcolor="0xFF808080" wordbreak="true" align="center" />
 		</VerticalLayout>
-    </VerticalLayout>
-</Window>
+
+		<!-- ============ 错误提示浮层(原 shoukuanresult) ============ -->
+		<!-- 挂根 VerticalLayout:float 会被裁到父容器矩形,跨出内容区就只能挂根。
+		     落在「问句底 422 ↔ 按钮顶 490」的空档(pos 相对根容器 = 弹框客户区,含 44 高标题栏)。
+		     visible=false 时不参与排版、不占流高 → 错误出现/消失都不会顶动内容,也不会冒滚动条。
+		     控件名 shoukuanresult 必须保留:C++ 有 2 处按名 FindControl(OnShoukuanFail 1 + StartShoukuan 金额校验 1),
+		     共 5 处 SetText/SetVisible 都打在它身上。 -->
+		<Label name="shoukuanresult" float="true" pos="26,444,674,472" text="" visible="false" bkimage="file='err_bar_r6.png' corner='6,6,6,6'" textpadding="12,0,12,0" textcolor="#FFC7403F" font="13" align="center"/>
+	</VerticalLayout>
+</Window>

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


+ 91 - 87
bin/Win32/Debug/zhipuzi_pos_windows/skin/member_login_dlg.xml

@@ -1,88 +1,92 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<Window size="720,536" caption="0,0,0,44" roundcorner="4,4" shadowsize="3" showshadow="true">
-	<VerticalLayout bkimage="shoukuan_bkg.png" >
+<Window size="760,576" caption="0,0,0,44" roundcorner="4,4" shadowsize="3" showshadow="true">
+	<VerticalLayout bkimage="shoukuan_bkg.png">
+
+		<!-- ===== 标题栏 ===== -->
 		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF60B177">
-			<Label name="shoukuan_version" text="会员登录" height="44" align="center" valign="center" padding="0,0,0,0" textcolor="#FFFFFFFF" font="18"/>
-			<Button name="closebtn" keyboard="false" padding="0,13,15,0" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
+			<Label name="shoukuan_version" text="会员登录" height="44" align="center" valign="center" textcolor="#FFFFFFFF" font="18"/>
+			<Button name="closebtn" keyboard="false" float="true" pos="729,14,745,30" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
 		</HorizontalLayout>
-		
-		<VerticalLayout visible="true" name="shoukuan_before_pay_layout" padding="0,20,0,0">			
-			<HorizontalLayout height="40" padding="0,0,0,0">
-				<VerticalLayout>
-					<Button name="shoukuan_btn_shoujihao" text="手机号+密码登录" textcolor="#FF43A947" heiht="38" width="200" padding="50,0,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
-					<Control name="shoukuan_btn_shoujihao_line" width="180" height="3" bkcolor="#FF43A947" padding="60,0,10,0"></Control>
-				</VerticalLayout>
-				
-				<VerticalLayout>
-					<Button name="shoukuan_btn_saomazhifu" text="扫码登录" heiht="38" width="200" padding="50,0,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
-					<Control name="shoukuan_btn_saomazhifu_line" visible="false" width="180" height="3" bkcolor="#FF43A947" padding="60,0,10,0"></Control>
-				</VerticalLayout>
-				
-				<VerticalLayout>
-					<Button name="shoukuan_btn_shitika" text="实体卡登录" heiht="38" width="200" padding="50,0,10,0" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00FFFFFF"></Button>
-					<Control name="shoukuan_btn_shitika_line" visible="false" width="180" height="3" bkcolor="#FF43A947" padding="60,0,10,0"></Control>
-				</VerticalLayout>
+
+		<VerticalLayout visible="true" name="shoukuan_before_pay_layout" padding="0,20,0,0">
+
+			<!-- ===== Tab 分段控件:灰轨道 + 白活动块;活动块借用 *_line 控件(由 C++ 切 visible 驱动) ===== -->
+			<HorizontalLayout height="46">
+				<Control float="true" pos="30,4,730,42" bkimage="file='seg_track.png' corner='10,10,10,10'" mouse="false"></Control>
+				<Control name="shoukuan_btn_shoujihao_line" float="true" pos="34,7,262,39" bkimage="file='seg_active.png' corner='8,8,8,8'" mouse="false"></Control>
+				<Control name="shoukuan_btn_saomazhifu_line" visible="false" float="true" pos="266,7,494,39" bkimage="file='seg_active.png' corner='8,8,8,8'" mouse="false"></Control>
+				<Control name="shoukuan_btn_shitika_line" visible="false" float="true" pos="498,7,726,39" bkimage="file='seg_active.png' corner='8,8,8,8'" mouse="false"></Control>
+				<Button name="shoukuan_btn_shoujihao" text="手机号+密码登录" font="13" textcolor="#FF43A947" float="true" pos="34,7,262,39" align="center" valign="center" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00000000"></Button>
+				<Button name="shoukuan_btn_saomazhifu" text="扫码登录" font="13" textcolor="#FF5F6368" float="true" pos="266,7,494,39" align="center" valign="center" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00000000"></Button>
+				<Button name="shoukuan_btn_shitika" text="实体卡登录" font="13" textcolor="#FF5F6368" float="true" pos="498,7,726,39" align="center" valign="center" normalimage="" hotimage="" pushedimage="" bordersize="0" bkcolor="#00000000"></Button>
 			</HorizontalLayout>
-			
-			<HorizontalLayout name="fukuan_input_shoujihao_layout" padding="0,20,0,0">
-				<VerticalLayout height="280" padding="0,0,0,0">	
-					<Label text="手机号" font="14" float="true" pos="35,5,417,30"/>
-					<Edit name="shoujihao_edit" float="true" pos="35,35,417,81" normalimage="file='input_gray.png' corner='6,6,6,6'" focusedimage="file='input_green.png' corner='6,6,6,6'" />
-			
-					<Label text="密码" font="14" float="true" pos="35,105,417,130"/>
-					<Edit name="password_edit" password="true" float="true" pos="35,135,417,181" normalimage="file='input_gray.png' corner='10,10,10,10'" focusedimage="file='input_green.png' corner='10,10,10,10'" />
-					
-					<Button name="shoukuanBtn" text="确认" textcolor="#FFFFFFFF" float="true" pos="35,211,417,257" tooltip="点击这里确认登录" normalimage="file='btn_green_zhengchang.png' corner='5,5,5,5'" hotimage="file='btn_green_xuanfu.png' corner='5,5,5,5'" pushedimage="file='btn_green_dianji.png' corner='5,5,5,5'" />
+
+			<!-- ===== Tab1:手机号 / 密码(密码非必填,无红星) + 数字键盘 ===== -->
+			<HorizontalLayout name="fukuan_input_shoujihao_layout" height="438" padding="30,20,30,0">
+				<VerticalLayout width="380" height="418">
+					<Label text="<c #E14B4A>*</c>手机号" showhtml="true" font="14" textcolor="#FF1F2329" float="true" pos="0,0,380,22"/>
+					<Edit name="shoujihao_edit" float="true" pos="0,26,380,72" font="14" textcolor="#FF1F2329" tipvalue="请输入手机号" tipvaluecolor="#FFA8ADB3" textpadding="38,0,12,0" normalimage="file='input_normal.png' corner='10,10,10,10'" hotimage="file='input_hover.png' corner='10,10,10,10'" focusedimage="file='input_focus.png' corner='10,10,10,10'"/>
+					<Control float="true" pos="12,40,30,58" bkimage="file='login_icon_user.png'" mouse="false"></Control>
+
+					<Label text="密码" font="14" textcolor="#FF1F2329" float="true" pos="0,88,380,110"/>
+					<Edit name="password_edit" password="true" float="true" pos="0,114,380,160" font="14" textcolor="#FF1F2329" tipvalue="请输入密码" tipvaluecolor="#FFA8ADB3" textpadding="38,0,12,0" normalimage="file='input_normal.png' corner='10,10,10,10'" hotimage="file='input_hover.png' corner='10,10,10,10'" focusedimage="file='input_focus.png' corner='10,10,10,10'"/>
+					<Control float="true" pos="12,128,30,146" bkimage="file='login_icon_lock.png'" mouse="false"></Control>
+
+					<Button name="shoukuanBtn" text="确认" font="15" textcolor="#FFFFFFFF" float="true" pos="0,186,380,234" tooltip="点击这里确认登录" normalimage="file='gd_btn_green_n.png' corner='8,8,8,8'" hotimage="file='gd_btn_green_h.png' corner='8,8,8,8'" pushedimage="file='gd_btn_green_p.png' corner='8,8,8,8'"/>
 				</VerticalLayout>
-			
-				<HorizontalLayout width="230" height="300" bkcolor="#FFF7F8F9" padding="0,0,20,0">
-					<Button name="jianpan_1" text="1" float="true" pos="10,10,72,72" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_2" text="2" float="true" pos="82,10,144,72" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_3" text="3" float="true" pos="154,10,216,72" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					
-					<Button name="jianpan_4" text="4" float="true" pos="10,82,72,144" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_5" text="5" float="true" pos="82,82,144,144" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_6" text="6" float="true" pos="154,82,216,144" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					
-					<Button name="jianpan_7" text="7" float="true" pos="10,154,72,216" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_8" text="8" float="true" pos="82,154,144,216" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_9" text="9" float="true" pos="154,154,216,216" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					
-					<Button name="jianpan_qingkong" text="清空" textcolor="#FFFF0000" float="true" pos="10,226,72,290" normalimage="file='key_red.png' corner='5,5,5,5'" hotimage="file='key_red_hover.png' corner='5,5,5,5'" pushedimage="file='key_red_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_0" text="0" float="true" pos="82,226,144,290" normalimage="file='key_white.png' corner='5,5,5,5'" hotimage="file='key_white_hover.png' corner='5,5,5,5'" pushedimage="file='key_white_pressed.png' corner='5,5,5,5'"></Button>
-					<Button name="jianpan_x" text="X" textcolor="#FFFF0000" float="true" pos="154,226,216,290" normalimage="file='key_red.png' corner='5,5,5,5'" hotimage="file='key_red_hover.png' corner='5,5,5,5'" pushedimage="file='key_red_pressed.png' corner='5,5,5,5'"></Button>
-				</HorizontalLayout>
-			</HorizontalLayout>	
-			
-			<VerticalLayout visible="false" name="fukuan_input_fukuanma_layout" height="220" padding="0,60,0,80">
-				<HorizontalLayout padding="0,20,0,0" height="129">
-					<Control></Control>
-					<Control bkimage="qrcode_attention.png" width="129" height="127"></Control>
-					<Control></Control>
-				</HorizontalLayout>
-				
-				<Label text="请扫描顾客会员付款二维码" align="center" padding="0,30,0,0" height="40"></Label>
-			</VerticalLayout>
 
-			<VerticalLayout visible="false" name="fukuan_input_shitika_layout" height="220" padding="0,60,0,80">
-				<HorizontalLayout padding="0,20,0,0" height="129">
-					<Control></Control>
-					<Control bkimage="huiyuan_no.png" width="206" height="141"></Control>
-					<Control></Control>
+				<Control width="18"></Control>
+
+				<!-- 数字键盘:对齐会员充值弹框 key_normal/hover/pushed(94x100,corner 12) -->
+				<HorizontalLayout width="302" height="418">
+					<Button name="jianpan_1" text="1" font="24" textcolor="#FF1F2329" float="true" pos="0,0,94,100" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_2" text="2" font="24" textcolor="#FF1F2329" float="true" pos="104,0,198,100" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_3" text="3" font="24" textcolor="#FF1F2329" float="true" pos="208,0,302,100" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_4" text="4" font="24" textcolor="#FF1F2329" float="true" pos="0,106,94,206" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_5" text="5" font="24" textcolor="#FF1F2329" float="true" pos="104,106,198,206" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_6" text="6" font="24" textcolor="#FF1F2329" float="true" pos="208,106,302,206" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_7" text="7" font="24" textcolor="#FF1F2329" float="true" pos="0,212,94,312" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_8" text="8" font="24" textcolor="#FF1F2329" float="true" pos="104,212,198,312" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_9" text="9" font="24" textcolor="#FF1F2329" float="true" pos="208,212,302,312" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_qingkong" text="清空" font="15" textcolor="#FF5F6368" float="true" pos="0,318,94,418" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_0" text="0" font="24" textcolor="#FF1F2329" float="true" pos="104,318,198,418" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
+					<Button name="jianpan_x" text="×" font="24" textcolor="#FF5F6368" float="true" pos="208,318,302,418" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"></Button>
 				</HorizontalLayout>
-				
-				<Label text="请刷会员实体卡进行付款" align="center" padding="0,30,0,0" height="40"></Label>
-			</VerticalLayout>			
+			</HorizontalLayout>
+
+			<!-- ===== Tab2:扫码登录 ===== -->
+			<HorizontalLayout visible="false" name="fukuan_input_fukuanma_layout" height="438" padding="0,20,0,0" childvalign="vcenter">
+				<Control></Control>
+				<VerticalLayout width="320" childalign="center">
+					<VerticalLayout width="220" height="220" childalign="center" childvalign="vcenter">
+						<Control bkimage="qrcode_attention.png" width="129" height="127" maxheight="127"></Control>
+					</VerticalLayout>
+					<Label text="请扫描顾客会员付款二维码" align="center" font="120" textcolor="#FF1F2329" padding="0,24,0,0" height="34"></Label>
+					<Label text="打开会员码,对准扫码枪,听到提示音即成功" align="center" font="13" textcolor="#FF8A9099" padding="0,8,0,0" height="20"></Label>
+				</VerticalLayout>
+				<Control></Control>
+			</HorizontalLayout>
 
-			<HorizontalLayout height="50" padding="0,20,0,0">
+			<!-- ===== Tab3:实体卡登录 ===== -->
+			<HorizontalLayout visible="false" name="fukuan_input_shitika_layout" height="438" padding="0,20,0,0" childvalign="vcenter">
 				<Control></Control>
-				<Label name="shoukuanresult" width="400" height="50" wordbreak="true" text="" visible="false" textcolor="#FF0000" align="center" />
+				<VerticalLayout width="320" childalign="center">
+					<VerticalLayout width="280" height="220" childalign="center" childvalign="vcenter">
+						<Control bkimage="huiyuan_no.png" width="206" height="141" maxheight="141"></Control>
+					</VerticalLayout>
+					<Label text="请刷会员实体卡进行付款" align="center" font="120" textcolor="#FF1F2329" padding="0,24,0,0" height="34"></Label>
+					<Label text="在刷卡区停留 1 秒,听到提示音即成功" align="center" font="13" textcolor="#FF8A9099" padding="0,8,0,0" height="20"></Label>
+				</VerticalLayout>
 				<Control></Control>
-			</HorizontalLayout>			
+			</HorizontalLayout>
+
+			<!-- ===== 错误提示(浮层,不占流高,落在表单按钮下方空档) ===== -->
+			<Label name="shoukuanresult" text="" visible="false" float="true" pos="30,350,410,406" font="14" textcolor="#FFC93A38" wordbreak="true"/>
 		</VerticalLayout>
-		
+
+		<!-- ===== 请求登录中 ===== -->
 		<VerticalLayout name="shoukuan_paying_layout" visible="false">
-			<HorizontalLayout name="shoukuan_paying_loading" height="24" padding="0, 150, 0, 20">
+			<HorizontalLayout name="shoukuan_paying_loading" height="24" padding="0,150,0,20">
 				<Control></Control>
 				<VerticalLayout width="24">
 					<Control></Control>
@@ -93,27 +97,27 @@
 				</VerticalLayout>
 				<Control></Control>
 			</HorizontalLayout>
-			
-			<Label height="32" padding="0,10,0,10" name="shoukuan_paying_status" text="请求登录中..." textcolor="0xFF60B177" align="center"></Label>
+
+			<Label height="32" padding="0,10,0,10" name="shoukuan_paying_status" text="请求登录中..." textcolor="0xFF60B177" align="center" font="14"></Label>
 		</VerticalLayout>
-		
+
+		<!-- ===== 登录成功 ===== -->
 		<VerticalLayout name="shoukuan_pay_success_layout" visible="false">
-			
-			<Label height="40" padding="0,180,0,20" name="shoukuan_pay_success_money" text="登录成功:" textcolor="0xFF60B177" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_pay_success_attention" text="按任意键关闭窗口" textcolor="0xFF808080" wordbreak="true" align="center" />
+			<Label height="40" padding="0,180,0,20" name="shoukuan_pay_success_money" text="登录成功:" textcolor="0xFF60B177" align="center" font="18"></Label>
+			<Label height="60" padding="20,30,20,0" name="shouyin_pay_success_attention" text="按任意键关闭窗口" textcolor="0xFF808080" wordbreak="true" align="center" font="14"></Label>
 		</VerticalLayout>
-		
+
+		<!-- ===== 登录失败 ===== -->
 		<VerticalLayout name="shoukuan_pay_fail_layout" visible="false">
 			<HorizontalLayout height="100" padding="0,20,0,0">
 				<Control></Control>
 				<Control bkimage="pay_fail.png" width="100" height="100" align="center"></Control>
 				<Control></Control>
 			</HorizontalLayout>
-			
-			<Label height="40" padding="0,120,0,20" name="shoukuan_pay_fail_money" text="登录失败" textcolor="0xFFD33E3A" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_pay_fail_attention" text="" textcolor="0xFF808080" wordbreak="true" align="center" />
+
+			<Label height="40" padding="0,120,0,20" name="shoukuan_pay_fail_money" text="登录失败" textcolor="0xFFD33E3A" align="center" font="18"></Label>
+			<Label height="60" padding="20,30,20,0" name="shouyin_pay_fail_attention" text="" textcolor="0xFF808080" wordbreak="true" align="center" font="14"></Label>
 		</VerticalLayout>
-    </VerticalLayout>
-</Window>
+
+	</VerticalLayout>
+</Window>

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


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


+ 191 - 91
bin/Win32/Debug/zhipuzi_pos_windows/skin/xianjin_shoukuan_wnd.xml

@@ -1,106 +1,206 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<Window size="800,434" caption="0,0,0,44" roundcorner="4,4" shadowsize="3" showshadow="true">
-	<VerticalLayout bkimage="shoukuan_bkg.png" >
+<Window size="860,552" caption="0,0,0,44" roundcorner="4,4" shadowsize="3" showshadow="true">
+	<VerticalLayout bkcolor="#FFFFFFFF">
+		<!-- ===================== 标题栏 44 高(全工程 30+ 弹框的统一值,会员收款 / 会员信息同族) ===================== -->
 		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF60B177">
-			<Label name="shoukuan_version" text="现金收款" height="44" align="center" valign="center" padding="0,0,0,0" textcolor="#FFFFFFFF" font="18"/>
-			<Button name="closebtn" keyboard="false" padding="0,13,15,0" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
+			<Label name="shoukuan_version" text="现金收款" height="44" align="center" valign="center" textcolor="#FFFFFFFF" font="18"/>
+			<!-- 关闭按钮必须用 float 精确定位:横排里子项 height 不生效(只认 maxheight),
+			     会被拉成 44-13=31 高导致图标纵向拉伸。float 不进流、pos 相对父容器 rect → 原生 16x16。 -->
+			<Button name="closebtn" keyboard="false" float="true" pos="820,14,836,30" width="16" height="16" tooltip="关闭" normalimage="file='close_normal.png'" hotimage="file='close_hover.png'" pushedimage="file='close_normal.png'"/>
 		</HorizontalLayout>
-		
-		<HorizontalLayout visible="true" name="shoukuan_before_pay_layout">
-			<VerticalLayout height="520" padding="0,20,0,0">			
-				<HorizontalLayout name="shoukuan_money_show_layout" height="50" padding="0,0,0,15">
-					<Label text="¥" font="24" textcolor="0xFF60B177" float="true" pos="170,24,245,50"/>
-					<Label name="shoukuan_money_show_money" font="40" textcolor="0xFF60B177" float="true" pos="195,12,530,48"/>
-				</HorizontalLayout>
-				
-				<HorizontalLayout height="50" padding="0,0,0,0">
-					<Label text="实收:" font="18" float="true" pos="30,12,180,40"/>
-					<Edit name="shishou_edit" float="true" pos="98,12,355,48" normalimage="file='Chat_InputBox_BG.png' corner='4,4,4,4'" hotimage="file='Chat_InputBox_BG_Hover.png' corner='4,4,4,4'" />
-					<Label text="元" font="18" float="true" pos="362,15,470,40"/>
-				</HorizontalLayout>
-				
-				<HorizontalLayout height="50" padding="0,15,0,0">
-					<Label text="快选:" font="18" float="true" pos="30,12,180,40"/>
-					<Button name="xianjin_kuaijie_10" font="14" text="10元" heiht="36" width="55" padding="100,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF60B177"></Button>
-					<Button name="xianjin_kuaijie_20" font="14" text="20元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF60B177"></Button>
-					<Button name="xianjin_kuaijie_50" font="14" text="50元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF60B177"></Button>
-					<Button name="xianjin_kuaijie_100" font="14" text="100元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF60B177"></Button>
-					<Button name="xianjin_kuaijie_200" font="14" text="200元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF60B177"></Button>
-				</HorizontalLayout>
-				
-				<HorizontalLayout height="50" padding="0,15,0,0">
-					<Label text="找零:" font="18" float="true" pos="30,12,180,40"/>
-					<Label name="xianjin_zhaoling_label" text="0元" font="18" float="true" pos="95,12,300,40"/>
-				</HorizontalLayout>
-				
-				<HorizontalLayout height="60" padding="0,20,0,0">
-					<Control></Control>
-					<Button name="shoukuanBtn" text="确认" font="18" textcolor="#FFFFFFFF" height="50" width="400" padding="0,0,0,0" tooltip="点击这里确认收款" normalimage="file='btn_green_zhengchang.png' corner='5,5,5,5'" hotimage="file='btn_green_xuanfu.png' corner='5,5,5,5'" pushedimage="file='btn_green_dianji.png' corner='5,5,5,5'" />
-					<Control></Control>
-				</HorizontalLayout>	
-
-				<HorizontalLayout height="50" padding="0,10,0,0">
-					<Control></Control>
-					<Label name="shoukuanresult" font="18" width="400" height="50" wordbreak="true" text="" visible="false" textcolor="#FF0000" align="center" />
-					<Control></Control>
-				</HorizontalLayout>			
-			</VerticalLayout>
-			
-			<HorizontalLayout width="330" height="406" bkcolor="#FFF3F3F3">
-				<Button name="jianpan_1" text="1" font="24" heiht="60" width="60" float="true" pos="10,0,110,90" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_2" text="2" font="24" heiht="60" width="60" float="true" pos="120,0,220,90" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_3" text="3" font="24" heiht="60" width="60" float="true" pos="230,0,330,90" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				
-				<Button name="jianpan_4" text="4" font="24" heiht="60" width="60" float="true" pos="10,100,110,190" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_5" text="5" font="24" heiht="60" width="60" float="true" pos="120,100,220,190" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_6" text="6" font="24" heiht="60" width="60" float="true" pos="230,100,330,190" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				
-				<Button name="jianpan_7" text="7" font="24" heiht="60" width="60" float="true" pos="10,200,110,290" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_8" text="8" font="24" heiht="60" width="60" float="true" pos="120,200,220,290" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_9" text="9" font="24" heiht="60" width="60" float="true" pos="230,200,330,290" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				
-				<Button name="jianpan_dian" text="." font="24" heiht="60" width="60" float="true" pos="10,300,110,390" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_0" text="0" font="24" heiht="60" width="60" float="true" pos="120,300,220,390" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
-				<Button name="jianpan_x" text="X" font="24" heiht="60" width="60" float="true" pos="230,300,330,390" normalimage="file='shuzi_btn_normal.png' corner='5,5,5,5'" hotimage="file='shuzi_btn_hover.png' corner='5,5,5,5'" pushedimage="file='shuzi_btn_push.png' corner='5,5,5,5'"></Button>
+
+		<!-- ===================== 确认态(结构照抄会员充值,卡片底色加深) =====================
+		     会员充值在用的 balance_card.png / charge_card.png 底色是 #FAFBFC —— 白底上 Δ≈5/255,肉眼根本看不出,
+		     所以本弹框改用「取其 alpha 通道换色」生成的专属资产(圆角半径 / 抗锯齿剖面 / 尺寸与原图逐像素一致,零新增几何误差):
+		       xj_card_money.png  472x102  ← balance_card.png   应收金额卡
+		       xj_card_input.png  472x168  ← charge_card.png    实收 / 快选 / 找零卡
+		     填充色 #F2F4F7(比 #FAFBFC 深一档,又与 gd_btn_grey 的 #F0F1F3 错开,走灰度阶梯而不是撞色);
+		     共享的那两张 PNG 保持原样不动 —— 会员充值弹框仍在用,不能就地改。
+		     窗口 552 = 44(标题) + 24 + 460(内容) + 24
+		     左列 472 = 108(应收卡) + 15 + 170(实收卡) + 15 + 36(错误带占位) + 116(按钮区)
+		     横排 812 = 472 + 20(childpadding) + 320(键盘)
+		============================================================================ -->
+		<VerticalLayout name="shoukuan_before_pay_layout" visible="true">
+			<!-- 上下 24 留白用首尾裸 Control 均分得到(508-460=48 → 各 24)。
+			     inset 与裸 Control 是【二选一】:inset 已经把子项可用区收窄了 24,再放裸 Control 会叠加成双倍留白,
+			     内容 460+48 超出可用 460 就会被 DoPaint 的 CRenderClip 裁掉底栏(首版踩过这个坑)。
+			     这里只用裸 Control:内容变化时自动上下居中,不依赖窗口尺寸恰好。
+			     左右 24 写在 HLayout 的 inset 上。 -->
+			<Control/>
+			<HorizontalLayout height="460" childpadding="20" inset="24,0,24,0">
+
+				<!-- ========== 左列 472 ========== -->
+				<VerticalLayout width="472" height="460">
+
+					<!-- 应收金额卡:xj_card_money.png 472x102,这里画 108(多出 6px 交给九宫格中间带拉伸,实测中间带纯不透明安全)
+					     inset 取会员充值的 20,20,16,16 → 卡内可用 436x72 = 20(标题) + 4 + 48(金额行) -->
+					<VerticalLayout width="472" height="108" bkimage="file='xj_card_money.png' corner='16,16,16,16'" inset="20,20,16,16">
+						<Label text="应收金额" font="13" textcolor="#FF8A9099" width="436" height="20"/>
+						<Control width="436" height="4"/>
+						<HorizontalLayout width="436" height="48">
+							<!-- ¥ 与数字按基线对齐:HL 里子项写 padding.top=n 会把它的框下移 n、文字中心低 n/2。
+							     精确解 n = 2*(A_36 - A_20) + L_20 - L_36,实测 msyh getmetrics() 得
+							     (39-22)*2 + 28 - 49 = 13(别用 0.36*(36-20) 的粗估,那会算成 12,差 1px)。 -->
+							<Label text="¥" font="20" textcolor="#FF60B177" autocalcwidth="true" padding="0,13,0,0"/>
+							<Control width="8" height="48"/>
+							<!-- 金额必须定宽,不能 autocalcwidth:C++ InitMoney 只 SetText 不 SetFont,宽度缓存不会刷新 -->
+							<Label name="shoukuan_money_show_money" text="" font="36" textcolor="#FF60B177" width="240" height="48" maxheight="48"/>
+						</HorizontalLayout>
+					</VerticalLayout>
+
+					<Control width="472" height="15"/>
+
+					<!-- 实收 / 快选 / 找零卡:xj_card_input.png 472x168,这里画 170(中间带拉伸 2px)
+					     inset 取会员充值的 16,16,16,16 → 卡内可用 440x138 = 46 + 16 + 34 + 2 + 40
+					     ★ 纵向账刻意不照抄会员充值的 6/6:药丸「上下的边距要一样」,而上下两侧的锚点不是同一种东西 ——
+					        上侧锚点是实收输入框的【硬边】(46 行被输入框铺满,底边就是卡内 46);
+					        下侧锚点是找零数字的【墨迹顶】,文字在行内垂直居中,墨迹之外还要让开一段字体内部行距:
+					          msyh 15px(粗体度量相同)ascent 16 / descent 4 → 行盒 20,数字墨迹距行盒顶 4
+					          → 墨迹顶 = 找零行顶 + (40-20)/2 + 4 = 找零行顶 + 14
+					        于是:上占位 16 → 药丸 卡内 62..96;下占位 2 + 14 = 16 → 墨迹顶 卡内 112。上 16 / 下 16 严格相等。
+					        (第一版按「行盒居中」写成 12/0,出图量墨迹仍是上 12 / 下 17 —— 因为墨迹不贴行盒顶,别按行盒算。)
+					        会员充值的 6/6 在这里实测是「上 5 / 下 19」,就是用户提的问题,不要照抄。
+					        注意:HL 里【不能】用 padding.top 微调药丸 —— vcenter 分支无视 padding.top(UIHorizontalLayout.cpp:167-174),
+					        只能改占位 Control 的高度。 -->
+					<VerticalLayout width="472" height="170" bkimage="file='xj_card_input.png' corner='16,16,16,16'" inset="16,16,16,16">
+
+						<HorizontalLayout width="440" height="46" childvalign="vcenter">
+							<Label text="实收" font="15" textcolor="#FF1F2329" width="56" height="46" maxheight="46" valign="center"/>
+							<Control width="12" height="46"/>
+							<Edit name="shishou_edit" width="336" height="46" maxheight="46" font="14" textcolor="#FF1F2329" bkcolor="#FFFFFFFF" nativebkcolor="#FFFFFFFF" tipvalue="请输入实收金额" tipvaluecolor="#FFA8ADB3" textpadding="12,0,12,0" normalimage="file='input_normal.png' corner='10,10,10,10'" hotimage="file='input_hover.png' corner='10,10,10,10'" focusedimage="file='input_focus.png' corner='10,10,10,10'"/>
+							<Control width="12" height="46"/>
+							<Label text="元" font="14" textcolor="#FF5F6368" width="24" height="46" maxheight="46" align="right" valign="center"/>
+						</HorizontalLayout>
+
+						<Control width="440" height="16"/>
+
+						<!-- 快选金额:只保留 10 / 20 / 50 / 100(200 元档已按需求删除;对应 C++ 分支
+						     xianjin_kuaijie_200 随之成为不可达死代码,本轮未动 C++,见交付说明)。
+						     首枚前放 68 宽占位(会员充值同款手法)→ 药丸左沿 = 卡内左沿 40 + 68 = 108,
+						     与实收编辑框左沿(56 + 12 = 68 → 108)严格对齐。
+						     4 x 72 + 3 x 10 = 318,加占位共 386,卡内 440 右侧留 54。
+						     写法与会员充值一致:tag_*_72.png 原生 72x34、不写 corner(原生尺寸不需要九宫格)。 -->
+						<HorizontalLayout width="440" height="34" childvalign="vcenter">
+							<Control width="68" height="34"/>
+							<Button name="xianjin_kuaijie_10" text="10元" font="13" textcolor="#FF5F6368" width="72" height="34" maxheight="34" bkcolor="#00000000" hotbkcolor="#00000000" pushedbkcolor="#00000000" normalimage="file='tag_normal_72.png'" hotimage="file='tag_hover_72.png'" pushedimage="file='tag_pushed_72.png'" hottextcolor="#FF60B177" pushedtextcolor="#FFFFFFFF"/>
+							<Control width="10" height="34"/>
+							<Button name="xianjin_kuaijie_20" text="20元" font="13" textcolor="#FF5F6368" width="72" height="34" maxheight="34" bkcolor="#00000000" hotbkcolor="#00000000" pushedbkcolor="#00000000" normalimage="file='tag_normal_72.png'" hotimage="file='tag_hover_72.png'" pushedimage="file='tag_pushed_72.png'" hottextcolor="#FF60B177" pushedtextcolor="#FFFFFFFF"/>
+							<Control width="10" height="34"/>
+							<Button name="xianjin_kuaijie_50" text="50元" font="13" textcolor="#FF5F6368" width="72" height="34" maxheight="34" bkcolor="#00000000" hotbkcolor="#00000000" pushedbkcolor="#00000000" normalimage="file='tag_normal_72.png'" hotimage="file='tag_hover_72.png'" pushedimage="file='tag_pushed_72.png'" hottextcolor="#FF60B177" pushedtextcolor="#FFFFFFFF"/>
+							<Control width="10" height="34"/>
+							<Button name="xianjin_kuaijie_100" text="100元" font="13" textcolor="#FF5F6368" width="72" height="34" maxheight="34" bkcolor="#00000000" hotbkcolor="#00000000" pushedbkcolor="#00000000" normalimage="file='tag_normal_72.png'" hotimage="file='tag_hover_72.png'" pushedimage="file='tag_pushed_72.png'" hottextcolor="#FF60B177" pushedtextcolor="#FFFFFFFF"/>
+						</HorizontalLayout>
+
+						<!-- 药丸行下方留 2:找零数字的墨迹顶在找零行内还要再低 14(行盒居中 10 + 字体内部行距 4),
+						     2 + 14 = 16 = 上方占位,上下才是严格等距(详见卡片注释的纵向账)。 -->
+						<Control width="440" height="2"/>
+
+						<!-- 找零:C++ UpdateZhaoling 会把「元」随金额一起 SetText,这里不能再放一个「元」Label。
+						     数字左沿必须与实收编辑框左沿对齐(x=108):Label 左沿 = 卡内左沿 40 + 56 + 12 = 108 本来就对齐,
+						     所以【不能】再写 textpadding 的左内边距(原来写 12,把文字推到了 120)。 -->
+						<HorizontalLayout width="440" height="40" childvalign="vcenter">
+							<Label text="找零" font="15" textcolor="#FF1F2329" width="56" height="40" maxheight="40" valign="center"/>
+							<Control width="12" height="40"/>
+							<Label name="xianjin_zhaoling_label" text="0元" font="115" textcolor="#FF2E9B5C" width="372" height="40" maxheight="40" valign="center"/>
+						</HorizontalLayout>
+					</VerticalLayout>
+
+					<Control width="472" height="15"/>
+
+					<!-- 错误提示带 36 高:真正的提示条是挂在根布局上的浮层 shoukuanresult(不占流高、不顶动内容),这里只占位 -->
+					<Control width="472" height="36"/>
+
+					<!-- 确认按钮区 116:删掉「按 Enter 确认收款 · Esc 取消」提示行后,两枚裸 Control 均分 116-56 = 60
+					     → 上 30 / 下 30;按钮整宽 472 与上方卡片对齐 -->
+					<VerticalLayout width="472" height="116">
+						<Control/>
+						<Button name="shoukuanBtn" text="确认收款" font="116" textcolor="#FFFFFFFF" width="472" height="56" tooltip="点击这里确认收款" normalimage="file='gd_btn_green_n.png' corner='8,8,8,8'" hotimage="file='gd_btn_green_h.png' corner='8,8,8,8'" pushedimage="file='gd_btn_green_p.png' corner='8,8,8,8'"/>
+						<Control/>
+					</VerticalLayout>
+				</VerticalLayout>
+
+				<!-- ========== 右列:数字键盘 320x460(与会员充值同尺寸、同资产) ==========
+				     4 行 x 110 + 3 x 6 = 458,上下各留 1px 与左列 460 顶齐 -->
+				<VerticalLayout width="320" height="460">
+					<Control width="320" height="1"/>
+					<VerticalLayout width="320" height="458" childpadding="6">
+						<HorizontalLayout width="320" height="110" childpadding="10">
+							<Button name="jianpan_1" text="1" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_2" text="2" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_3" text="3" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+						</HorizontalLayout>
+						<HorizontalLayout width="320" height="110" childpadding="10">
+							<Button name="jianpan_4" text="4" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_5" text="5" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_6" text="6" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+						</HorizontalLayout>
+						<HorizontalLayout width="320" height="110" childpadding="10">
+							<Button name="jianpan_7" text="7" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_8" text="8" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_9" text="9" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+						</HorizontalLayout>
+						<HorizontalLayout width="320" height="110" childpadding="10">
+							<!-- 底行:小数点 / 0 / 退格。控件名沿用 C++ 分支名 jianpan_dian / jianpan_0 / jianpan_x;
+							     显示文字 X 改成 × 只是视觉(C++ 按 senderName 分支,不认 text),
+							     本弹框 C++ 没有 jianpan_qingkong 分支,所以不能照抄会员充值的「清空」 -->
+							<Button name="jianpan_dian" text="." font="24" textcolor="#FF5F6368" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_0" text="0" font="24" textcolor="#FF1F2329" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+							<Button name="jianpan_x" text="×" font="24" textcolor="#FF5F6368" width="100" height="110" normalimage="file='key_normal.png' corner='12,12,12,12'" hotimage="file='key_hover.png' corner='12,12,12,12'" pushedimage="file='key_pushed.png' corner='12,12,12,12'" pushedtextcolor="#FF60B177"/>
+						</HorizontalLayout>
+					</VerticalLayout>
+					<Control width="320" height="1"/>
+				</VerticalLayout>
 			</HorizontalLayout>
-		</HorizontalLayout>
-		
+			<Control/>
+		</VerticalLayout>
+
+		<!-- ===================== 支付中 ===================== -->
 		<VerticalLayout name="shoukuan_paying_layout" visible="false">
-			<HorizontalLayout name="shoukuan_paying_loading" height="24" padding="0, 20, 0, 20">
-				<Control></Control>
+			<Control/>
+			<HorizontalLayout name="shoukuan_paying_loading" height="24">
+				<Control/>
 				<VerticalLayout width="24">
-					<Control></Control>
+					<Control/>
 					<HorizontalLayout height="24">
-						<GifAnim bkimage="loading.gif" autosize="true"></GifAnim>
+						<GifAnim bkimage="loading.gif" autosize="true"/>
 					</HorizontalLayout>
-					<Control></Control>
+					<Control/>
 				</VerticalLayout>
-				<Control></Control>
+				<Control/>
 			</HorizontalLayout>
-			
-			<Label height="40" padding="0,10,0,10" name="shoukuan_paying_money" text="收款金额:" font="32" textcolor="0xFF60B177" align="center"></Label>
-			
-			<Label height="32" padding="0,10,0,10" name="shoukuan_paying_status" text="请求支付中..." font="18" textcolor="0xFF60B177" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_paying_attention" text="如果用户没有支付成功,则请确认客户不再进行支付时再关闭此窗口,按【Esc】取消本次支付" font="18" textcolor="0xFF808080" wordbreak="true" align="center" />
+			<Label height="44" padding="0,24,0,0" name="shoukuan_paying_money" text="付款金额:" font="30" textcolor="#FF60B177" align="center"/>
+			<Label height="22" padding="0,6,0,0" name="shoukuan_paying_status" text="请求支付中..." font="15" textcolor="#FF5F6368" align="center"/>
+			<Label height="24" padding="0,26,0,0" name="shouyin_paying_attention" text="如果用户没有支付成功,请确认顾客不再支付后再关闭本窗口,按【Esc】取消本次支付" font="12" textcolor="#FF8A9099" wordbreak="true" align="center"/>
+			<Control/>
 		</VerticalLayout>
-		
-		<VerticalLayout name="shoukuan_pay_success_layout" visible="false">			
-			<Label height="40" padding="0,100,0,20" name="shoukuan_pay_success_money" text="成功收款:" font="32" textcolor="0xFF60B177" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_pay_success_attention" text="按任意键关闭窗口" font="18" textcolor="0xFF808080" wordbreak="true" align="center" />
+
+		<!-- ===================== 收款成功 ===================== -->
+		<VerticalLayout name="shoukuan_pay_success_layout" visible="false">
+			<Control/>
+			<Label height="48" name="shoukuan_pay_success_money" text="成功收款:" font="32" textcolor="#FF60B177" align="center"/>
+			<Label height="22" padding="0,16,0,0" name="shouyin_pay_success_attention" text="按任意键关闭窗口" font="14" textcolor="#FF8A9099" align="center"/>
+			<Control/>
 		</VerticalLayout>
-		
+
+		<!-- ===================== 收款失败 ===================== -->
 		<VerticalLayout name="shoukuan_pay_fail_layout" visible="false">
-			<HorizontalLayout height="100" padding="0,20,0,0">
-				<Control></Control>
-				<Control bkimage="pay_fail.png" width="100" height="100" align="center"></Control>
-				<Control></Control>
+			<Control/>
+			<HorizontalLayout height="100">
+				<Control/>
+				<Control bkimage="pay_fail.png" width="100" height="100" maxheight="100"/>
+				<Control/>
 			</HorizontalLayout>
-			
-			<Label height="40" padding="0,20,0,20" name="shoukuan_pay_fail_money" text="订单支付失败" font="32" textcolor="0xFFD33E3A" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_pay_fail_attention" text="" font="18" textcolor="0xFF808080" wordbreak="true" align="center" />
+			<Label height="48" padding="0,20,0,0" name="shoukuan_pay_fail_money" text="订单支付失败" font="32" textcolor="#FFD33E3A" align="center"/>
+			<Label height="48" padding="0,10,0,0" name="shouyin_pay_fail_attention" text="" font="14" textcolor="#FF8A9099" wordbreak="true" align="center"/>
+			<Control/>
 		</VerticalLayout>
-    </VerticalLayout>
-</Window>
+
+		<!-- ===================== 错误提示浮层 =====================
+		     挂根 VerticalLayout:float 会被裁到父容器矩形,跨出内容区就只能挂根(见 skill 二·补四)。
+		     pos 是弹框客户区绝对坐标:左列 x 24..496;落在「实收卡底 361..376 空档 + 错误带 376..412」中间 —— 376+4=380,28 高 → 380..408。
+		     visible=false 时不参与排版、不占流高 → 报错出现 / 消失都不会顶动内容。
+		     控件名 shoukuanresult 必须保留:C++ 有 5 处 SetText / SetVisible 打在它身上。
+		-->
+		<Label name="shoukuanresult" float="true" pos="24,380,496,408" text="" visible="false" bkimage="file='err_bar_r6.png' corner='6,6,6,6'" textpadding="12,0,12,0" textcolor="#FFC7403F" font="13" align="center"/>
+	</VerticalLayout>
+</Window>

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


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


BIN
zhipuzi_pos_windows/resource/skin.zip


+ 93 - 6
zhipuzi_pos_windows/wnd/CHuiyuanShoukuanWnd.cpp

@@ -9,6 +9,69 @@
 
 #define WM_TIMER_WND_CLOSE 200001
 
+//金额展示:带 ¥ 与千分位(与 CHuiyuanInfoShowWnd::FormatMoney 同一套规则)。
+//做成文件内静态函数是为了不动头文件 —— 只此一处用得到。
+static std::wstring FormatMoneyValue(const std::string& value)
+{
+	std::string v = value;
+	if (v.empty())
+	{
+		v = "0";
+	}
+
+	bool negative = false;
+	if (v[0] == '-')
+	{
+		negative = true;
+		v = v.substr(1);
+	}
+
+	std::string int_part = v;
+	std::string dec_part = "00";
+
+	size_t dot = v.find('.');
+	if (dot != std::string::npos)
+	{
+		int_part = v.substr(0, dot);
+		dec_part = v.substr(dot + 1);
+		if (dec_part.length() > 2)
+		{
+			dec_part = dec_part.substr(0, 2);
+		}
+		while (dec_part.length() < 2)
+		{
+			dec_part += "0";
+		}
+	}
+
+	if (int_part.empty())
+	{
+		int_part = "0";
+	}
+
+	//千分位
+	std::string out;
+	int count = 0;
+	for (int i = (int)int_part.length() - 1; i >= 0; i--)
+	{
+		out.insert(out.begin(), int_part[i]);
+		count++;
+		if (count % 3 == 0 && i > 0)
+		{
+			out.insert(out.begin(), ',');
+		}
+	}
+
+	std::wstring ret = L"¥";
+	if (negative)
+	{
+		ret += L"-";
+	}
+	ret += CLewaimaiString::UTF8ToUnicode(out + "." + dec_part);
+
+	return ret;
+}
+
 void CHuiyuanShoukuanWnd::Init()
 {
 	//::SetWindowPos(m_hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
@@ -28,6 +91,11 @@ void CHuiyuanShoukuanWnd::Notify(TNotifyUI& msg)
 		{
 			StartShoukuan();
 		}
+		else if (msg.pSender->GetName() == _T("cancelShoukuanBtn"))
+		{
+			//支付中的次按钮:触屏收银机没有 Esc,走与 Esc 完全相同的退出逻辑
+			StartClose();
+		}
 	}
 	else if (msg.sType == _T("textchanged"))
 	{
@@ -320,6 +388,11 @@ void CHuiyuanShoukuanWnd::InitMoney(std::wstring value)
 	if (pMoneyLabel)
 	{
 		pMoneyLabel->SetText(value.c_str());
+
+		//新皮肤里金额 Label 是 autocalcwidth(宽度按文本算,用来把 ¥ 推到金额条右端)。
+		//SetText 不会重置估宽缓存,只有 SetFont 会置 m_bNeedEstimateSize=true(UILabel.cpp:74-79),
+		//同值回写即可,无副作用;不写的话位数一变宽度就停在旧值上。
+		pMoneyLabel->SetFont(pMoneyLabel->GetFont());
 	}
 
 	m_money = value;
@@ -421,8 +494,11 @@ void CHuiyuanShoukuanWnd::StartShoukuan()
 
 	CLabelUI* pMoneyPaying = static_cast<CLabelUI*>(m_pm.FindControl(_T("shoukuan_paying_money")));
 
-	std::wstring valueInfo = L"付款金额:¥" + m_money;
-	pMoneyPaying->SetText(valueInfo.c_str());
+	//新皮肤把「¥」提成了独立的静态 Label(19 粗,与 30 粗的数字底部对齐),
+	//所以这里只写纯数字 —— 再拼一次 ¥ 就会变成两个 ¥。
+	//动态数字是 autocalcwidth,SetText 后要 SetFont 刷新,否则位数变了宽度不动。
+	pMoneyPaying->SetText(m_money.c_str());
+	pMoneyPaying->SetFont(pMoneyPaying->GetFont());
 
 	//开启一个线程,开始处理登录
 	std::thread(&CHuiyuanShoukuanWnd::HandleShoukuan, this).detach();
@@ -707,8 +783,19 @@ void CHuiyuanShoukuanWnd::SetMemberInfo(std::string member_id, std::string card_
 	m_name = name;
 	m_member_level_name = member_level_name;
 
-	m_pm.FindControl(L"huiyuan_num")->SetText((L"会员卡号:" + CLewaimaiString::UTF8ToUnicode(m_card_no)).c_str());
-	m_pm.FindControl(L"huiyuan_name")->SetText((L"会员姓名:" + CLewaimaiString::UTF8ToUnicode(m_name)).c_str());
-	m_pm.FindControl(L"huiyuan_levelname")->SetText((L"会员级别:" + CLewaimaiString::UTF8ToUnicode(m_member_level_name)).c_str());
-	m_pm.FindControl(L"huiyuan_yue")->SetText((L"当前余额:" + CLewaimaiString::UTF8ToUnicode(m_member_balance)).c_str());
+	//新皮肤把「会员卡号 / 会员姓名 / 当前余额 / 会员级别」做成了卡片里的静态小灰字,
+	//值 Label 只放纯值 —— 这里再拼中文前缀就会和皮肤里的静态标签重复一遍
+	m_pm.FindControl(L"huiyuan_num")->SetText(CLewaimaiString::UTF8ToUnicode(m_card_no).c_str());
+	m_pm.FindControl(L"huiyuan_name")->SetText(CLewaimaiString::UTF8ToUnicode(m_name).c_str());
+	m_pm.FindControl(L"huiyuan_yue")->SetText(FormatMoneyValue(m_member_balance).c_str());
+
+	CLabelUI* pLevelLabel = static_cast<CLabelUI*>(m_pm.FindControl(L"huiyuan_levelname"));
+	if (pLevelLabel)
+	{
+		pLevelLabel->SetText(CLewaimaiString::UTF8ToUnicode(m_member_level_name).c_str());
+
+		//级别是药丸(bkimage + autocalcwidth):文案长度一变就必须强制重算宽度,
+		//否则「7折卡」三个字会配着「钻石黑金卡」宽度的底图
+		pLevelLabel->SetFont(pLevelLabel->GetFont());
+	}
 }