Browse Source

完成会员页面和会员充值的优化

张洋 1 month ago
parent
commit
f65edb48b7
36 changed files with 407 additions and 527 deletions
  1. 1 0
      .gitignore
  2. 0 80
      .workbuddy/memory/2026-08-29.md
  3. 0 75
      .workbuddy/memory/2026-08-30.md
  4. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/balance_card.png
  5. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/btn_border_gray.png
  6. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/btn_border_gray_Click.png
  7. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/btn_border_gray_Hover.png
  8. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/btn_border_green.png
  9. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/btn_border_green_Click.png
  10. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/btn_border_green_Hover.png
  11. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/btn_gray_disabled.png
  12. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/charge_card.png
  13. 173 113
      bin/Win32/Debug/zhipuzi_pos_windows/skin/huiyuan_chongzhi_wnd.xml
  14. 147 88
      bin/Win32/Debug/zhipuzi_pos_windows/skin/huiyuan_page.xml
  15. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/input_focus.png
  16. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/input_hover.png
  17. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/input_normal.png
  18. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/key_hover.png
  19. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/key_normal.png
  20. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/key_pushed.png
  21. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/pay_card_hover.png
  22. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/pay_card_normal.png
  23. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/pay_card_pushed.png
  24. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/pay_icon_cash.png
  25. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/pay_icon_online.png
  26. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_hover_72.png
  27. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_hover_82.png
  28. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_normal_72.png
  29. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_normal_82.png
  30. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_pushed_72.png
  31. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_pushed_82.png
  32. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_selected_72.png
  33. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/skin/tag_selected_82.png
  34. 53 141
      zhipuzi_pos_windows/page/CHuiyuanPageUI.cpp
  35. 32 29
      zhipuzi_pos_windows/wnd/CHuiyuanChongzhiWnd.cpp
  36. 1 1
      zhipuzi_pos_windows/wnd/CHuiyuanChongzhiWnd.h

+ 1 - 0
.gitignore

@@ -10,3 +10,4 @@
 zhipuzi_pos_windows.exe
 zhipuzi_pos_windows.pdb
 /bin/Win32/Debug/zhipuzi_pos_windows/DuiLib_d.pdb
+/.workbuddy

+ 0 - 80
.workbuddy/memory/2026-08-29.md

@@ -1,80 +0,0 @@
-# 2026-08-29
-
-## 新建商品:从整页切换改为弹框录入
-
-用户需求:商品页「新建商品」按钮原本 `SwitchPage(CMainWnd::SHANGPIN_CREATE)` 跳整页,改为弹框录入后保存。
-
-### 改动清单
-- 新增 `zhipuzi_pos_windows/wnd/CShangpinCreateWnd.h/.cpp`:继承 `CModalWnd` 的模态弹框,参照 `CShangpinNewTypeWnd` 写法。
-- 新增皮肤 `bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_create_wnd.xml`(size 800x780,内容区 `shangpin_create_dlg_content` 带 vscrollbar)。
-- `CShangpinPageUI.cpp/.h`:`shangpin_page_add_btn` 改调新增的 `ShowCreateShangpin()`,弹框返回 IDOK 后 `InitFoodShow()` 刷新列表。
-- 工程登记:`zhipuzi_pos_windows.vcxproj` 与 `.vcxproj.filters` 各加 ClInclude/ClCompile 两条。
-
-### 补全遗漏字段(第二轮)
-首版只做了基础字段,用户要求与原 `shangpin_create_page.xml` 完全对齐。补齐:
-条码秤PLU编码、条码秤商品编码、库存类型(开启/无限)、进货价、进货价模式(当前成本/加权平均)、
-在哪些地方显示(收银机/外卖/扫码点餐)、是否开启打包费+金额、商品加工方式(方案一二三)、
-以及原页右侧的「扫码快速录入」按钮(做成条码行内小按钮,复用 `CShangpinSaomaluruWnd` 回填条码/名字/价格/单位)。
-
-### 关键实现约定
-- 控件命名统一 `shangpin_create_dlg_*`(原页面是 `shangpin_create_page_*`)。
-- 线程安全:控件值一律在主线程 `StartSave()` 读完存成员,子线程 `HandleSave()` 只用成员构造 params。(原页面也是这个做法;项目里 `CShangpinNewTypeWnd` 直接在子线程读控件,属不推荐写法。)
-- 校验失败在主线程 `ShowError()` 直接显示;网络失败在子线程 `PostMessage(WM_MEMBER_CHECK_FAIL)`,成功则 `WM_MEMBER_CHECK_SUCCESS` → `Close(IDOK)`。
-- 数字输入校验抽成 `FilterNumberInput(ctrl_name, allow_dot)`,替代原页面 8 处复制粘贴的循环。
-
-### 接口参数映射(/goods/addgoods)
-is_weight ← 称重开关;stock_status OPEN/CLOSED ← 库存类型;goods_status NORMAL/CLOSED ← 商品状态;
-cost_mode ← 进货价模式(0/1);扫码点餐开关同时映射到 is_tangshi_show 和 is_zhengcan_show;jiagong_type 1/2/3 ← 加工方案。
-
-### 自检方法(可复用)
-用脚本交叉比对 XML 的 `name=` 与 cpp 里 `FindControl` 的控件名:
-- "cpp 引用但 XML 未定义" 必须为空,否则运行时空指针崩溃;
-- "XML 定义但 cpp 未引用" 通常只是 radio 的备选分支,只读默认选中项,属正常。
-
-## 商品页扫码枪直接扫码 → 自动弹新建商品框
-
-需求:在商品管理页用扫码枪扫条码,调服务器拿商品信息,再弹新建商品框并预填。
-
-### 扫码输入的传递链路(重要)
-`CMainWnd::OnInput` 靠「按键间隔 <50ms + 回车」判定为扫码枪输入,
-完成后调 `m_curPageUI->HandleTextCapture(content)`。
-页面若正显示弹框,转发给 `m_curModalWnd`;**但只转发一层**——
-弹框之上再开弹框时,需要在弹框内自己维护 `m_subModalWnd` 再转一层,否则扫码输入会被上一层截走。
-
-### 实现
-- 接口与 `CShangpinSaomaluruWnd::ConfirmMember` 完全相同:`/goods/getinfobythirdbarcode`,参数 `barcode`,
-  返回 data 的 code/name/price/unit(还有 des,未用)。
-- 新增消息(pch/define.h):`WM_SHANGPIN_SAOMA_SUCCESS` 10702、`_FAIL` 10703、`_FILL` 10704。
-- `CShangpinPageUI`:HandleTextCapture 开线程请求 → 成功 PostMessage(SUCCESS) →
-  HandleCustomMessage 收到后 `ShowCreateShangpinWithSaomaInfo()`(主线程开弹框);失败 ShowToast 提示。
-- `CShangpinCreateWnd::SetSaomaInfo()` 在 Create 之前调用,Init() 里先 `InitFoodtypeList()` 重置所有控件、
-  再 `ApplySaomaInfo()` 预填——顺序不能反,否则会被重置覆盖。
-- 弹框内直接扫码也接上了:HandleTextCapture → StartSaomaFill → PostMessage(FILL) → ApplySaomaInfo。
-  扫码失败复用 `WM_MEMBER_CHECK_FAIL`,但用 `m_is_saoma_requesting` 标志区分,避免误改保存流程的 `m_status`。
-
-## 后续调整:弹框内扫码全部移除
-
-用户改为「只在商品管理页支持扫码,弹框打开后不再处理扫码」。已删除:
-- 弹框的 ShowSaomaluru / StartSaomaFill / HandleSaomaFill,以及 m_subModalWnd、m_saoma_barcode、
-  m_is_saoma_requesting、WM_SHANGPIN_SAOMA_FILL(10704)、对 CShangpinSaomaluruWnd.h 的 include、
-  XML 里的扫码录入按钮。
-- CShangpinPageUI::HandleTextCapture 不再转发给 m_curModalWnd,弹框打开期间直接 return。
-保留:商品页扫码 → 弹框预填(SetSaomaInfo/ApplySaomaInfo)这条链路不变。
-
-### 教训:skin XML 会被外部改动,收尾必须复验
-本次发现 `bin/.../skin/shangpin_create_wnd.xml` 在 18:25 被外部编辑过,
-「扫码录入」按钮和「条码秤商品编码」整行都被删掉了,但 cpp 仍在 FindControl 它——
-若不处理,保存商品时 FindControl 返回 NULL → GetText() 直接崩溃。已补回该控件。
-**结论:每次收尾都要跑一遍「XML 控件名 vs cpp 引用」交叉比对,
-"代码引用但 XML 未定义" 必须为空。**
-
-## 删除「条码秤商品编码」字段
-
-用户确认门店不需要,从**新建商品弹框**中彻底移除(原整页 CShangpinCreatePageUI /
-CShangpinUpdatePageUI 不动,它们仍保留该字段,两边互不影响)。
-清理点:XML 的 HorizontalLayout、cpp 的 textchanged 数字校验引用;
-`params["weight_food_code"]` 保留但固定传空字符串(接口需要这个参数)。
-
-弹框现有 27 个控件,字段清单:名字、序号、分类、条码、价格、单位、是否称重、
-条码秤PLU编码、库存类型、当前库存、商品状态、进货价、进货价模式、
-显示位置(3)、打包费开关+金额、加工方式(3)、保存按钮、错误提示、内容容器。

+ 0 - 75
.workbuddy/memory/2026-08-30.md

@@ -1,75 +0,0 @@
-# 2026-08-30
-
-## 新建商品:手动点击回整页,扫码才走弹框;弹框再瘦身
-
-### 入口分流
-- 手动点「新建商品」按钮 → `m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_CREATE)`,回到原来的整页
-  (`CShangpinPageUI::HandleClickMsg` 里 `shangpin_page_add_btn` 分支)。
-- 只有在商品页用扫码枪扫条码 → 请求接口拿到信息 → 才弹 `CShangpinCreateWnd`。
-- `CShangpinPageUI::ShowCreateShangpin()`(手动点开弹框那个)已无调用,删除;
-  只保留 `ShowCreateShangpinWithSaomaInfo()`。
-
-### 弹框删掉三个字段,接口固定传值
-| 删除的字段 | 接口参数固定值 |
-|---|---|
-| 库存类型(开启/无限) | `stock_status = "OPEN"` |
-| 在哪些地方显示(收银机/外卖/扫码点餐) | `is_shouyinji_show/is_waimai_show/is_tangshi_show/is_zhengcan_show` 全 `"1"` |
-| 商品加工方式(方案一/二/三) | `jiagong_type = "1"` |
-
-「当前库存」输入框保留(库存固定开启后它就是实际库存数量)。
-同步清理:XML 的三个 HorizontalLayout、InitFoodtypeList 的初始化、StartSave 的读取、
-以及 m_kucuntype / m_jiagong_type / m_is_shouyinji_show / m_is_waimai_show / m_is_saomadiancan_show 五个成员。
-
-### 弹框现状
-- 皮肤 `shangpin_create_wnd.xml`,size 700x680,内容区 `shangpin_create_dlg_content` height=636
-  (636 + 标题栏 44 = 680,改尺寸时这两个数要一起改,否则保存按钮会被挤出窗口)。
-- 剩余可填项 12 个:名字、序号、分类、条码、价格、单位、是否称重、条码秤PLU编码、
-  当前库存、进货价、是否开启打包费+金额;另有商品状态、进货价模式两组单选。
-- 校验结果:XML 合法,代码引用的控件全部存在,无致命缺失。
-
-### 注意
-`CShangpinCreatePageUI`(原整页)和 `CShangpinUpdatePageUI` 仍保留库存类型、显示位置、
-加工方式、条码秤商品编码这些字段,与弹框互不影响,改弹框时不要顺手动它们。
-
----
-
-## 后续:上一节的简化被全部回滚,并新增修改商品弹框
-
-用户撤销了上面的简化,最终方案:
-
-### 1. 新建商品按钮恢复走弹框
-`shangpin_page_add_btn` → `ShowCreateShangpin()`(不再 SwitchPage 到整页)。
-`CShangpinPageUI` 现在有三个弹框入口:
-- `ShowCreateShangpin()` 手动点击新建
-- `ShowCreateShangpinWithSaomaInfo()` 扫码枪扫码后新建(预填)
-- `ShowUpdateShangpin(CFood)` 点击商品后修改
-
-### 2. 新建弹框恢复三字段
-库存类型、在哪些地方显示、商品加工方式全部加回,接口参数也从固定值改回按控件值传。
-只有「条码秤商品编码」保持删除(接口 `weight_food_code` 固定传空字符串)。
-窗口改回 800x780 / 内容区 736。
-
-### 3. 新增修改商品弹框 CShangpinUpdateWnd
-- 文件:`wnd/CShangpinUpdateWnd.h/.cpp` + `skin/shangpin_update_wnd.xml`(控件前缀 `shangpin_update_dlg_`)
-- `ClickFoodAction` 从 `SwitchPage(SHANGPIN_UPDATE)` 改为打开此弹框,成功后 `InitFoodShow()` 刷新。
-- 接口 `/goods/updategoods`(参数比新建多 `goods_id`,返回 `data["goods_id"]`);
-  删除走 `/goods/deletegoods` + `CFoodHandle::DeleteOneFood`,两者成功后都 `Close(IDOK)`。
-- 与新建弹框的字段一致(同样没有条码秤商品编码),额外多一个红色「删除商品」按钮。
-- 窗口 800x840 / 内容区 796。
-
-### 工程文件注意
-`.vcxproj.filters` 里曾出现 `wnd\CShangpinCreateWnd.cpp` 被登记两次
-(我手动加一条 + VS 在用户加文件时自动加一条),已去重。
-**新增源文件后要顺手查一遍重复登记**(用 Counter 统计 `Include=` 出现次数)。
-
-### 两个弹框统一缩小到 750x680
-内容区 636(= 680 - 标题栏 44)。
-
-**改宽度时内部控件也要跟着收窄**,否则右侧被裁剪:
-单选组(库存类型 / 进货价模式 / 加工方式)原本是
-`外层 Label width=110` + `HorizontalLayout width=600 padding="30,0,30,0"`,
-总宽 110+600+60 = 770 > 750,会溢出。
-已把容器改成 560、内部文字 Label 改成 520 → 总宽 730,留 20px 余量。
-错误提示 Label 的 600 是居中显示的,不受影响,保持原样。
-
-

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


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


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


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


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


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


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


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


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


+ 173 - 113
bin/Win32/Debug/zhipuzi_pos_windows/skin/huiyuan_chongzhi_wnd.xml

@@ -1,135 +1,195 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<Window size="800,634" caption="0,0,0,44" roundcorner="4,4" shadowsize="3" showshadow="true">
-	<Font id="0" name="微软雅黑" size="24" />
-	<Font id="1" name="微软雅黑" size="40" />
-	<Font id="2" name="微软雅黑" size="18" />
-	<Font id="3" name="微软雅黑" size="32" />
-	<Font id="4" name="微软雅黑" size="14" />
-	<VerticalLayout bkimage="shoukuan_bkg.png" >
-		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF3CB371">
-			<Label name="shoukuan_version" text="会员充值" height="44" align="center" valign="center" padding="0,0,0,0" textcolor="#FFFFFFFF" font="2"/>
-			<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'"/>
+<Window size="860,560" caption="0,0,0,52" roundcorner="4,4" shadowsize="3" showshadow="true">
+	<Font id="210" name="微软雅黑" size="12" />
+	<Font id="211" name="微软雅黑" size="13" />
+	<Font id="212" name="微软雅黑" size="14" />
+	<Font id="213" name="微软雅黑" size="15" />
+	<Font id="214" name="微软雅黑" size="16" />
+	<Font id="215" name="微软雅黑" size="36" />
+	<Font id="216" name="微软雅黑" size="24" />
+	<Font id="217" name="微软雅黑" size="18" />
+
+	<VerticalLayout bkcolor="#FFFFFFFF">
+
+		<HorizontalLayout name="shoukuan_title_bkg" height="52" bkcolor="#FF3CB371">
+			<Label text="会员充值" height="52" align="center" valign="center" textcolor="#FFFFFFFF" font="213" />
+			<Button name="closebtn" keyboard="false" float="true" pos="820,18,836,34" 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" vscrollbar="true">
-			<HorizontalLayout height="400">
-				<VerticalLayout height="380" padding="0,20,0,0">		
-					<HorizontalLayout height="50" padding="0,0,0,0">
-						<Label name="huiyuan_chongzhi_curbalance" text="当前余额:" font="2" float="true" pos="30,12,250,40"/>
-					</HorizontalLayout>
-					
-					<HorizontalLayout height="50" padding="0,20,0,0">
-						<Label text="充值:" font="2" float="true" pos="30,12,180,40"/>
-						<Edit name="chongzhi_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="2" float="true" pos="362,15,470,40"/>
-					</HorizontalLayout>
-					
-					<HorizontalLayout height="50" padding="0,35,0,0">
-						<Label text="快选:" font="2" float="true" pos="30,12,180,40"/>
-						<Button name="xianjin_kuaijie_50" font="4" text="50元" heiht="36" width="55" padding="100,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF3CB371"></Button>
-						<Button name="xianjin_kuaijie_100" font="4" text="100元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF3CB371"></Button>
-						<Button name="xianjin_kuaijie_200" font="4" text="200元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF3CB371"></Button>
-						<Button name="xianjin_kuaijie_500" font="4" text="500元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF3CB371"></Button>
-						<Button name="xianjin_kuaijie_1000" font="4" text="1000元" heiht="36" width="55" padding="14,10,0,0" textcolor="#FFFFFFFF" normalimage="" hotimage="" pushedimage="" bordersize="0" bordercolor="#FFC1C1C1" bkcolor="#FF3CB371"></Button>
-					</HorizontalLayout>
-					
-					<HorizontalLayout height="50" padding="0,35,0,0">
-						<Label text="赠送:" font="2" float="true" pos="30,12,180,40"/>
-						<Edit name="zengsong_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="2" float="true" pos="362,15,470,40"/>
-					</HorizontalLayout>
 
-					<HorizontalLayout height="50" padding="0,20,0,0">
-						<Control></Control>
-						<Label name="shoukuanresult" font="2" width="400" height="50" wordbreak="true" text="" visible="false" textcolor="#FF0000" align="center" />
-						<Control></Control>
+		<VerticalLayout visible="true" name="shoukuan_before_pay_layout" inset="24,24,24,24">
+			<HorizontalLayout height="460" childpadding="20">
+
+				<!-- ==================== 左侧:金额与支付 ==================== -->
+				<VerticalLayout width="472" height="460">
+
+					<!-- 当前余额 -->
+					<VerticalLayout width="472" height="102" bkimage="file='balance_card.png' corner='16,16,16,16'" inset="20,20,16,16">
+						<Label text="当前余额" font="211" textcolor="#FF8A9099" width="436" height="20" />
+						<Control width="436" height="2" />
+						<HorizontalLayout width="436" height="44" childvalign="vcenter">
+							<Label name="huiyuan_chongzhi_curbalance" text="¥0.00" font="215" textcolor="#FF3CB371" height="44" maxheight="44" autocalcwidth="true" valign="center" />
+							<Control width="8" height="44" />
+							<Label text="元" font="214" textcolor="#FF5F6368" width="24" height="44" maxheight="44" valign="center" />
+							<Control width="20" height="44" />
+						</HorizontalLayout>
+					</VerticalLayout>
+
+					<Control width="472" height="14" />
+
+					<!-- 充值 / 赠送 -->
+					<VerticalLayout width="472" height="170" bkimage="file='charge_card.png' corner='16,16,16,16'" inset="16,16,16,16">
+						<HorizontalLayout width="440" height="46" childvalign="vcenter">
+							<Label text="充值" font="213" textcolor="#FF1F2329" width="56" height="46" maxheight="46" valign="center" />
+							<Control width="12" height="46" />
+							<Edit name="chongzhi_edit" width="336" height="46" maxheight="46" font="212" 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="212" textcolor="#FF5F6368" width="24" height="46" maxheight="46" align="right" valign="center" />
+						</HorizontalLayout>
+
+						<Control width="440" height="6" />
+
+						<!-- 快选金额:用明确占位+固定间距,避免 DuiLib childpadding 在首个子控件前额外加 padding 导致 100元 无法与输入框左对齐 -->
+						<HorizontalLayout width="440" height="34" childvalign="vcenter">
+							<Control width="68" height="34" />
+							<Button name="xianjin_kuaijie_100" text="100元" font="211" 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="#FF3CB371" pushedtextcolor="#FFFFFFFF" />
+							<Control width="10" height="34" />
+							<Button name="xianjin_kuaijie_200" text="200元" font="211" 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="#FF3CB371" pushedtextcolor="#FFFFFFFF" />
+							<Control width="10" height="34" />
+							<Button name="xianjin_kuaijie_500" text="500元" font="211" 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="#FF3CB371" pushedtextcolor="#FFFFFFFF" />
+							<Control width="10" height="34" />
+							<Button name="xianjin_kuaijie_1000" text="1000元" font="211" textcolor="#FF5F6368" width="82" height="34" maxheight="34" bkcolor="#00000000" hotbkcolor="#00000000" pushedbkcolor="#00000000" normalimage="file='tag_normal_82.png'" hotimage="file='tag_hover_82.png'" pushedimage="file='tag_pushed_82.png'" hottextcolor="#FF3CB371" pushedtextcolor="#FFFFFFFF" />
+						</HorizontalLayout>
+
+						<Control width="440" height="6" />
+
+						<HorizontalLayout width="440" height="46" childvalign="vcenter">
+							<Label text="赠送" font="213" textcolor="#FF1F2329" width="56" height="46" maxheight="46" valign="center" />
+							<Control width="12" height="46" />
+							<Edit name="zengsong_edit" width="336" height="46" maxheight="46" font="212" 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="212" textcolor="#FF5F6368" width="24" height="46" maxheight="46" align="right" valign="center" />
+						</HorizontalLayout>
+					</VerticalLayout>
+
+					<Control width="472" height="14" />
+
+					<!-- 错误提示 -->
+					<HorizontalLayout width="472" height="28">
+						<Label name="shoukuanresult" font="212" textcolor="#FFC93A38" text="" visible="false" wordbreak="true" valign="center" />
 					</HorizontalLayout>
+
+					<Control width="472" height="12" />
+
+					<!-- 支付方式 -->
+					<VerticalLayout width="472" height="120">
+						<Label text="支付方式" font="213" textcolor="#FF1F2329" width="472" height="22" valign="center" />
+						<Control width="472" height="14" />
+
+						<HorizontalLayout name="huiyuan_chongzhi_jiesuan_zhifufangshi_layout" width="472" height="84" childpadding="10">
+
+							<HorizontalLayout name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu" width="231" height="84" maxheight="84">
+								<Button name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_btn" float="true" pos="0,0,231,84" normalimage="file='pay_card_normal.png' corner='14,14,14,14'" hotimage="file='pay_card_hover.png' corner='14,14,14,14'" pushedimage="file='pay_card_pushed.png' corner='14,14,14,14'" />
+								<Control name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_icon" float="true" pos="16,22,56,62" bkimage="file='pay_icon_online.png' corner='10,10,10,10'" mouse="false" />
+								<Label name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_icon_txt" text="扫" float="true" pos="16,22,56,62" font="217" textcolor="#FFFFFFFF" align="center" valign="center" mouse="false" />
+								<Label name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_name" text="扫码支付" float="true" pos="70,24,213,42" font="214" textcolor="#FF1F2329" mouse="false" />
+								<Label name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_desc" text="微信/支付宝/云闪付" float="true" pos="70,44,213,62" font="210" textcolor="#FF8A9099" mouse="false" />
+							</HorizontalLayout>
+
+							<HorizontalLayout name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin" width="231" height="84" maxheight="84">
+								<Button name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_btn" float="true" pos="0,0,231,84" normalimage="file='pay_card_normal.png' corner='14,14,14,14'" hotimage="file='pay_card_hover.png' corner='14,14,14,14'" pushedimage="file='pay_card_pushed.png' corner='14,14,14,14'" />
+								<Control name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_icon" float="true" pos="16,22,56,62" bkimage="file='pay_icon_cash.png' corner='10,10,10,10'" mouse="false" />
+								<Label name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_icon_txt" text="¥" float="true" pos="16,22,56,62" font="217" textcolor="#FFFFFFFF" align="center" valign="center" mouse="false" />
+								<Label name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_name" text="现金支付" float="true" pos="70,24,213,42" font="214" textcolor="#FF1F2329" mouse="false" />
+								<Label name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_desc" text="直接确认收款" float="true" pos="70,44,213,62" font="210" textcolor="#FF8A9099" mouse="false" />
+							</HorizontalLayout>
+
+						</HorizontalLayout>
+					</VerticalLayout>
 				</VerticalLayout>
-				
-				<HorizontalLayout width="340" height="406" bkcolor="#FFF3F3F3">
-					<Button name="jianpan_1" text="1" font="0" 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="0" 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="0" 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="0" 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="0" 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="0" 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="0" 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="0" 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="0" 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_qingkong" text="清空" font="0" 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="0" 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="0" 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>
-				</HorizontalLayout>
-			</HorizontalLayout>
-			
-			<Label text="支付方式" font="2" padding="30,10,0,15" height="30"/>
-					
-			<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
-			
-			<HorizontalLayout name="huiyuan_chongzhi_jiesuan_zhifufangshi_layout">
-				<HorizontalLayout name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu" width="120" hegiht="80" float="true">
-					<Button name="huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_btn" text="" height="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="微信支付/支付宝/云闪付" wordbreak="true" width="115" height="40" font="14" float="true" pos="2,35,117,75" textcolor="#FFFFFFFF" mouse="false"></Label>
-				</HorizontalLayout>
-				
-				<HorizontalLayout name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin" width="120" hegiht="80" float="true">
-					<Button name="huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_btn" text="" height="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>
+
+				<!-- ==================== 右侧:数字键盘 ==================== -->
+				<!-- 设计图要求键盘最上/最下分别与余额顶部/支付方式底部对齐,因此取消 15px 上下留白,
+				     4 行按键 110 + 3 个行间距 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="216" 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="#FF3CB371" />
+							<Button name="jianpan_2" text="2" font="216" 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="#FF3CB371" />
+							<Button name="jianpan_3" text="3" font="216" 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="#FF3CB371" />
+						</HorizontalLayout>
+						<HorizontalLayout width="320" height="110" childpadding="10">
+							<Button name="jianpan_4" text="4" font="216" 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="#FF3CB371" />
+							<Button name="jianpan_5" text="5" font="216" 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="#FF3CB371" />
+							<Button name="jianpan_6" text="6" font="216" 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="#FF3CB371" />
+						</HorizontalLayout>
+						<HorizontalLayout width="320" height="110" childpadding="10">
+							<Button name="jianpan_7" text="7" font="216" 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="#FF3CB371" />
+							<Button name="jianpan_8" text="8" font="216" 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="#FF3CB371" />
+							<Button name="jianpan_9" text="9" font="216" 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="#FF3CB371" />
+						</HorizontalLayout>
+						<HorizontalLayout width="320" height="110" childpadding="10">
+							<Button name="jianpan_qingkong" text="清空" font="213" 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="#FF3CB371" />
+							<Button name="jianpan_0" text="0" font="216" 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="#FF3CB371" />
+							<Button name="jianpan_x" text="×" font="216" 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="#FF3CB371" />
+						</HorizontalLayout>
+					</VerticalLayout>
+					<Control width="320" height="1" />
+				</VerticalLayout>
+
 			</HorizontalLayout>
 		</VerticalLayout>
-		
+
+		<!-- 扫码中 -->
 		<VerticalLayout name="shoukuan_tishi_layout" visible="false">
-			<HorizontalLayout padding="0,100,0,0" height="129">
-				<Control></Control>
-				<Control bkimage="qrcode_attention.png" width="129" height="127"></Control>
-				<Control></Control>
+			<Control height="90" />
+			<HorizontalLayout height="127" childalign="center">
+				<Control bkimage="qrcode_attention.png" width="129" height="127" maxheight="127" />
 			</HorizontalLayout>
-			
-			<Label text="请扫描顾客付款二维码" align="center" padding="0,30,0,0" height="40" font="0"></Label>
+			<Label text="请扫描顾客付款二维码" align="center" height="40" font="217" textcolor="#FF1F2329" />
+			<Label text="按【Esc】取消本次支付" align="center" height="30" font="212" textcolor="#FF8A9099" />
+			<Control />
 		</VerticalLayout>
-		
+
+		<!-- 支付中 -->
 		<VerticalLayout name="shoukuan_paying_layout" visible="false">
-			<HorizontalLayout name="shoukuan_paying_loading" height="24" padding="0, 20, 0, 20">
-				<Control></Control>
+			<HorizontalLayout name="shoukuan_paying_loading" height="24" padding="0, 60, 0, 20">
+				<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="3" textcolor="0xFF3CB371" align="center"></Label>
-			
-			<Label height="32" padding="0,10,0,10" name="shoukuan_paying_status" text="请求支付中..." font="2" textcolor="0xFF3CB371" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_paying_attention" text="如果用户没有支付成功,则请确认客户不再进行支付时再关闭此窗口,按【Esc】取消本次支付" font="2" textcolor="0xFF808080" wordbreak="true" align="center" />
+
+			<Label height="40" padding="0,10,0,10" name="shoukuan_paying_money" text="充值金额:" font="217" textcolor="#FF3CB371" align="center" />
+
+			<Label height="32" padding="0,10,0,10" name="shoukuan_paying_status" text="请求支付中..." font="212" textcolor="#FF3CB371" align="center" />
+
+			<Label height="60" padding="20,30,20,0" name="shouyin_paying_attention" text="如果用户没有支付成功,则请确认客户不再进行支付时再关闭此窗口,按【Esc】取消本次支付" font="212" textcolor="#FF8A9099" wordbreak="true" align="center" />
 		</VerticalLayout>
-		
-		<VerticalLayout name="shoukuan_pay_success_layout" visible="false">			
-			<Label height="40" padding="0,100,0,20" name="shoukuan_pay_success_money" text="成功收款:" font="3" textcolor="0xFF3CB371" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_pay_success_attention" text="按任意键关闭窗口" font="2" textcolor="0xFF808080" wordbreak="true" align="center" />
+
+		<!-- 支付成功 -->
+		<VerticalLayout name="shoukuan_pay_success_layout" visible="false">
+			<Label height="40" padding="0,100,0,20" name="shoukuan_pay_success_money" text="充值成功:" font="217" textcolor="#FF3CB371" align="center" />
+
+			<Label height="60" padding="20,30,20,0" name="shouyin_pay_success_attention" text="按任意键关闭窗口" font="212" textcolor="#FF8A9099" 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>
+				<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="3" textcolor="0xFFD33E3A" align="center"></Label>
-			
-			<Label height="60" padding="20,30,20,0" name="shouyin_pay_fail_attention" text="" font="2" textcolor="0xFF808080" wordbreak="true" align="center" />
+
+			<Label height="40" padding="0,20,0,20" name="shoukuan_pay_fail_money" text="充值失败" font="217" textcolor="#FFD33E3A" align="center" />
+
+			<Label height="60" padding="20,30,20,0" name="shouyin_pay_fail_attention" text="" font="212" textcolor="#FF8A9099" wordbreak="true" align="center" />
 		</VerticalLayout>
-    </VerticalLayout>
-</Window>
+	</VerticalLayout>
+</Window>

+ 147 - 88
bin/Win32/Debug/zhipuzi_pos_windows/skin/huiyuan_page.xml

@@ -1,98 +1,157 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Window>
-	<Font id="0" name="微软雅黑" size="24" />
-	<Font id="diandan_1" name="微软雅黑" size="28" />
-	<Font id="2" name="微软雅黑" size="16" />
-	<Font id="3" name="微软雅黑" size="14" />
+	<Font id="201" name="微软雅黑" size="12" />
+	<Font id="202" name="微软雅黑" size="14" />
+	<Font id="203" name="微软雅黑" size="15" />
+	<Font id="204" name="微软雅黑" size="18" />
+	<Font id="205" name="微软雅黑" size="26" />
+	<Font id="206" name="微软雅黑" size="22" />
+	<Font id="207" name="微软雅黑" size="16" />
 
 	<HuiyuanPage>
-		<HorizontalLayout>
-			<Control width="1" bkcolor="#FFD1D1D1"></Control>
-			
-			<VerticalLayout width="420" bkcolor="#FFFFFFFF">				
-				<Edit name="huiyuan_page_shoujihao_edit" tipvalue="请输入会员手机号搜索" width="390" height="50" padding="15,25,15,15" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-					
-				<Button name="huiiyuan_page_sousuo_btn" width="390" height="50" padding="15,0,15,15" text="搜索" textcolor="#FFFFFFFF" 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'" />
-
-				
-				<!--
-				<HorizontalLayout width="340" height="416" bkcolor="#FFF3F3F3" padding="40,15,40,10">
-					<Button name="jianpan_1" text="1" font="0" heiht="60" width="60" float="true" pos="10,10,110,100" 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="0" heiht="60" width="60" float="true" pos="120,10,220,100" 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="0" heiht="60" width="60" float="true" pos="230,10,330,100" 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="0" heiht="60" width="60" float="true" pos="10,110,110,200" 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="0" heiht="60" width="60" float="true" pos="120,110,220,200" 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="0" heiht="60" width="60" float="true" pos="230,110,330,200" 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="0" heiht="60" width="60" float="true" pos="10,210,110,300" 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="0" heiht="60" width="60" float="true" pos="120,210,220,300" 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="0" heiht="60" width="60" float="true" pos="230,210,330,300" 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_qingkong" text="清空" font="0" heiht="60" width="60" float="true" pos="10,310,110,400" 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="0" heiht="60" width="60" float="true" pos="120,310,220,400" 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="0" heiht="60" width="60" float="true" pos="230,310,330,400" 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>
-				</HorizontalLayout>
-				-->
-				
-				<Label name="errorinfo" text="" font="16" width="400" height="26" padding="10,15,10,10" textcolor="#FFFF0000" visible="false" align="center"></Label>
-				
-				<Control></Control>
-
-				<HorizontalLayout height="60" width="420" padding="0,0,0,30">
-					<Control></Control>
-					<Button name="huiyuan_page_add_btn" width="380" height="50" text="添加会员" textcolor="#FFFFFFFF" normalimage="file='btn_red_zhengchang.png' corner='5,5,5,5'" hotimage="file='btn_red_xuanfu.png' corner='5,5,5,5'" pushedimage="file='btn_red_dianji.png' corner='5,5,5,5'" />
-					<Control></Control>
+		<HorizontalLayout bkcolor="#FFF5F7FA" inset="16,16,16,16">
+
+			<!-- ==================== 左侧:查找会员 ==================== -->
+			<VerticalLayout width="380" bkcolor="#FFFFFFFF" borderround="24,24" inset="20,20,20,20">
+				<Label text="查找会员" font="207" textcolor="#FF1F2329" height="26" />
+
+				<Control height="14" />
+
+				<HorizontalLayout height="46" bkcolor="#FFF5F7FA" borderround="16,16" inset="14,0,14,0" childpadding="10" childvalign="vcenter">
+					<Control bkimage="search_icon.png" width="25" height="26" maxheight="26" />
+					<Edit name="huiyuan_page_shoujihao_edit" tipvalue="请输入会员手机号搜索" tipvaluecolor="#FFA8ADB3" font="203" textcolor="#FF1F2329" bkcolor="#FFF5F7FA" nativebkcolor="#FFF5F7FA" />
 				</HorizontalLayout>
+
+				<Control height="12" />
+
+				<Button name="huiiyuan_page_sousuo_btn" height="46" text="搜索" font="203" textcolor="#FFFFFFFF" 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 />
+
+				<Button name="huiyuan_page_add_btn" height="50" text="+  添加会员" font="203" textcolor="#FF3CB371" normalimage="file='btn_border_green.png' corner='8,8,8,8'" hotimage="file='btn_border_green_Hover.png' corner='8,8,8,8'" pushedimage="file='btn_border_green_Click.png' corner='8,8,8,8'" />
 			</VerticalLayout>
-			
-			<Control width="1" bkcolor="#FFEBE8E8"></Control>
-			
-			<HorizontalLayout name="huiyuan_page_no_layout">
-				<Control></Control>
-				<VerticalLayout width="480">
-					<Control></Control>
-					<HorizontalLayout height="141">
-						<Control></Control>
-						<Control bkimage="huiyuan_no.png" width="206" height="141"></Control>
-						<Control></Control>
-					</HorizontalLayout>
-					<Label text="请在左侧输入手机号搜索会员,再进行充值、挂失等操作" wordbreak="true" textcolor="#FF666666" heiht="30" padding="0,20,0,0" align="center"></Label>
-					<Control></Control>
+
+			<Control width="16" />
+
+			<!-- ==================== 右侧:会员详情 ==================== -->
+			<VerticalLayout>
+
+				<!-- 未搜索时的空状态 -->
+				<VerticalLayout name="huiyuan_page_no_layout" bkcolor="#FFFFFFFF" borderround="24,24">
+					<Control />
+					<VerticalLayout height="141" childalign="center">
+						<Control bkimage="huiyuan_no.png" width="206" height="141" maxheight="141" />
+					</VerticalLayout>
+					<Label name="huiyuan_page_no_tip" text="请在左侧输入手机号搜索会员,再进行充值、挂失等操作" font="203" textcolor="#FF8A9099" height="40" align="center" />
+					<Control />
+				</VerticalLayout>
+
+				<!-- 搜索到会员后的信息区 -->
+				<VerticalLayout name="huiyuan_info_layout" visible="false" childpadding="16">
+
+					<!-- 会员信息卡 -->
+					<VerticalLayout bkcolor="#FFFFFFFF" borderround="24,24" inset="24,20,24,20">
+
+						<!-- 冻结提示条:只有会员被冻结时才显示 -->
+						<VerticalLayout name="huiyuan_freeze_tip_layout" visible="false" height="60">
+							<HorizontalLayout height="42" bkcolor="#FFFDECEC" borderround="16,16" inset="13,0,13,0" childpadding="10" childvalign="vcenter">
+								<VerticalLayout width="18" height="18" maxheight="18" bkcolor="#FFEB4D4B" borderround="18,18" childvalign="vcenter">
+									<Label text="!" font="201" textcolor="#FFFFFFFF" height="18" maxheight="18" align="center" valign="center" />
+								</VerticalLayout>
+								<Label text="该会员已冻结,暂不能消费、充值与积分。解冻后立即恢复正常使用。" font="201" textcolor="#FFA32D2D" valign="center" />
+							</HorizontalLayout>
+							<Control height="18" />
+						</VerticalLayout>
+
+						<!-- 会员头部:头像 + 姓名徽章 + 余额 -->
+						<HorizontalLayout height="64" childvalign="vcenter">
+							<VerticalLayout name="huiyuan_avatar_layout" width="64" height="64" maxheight="64" bkcolor="#FFE8F5EE" borderround="64,64" childvalign="vcenter">
+								<Label name="huiyuan_avatar_text" text="会" font="206" textcolor="#FF3CB371" height="30" maxheight="30" align="center" valign="center" />
+							</VerticalLayout>
+
+							<Control width="15" />
+
+							<VerticalLayout childvalign="vcenter">
+								<HorizontalLayout height="26" childpadding="10" childvalign="vcenter">
+									<Label name="huiyuan_name" text="--" font="204" textcolor="#FF1F2329" height="26" maxheight="26" autocalcwidth="true" valign="center" />
+									<Label name="huiyuan_levelname" text="--" font="201" textcolor="#FFC97A10" height="22" maxheight="22" autocalcwidth="true" bkcolor="#FFFFF3E0" borderround="22,22" textpadding="10,0,10,0" valign="center" />
+									<Control name="huiyuan_frozen_tag_gap" width="10" visible="false" />
+									<Label name="huiyuan_frozen_tag" text="已冻结" font="201" textcolor="#FFC93A38" height="22" maxheight="22" autocalcwidth="true" bkcolor="#FFFDECEC" borderround="22,22" textpadding="10,0,10,0" valign="center" visible="false" />
+									<Control />
+								</HorizontalLayout>
+								<Label name="huiyuan_num" text="会员卡号 --" font="201" textcolor="#FF8A9099" height="22" valign="center" />
+							</VerticalLayout>
+
+							<VerticalLayout width="170" childvalign="vcenter">
+								<Label text="当前余额" font="201" textcolor="#FF8A9099" height="20" align="right" />
+								<Label name="huiyuan_yue" text="¥0.00" font="205" textcolor="#FF3CB371" height="38" align="right" />
+							</VerticalLayout>
+						</HorizontalLayout>
+
+						<Control height="22" />
+
+						<!-- 信息网格 -->
+						<HorizontalLayout height="66" childpadding="12">
+							<VerticalLayout bkcolor="#FFFAFBFC" borderround="16,16" inset="15,0,15,0" childvalign="vcenter">
+								<Label text="手机号" font="201" textcolor="#FF8A9099" height="18" />
+								<Label name="huiyuan_phone" text="--" font="202" textcolor="#FF1F2329" height="24" />
+							</VerticalLayout>
+							<VerticalLayout bkcolor="#FFFAFBFC" borderround="16,16" inset="15,0,15,0" childvalign="vcenter">
+								<Label text="密码登录" font="201" textcolor="#FF8A9099" height="18" />
+								<Label name="huiyuan_mimazhifu" text="--" font="202" textcolor="#FF1F2329" height="24" />
+							</VerticalLayout>
+						</HorizontalLayout>
+
+						<Control height="12" />
+
+						<HorizontalLayout height="66" childpadding="12">
+							<VerticalLayout bkcolor="#FFFAFBFC" borderround="16,16" inset="15,0,15,0" childvalign="vcenter">
+								<Label text="性别" font="201" textcolor="#FF8A9099" height="18" />
+								<Label name="huiyuan_sex" text="--" font="202" textcolor="#FF1F2329" height="24" />
+							</VerticalLayout>
+							<VerticalLayout bkcolor="#FFFAFBFC" borderround="16,16" inset="15,0,15,0" childvalign="vcenter">
+								<Label text="生日" font="201" textcolor="#FF8A9099" height="18" />
+								<Label name="huiyuan_birthday" text="--" font="202" textcolor="#FF1F2329" height="24" />
+							</VerticalLayout>
+						</HorizontalLayout>
+
+						<Control height="12" />
+
+						<VerticalLayout height="66" bkcolor="#FFFAFBFC" borderround="16,16" inset="15,0,15,0" childvalign="vcenter">
+							<Label text="地址" font="201" textcolor="#FF8A9099" height="18" />
+							<Label name="huiyuan_address" text="--" font="202" textcolor="#FF1F2329" height="24" />
+						</VerticalLayout>
+
+						<Control height="12" />
+
+						<HorizontalLayout height="66" childpadding="12">
+							<VerticalLayout bkcolor="#FFFAFBFC" borderround="16,16" inset="15,0,15,0" childvalign="vcenter">
+								<Label text="实体会员卡" font="201" textcolor="#FF8A9099" height="18" />
+								<Label name="huiyuan_shitika" text="--" font="202" textcolor="#FF1F2329" height="24" />
+							</VerticalLayout>
+							<VerticalLayout bkcolor="#FFFAFBFC" borderround="16,16" inset="15,0,15,0" childvalign="vcenter">
+								<Label text="会员状态" font="201" textcolor="#FF8A9099" height="18" />
+								<Label name="huiyuan_status" text="--" font="202" textcolor="#FF3CB371" height="24" />
+							</VerticalLayout>
+						</HorizontalLayout>
+					</VerticalLayout>
+
+					<!-- 常用操作卡 -->
+					<VerticalLayout bkcolor="#FFFFFFFF" borderround="24,24" inset="20,14,20,16" height="100">
+						<Label text="常用操作" font="201" textcolor="#FF8A9099" height="20" />
+						<Control height="10" />
+						<HorizontalLayout height="40" childpadding="10">
+							<Button name="huiiyuan_page_chongzhi_btn" width="110" height="40" text="会员充值" font="203" textcolor="#FFFFFFFF" 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'" disabledimage="file='btn_gray_disabled.png' corner='8,8,8,8'" />
+							<Button name="huiiyuan_page_xiugaiziliao_btn" width="100" height="40" text="修改资料" font="203" textcolor="#FF3CB371" normalimage="file='btn_border_green.png' corner='8,8,8,8'" hotimage="file='btn_border_green_Hover.png' corner='8,8,8,8'" pushedimage="file='btn_border_green_Click.png' corner='8,8,8,8'" />
+							<Button name="huiiyuan_page_xiugaipassword_btn" width="118" height="40" text="修改登录密码" font="203" textcolor="#FF5F6368" normalimage="file='btn_border_gray.png' corner='8,8,8,8'" hotimage="file='btn_border_gray_Hover.png' corner='8,8,8,8'" pushedimage="file='btn_border_gray_Click.png' corner='8,8,8,8'" />
+							<Button name="huiiyuan_page_bangka_btn" width="100" height="40" text="绑定实体卡" font="203" textcolor="#FF5F6368" normalimage="file='btn_border_gray.png' corner='8,8,8,8'" hotimage="file='btn_border_gray_Hover.png' corner='8,8,8,8'" pushedimage="file='btn_border_gray_Click.png' corner='8,8,8,8'" disabledimage="file='btn_gray_disabled.png' corner='8,8,8,8'" />
+							<Button name="huiiyuan_page_guashi_btn" width="100" height="40" text="挂失实体卡" font="203" textcolor="#FF5F6368" normalimage="file='btn_border_gray.png' corner='8,8,8,8'" hotimage="file='btn_border_gray_Hover.png' corner='8,8,8,8'" pushedimage="file='btn_border_gray_Click.png' corner='8,8,8,8'" disabledimage="file='btn_gray_disabled.png' corner='8,8,8,8'" />
+							<Button name="huiiyuan_page_dongjie_btn" width="100" height="40" text="会员冻结" font="203" textcolor="#FFFFFFFF" normalimage="file='btn_red_zhengchang.png' corner='5,5,5,5'" hotimage="file='btn_red_xuanfu.png' corner='5,5,5,5'" pushedimage="file='btn_red_dianji.png' corner='5,5,5,5'" />
+							<Button name="huiiyuan_page_jiedong_btn" width="100" height="40" text="会员解冻" font="203" textcolor="#FFFFFFFF" visible="false" 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'" />
+						</HorizontalLayout>
+					</VerticalLayout>
 				</VerticalLayout>
-				<Control></Control>
-			</HorizontalLayout>
-
-			<VerticalLayout name="huiyuan_info_layout" padding="0,0,0,0" bordercorner="10,10" bkcolor="#FFFFFFFF" visible="false">
-				<Label name="huiyuan_num" text="会员卡号:" heiht="30" padding="30,10,10,10"></Label>
-				
-				<HorizontalLayout height="30" padding="30,10,10,10">
-					<Label name="huiyuan_phone" text="手机号:" width="200" heiht="30" padding="0,0,0,0"></Label>
-					<Label name="huiyuan_mimazhifu" text="密码登录:" width="200" heiht="30" padding="30,0,0,0"></Label>
-				</HorizontalLayout>
-				
-				<Label name="huiyuan_yue" text="当前余额:" heiht="30" padding="30,10,10,10"></Label>
-				<Label name="huiyuan_name" text="会员姓名:" heiht="30" padding="30,10,10,10"></Label>
-				<Label name="huiyuan_sex" text="性别:" heiht="30" padding="30,10,10,10"></Label>
-				<Label name="huiyuan_address" text="地址:" heiht="30" padding="30,10,10,10"></Label>
-				<Label name="huiyuan_birthday" text="生日:" heiht="30" padding="30,10,10,10"></Label>
-				<Label name="huiyuan_levelname" text="会员级别:" heiht="30" padding="30,10,10,10"></Label>
-				<Label name="huiyuan_shitika" text="实体卡:" heiht="30" padding="30,10,10,10"></Label>
-				<Label name="huiyuan_status" text="会员状态:" heiht="30" padding="30,10,10,10"></Label>
-				
-				<HorizontalLayout height="75">
-					<Button name="huiiyuan_page_chongzhi_btn" width="130" height="45" padding="30,30,0,0" text="会员充值" textcolor="#FFFFFFFF" 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'" />
-					<Button name="huiiyuan_page_xiugaiziliao_btn" width="130" height="45" padding="30,30,0,0" text="修改资料" textcolor="#FFFFFFFF" 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'" />
-					<Button name="huiiyuan_page_xiugaipassword_btn" width="130" height="45" padding="30,30,0,0" text="修改登录密码" textcolor="#FFFFFFFF" 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'" />
-				</HorizontalLayout>
-				
-				<HorizontalLayout height="75">
-					<Button name="huiiyuan_page_bangka_btn" width="130" height="45" padding="30,30,0,0" text="绑定实体卡" textcolor="#FFFFFFFF" 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'" />
-					<Button name="huiiyuan_page_guashi_btn" width="130" height="45" padding="30,30,0,0" text="挂失实体卡" textcolor="#FFFFFFFF" 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'" />
-					<Button name="huiiyuan_page_dongjie_btn" width="130" height="45" padding="30,30,0,0" text="会员冻结" textcolor="#FFFFFFFF" normalimage="file='btn_red_zhengchang.png' corner='5,5,5,5'" hotimage="file='btn_red_xuanfu.png' corner='5,5,5,5'" pushedimage="file='btn_red_dianji.png' corner='5,5,5,5'" />
-					<Button name="huiiyuan_page_jiedong_btn" width="130" height="45" padding="30,30,0,0" text="会员解冻" textcolor="#FFFFFFFF" 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'" />
-				</HorizontalLayout>
 			</VerticalLayout>
 		</HorizontalLayout>
 	</HuiyuanPage>
-</Window>
+</Window>

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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


+ 53 - 141
zhipuzi_pos_windows/page/CHuiyuanPageUI.cpp

@@ -38,115 +38,7 @@ void CHuiyuanPageUI::HandleClickMsg(TNotifyUI& msg)
 {
 	CDuiString senderName = msg.pSender->GetName();
 
-	if (senderName == L"jianpan_1")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"1";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_2")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"2";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_3")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"3";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_4")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"4";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_5")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"5";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_6")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"6";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_7")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"7";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_8")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"8";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_9")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"9";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_0")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason += L"0";
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_x")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason = wsReason.substr(0, wsReason.length() - 1);
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == L"jianpan_qingkong")
-	{
-		CEditUI* pContent = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
-		std::wstring wsReason = pContent->GetText();
-
-		wsReason.clear();
-
-		pContent->SetText(wsReason.c_str());
-	}
-	else if (senderName == _T("huiiyuan_page_sousuo_btn"))
+	if (senderName == _T("huiiyuan_page_sousuo_btn"))
 	{
 		//如果是手动点击了,就重置这个搜索手机号
 		CEditUI* m_pEdit = static_cast<CEditUI*>(this->FindSubControl(_T("huiyuan_page_shoujihao_edit")));
@@ -257,8 +149,10 @@ void CHuiyuanPageUI::StartHuiyuanSousuo()
 
 	if (ws_phone.length() != 11)
 	{
-		//手机号格式错误
+		//手机号格式错误,直接提示,不再往下发请求
 		ShowError(L"手机号格式不对!");
+
+		return;
 	}
 
 	//手机号格式正确,开始处理
@@ -351,52 +245,68 @@ void CHuiyuanPageUI::StartHuiyuanSousuo()
 		m_member_id = rowinfo["id"].GetString();
 		m_member_card_no = rowinfo["card_no"].GetString();
 
-		this->FindSubControl(L"huiyuan_num")->SetText((L"会员卡号:" + CLewaimaiString::UTF8ToUnicode(m_member_card_no)).c_str());
-		this->FindSubControl(L"huiyuan_phone")->SetText((L"手机号:" + CLewaimaiString::UTF8ToUnicode(m_phone)).c_str());
+		//头像取会员姓名第一个字,姓名为空时兜底显示“会”
+		std::wstring ws_name = CLewaimaiString::UTF8ToUnicode(m_name);
+		std::wstring ws_avatar = (ws_name.length() > 0) ? ws_name.substr(0, 1) : L"会";
+
+		this->FindSubControl(L"huiyuan_avatar_text")->SetText(ws_avatar.c_str());
+		this->FindSubControl(L"huiyuan_name")->SetText(ws_name.c_str());
+		this->FindSubControl(L"huiyuan_num")->SetText((L"会员卡号 " + CLewaimaiString::UTF8ToUnicode(m_member_card_no)).c_str());
+		this->FindSubControl(L"huiyuan_levelname")->SetText(CLewaimaiString::UTF8ToUnicode(member_level_name).c_str());
+		this->FindSubControl(L"huiyuan_yue")->SetText((L"¥" + CLewaimaiString::UTF8ToUnicode(m_balance)).c_str());
+
+		this->FindSubControl(L"huiyuan_phone")->SetText(CLewaimaiString::UTF8ToUnicode(m_phone).c_str());
+		this->FindSubControl(L"huiyuan_sex")->SetText(CLewaimaiString::UTF8ToUnicode(m_sex).c_str());
+		this->FindSubControl(L"huiyuan_address")->SetText(CLewaimaiString::UTF8ToUnicode(m_address).c_str());
+		this->FindSubControl(L"huiyuan_birthday")->SetText(CLewaimaiString::UTF8ToUnicode(m_birthday).c_str());
 
 		if (m_is_open_pay_password == "1")
 		{
-			this->FindSubControl(L"huiyuan_mimazhifu")->SetText(L"密码登录:已开启");
+			this->FindSubControl(L"huiyuan_mimazhifu")->SetText(L"已开启");
 		}
 		else
 		{
-			this->FindSubControl(L"huiyuan_mimazhifu")->SetText(L"密码登录:未开启");
+			this->FindSubControl(L"huiyuan_mimazhifu")->SetText(L"未开启");
 		}
 
-		this->FindSubControl(L"huiyuan_name")->SetText((L"会员姓名:" + CLewaimaiString::UTF8ToUnicode(m_name)).c_str());
-		this->FindSubControl(L"huiyuan_sex")->SetText((L"性别:" + CLewaimaiString::UTF8ToUnicode(m_sex)).c_str());
-		this->FindSubControl(L"huiyuan_address")->SetText((L"地址:" + CLewaimaiString::UTF8ToUnicode(m_address)).c_str());
-		this->FindSubControl(L"huiyuan_birthday")->SetText((L"生日:" + CLewaimaiString::UTF8ToUnicode(m_birthday)).c_str());
-		this->FindSubControl(L"huiyuan_levelname")->SetText((L"会员级别:" + CLewaimaiString::UTF8ToUnicode(member_level_name)).c_str());
-		this->FindSubControl(L"huiyuan_yue")->SetText((L"当前余额:" + CLewaimaiString::UTF8ToUnicode(m_balance)).c_str());
-
 		if (is_card)
 		{
-			this->FindSubControl(L"huiyuan_shitika")->SetText(L"实体会员卡:已绑定");
+			this->FindSubControl(L"huiyuan_shitika")->SetText(L"已绑定");
 		}
 		else
 		{
-			this->FindSubControl(L"huiyuan_shitika")->SetText(L"实体会员卡:未绑定");
+			this->FindSubControl(L"huiyuan_shitika")->SetText(L"未绑定");
 		}
 
-		if (m_freeze == "0")
-		{
-			this->FindSubControl(L"huiyuan_status")->SetText(L"会员状态:正常");
+		//状态徽章规则:正常不显示,只有被冻结时才显示红色的“已冻结”
+		bool is_frozen = (m_freeze != "0");
 
-			this->FindSubControl(L"huiiyuan_page_dongjie_btn")->SetVisible(true);
-			this->FindSubControl(L"huiiyuan_page_jiedong_btn")->SetVisible(false);
-		}
-		else
-		{
-			this->FindSubControl(L"huiyuan_status")->SetText(L"会员状态:已冻结");
+		this->FindSubControl(L"huiyuan_freeze_tip_layout")->SetVisible(is_frozen);
+		this->FindSubControl(L"huiyuan_frozen_tag_gap")->SetVisible(is_frozen);
+		this->FindSubControl(L"huiyuan_frozen_tag")->SetVisible(is_frozen);
 
-			this->FindSubControl(L"huiiyuan_page_dongjie_btn")->SetVisible(false);
-			this->FindSubControl(L"huiiyuan_page_jiedong_btn")->SetVisible(true);
-		}
+		//冻结时头像与余额一起置灰
+		this->FindSubControl(L"huiyuan_avatar_layout")->SetBkColor(is_frozen ? 0xFFF0F1F3 : 0xFFE8F5EE);
+		static_cast<CLabelUI*>(this->FindSubControl(L"huiyuan_avatar_text"))->SetTextColor(is_frozen ? 0xFFA8ADB3 : 0xFF3CB371);
+		static_cast<CLabelUI*>(this->FindSubControl(L"huiyuan_yue"))->SetTextColor(is_frozen ? 0xFFA8ADB3 : 0xFF3CB371);
+
+		CLabelUI* pStatusLabel = static_cast<CLabelUI*>(this->FindSubControl(L"huiyuan_status"));
+		pStatusLabel->SetText(is_frozen ? L"已冻结" : L"正常");
+		pStatusLabel->SetTextColor(is_frozen ? 0xFFC93A38 : 0xFF3CB371);
+
+		//冻结/解冻按钮互斥;冻结后禁用充值、绑卡、挂失这类交易操作
+		this->FindSubControl(L"huiiyuan_page_dongjie_btn")->SetVisible(!is_frozen);
+		this->FindSubControl(L"huiiyuan_page_jiedong_btn")->SetVisible(is_frozen);
+		this->FindSubControl(L"huiiyuan_page_chongzhi_btn")->SetEnabled(!is_frozen);
+		this->FindSubControl(L"huiiyuan_page_bangka_btn")->SetEnabled(!is_frozen);
+		this->FindSubControl(L"huiiyuan_page_guashi_btn")->SetEnabled(!is_frozen);
 
 		this->FindSubControl(L"huiyuan_info_layout")->SetVisible(true);
 		this->FindSubControl(L"huiyuan_page_no_layout")->SetVisible(false);
 
+		//姓名、会员级别、冻结徽章都是 autocalcwidth,改完文本后要重新排版才生效
+		m_pManager->NeedUpdate();
+
 		m_is_handle = false;
 
 		HideError();
@@ -405,10 +315,10 @@ void CHuiyuanPageUI::StartHuiyuanSousuo()
 
 void CHuiyuanPageUI::ShowError(std::wstring err)
 {
-	CLabelUI* m_pLabel= static_cast<CLabelUI*>(this->FindSubControl(_T("errorinfo")));
-	m_pLabel->SetText(err.c_str());
-
-	m_pLabel->SetVisible(true);
+	//错误统一在右侧空状态区显示,左侧搜索区保持干净
+	CLabelUI* pNoTip = static_cast<CLabelUI*>(this->FindSubControl(_T("huiyuan_page_no_tip")));
+	pNoTip->SetText(err.c_str());
+	pNoTip->SetTextColor(0xFFC93A38);
 
 	this->FindSubControl(L"huiyuan_info_layout")->SetVisible(false);
 	this->FindSubControl(L"huiyuan_page_no_layout")->SetVisible(true);
@@ -884,6 +794,8 @@ void CHuiyuanPageUI::StartJiedong()
 
 void CHuiyuanPageUI::HideError()
 {
-	CLabelUI* m_pLabel = static_cast<CLabelUI*>(this->FindSubControl(_T("errorinfo")));
-	m_pLabel->SetVisible(false);
+	//把右侧空状态的提示恢复成默认的灰字
+	CLabelUI* pNoTip = static_cast<CLabelUI*>(this->FindSubControl(_T("huiyuan_page_no_tip")));
+	pNoTip->SetText(L"请在左侧输入手机号搜索会员,再进行充值、挂失等操作");
+	pNoTip->SetTextColor(0xFF8A9099);
 }

+ 32 - 29
zhipuzi_pos_windows/wnd/CHuiyuanChongzhiWnd.cpp

@@ -62,16 +62,9 @@ void CHuiyuanChongzhiWnd::Notify(TNotifyUI& msg)
 
 			StartShoukuan();
 		}
-		else if (msg.pSender->GetName() == L"xianjin_kuaijie_50")
-		{
-			//这里直接SetText,不会触发textchange事件
-			CEditUI* pContent = static_cast<CEditUI*>(m_pm.FindControl(_T("chongzhi_edit")));
-			pContent->SetText(L"50");
-
-			pContent->SetFocus();
-		}
 		else if (msg.pSender->GetName() == L"xianjin_kuaijie_100")
 		{
+			//这里直接SetText,不会触发textchange事件
 			CEditUI* pContent = static_cast<CEditUI*>(m_pm.FindControl(_T("chongzhi_edit")));
 			pContent->SetText(L"100");
 
@@ -1396,39 +1389,46 @@ void CHuiyuanChongzhiWnd::SetCurBalance(std::string balance)
 	m_cur_balance = balance;
 
 	CLabelUI* pCurBalance = static_cast<CLabelUI*>(m_pm.FindControl(_T("huiyuan_chongzhi_curbalance")));
-	pCurBalance->SetText((L"当前余额:" + CLewaimaiString::UTF8ToUnicode(m_cur_balance)).c_str());
+	pCurBalance->SetText((L"¥" + CLewaimaiString::UTF8ToUnicode(m_cur_balance)).c_str());
+
+	//余额是 autocalcwidth 的大字号标签,改完文本要重新排版才会生效
+	m_pm.NeedUpdate();
 }
 
 void CHuiyuanChongzhiWnd::InitJiesuanZhifu()
 {
-	CHorizontalLayoutUI* pZhifufangshiLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_layout")));
-
+	//支付方式的数量
 	int num = 0;
 
+	//新版布局由 XML 静态排布,这里只根据店铺开关控制显隐,不再动态增删控件
+	bool online_open = (CShopinfo::GetInstance()->m_is_online_pay_open == "1");
+	bool cash_open = (CShopinfo::GetInstance()->m_is_cash_pay_open == "1");
+
 	CHorizontalLayoutUI* pWeixinLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu")));
-	if (CShopinfo::GetInstance()->m_is_online_pay_open == "1")
-	{
-		//展示微信支付,并且调整位置
-		pWeixinLayout->SetVisible(true);
+	CHorizontalLayoutUI* pXianjinLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin")));
 
-		num++;
-	}
-	else
-	{
-		pZhifufangshiLayout->RemoveAt(num);
-	}
+	pWeixinLayout->SetVisible(online_open);
+	pXianjinLayout->SetVisible(cash_open);
 
-	//现金支付
-	CHorizontalLayoutUI* pXianjinLayout = static_cast<CHorizontalLayoutUI*>(m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin")));
-	if (CShopinfo::GetInstance()->m_is_cash_pay_open == "1")
+	//只开放一种支付方式时,让它占满整行宽度
+	//472 = 窗口860 - 左留白24 - 右留白24 - 右键盘区320 - 左右分区间距20
+	if (online_open && !cash_open)
 	{
-		pXianjinLayout->SetVisible(true);
-
-		num++;
+		pWeixinLayout->SetFixedWidth(472);
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_btn"))->SetAttribute(L"pos", L"0,0,472,84");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_icon"))->SetAttribute(L"pos", L"16,22,56,62");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_icon_txt"))->SetAttribute(L"pos", L"16,22,56,62");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_name"))->SetAttribute(L"pos", L"70,24,454,42");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_weixinzhifu_desc"))->SetAttribute(L"pos", L"70,44,454,62");
 	}
-	else
+	else if (!online_open && cash_open)
 	{
-		pZhifufangshiLayout->RemoveAt(num);
+		pXianjinLayout->SetFixedWidth(472);
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_btn"))->SetAttribute(L"pos", L"0,0,472,84");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_icon"))->SetAttribute(L"pos", L"16,22,56,62");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_icon_txt"))->SetAttribute(L"pos", L"16,22,56,62");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_name"))->SetAttribute(L"pos", L"70,24,454,42");
+		m_pm.FindControl(_T("huiyuan_chongzhi_jiesuan_zhifufangshi_xianjin_desc"))->SetAttribute(L"pos", L"70,44,454,62");
 	}
 
 	/*
@@ -1468,6 +1468,9 @@ void CHuiyuanChongzhiWnd::InitJiesuanZhifu()
 
 void CHuiyuanChongzhiWnd::UpdateJiesuanZhifuPos()
 {
+	//暂时不支持自定义支付方式的动态增删,直接使用静态布局
+	return;
+
 	//添加支付方式
 	int nWidth = m_nPageWidth;
 	if (nWidth == 0)

+ 1 - 1
zhipuzi_pos_windows/wnd/CHuiyuanChongzhiWnd.h

@@ -142,4 +142,4 @@ public:
 	std::string m_trade_no;
 
 	std::string m_show_trade_no;
-};
+};