xj qian
2024-06-25 1e63e2b6046ffcdc8127da028d122fa414c6a0d7
update som
已添加1个文件
已修改5个文件
1822 ■■■■■ 文件已修改
jrj/ext-jrj/ext-jrj.vcxproj.filters 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/business/Product.list.cpp 1590 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/project/viewobject/shoppingcart.view.hpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/wobject/xaserver.hpp 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/xcontrol/xcheckbox.hpp 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/xframe/xcontrol/ximageview.hpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -52,6 +52,9 @@
    <Filter Include="project\viewobject">
      <UniqueIdentifier>{1204eabe-475a-4239-9711-8e90447311db}</UniqueIdentifier>
    </Filter>
    <Filter Include="project\wface">
      <UniqueIdentifier>{3a03feca-5a89-4ea0-8ebf-c396a17eccfb}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="framework.h">
@@ -257,15 +260,6 @@
    <ClCompile Include="..\xframe\src\xstring.cpp">
      <Filter>xframe\src</Filter>
    </ClCompile>
    <ClCompile Include="..\project\start.vframe.vbusiness.cpp">
      <Filter>project</Filter>
    </ClCompile>
    <ClCompile Include="..\project\vindexform.cpp">
      <Filter>project</Filter>
    </ClCompile>
    <ClCompile Include="..\project\vindexmenu.cpp">
      <Filter>project</Filter>
    </ClCompile>
    <ClCompile Include="..\project\viewobject\view.base.hpp">
      <Filter>project\viewobject</Filter>
    </ClCompile>
@@ -302,5 +296,14 @@
    <ClCompile Include="..\project\business\Supplier3.list.cpp">
      <Filter>project\business</Filter>
    </ClCompile>
    <ClCompile Include="..\project\start.vframe.vbusiness.cpp">
      <Filter>project\wface</Filter>
    </ClCompile>
    <ClCompile Include="..\project\vindexform.cpp">
      <Filter>project\wface</Filter>
    </ClCompile>
    <ClCompile Include="..\project\vindexmenu.cpp">
      <Filter>project\wface</Filter>
    </ClCompile>
  </ItemGroup>
</Project>
jrj/project/business/Product.list.cpp
@@ -0,0 +1,1590 @@
#include <wobject/xstring.hpp>
#include <wobject/xdouble.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/ximageview.hpp>
#include "vbusiness/vframe/maint.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
#include "viewobject/saleorder.view.hpp"
#include "viewobject/quote.view.hpp"
#include "viewobject/shoppingcart.view.hpp"
#include "viewobject/productLibrary.view.hpp"
#include "xcontrol/xcheckbox.hpp"
#include "xcontrol/xshtml.hpp"
class __declspec(dllexport) ProductLibrary4Win : public xframe
{
public:
    //产品库产品列表
    xdwgrid    dw_list;
    //购物车产品列表
    xdwgrid    dwc_list;
    //产品缓存对象
    xdataset g_xdoc_product;
    xdataset g_xdoc_shoppingcart;
    xcombobox  cbx_goodscar;
    //是否多选
    xnode    m_agentNode;    //Agent Condition
    xtreeview tv_folder;
    xstring     agentFor;
    KXMLDOMElement imageElement;
    xstring m_customer;
public:
    int FillGoodsCarList()
    {
        xcombobox xc = GetControl(L"frame:cbx_goodscar");
        if (!xc) return 0;
        xml  x = ShoppingCartView::GetRoleList();
        if (!x) return 0;
        xc.SetText(L"==选择购物车==L");
        KXMLDOMNodeList nlist = x.selectNodes(L"//item");
        int len = nlist.length();
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            xc.AddItem( name);
        }
        return 1;
    }
    int SetAgent()
    {
        xstring xfNodeAgentArea = L"agentarea";
        xnode anode = GetAgentNode(xfNodeAgentArea);
        if (m_agentNode)
        {
            SetAgentNode(anode, m_agentNode);
        }
        else
        {
            KXMLDOMElement xframeElement = GetElement();
            KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[@for='" + agentFor + L"']/*");
            if (agent)
            {
                bstring s = agent.xml();
                m_agentNode = SetAgentNode(anode, s);
                //FillGoodsCarList();
            }
        }
        return 1;
    }
    //焦点激活处理函数
    int OnSetFocus(TEvent * evt, int param)
    {
        //重置工具条
        SetAgent();
        return 1;
    }
    KXMLDOMElement OnGetCarListRowElement(int row = 0)
    {
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return 0;
        KXMLDOMElement e = g_xdoc_shoppingcart.getRowElement(L"data/Item", row);
        return e;
    }
    int OnShowImage(xstring skuid)
    {
        ximageview im = GetControl(L"im1");
        //im.RemoveImage();
        im.Reset();
        xml xp ;
        xaserverarg arg_pic;
        arg_pic.AddArg(L"SKUID", skuid);
        if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU", arg_pic.GetString(), xp) != 1)
        {
            trace(xstring(L"xxx")+xp.xml());
        }
        else
        {
            //trace(skuid+L" "+xp.GetXml());
            imageElement = xp.documentElement();
            KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
            int lenp = nlistp.length();
            for (int ip = 0; ip < lenp; ip++)
            {
                KXMLDOMElement xitem = nlistp.item(ip);
                xstring picname = xitem.selectSingleNode(L"PicPath").text();
                xstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
                if (picname == L"/business/products/Thumbs//")
                    picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
                im.AddImages(picname, (LPTSTR)L"");
            }
            im.Redraw();
            //win32::SendMessage(im.GetId(),0x000f,0,1);
            //win32::InvalidateRect(im.GetId(),cast(0 as ref xrect),true);
        }
        return 1;
    }
    int OnShowImage(xstring skuid, xstring customerItemNo)
    {
        ximageview im = GetControl(L"im1");
        //im.RemoveImage();
        im.Reset();
        xml xp ;
        xaserverarg arg_pic ;
        arg_pic.AddArg(L"SKUID", skuid);
        arg_pic.AddArg(L"CustomerID", m_customer);
        arg_pic.AddArg(L"CustomerItemNo", customerItemNo);
        if (xurl::get(L"/sale/data/ProductLibrary3/pref/picture/customer/imagelistSKU", arg_pic.GetString(), xp) != 1)
        {
            trace(L"error:" + xstring(xp.xml(),true));
        }
        else
        {
            imageElement = xp.documentElement();
            KXMLDOMNodeList  nlistp = xp.selectNodes(L"ImageList/image");
            int lenp = nlistp.length();
            for (int ip = 0; ip < lenp; ip++)
            {
                KXMLDOMElement xitem = nlistp.item(ip);
                bstring picname = xitem.selectSingleNode(L"PicPath").text();
                bstring goodno = xitem.selectSingleNode(L"GoodsNo").text();
                if (picname == L"/business/products/Thumbs//")
                    picname = L"/business/products/Thumbs/00/00000000-0000-0000-0000-000000000000.jpg";
                im.AddImages(picname, L"");
            }
            im.Redraw();
        }
        return 1;
    }
    int OnRowChanged(TEvent * evt, int p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        xshtml xs = GetControl(L"html_detail");
        xstring html = makeHtml(row);
        xs.SetContent(html);
        xs.Redraw();
        xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
        OnShowImage(id);
        trace(id);
        return 1;
    }
    int OnGoodsCarRowChanged(TEvent * evt, int p)
    {
        DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
        int row = hdr.row;
        xshtml xs = GetControl(L"html_detail");
        xstring html = makeGoodscarHtml(row);
        xs.SetContent(html);
        xs.Redraw();
        if (m_customer)
        {
            xstring id = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID");
            xstring customerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CustomerItemNo");
            OnShowImage(id, customerItemNo);
        }
        return 1;
    }
    int DeleteRow(int row)
    {
        int IDOK = 1;
        int MB_OKCANCEL = 1;
        int MB_ICONQUESTION = 32;
        if (MessageBoxW(GetHWND(), L"确认删除指定的项,删除后将不能恢复?", L"提示", MB_OKCANCEL | MB_ICONQUESTION) != IDOK) return 1;
        xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
        if (ProductLibraryView::DeleteItem(id) == 1)    dw_list.DeleteRow(0);
        return 1;
    }
    int SetSelectState(xdwgrid dw_obj, int state)
    {
        if (state == 1)
        {
            dw_obj.SetSelectionMode(3);
        }
        else if (state == -1)
        {
            dw_obj.SelectRow(0, false);
            dw_obj.SetSelectionMode(0);
        }
        return 1;
    }
    int OnCkbCLick(TEvent * evt, int p)
    {
        xcheckbox cbx_1 = GetControl(L"frame:cbx1");
        int state = cbx_1.GetCheck();
        return SetSelectState(dw_list, state);
    }
    int OnCkbCLick2(TEvent * evt, int p)
    {
        xcheckbox cbx_2 = GetControl(L"frame:cbx2");
        int state = cbx_2.GetCheck();
        return SetSelectState(dwc_list, state);
    }
    xml  GetGoodsPropList(xstring guid)
    {
        xml x;
        xaserverarg arg;
        arg.AddArg(L"guid", guid);
        if (xurl::get(L"/sale/data/SO/goods/goodsprop/list", arg.GetString(), x) != 1)
        {
            bstring error = x.text();
            alert(error);
        }
        return x;
    }
    xml  GetGoodsPropListEx(xstring guid)
    {
        xml x;
        xstring fields = L"<data>";
        //fields +=L"<field name='HighestPrice' label='最高价'/>";
        //fields +=L"<field name='LowestPrice' label='最低价'/>";
        //fields +=L"<field name='BulkPrice' label='散货价'/>";
        //fields +=L"<field name='CardPrice' label='纸卡价'/>";
        //fields +=L"<field name='BuyPrice' label='采购价'/>";
        //fields +=L"<field name='SupplierID' label='货源'/>";
        fields += L"<field name='Packing' label='包装方式'/>";
        fields += L"<field name='PackingRate' label='每箱数量'/>";
        fields += L"<field name='VolumeDesc' label='包装尺码'/>";
        fields += L"<field name='GWPerPkg' label='毛重'/>";
        fields += L"<field name='NWPerPkg' label='净重'/>";
        //fields +=L"<field name='DeveloperID' label='开发人员'/>";
        fields += L"<field name='AttributeValue_1' label='产品属性'/>";
        //fields +=L"<field name='Remark' label='备注'/>";
        fields += L"</data>";
        x.loadXML(fields);
        return x;
    }
    xstring makeHtml(int row)
    {
        xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
        xml x = GetGoodsPropList(id);
        xml x1 = GetGoodsPropListEx(id);
        xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"SKUNo") +
            L"</span> <span style='font-weight:700;width:50;font-size:10pt' >类项:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"RefNo") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >公司型号:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"GoodsNo") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CName") +
            L"</span></div>";
        if (dw_list.GetItemString(row, L"CSpec") != L"")
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dw_list.GetItemString(row, L"CSpec") +
                L"</span></div>";
        KXMLDOMNodeList fieldsEx = x1.selectNodes(L"data/field");
        xstring ls_detail = L"";
        xstring ls_item = L"";
        xstring name;
        xstring label;
        int len = fieldsEx.length();
        int i = 0;
        for (i = 0; i < len; true)
        {
            int cnt = 0;
            ls_item = L"";
            while (cnt < 2)
            {
                name = fieldsEx.item(i).selectSingleNode(L"@name").text();
                label = fieldsEx.item(i).selectSingleNode(L"@label").text();
                ls_item += L"<td>" + label + L"</td>" + L"<td style='text-align:center'>" + g_xdoc_product.getData(0, L"data/Item", row, name) + L"</td>";
                cnt++;
                i++;
                if (i == len)break;
            }
            ls_detail += L"<tr>" + ls_item + L"</tr>";
        }
        html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
            + L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
            + ls_detail
            + L"</table>"
            + L"</div>";
        xstring ls_star = L"";
        KXMLDOMNodeList fields = x.selectNodes(L"data/field");
        len = fields.length();
        ls_detail = L"";
        if (len > 0)
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >技术要求:</span></div>";
        for (i = 0; i < len; true)
        {
            ls_item = L"";
            int count = 0;
            while (count < 2)
            {
                name = fields.item(i).selectSingleNode(L"@name").text();
                label = fields.item(i).selectSingleNode(L"@label").text();
                if (name == L"QualityTerm" || name == L"PackTerm" || label == L"质量" || label == L"包装质量" || label == L"技术要求")
                {
                    i++;
                    if (i >= len)count = 2;
                    continue;
                }
                else if (g_xdoc_product.getData(0, L"data/Item", row, name) == L"")
                {
                    KXMLDOMNodeList options = fields.item(i).selectNodes(L"item");
                    int tlen = options.length();
                    xstring terms = L"";
                    for (int k = 0; k < tlen; k++)
                    {
                        if (xstring(options.item(k).text()))
                        {
                            if (k > 0) terms += L", L";
                            terms += (xstring)L"[" + options.item(k).text() + L"]";
                        }
                    }
                    ls_star += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >" + label + L"*:</span><span  style='width:90;font-size:10pt'>" + terms + L"</span></div>";
                }
                else
                {
                    ls_item = L"<td>" + label + L"</td>" + L"<td>" + g_xdoc_product.getData(0, L"data/Item", row, name) + L"</td>";
                    count++;
                }
                i++;
                if (i >= len)count = 2;
            }
            ls_item = L"<tr>" + ls_item + L"</tr>";
            ls_detail += ls_item;
        }
        html += (xstring)L"<div style='margin-left:8px;margin-right:16px;'>" +
            +L"<table><colgroup span='1' width='70'/><colgroup span='1' width='120'/><colgroup span='1' width='70'/><colgroup span='1' width='120'/>"
            + ls_detail
            + L"</table>"
            + L"</div>";
        if (dw_list.GetItemString(row, L"QualityTerm") != L"")
        {
            html += L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >质量:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt'  >" + dw_list.GetItemString(row, L"QualityTerm") + L"</span></div>";
        }
        if (dw_list.GetItemString(row, L"PackTerm") != L"")
        {
            html += L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >包装质量:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + dw_list.GetItemString(row, L"PackTerm") + L"</span></div>";
        }
        if (g_xdoc_product.getData(0, L"data/Item", row, L"Remark") != L"")
        {
            //html +=  L"<div style='height:12px'/>";
            html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >备注:</span></div>";
            html += L"<div ><span style='margin-left:8px;margin-right:16px;font-weight:400;font-size:10pt' >" + g_xdoc_product.getData(0, L"data/Item", row, L"Remark") + L"</span></div>";
        }
        html += L"<div style='height:24px'/>";
        //星标项
        html += ls_star;
        //显示图片
        /*
        if (id != L"")
        {
            xml xp=new xml;
            xp.setNativePointer(xml::CreateInstance());
            xaserverarg arg_pic=new xaserverarg;
            arg_pic.setNativePointer(arg_pic.CreateInstance());
            arg_pic.AddArg(L"SKUID",id);
            if(url::get(L"/sale/data/ProductLibrary3/pref/picture/imagelistSKU",arg_pic.GetString(),xp)!=1)
            {
                trace(L"xxx",xp.GetXml());
            }else {
                html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >ͼƬ:</span>"    ;
                KXMLDOMElement ep=  xp.selectSingleNode(L"ImageList");
                if (ep)
                {
                    if (ep.SelectNodes(L"image")){
                        KXMLDOMNodeList  nlistp = ep.SelectNodes(L"image");
                        int ip=0;
                        int lenp = nlistp.length;
                        for(ip=0;ip<lenp;ip++)
                        {
                            KXMLDOMElement xitemp = nlistp.item(ip);
                            xstring filename = xitemp.selectSingleNode(L"PicPath").text;
                            //trace(filename);
                            html +=  L"<control visible='layer' controlclass='ximage'  data='' src='http://192.168.7.241:7001" +  filename +L"'/>";
                        }
                    }
                }
                html +=  L"</div>";
            }
        }else {
            xstring picname = L"1FA9E331-F95C-4E51-B80C-73FB9B911D8D.jpg";//dw_list.GetItemString(row,L"ImgName"); //ItemID+L".jpg";
            xstring str = picname.mid(0,2);
            str = str.upper();
            xstring serversrc =L"http://192.168.7.241:1001/business/products/chanpin/"+str+L"/"+picname;
            html +=  L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >ͼƬ:</span>";
            html +=  L"<control visible='layer' controlclass='ximage'  data='' src='"+ serversrc +L"'/></div>";
        }
        */
        html += L"</body></html>";
        //trace(html);
        return html;
    }
    xstring makeGoodscarHtml(int row)
    {
        xstring No = dwc_list.GetItemString(row, L"RefNo");//获取属性值id
        xml x = GetGoodsPropList(No);
        xstring html = L"<html><style> .text{ font-weight:400} .label { font-weight:400;}</style><body style='margin:2;background-color1:#ccdccc none #f0f0f0 none'>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >编号:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"No") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >品名:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CName") +
            L"</span></div>";
        html += L"<div ><span style='font-weight:700;width:50;font-size:10pt'  >规格:</span><span  style='width:90;font-size:10pt'>" + dwc_list.GetItemString(row, L"CSpec") +
            L"</span></div>";
        KXMLDOMNodeList fields = x.selectNodes(L"data/field");
        int len = fields.length();
        html += (xstring)L"<table>" +
            L"<colgroup span='1' width='80'/>" +
            L"<colgroup span='1' width='120'/>" +
            L"<colgroup span='1' width='420'/>";
        html += L"<tr>";
        html += L"<td style='text-align:center'>编号</td><td style='text-align:center'>项目</td><td style='text-align:center'>内容</td>";
        html += L"</tr>";
        for (int i = 0; i < len; i++)
        {
            xstring name = fields.item(i).selectSingleNode(L"@name").text();
            xstring label = fields.item(i).selectSingleNode(L"@label").text();
            html += L"<tr>";
            if (i == 0)
                html += L"<td rowspan='" + xstring(len) + L"'>" + No + L"</td><td >" + label + L"</td><td >" + L"</td>";
            else
                html += L"<td >" + label + L"</td><td >" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, name) + L"</td>";
            html += L"</tr>";
        }
        html += L"<tr>";
        html += L"<td rowspan='3'>" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"PackCode") + L"</td><td >包装方式</td><td >" +
            g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CPack") + L"</td>";
        html += L"</tr>";
        html += L"<tr height='48'>";
        html += L"<td >包装要求</td><td >" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"PackQualityTerm") + L"</td>";
        html += L"</tr>";
        html += L"<tr>";
        html += L"<td >侧唛</td><td ></td>";
        html += L"</tr>";
        html += L"<tr height='72'>";
        html += L"<td>" + g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
            g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"QualityTerm") + L"</td>";
        html += L"</tr>";
        html += L"</table>";
        html += L"</body></html>";
        return html;
    }
    int CarGoodsDelete()
    {
        return 1;
    }
    xstring Up(xstring name) {
        xstring str = name.mid(0, 2);
        str = str.toUpper();
        return xaserver::UploadFile(L"product" + str, name + L".jpg", this.GetHWND(), L"", false);
    }
    int OnAddImage() {
        if (m_customer != L"") return OnAddImageEx();
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        KXMLDOMElement e = g_xdoc_product.getRowElement(L"data/Item", row);
        xstring skuid = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
        xstring SKUNo = g_xdoc_product.getData(0, L"data/Item", row, L"SKUNo");
        xstring id = ViewObject::GetGuid();
        xstring ret1 = Up(id);
        if (ret1 == L"-1") return -1;
        if (ret1 == L"0")
        {
            alert(L"上传图片失败");
            return -1;
        }
        xstring originfile = ret1;
        xstring ext = originfile.right(7);
        if (ext.find(L".") >= 0)
            ext = ext.mid(ext.find(L".") + 1, 9999);
        else
            ext = L"jpg";
        // å›¾ç‰‡ååŠ å…¥æ•°æ®åº“
        xml x = new xml;
        x.setNativePointer(xml::CreateInstance());
        x.LoadXml(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
            "<ProductPictureID>" + id + L"</ProductPictureID>" +
            "<OriginFile>" + originfile + L"</OriginFile>" +
            "<FileExt>" + ext + L"</FileExt>" +
            "<SKUID>" + skuid + L"</SKUID>" +
            "<Name>[" + SKUNo.trim() + L"]</Name>" +
            "<FileName>" + id + L".jpg</FileName>" +
            "</Item>"
        );
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"content", x.GetXml());
        if (url::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text);
            return -1;
        }
        dw_list.SetItemString(row, L"pic", L"*");
        dw_list.Redraw();
        //刷新一下界面,显示图片
        OnShowImage(skuid);
        return 1;
    }
    int OnAddImageEx() {
        int row = dwc_list.GetNextSelectRow(1);
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return 0;
        KXMLDOMElement e = g_xdoc_shoppingcart.getRowElement(L"data/Item", row);
        xstring skuid = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID");
        xstring SKUNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID/@__displaystring");
        xstring CustomerID = m_customer;
        xstring CustomerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CustomerItemNo");
        xstring id = ViewObject::GetGuid();
        xstring ret1 = Up(id);
        if (ret1 == L"-1") return -1;
        if (ret1 == L"0")
        {
            alert(L"上传图片失败");
            return -1;
        }
        xstring originfile = ret1;
        xstring ext = originfile.right(7);
        if (ext.find(L".") >= 0)
            ext = ext.mid(ext.find(L".") + 1, 9999);
        else
            ext = L"jpg";
        // å›¾ç‰‡ååŠ å…¥æ•°æ®åº“
        xml x = new xml;
        x.setNativePointer(xml::CreateInstance());
        x.LoadXml(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
            "<ProductPictureID>" + id + L"</ProductPictureID>" +
            "<OriginFile>" + originfile + L"</OriginFile>" +
            "<FileExt>" + ext + L"</FileExt>" +
            "<SKUID>" + skuid + L"</SKUID>" +
            "<CustomerItemNo>" + CustomerItemNo + L"</CustomerItemNo>" +
            "<CustomerID>" + CustomerID + L"</CustomerID>" +
            "<Name>[" + SKUNo.trim() + L"]</Name>" +
            "<FileName>" + id + L".jpg</FileName>" +
            "</Item>"
        );
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"content", x.GetXml());
        if (url::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text);
            return -1;
        }
        dwc_list.SetItemString(row, L"pic", L"*");
        dwc_list.Redraw();
        //刷新一下界面,显示图片
        OnShowImage(skuid, CustomerItemNo);
        return 1;
    }
    int OnDeleteImageEx()
    {
        int row = dwc_list.GetNextSelectRow(1);
        if (row < 1) row = dwc_list.GetRow();
        if (row < 1 || row > dwc_list.GetRowCount()) return 0;
        ximageview im = GetControl(L"im1");
        int index = im.GetSelectIndex();
        int count = im.GetImageCount();
        if (count < 1) return 1;
        KXMLDOMNodeList images = imageElement.selectNodes(L"image");
        int length = images.length;
        if (length < index) return 1;
        int MB_OKCANCEL = 0x00000001;
        int IDOK = 1;
        if (win32::MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
        xstring id = images.item(index).selectSingleNode(L"@guid").text;
        xml x = new xml;
        x.setNativePointer(xml::CreateInstance());
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
        arg.AddArg(L"content", str);
        if (url::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text);
            return -1;
        }
        if (count == 1)
        {
            dwc_list.SetItemString(row, L"pic", L"");
            dwc_list.Redraw();
        }
        xstring skuid = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID");
        xstring SKUNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"SKUID/@__displaystring");
        xstring CustomerID = m_customer;
        xstring CustomerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", row, L"CustomerItemNo");
        OnShowImage(skuid, CustomerItemNo);
        return 1;
    }
    int OnDeleteImage() {
        if (m_customer != L"") return OnDeleteImageEx();
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        ximageview im = GetControl(L"im1");
        int index = im.GetSelectIndex();
        int count = im.GetImageCount();
        if (count < 1) return 1;
        KXMLDOMNodeList images = imageElement.selectNodes(L"image");
        int length = images.length;
        if (length < index) return 1;
        int MB_OKCANCEL = 0x00000001;
        int IDOK = 1;
        if (win32::MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
        xstring id = images.item(index).selectSingleNode(L"@guid").text;
        xml x = new xml;
        x.setNativePointer(xml::CreateInstance());
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
        arg.AddArg(L"content", str);
        if (url::get(L"/sale/data/ProductLibrary/image/update", arg.GetString(), x) != 1)
        {
            alert(x.text);
            return -1;
        }
        if (count == 1)
        {
            dw_list.SetItemString(row, L"pic", L"");
            dw_list.Redraw();
        }
        KXMLDOMElement e1 = g_xdoc_product.getRowElement(L"data/Item", row);
        xstring skuid = e1.getAttribute(L"guid");
        OnShowImage(skuid);
        return 1;
    }
    int OnPreviewImage()
    {
        int row = dw_list.GetNextSelectRow(1);
        if (row < 1) row = dw_list.GetRow();
        if (row < 1 || row > dw_list.GetRowCount()) return 0;
        KXMLDOMElement e = g_xdoc_product.getRowElement(L"data/Item", row);
        //KXMLDOMElement e = dw_list.GetRowElement(row);
        //alert(e.xml);
        xstring id = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
        //alert(id);
        int hItem = tv_folder.GetSelectedItem();
        KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
        xstring categoryid = e1.selectSingleNode(L"@guid").text;
        //alert(categoryid);
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"SKUID", id);
        arg.AddArg(L"CategoryID", categoryid);
        int pr = trust(arg as int); //g_xdoc_product
        OpenWindow(L"dev:xpage[PictureView.Product3.vx]", pr);
        return 1;
    }
    int ItemMaint()
    {
        int hItem = tv_folder.GetSelectedItem();
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        //xstring no = e.getAttribute(L"no");
        //if(no==L"") return 1;
        xstring guid = e.getAttribute(L"guid");
        if (guid == L"") return 1;
        /*
        if(no==L"NP0000FS" || no==L"UP0000FS")
        {
            OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
        }else
        {
            int pr = g_xdoc_product;
            OpenWindow(L"dev:xpage[ProductLibraryItemMaint.vx]",pr);
        }
        */
        //KXMLDOMElement ele = g_xdoc_product.getRowElement(L"data/Item", 1);
        //alert(ele.xml);
        int pr = g_xdoc_product;
        OpenWindow(L"dev:xpage[ProductLibraryItemMaint3.vx]", pr);
        return 1;
    }
    int ItemAdd()
    {
        int hItem = tv_folder.GetSelectedItem();
        int hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        KXMLDOMElement e = tv_folder.GetItemData(hItem);
        //alert(e.xml);
        /*xstring no = e.getAttribute(L"no");
        if(no==L"") return 1;
        if(no==L"NP0000FS" || no==L"UP0000FS")
        {
            OpenWindow(L"dev:xpage[PackSchemaMaint.goodslib.vx]");
        }else
        {
            int p = no;
            OpenWindow(L"dev:xpage[SO.autolist.goodslib.add.vx]",p);
        }*/
        xstring guid = e.getAttribute(L"guid");
        if (guid == L"") return 1;
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        arg.AddArg(L"guid", e.getAttribute(L"guid"));
        if (name == L"个人产品")
            arg.AddArg(L"FolderID", e.getAttribute(L"guid"));
        else
            arg.AddArg(L"CategoryID", e.getAttribute(L"guid"));
        xstring No = e.getAttribute(L"CategoryNo");
        if (No == L"") No = e.getAttribute(L"no");
        xstring Name = e.getAttribute(L"CName");
        if (Name == L"") Name = e.getAttribute(L"cname");
        arg.AddArg(L"No", No);
        arg.AddArg(L"CName", Name);
        int p = arg;
        OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", p);
        if (arg.GetArgString(L"data.modify") == L"1")RetrieveData();
        return 1;
    }
    int OnAddFolder()
    {
        int hItem = tv_folder.GetSelectedItem();
        int hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xaserverarg arg = ViewObject::MakeArg();
        if (hItem != hTopItem)
        {
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring folder = e.getAttribute(L"guid");
            if (folder != L"")
            {
                arg.AddArg(L"parentCategoryID", folder);
                OpenWindow(L"dev:xpage[UserFolderMaint.vx]", cast(arg as int));
                /*if(arg.GetArgString(L"FolderID")!=L"")
                {
                    int child = tv_folder.GetChildItem(hItem);
                    if(!child)
                    {
                        ExpandItem(hItem);
                    }
                    else
                    {
                        KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
                        KXMLDOMElement e2 = e1.cloneNode(0);
                        e2.
                    }
                }*/
            }
        }
        return 1;
    }
    int OnMaintFolder()
    {
        int hItem = tv_folder.GetSelectedItem();
        int hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xaserverarg arg = ViewObject::MakeArg();
        if (name == L"个人库" && selectname == L"新产品" && tv_folder.GetParentItem(hItem) == hTopItem) return 1;
        if (hItem != hTopItem)
        {
            KXMLDOMElement e = tv_folder.GetItemData(hItem);
            xstring folder = e.getAttribute(L"guid");
            if (folder != L"")
            {
                arg.AddArg(L"CategoryID", folder);
                OpenWindow(L"dev:xpage[UserFolderMaint.vx]", cast(arg as int));
                if (arg.GetArgString(L"label") != L"")
                {
                    tv_folder.SetItemLabel(hItem, arg.GetArgString(L"label"));
                }
            }
        }
        return 1;
    }
    //命令发布函数
    int OnCmdDispatch(xstring comdid)
    {
        int hCursor;
        xstring name = L"";
        if (comdid == L"xmRefresh")
        {
            return RetrieveData();
        }
        else if (comdid == L"xmCarGoodsDelete")
        {
            CarGoodsDelete();
            return 1;
        }
        else if (comdid == L"xmAddFolder")
        {
            return OnAddFolder();
        }
        else if (comdid == L"xmMaintFolder")
        {
            return OnMaintFolder();
        }
        else if (comdid == L"xmClose")
        {
            CloseWindow();
            return 1;
        }
        else if (comdid == L"xmCarGoodsMaint")
        {
            OpenWindow(L"dev:xpage[ShoppingCartProductMaint.vx]", trust(g_xdoc_shoppingcart as int));
            return 1;
        }
        else if (comdid == L"xmCarMaint")
        {
            OpenWindow(L"dev:xpage[SO.autolist.Shopcar.vx]");
            return 1;
        }
        else if (comdid == L"xmSaleOrder")
        {
            int rw = dwc_list.GetNextSelectRow(1);
            xstring content = L"<data>";
            while (rw > 0)
            {
                KXMLDOMElement xe = OnGetCarListRowElement(rw);
                content += xe.xml;
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            xaserverarg carg = new xaserverarg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            int newArg2 = carg.ptr_native_;
            OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", newArg2);
            return 1;
        }
        else if (comdid == L"xmEnquiry")
        {
            rw = dwc_list.GetNextSelectRow(1);
            content = L"<data>";
            while (rw > 0)
            {
                xe = OnGetCarListRowElement(rw);
                content += xe.xml;
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            carg = new xaserverarg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            newArg2 = carg.ptr_native_;
            OpenWindow(L"dev:xpage[Enquiry.Import.vx]", newArg2);
            return 1;
        }
        else if (comdid == L"xmPurchar")
        {
            rw = dwc_list.GetNextSelectRow(1);
            content = L"<data>";
            while (rw > 0)
            {
                xe = OnGetCarListRowElement(rw);
                content += xe.xml;
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            carg = new xaserverarg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            newArg2 = carg.ptr_native_;
            OpenWindow(L"dev:xpage[PO.Import.vx]", newArg2);
            return 1;
        }
        else if (comdid == L"xmSearch")
        {
            RetrieveData();
            return 1;
        }
        else if (comdid == L"xmQuote")
        {
            rw = dwc_list.GetNextSelectRow(1);
            content = L"<data>";
            while (rw > 0)
            {
                xe = OnGetCarListRowElement(rw);
                content += xe.xml;
                rw = dwc_list.GetNextSelectRow(rw + 1);
            }
            content += L"</data>";
            carg = new xaserverarg;
            carg.setNativePointer(carg.CreateInstance());
            carg.AddArg(L"content", content);
            newArg2 = carg.ptr_native_;
            OpenWindow(L"dev:xpage[Quote.Import.vx]", newArg2);
            return 1;
        }
        else if (comdid == L"xmAdd")
        {
            return ItemAdd();
        }
        else if (comdid == L"xmDelete")
        {
            int row = dw_list.GetRow();
            if (row < 1) return 1;
            xstring skuid = g_xdoc_product.getData(0, L"data/Item", row, L"@guid");
            xml skuid_x = ViewObject::RetrieveData(L"/sale/data/ProductLibrary3/ProductNumberone", L"SKUID", skuid);
            xstring  skuidEx = skuid_x.text;
            int  skuid1 = skuidEx.toInt();
            if (skuid1)
            {
                if (skuid1 > 0)
                {
                    alert(L"订单已有产品,不允许删除!");
                    return 1;
                }
            }
            DeleteRow(row);
            return 1;
        }
        else if (comdid == L"xmCarAdd")
        {
            hCursor = xutil::SetCursorWait();
            name = GetControl(L"frame:ed_goodscar").GetText();
            if (name != L"")
            {
                if (ShoppingCartView::AddCar(name) == 1)
                {
                    tv_folder.InsertChildItem(LookupTopFolder(tv_folder.GetSelectedItem()),
                        name, 0, 35);
                }
            }
            xutil::RestoreCursor(hCursor);
            return 1;
        }
        else if (comdid == L"xmMaint")
        {
            return ItemMaint();
        }
        else if (comdid == L"xmAddImage")
        {
            return OnAddImage();
        }
        else if (comdid == L"xmDeleteImage")
        {
            return OnDeleteImage();
        }
        else if (comdid == L"xmPreviewImage")
        {
            return OnPreviewImage();
        }
        else if (comdid == L"xmPropConfigure")
        {
            int r = cast(g_xdoc_product.getData(L"data/Item", L"@guid") as int);
            OpenWindow(L"dev:xpage[Product.ItemProp.Maint.vx]", r);
            return 1;
        }
        else if (comdid == L"xmRertieve")
        {
            /*
            int hItem1 = tv_folder.GetSelectedItem();
            KXMLDOMElement e2= tv_folder.GetItemData(hItem1);
            xstring no1 = e2.getAttribute(L"no");
            xml x2 = vcontrol::RetrieveData(L"/sale/data/SO/goods/usergoods/listex1",L"parent",no1);
            g_xdoc_product.Retrieve(x2);
            */
            return 1;
        }
        else if (comdid == L"xmToCar")
        {
            name = GetControl(L"frame:cbx_goodscar").GetText();
            if (name == L"==选择购物车==L")
            {
                alert(L"请选择购物车");
                return 1;
            }
            int xrow = dw_list.GetNextSelectRow(1);
            xstring goodsid = L"";
            xstring html = L"<data>";
            while (xrow > 0)
            {
                KXMLDOMElement e = g_xdoc_product.getRowElement(L"data/Item", xrow);
                goodsid = ProductLibraryView::GetElementString(e, L"@guid");
                html += L"<item goodid='" + goodsid + L"' id ='" + ProductLibraryView::GetGuid() + L"'/>";
                xrow = dw_list.GetNextSelectRow(xrow + 1);
            }
            html += L"</data>";
            trace(html);
            if (ShoppingCartView::GoodsImport(name, html) == 1)
                alert(L"添加错误!");
            else
                alert(L"添加成功");
            return 1;
        }
        return 0;
    }
    //命令处理事件
    int OnXCommand(ref TXCommandEvent evt, int param)
    {
        return OnCmdDispatch(evt.pStrID);
    }
    //查找当前树项的顶级目录
    int LookupTopFolder(int hItem)
    {
        int hRoot = tv_folder.GetRootItem();
        while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
        return hItem;
    }
    //插入产品类项的子项
    int MakeGoodsFolderItem(int hItem, xstring sno)
    {
        xml x = ProductLibraryView::GetTreeChildItems3(sno);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.SelectNodes(L"//Item");
        int len = nlist.length;
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"CName");
            xstring no = e.getAttribute(L"CategoryNo");
            xstring label = no.trim() + L" " + name;
            int h = tv_folder.InsertChildItem(hItem, label, trust(e as int), 15);
            xstring child = e.getAttribute(L"Childs");
            if (child == L"")
                tv_folder.SetItemChild(h, 1);
            else if (child != L"0")
                tv_folder.SetItemChild(h, 1);
        }
        return 1;
    }
    //插入新产品目录子项
    int MakeUserGoodsFolderItem(int hItem, xstring sno)
    {
        xml x = ProductLibraryView::GetTreeUserChildItems3(sno);
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.SelectNodes(L"//Item");
        int len = nlist.length;
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"CName");
            xstring no = e.getAttribute(L"CategoryNo");
            xstring label = no.trim() + L" " + name;
            int h = tv_folder.InsertChildItem(hItem, label, trust(e as int), 15);
            xstring child = e.getAttribute(L"Childs");
            if (child == L"")
                tv_folder.SetItemChild(h, 1);
            else if (child != L"0")
                tv_folder.SetItemChild(h, 1);
        }
        return 1;
    }
    //插入购物车项
    int ExpandCatChildFolder(int hItem, KXMLDOMElement ele, int image)
    {
        KXMLDOMNodeList nlist = ele.SelectNodes(L"item");
        int len = nlist.length;
        if (len > 0) tv_folder.SetItemChild(hItem, 1);
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), image);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int MakeGoodCarFolderItem(int hItem)
    {
        xml x = ShoppingCartView::GetRoleList();
        if (!x) return 0;
        KXMLDOMNodeList nlist = x.SelectNodes(L"/data/item");
        int len = nlist.length;
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"name");
            int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), 35);
            ExpandCatChildFolder(h, e, 35);
        }
        return 1;
    }
    int ExpandItem(int hItem)
    {
        int hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        int child = tv_folder.GetChildItem(hItem);
        xstring no = L"";
        KXMLDOMElement e;
        if (name == L"公司库" && !child)
        {
            no = L"";
            if (hTopItem != hItem)
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
            }
            else
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
            }
            MakeGoodsFolderItem(hItem, no);
        }
        else if (name == L"个人库" && !child)
        {
            no = L"";
            if (hTopItem != hItem)
            {
                e = tv_folder.GetItemData(hItem);
                no = e.getAttribute(L"categoryid");
                MakeUserGoodsFolderItem(hItem, no);
            }
        }
        else if (name == L"购物车" && !child)
        {
            if (hItem == hTopItem)MakeGoodCarFolderItem(hItem);
        }
        return 1;
    }
    //树展开
    int OnTreeExpanding(TEvent * evt, int p)
    {
        ref NMTREEVIEW nmtv = evt.pnmh;
        int hItem = nmtv.itemNew.hItem;
        return ExpandItem(hItem);
    }
    int ResetAgent(xstring agentAsk)
    {
        if (agentFor != agentAsk)
        {
            agentFor = agentAsk;
            m_agentNode = 0;
            SetAgent();
        }
        return 1;
    }
    int LookupCustomerFolder(int hItem)
    {
        while (true)
        {
            KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
            xstring str = e1.getAttribute(L"no");
            if (str.find(L"Customer:") >= 0) return hItem;
            hItem = tv_folder.GetParentItem(hItem);
            if (hItem == 0) break;
        }
        return 0;
    }
    xstring LookupCustomer(int hItem)
    {
        hItem = LookupCustomerFolder(hItem);
        if (hItem == 0) return "";
        KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
        xstring str = e1.getAttribute(L"no");
        return str.mid(L"Customer:".length(), 9999);
    }
    int RetrieveData()
    {
        ximageview im = GetControl(L"im1");
        int hItem = tv_folder.GetSelectedItem();
        int hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        xcontrol query = GetControl(L"sl_search");
        xstring queryString = query.GetText();
        if (hItem == hTopItem)
        {
            dw_list.Reset();
            dw_list.SetReadOnly(true);
            dw_list.Redraw();
            dwc_list.Reset();
            dwc_list.SetReadOnly(true);
            dwc_list.Redraw();
            im.ResetEx();
            im.Redraw();
            htmlctrl xs1 = GetControl(L"html_detail");
            xs1.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
            if (name != L"公司库") return 1;
        }
        //return 1;
        int hCursor = xutil::SetCursorWait();
        if (name == L"购物车")
        {
            if (selectname != name)
            {
                KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
                xstring str = e1.getAttribute(L"no");
                alert(str);
                if (str.find(L"Customer:") == 0 || str.find(L"SO:") == 0)
                {
                    m_customer = LookupCustomer(hItem);
                    if (str.find(L"Customer:") == 0)
                        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodscustomerlist");
                    else
                        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodssolist");
                    dwc_list.Reset();
                    dwc_list.SetReadOnly(true);
                    g_xdoc_shoppingcart.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
                }
                else if (e1.getAttribute(L"categoryid") != L"")
                {
                    xstring categoryid = e1.getAttribute(L"categoryid");
                    dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid).GetXmlDoc());
                    dwc_list.SetReadOnly(true);
                    dwc_list.Reset();
                    g_xdoc_shoppingcart.Retrieve(ProductLibraryView::GetMaintList3(categoryid, queryString, L""));
                    dwc_list.Redraw();
                }
                else
                {
                    dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
                    dwc_list.SetReadOnly(true);
                    dwc_list.Reset();
                    g_xdoc_shoppingcart.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
                }
                dwc_list.PostRetrieve();
                dwc_list.Redraw();
                if (dwc_list.GetRowCount() >= 1)
                {
                    htmlctrl xs = GetControl(L"html_detail");
                    xs.SetContent(makeGoodscarHtml(1));
                    if (m_customer != L"")
                    {
                        xstring skuid = g_xdoc_shoppingcart.getData(0, L"data/Item", 1, L"SKUID");
                        xstring customerItemNo = g_xdoc_shoppingcart.getData(0, L"data/Item", 1, L"CustomerItemNo");
                        OnShowImage(skuid, customerItemNo);
                    }
                }
                else
                {
                    im.ResetEx();
                    im.Redraw();
                    xs = GetControl(L"html_detail");
                    xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
                }
                xs.Redraw();
            }
        }
        else
        {
            if (name == L"个人库" || name == L"公司库")
            {
                xstring no = L"N000005";
                if (name == L"个人库") no = L"U000005";
                if (hItem != hTopItem)
                {
                    KXMLDOMElement e = tv_folder.GetItemData(hItem);
                    no = e.getAttribute(L"guid");
                }
                /*    dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(no).GetXmlDoc());
                    dw_list = GetControl(L"dw_list");
                    dw_list.Reset();
                    dw_list.SetReadOnly(true);
                */
                if (name == L"个人库")
                    g_xdoc_product.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
                else
                {
                    if (queryString != L"")
                    {
                        if (no == L"N000005")
                            g_xdoc_product.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
                        else
                            g_xdoc_product.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
                    }
                    else
                        g_xdoc_product.Retrieve(ProductLibraryView::GetMaintList3(no));
                }
                dw_list.PostRetrieve();
                dw_list.Redraw();
                if (dw_list.GetRowCount() > 0)
                {
                    xs = GetControl(L"html_detail");
                    xs.SetContent(makeHtml(1));
                    xstring id = g_xdoc_product.getData(0, L"data/Item", 1, L"@guid");
                    OnShowImage(id);
                }
                else
                {
                    im.ResetEx();
                    im.Redraw();
                    xs = GetControl(L"html_detail");
                    xs.SetContent(L"<html><body style='margin:2;background-color:#ccdccc none #f0f0f0 none'/></html>");
                }
                xs.Redraw();
            }
        }
        xutil::RestoreCursor(hCursor);
        return 1;
    }
    int OnTreeSelChanged(TEvent * evt, int p)
    {
        ref NMTREEVIEW nmtv = cast(evt.pnmh as NMTREEVIEW);
        int hItem = nmtv.itemNew.hItem;
        int hTopItem = LookupTopFolder(hItem);
        xstring name = tv_folder.GetItemLabel(hTopItem);
        xstring selectname = tv_folder.GetItemLabel(hItem);
        ximageview im = GetControl(L"im1");
        m_customer = L"";
        //alert(name);
        if (name == L"购物车")
        {
            if (agentFor != L"goodscar")SwitchLayer(L"goodscarsheet", L"sheetframe");
            ResetAgent(L"goodscar");
        }
        else
        {
            if (agentFor != L"goodslib")SwitchLayer(L"goodslibsheet", L"sheetframe");
            if (name == L"个人库")
                ResetAgent(L"userlib");
            else
                ResetAgent(L"goodslib");
        }
        //RetrieveData();
        win32::PostMessage(GetHWND(), 0x401, L"xmRefresh", 0);
        return 1;
    }
    int  ExpandChildFolder(int hItem, KXMLDOMElement pElement)
    {
        KXMLDOMNodeList nlist = pElement.SelectNodes(L"Item");
        int len = nlist.length;
        for (int i = 0; i < len; i++)
        {
            KXMLDOMElement e = nlist.item(i);
            xstring name = e.getAttribute(L"cname");
            xstring sImage = e.getAttribute(L"image");
            int image = 15;
            //if(sImage) image = sImage.toInt();
            int h = tv_folder.InsertChildItem(tv_folder.GetId(), hItem, name, trust(e as int), image);
            tv_folder.SetItemChild(h, 1);
            ExpandChildFolder(h, e);
        }
        return 1;
    }
    int  InitialFolder()
    {
        KXMLDOMElement xframeElement = GetElement();
        KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
        ExpandChildFolder(0, e);
        return 1;
    }
    int OnViewZoomChange(ref TCommandEvent evt, int lParam)
    {
        ximageview im = GetControl(L"im1");
        xcombobox xc = GetControl(L"precent");
        xstring text = xcombobox::GetLBText(xc.GetId());
        int p = text.toInt();
        if (p == 0) p = 100;
        im.Preview(p);
        return 1;
    }
    int OnAttachEvent()
    {
        //绑定工具条点击事件
        AttachEvent(L"WM_XCOMMAND", OnXCommand);
        //获取焦点事件,用于重置工具条
        AttachEvent(L"WM_SETFOCUS", OnSetFocus);
        AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", OnRowChanged);
        AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", OnGoodsCarRowChanged);
        AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", OnTreeExpanding);
        AttachEvent(L"tv_folder", L"TVN_SELCHANGED", OnTreeSelChanged);
        AttachEvent(L"WM_COMMAND", OnCkbCLick);    //checkbox打钩事件
        AttachEvent(L"WM_COMMAND", OnCkbCLick2);    //checkbox打钩事件
        AttachEvent(L"im1", L"IMG_LDBCLICK", OnImgDBClicked);
        AttachEvent(L"precent", L"CBN_SELCHANGE", OnViewZoomChange);
    }
    int onload()
    {
        agentFor = L"goodslib";
        m_customer = 0;
        imageElement = 0;
        OnAttachEvent();
        tv_folder = GetControl(L"tv_folder");
        dw_list = GetControl(L"dw_list");
        dwc_list = GetControl(L"dwc_list");
        InitialFolder();
        g_xdoc_product = new xdataset;
        g_xdoc_product.Init();
        xbind bindproduct = new xbind;
        bindproduct.bindEx(dw_list, g_xdoc_product, L"");
        g_xdoc_shoppingcart = new xdataset;
        g_xdoc_shoppingcart.Init();
        xbind bindcart = new xbind;
        bindcart.bindEx(dwc_list, g_xdoc_shoppingcart, L"");
        dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L"").GetXmlDoc());
        dw_list = GetControl(L"dw_list");
        dw_list.SetReadOnly(true);
        dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
        dwc_list.SetReadOnly(true);
        if (dw_list.GetRowCount())
        {
            htmlctrl xs = GetControl(L"html_detail");
            xs.SetContent(makeHtml(1));
        }
        tv_folder.ExpandItem(tv_folder.GetRootItem());
        tv_folder.ItemFocus(tv_folder.GetRootItem());
        return 1;
    }
    int onloaded()
    {
        SetAgent();
        return 1;
    }
    int OnImgDBClicked(TEvent * evt, int pr)
    {
        ref IMGNNMHDR nmtv = evt.pnmh;
        xstring src = nmtv.path;
        /*if(src.length() > 60)
            src = src.right(44);
        else
            src=src.mid(src.find(L"Thumbs", 0)+6, 50);
        */
        xaserverarg arg = new xaserverarg;
        arg.setNativePointer(arg.CreateInstance());
        //arg.AddArg(L"src",L"/business/products/chanpin"+src);
        arg.AddArg(L"src", src);
        //win::OpenWindow(L"dev:xpage[BigPicture.vx]",arg);
        int h = openUrl(L"/sale/view/ProductLibrary/xpage/bigpictureview", arg);
        return 1;
        /*
        xwin x = new xwin;
        x.setNativePointer(h);
        m_winHwnd = x.GetHWND();
        xstring sh = doc.GetXml();
        int p = cast(sh as int);
        win32::SendMessage(m_winHwnd, 0x401, p, 0);
        */
        return 1;
    }
};
jrj/project/viewobject/shoppingcart.view.hpp
@@ -7,7 +7,7 @@
#include <wobject/xurl.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/xdwtable.hpp>
#include <view.base.hpp>
#include "view.base.hpp"
class ShoppingCartView: public ViewObject
{
jrj/xframe/wobject/xaserver.hpp
@@ -165,9 +165,9 @@
    //int SetTrans(ITrans *);
    //ITrans * GetTrans();
    static int UploadEx(LPTSTR pUri,LPTSTR pName,HWND m_hWnd,LPTSTR pSource=NULL,BOOL bCompress=false)
    static int UploadEx(LPCTSTR pUri,LPCTSTR pName,HWND m_hWnd,LPCTSTR pSource=NULL,BOOL bCompress=false)
    {
        return kxaserver::UploadEx(pUri,pName,m_hWnd,pSource,bCompress);
        return kxaserver::UploadEx((LPTSTR)pUri, (LPTSTR)pName,m_hWnd, (LPTSTR)pSource,bCompress);
    }
    static int Upload(LPTSTR pUri,LPTSTR pName,HWND m_hWnd,LPTSTR pSource=NULL,BOOL bCompress=false)
@@ -175,34 +175,34 @@
        return kxaserver::Upload(pUri,pName,m_hWnd,pSource,bCompress);
    }
    static int Upload(LPTSTR pUri,LPTSTR pName,LPTSTR pPath,HWND m_hWnd,LPTSTR pSource=NULL,BOOL bCompress=false)
    static int Upload(LPCTSTR pUri,LPCTSTR pName,LPCTSTR pPath,HWND m_hWnd,LPCTSTR pSource=NULL,BOOL bCompress=false)
    {
        return kxaserver::Upload(pUri,pName,pPath,m_hWnd,pSource,bCompress);
        return kxaserver::Upload((LPTSTR)pUri, (LPTSTR)pName, (LPTSTR)pPath,m_hWnd, (LPTSTR)pSource,bCompress);
    }
    static int FileCopy(LPTSTR pUri,LPTSTR pName,LPTSTR pUri1,LPTSTR pName1)
    static int FileCopy(LPCTSTR pUri,LPCTSTR pName,LPCTSTR pUri1,LPCTSTR pName1)
    {
        return kxaserver::FileCopy(pUri,pName,pUri1,pName1);
        return kxaserver::FileCopy((LPTSTR)pUri, (LPTSTR)pName, (LPTSTR)pUri1, (LPTSTR)pName1);
    }
    static LPTSTR UploadFile(LPTSTR pUri,LPTSTR pName,HWND m_hWnd,LPTSTR pSource,BOOL bCompress)
    static LPCTSTR UploadFile(LPCTSTR pUri,LPCTSTR pName,HWND m_hWnd,LPCTSTR pSource,BOOL bCompress)
    {
        return kxaserver::UploadFile(pUri,pName,m_hWnd,pSource,bCompress);
        return kxaserver::UploadFile((LPTSTR)pUri,(LPTSTR)pName,m_hWnd,(LPTSTR)pSource,bCompress);
    }
    static int __DeleteFile(LPTSTR pName)
    {
        return kxaserver::__DeleteFile(pName);
    }
    static int __CreateDirectory(LPTSTR pName)
    static int __CreateDirectory(LPCTSTR pName)
    {
        return kxaserver::__CreateDirectory(pName);
        return kxaserver::__CreateDirectory((LPTSTR)pName);
    }
    static int DownLoadFile(LPCTSTR pStrServer,LPCTSTR pUrl,LPCTSTR pExt,LPTSTR pName=NULL)
    {
        return kxaserver::DownLoadFile(pStrServer,pUrl,pExt,pName);
    }
    static int UploadData(LPTSTR pUri,LPTSTR pName,LPTSTR pData)
    static int UploadData(LPCTSTR pUri,LPCTSTR pName,LPCTSTR pData)
    {
        return kxaserver::UploadData(pUri,pName,pData);
        return kxaserver::UploadData((LPTSTR)pUri, (LPTSTR)pName, (LPTSTR)pData);
    }
};
jrj/xframe/xcontrol/xcheckbox.hpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
#pragma once
#include "wobject/xcontrol.hpp"
#include "win32/win.hpp"
typedef struct _TREEITEM{} *HTREEITEM;
#define TVI_ROOT                ((HTREEITEM)(ULONG_PTR)-0x10000)
#define TVI_FIRST               ((HTREEITEM)(ULONG_PTR)-0x0FFFF)
#define TVI_LAST                ((HTREEITEM)(ULONG_PTR)-0x0FFFE)
#define TVI_SORT                ((HTREEITEM)(ULONG_PTR)-0x0FFFD)
#define TVIF_TEXT               0x0001
#define TVIF_IMAGE              0x0002
#define TVIF_PARAM              0x0004
#define TVIF_STATE              0x0008
#define TVIF_HANDLE             0x0010
#define TVIF_SELECTEDIMAGE      0x0020
#define TVIF_CHILDREN           0x0040
#define TVIF_INTEGRAL           0x0080
#define TVIF_STATEEX            0x0100
#define TVIF_EXPANDEDIMAGE      0x0200
#define TVIS_SELECTED           0x0002
#define TVIS_CUT                0x0004
#define TVIS_DROPHILITED        0x0008
#define TVIS_BOLD               0x0010
#define TVIS_EXPANDED           0x0020
#define TVIS_EXPANDEDONCE       0x0040
#define TVIS_EXPANDPARTIAL      0x0080
#define TVIS_OVERLAYMASK        0x0F00
#define TVIS_STATEIMAGEMASK     0xF000
#define TVIS_USERMASK           0xF000
#define TVGN_ROOT               0x0000
#define TVGN_NEXT               0x0001
#define TVGN_PREVIOUS           0x0002
#define TVGN_PARENT             0x0003
#define TVGN_CHILD              0x0004
#define TVGN_FIRSTVISIBLE       0x0005
#define TVGN_NEXTVISIBLE        0x0006
#define TVGN_PREVIOUSVISIBLE    0x0007
#define TVGN_DROPHILITE         0x0008
#define TVGN_CARET              0x0009
#define TVGN_LASTVISIBLE        0x000A
#define TVGN_NEXTSELECTED       0x000B
 #define TV_FIRST 0x1100
struct SCROLLINFO
{
    int cbSize;
    int fMask;
    int  nMin;
    int  nMax;
    int nPage;
    int  nPos;
    int  nTrackPos;
};
struct tvitem
{
    int mask;
    HTREEITEM hItem;
    int state;
    int stateMask;
    string pszText;
    int cchTextMax;
    int iImage;
    int iSelectedImage;
    int cChildren;
    LPARAM lParam;
};
struct tvinsertstruct
{
    HTREEITEM hParent;
    HTREEITEM hInsertAfter;
    tvitem  item;
};
struct NMTREEVIEW : public NMHDR
{
    int action;
    tvitem itemOld;
    tvitem itemNew;
    xpoint ptDrag;
};
struct TVNNMHDR : public NMHDR
{
    HTREEITEM FromItem;
    HTREEITEM ToItem;
    xpoint pt;
    string PopupMenu;
};
struct NMTVDISPINFO : public NMHDR
{
    tvitem     item;
};
struct TVHITTESTINFO {
    xpoint     pt;
    int      flags;
    HTREEITEM hItem;
};
class xcheckbox:  public xcontrol
{
public:
    xcheckbox() :xcontrol(nullptr) {}
    xcheckbox(void* implptr) :xcontrol(implptr) {}
    static int SetCheck(int wid)
    {
        int BM_SETCHECK = 0x00F1;
        int BST_CHECKED = 0x1;
        SendMessage(wid, BM_SETCHECK, BST_CHECKED, 0);
        return 1;
    }
    static int SetUnCheck(int wid)
    {
        int BM_SETCHECK = 0x00F1;
        int BST_UNCHECKED = 0x0;
        win32::SendMessage(wid, BM_SETCHECK, BST_UNCHECKED, 0);
        return 1;
    }
    static int SetText(int wid, string txt)
    {
        int WM_SETTEXT = 0x000C;
        win32::SendMessage(wid, WM_SETTEXT, 0, txt);
        return 1;
    }
    static int GetCheck(int wid)
    {
        int BM_GETCHECK = 0x00F0;
        int BM_GETSTATE = 0x00F2;
        int r = win32::SendMessage(wid, BM_GETSTATE, 0, 0);
        if (r == 8 || r == 0 || r == 520) return -1;
        else return 1;
    }
    int SetCheck()
    {
        int BM_SETCHECK = 0x00F1;
        int BST_CHECKED = 0x1;
        SendMessage(GetHWND(), BM_SETCHECK, BST_CHECKED, 0);
        return 1;
    }
    int SetUnCheck()
    {
        int BM_SETCHECK = 0x00F1;
        int BST_UNCHECKED = 0x0;
        SendMessage(GetHWND(), BM_SETCHECK, BST_UNCHECKED, 0);
        return 1;
    }
    int SetText(, string txt)
    {
        int WM_SETTEXT = 0x000C;
        SendMessage(GetHWND(), WM_SETTEXT, 0, txt);
        return 1;
    }
    int GetCheck()
    {
        int BM_GETCHECK = 0x00F0;
        int BM_GETSTATE = 0x00F2;
        int r = SendMessage(GetHWND(), BM_GETSTATE, 0, 0);
        if (r == 8 || r == 0 || r == 520) return -1;
        else return 1;
    }
};
jrj/xframe/xcontrol/ximageview.hpp
@@ -15,13 +15,13 @@
        return (kimageview*)getNativePointer();
    }
public:
    int AddImages(LPCTSTR pUrl, LPTSTR pText=NULL)
    int AddImages(LPCTSTR pUrl, LPCTSTR pText=NULL)
    {
        return GetKImageView()->AddImages(pUrl, pText);
        return GetKImageView()->AddImages(pUrl, (LPTSTR)pText);
    }
    int InsertImages(LPCTSTR pUrl, LPTSTR pText, int nIndex)
    int InsertImages(LPCTSTR pUrl, LPCTSTR pText, int nIndex)
    {
        return GetKImageView()->InsertImages(pUrl, pText,nIndex);
        return GetKImageView()->InsertImages(pUrl,(LPTSTR)pText,nIndex);
    }
    int RemoveImage(int nIndex)
    {