xj qian
2024-07-16 7a91c3a1ed37b0332d4ff0ebeae60bd6da3665c0
jrj/project/business/BasicCode/SKUItem.categoryselect.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,216 @@
use"lang.vl"
use "win.vl"
use "treeview.vm"
use "file.vl"
use "dev:vm[xdwtable.vm]"
unit vbusiness.vpage
[
   SKUItemcategoryselect is extend TProduct;
   about SKUItemcategoryselect
   [
      field:
         xdwtable  dw_category;
      method:
      [
         treeview      tv_gs;
         //命令发布函数
         xstring GetPath(int tv, int h)
         {
            xstring str = treeview::GetItemLabel(tv, h);
            int k = treeview::GetParentItem(tv, h);
            int r = treeview::GetRootItem(tv);
            while(k > 0 && r != k)
            {
               xstring tmp = treeview::GetItemLabel(tv, k);
               str = tmp+L"\\" + str;
               k = treeview::GetParentItem(tv, k);
            }
            return str;
         }
         int xunhuan(int pItem, int hItem)
         {
            xdwtable dw = new xdwtable;
            dw.setNativePointer(dw_category.FindDwTable(L"Item",0));
            if(treeview::GetChecked(tv_gs.GetId(),hItem) > 0)
            {
               msxml::IXMLDOMElement e = treeview::GetItemData(tv_gs.GetId(),hItem);
               xstring id = e.selectSingleNode(L"CategoryID").text;
               xstring Name =GetPath(tv_gs.GetId(), hItem);
               trace(Name);
               if(dw.GetItemString(1,L"CategoryID")==L"")
               {
                  dw.ItemChangeTo(1,L"CategoryID",id);
                  dw.ItemChangeTo(1,L"Category",Name);
               }
               else
               {
                  int n=dw.InsertRow(0);
                  dw.ItemChangeTo(n,L"CategoryID",id);
                  dw.ItemChangeTo(n,L"Category",Name);
               }
            }
            int cItem = treeview::GetChildItem(tv_gs.GetId(), hItem);
            if(cItem > 0)
            {
               xunhuan(pItem,cItem);
            }
            int nItem = treeview::GetNextItem(tv_gs.GetId(), hItem);
            if(nItem > 0)
            {
               xunhuan(pItem,nItem);
            }
            return 1;
         }
         int OnCmdDispatch(xstring comdid)
         {
            if(comdid==L"ok")
            {
               int hitem = treeview::GetSelectedItem(tv_gs.GetId());
               if (hitem >0)
               {
                  msxml::IXMLDOMElement ele=treeview::GetItemData(tv_gs.GetId(),hitem);
                  xstring guid = ele.selectSingleNode(L"CategoryID").text;
                  //xstring label = ele.selectSingleNode(L"CName").text;
                  xstring label = GetPath(tv_gs.GetId(), hitem);
                  trace(label);
                  xunhuan(hitem, treeview::GetChildItem(tv_gs.GetId(), treeview::GetRootItem(tv_gs.GetId())));
                  win::CloseWindow();
               }
               return 1;
            }
            if(comdid==L"close")
               win::CloseWindow();
            return 0;
         }
         int OnCmdDispatch0(xstring comdid)
         {
            xaserverarg arg = new xaserverarg;
            arg.setNativePointer(arg.CreateInstance());
            arg = win::GetParam();
            arg.AddArg(L"comdid",comdid);
            int xitem = treeview::GetSelectedItem(tv_gs.GetId());
            if(comdid==L"ok" && xitem != 0)
            {
               msxml::IXMLDOMElement e=treeview::GetItemData(tv_gs.GetId(),xitem);
               xstring sHasChild=e.selectSingleNode(L"@HasChild").text;
               if(treeview::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild==L"1")
               {
                  alert(L"提示:请选择最后一级类别!");
                  return 0;
               }
               xstring ID = e.selectSingleNode(L"CategoryID").text;
               xstring CName = e.selectSingleNode(L"CName").text;
               trace(CName);
               xstring ruler;
               if(e.selectSingleNode(L"SpecRule"))
                  ruler = e.selectSingleNode(L"SpecRule").text;
               else
                  ruler =L"";
               arg.AddArg(L"CategoryID",ID);
               arg.AddArg(L"CName",CName);
               arg.AddArg(L"SpecRule",ruler);
            }
            win::CloseWindow();
            return 0;
         }
         //命令处理事件
         int OnXCommand(ref TXCommandEvent evt,int p)
         {
            return OnCmdDispatch(evt.pStrID);
         }
         int CreateSubTree(int pitem){
            msxml::IXMLDOMElement sitemdata=treeview::GetItemData(tv_gs.GetId(), pitem);
            xstring sHasChild=sitemdata.selectSingleNode(L"@HasChild").text;//sitemdata.getAttribute(L"HasChild");
            xstring pid=sitemdata.selectSingleNode(L"CategoryID").text;
            //trace(sHasChild+L"sdaga"+pid);
            if(sHasChild==L"1"){//数据有子节点
               int citem=treeview::GetChildItem(tv_gs.GetId(), pitem);
               //alert(xstring(citem));
               if (citem==0){//树视图有子节点
                  xml x=new xml;
                  x.setNativePointer(xml::CreateInstance());
                  xaserverarg arg=new xaserverarg;
                  arg.setNativePointer(arg.CreateInstance());
                  arg.AddArg(L"parentID",pid);
                  //if(xaserver::ExecXQuery(GetServerUrl(),L"[ItemCategoryEx.xq]",arg.GetString(),x)!=1)
                  if(url::get(GetEntityName(1)+L"/entity/category",arg.GetString(),x)!=1)
                  {
                     trace(x.GetXml());
                     return 0;
                  }
                  //trace(x.GetXml());
                  var list=x.GetXmlDoc().selectNodes(L"root/Category");
                  int i=0,s=list.length;
                  msxml::IXMLDOMElement xitem;
                  for (i=0;i<s;i++){
                     xitem=list.item(s - i - 1);
                     xstring Name=xitem.selectSingleNode(L"CName").text;
                     xstring Has2D=xitem.selectSingleNode(L"@Has2D").text;//item.getAttribute(L"Has2D");
                     if (Has2D==L"1")
                        Name=Name+L"*";
                     int kitem=treeview::InsertItem(tv_gs.GetId(), pitem,0,Name,xitem,15);
                     //int kitem=treeview::InsertChildItem(tv_gs.GetId(), pitem,Name,xitem,15);
                     xstring HasChild=xitem.selectSingleNode(L"@HasChild").text;//item.getAttribute(L"HasChild");
                     //trace(HasChild, kitem);
                     if (HasChild==L"1")
                        treeview::SetItemChild1(tv_gs.GetId(), kitem,1);
                  }
               }
            }
            return 1;
         }
         int CreateRootTree(){
            xstring rootid=L"00000000-0000-0000-0000-000000000000";
            xml x=new xml;
            x.setNativePointer(xml::CreateInstance());
            x.LoadXml(L"<Category HasChild='1'><CategoryID>"+rootid+L"</CategoryID></Category>");
            int hroot=treeview::InsertItem(tv_gs.GetId(),L"公司产品类别", x.GetXmlDoc().documentElement, 17);
            CreateSubTree(hroot);
            treeview::ExpandItemEx(tv_gs.GetId(),hroot);
            return 1;
         }
         int OnTreeExpanding(ref TNotifyEvent evt,int p)   {
            ref NMTREEVIEW nmtv = evt.pnmh;
            int sitem = nmtv.itemNew.hItem;
            CreateSubTree(sitem);
            return 1;
         }
         int OnAttachEvent()
         {
            //绑定工具条点击事件
            AttachEvent(L"WM_XCOMMAND",OnXCommand);
            //获得树的展开事件
            AttachEvent(L"tv_gs", L"TVN_ITEMEXPANDING",OnTreeExpanding);
         }
         int onload()
         {
            if (GetParam())
            {
               xaserverarg arg1=GetParam();
               dw_category = new xdwtable;
               dw_category.setNativePointer(arg1.GetArgString(L"dw_category").toInt());
            }
            tv_gs = new treeview;
            tv_gs.setNativePointer(GetControl(L"tv_gs"));
            CreateRootTree();
            OnAttachEvent();
            return 1;
         }
      ]
   ]
]