#include <wobject/xstring.hpp>
|
#include <xcontrol/xtreeview.hpp>
|
#include <xcontrol/xdwgrid.hpp>
|
#include <wobject/xdouble.hpp>
|
#include <xcontrol/xlayersheet.hpp>
|
|
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
|
#include "viewobject/view.base.hpp"
|
|
using xml = KXMLDOMDocument;
|
|
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;
|
|
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;
|
|
xaserverarg arg;
|
|
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.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;
|
}
|
]
|
]
|
]
|