Browse Source

商品新建、修改都改为弹框

张洋 1 month ago
parent
commit
e4af6bf61f
35 changed files with 2544 additions and 2934 deletions
  1. 80 0
      .workbuddy/memory/2026-08-29.md
  2. 75 0
      .workbuddy/memory/2026-08-30.md
  3. BIN
      bin/Win32/Debug/zhipuzi_pos_windows/DuiLib_d.dll
  4. 0 206
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_create_page.xml
  5. 164 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_create_wnd.xml
  6. 3 10
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_page.xml
  7. 0 42
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_piliangluru_page.xml
  8. 0 29
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_saomaluru_wnd.xml
  9. 0 197
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_update_page.xml
  10. 170 0
      bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_update_wnd.xml
  11. BIN
      dll/debug/DuiLib_d.dll
  12. 0 15
      zhipuzi_pos_windows/control/ControlEx.h
  13. 0 796
      zhipuzi_pos_windows/page/CShangpinCreatePageUI.cpp
  14. 0 90
      zhipuzi_pos_windows/page/CShangpinCreatePageUI.h
  15. 213 13
      zhipuzi_pos_windows/page/CShangpinPageUI.cpp
  16. 26 4
      zhipuzi_pos_windows/page/CShangpinPageUI.h
  17. 0 120
      zhipuzi_pos_windows/page/CShangpinPiliangluruPageUI.cpp
  18. 0 58
      zhipuzi_pos_windows/page/CShangpinPiliangluruPageUI.h
  19. 0 843
      zhipuzi_pos_windows/page/CShangpinUpdatePageUI.cpp
  20. 0 100
      zhipuzi_pos_windows/page/CShangpinUpdatePageUI.h
  21. 2 0
      zhipuzi_pos_windows/pch/define.h
  22. 3 3
      zhipuzi_pos_windows/ui/CBasePageUI.h
  23. 4 2
      zhipuzi_pos_windows/ui/CModalWnd.h
  24. 0 2
      zhipuzi_pos_windows/ui/CTouchWindowBase.cpp
  25. 1 5
      zhipuzi_pos_windows/ui/CTouchWindowBase.h
  26. 0 21
      zhipuzi_pos_windows/wnd/CMainWnd.cpp
  27. 0 3
      zhipuzi_pos_windows/wnd/CMainWnd.h
  28. 722 0
      zhipuzi_pos_windows/wnd/CShangpinCreateWnd.cpp
  29. 124 0
      zhipuzi_pos_windows/wnd/CShangpinCreateWnd.h
  30. 0 268
      zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.cpp
  31. 0 81
      zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.h
  32. 816 0
      zhipuzi_pos_windows/wnd/CShangpinUpdateWnd.cpp
  33. 131 0
      zhipuzi_pos_windows/wnd/CShangpinUpdateWnd.h
  34. 4 8
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj
  35. 6 18
      zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

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

@@ -0,0 +1,80 @@
+# 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)、保存按钮、错误提示、内容容器。

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

@@ -0,0 +1,75 @@
+# 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/DuiLib_d.dll


+ 0 - 206
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_create_page.xml

@@ -1,206 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Window>
-	<ShangpinCreatePage>
-		<HorizontalLayout>
-			<Control width="1" bkcolor="#FFD1D1D1"></Control>
-
-			<VerticalLayout>
-				<HorizontalLayout height="60" bkcolor="#FFFFFFFF">
-					<Button name="shangpin_create_page_return_btn" tooltip="返回" width="38" height="38" padding="10,11,0,0" normalimage="file='zhengcan_back.png'" hotimage="" pushedimage=""/>
-					<Label name="aixuexi_page_name" text="新建商品" font="28" textcolor="#FF1087FF" width="300" height="30" padding="10,12,10,10"></Label>
-				</HorizontalLayout>
-				
-				<Control height="1" bkcolor="#FFEBE8E8"></Control>
-					
-				<HorizontalLayout>
-					<VerticalLayout name="shangpin_create_page_info_layout" width="620" bkcolor="#FFFFFFFF" vscrollbar="true">
-						<Label text="基本信息" height="58" padding="20,0,0,0" font="20"></Label>
-							
-						<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
-							
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品名字:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_name_edit" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品序号:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_xuhao_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="(序号越小,排序越靠前)" width="300" height="44" padding="20,0,0,0"></Label>		
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品分类:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Combo name="shangpin_create_page_foodtype" padding="15,9,0,0" width="300" height="32" tooltip="请点击这里选择您的打印机打印小票联数" normalimage="file='Setting_Combox_Normal.png' corner='2,2,24,2'" hotimage="file='Setting_Combox_Hover.png' corner='2,2,24,2'" pushedimage="Setting_Combox_Click.png' corner='2,2,24,2'" textpadding="10,1,1,1" >
-								
-							</Combo>
-						</HorizontalLayout>
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品条码:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_barcode_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="(没有可以不填,将随机生成一个)" width="300" height="44" padding="20,0,0,0"></Label>	
-						</HorizontalLayout>	
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品价格:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_price_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>		
-						</HorizontalLayout>
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品单位:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_unit_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>		
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="是否称重类型商品" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>	
-							<CheckBox name="shangpin_create_page_chengzhong" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="条码秤PLU编码:" wordbreak="true" width="80" height="44" padding="20,0,0,0" ></Label>					
-							<Edit name="shangpin_create_page_plu" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="条码秤商品编码:" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_shangpinbianma" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="88" padding="0,30,0,0">
-							<Label text="库存类型:" width="80" height="44" padding="20,0,0,0"></Label>
-							<VerticalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_kucun_open" group="shangpin_create_page_kucun_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="开启商品库存,下单自动扣减库存,库存不足无法下单 " width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_kucun_wuxian" group="shangpin_create_page_kucun_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="无限库存模式,下单不扣减库存" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-							</VerticalLayout>					
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="当前库存:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_kucun_now" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品状态:" width="80" height="44" padding="20,0,0,0"></Label>
-							<HorizontalLayout padding="30,0,30,0" width="90" height="44">
-								<CheckBox name="shangpin_create_page_status_normal" group="shangpin_create_page_status_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-								<Label text="正常 " width="300" padding="10,0,0,0"/>
-							</HorizontalLayout>
-							<HorizontalLayout padding="30,0,30,0" width="90" height="44">
-								<CheckBox name="shangpin_create_page_status_xiajia" group="shangpin_create_page_status_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-								<Label text="下架" width="300" padding="10,0,0,0"/>
-							</HorizontalLayout>
-						</HorizontalLayout>
-						
-						<Label text="高级信息" height="58" padding="20,30,0,0" font="20"></Label>
-							
-						<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="进货价:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_buyingprice_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>	
-						</HorizontalLayout>
-
-						<HorizontalLayout height="88" padding="0,30,0,0">
-							<Label text="进货价模式:" width="80" height="44" padding="20,0,0,0"></Label>
-							<VerticalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_jinhuojia_normal" group="shangpin_create_page_jinhuojia_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="按当前商品进货价 (一般用于临时加工销售的商品) " width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_jinhuojia_jiaquan" group="shangpin_create_page_jinhuojia_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="按加权平均库存成本价 (一般用于采购入库销售的商品)" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-							</VerticalLayout>					
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="在哪些地方显示:" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>
-							
-							<CheckBox name="shangpin_create_page_showplace_shouyinji" selected="true" padding="15,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
-							<Label text="收银机" width="100" padding="10,0,0,0"/>
-							
-							<CheckBox name="shangpin_create_page_showplace_waimai" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
-							<Label text="外卖" width="100" padding="10,0,0,0"/>
-							
-							<CheckBox name="shangpin_create_page_showplace_saomadiancan" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
-							<Label text="扫码点餐" width="100" padding="10,0,0,0"/>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="是否开启打包费" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>
-							<CheckBox name="shangpin_create_page_is_dabao" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="打包费金额:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_dabao_money" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>	
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="132" padding="0,30,0,0">
-							<Label text="商品加工方式:" width="80" height="44" padding="20,0,0,0"></Label>
-							<VerticalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_fangan_1" group="shangpin_create_page_fangan_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="方案一:门店直接采购成品,不需要加工" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_fangan_2" group="shangpin_create_page_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="方案二:门店采购原料,提前加工为成品" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_fangan_3" group="shangpin_create_page_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="方案三:门店采购原料,临时加工为成品" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-							</VerticalLayout>					
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="60" padding="0,50,0,50">
-							<Control></Control>
-							<Button name="shangpin_create_page_save_btn" width="400" height="60" 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'" />
-							<Control></Control>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="40" padding="0,20,0,20">
-							<Control></Control>
-							<Label name="shangpin_create_page_save_result" width="500" align="center" textcolor="#FFFF0000"></Label>
-							<Control></Control>
-						</HorizontalLayout>
-					</VerticalLayout>
-					
-					<Control width="1" bkcolor="#FFEBE8E8"></Control>
-					
-					<HorizontalLayout name="shangpin_create_page_no_layout">
-						<Control></Control>
-						<VerticalLayout width="280">
-							<Control></Control>
-							<HorizontalLayout height="127">
-								<Control></Control>
-								<Control bkimage="qrcode_attention.png" width="129" height="127"></Control>
-								<Control></Control>
-							</HorizontalLayout>
-							<HorizontalLayout height="60" padding="0,50,0,50">
-								<Control></Control>
-								<Button name="shangpin_create_page_saoma_btn" width="280" height="60" 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'" />
-								<Control></Control>
-							</HorizontalLayout>
-							<Label height="60" wordbreak="true" text="若您要新建的商品为国家标准商品库的商品,可以直接扫描商品条码快速获取商品的名字、价格、单位等信息" textcolor="#FF666666" heiht="30" padding="20,20,20,0" align="center"></Label>
-							<Control></Control>
-						</VerticalLayout>
-						<Control></Control>
-					</HorizontalLayout>
-				</HorizontalLayout>
-			</VerticalLayout>
-		</HorizontalLayout>
-	</ShangpinCreatePage>
-</Window>

+ 164 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_create_wnd.xml

@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="750,680" 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="20" />
+	<Font id="3" name="微软雅黑" size="32" />
+	<VerticalLayout bkimage="shoukuan_bkg.png" >
+		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF3CB371">
+			<Label name="memo_dlg_title" 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'"/>
+		</HorizontalLayout>
+
+		<VerticalLayout visible="true" name="shangpin_create_dlg_content" height="636" vscrollbar="true">
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品名字:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_name_edit" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品序号:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_xuhao_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="(序号越小,排序越靠前)" width="300" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品分类:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Combo name="shangpin_create_dlg_foodtype" padding="15,9,0,0" width="300" height="32" tooltip="请点击这里选择商品分类" normalimage="file='Setting_Combox_Normal.png' corner='2,2,24,2'" hotimage="file='Setting_Combox_Hover.png' corner='2,2,24,2'" pushedimage="file='Setting_Combox_Click.png' corner='2,2,24,2'" textpadding="10,1,1,1" >
+				</Combo>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品条码:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_barcode_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="(没有可以不填,将随机生成一个)" width="300" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品价格:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_price_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品单位:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_unit_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="是否称重类型商品" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+				<CheckBox name="shangpin_create_dlg_chengzhong" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="条码秤PLU编码:" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_plu" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="88" padding="0,25,0,0">
+				<Label text="库存类型:" width="110" height="44" padding="20,0,0,0"></Label>
+				<VerticalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_create_dlg_kucun_open" group="shangpin_create_dlg_kucun_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="开启商品库存,下单自动扣减库存,库存不足无法下单" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_create_dlg_kucun_wuxian" group="shangpin_create_dlg_kucun_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="无限库存模式,下单不扣减库存" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+				</VerticalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="当前库存:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_kucun_now" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品状态:" width="110" height="44" padding="20,0,0,0"></Label>
+				<HorizontalLayout padding="30,0,30,0" width="90" height="44">
+					<CheckBox name="shangpin_create_dlg_status_normal" group="shangpin_create_dlg_status_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+					<Label text="正常 " width="300" padding="10,0,0,0"/>
+				</HorizontalLayout>
+				<HorizontalLayout padding="30,0,30,0" width="90" height="44">
+					<CheckBox name="shangpin_create_dlg_status_xiajia" group="shangpin_create_dlg_status_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+					<Label text="下架" width="300" padding="10,0,0,0"/>
+				</HorizontalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="进货价:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_buyingprice_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="88" padding="0,25,0,0">
+				<Label text="进货价模式:" width="110" height="44" padding="20,0,0,0"></Label>
+				<VerticalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_create_dlg_jinhuojia_normal" group="shangpin_create_dlg_jinhuojia_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="按当前商品进货价 (一般用于临时加工销售的商品)" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_create_dlg_jinhuojia_jiaquan" group="shangpin_create_dlg_jinhuojia_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="按加权平均库存成本价 (一般用于采购入库销售的商品)" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+				</VerticalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="在哪些地方显示:" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+
+				<CheckBox name="shangpin_create_dlg_showplace_shouyinji" selected="true" padding="15,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
+				<Label text="收银机" width="100" padding="10,0,0,0"/>
+
+				<CheckBox name="shangpin_create_dlg_showplace_waimai" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
+				<Label text="外卖" width="100" padding="10,0,0,0"/>
+
+				<CheckBox name="shangpin_create_dlg_showplace_saomadiancan" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
+				<Label text="扫码点餐" width="100" padding="10,0,0,0"/>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="是否开启打包费" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+				<CheckBox name="shangpin_create_dlg_is_dabao" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="打包费金额:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_create_dlg_dabao_money" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="132" padding="0,25,0,0">
+				<Label text="商品加工方式:" width="110" height="44" padding="20,0,0,0"></Label>
+				<VerticalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_create_dlg_fangan_1" group="shangpin_create_dlg_fangan_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="方案一:门店直接采购成品,不需要加工" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_create_dlg_fangan_2" group="shangpin_create_dlg_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="方案二:门店采购原料,提前加工为成品" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_create_dlg_fangan_3" group="shangpin_create_dlg_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="方案三:门店采购原料,临时加工为成品" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+				</VerticalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="60" padding="0,10,0,0">
+				<Control></Control>
+				<Button name="shangpin_create_dlg_save_btn" width="400" height="60" 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'" />
+				<Control></Control>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="30" padding="0,10,0,0">
+				<Control></Control>
+				<Label name="shangpin_create_dlg_errinfo" font="2" width="600" height="30" wordbreak="true" text="" visible="false" textcolor="#FF0000" align="center" />
+				<Control></Control>
+			</HorizontalLayout>
+		</VerticalLayout>
+    </VerticalLayout>
+</Window>

+ 3 - 10
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_page.xml

@@ -8,10 +8,6 @@
 				<HorizontalLayout height="60" width="380" padding="0,80,0,0">
 					<Button name="shangpin_page_add_btn" width="320" height="60" padding="15,0,15,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="60" width="380" padding="0,20,0,0">
-					<Button name="shangpin_page_piliang_add_btn" width="320" height="60" padding="15,0,15,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'" />
-				</HorizontalLayout>
 
 				<HorizontalLayout height="60" width="380" padding="0,20,0,0">
 					<Button name="shangpin_page_add_type_btn" width="320" height="60" padding="15,0,15,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'" />
@@ -19,12 +15,9 @@
 				
 				<Control></Control>
 				
-				<HorizontalLayout height="30" padding="0,0,0,80">
-					<Control></Control>
-					<Control bkimage="beizhu_tishi.png" width="24" height="24" padding="60,2,10,0"></Control>
-					<Label text="推荐使用web后台管理商品" width="350" align="left" textcolor="#FF8D8D8D"></Label>
-					<Control></Control>
-				</HorizontalLayout>
+				<VerticalLayout width="380" height="80" bkcolor="#FFFFFFFF" padding="0,0,0,50">
+					<Label text="温馨提示:对于标准带条码商品,可以直接用扫码抢扫描商品条码,系统自带的商品库会自动识别录入商品信息,快速新建商品" textcolor="#FF999999" wordbreak="true" height="80" padding="20,10,20,0" font="14"></Label>
+				</VerticalLayout>	
 			</VerticalLayout>
 			
 			<Control width="1" bkcolor="#FFEBE8E8"></Control>

+ 0 - 42
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_piliangluru_page.xml

@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Window>
-	<ShangpinPiliangluruPage>
-		<VerticalLayout bkcolor="#FFFFFFFF">
-			<HorizontalLayout height="60" bkcolor="#FFFFFFFF">
-				<Button name="shangpin_piliangluru_page_return_btn" tooltip="返回" width="38" height="38" padding="10,11,0,0" normalimage="file='zhengcan_back.png'" hotimage="" pushedimage=""/>
-				<Label text="批量录入商品" font="28" textcolor="#FF1087FF" width="300" height="30" padding="10,12,10,10"></Label>
-			</HorizontalLayout>
-
-			<Control height="1" bkcolor="#FFEBE8E8"></Control>
-
-			<HorizontalLayout>
-				<List name="list_saomashouyin_cart" padding="0,0,0,0" itemlinecolor="#FF000000" itemvalign="vcenter" vscrollbar="true">
-					<ListHeader inset="0,0,0,0" height="42">
-						<ListHeaderItem text="序号" width="50" align="center" />
-						<ListHeaderItem text="商品" width="200" align="center" />
-						<ListHeaderItem text="条码" width="150" align="center" />
-						<ListHeaderItem text="价格" width="80" align="center" />
-						<ListHeaderItem text="单位" width="80" align="center" />
-						<ListHeaderItem text="库存" width="50" align="center" />
-						<ListHeaderItem text="商品分类" width="80" align="center" />
-					</ListHeader>
-				</List>
-
-				<Control width="1" bkcolor="#FFEBE8E8"></Control>
-
-				<VerticalLayout width="380" bkcolor="#FFFFFFFF" padding="0,0,0,0">
-					<Label text="1、对于国标商品,可以直接用扫码抢扫描商品条码,系统自带的商品库会自动识别商品信息,快速录入" textcolor="#FF999999" wordbreak="true" height="40" padding="20,10,20,0" font="14"></Label>
-					<Label text="2、非国标商品,请手动输入商品信息" textcolor="#FF999999" wordbreak="true" height="20" padding="20,10,20,0" font="14"></Label>
-					<Label text="3、批量录入多个商品信息后,可以统一保存" textcolor="#FF999999" wordbreak="true" height="20" padding="20,10,20,0" font="14"></Label>
-				</VerticalLayout>	
-
-			</HorizontalLayout>			
-
-			<Control height="1" bkcolor="#FFEBE8E8"></Control>
-
-			<VerticalLayout height="100">
-				<Label name="saomashouyin_page_fenshu" text="共计0行,0件商品" font="20" textcolor="#FFFF4444" width="200" align="left" padding="15,0,0,0"></Label>
-			</VerticalLayout>
-		</VerticalLayout>
-	</ShangpinPiliangluruPage>
-</Window>

+ 0 - 29
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_saomaluru_wnd.xml

@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Window size="620,544" 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="20" />
-	<Font id="3" name="微软雅黑" size="32" />
-	<VerticalLayout bkimage="shoukuan_bkg.png" >
-		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF3CB371">
-			<Label name="memo_dlg_title" 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'"/>
-		</HorizontalLayout>
-		
-		<VerticalLayout visible="true" name="shoukuan_before_pay_layout" height="500" padding="0,20,0,0">						
-			<HorizontalLayout padding="0,50,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" font="0"></Label>
-
-			<HorizontalLayout height="50" padding="0,30,0,0">
-				<Control></Control>
-				<Label name="errinfo" font="2" width="400" height="50" wordbreak="true" text="" visible="false" textcolor="#FF0000" align="center" />
-				<Control></Control>
-			</HorizontalLayout>			
-		</VerticalLayout>
-    </VerticalLayout>
-</Window>

+ 0 - 197
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_update_page.xml

@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Window>
-	<ShangpinUpdatePage>
-		<HorizontalLayout>
-			<Control width="1" bkcolor="#FFD1D1D1"></Control>
-
-			<VerticalLayout>
-				<HorizontalLayout height="60" bkcolor="#FFFFFFFF">
-					<Button name="shangpin_create_page_return_btn" tooltip="返回" width="38" height="38" padding="10,11,0,0" normalimage="file='zhengcan_back.png'" hotimage="" pushedimage=""/>
-					<Label name="aixuexi_page_name" text="修改商品" font="28" textcolor="#FF1087FF" width="300" height="30" padding="10,12,10,10"></Label>
-				</HorizontalLayout>
-				
-				<Control height="1" bkcolor="#FFEBE8E8"></Control>
-
-				<HorizontalLayout>					
-					<VerticalLayout name="shangpin_create_page_info_layout" width="620" bkcolor="#FFFFFFFF" vscrollbar="true">
-						<Label text="基本信息" height="58" padding="20,0,0,0" font="20"></Label>
-							
-						<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
-							
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品名字:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_name_edit" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品序号:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_xuhao_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="(序号越小,排序越靠前)" width="300" height="44" padding="20,0,0,0"></Label>		
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品分类:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Combo name="shangpin_create_page_foodtype" padding="15,9,0,0" width="300" height="32" tooltip="请点击这里选择您的打印机打印小票联数" normalimage="file='Setting_Combox_Normal.png' corner='2,2,24,2'" hotimage="file='Setting_Combox_Hover.png' corner='2,2,24,2'" pushedimage="Setting_Combox_Click.png' corner='2,2,24,2'" textpadding="10,1,1,1" >
-								
-							</Combo>
-						</HorizontalLayout>
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品条码:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_barcode_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="(没有可以不填,将随机生成一个)" width="300" height="44" padding="20,0,0,0"></Label>	
-						</HorizontalLayout>	
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品价格:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_price_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>		
-						</HorizontalLayout>
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品单位:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_unit_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>		
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="是否称重类型商品" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>	
-							<CheckBox name="shangpin_create_page_chengzhong" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="条码秤PLU编码:" wordbreak="true" width="80" height="44" padding="20,0,0,0" ></Label>					
-							<Edit name="shangpin_create_page_plu" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="条码秤商品编码:" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_shangpinbianma" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="88" padding="0,30,0,0">
-							<Label text="库存类型:" width="80" height="44" padding="20,0,0,0"></Label>
-							<VerticalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_kucun_open" group="shangpin_create_page_kucun_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="开启商品库存,下单自动扣减库存,库存不足无法下单 " width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_kucun_wuxian" group="shangpin_create_page_kucun_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="无限库存模式,下单不扣减库存" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-							</VerticalLayout>					
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="当前库存:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_kucun_now" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="商品状态:" width="80" height="44" padding="20,0,0,0"></Label>
-							<HorizontalLayout padding="30,0,30,0" width="90" height="44">
-								<CheckBox name="shangpin_create_page_status_normal" group="shangpin_create_page_status_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-								<Label text="正常 " width="300" padding="10,0,0,0"/>
-							</HorizontalLayout>
-							<HorizontalLayout padding="30,0,30,0" width="90" height="44">
-								<CheckBox name="shangpin_create_page_status_xiajia" group="shangpin_create_page_status_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-								<Label text="下架" width="300" padding="10,0,0,0"/>
-							</HorizontalLayout>
-						</HorizontalLayout>
-						
-						<Label text="高级信息" height="58" padding="20,30,0,0" font="20"></Label>
-							
-						<Control height="1" bkcolor="#FFEBE8E8" padding="10,0,10,0"></Control>
-
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="进货价:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_buyingprice_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>	
-						</HorizontalLayout>
-
-						<HorizontalLayout height="88" padding="0,30,0,0">
-							<Label text="进货价模式:" width="80" height="44" padding="20,0,0,0"></Label>
-							<VerticalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_jinhuojia_normal" group="shangpin_create_page_jinhuojia_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="按当前商品进货价 (一般用于临时加工销售的商品) " width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_jinhuojia_jiaquan" group="shangpin_create_page_jinhuojia_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="按加权平均库存成本价 (一般用于采购入库销售的商品)" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-							</VerticalLayout>					
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="在哪些地方显示:" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>
-							
-							<CheckBox name="shangpin_create_page_showplace_shouyinji" selected="true" padding="15,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
-							<Label text="收银机" width="100" padding="10,0,0,0"/>
-							
-							<CheckBox name="shangpin_create_page_showplace_waimai" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
-							<Label text="外卖" width="100" padding="10,0,0,0"/>
-							
-							<CheckBox name="shangpin_create_page_showplace_saomadiancan" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
-							<Label text="扫码点餐" width="100" padding="10,0,0,0"/>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="是否开启打包费" wordbreak="true" width="80" height="44" padding="20,0,0,0"></Label>
-							<CheckBox name="shangpin_create_page_is_dabao" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="44" padding="0,30,0,0">
-							<Label text="打包费金额:" width="80" height="44" padding="20,0,0,0"></Label>					
-							<Edit name="shangpin_create_page_dabao_money" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
-							<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>	
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="132" padding="0,30,0,0">
-							<Label text="商品加工方式:" width="80" height="44" padding="20,0,0,0"></Label>
-							<VerticalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_fangan_1" group="shangpin_create_page_fangan_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="方案一:门店直接采购成品,不需要加工" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_fangan_2" group="shangpin_create_page_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="方案二:门店采购原料,提前加工为成品" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-								<HorizontalLayout padding="30,0,30,0" width="600" height="44">
-									<CheckBox name="shangpin_create_page_fangan_3" group="shangpin_create_page_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
-									<Label text="方案三:门店采购原料,临时加工为成品" width="600" padding="10,0,0,0"/>
-								</HorizontalLayout>
-							</VerticalLayout>					
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="60" padding="0,50,0,50">
-							<Control></Control>
-							<Button name="shangpin_create_page_save_btn" width="400" height="60" 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'" />
-							<Control></Control>
-						</HorizontalLayout>
-						
-						<HorizontalLayout height="40" padding="0,20,0,20">
-							<Control></Control>
-							<Label name="shangpin_create_page_save_result" width="500" align="center" textcolor="#FFFF0000"></Label>
-							<Control></Control>
-						</HorizontalLayout>
-					</VerticalLayout>
-					
-					<Control width="1" bkcolor="#FFEBE8E8"></Control>
-					
-					<HorizontalLayout name="shangpin_create_page_no_layout">
-						<Control></Control>
-						<VerticalLayout width="280">
-							<Control></Control>
-							<Control height="20"></Control>
-							<Button name="shangpin_create_page_delete_btn" width="280" height="60" 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>
-						</VerticalLayout>
-						<Control></Control>
-					</HorizontalLayout>
-				</HorizontalLayout>
-			</VerticalLayout>
-		</HorizontalLayout>
-	</ShangpinUpdatePage>
-</Window>

+ 170 - 0
bin/Win32/Debug/zhipuzi_pos_windows/skin/shangpin_update_wnd.xml

@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Window size="750,680" 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="20" />
+	<Font id="3" name="微软雅黑" size="32" />
+	<VerticalLayout bkimage="shoukuan_bkg.png" >
+		<HorizontalLayout name="shoukuan_title_bkg" height="44" bkcolor="0xFF3CB371">
+			<Label name="memo_dlg_title" 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'"/>
+		</HorizontalLayout>
+
+		<VerticalLayout visible="true" name="shangpin_update_dlg_content" height="636" vscrollbar="true">
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品名字:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_name_edit" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品序号:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_xuhao_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="(序号越小,排序越靠前)" width="300" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品分类:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Combo name="shangpin_update_dlg_foodtype" padding="15,9,0,0" width="300" height="32" tooltip="请点击这里选择商品分类" normalimage="file='Setting_Combox_Normal.png' corner='2,2,24,2'" hotimage="file='Setting_Combox_Hover.png' corner='2,2,24,2'" pushedimage="file='Setting_Combox_Click.png' corner='2,2,24,2'" textpadding="10,1,1,1" >
+				</Combo>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品条码:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_barcode_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="(没有可以不填,将随机生成一个)" width="300" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品价格:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_price_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品单位:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_unit_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="是否称重类型商品" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+				<CheckBox name="shangpin_update_dlg_chengzhong" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="条码秤PLU编码:" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_plu" width="400" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="88" padding="0,25,0,0">
+				<Label text="库存类型:" width="110" height="44" padding="20,0,0,0"></Label>
+				<VerticalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_update_dlg_kucun_open" group="shangpin_update_dlg_kucun_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="开启商品库存,下单自动扣减库存,库存不足无法下单" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_update_dlg_kucun_wuxian" group="shangpin_update_dlg_kucun_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="无限库存模式,下单不扣减库存" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+				</VerticalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="当前库存:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_kucun_now" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="商品状态:" width="110" height="44" padding="20,0,0,0"></Label>
+				<HorizontalLayout padding="30,0,30,0" width="90" height="44">
+					<CheckBox name="shangpin_update_dlg_status_normal" group="shangpin_update_dlg_status_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+					<Label text="正常 " width="300" padding="10,0,0,0"/>
+				</HorizontalLayout>
+				<HorizontalLayout padding="30,0,30,0" width="90" height="44">
+					<CheckBox name="shangpin_update_dlg_status_xiajia" group="shangpin_update_dlg_status_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+					<Label text="下架" width="300" padding="10,0,0,0"/>
+				</HorizontalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="进货价:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_buyingprice_edit" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="88" padding="0,25,0,0">
+				<Label text="进货价模式:" width="110" height="44" padding="20,0,0,0"></Label>
+				<VerticalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_update_dlg_jinhuojia_normal" group="shangpin_update_dlg_jinhuojia_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="按当前商品进货价 (一般用于临时加工销售的商品)" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_update_dlg_jinhuojia_jiaquan" group="shangpin_update_dlg_jinhuojia_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="按加权平均库存成本价 (一般用于采购入库销售的商品)" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+				</VerticalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="在哪些地方显示:" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+
+				<CheckBox name="shangpin_update_dlg_showplace_shouyinji" selected="true" padding="15,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
+				<Label text="收银机" width="100" padding="10,0,0,0"/>
+
+				<CheckBox name="shangpin_update_dlg_showplace_waimai" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
+				<Label text="外卖" width="100" padding="10,0,0,0"/>
+
+				<CheckBox name="shangpin_update_dlg_showplace_saomadiancan" selected="true" padding="0,14,0,14" width="16" height="16" normalimage="file='Setting_CheckBox_Normal.png'" hotimage="file='Setting_CheckBox_Hover.png'" selectedimage="file='Setting_CheckBox_Click.png'"/>
+				<Label text="扫码点餐" width="100" padding="10,0,0,0"/>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="是否开启打包费" wordbreak="true" width="110" height="44" padding="20,0,0,0"></Label>
+				<CheckBox name="shangpin_update_dlg_is_dabao" width="72" height="45" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="44" padding="0,25,0,0">
+				<Label text="打包费金额:" width="110" height="44" padding="20,0,0,0"></Label>
+				<Edit name="shangpin_update_dlg_dabao_money" width="200" height="44" padding="15,0,0,0" borderround="10,10" bkcolor="#FFF2F2F2" nativebkcolor="#FFF2F2F2" />
+				<Label text="元" width="80" height="44" padding="20,0,0,0"></Label>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="132" padding="0,25,0,0">
+				<Label text="商品加工方式:" width="110" height="44" padding="20,0,0,0"></Label>
+				<VerticalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_update_dlg_fangan_1" group="shangpin_update_dlg_fangan_type" selected="true" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="方案一:门店直接采购成品,不需要加工" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_update_dlg_fangan_2" group="shangpin_update_dlg_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="方案二:门店采购原料,提前加工为成品" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+					<HorizontalLayout padding="30,0,30,0" width="560" height="44">
+						<CheckBox name="shangpin_update_dlg_fangan_3" group="shangpin_update_dlg_fangan_type" padding="0,15,0,15" width="13" height="13" normalimage="file='RadioBtnNon.png'" hotimage="file='RadioBtnNon.png'" selectedimage="file='RadioBtnSel.png'"/>
+						<Label text="方案三:门店采购原料,临时加工为成品" width="520" padding="10,0,0,0"/>
+					</HorizontalLayout>
+				</VerticalLayout>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="60" padding="0,30,0,0">
+				<Control></Control>
+				<Button name="shangpin_update_dlg_save_btn" width="400" height="60" 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'" />
+				<Control></Control>
+			</HorizontalLayout>
+
+			<HorizontalLayout height="60" padding="0,20,0,0">
+				<Control></Control>
+				<Button name="shangpin_update_dlg_delete_btn" width="400" height="60" 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>
+
+			<HorizontalLayout height="30" padding="0,10,0,20">
+				<Control></Control>
+				<Label name="shangpin_update_dlg_errinfo" font="2" width="600" height="30" wordbreak="true" text="" visible="false" textcolor="#FF0000" align="center" />
+				<Control></Control>
+			</HorizontalLayout>
+		</VerticalLayout>
+    </VerticalLayout>
+</Window>

BIN
dll/debug/DuiLib_d.dll


+ 0 - 15
zhipuzi_pos_windows/control/ControlEx.h

@@ -17,8 +17,6 @@
 #include "../page/CSaomashouyinPageUI.h"
 #include "../page/CKucunPageUI.h"
 #include "../page/CCaigouPageUI.h"
-#include "../page/CShangpinCreatePageUI.h"
-#include "../page/CShangpinUpdatePageUI.h"
 #include "../page/CZhengcanDiandanPageUI.h"
 #include "../page/CZhengcanOrderListPageUI.h"
 #include "../page/CZhengcanOrderInfoPageUI.h"
@@ -27,7 +25,6 @@
 #include "../page/CShoukuanOrderInfoPageUI.h"
 #include "../page/CAIxuexiPageUI.h"
 #include "../page/CYubaozhuangbiaoqianPageUI.h"
-#include "../page/CShangpinPiliangluruPageUI.h"
 
 #include "CWaimaiOrderItemUI.h"
 #include "CDianneiOrderItemUI.h"
@@ -106,14 +103,6 @@ public:
 		{
 			return new CCaigouPageUI;
 		}
-		else if (_tcscmp(pstrClass, _T("ShangpinCreatePage")) == 0)
-		{
-			return new CShangpinCreatePageUI;
-		}
-		else if (_tcscmp(pstrClass, _T("ShangpinUpdatePage")) == 0)
-		{
-			return new CShangpinUpdatePageUI;
-		}
 		else if (_tcscmp(pstrClass, _T("ZhengcanDiandanPage")) == 0)
 		{
 			return new CZhengcanDiandanPageUI;
@@ -122,10 +111,6 @@ public:
 		{
 			return new CZhengcanOrderListPageUI;
 		}
-		else if (_tcscmp(pstrClass, _T("ShangpinPiliangluruPage")) == 0)
-		{
-			return new CShangpinPiliangluruPageUI;
-		}
 		else if (_tcscmp(pstrClass, _T("ZhengcanOrderInfoPage")) == 0)
 		{
 			return new CZhengcanOrderInfoPageUI;

+ 0 - 796
zhipuzi_pos_windows/page/CShangpinCreatePageUI.cpp

@@ -1,796 +0,0 @@
-#include "pch.h"
-#include "CShangpinCreatePageUI.h"
-
-#include "../control/ControlEx.h"
-
-#include "../tool/CSqlite3.h"
-#include "../tool/CFoodHandle.h"
-#include "../wnd/CMainWnd.h"
-#include "../wnd/CShangpinSaomaluruWnd.h"
-
-CShangpinCreatePageUI::CShangpinCreatePageUI()
-{
-}
-
-
-CShangpinCreatePageUI::~CShangpinCreatePageUI()
-{
-}
-
-void CShangpinCreatePageUI::InitControl()
-{
-
-}
-
-//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
-void CShangpinCreatePageUI::InitShow()
-{
-	//商品名字
-	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
-	pName->SetText(L"");
-	pName->SetFocus();
-
-	//商品序号
-	CEditUI* pXuhao = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_xuhao_edit"));
-	pXuhao->SetText(L"");
-	
-	//初始化商品分类
-	CComboUI* com_fenlei = static_cast<CComboUI*>(this->FindSubControl(_T("shangpin_create_page_foodtype")));
-	com_fenlei->RemoveAll();
-
-	CSqlite3 sqlite;
-	std::vector<CFoodType> foodtypes = sqlite.GetFoodtypes();
-
-	std::string first_food_name = "";
-	int nTypeNum = 0;
-	for (std::vector<CFoodType>::iterator it = foodtypes.begin(); it != foodtypes.end(); it++)
-	{
-		CListLabelElementUI* elem = new CListLabelElementUI();
-
-		elem->SetText(CLewaimaiString::UTF8ToUnicode(it->name).c_str());
-		com_fenlei->Add(elem);
-
-		if (it == foodtypes.begin())
-		{
-			first_food_name = it->name;
-		}
-
-		nTypeNum++;
-
-		m_foodtype_id_map[it->name] = it->id;
-	}
-
-	com_fenlei->SetInternVisible(true);
-
-	if (nTypeNum > 0)
-	{
-		com_fenlei->SelectItem(0, false);
-	}
-
-	com_fenlei->SetText(CLewaimaiString::UTF8ToUnicode(first_food_name).c_str());
-
-	//商品条码
-	CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
-	pTiaoma->SetText(L"");
-
-	//商品价格
-	CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
-	pPrice->SetText(L"");
-
-	//商品单位
-	CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
-	pDanwei->SetText(L"");
-
-	//是否称重
-	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_chengzhong"));
-	pChengzhong->Selected(false, false);
-
-	//plu编码
-	CEditUI* pPlu = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_plu"));
-	pPlu->SetText(L"");
-
-	//商品编码
-	CEditUI* pShangpin = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_shangpinbianma"));
-	pShangpin->SetText(L"");
-
-	//库存类型
-	CCheckBoxUI* pKucuntype = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_kucun_open"));
-	pKucuntype->Selected(true, false);
-
-	//当前库存
-	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
-	pDangqiankucun->SetText(L"0");
-
-	//商品状态
-	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
-	pStatus->Selected(true, false);
-
-	//进货价
-	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
-	pJinhuojia->SetText(L"0");
-
-	//进货价模式
-	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
-	pJinhuomoshi->Selected(true, false);
-
-	//在哪些地方显示
-	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_shouyinji"));
-	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_waimai"));
-	CCheckBoxUI* pSaomaidancan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_saomadiancan"));
-
-	pShouyinji->Selected(true, false);
-	pWaimai->Selected(true, false);
-	pSaomaidancan->Selected(true, false);
-
-	//是否开启打包费
-	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_is_dabao"));
-	pDabao->Selected(false, false);
-
-	//打包费
-	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
-	pDaobaofei->SetText(L"0");
-
-	//商品加工方式
-	CCheckBoxUI* pJiagongfangshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
-	pJiagongfangshi->Selected(true, false);
-
-	ShowError(L"");
-
-	CVerticalLayoutUI* layout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(L"shangpin_create_page_info_layout"));
-	
-	SIZE pos;
-	pos.cx = 0;
-	pos.cy = 0;
-	layout->SetScrollPos(pos);
-}
-
-//处理按钮点击类事件
-void CShangpinCreatePageUI::HandleClickMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	if (name == L"shangpin_create_page_save_btn")
-	{
-		StartSave();
-	}
-	else if (name == L"shangpin_create_page_return_btn")
-	{
-		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN, false);
-	}
-	else if (name == L"shangpin_create_page_saoma_btn")
-	{
-		ShowSaomaluru();
-	}
-}
-
-//处理option切换事件
-void CShangpinCreatePageUI::HandleSelectChangeMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
-	std::wstring groupname = curOption->GetGroup();
-
-	if (groupname == L"shangpin_foodtype")
-	{
-		
-	}
-}
-
-//处理下拉框、radio的切换事件
-void CShangpinCreatePageUI::HandleItemSelectMsg(TNotifyUI& msg)
-{
-
-}
-
-//处理编辑框输入内容改变事件
-void CShangpinCreatePageUI::HandleTextChangedMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	if (name == L"shangpin_create_page_xuhao_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_xuhao_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_barcode_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_barcode_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_price_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_price_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48) && tmp != 46)
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_buyingprice_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_buyingprice_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48) && tmp != 46)
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_plu")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_plu")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_shangpinbianma")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_shangpinbianma")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_dabao_money")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_dabao_money")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48) && tmp != 46)
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_kucun_now")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_kucun_now")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-}
-
-//处理扫码枪捕捉到的扫码信息
-void CShangpinCreatePageUI::HandleTextCapture(std::string content)
-{
-	if (m_is_show_modal_wnd == true)
-	{
-		m_curModalWnd->HandleTextCapture(content);
-
-		return;
-	}
-}
-
-bool CShangpinCreatePageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-	if (uMsg == WM_FOOD_HANDLE_SUCCESS)
-	{
-		//然后返回到商品页面
-		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN);
-
-		return true;
-	}
-
-	return false;
-}
-
-void CShangpinCreatePageUI::SetPos(RECT rc, bool bNeedInvalidate)
-{
-	m_nPageWidth = rc.right - rc.left;
-
-	CContainerUI::SetPos(rc, bNeedInvalidate);
-}
-
-void CShangpinCreatePageUI::StartSave()
-{
-	//把参数一个个读出来
-
-	//商品名字
-	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
-	std::wstring ws_name = pName->GetText();
-	m_name = CLewaimaiString::UnicodeToUTF8(ws_name);
-	if (m_name == "")
-	{
-		ShowError(L"商品名字不能为空");
-		return;
-	}
-
-	//商品序号
-	CEditUI* pXuhao = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_xuhao_edit"));
-	std::wstring ws_xuhao = pXuhao->GetText();
-	m_xuhao = CLewaimaiString::UnicodeToUTF8(ws_xuhao);
-	if (m_xuhao == "")
-	{
-		m_xuhao = "0";
-	}
-
-	//初始化商品分类
-	CComboUI* com_fenlei = static_cast<CComboUI*>(this->FindSubControl(_T("shangpin_create_page_foodtype")));
-	std::wstring ws_type = com_fenlei->GetText();
-	m_fenlei = CLewaimaiString::UnicodeToUTF8(ws_type);
-	if (m_fenlei == "")
-	{
-		ShowError(L"商品分类不能为空,请先创建并选择商品分类");
-		return;
-	}
-
-	//商品条码
-	CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
-	std::wstring ws_tiaoma = pTiaoma->GetText();
-	m_tiaoma = CLewaimaiString::UnicodeToUTF8(ws_tiaoma);
-
-	//商品价格
-	CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
-	std::wstring ws_price = pPrice->GetText();
-	m_price = CLewaimaiString::UnicodeToUTF8(ws_price);
-	if (m_price == "")
-	{
-		ShowError(L"商品价格不能为空");
-		return;
-	}
-
-	//商品单位
-	CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
-	std::wstring ws_danwei = pDanwei->GetText();
-	m_danwei = CLewaimaiString::UnicodeToUTF8(ws_danwei);
-
-	//是否称重
-	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_chengzhong"));
-	m_is_chengzhong = pChengzhong->IsSelected();
-
-	//plu编码
-	CEditUI* pPlu = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_plu"));
-	std::wstring ws_plu = pPlu->GetText();
-	m_plu = CLewaimaiString::UnicodeToUTF8(ws_plu);
-
-	//商品编码
-	CEditUI* pShangpin = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_shangpinbianma"));
-	std::wstring ws_shangpin = pShangpin->GetText();
-	m_shangpinbianma = CLewaimaiString::UnicodeToUTF8(ws_shangpin);
-
-	//库存类型
-	CCheckBoxUI* pKucuntype = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_kucun_open"));
-	if (pKucuntype->IsSelected())
-	{
-		m_kucuntype = 0;
-	}
-	else
-	{
-		m_kucuntype = 1;
-	}
-
-	//当前库存
-	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
-	std::wstring ws_dangqiankucun = pDangqiankucun->GetText();
-	m_dangqiankucun = CLewaimaiString::UnicodeToUTF8(ws_dangqiankucun);
-	if (m_dangqiankucun == "")
-	{
-		m_dangqiankucun = "0";
-	}
-
-	//商品状态
-	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
-	if (pStatus->IsSelected())
-	{
-		m_status = 0;
-	}
-	else
-	{
-		m_status = 1;
-	}
-
-	//进货价
-	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
-	std::wstring ws_jinhuojia = pJinhuojia->GetText();
-	m_jinhuojia = CLewaimaiString::UnicodeToUTF8(ws_jinhuojia);
-	if (m_jinhuojia == "")
-	{
-		m_jinhuojia = "0";
-	}
-
-	//进货价模式
-	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
-	if (pJinhuomoshi->IsSelected())
-	{
-		m_jinhuo_type = 0;
-	}
-	else
-	{
-		m_jinhuo_type = 1;
-	}
-
-	//在哪些地方显示
-	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_shouyinji"));
-	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_waimai"));
-	CCheckBoxUI* pSaomaidancan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_saomadiancan"));
-
-	m_is_shouyinji_show = pShouyinji->IsSelected();
-	m_is_waimai_show = pWaimai->IsSelected();
-	m_is_saomadiancan_show = pSaomaidancan->IsSelected();
-
-	//是否开启打包费
-	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_is_dabao"));
-	m_is_dabao_fei = pDabao->IsSelected();
-
-	//打包费
-	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
-	std::wstring ws_dabaofei = pDaobaofei->GetText();
-	m_dabaofei = CLewaimaiString::UnicodeToUTF8(ws_dabaofei);
-	if (m_dabaofei == "")
-	{
-		m_dabaofei = "0";
-	}
-
-	//商品加工方式
-	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
-	CCheckBoxUI* pJiagongfangshi_2 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_2"));
-	CCheckBoxUI* pJiagongfangshi_3 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_3"));
-	
-	if (pJiagongfangshi_1->IsSelected())
-	{
-		m_jiagong_type = 1;
-	}
-	else if (pJiagongfangshi_2->IsSelected())
-	{
-		m_jiagong_type = 2;
-	}
-	else if (pJiagongfangshi_3->IsSelected())
-	{
-		m_jiagong_type = 3;
-	}
-
-	ShowError(L"正在保存商品...");
-
-	std::thread(&CShangpinCreatePageUI::HandleSave, this).detach();
-}
-
-void CShangpinCreatePageUI::HandleSave()
-{
-	std::map<std::string, std::string> params;
-
-	params["goods_name"] = m_name;
-	params["goods_tag"] = m_xuhao;
-	params["type_lv1_id"] = m_foodtype_id_map[m_fenlei];
-	params["barcode"] = m_tiaoma;
-	params["goods_price"] = m_price;
-	params["unit"] = m_danwei;
-
-	if (m_is_chengzhong)
-	{
-		params["is_weight"] = "1";
-	}
-	else
-	{
-		params["is_weight"] = "0";
-	}
-
-	params["weight_plu_code"] = m_plu;
-	params["weight_food_code"] = m_shangpinbianma;
-
-	if (m_kucuntype == 0)
-	{
-		params["stock_status"] = "OPEN";
-	}
-	else
-	{
-		params["stock_status"] = "CLOSED";
-	}
-
-	params["stock"] = m_dangqiankucun;
-
-	if (m_status == 0)
-	{
-		params["goods_status"] = "NORMAL";
-	}
-	else
-	{
-		params["goods_status"] = "CLOSED";
-	}
-
-	params["buying_price"] = m_jinhuojia;
-	
-	params["cost_mode"] = std::to_string(m_jinhuo_type);
-	
-	//哪里显示
-	if (m_is_shouyinji_show)
-	{
-		params["is_shouyinji_show"] = "1";
-	}
-	else
-	{
-		params["is_shouyinji_show"] = "0";
-	}
-
-	if (m_is_waimai_show)
-	{
-		params["is_waimai_show"] = "1";
-	}
-	else
-	{
-		params["is_waimai_show"] = "0";
-	}
-
-	if (m_is_saomadiancan_show)
-	{
-		params["is_tangshi_show"] = "1";
-		params["is_zhengcan_show"] = "1";
-	}
-	else
-	{
-		params["is_tangshi_show"] = "0";
-		params["is_zhengcan_show"] = "0";
-	}
-
-	if (m_is_dabao_fei)
-	{
-		params["is_dabao"] = "1";
-	}
-	else
-	{
-		params["is_dabao"] = "0";
-	}
-
-	params["dabao_money"] = m_dabaofei;
-
-	params["jiagong_type"] = std::to_string(m_jiagong_type);
-	
-	//这下面是接口要求必传参数
-	params["goods_img"] = "";
-	params["open_autostock"] = "0";
-	params["stock_warning"] = "0";
-
-	std::string response;
-
-	std::string url = "/goods/addgoods";
-	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
-
-	if (ret == false)
-	{
-		ShowError(L"请求服务器失败,请检查网络设置!");
-
-		return;
-	}
-
-	rapidjson::Document document;
-	document.Parse(response.c_str());
-
-	if (document.HasParseError())
-	{
-		ShowError(L"服务器错误");
-		return;
-	}
-
-	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
-	{
-		ShowError(L"服务器错误");
-		return;
-	}
-
-	rapidjson::Value& v_errcode = document["errcode"];
-	int errcode = v_errcode.GetInt();
-	if (errcode != 0)
-	{
-		std::string v_errmsg = document["errmsg"].GetString();
-
-		ShowError(CLewaimaiString::UTF8ToUnicode(v_errmsg));
-		return;
-	}
-
-	rapidjson::Value& data = document["data"];
-
-	std::string id = data["id"].GetString();
-
-	//走到这里说明商品保存成功了,接着把商品的数据更新到数据库
-	CFoodHandle::GetInstance()->UpdateOneFood(id);
-
-	PostMessage(m_pManager->GetPaintWindow(), WM_FOOD_HANDLE_SUCCESS, 0, 0);
-}
-
-void CShangpinCreatePageUI::ShowError(std::wstring msg)
-{
-	CLabelUI* pResult = static_cast<CLabelUI*>(this->FindSubControl(L"shangpin_create_page_save_result"));
-	pResult->SetText(msg.c_str());
-	
-	if (msg == L"")
-	{
-		pResult->SetVisible(false);
-	}
-	else
-	{
-		pResult->SetVisible(true);
-	}
-}
-
-void CShangpinCreatePageUI::ShowSaomaluru()
-{
-	if (m_is_show_modal_wnd == true)
-	{
-		return;
-	}
-
-	CShangpinSaomaluruWnd* pMemoDlg = new CShangpinSaomaluruWnd();
-
-	if (pMemoDlg != NULL)
-	{
-		m_is_show_modal_wnd = true;
-		m_curModalWnd = pMemoDlg;
-
-		pMemoDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
-		pMemoDlg->SetIcon(IDI_ICON_DUILIB);
-		pMemoDlg->CenterWindow();
-
-		UINT ret = pMemoDlg->ShowModal();
-
-		if (ret == IDOK)
-		{
-			std::string code = pMemoDlg->m_code;
-			std::string name = pMemoDlg->m_name;
-			std::string price = pMemoDlg->m_price;
-			std::string unit = pMemoDlg->m_unit;
-			std::string des = pMemoDlg->m_des;
-
-			//获取到了值,初始化值
-			CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
-			pTiaoma->SetText(CLewaimaiString::UTF8ToUnicode(code).c_str());
-
-			CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
-			pName->SetText(CLewaimaiString::UTF8ToUnicode(name).c_str());
-
-			CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
-			pPrice->SetText(CLewaimaiString::UTF8ToUnicode(price).c_str());
-
-			CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
-			pDanwei->SetText(CLewaimaiString::UTF8ToUnicode(unit).c_str());
-
-			m_is_show_modal_wnd = false;
-			delete pMemoDlg;
-		}
-		else
-		{
-			m_is_show_modal_wnd = false;
-			delete pMemoDlg;
-
-			return;
-		}
-	}
-}

+ 0 - 90
zhipuzi_pos_windows/page/CShangpinCreatePageUI.h

@@ -1,90 +0,0 @@
-#pragma once
-
-#include "pch.h"
-#include "../ui/CBasePageUI.h"
-
-#include "../zhipuzi/CFood.h"
-#include "../zhipuzi/CFoodtype.h"
-#include "../zhipuzi/CFoodpackage.h"
-
-#include "../zhipuzi/CDiandanOrder.h"
-
-class CShangpinCreatePageUI : public CBasePageUI
-{
-public:
-	CShangpinCreatePageUI();
-	~CShangpinCreatePageUI();
-
-	//初始化页面控件,页面创建构造的时候调用一次,注意和InitShow的区别,这个不触发控件的任何事件
-	void InitControl();
-
-	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
-	void InitShow();
-
-	//处理按钮点击类事件
-	void HandleClickMsg(TNotifyUI& msg);
-
-	//处理option切换事件
-	void HandleSelectChangeMsg(TNotifyUI& msg);
-
-	//处理下拉框、radio的切换事件
-	void HandleItemSelectMsg(TNotifyUI& msg);
-
-	//处理编辑框输入内容改变事件
-	void HandleTextChangedMsg(TNotifyUI& msg);
-
-	//处理扫码枪捕捉到的扫码信息
-	void HandleTextCapture(std::string content);
-
-	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
-	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-	void SetPos(RECT rc, bool bNeedInvalidate = true);
-
-	//开始处理保存商品的逻辑
-	void StartSave();
-
-	void HandleSave();
-
-	void ShowSaomaluru();
-private:
-	void ShowError(std::wstring msg);
-
-private:
-	//商品字段
-	std::string m_name;
-	std::string m_xuhao;
-	std::string m_fenlei;
-	std::string m_tiaoma;
-	std::string m_price;
-	std::string m_danwei;
-	bool m_is_chengzhong;
-	std::string m_plu;
-	std::string m_shangpinbianma;
-
-	//0 下单扣减库存 1 无限库存
-	int m_kucuntype;
-	std::string m_dangqiankucun;
-
-	//0正常 1下架
-	int m_status;
-	std::string m_jinhuojia;
-
-	//0 当前成本价 1:加权平均
-	int m_jinhuo_type;
-
-	bool m_is_shouyinji_show;
-	bool m_is_waimai_show;
-	bool m_is_saomadiancan_show;
-	bool m_is_dabao_fei;
-	std::string m_dabaofei;
-
-	//加工类型 1 方案1 2:方案2 3:方案3
-	int m_jiagong_type;
-
-	//临时保存商品名字到ID的映射
-	std::map<std::string, std::string> m_foodtype_id_map;
-
-	//当前控件的实际宽度
-	int m_nPageWidth;
-};

+ 213 - 13
zhipuzi_pos_windows/page/CShangpinPageUI.cpp

@@ -7,6 +7,8 @@
 
 #include "../wnd/CMainWnd.h"
 #include "../wnd/CShangpinNewTypeWnd.h"
+#include "../wnd/CShangpinCreateWnd.h"
+#include "../wnd/CShangpinUpdateWnd.h"
 
 CShangpinPageUI::CShangpinPageUI()
 {
@@ -305,13 +307,8 @@ void CShangpinPageUI::HandleClickMsg(TNotifyUI& msg)
 	}
 	else if (name == L"shangpin_page_add_btn")
 	{
-		CShangpinCreatePageUI* page = static_cast<CShangpinCreatePageUI*>(m_pMainWnd->GetPage(CMainWnd::SHANGPIN_CREATE));
-		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_CREATE);
-	}
-	else if (name == L"shangpin_page_piliang_add_btn")
-	{
-		CShangpinPiliangluruPageUI* page = static_cast<CShangpinPiliangluruPageUI*>(m_pMainWnd->GetPage(CMainWnd::SHANGPIN_PILIANGLURU));
-		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_PILIANGLURU);
+		//手动点击新建商品,弹出新建商品弹框
+		ShowCreateShangpin();
 	}
 	else if (name == L"shangpin_page_add_type_btn")
 	{
@@ -385,7 +382,114 @@ void CShangpinPageUI::HandleTextChangedMsg(TNotifyUI& msg)
 //处理扫码枪捕捉到的扫码信息
 void CShangpinPageUI::HandleTextCapture(std::string content)
 {
-	
+	//弹框打开期间不响应扫码,扫码录入只在商品管理页面本身生效
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
+	if (content.length() == 0)
+	{
+		return;
+	}
+
+	//上一次扫码还在请求中,忽略这次,避免连续扫码弹出多个弹框
+	if (m_is_saoma_requesting == true)
+	{
+		return;
+	}
+
+	//用扫到的条码去服务器查商品信息,拿到之后会弹出新建商品弹框并把信息填进去
+	this->StartSaomaGetInfo(content);
+}
+
+//扫到商品条码后,请求服务器获取商品信息
+void CShangpinPageUI::StartSaomaGetInfo(std::string barcode)
+{
+	m_saoma_barcode = barcode;
+	m_is_saoma_requesting = true;
+
+	std::thread(&CShangpinPageUI::HandleSaomaGetInfo, this).detach();
+}
+
+void CShangpinPageUI::HandleSaomaGetInfo()
+{
+	//这里和CShangpinSaomaluruWnd::ConfirmMember用的是同一个接口
+	std::map<std::string, std::string> params;
+	params["barcode"] = m_saoma_barcode;
+
+	std::string response;
+	bool ret = CZhipuziHttpClient::GetInstance()->Request("/goods/getinfobythirdbarcode", params, response);
+	if (!ret)
+	{
+		m_saoma_error = L"网络请求出错";
+		PostMessage(m_pManager->GetPaintWindow(), WM_SHANGPIN_SAOMA_FAIL, 0, 0);
+
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_saoma_error = L"服务器返回数据格式错误";
+		PostMessage(m_pManager->GetPaintWindow(), WM_SHANGPIN_SAOMA_FAIL, 0, 0);
+
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		m_saoma_error = L"服务器返回数据格式错误";
+		PostMessage(m_pManager->GetPaintWindow(), WM_SHANGPIN_SAOMA_FAIL, 0, 0);
+
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		std::string errmsg = CLewaimaiString::UnicodeToUTF8(L"扫码失败:") + std::string(document["errmsg"].GetString());
+		m_saoma_error = CLewaimaiString::UTF8ToUnicode(errmsg);
+		PostMessage(m_pManager->GetPaintWindow(), WM_SHANGPIN_SAOMA_FAIL, 0, 0);
+
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+
+	m_saoma_code = data["code"].GetString();
+	m_saoma_name = data["name"].GetString();
+	m_saoma_price = data["price"].GetString();
+	m_saoma_unit = data["unit"].GetString();
+
+	PostMessage(m_pManager->GetPaintWindow(), WM_SHANGPIN_SAOMA_SUCCESS, 0, 0);
+}
+
+bool CShangpinPageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	if (uMsg == WM_SHANGPIN_SAOMA_SUCCESS)
+	{
+		m_is_saoma_requesting = false;
+
+		//扫码拿到商品信息了,弹出新建商品弹框并自动填好内容
+		this->ShowCreateShangpinWithSaomaInfo();
+
+		return true;
+	}
+	else if (uMsg == WM_SHANGPIN_SAOMA_FAIL)
+	{
+		m_is_saoma_requesting = false;
+
+		//没查到商品信息,提示一下失败原因
+		m_pMainWnd->ShowToast(m_saoma_error);
+
+		return true;
+	}
+
+	return false;
 }
 
 void CShangpinPageUI::ClickFoodAction()
@@ -393,11 +497,8 @@ void CShangpinPageUI::ClickFoodAction()
 	//点击普通商品之后的处理逻辑
 	CFood foodinfo = m_cur_click_food_item->GetFoodInfo();
 
-	//点击了这个商品,进入商品修改页面
-	CShangpinUpdatePageUI* page = static_cast<CShangpinUpdatePageUI*>(m_pMainWnd->GetPage(CMainWnd::SHANGPIN_UPDATE));
-	page->SetFoodinfo(foodinfo);
-
-	m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN_UPDATE);
+	//点击了这个商品,弹出修改商品弹框
+	this->ShowUpdateShangpin(foodinfo);
 }
 
 //开始搜索某个商品名字
@@ -492,3 +593,102 @@ void CShangpinPageUI::ShowNewtype()
 		}
 	}
 }
+
+void CShangpinPageUI::ShowCreateShangpin()
+{
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
+	CShangpinCreateWnd* pCreateDlg = new CShangpinCreateWnd();
+
+	if (pCreateDlg != NULL)
+	{
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pCreateDlg;
+
+		pCreateDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pCreateDlg->SetIcon(IDI_ICON_DUILIB);
+		pCreateDlg->CenterWindow();
+
+		UINT ret = pCreateDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//这里表示添加商品成功了,刷新商品展示
+			this->InitFoodShow();
+		}
+
+		m_is_show_modal_wnd = false;
+		delete pCreateDlg;
+	}
+}
+
+void CShangpinPageUI::ShowCreateShangpinWithSaomaInfo()
+{
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
+	CShangpinCreateWnd* pCreateDlg = new CShangpinCreateWnd();
+
+	if (pCreateDlg != NULL)
+	{
+		//把扫码获取到的商品信息预填到弹框里(要在Create之前设置)
+		pCreateDlg->SetSaomaInfo(m_saoma_code, m_saoma_name, m_saoma_price, m_saoma_unit);
+
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pCreateDlg;
+
+		pCreateDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pCreateDlg->SetIcon(IDI_ICON_DUILIB);
+		pCreateDlg->CenterWindow();
+
+		UINT ret = pCreateDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//这里表示添加商品成功了,刷新商品展示
+			this->InitFoodShow();
+		}
+
+		m_is_show_modal_wnd = false;
+		delete pCreateDlg;
+	}
+}
+
+void CShangpinPageUI::ShowUpdateShangpin(CFood foodinfo)
+{
+	if (m_is_show_modal_wnd == true)
+	{
+		return;
+	}
+
+	CShangpinUpdateWnd* pUpdateDlg = new CShangpinUpdateWnd();
+
+	if (pUpdateDlg != NULL)
+	{
+		//把要修改的商品信息传进去(要在Create之前设置)
+		pUpdateDlg->SetFoodinfo(foodinfo);
+
+		m_is_show_modal_wnd = true;
+		m_curModalWnd = pUpdateDlg;
+
+		pUpdateDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
+		pUpdateDlg->SetIcon(IDI_ICON_DUILIB);
+		pUpdateDlg->CenterWindow();
+
+		UINT ret = pUpdateDlg->ShowModal();
+
+		if (ret == IDOK)
+		{
+			//这里表示修改或者删除商品成功了,刷新商品展示
+			this->InitFoodShow();
+		}
+
+		m_is_show_modal_wnd = false;
+		delete pUpdateDlg;
+	}
+}

+ 26 - 4
zhipuzi_pos_windows/page/CShangpinPageUI.h

@@ -49,10 +49,12 @@ public:
 	void HandleTextCapture(std::string content);
 
 	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
-	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
-	{
-		return false;
-	}
+	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	//扫到商品条码后,请求服务器获取商品信息(和CShangpinSaomaluruWnd同样的接口)
+	void StartSaomaGetInfo(std::string barcode);
+
+	void HandleSaomaGetInfo();
 
 	//点击某一个商品的item之后的处理逻辑
 	void ClickFoodAction();
@@ -66,6 +68,15 @@ public:
 	void SetPos(RECT rc, bool bNeedInvalidate = true);
 
 	void ShowNewtype();
+
+	//手动点击新建商品,弹出新建商品弹框
+	void ShowCreateShangpin();
+
+	//扫码枪扫到商品条码后,弹出新建商品弹框并自动填好对应字段
+	void ShowCreateShangpinWithSaomaInfo();
+
+	//点击某个商品,弹出修改商品弹框
+	void ShowUpdateShangpin(CFood foodinfo);
 private:
 	CTileLayoutUI* m_foodLayout;
 	CHorizontalLayoutUI* m_foodtypeLayout;
@@ -87,5 +98,16 @@ private:
 	//当前控件的实际宽度
 	int m_nPageWidth;
 
+	//扫码获取商品信息相关
+	std::string m_saoma_barcode;
+	std::string m_saoma_code;
+	std::string m_saoma_name;
+	std::string m_saoma_price;
+	std::string m_saoma_unit;
+	std::wstring m_saoma_error;
+
+	//是否正在请求扫码商品信息,避免连续扫码重复请求
+	bool m_is_saoma_requesting = false;
+
 	std::mutex m_foodtype_mutex;
 };

+ 0 - 120
zhipuzi_pos_windows/page/CShangpinPiliangluruPageUI.cpp

@@ -1,120 +0,0 @@
-#include "pch.h"
-#include "CShangpinPiliangluruPageUI.h"
-
-#include "../control/ControlEx.h"
-
-#include "../tool/CSqlite3.h"
-
-#include "../wnd/CMainWnd.h"
-#include "../wnd/CShangpinNewTypeWnd.h"
-
-CShangpinPiliangluruPageUI::CShangpinPiliangluruPageUI()
-{
-}
-
-
-CShangpinPiliangluruPageUI::~CShangpinPiliangluruPageUI()
-{
-}
-
-void CShangpinPiliangluruPageUI::InitControl()
-{
-
-}
-
-//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
-void CShangpinPiliangluruPageUI::InitShow()
-{
-	
-}
-
-void CShangpinPiliangluruPageUI::RefreshShow()
-{
-	
-}
-
-//处理按钮点击类事件
-void CShangpinPiliangluruPageUI::HandleClickMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	if (name == L"shangpin_piliangluru_page_return_btn")
-	{
-		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN, false);
-	}	
-}
-
-//处理option切换事件
-void CShangpinPiliangluruPageUI::HandleSelectChangeMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
-	std::wstring groupname = curOption->GetGroup();
-
-	
-}
-
-//处理下拉框、radio的切换事件
-void CShangpinPiliangluruPageUI::HandleItemSelectMsg(TNotifyUI& msg)
-{
-
-}
-
-//处理编辑框输入内容改变事件
-void CShangpinPiliangluruPageUI::HandleTextChangedMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	
-}
-
-//处理扫码枪捕捉到的扫码信息
-void CShangpinPiliangluruPageUI::HandleTextCapture(std::string content)
-{
-
-}
-
-void CShangpinPiliangluruPageUI::SetPos(RECT rc, bool bNeedInvalidate)
-{
-	m_nPageWidth = rc.right - rc.left;
-
-	CContainerUI::SetPos(rc, bNeedInvalidate);
-}
-
-void CShangpinPiliangluruPageUI::ShowNewtype()
-{
-	if (m_is_show_modal_wnd == true)
-	{
-		return;
-	}
-
-	CShangpinNewTypeWnd* pMemoDlg = new CShangpinNewTypeWnd();
-
-	if (pMemoDlg != NULL)
-	{
-		m_is_show_modal_wnd = true;
-		m_curModalWnd = pMemoDlg;
-
-		pMemoDlg->Create(m_pManager->GetPaintWindow(), _T(""), UI_WNDSTYLE_DIALOG, WS_EX_WINDOWEDGE);
-		pMemoDlg->SetIcon(IDI_ICON_DUILIB);
-		pMemoDlg->CenterWindow();
-
-		UINT ret = pMemoDlg->ShowModal();
-
-		if (ret == IDOK)
-		{
-			//这里表示添加分类成功了,刷新分类显示
-
-			m_is_show_modal_wnd = false;
-			delete pMemoDlg;
-		}
-		else
-		{
-			m_is_show_modal_wnd = false;
-			delete pMemoDlg;
-
-			return;
-		}
-	}
-}

+ 0 - 58
zhipuzi_pos_windows/page/CShangpinPiliangluruPageUI.h

@@ -1,58 +0,0 @@
-#pragma once
-
-#include "pch.h"
-#include "../ui/CBasePageUI.h"
-
-#include "../zhipuzi/CFood.h"
-#include "../zhipuzi/CFoodtype.h"
-#include "../zhipuzi/CFoodpackage.h"
-
-#include "../control/CDiandanFoodItemUI.h"
-#include "../zhipuzi/CDiandanOrder.h"
-
-class CShangpinPiliangluruPageUI : public CBasePageUI
-{
-public:
-	CShangpinPiliangluruPageUI();
-	~CShangpinPiliangluruPageUI();
-
-	//初始化页面控件,页面创建构造的时候调用一次,注意和InitShow的区别,这个不触发控件的任何事件
-	void InitControl();
-
-	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
-	void InitShow();
-
-	//收款一个订单成功,准备开始收款第2个订单的时候调用(会多次调度用)
-	void RefreshShow();
-
-	//处理按钮点击类事件
-	void HandleClickMsg(TNotifyUI& msg);
-
-	//处理option切换事件
-	void HandleSelectChangeMsg(TNotifyUI& msg);
-
-	//处理下拉框、radio的切换事件
-	void HandleItemSelectMsg(TNotifyUI& msg);
-
-	//处理编辑框输入内容改变事件
-	void HandleTextChangedMsg(TNotifyUI& msg);
-
-	//处理扫码枪捕捉到的扫码信息
-	void HandleTextCapture(std::string content);
-
-	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
-	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
-	{
-		return false;
-	}
-
-	void SetPos(RECT rc, bool bNeedInvalidate = true);
-
-	void ShowNewtype();
-private:
-	//所有商品分类(只包含收银机显示的分类)
-	std::vector<CFoodType> m_types;
-
-	//当前控件的实际宽度
-	int m_nPageWidth;
-};

+ 0 - 843
zhipuzi_pos_windows/page/CShangpinUpdatePageUI.cpp

@@ -1,843 +0,0 @@
-#include "pch.h"
-#include "CShangpinUpdatePageUI.h"
-
-#include "../control/ControlEx.h"
-
-#include "../tool/CSqlite3.h"
-#include "../tool/CFoodHandle.h"
-#include "../wnd/CMainWnd.h"
-
-#include "../print/CPosPrinter.h"
-
-CShangpinUpdatePageUI::CShangpinUpdatePageUI()
-{
-}
-
-
-CShangpinUpdatePageUI::~CShangpinUpdatePageUI()
-{
-}
-
-void CShangpinUpdatePageUI::InitControl()
-{
-
-}
-
-//初始化当前页面的展示,处理默认展示效果,在页面被加载的时候调用
-void CShangpinUpdatePageUI::InitShow()
-{
-	//商品名字
-	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
-	pName->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.name).c_str());
-
-	//商品序号
-	CEditUI* pXuhao = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_xuhao_edit"));
-	pXuhao->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.tag).c_str());
-
-	//初始化商品分类
-	CComboUI* com_fenlei = static_cast<CComboUI*>(this->FindSubControl(_T("shangpin_create_page_foodtype")));
-	com_fenlei->RemoveAll();
-
-	CSqlite3 sqlite;
-	std::vector<CFoodType> foodtypes = sqlite.GetFoodtypes();
-
-	int nSelectType = -1;
-	int nCurNum = 0;
-	std::string select_foodtype_name;
-	for (std::vector<CFoodType>::iterator it = foodtypes.begin(); it != foodtypes.end(); it++)
-	{
-		CListLabelElementUI* elem = new CListLabelElementUI();
-
-		elem->SetText(CLewaimaiString::UTF8ToUnicode(it->name).c_str());
-		com_fenlei->Add(elem);
-
-		if (it->id == m_foodinfo.type_id)
-		{
-			nSelectType = nCurNum;
-			select_foodtype_name = it->name;
-		}
-
-		nCurNum++;
-
-		m_foodtype_id_map[it->name] = it->id;
-	}
-
-	com_fenlei->SetInternVisible(true);
-
-	if (nSelectType != -1)
-	{
-		com_fenlei->SelectItem(nSelectType, false);
-	}
-
-	com_fenlei->SetText(CLewaimaiString::UTF8ToUnicode(select_foodtype_name).c_str());
-
-	//商品条码
-	CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
-	pTiaoma->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.barcode).c_str());
-
-	//商品价格
-	CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
-	pPrice->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.price).c_str());
-
-	//商品单位
-	CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
-	pDanwei->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.unit).c_str());
-
-	//是否称重
-	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_chengzhong"));
-	if (m_foodinfo.is_weight == "1")
-	{
-		pChengzhong->Selected(true, false);
-	}
-	else
-	{
-		pChengzhong->Selected(false, false);
-	}
-
-	//plu编码
-	CEditUI* pPlu = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_plu"));
-	pPlu->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.weight_plu_code).c_str());
-
-	//商品编码
-	CEditUI* pShangpin = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_shangpinbianma"));
-	pShangpin->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.weight_food_code).c_str());
-
-	//库存类型
-	CCheckBoxUI* pKucuntypeOpen = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_kucun_open"));	
-	CCheckBoxUI* pKucuntypeWuxian = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_kucun_wuxian"));
-	if (m_foodinfo.stockvalid == "1")
-	{
-		pKucuntypeOpen->Selected(true, false);
-		pKucuntypeWuxian->Selected(false, false);
-	}
-	else
-	{
-		pKucuntypeOpen->Selected(false, false);
-		pKucuntypeWuxian->Selected(true, false);
-	}
-
-	//当前库存
-	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
-	pDangqiankucun->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.stock).c_str());
-
-	//商品状态
-	CCheckBoxUI* pStatusNormal = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
-	CCheckBoxUI* pStatusXiajia = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_xiajia"));
-	if (m_foodinfo.status == "NORMAL")
-	{
-		pStatusNormal->Selected(true, false);
-		pStatusXiajia->Selected(false, false);
-	}
-	else
-	{
-		pStatusNormal->Selected(false, false);
-		pStatusXiajia->Selected(true, false);
-	}
-
-	//进货价
-	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
-	pJinhuojia->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.buying_price).c_str());
-
-	//进货价模式
-	CCheckBoxUI* pJinhuomoshiNormal = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
-	CCheckBoxUI* pJinhuomoshiJiaquan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_jiaquan"));
-	if (m_foodinfo.cost_mode == "0")
-	{
-		pJinhuomoshiNormal->Selected(true, false);
-		pJinhuomoshiJiaquan->Selected(false, false);
-	}
-	else
-	{
-		pJinhuomoshiNormal->Selected(false, false);
-		pJinhuomoshiJiaquan->Selected(true, false);
-	}
-
-	//在哪些地方显示
-	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_shouyinji"));
-	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_waimai"));
-	CCheckBoxUI* pSaomaidancan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_saomadiancan"));
-
-	if (m_foodinfo.is_shouyinji_show == "1")
-	{
-		pShouyinji->Selected(true, false);
-	}
-	else
-	{
-		pShouyinji->Selected(false, false);
-	}
-
-	if (m_foodinfo.is_waimai_show == "1")
-	{
-		pWaimai->Selected(true, false);
-	}
-	else
-	{
-		pWaimai->Selected(false, false);
-	}
-
-	if (m_foodinfo.is_tangshi_show == "1")
-	{
-		pSaomaidancan->Selected(true, false);
-	}
-	else
-	{
-		pSaomaidancan->Selected(false, false);
-	}
-
-	//是否开启打包费
-	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_is_dabao"));
-	if (m_foodinfo.is_dabao == "1")
-	{
-		pDabao->Selected(true, false);
-	}
-	else
-	{
-		pDabao->Selected(false, false);
-	}
-
-	//打包费
-	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
-	pDaobaofei->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.dabao_money).c_str());
-
-	//商品加工方式
-	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
-	CCheckBoxUI* pJiagongfangshi_2 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_2"));
-	CCheckBoxUI* pJiagongfangshi_3 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_3"));
-	if (m_foodinfo.jiagong_type == "1")
-	{
-		pJiagongfangshi_1->Selected(true, false);
-	}
-	else if (m_foodinfo.jiagong_type == "2")
-	{
-		pJiagongfangshi_2->Selected(true, false);
-	}
-	else if (m_foodinfo.jiagong_type == "3")
-	{
-		pJiagongfangshi_3->Selected(true, false);
-	}
-
-	ShowError(L"");
-
-	CVerticalLayoutUI* layout = static_cast<CVerticalLayoutUI*>(this->FindSubControl(L"shangpin_create_page_info_layout"));
-
-	SIZE pos;
-	pos.cx = 0;
-	pos.cy = 0;
-	layout->SetScrollPos(pos);
-}
-
-//处理按钮点击类事件
-void CShangpinUpdatePageUI::HandleClickMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	if (name == L"shangpin_create_page_save_btn")
-	{
-		StartSave();
-	}
-	else if (name == L"shangpin_create_page_return_btn")
-	{
-		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN, false);
-	}
-	else if (name == L"shangpin_create_page_delete_btn")
-	{
-		StartDelete();
-	}
-}
-
-//处理option切换事件
-void CShangpinUpdatePageUI::HandleSelectChangeMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	COptionUI* curOption = static_cast<COptionUI*>(msg.pSender);
-	std::wstring groupname = curOption->GetGroup();
-
-	if (groupname == L"shangpin_foodtype")
-	{
-
-	}
-}
-
-//处理下拉框、radio的切换事件
-void CShangpinUpdatePageUI::HandleItemSelectMsg(TNotifyUI& msg)
-{
-
-}
-
-//处理编辑框输入内容改变事件
-void CShangpinUpdatePageUI::HandleTextChangedMsg(TNotifyUI& msg)
-{
-	CDuiString name = msg.pSender->GetName();
-
-	if (name == L"shangpin_create_page_xuhao_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_xuhao_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_barcode_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_barcode_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_price_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_price_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48) && tmp != 46)
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_buyingprice_edit")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_buyingprice_edit")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48) && tmp != 46)
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_plu")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_plu")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_shangpinbianma")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_shangpinbianma")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_dabao_money")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_dabao_money")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48) && tmp != 46)
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-	else if (name == L"shangpin_create_page_kucun_now")
-	{
-		//只能输入数字,其他的全部删除
-		CEditUI* m_pEdit = static_cast<CEditUI*>(m_pManager->FindControl(_T("shangpin_create_page_kucun_now")));
-		if (!m_pEdit->GetText().IsEmpty())
-		{
-			std::wstring ws_Value = m_pEdit->GetText();
-			std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
-
-			for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
-			{
-				unsigned char tmp = strValue.at(nIndex);
-				if ((tmp > 57 || tmp < 48))
-				{
-					//ASCII码不是数字的都过滤掉
-					strValue = strValue.substr(0, nIndex);
-
-					m_pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
-					m_pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
-
-					break;
-				}
-			}
-		}
-	}
-}
-
-//处理扫码枪捕捉到的扫码信息
-void CShangpinUpdatePageUI::HandleTextCapture(std::string content)
-{
-
-}
-
-bool CShangpinUpdatePageUI::HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-	if (uMsg == WM_FOOD_HANDLE_SUCCESS)
-	{
-		//然后返回到商品页面
-		m_pMainWnd->SwitchPage(CMainWnd::SHANGPIN);
-
-		return true;
-	}
-
-	return false;
-}
-
-void CShangpinUpdatePageUI::SetPos(RECT rc, bool bNeedInvalidate)
-{
-	m_nPageWidth = rc.right - rc.left;
-
-	CContainerUI::SetPos(rc, bNeedInvalidate);
-}
-
-void CShangpinUpdatePageUI::StartSave()
-{
-	//把参数一个个读出来
-
-	//商品名字
-	CEditUI* pName = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_name_edit"));
-	std::wstring ws_name = pName->GetText();
-	m_name = CLewaimaiString::UnicodeToUTF8(ws_name);
-
-	//商品序号
-	CEditUI* pXuhao = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_xuhao_edit"));
-	std::wstring ws_xuhao = pXuhao->GetText();
-	m_xuhao = CLewaimaiString::UnicodeToUTF8(ws_xuhao);
-
-	//初始化商品分类
-	CComboUI* com_fenlei = static_cast<CComboUI*>(this->FindSubControl(_T("shangpin_create_page_foodtype")));
-	std::wstring ws_type = com_fenlei->GetText();
-	m_fenlei = CLewaimaiString::UnicodeToUTF8(ws_type);
-
-	//商品条码
-	CEditUI* pTiaoma = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_barcode_edit"));
-	std::wstring ws_tiaoma = pTiaoma->GetText();
-	m_tiaoma = CLewaimaiString::UnicodeToUTF8(ws_tiaoma);
-
-	//商品价格
-	CEditUI* pPrice = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_price_edit"));
-	std::wstring ws_price = pPrice->GetText();
-	m_price = CLewaimaiString::UnicodeToUTF8(ws_price);
-
-	//商品单位
-	CEditUI* pDanwei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_unit_edit"));
-	std::wstring ws_danwei = pDanwei->GetText();
-	m_danwei = CLewaimaiString::UnicodeToUTF8(ws_danwei);
-
-	//是否称重
-	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_chengzhong"));
-	m_is_chengzhong = pChengzhong->IsSelected();
-
-	//plu编码
-	CEditUI* pPlu = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_plu"));
-	std::wstring ws_plu = pPlu->GetText();
-	m_plu = CLewaimaiString::UnicodeToUTF8(ws_plu);
-
-	//商品编码
-	CEditUI* pShangpin = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_shangpinbianma"));
-	std::wstring ws_shangpin = pShangpin->GetText();
-	m_shangpinbianma = CLewaimaiString::UnicodeToUTF8(ws_shangpin);
-
-	//库存类型
-	CCheckBoxUI* pKucuntype = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_kucun_open"));
-	if (pKucuntype->IsSelected())
-	{
-		m_kucuntype = 0;
-	}
-	else
-	{
-		m_kucuntype = 1;
-	}
-
-	//当前库存
-	CEditUI* pDangqiankucun = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_kucun_now"));
-	std::wstring ws_dangqiankucun = pDangqiankucun->GetText();
-	m_dangqiankucun = CLewaimaiString::UnicodeToUTF8(ws_dangqiankucun);
-
-	//商品状态
-	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_status_normal"));
-	if (pStatus->IsSelected())
-	{
-		m_status = 0;
-	}
-	else
-	{
-		m_status = 1;
-	}
-
-	//进货价
-	CEditUI* pJinhuojia = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_buyingprice_edit"));
-	std::wstring ws_jinhuojia = pJinhuojia->GetText();
-	m_jinhuojia = CLewaimaiString::UnicodeToUTF8(ws_jinhuojia);
-
-	//进货价模式
-	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_jinhuojia_normal"));
-	if (pJinhuomoshi->IsSelected())
-	{
-		m_jinhuo_type = 0;
-	}
-	else
-	{
-		m_jinhuo_type = 1;
-	}
-
-	//在哪些地方显示
-	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_shouyinji"));
-	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_waimai"));
-	CCheckBoxUI* pSaomaidancan = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_showplace_saomadiancan"));
-
-	m_is_shouyinji_show = pShouyinji->IsSelected();
-	m_is_waimai_show = pWaimai->IsSelected();
-	m_is_saomadiancan_show = pSaomaidancan->IsSelected();
-
-	//是否开启打包费
-	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_is_dabao"));
-	m_is_dabao_fei = pDabao->IsSelected();
-
-	//打包费
-	CEditUI* pDaobaofei = static_cast<CEditUI*>(this->FindSubControl(L"shangpin_create_page_dabao_money"));
-	std::wstring ws_dabaofei = pDaobaofei->GetText();
-	m_dabaofei = CLewaimaiString::UnicodeToUTF8(ws_dabaofei);
-
-	//商品加工方式
-	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_1"));
-	CCheckBoxUI* pJiagongfangshi_2 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_2"));
-	CCheckBoxUI* pJiagongfangshi_3 = static_cast<CCheckBoxUI*>(this->FindSubControl(L"shangpin_create_page_fangan_3"));
-
-	if (pJiagongfangshi_1->IsSelected())
-	{
-		m_jiagong_type = 0;
-	}
-	else if (pJiagongfangshi_2->IsSelected())
-	{
-		m_jiagong_type = 1;
-	}
-	else if (pJiagongfangshi_3->IsSelected())
-	{
-		m_jiagong_type = 2;
-	}
-
-	ShowError(L"正在保存商品...");
-
-	std::thread(&CShangpinUpdatePageUI::HandleSave, this).detach();
-}
-
-void CShangpinUpdatePageUI::HandleSave()
-{
-	std::map<std::string, std::string> params;
-
-	params["goods_id"] = m_foodinfo.id;
-	params["goods_name"] = m_name;
-	params["goods_tag"] = m_xuhao;
-	params["type_lv1_id"] = m_foodtype_id_map[m_fenlei];
-	params["barcode"] = m_tiaoma;
-	params["goods_price"] = m_price;
-	params["unit"] = m_danwei;
-
-	if (m_is_chengzhong)
-	{
-		params["is_weight"] = "1";
-	}
-	else
-	{
-		params["is_weight"] = "0";
-	}
-
-	params["weight_plu_code"] = m_plu;
-	params["weight_food_code"] = m_shangpinbianma;
-
-	if (m_kucuntype == 0)
-	{
-		params["stock_status"] = "OPEN";
-	}
-	else
-	{
-		params["stock_status"] = "CLOSED";
-	}
-
-	params["stock"] = m_dangqiankucun;	
-
-	if (m_status == 0)
-	{
-		params["goods_status"] = "NORMAL";
-	}
-	else
-	{
-		params["goods_status"] = "CLOSED";
-	}	
-
-	params["buying_price"] = m_jinhuojia;
-
-	params["cost_mode"] = std::to_string(m_jinhuo_type);
-
-	if (m_is_shouyinji_show)
-	{
-		params["is_shouyinji_show"] = "1";
-	}
-	else
-	{
-		params["is_shouyinji_show"] = "0";
-	}
-
-	if (m_is_waimai_show)
-	{
-		params["is_waimai_show"] = "1";
-	}
-	else
-	{
-		params["is_waimai_show"] = "0";
-	}
-
-	if (m_is_saomadiancan_show)
-	{
-		params["is_tangshi_show"] = "1";
-		params["is_zhengcan_show"] = "1";
-	}
-	else
-	{
-		params["is_tangshi_show"] = "0";
-		params["is_zhengcan_show"] = "0";
-	}
-
-	if (m_is_dabao_fei)
-	{
-		params["is_dabao"] = "1";
-	}
-	else
-	{
-		params["is_dabao"] = "0";
-	}
-
-	params["dabao_money"] = m_dabaofei;
-
-	params["jiagong_type"] = std::to_string(m_jiagong_type);
-	
-	//这下面是接口要求必传参数
-	params["goods_img"] = m_foodinfo.goods_img;
-	params["goods_thumb_img"] = m_foodinfo.goods_img;
-
-	params["open_autostock"] = "0";
-	params["stock_warning"] = "0";
-
-	std::string response;
-
-	std::string url = "/goods/updategoods";
-	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
-
-	if (ret == false)
-	{
-		ShowError(L"请求服务器失败,请检查网络设置!");
-
-		return;
-	}
-
-	rapidjson::Document document;
-	document.Parse(response.c_str());
-
-	if (document.HasParseError())
-	{
-		ShowError(L"服务器错误");
-		return;
-	}
-
-	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
-	{
-		ShowError(L"服务器错误");
-		return;
-	}
-
-	rapidjson::Value& v_errcode = document["errcode"];
-	int errcode = v_errcode.GetInt();
-	if (errcode != 0)
-	{
-		std::string v_errmsg = document["errmsg"].GetString();
-
-		ShowError(CLewaimaiString::UTF8ToUnicode(v_errmsg));
-		return;
-	}
-
-	rapidjson::Value& data = document["data"];
-
-	std::string id = data["goods_id"].GetString();
-
-	//走到这里说明商品保存成功了,接着把商品的数据更新到数据库
-	CFoodHandle::GetInstance()->UpdateOneFood(id);
-
-	PostMessage(m_pManager->GetPaintWindow(), WM_FOOD_HANDLE_SUCCESS, 0, 0);
-}
-
-void CShangpinUpdatePageUI::StartDelete()
-{
-	std::thread(&CShangpinUpdatePageUI::HandleDelete, this).detach();
-}
-
-void CShangpinUpdatePageUI::HandleDelete()
-{
-	std::map<std::string, std::string> params;
-	params["goods_id"] = m_foodinfo.id;
-
-	std::string response;
-
-	std::string url = "/goods/deletegoods";
-	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
-
-	if (ret == false)
-	{
-		ShowError(L"请求服务器失败,请检查网络设置!");
-
-		return;
-	}
-
-	rapidjson::Document document;
-	document.Parse(response.c_str());
-
-	if (document.HasParseError())
-	{
-		ShowError(L"服务器错误");
-		return;
-	}
-
-	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
-	{
-		ShowError(L"服务器错误");
-		return;
-	}
-
-	rapidjson::Value& v_errcode = document["errcode"];
-	int errcode = v_errcode.GetInt();
-	if (errcode != 0)
-	{
-		std::string v_errmsg = document["errmsg"].GetString();
-
-		ShowError(CLewaimaiString::UTF8ToUnicode(v_errmsg));
-		return;
-	}
-
-	//本地数据库删除这个商品
-	CFoodHandle::GetInstance()->DeleteOneFood(m_foodinfo.id);
-
-	PostMessage(m_pManager->GetPaintWindow(), WM_FOOD_HANDLE_SUCCESS, 0, 0);
-}
-
-void CShangpinUpdatePageUI::ShowError(std::wstring msg)
-{
-	CLabelUI* pResult = static_cast<CLabelUI*>(this->FindSubControl(L"shangpin_create_page_save_result"));
-	pResult->SetText(msg.c_str());
-
-	if (msg == L"")
-	{
-		pResult->SetVisible(false);
-	}
-	else
-	{
-		pResult->SetVisible(true);
-	}
-}

+ 0 - 100
zhipuzi_pos_windows/page/CShangpinUpdatePageUI.h

@@ -1,100 +0,0 @@
-#pragma once
-
-#include "pch.h"
-#include "../ui/CBasePageUI.h"
-
-#include "../zhipuzi/CFood.h"
-#include "../zhipuzi/CFoodtype.h"
-#include "../zhipuzi/CFoodpackage.h"
-
-#include "../zhipuzi/CDiandanOrder.h"
-
-class CShangpinUpdatePageUI : public CBasePageUI
-{
-public:
-	CShangpinUpdatePageUI();
-	~CShangpinUpdatePageUI();
-
-	//初始化页面控件,页面创建构造的时候调用一次,注意和InitShow的区别,这个不触发控件的任何事件
-	void InitControl();
-
-	//初始化当前页面的展示,处理默认展示效果,在页面每次被选中加载(注意不是页面创建构造)的时候调用,如果多次选中会多次调用,这里要避免数据重复处理
-	void InitShow();
-
-	//处理按钮点击类事件
-	void HandleClickMsg(TNotifyUI& msg);
-
-	//处理option切换事件
-	void HandleSelectChangeMsg(TNotifyUI& msg);
-
-	//处理下拉框、radio的切换事件
-	void HandleItemSelectMsg(TNotifyUI& msg);
-
-	//处理编辑框输入内容改变事件
-	void HandleTextChangedMsg(TNotifyUI& msg);
-
-	//处理扫码枪捕捉到的扫码信息
-	void HandleTextCapture(std::string content);
-
-	//处理自定义消息,各个页面处理各个页面自己的(是自己处理的消息返回true,不是自己处理的消息返回false)
-	bool HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-	void SetFoodinfo(CFood foodinfo)
-	{
-		m_foodinfo = foodinfo;
-	}
-
-	void SetPos(RECT rc, bool bNeedInvalidate = true);
-
-	//开始处理保存商品的逻辑
-	void StartSave();
-
-	void HandleSave();
-
-	void StartDelete();
-
-	void HandleDelete();
-
-private:
-	void ShowError(std::wstring msg);
-
-private:
-	CFood m_foodinfo;
-
-	//商品字段
-	std::string m_name;
-	std::string m_xuhao;
-	std::string m_fenlei;
-	std::string m_tiaoma;
-	std::string m_price;
-	std::string m_danwei;
-	bool m_is_chengzhong;
-	std::string m_plu;
-	std::string m_shangpinbianma;
-
-	//0 下单扣减库存 1 无限库存
-	int m_kucuntype;
-	std::string m_dangqiankucun;
-
-	//0正常 1下架
-	int m_status;
-	std::string m_jinhuojia;
-
-	//0 当前成本价 1:加权平均
-	int m_jinhuo_type;
-
-	bool m_is_shouyinji_show;
-	bool m_is_waimai_show;
-	bool m_is_saomadiancan_show;
-	bool m_is_dabao_fei;
-	std::string m_dabaofei;
-
-	//加工类型 0 方案1 1:方案2 2:方案3
-	int m_jiagong_type;
-
-	//临时保存商品名字到ID的映射
-	std::map<std::string, std::string> m_foodtype_id_map;
-
-	//当前控件的实际宽度
-	int m_nPageWidth;
-};

+ 2 - 0
zhipuzi_pos_windows/pch/define.h

@@ -45,6 +45,8 @@
 
 //商品管理相关的
 #define WM_FOOD_HANDLE_SUCCESS WM_APP + 10701 //异步处理商品添加、修改、删除等的消息
+#define WM_SHANGPIN_SAOMA_SUCCESS WM_APP + 10702 //扫码枪扫码获取商品信息成功,接下来弹出新建商品弹框
+#define WM_SHANGPIN_SAOMA_FAIL WM_APP + 10703 //扫码枪扫码获取商品信息失败
 
 //热键相关的
 #define WM_MYHOTKEY_WEIXIN_SHOUKUAN WM_APP + 10801

+ 3 - 3
zhipuzi_pos_windows/ui/CBasePageUI.h

@@ -46,9 +46,9 @@ public:
 	}
 
 protected:
-	CMainWnd* m_pMainWnd;
+	CMainWnd* m_pMainWnd = NULL;
 
 	//模态对话框有关的
 	bool m_is_show_modal_wnd = false;
-	CModalWnd* m_curModalWnd;
-};
+	CModalWnd* m_curModalWnd = NULL;
+};

+ 4 - 2
zhipuzi_pos_windows/ui/CModalWnd.h

@@ -1,7 +1,9 @@
 #pragma once
 
+#include "CTouchWindowBase.h"
+
 //这个是所有模态对话框的基类
-class CModalWnd : public CWindowWnd, public INotifyUI, public IMessageFilterUI
+class CModalWnd : public CTouchWindowBase, public INotifyUI, public IMessageFilterUI
 {
 public:
 	CModalWnd();
@@ -12,4 +14,4 @@ public:
 
 	//处理键盘捕捉结果
 	virtual void HandleTextCapture(std::string content) = 0;
-};
+};

+ 0 - 2
zhipuzi_pos_windows/ui/CTouchWindowBase.cpp

@@ -1,7 +1,5 @@
 #include "pch.h"
 #include "CTouchWindowBase.h"
-#include <vector>
-#include <cmath>
 
 #ifndef TOUCH_COORD_TO_PIXEL
 // TOUCH 输入单位是 1/100 英寸,通常使用这个宏转换为像素

+ 1 - 5
zhipuzi_pos_windows/ui/CTouchWindowBase.h

@@ -1,9 +1,5 @@
 #pragma once
 
-#include "pch.h"
-#include <deque>
-#include <chrono>
-
 class CTouchWindowBase : public DuiLib::CWindowWnd
 {
 public:
@@ -61,4 +57,4 @@ protected:
 	void StartInertia(float velocityPxPerMs);
 	void StopInertia();
 	std::int64_t NowMs() const;
-};
+};

+ 0 - 21
zhipuzi_pos_windows/wnd/CMainWnd.cpp

@@ -1548,27 +1548,6 @@ void CMainWnd::CreatePages()
 		m_pages[SHANGPIN] = pChildContainer;
 	}
 
-	{
-		CDialogBuilder builder;
-		CDialogBuilderCallbackEx cb;
-		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("shangpin_create_page.xml"), (UINT)0, &cb, &m_pm));
-		m_pages[SHANGPIN_CREATE] = pChildContainer;
-	}
-
-	{
-		CDialogBuilder builder;
-		CDialogBuilderCallbackEx cb;
-		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("shangpin_update_page.xml"), (UINT)0, &cb, &m_pm));
-		m_pages[SHANGPIN_UPDATE] = pChildContainer;
-	}
-
-	{
-		CDialogBuilder builder;
-		CDialogBuilderCallbackEx cb;
-		pChildContainer = static_cast<CBasePageUI*>(builder.Create(_T("shangpin_piliangluru_page.xml"), (UINT)0, &cb, &m_pm));
-		m_pages[SHANGPIN_PILIANGLURU] = pChildContainer;
-	}
-
 	{
 		CDialogBuilder builder;
 		CDialogBuilderCallbackEx cb;

+ 0 - 3
zhipuzi_pos_windows/wnd/CMainWnd.h

@@ -28,9 +28,6 @@ public:
 		DIANNEIDINGDAN, //店内订单列表
 		DIANNEIINFO, //店内订单详情
 		SHANGPIN, //商品管理
-		SHANGPIN_CREATE, //新建商品
-		SHANGPIN_UPDATE, //修改商品
-		SHANGPIN_PILIANGLURU, //商品批量录入
 		ZHENGCAN, //正餐收银
 		SAOMASHOUYIN, //扫码收银
 		CAIGOU, //采购

+ 722 - 0
zhipuzi_pos_windows/wnd/CShangpinCreateWnd.cpp

@@ -0,0 +1,722 @@
+#include "pch.h"
+#include "CShangpinCreateWnd.h"
+
+#include "../tool/CSqlite3.h"
+#include "../tool/CFoodHandle.h"
+
+LRESULT CShangpinCreateWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	return 0;
+}
+
+LRESULT CShangpinCreateWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	POINT pt;
+	pt.x = GET_X_LPARAM(lParam);
+	pt.y = GET_Y_LPARAM(lParam);
+	::ScreenToClient(*this, &pt);
+
+	RECT rcClient;
+	::GetClientRect(*this, &rcClient);
+
+	RECT rcCaption = m_pm.GetCaptionRect();
+	if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
+		&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
+	{
+		CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
+		if (pControl && _tcscmp(pControl->GetClass(), L"ButtonUI") != 0)
+		{
+			return HTCAPTION;
+		}
+	}
+
+	return HTCLIENT;
+}
+
+LRESULT CShangpinCreateWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	SIZE szRoundCorner = m_pm.GetRoundCorner();
+	if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
+	{
+		CDuiRect rcWnd;
+		::GetWindowRect(*this, &rcWnd);
+		rcWnd.Offset(-rcWnd.left, -rcWnd.top);
+		rcWnd.right++;
+		rcWnd.bottom++;
+		HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
+		::SetWindowRgn(*this, hRgn, TRUE);
+		::DeleteObject(hRgn);
+	}
+
+	bHandled = FALSE;
+	return 0;
+}
+
+LRESULT CShangpinCreateWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lRes = 0;
+	BOOL bHandled = TRUE;
+	switch (uMsg)
+	{
+	case WM_CREATE:
+		lRes = OnCreate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCACTIVATE:
+		lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCCALCSIZE:
+		lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCPAINT:
+		lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCHITTEST:
+		lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_SIZE:
+		lRes = OnSize(uMsg, wParam, lParam, bHandled);
+		break;
+	default:
+		bHandled = FALSE;
+	}
+	if (bHandled)
+	{
+		return lRes;
+	}
+	if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
+	{
+		return lRes;
+	}
+	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
+}
+
+LRESULT CShangpinCreateWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
+{
+	if (uMsg == WM_KEYDOWN)
+	{
+		if (wParam == VK_RETURN)
+		{
+			if (m_status == 0)
+			{
+				StartSave();
+			}
+
+			return true;
+		}
+		else if (wParam == VK_ESCAPE)
+		{
+			Close(IDCANCEL);
+
+			return true;
+		}
+	}
+	else if (uMsg == WM_MEMBER_CHECK_SUCCESS)
+	{
+		m_status = 2;
+
+		//保存成功了
+		Close(IDOK);
+
+		return true;
+	}
+	else if (uMsg == WM_MEMBER_CHECK_FAIL)
+	{
+		m_status = 2;
+
+		//保存失败了
+		this->ShowError(m_errorInfo);
+
+		return true;
+	}
+
+	return false;
+}
+
+LRESULT CShangpinCreateWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+	styleValue &= ~WS_CAPTION;
+	::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+	m_pm.Init(m_hWnd);
+
+	m_pm.AddPreMessageFilter(this);
+
+	CDialogBuilder builder;
+
+	CControlUI* pRoot = builder.Create(_T("shangpin_create_wnd.xml"), (UINT)0, NULL, &m_pm);
+	ASSERT(pRoot && "Failed to parse XML");
+
+	m_pm.AttachDialog(pRoot);
+
+	m_pm.AddNotifier(this);
+
+	Init();
+
+	return 0;
+}
+
+void CShangpinCreateWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("closebtn"))
+		{
+			Close(IDCANCEL);
+			return;
+		}
+		else if (senderName == L"shangpin_create_dlg_save_btn")
+		{
+			StartSave();
+		}
+	}
+	else if (msg.sType == _T("textchanged"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		//这些输入框只允许输入数字
+		if (senderName == L"shangpin_create_dlg_xuhao_edit"
+			|| senderName == L"shangpin_create_dlg_barcode_edit"
+			|| senderName == L"shangpin_create_dlg_plu"
+			|| senderName == L"shangpin_create_dlg_kucun_now")
+		{
+			FilterNumberInput(senderName, false);
+		}
+		//这些输入框只允许输入数字和小数点
+		else if (senderName == L"shangpin_create_dlg_price_edit"
+			|| senderName == L"shangpin_create_dlg_buyingprice_edit"
+			|| senderName == L"shangpin_create_dlg_dabao_money")
+		{
+			FilterNumberInput(senderName, true);
+		}
+	}
+	else if (msg.sType == L"windowinit")
+	{
+		m_pm.SetNextTabControl(false);
+
+		CEditUI* pNameEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("shangpin_create_dlg_name_edit")));
+		pNameEdit->SetFocus();
+	}
+}
+
+void CShangpinCreateWnd::Init()
+{
+	//这里会把所有输入框重置为默认值,所以预填必须放在它后面
+	InitFoodtypeListAndFoodinfo();
+
+	//如果有扫码获取到的商品信息,填到对应的输入框里
+	if (m_has_init_info)
+	{
+		ApplySaomaInfo();
+	}
+}
+
+void CShangpinCreateWnd::SetSaomaInfo(std::string code, std::string name, std::string price, std::string unit)
+{
+	m_init_code = code;
+	m_init_name = name;
+	m_init_price = price;
+	m_init_unit = unit;
+
+	m_has_init_info = true;
+}
+
+void CShangpinCreateWnd::ApplySaomaInfo()
+{
+	CEditUI* pTiaoma = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_barcode_edit"));
+	pTiaoma->SetText(CLewaimaiString::UTF8ToUnicode(m_init_code).c_str());
+
+	CEditUI* pName = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_name_edit"));
+	pName->SetText(CLewaimaiString::UTF8ToUnicode(m_init_name).c_str());
+
+	CEditUI* pPrice = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_price_edit"));
+	pPrice->SetText(CLewaimaiString::UTF8ToUnicode(m_init_price).c_str());
+
+	CEditUI* pDanwei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_unit_edit"));
+	pDanwei->SetText(CLewaimaiString::UTF8ToUnicode(m_init_unit).c_str());
+
+	//条码、名字、价格都拿到了,光标落到单位上,方便继续补剩下的内容
+	pDanwei->SetFocus();
+}
+
+void CShangpinCreateWnd::InitFoodtypeListAndFoodinfo()
+{
+	CComboUI* com_fenlei = static_cast<CComboUI*>(m_pm.FindControl(_T("shangpin_create_dlg_foodtype")));
+	com_fenlei->RemoveAll();
+
+	CSqlite3 sqlite;
+	std::vector<CFoodType> foodtypes = sqlite.GetFoodtypes();
+
+	std::string first_food_name = "";
+	int nTypeNum = 0;
+	for (std::vector<CFoodType>::iterator it = foodtypes.begin(); it != foodtypes.end(); it++)
+	{
+		CListLabelElementUI* elem = new CListLabelElementUI();
+
+		elem->SetText(CLewaimaiString::UTF8ToUnicode(it->name).c_str());
+		com_fenlei->Add(elem);
+
+		if (it == foodtypes.begin())
+		{
+			first_food_name = it->name;
+		}
+
+		nTypeNum++;
+
+		m_foodtype_id_map[it->name] = it->id;
+	}
+
+	com_fenlei->SetInternVisible(true);
+
+	if (nTypeNum > 0)
+	{
+		com_fenlei->SelectItem(0, false);
+	}
+
+	com_fenlei->SetText(CLewaimaiString::UTF8ToUnicode(first_food_name).c_str());
+
+	//初始化其他控件的默认值
+
+	//商品名字
+	CEditUI* pName = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_name_edit"));
+	pName->SetText(L"");
+
+	//商品序号
+	CEditUI* pXuhao = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_xuhao_edit"));
+	pXuhao->SetText(L"");
+
+	//商品条码
+	CEditUI* pTiaoma = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_barcode_edit"));
+	pTiaoma->SetText(L"");
+
+	//商品价格
+	CEditUI* pPrice = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_price_edit"));
+	pPrice->SetText(L"");
+
+	//商品单位
+	CEditUI* pDanwei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_unit_edit"));
+	pDanwei->SetText(L"");
+
+	//是否称重
+	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_chengzhong"));
+	pChengzhong->Selected(false, false);
+
+	//plu编码
+	CEditUI* pPlu = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_plu"));
+	pPlu->SetText(L"");
+
+	//库存类型
+	CCheckBoxUI* pKucuntype = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_kucun_open"));
+	pKucuntype->Selected(true, false);
+
+	//当前库存
+	CEditUI* pDangqiankucun = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_kucun_now"));
+	pDangqiankucun->SetText(L"0");
+
+	//商品状态
+	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_status_normal"));
+	pStatus->Selected(true, false);
+
+	//进货价
+	CEditUI* pJinhuojia = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_buyingprice_edit"));
+	pJinhuojia->SetText(L"0");
+
+	//进货价模式
+	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_jinhuojia_normal"));
+	pJinhuomoshi->Selected(true, false);
+
+	//在哪些地方显示
+	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_showplace_shouyinji"));
+	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_showplace_waimai"));
+	CCheckBoxUI* pSaomadiancan = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_showplace_saomadiancan"));
+
+	pShouyinji->Selected(true, false);
+	pWaimai->Selected(true, false);
+	pSaomadiancan->Selected(true, false);
+
+	//是否开启打包费
+	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_is_dabao"));
+	pDabao->Selected(false, false);
+
+	//打包费金额
+	CEditUI* pDaobaofei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_dabao_money"));
+	pDaobaofei->SetText(L"0");
+
+	//商品加工方式
+	CCheckBoxUI* pJiagongfangshi = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_fangan_1"));
+	pJiagongfangshi->Selected(true, false);
+
+	ShowError(L"");
+
+	//滚动条回到顶部
+	CVerticalLayoutUI* layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(L"shangpin_create_dlg_content"));
+
+	SIZE pos;
+	pos.cx = 0;
+	pos.cy = 0;
+	layout->SetScrollPos(pos);
+}
+
+void CShangpinCreateWnd::FilterNumberInput(LPCTSTR ctrl_name, bool allow_dot)
+{
+	CEditUI* pEdit = static_cast<CEditUI*>(m_pm.FindControl(ctrl_name));
+	if (pEdit == NULL)
+	{
+		return;
+	}
+
+	if (pEdit->GetText().IsEmpty())
+	{
+		return;
+	}
+
+	std::wstring ws_Value = pEdit->GetText();
+	std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+	for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+	{
+		unsigned char tmp = strValue.at(nIndex);
+
+		//46是小数点的ASCII码
+		if ((tmp > 57 || tmp < 48) && !(allow_dot && tmp == 46))
+		{
+			//非数字(或不允许小数点)的字符全部截断
+			strValue = strValue.substr(0, nIndex);
+
+			pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+			pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+			break;
+		}
+	}
+}
+
+void CShangpinCreateWnd::ShowError(std::wstring msg)
+{
+	CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(L"shangpin_create_dlg_errinfo"));
+	pErrorInfo->SetText(msg.c_str());
+
+	if (msg == L"")
+	{
+		pErrorInfo->SetVisible(false);
+	}
+	else
+	{
+		pErrorInfo->SetVisible(true);
+	}
+}
+
+void CShangpinCreateWnd::StartSave()
+{
+	if (m_status == 1)
+	{
+		return;
+	}
+
+	//下面在主线程把参数一个个读出来(避免子线程操作UI控件)
+
+	//商品名字
+	CEditUI* pName = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_name_edit"));
+	std::wstring ws_name = pName->GetText();
+	m_name = CLewaimaiString::UnicodeToUTF8(ws_name);
+	if (m_name == "")
+	{
+		ShowError(L"商品名字不能为空");
+		return;
+	}
+
+	//商品序号
+	CEditUI* pXuhao = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_xuhao_edit"));
+	std::wstring ws_xuhao = pXuhao->GetText();
+	m_xuhao = CLewaimaiString::UnicodeToUTF8(ws_xuhao);
+	if (m_xuhao == "")
+	{
+		m_xuhao = "0";
+	}
+
+	//商品分类
+	CComboUI* com_fenlei = static_cast<CComboUI*>(m_pm.FindControl(_T("shangpin_create_dlg_foodtype")));
+	std::wstring ws_type = com_fenlei->GetText();
+	m_fenlei = CLewaimaiString::UnicodeToUTF8(ws_type);
+	if (m_fenlei == "")
+	{
+		ShowError(L"商品分类不能为空,请先创建并选择商品分类");
+		return;
+	}
+
+	//商品条码
+	CEditUI* pTiaoma = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_barcode_edit"));
+	std::wstring ws_tiaoma = pTiaoma->GetText();
+	m_tiaoma = CLewaimaiString::UnicodeToUTF8(ws_tiaoma);
+
+	//商品价格
+	CEditUI* pPrice = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_price_edit"));
+	std::wstring ws_price = pPrice->GetText();
+	m_price = CLewaimaiString::UnicodeToUTF8(ws_price);
+	if (m_price == "")
+	{
+		ShowError(L"商品价格不能为空");
+		return;
+	}
+
+	//商品单位
+	CEditUI* pDanwei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_unit_edit"));
+	std::wstring ws_danwei = pDanwei->GetText();
+	m_danwei = CLewaimaiString::UnicodeToUTF8(ws_danwei);
+
+	//是否称重
+	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_chengzhong"));
+	m_is_chengzhong = pChengzhong->IsSelected();
+
+	//条码秤PLU编码
+	CEditUI* pPlu = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_plu"));
+	std::wstring ws_plu = pPlu->GetText();
+	m_plu = CLewaimaiString::UnicodeToUTF8(ws_plu);
+
+	//库存类型
+	CCheckBoxUI* pKucuntype = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_kucun_open"));
+	if (pKucuntype->IsSelected())
+	{
+		m_kucuntype = 0;
+	}
+	else
+	{
+		m_kucuntype = 1;
+	}
+
+	//当前库存
+	CEditUI* pDangqiankucun = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_kucun_now"));
+	std::wstring ws_dangqiankucun = pDangqiankucun->GetText();
+	m_dangqiankucun = CLewaimaiString::UnicodeToUTF8(ws_dangqiankucun);
+	if (m_dangqiankucun == "")
+	{
+		m_dangqiankucun = "0";
+	}
+
+	//商品状态
+	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_status_normal"));
+	if (pStatus->IsSelected())
+	{
+		m_status_type = 0;
+	}
+	else
+	{
+		m_status_type = 1;
+	}
+
+	//进货价
+	CEditUI* pJinhuojia = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_buyingprice_edit"));
+	std::wstring ws_jinhuojia = pJinhuojia->GetText();
+	m_jinhuojia = CLewaimaiString::UnicodeToUTF8(ws_jinhuojia);
+	if (m_jinhuojia == "")
+	{
+		m_jinhuojia = "0";
+	}
+
+	//进货价模式
+	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_jinhuojia_normal"));
+	if (pJinhuomoshi->IsSelected())
+	{
+		m_jinhuo_type = 0;
+	}
+	else
+	{
+		m_jinhuo_type = 1;
+	}
+
+	//在哪些地方显示
+	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_showplace_shouyinji"));
+	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_showplace_waimai"));
+	CCheckBoxUI* pSaomadiancan = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_showplace_saomadiancan"));
+
+	m_is_shouyinji_show = pShouyinji->IsSelected();
+	m_is_waimai_show = pWaimai->IsSelected();
+	m_is_saomadiancan_show = pSaomadiancan->IsSelected();
+
+	//是否开启打包费
+	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_is_dabao"));
+	m_is_dabao_fei = pDabao->IsSelected();
+
+	//打包费金额
+	CEditUI* pDaobaofei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_create_dlg_dabao_money"));
+	std::wstring ws_dabaofei = pDaobaofei->GetText();
+	m_dabaofei = CLewaimaiString::UnicodeToUTF8(ws_dabaofei);
+	if (m_dabaofei == "")
+	{
+		m_dabaofei = "0";
+	}
+
+	//商品加工方式
+	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_fangan_1"));
+	CCheckBoxUI* pJiagongfangshi_2 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_fangan_2"));
+	CCheckBoxUI* pJiagongfangshi_3 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_create_dlg_fangan_3"));
+
+	if (pJiagongfangshi_1->IsSelected())
+	{
+		m_jiagong_type = 1;
+	}
+	else if (pJiagongfangshi_2->IsSelected())
+	{
+		m_jiagong_type = 2;
+	}
+	else if (pJiagongfangshi_3->IsSelected())
+	{
+		m_jiagong_type = 3;
+	}
+
+	m_status = 1;
+
+	ShowError(L"正在保存商品...");
+
+	std::thread(&CShangpinCreateWnd::HandleSave, this).detach();
+}
+
+void CShangpinCreateWnd::HandleSave()
+{
+	std::map<std::string, std::string> params;
+
+	params["goods_name"] = m_name;
+	params["goods_tag"] = m_xuhao;
+	params["type_lv1_id"] = m_foodtype_id_map[m_fenlei];
+	params["barcode"] = m_tiaoma;
+	params["goods_price"] = m_price;
+	params["unit"] = m_danwei;
+
+	if (m_is_chengzhong)
+	{
+		params["is_weight"] = "1";
+	}
+	else
+	{
+		params["is_weight"] = "0";
+	}
+
+	params["weight_plu_code"] = m_plu;
+	params["weight_food_code"] = "";
+
+	if (m_kucuntype == 0)
+	{
+		params["stock_status"] = "OPEN";
+	}
+	else
+	{
+		params["stock_status"] = "CLOSED";
+	}
+
+	params["stock"] = m_dangqiankucun;
+
+	if (m_status_type == 0)
+	{
+		params["goods_status"] = "NORMAL";
+	}
+	else
+	{
+		params["goods_status"] = "CLOSED";
+	}
+
+	params["buying_price"] = m_jinhuojia;
+	params["cost_mode"] = std::to_string(m_jinhuo_type);
+
+	//在哪些地方显示
+	if (m_is_shouyinji_show)
+	{
+		params["is_shouyinji_show"] = "1";
+	}
+	else
+	{
+		params["is_shouyinji_show"] = "0";
+	}
+
+	if (m_is_waimai_show)
+	{
+		params["is_waimai_show"] = "1";
+	}
+	else
+	{
+		params["is_waimai_show"] = "0";
+	}
+
+	if (m_is_saomadiancan_show)
+	{
+		params["is_tangshi_show"] = "1";
+		params["is_zhengcan_show"] = "1";
+	}
+	else
+	{
+		params["is_tangshi_show"] = "0";
+		params["is_zhengcan_show"] = "0";
+	}
+
+	if (m_is_dabao_fei)
+	{
+		params["is_dabao"] = "1";
+	}
+	else
+	{
+		params["is_dabao"] = "0";
+	}
+
+	params["dabao_money"] = m_dabaofei;
+
+	params["jiagong_type"] = std::to_string(m_jiagong_type);
+
+	params["goods_img"] = "";
+	params["open_autostock"] = "0";
+	params["stock_warning"] = "0";
+
+	std::string response;
+
+	std::string url = "/goods/addgoods";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	if (ret == false)
+	{
+		m_errorInfo = L"请求服务器失败,请检查网络设置!";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_errorInfo = L"服务器错误";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		m_errorInfo = L"服务器错误";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		std::string v_errmsg = document["errmsg"].GetString();
+		m_errorInfo = CLewaimaiString::UTF8ToUnicode(v_errmsg);
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+
+	std::string id = data["id"].GetString();
+
+	//走到这里说明商品保存成功了,接着把商品的数据更新到数据库
+	CFoodHandle::GetInstance()->UpdateOneFood(id);
+
+	PostMessage(WM_MEMBER_CHECK_SUCCESS);
+}
+
+//处理键盘捕捉结果
+//扫码录入只在商品管理页面(CShangpinPageUI)响应,本弹框打开期间不再处理任何扫码输入
+void CShangpinCreateWnd::HandleTextCapture(std::string content)
+{
+}

+ 124 - 0
zhipuzi_pos_windows/wnd/CShangpinCreateWnd.h

@@ -0,0 +1,124 @@
+#pragma once
+
+#include "CMainWnd.h"
+#include "../ui/CModalWnd.h"
+
+class CShangpinCreateWnd : public CModalWnd
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIShangpinCreateWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		m_pm.RemovePreMessageFilter(this);
+	};
+
+	void Init();
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		if (::IsIconic(*this))
+		{
+			bHandled = FALSE;
+		}
+		return (wParam == 0) ? TRUE : FALSE;
+	}
+
+	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
+
+	void StartSave();
+
+	void HandleSave();
+
+	//初始化商品分类信息和商品默认值
+	void InitFoodtypeListAndFoodinfo();
+
+	void ShowError(std::wstring msg);
+
+	//设置扫码获取到的商品信息,在Create之前调用,弹框打开后会自动填入对应的输入框
+	void SetSaomaInfo(std::string code, std::string name, std::string price, std::string unit);
+
+	//处理键盘捕捉结果,本弹框不处理扫码,扫码只由商品管理页面响应
+	void HandleTextCapture(std::string content);
+
+private:
+	//把扫码预填的信息写入对应的输入框
+	void ApplySaomaInfo();
+
+	//把指定编辑框的内容过滤成纯数字(allow_dot为true时允许一个小数点),非数字字符会被截断
+	void FilterNumberInput(LPCTSTR ctrl_name, bool allow_dot = false);
+
+	//扫码预填的商品信息
+	std::string m_init_code;
+	std::string m_init_name;
+	std::string m_init_price;
+	std::string m_init_unit;
+	bool m_has_init_info = false;
+
+public:
+	CPaintManagerUI m_pm;
+
+	std::wstring m_errorInfo;
+
+	//是否正在请求中
+	int m_status = 0; //0 未开始请求 1 请求中 2请求有结果了
+
+private:
+	//商品字段
+	std::string m_name;
+	std::string m_xuhao;
+	std::string m_fenlei;
+	std::string m_tiaoma;
+	std::string m_price;
+	std::string m_danwei;
+	bool m_is_chengzhong;
+	std::string m_plu;
+
+	//0 下单扣减库存 1 无限库存
+	int m_kucuntype;
+	std::string m_dangqiankucun;
+
+	//0正常 1下架
+	int m_status_type;
+	std::string m_jinhuojia;
+
+	//0 当前成本价 1:加权平均
+	int m_jinhuo_type;
+
+	bool m_is_shouyinji_show;
+	bool m_is_waimai_show;
+	bool m_is_saomadiancan_show;
+	bool m_is_dabao_fei;
+	std::string m_dabaofei;
+
+	//加工类型 1 方案1 2:方案2 3:方案3
+	int m_jiagong_type;
+
+	//临时保存商品名字到ID的映射
+	std::map<std::string, std::string> m_foodtype_id_map;
+};

+ 0 - 268
zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.cpp

@@ -1,268 +0,0 @@
-#include "pch.h"
-#include "CShangpinSaomaluruWnd.h"
-
-LRESULT CShangpinSaomaluruWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
-	return 0;
-}
-
-LRESULT CShangpinSaomaluruWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
-	POINT pt;
-	pt.x = GET_X_LPARAM(lParam);
-	pt.y = GET_Y_LPARAM(lParam);
-	::ScreenToClient(*this, &pt);
-
-	RECT rcClient;
-	::GetClientRect(*this, &rcClient);
-
-	RECT rcCaption = m_pm.GetCaptionRect();
-	if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
-		&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
-	{
-		CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
-		if (pControl && _tcscmp(pControl->GetClass(), L"ButtonUI") != 0)
-		{
-			return HTCAPTION;
-		}
-	}
-
-	return HTCLIENT;
-}
-
-LRESULT CShangpinSaomaluruWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
-	SIZE szRoundCorner = m_pm.GetRoundCorner();
-	if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
-	{
-		CDuiRect rcWnd;
-		::GetWindowRect(*this, &rcWnd);
-		rcWnd.Offset(-rcWnd.left, -rcWnd.top);
-		rcWnd.right++;
-		rcWnd.bottom++;
-		HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
-		::SetWindowRgn(*this, hRgn, TRUE);
-		::DeleteObject(hRgn);
-	}
-
-	bHandled = FALSE;
-	return 0;
-}
-
-LRESULT CShangpinSaomaluruWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
-	LRESULT lRes = 0;
-	BOOL bHandled = TRUE;
-	switch (uMsg)
-	{
-	case WM_CREATE:
-		lRes = OnCreate(uMsg, wParam, lParam, bHandled);
-		break;
-	case WM_NCACTIVATE:
-		lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
-		break;
-	case WM_NCCALCSIZE:
-		lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
-		break;
-	case WM_NCPAINT:
-		lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
-		break;
-	case WM_NCHITTEST:
-		lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
-		break;
-	case WM_SIZE:
-		lRes = OnSize(uMsg, wParam, lParam, bHandled);
-		break;
-	default:
-		bHandled = FALSE;
-	}
-	if (bHandled)
-	{
-		return lRes;
-	}
-	if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
-	{
-		return lRes;
-	}
-	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
-}
-
-LRESULT CShangpinSaomaluruWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
-{
-	if (uMsg == WM_KEYDOWN)
-	{
-		if (wParam == VK_RETURN)
-		{
-			return true;
-		}
-		else if (wParam == VK_ESCAPE)
-		{
-			if (m_status != 1)
-			{
-				Close(IDCANCEL);
-			}
-
-			return true;
-		}
-	}
-	else if (uMsg == WM_MEMBER_CHECK_SUCCESS)
-	{
-		m_status = 2;
-
-		//验证成功了
-		Close(IDOK);
-
-		return true;
-	}
-	else if (uMsg == WM_MEMBER_CHECK_FAIL)
-	{
-		m_status = 2;
-
-		//验证失败了
-		CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(_T("errinfo")));
-		pErrorInfo->SetText(m_errorInfo.c_str());
-		pErrorInfo->SetVisible(true);
-
-		return true;
-	}
-
-	return false;
-}
-
-LRESULT CShangpinSaomaluruWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-{
-	LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
-	styleValue &= ~WS_CAPTION;
-	::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
-
-	// 把自己的窗口句柄与窗口绘制管理器挂接在一起
-	m_pm.Init(m_hWnd);
-
-	m_pm.AddPreMessageFilter(this);
-
-	CDialogBuilder builder;
-
-	CControlUI* pRoot = builder.Create(_T("shangpin_saomaluru_wnd.xml"), (UINT)0, NULL, &m_pm);
-	ASSERT(pRoot && "Failed to parse XML");
-
-	// 把这些控件绘制到本窗口上
-	m_pm.AttachDialog(pRoot);
-
-	// 把自己加入到CPaintManagerUI的m_aNotifiers数组中,用于处理Notify函数
-	m_pm.AddNotifier(this);
-
-	Init();
-
-	return 0;
-}
-
-void CShangpinSaomaluruWnd::Notify(TNotifyUI& msg)
-{
-	if (msg.sType == _T("click"))
-	{
-		DuiLib::CDuiString senderName = msg.pSender->GetName();
-
-		if (senderName == _T("closebtn"))
-		{
-			if (m_status != 1)
-			{
-				Close(IDCANCEL);
-			}
-			
-			return;
-		}
-	}
-}
-
-void CShangpinSaomaluruWnd::Init()
-{
-
-}
-
-void CShangpinSaomaluruWnd::SetTitle(std::wstring title)
-{
-	CLabelUI* pLabel = static_cast<CLabelUI*>(m_pm.FindControl(_T("memo_dlg_title")));
-	pLabel->SetText(title.c_str());
-}
-
-void CShangpinSaomaluruWnd::StartYanzheng()
-{
-	if (m_code.length() == 0)
-	{
-		return;
-	}
-
-	//开始处理
-	std::thread(&CShangpinSaomaluruWnd::ConfirmMember, this).detach();
-}
-
-void CShangpinSaomaluruWnd::ConfirmMember()
-{
-	m_status = 1;
-
-	std::map<std::string, std::string> params;
-	params["barcode"] = m_code;
-
-	std::string response;
-	bool ret = CZhipuziHttpClient::GetInstance()->Request("/goods/getinfobythirdbarcode", params, response);
-	if (!ret)
-	{
-		m_errorInfo = _T("网络请求出错");
-		PostMessage(WM_MEMBER_CHECK_FAIL);
-
-		return;
-	}
-
-	rapidjson::Document document;
-	document.Parse(response.c_str());
-
-	if (document.HasParseError())
-	{
-		m_errorInfo = _T("服务器返回数据格式错误");
-		PostMessage(WM_MEMBER_CHECK_FAIL);
-
-		return;
-	}
-	else
-	{
-		if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
-		{
-			m_errorInfo = _T("服务器返回数据格式错误");
-			PostMessage(WM_MEMBER_CHECK_FAIL);
-
-			return;
-		}
-
-		rapidjson::Value& v_errcode = document["errcode"];
-		int errcode = v_errcode.GetInt();
-		if (errcode != 0)
-		{
-			std::string errmsg = CLewaimaiString::UnicodeToUTF8(L"扫码失败:") + std::string(document["errmsg"].GetString());
-			m_errorInfo = CLewaimaiString::UTF8ToUnicode(errmsg);
-			PostMessage(WM_MEMBER_CHECK_FAIL);
-
-			return;
-		}
-
-		rapidjson::Value& data = document["data"];
-
-		m_code = data["code"].GetString();
-		m_name = data["name"].GetString();
-		m_price = data["price"].GetString();
-		m_unit = data["unit"].GetString();
-		m_des = data["des"].GetString();
-
-		PostMessage(WM_MEMBER_CHECK_SUCCESS);
-	}
-}
-
-//处理键盘捕捉结果
-void CShangpinSaomaluruWnd::HandleTextCapture(std::string content)
-{
-	m_code = content;
-
-	if (m_status == 0)
-	{
-		StartYanzheng();
-	}
-}

+ 0 - 81
zhipuzi_pos_windows/wnd/CShangpinSaomaluruWnd.h

@@ -1,81 +0,0 @@
-#pragma once
-
-#include "pch.h"
-#include "CMainWnd.h"
-#include "../ui/CModalWnd.h"
-
-class CShangpinSaomaluruWnd : public CModalWnd
-{
-public:
-	LPCTSTR GetWindowClassName() const
-	{
-		return _T("UIMemoWndFrame");
-	};
-
-	UINT GetClassStyle() const
-	{
-		return UI_CLASSSTYLE_DIALOG;
-	};
-
-	void OnFinalMessage(HWND /*hWnd*/)
-	{
-		//WindowImplBase::OnFinalMessage(hWnd);
-		m_pm.RemovePreMessageFilter(this);
-
-		//delete this;
-	};
-
-	void Init();
-
-	void SetTitle(std::wstring title);
-
-	void Notify(TNotifyUI& msg);
-
-	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-
-	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		if (::IsIconic(*this))
-		{
-			bHandled = FALSE;
-		}
-		return (wParam == 0) ? TRUE : FALSE;
-	}
-
-	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-	{
-		return 0;
-	}
-
-	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-
-	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-
-	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
-
-	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
-
-	void StartYanzheng();
-
-	void ConfirmMember();
-
-	//处理键盘捕捉结果
-	void HandleTextCapture(std::string content);
-
-public:
-	CPaintManagerUI m_pm;
-
-	std::string m_code;
-
-	std::wstring m_errorInfo;
-
-	//是否正在请求中
-	int m_status = 0; //0 未开始请求 1 请求中 2请求有结果了
-
-	std::string m_name;
-	std::string m_price;
-	std::string m_unit;
-	std::string m_des;
-};

+ 816 - 0
zhipuzi_pos_windows/wnd/CShangpinUpdateWnd.cpp

@@ -0,0 +1,816 @@
+#include "pch.h"
+#include "CShangpinUpdateWnd.h"
+
+#include "../tool/CSqlite3.h"
+#include "../tool/CFoodHandle.h"
+
+LRESULT CShangpinUpdateWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	return 0;
+}
+
+LRESULT CShangpinUpdateWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	POINT pt;
+	pt.x = GET_X_LPARAM(lParam);
+	pt.y = GET_Y_LPARAM(lParam);
+	::ScreenToClient(*this, &pt);
+
+	RECT rcClient;
+	::GetClientRect(*this, &rcClient);
+
+	RECT rcCaption = m_pm.GetCaptionRect();
+	if (pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \
+		&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom)
+	{
+		CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt));
+		if (pControl && _tcscmp(pControl->GetClass(), L"ButtonUI") != 0)
+		{
+			return HTCAPTION;
+		}
+	}
+
+	return HTCLIENT;
+}
+
+LRESULT CShangpinUpdateWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	SIZE szRoundCorner = m_pm.GetRoundCorner();
+	if (!::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0))
+	{
+		CDuiRect rcWnd;
+		::GetWindowRect(*this, &rcWnd);
+		rcWnd.Offset(-rcWnd.left, -rcWnd.top);
+		rcWnd.right++;
+		rcWnd.bottom++;
+		HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy);
+		::SetWindowRgn(*this, hRgn, TRUE);
+		::DeleteObject(hRgn);
+	}
+
+	bHandled = FALSE;
+	return 0;
+}
+
+LRESULT CShangpinUpdateWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+	LRESULT lRes = 0;
+	BOOL bHandled = TRUE;
+	switch (uMsg)
+	{
+	case WM_CREATE:
+		lRes = OnCreate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCACTIVATE:
+		lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCCALCSIZE:
+		lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCPAINT:
+		lRes = OnNcPaint(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_NCHITTEST:
+		lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_SIZE:
+		lRes = OnSize(uMsg, wParam, lParam, bHandled);
+		break;
+	default:
+		bHandled = FALSE;
+	}
+	if (bHandled)
+	{
+		return lRes;
+	}
+	if (m_pm.MessageHandler(uMsg, wParam, lParam, lRes))
+	{
+		return lRes;
+	}
+	return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
+}
+
+LRESULT CShangpinUpdateWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
+{
+	if (uMsg == WM_KEYDOWN)
+	{
+		if (wParam == VK_RETURN)
+		{
+			if (m_status == 0)
+			{
+				StartSave();
+			}
+
+			return true;
+		}
+		else if (wParam == VK_ESCAPE)
+		{
+			Close(IDCANCEL);
+
+			return true;
+		}
+	}
+	else if (uMsg == WM_MEMBER_CHECK_SUCCESS)
+	{
+		m_status = 2;
+
+		//保存(或删除)成功了,关闭弹框,外面会刷新商品列表
+		Close(IDOK);
+
+		return true;
+	}
+	else if (uMsg == WM_MEMBER_CHECK_FAIL)
+	{
+		m_status = 2;
+
+		this->ShowError(m_errorInfo);
+
+		return true;
+	}
+
+	return false;
+}
+
+LRESULT CShangpinUpdateWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	LONG styleValue = ::GetWindowLong(*this, GWL_STYLE);
+	styleValue &= ~WS_CAPTION;
+	::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
+
+	m_pm.Init(m_hWnd);
+
+	m_pm.AddPreMessageFilter(this);
+
+	CDialogBuilder builder;
+
+	CControlUI* pRoot = builder.Create(_T("shangpin_update_wnd.xml"), (UINT)0, NULL, &m_pm);
+	ASSERT(pRoot && "Failed to parse XML");
+
+	m_pm.AttachDialog(pRoot);
+
+	m_pm.AddNotifier(this);
+
+	Init();
+
+	return 0;
+}
+
+void CShangpinUpdateWnd::Notify(TNotifyUI& msg)
+{
+	if (msg.sType == _T("click"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		if (senderName == _T("closebtn"))
+		{
+			if (m_status != 1)
+			{
+				Close(IDCANCEL);
+			}
+
+			return;
+		}
+		else if (senderName == L"shangpin_update_dlg_save_btn")
+		{
+			StartSave();
+		}
+		else if (senderName == L"shangpin_update_dlg_delete_btn")
+		{
+			StartDelete();
+		}
+	}
+	else if (msg.sType == _T("textchanged"))
+	{
+		DuiLib::CDuiString senderName = msg.pSender->GetName();
+
+		//这些输入框只允许输入数字
+		if (senderName == L"shangpin_update_dlg_xuhao_edit"
+			|| senderName == L"shangpin_update_dlg_barcode_edit"
+			|| senderName == L"shangpin_update_dlg_plu"
+			|| senderName == L"shangpin_update_dlg_kucun_now")
+		{
+			FilterNumberInput(senderName, false);
+		}
+		//这些输入框只允许输入数字和小数点
+		else if (senderName == L"shangpin_update_dlg_price_edit"
+			|| senderName == L"shangpin_update_dlg_buyingprice_edit"
+			|| senderName == L"shangpin_update_dlg_dabao_money")
+		{
+			FilterNumberInput(senderName, true);
+		}
+	}
+	else if (msg.sType == L"windowinit")
+	{
+		m_pm.SetNextTabControl(false);
+
+		CEditUI* pNameEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("shangpin_update_dlg_name_edit")));
+		pNameEdit->SetFocus();
+	}
+}
+
+void CShangpinUpdateWnd::Init()
+{
+	//先加载分类并选中当前商品的分类,再把商品信息回填到各个控件
+	InitFoodtypeList();
+
+	FillFoodinfo();
+}
+
+void CShangpinUpdateWnd::InitFoodtypeList()
+{
+	CComboUI* com_fenlei = static_cast<CComboUI*>(m_pm.FindControl(_T("shangpin_update_dlg_foodtype")));
+	com_fenlei->RemoveAll();
+
+	CSqlite3 sqlite;
+	std::vector<CFoodType> foodtypes = sqlite.GetFoodtypes();
+
+	int nSelectType = -1;
+	int nCurNum = 0;
+	std::string select_foodtype_name;
+
+	for (std::vector<CFoodType>::iterator it = foodtypes.begin(); it != foodtypes.end(); it++)
+	{
+		CListLabelElementUI* elem = new CListLabelElementUI();
+
+		elem->SetText(CLewaimaiString::UTF8ToUnicode(it->name).c_str());
+		com_fenlei->Add(elem);
+
+		if (it->id == m_foodinfo.type_id)
+		{
+			nSelectType = nCurNum;
+			select_foodtype_name = it->name;
+		}
+
+		nCurNum++;
+
+		m_foodtype_id_map[it->name] = it->id;
+	}
+
+	com_fenlei->SetInternVisible(true);
+
+	if (nSelectType != -1)
+	{
+		com_fenlei->SelectItem(nSelectType, false);
+	}
+
+	com_fenlei->SetText(CLewaimaiString::UTF8ToUnicode(select_foodtype_name).c_str());
+}
+
+void CShangpinUpdateWnd::FillFoodinfo()
+{
+	//商品名字
+	CEditUI* pName = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_name_edit"));
+	pName->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.name).c_str());
+
+	//商品序号
+	CEditUI* pXuhao = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_xuhao_edit"));
+	pXuhao->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.tag).c_str());
+
+	//商品条码
+	CEditUI* pTiaoma = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_barcode_edit"));
+	pTiaoma->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.barcode).c_str());
+
+	//商品价格
+	CEditUI* pPrice = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_price_edit"));
+	pPrice->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.price).c_str());
+
+	//商品单位
+	CEditUI* pDanwei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_unit_edit"));
+	pDanwei->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.unit).c_str());
+
+	//是否称重
+	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_chengzhong"));
+	pChengzhong->Selected(m_foodinfo.is_weight == "1", false);
+
+	//plu编码
+	CEditUI* pPlu = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_plu"));
+	pPlu->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.weight_plu_code).c_str());
+
+	//库存类型
+	CCheckBoxUI* pKucuntypeOpen = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_kucun_open"));
+	CCheckBoxUI* pKucuntypeWuxian = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_kucun_wuxian"));
+	if (m_foodinfo.stockvalid == "1")
+	{
+		pKucuntypeOpen->Selected(true, false);
+		pKucuntypeWuxian->Selected(false, false);
+	}
+	else
+	{
+		pKucuntypeOpen->Selected(false, false);
+		pKucuntypeWuxian->Selected(true, false);
+	}
+
+	//当前库存
+	CEditUI* pDangqiankucun = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_kucun_now"));
+	pDangqiankucun->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.stock).c_str());
+
+	//商品状态
+	CCheckBoxUI* pStatusNormal = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_status_normal"));
+	CCheckBoxUI* pStatusXiajia = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_status_xiajia"));
+	if (m_foodinfo.status == "NORMAL")
+	{
+		pStatusNormal->Selected(true, false);
+		pStatusXiajia->Selected(false, false);
+	}
+	else
+	{
+		pStatusNormal->Selected(false, false);
+		pStatusXiajia->Selected(true, false);
+	}
+
+	//进货价
+	CEditUI* pJinhuojia = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_buyingprice_edit"));
+	pJinhuojia->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.buying_price).c_str());
+
+	//进货价模式
+	CCheckBoxUI* pJinhuomoshiNormal = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_jinhuojia_normal"));
+	CCheckBoxUI* pJinhuomoshiJiaquan = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_jinhuojia_jiaquan"));
+	if (m_foodinfo.cost_mode == "0")
+	{
+		pJinhuomoshiNormal->Selected(true, false);
+		pJinhuomoshiJiaquan->Selected(false, false);
+	}
+	else
+	{
+		pJinhuomoshiNormal->Selected(false, false);
+		pJinhuomoshiJiaquan->Selected(true, false);
+	}
+
+	//在哪些地方显示
+	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_showplace_shouyinji"));
+	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_showplace_waimai"));
+	CCheckBoxUI* pSaomadiancan = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_showplace_saomadiancan"));
+
+	pShouyinji->Selected(m_foodinfo.is_shouyinji_show == "1", false);
+	pWaimai->Selected(m_foodinfo.is_waimai_show == "1", false);
+	pSaomadiancan->Selected(m_foodinfo.is_tangshi_show == "1", false);
+
+	//是否开启打包费
+	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_is_dabao"));
+	pDabao->Selected(m_foodinfo.is_dabao == "1", false);
+
+	//打包费金额
+	CEditUI* pDaobaofei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_dabao_money"));
+	pDaobaofei->SetText(CLewaimaiString::UTF8ToUnicode(m_foodinfo.dabao_money).c_str());
+
+	//商品加工方式
+	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_fangan_1"));
+	CCheckBoxUI* pJiagongfangshi_2 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_fangan_2"));
+	CCheckBoxUI* pJiagongfangshi_3 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_fangan_3"));
+
+	if (m_foodinfo.jiagong_type == "1")
+	{
+		pJiagongfangshi_1->Selected(true, false);
+	}
+	else if (m_foodinfo.jiagong_type == "2")
+	{
+		pJiagongfangshi_2->Selected(true, false);
+	}
+	else if (m_foodinfo.jiagong_type == "3")
+	{
+		pJiagongfangshi_3->Selected(true, false);
+	}
+	else
+	{
+		pJiagongfangshi_1->Selected(true, false);
+	}
+
+	ShowError(L"");
+
+	//滚动条回到顶部
+	CVerticalLayoutUI* layout = static_cast<CVerticalLayoutUI*>(m_pm.FindControl(L"shangpin_update_dlg_content"));
+
+	SIZE pos;
+	pos.cx = 0;
+	pos.cy = 0;
+	layout->SetScrollPos(pos);
+}
+
+void CShangpinUpdateWnd::ShowError(std::wstring msg)
+{
+	CLabelUI* pErrorInfo = static_cast<CLabelUI*>(m_pm.FindControl(L"shangpin_update_dlg_errinfo"));
+	pErrorInfo->SetText(msg.c_str());
+
+	if (msg == L"")
+	{
+		pErrorInfo->SetVisible(false);
+	}
+	else
+	{
+		pErrorInfo->SetVisible(true);
+	}
+}
+
+void CShangpinUpdateWnd::FilterNumberInput(LPCTSTR ctrl_name, bool allow_dot)
+{
+	CEditUI* pEdit = static_cast<CEditUI*>(m_pm.FindControl(ctrl_name));
+	if (pEdit == NULL)
+	{
+		return;
+	}
+
+	if (pEdit->GetText().IsEmpty())
+	{
+		return;
+	}
+
+	std::wstring ws_Value = pEdit->GetText();
+	std::string strValue = CLewaimaiString::UnicodeToUTF8(ws_Value);
+
+	for (size_t nIndex = 0; nIndex < strValue.length(); nIndex++)
+	{
+		unsigned char tmp = strValue.at(nIndex);
+
+		//46是小数点的ASCII码
+		if ((tmp > 57 || tmp < 48) && !(allow_dot && tmp == 46))
+		{
+			//非数字(或不允许小数点)的字符全部截断
+			strValue = strValue.substr(0, nIndex);
+
+			pEdit->SetText(CLewaimaiString::UTF8ToUnicode(strValue).c_str());
+			pEdit->SetSel(strValue.length(), strValue.length());//重设给光标设置位置
+
+			break;
+		}
+	}
+}
+
+void CShangpinUpdateWnd::StartSave()
+{
+	if (m_status == 1)
+	{
+		return;
+	}
+
+	//下面在主线程把参数一个个读出来(避免子线程操作UI控件)
+
+	//商品名字
+	CEditUI* pName = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_name_edit"));
+	std::wstring ws_name = pName->GetText();
+	m_name = CLewaimaiString::UnicodeToUTF8(ws_name);
+	if (m_name == "")
+	{
+		ShowError(L"商品名字不能为空");
+		return;
+	}
+
+	//商品序号
+	CEditUI* pXuhao = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_xuhao_edit"));
+	std::wstring ws_xuhao = pXuhao->GetText();
+	m_xuhao = CLewaimaiString::UnicodeToUTF8(ws_xuhao);
+	if (m_xuhao == "")
+	{
+		m_xuhao = "0";
+	}
+
+	//商品分类
+	CComboUI* com_fenlei = static_cast<CComboUI*>(m_pm.FindControl(_T("shangpin_update_dlg_foodtype")));
+	std::wstring ws_type = com_fenlei->GetText();
+	m_fenlei = CLewaimaiString::UnicodeToUTF8(ws_type);
+	if (m_fenlei == "")
+	{
+		ShowError(L"商品分类不能为空,请先创建并选择商品分类");
+		return;
+	}
+
+	//商品条码
+	CEditUI* pTiaoma = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_barcode_edit"));
+	std::wstring ws_tiaoma = pTiaoma->GetText();
+	m_tiaoma = CLewaimaiString::UnicodeToUTF8(ws_tiaoma);
+
+	//商品价格
+	CEditUI* pPrice = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_price_edit"));
+	std::wstring ws_price = pPrice->GetText();
+	m_price = CLewaimaiString::UnicodeToUTF8(ws_price);
+	if (m_price == "")
+	{
+		ShowError(L"商品价格不能为空");
+		return;
+	}
+
+	//商品单位
+	CEditUI* pDanwei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_unit_edit"));
+	std::wstring ws_danwei = pDanwei->GetText();
+	m_danwei = CLewaimaiString::UnicodeToUTF8(ws_danwei);
+
+	//是否称重
+	CCheckBoxUI* pChengzhong = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_chengzhong"));
+	m_is_chengzhong = pChengzhong->IsSelected();
+
+	//plu编码
+	CEditUI* pPlu = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_plu"));
+	std::wstring ws_plu = pPlu->GetText();
+	m_plu = CLewaimaiString::UnicodeToUTF8(ws_plu);
+
+	//库存类型
+	CCheckBoxUI* pKucuntype = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_kucun_open"));
+	if (pKucuntype->IsSelected())
+	{
+		m_kucuntype = 0;
+	}
+	else
+	{
+		m_kucuntype = 1;
+	}
+
+	//当前库存
+	CEditUI* pDangqiankucun = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_kucun_now"));
+	std::wstring ws_dangqiankucun = pDangqiankucun->GetText();
+	m_dangqiankucun = CLewaimaiString::UnicodeToUTF8(ws_dangqiankucun);
+	if (m_dangqiankucun == "")
+	{
+		m_dangqiankucun = "0";
+	}
+
+	//商品状态
+	CCheckBoxUI* pStatus = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_status_normal"));
+	if (pStatus->IsSelected())
+	{
+		m_status_type = 0;
+	}
+	else
+	{
+		m_status_type = 1;
+	}
+
+	//进货价
+	CEditUI* pJinhuojia = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_buyingprice_edit"));
+	std::wstring ws_jinhuojia = pJinhuojia->GetText();
+	m_jinhuojia = CLewaimaiString::UnicodeToUTF8(ws_jinhuojia);
+	if (m_jinhuojia == "")
+	{
+		m_jinhuojia = "0";
+	}
+
+	//进货价模式
+	CCheckBoxUI* pJinhuomoshi = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_jinhuojia_normal"));
+	if (pJinhuomoshi->IsSelected())
+	{
+		m_jinhuo_type = 0;
+	}
+	else
+	{
+		m_jinhuo_type = 1;
+	}
+
+	//在哪些地方显示
+	CCheckBoxUI* pShouyinji = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_showplace_shouyinji"));
+	CCheckBoxUI* pWaimai = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_showplace_waimai"));
+	CCheckBoxUI* pSaomadiancan = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_showplace_saomadiancan"));
+
+	m_is_shouyinji_show = pShouyinji->IsSelected();
+	m_is_waimai_show = pWaimai->IsSelected();
+	m_is_saomadiancan_show = pSaomadiancan->IsSelected();
+
+	//是否开启打包费
+	CCheckBoxUI* pDabao = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_is_dabao"));
+	m_is_dabao_fei = pDabao->IsSelected();
+
+	//打包费金额
+	CEditUI* pDaobaofei = static_cast<CEditUI*>(m_pm.FindControl(L"shangpin_update_dlg_dabao_money"));
+	std::wstring ws_dabaofei = pDaobaofei->GetText();
+	m_dabaofei = CLewaimaiString::UnicodeToUTF8(ws_dabaofei);
+	if (m_dabaofei == "")
+	{
+		m_dabaofei = "0";
+	}
+
+	//商品加工方式
+	CCheckBoxUI* pJiagongfangshi_1 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_fangan_1"));
+	CCheckBoxUI* pJiagongfangshi_2 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_fangan_2"));
+	CCheckBoxUI* pJiagongfangshi_3 = static_cast<CCheckBoxUI*>(m_pm.FindControl(L"shangpin_update_dlg_fangan_3"));
+
+	if (pJiagongfangshi_1->IsSelected())
+	{
+		m_jiagong_type = 1;
+	}
+	else if (pJiagongfangshi_2->IsSelected())
+	{
+		m_jiagong_type = 2;
+	}
+	else if (pJiagongfangshi_3->IsSelected())
+	{
+		m_jiagong_type = 3;
+	}
+
+	m_status = 1;
+
+	ShowError(L"正在保存商品...");
+
+	std::thread(&CShangpinUpdateWnd::HandleSave, this).detach();
+}
+
+void CShangpinUpdateWnd::HandleSave()
+{
+	std::map<std::string, std::string> params;
+
+	params["goods_id"] = m_foodinfo.id;
+	params["goods_name"] = m_name;
+	params["goods_tag"] = m_xuhao;
+	params["type_lv1_id"] = m_foodtype_id_map[m_fenlei];
+	params["barcode"] = m_tiaoma;
+	params["goods_price"] = m_price;
+	params["unit"] = m_danwei;
+
+	if (m_is_chengzhong)
+	{
+		params["is_weight"] = "1";
+	}
+	else
+	{
+		params["is_weight"] = "0";
+	}
+
+	params["weight_plu_code"] = m_plu;
+	params["weight_food_code"] = "";
+
+	if (m_kucuntype == 0)
+	{
+		params["stock_status"] = "OPEN";
+	}
+	else
+	{
+		params["stock_status"] = "CLOSED";
+	}
+
+	params["stock"] = m_dangqiankucun;
+
+	if (m_status_type == 0)
+	{
+		params["goods_status"] = "NORMAL";
+	}
+	else
+	{
+		params["goods_status"] = "CLOSED";
+	}
+
+	params["buying_price"] = m_jinhuojia;
+	params["cost_mode"] = std::to_string(m_jinhuo_type);
+
+	//在哪些地方显示
+	if (m_is_shouyinji_show)
+	{
+		params["is_shouyinji_show"] = "1";
+	}
+	else
+	{
+		params["is_shouyinji_show"] = "0";
+	}
+
+	if (m_is_waimai_show)
+	{
+		params["is_waimai_show"] = "1";
+	}
+	else
+	{
+		params["is_waimai_show"] = "0";
+	}
+
+	if (m_is_saomadiancan_show)
+	{
+		params["is_tangshi_show"] = "1";
+		params["is_zhengcan_show"] = "1";
+	}
+	else
+	{
+		params["is_tangshi_show"] = "0";
+		params["is_zhengcan_show"] = "0";
+	}
+
+	if (m_is_dabao_fei)
+	{
+		params["is_dabao"] = "1";
+	}
+	else
+	{
+		params["is_dabao"] = "0";
+	}
+
+	params["dabao_money"] = m_dabaofei;
+
+	params["jiagong_type"] = std::to_string(m_jiagong_type);
+
+	//商品图片沿用原来的,避免被清空
+	params["goods_img"] = m_foodinfo.goods_img;
+	params["goods_thumb_img"] = m_foodinfo.goods_img;
+
+	params["open_autostock"] = "0";
+	params["stock_warning"] = "0";
+
+	std::string response;
+
+	std::string url = "/goods/updategoods";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	if (ret == false)
+	{
+		m_errorInfo = L"请求服务器失败,请检查网络设置!";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_errorInfo = L"服务器错误";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		m_errorInfo = L"服务器错误";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		std::string v_errmsg = document["errmsg"].GetString();
+		m_errorInfo = CLewaimaiString::UTF8ToUnicode(v_errmsg);
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Value& data = document["data"];
+
+	std::string id = data["goods_id"].GetString();
+
+	//走到这里说明商品保存成功了,接着把商品的数据更新到数据库
+	CFoodHandle::GetInstance()->UpdateOneFood(id);
+
+	PostMessage(WM_MEMBER_CHECK_SUCCESS);
+}
+
+void CShangpinUpdateWnd::StartDelete()
+{
+	if (m_status == 1)
+	{
+		return;
+	}
+
+	m_status = 1;
+
+	ShowError(L"正在删除商品...");
+
+	std::thread(&CShangpinUpdateWnd::HandleDelete, this).detach();
+}
+
+void CShangpinUpdateWnd::HandleDelete()
+{
+	std::map<std::string, std::string> params;
+	params["goods_id"] = m_foodinfo.id;
+
+	std::string response;
+
+	std::string url = "/goods/deletegoods";
+	bool ret = CZhipuziHttpClient::GetInstance()->Request(url.c_str(), params, response);
+
+	if (ret == false)
+	{
+		m_errorInfo = L"请求服务器失败,请检查网络设置!";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Document document;
+	document.Parse(response.c_str());
+
+	if (document.HasParseError())
+	{
+		m_errorInfo = L"服务器错误";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	if (!document.HasMember("errcode") || !document.HasMember("errmsg"))
+	{
+		m_errorInfo = L"服务器错误";
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	rapidjson::Value& v_errcode = document["errcode"];
+	int errcode = v_errcode.GetInt();
+	if (errcode != 0)
+	{
+		std::string v_errmsg = document["errmsg"].GetString();
+		m_errorInfo = CLewaimaiString::UTF8ToUnicode(v_errmsg);
+		PostMessage(WM_MEMBER_CHECK_FAIL);
+		return;
+	}
+
+	//本地数据库删除这个商品
+	CFoodHandle::GetInstance()->DeleteOneFood(m_foodinfo.id);
+
+	PostMessage(WM_MEMBER_CHECK_SUCCESS);
+}
+
+//处理键盘捕捉结果,本弹框不处理扫码
+void CShangpinUpdateWnd::HandleTextCapture(std::string content)
+{
+}

+ 131 - 0
zhipuzi_pos_windows/wnd/CShangpinUpdateWnd.h

@@ -0,0 +1,131 @@
+#pragma once
+
+#include "CMainWnd.h"
+#include "../ui/CModalWnd.h"
+
+#include "../zhipuzi/CFood.h"
+#include "../zhipuzi/CFoodtype.h"
+
+//修改商品的模态弹框,字段和新建商品弹框保持一致(无条码秤商品编码)
+class CShangpinUpdateWnd : public CModalWnd
+{
+public:
+	LPCTSTR GetWindowClassName() const
+	{
+		return _T("UIShangpinUpdateWndFrame");
+	};
+
+	UINT GetClassStyle() const
+	{
+		return UI_CLASSSTYLE_DIALOG;
+	};
+
+	void OnFinalMessage(HWND /*hWnd*/)
+	{
+		m_pm.RemovePreMessageFilter(this);
+	};
+
+	void Init();
+
+	void Notify(TNotifyUI& msg);
+
+	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		if (::IsIconic(*this))
+		{
+			bHandled = FALSE;
+		}
+		return (wParam == 0) ? TRUE : FALSE;
+	}
+
+	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+	{
+		return 0;
+	}
+
+	LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+	LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled);
+
+	//在Create之前调用,传入要修改的商品
+	void SetFoodinfo(CFood foodinfo)
+	{
+		m_foodinfo = foodinfo;
+	}
+
+	void StartSave();
+
+	void HandleSave();
+
+	void StartDelete();
+
+	void HandleDelete();
+
+	//处理键盘捕捉结果,本弹框不处理扫码
+	void HandleTextCapture(std::string content);
+
+private:
+	//加载商品分类列表,并选中当前商品所属的分类
+	void InitFoodtypeList();
+
+	//把商品已有的信息回填到各个控件
+	void FillFoodinfo();
+
+	void ShowError(std::wstring msg);
+
+	//把指定编辑框的内容过滤成纯数字(allow_dot为true时允许一个小数点),非数字字符会被截断
+	void FilterNumberInput(LPCTSTR ctrl_name, bool allow_dot = false);
+
+public:
+	CPaintManagerUI m_pm;
+
+	std::wstring m_errorInfo;
+
+	//是否正在请求中
+	int m_status = 0; //0 未开始请求 1 请求中 2请求有结果了
+
+private:
+	//当前正在修改的商品
+	CFood m_foodinfo;
+
+	//商品字段
+	std::string m_name;
+	std::string m_xuhao;
+	std::string m_fenlei;
+	std::string m_tiaoma;
+	std::string m_price;
+	std::string m_danwei;
+	bool m_is_chengzhong;
+	std::string m_plu;
+
+	//0 下单扣减库存 1 无限库存
+	int m_kucuntype;
+	std::string m_dangqiankucun;
+
+	//0正常 1下架
+	int m_status_type;
+	std::string m_jinhuojia;
+
+	//0 当前成本价 1:加权平均
+	int m_jinhuo_type;
+
+	bool m_is_shouyinji_show;
+	bool m_is_waimai_show;
+	bool m_is_saomadiancan_show;
+	bool m_is_dabao_fei;
+	std::string m_dabaofei;
+
+	//加工类型 1 方案1 2:方案2 3:方案3
+	int m_jiagong_type;
+
+	//临时保存商品名字到ID的映射
+	std::map<std::string, std::string> m_foodtype_id_map;
+};

+ 4 - 8
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj

@@ -249,10 +249,11 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="ai\YoloClassName.h" />
     <ClInclude Include="ai\YoloFeatureManager.h" />
     <ClInclude Include="control\CFoodXuexiImageItemUI.h" />
-    <ClInclude Include="page\CShangpinPiliangluruPageUI.h" />
     <ClInclude Include="page\CYubaozhuangbiaoqianPageUI.h" />
     <ClInclude Include="page\CAIxuexiPageUI.h" />
     <ClInclude Include="ui\CTouchWindowBase.h" />
+    <ClInclude Include="wnd\CShangpinCreateWnd.h" />
+    <ClInclude Include="wnd\CShangpinUpdateWnd.h" />
     <ClInclude Include="worker\CDiandanAIShibieWorker.h" />
     <ClInclude Include="tool\CVideoCapture.h" />
     <ClInclude Include="sqlite3\sqlite-vec.h" />
@@ -284,11 +285,8 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClInclude Include="wnd\CZhengcanKaitaiWnd.h" />
     <ClInclude Include="wnd\CFupingWnd.h" />
     <ClInclude Include="tool\CShuangpingTool.h" />
-    <ClInclude Include="wnd\CShangpinSaomaluruWnd.h" />
     <ClInclude Include="wnd\CShangpinNewTypeWnd.h" />
-    <ClInclude Include="page\CShangpinUpdatePageUI.h" />
     <ClInclude Include="tool\CFoodHandle.h" />
-    <ClInclude Include="page\CShangpinCreatePageUI.h" />
     <ClInclude Include="page\CSaomashouyinPageUI.h" />
     <ClInclude Include="page\CCaigouPageUI.h" />
     <ClInclude Include="page\CKucunPageUI.h" />
@@ -380,7 +378,6 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClCompile Include="ai\SQLiteVecManager.cpp" />
     <ClCompile Include="ai\YoloFeatureManager.cpp" />
     <ClCompile Include="control\CFoodXuexiImageItemUI.cpp" />
-    <ClCompile Include="page\CShangpinPiliangluruPageUI.cpp" />
     <ClCompile Include="page\CYubaozhuangbiaoqianPageUI.cpp" />
     <ClCompile Include="sqlite3\shell.c">
       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
@@ -388,6 +385,8 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     </ClCompile>
     <ClCompile Include="page\CAIxuexiPageUI.cpp" />
     <ClCompile Include="ui\CTouchWindowBase.cpp" />
+    <ClCompile Include="wnd\CShangpinCreateWnd.cpp" />
+    <ClCompile Include="wnd\CShangpinUpdateWnd.cpp" />
     <ClCompile Include="worker\CDiandanAIShibieWorker.cpp" />
     <ClCompile Include="tool\CVideoCapture.cpp" />
     <ClCompile Include="sqlite3\sqlite-vec.c">
@@ -424,11 +423,8 @@ copy $(ProjectDir)conf\ $(SolutionDir)bin\$(Platform)\$(Configuration)\conf\</Co
     <ClCompile Include="wnd\CZhengcanKaitaiWnd.cpp" />
     <ClCompile Include="wnd\CFupingWnd.cpp" />
     <ClCompile Include="tool\CShuangpingTool.cpp" />
-    <ClCompile Include="wnd\CShangpinSaomaluruWnd.cpp" />
     <ClCompile Include="wnd\CShangpinNewTypeWnd.cpp" />
-    <ClCompile Include="page\CShangpinUpdatePageUI.cpp" />
     <ClCompile Include="tool\CFoodHandle.cpp" />
-    <ClCompile Include="page\CShangpinCreatePageUI.cpp" />
     <ClCompile Include="page\CSaomashouyinPageUI.cpp" />
     <ClCompile Include="page\CCaigouPageUI.cpp" />
     <ClCompile Include="page\CKucunPageUI.cpp" />

+ 6 - 18
zhipuzi_pos_windows/zhipuzi_pos_windows.vcxproj.filters

@@ -270,19 +270,16 @@
     <ClInclude Include="zhipuzi\CHuiyuanchognzhiOrder.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="page\CShangpinCreatePageUI.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
     <ClInclude Include="tool\CFoodHandle.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="page\CShangpinUpdatePageUI.h">
+    <ClInclude Include="wnd\CShangpinNewTypeWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="wnd\CShangpinNewTypeWnd.h">
+    <ClInclude Include="wnd\CShangpinCreateWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="wnd\CShangpinSaomaluruWnd.h">
+    <ClInclude Include="wnd\CShangpinUpdateWnd.h">
       <Filter>头文件</Filter>
     </ClInclude>
     <ClInclude Include="tool\CShuangpingTool.h">
@@ -402,9 +399,6 @@
     <ClInclude Include="page\CYubaozhuangbiaoqianPageUI.h">
       <Filter>头文件</Filter>
     </ClInclude>
-    <ClInclude Include="page\CShangpinPiliangluruPageUI.h">
-      <Filter>头文件</Filter>
-    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="pch\pch.cpp">
@@ -635,19 +629,16 @@
     <ClCompile Include="page\CSaomashouyinPageUI.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="page\CShangpinCreatePageUI.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
     <ClCompile Include="tool\CFoodHandle.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="page\CShangpinUpdatePageUI.cpp">
+    <ClCompile Include="wnd\CShangpinNewTypeWnd.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="wnd\CShangpinNewTypeWnd.cpp">
+    <ClCompile Include="wnd\CShangpinCreateWnd.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="wnd\CShangpinSaomaluruWnd.cpp">
+    <ClCompile Include="wnd\CShangpinUpdateWnd.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
     <ClCompile Include="tool\CShuangpingTool.cpp">
@@ -764,9 +755,6 @@
     <ClCompile Include="page\CYubaozhuangbiaoqianPageUI.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
-    <ClCompile Include="page\CShangpinPiliangluruPageUI.cpp">
-      <Filter>源文件</Filter>
-    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <Image Include="resource\zhipuzi.ico">