From f7c01240b27f0ad97feb9115b238d7a44b4b56b2 Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期三, 17 七月 2024 17:06:12 +0800
Subject: [PATCH] update

---
 jrj/project/business/SystemSettings/Data.config.cpp | 1108 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 554 insertions(+), 554 deletions(-)

diff --git a/jrj/project/business/SystemSettings/Data.config.cpp b/jrj/project/business/SystemSettings/Data.config.cpp
index f5b5019..c3f0327 100644
--- a/jrj/project/business/SystemSettings/Data.config.cpp
+++ b/jrj/project/business/SystemSettings/Data.config.cpp
@@ -1,571 +1,571 @@
-use "lang.vl"
-use "win.vl"
-use "treeview.vm"
-use "dev:vm[xutil.vm]"
-use "dev:vm[xdwtable.vm]"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[combobox.vm]"
-use "frame.vl"
-use "file.vl"
-use "dev:vm[xlayersheet.vm]"
-use "publiccode.vl"
+#include <wobject/xstring.hpp>
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.vpage
-[
-	DataConfig is extend frame;
-	about DataConfig
-	[
-		field:
-			
-		method:
-		[
-			treeview__	dw_tree;
-			xdwgrid__ dw_list;
-			xdwgrid__ dw_role;
-			combobox__ dw_ddlb;
-			xlayersheet__ m_sheet;
-			
-			int alert(string str)
-			{
-				TApp::alert(this,str,3);
-				return 0;
-			}
-			int createTree(msxml::IXMLDOMElement e, int parentItem)
-			{	
-				if(treeview__::GetChildItem(dw_tree.GetId(), parentItem) > 0) return 0;
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-				var list=e.selectNodes("item");
-				int i=0,s=list.length;
-				msxml::IXMLDOMElement xitem;
-				for (i=0;i<s;i++)
-				{
-					xitem= list.item(s - i - 1);
-					string Name=xitem.selectSingleNode("name").text;
-					string image = xitem.selectSingleNode("image").text;
-					int curItem=treeview__::InsertItem(dw_tree.GetId(), parentItem,0,Name,xitem,image.toInt());
-					string child=xitem.selectSingleNode("child").text;
-					if (child != "0")
-						treeview__::SetItemChild1(dw_tree.GetId(), curItem,1);
-				}
-				return 1;
-			}
-					
-			int OnTreeExpanding(ref TNotifyEvent evt,int p)
-			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int sitem = nmtv.itemNew.hItem;
-					
-				int i = combobox__::GetCurSel(dw_ddlb.GetId());
-				msxml::IXMLDOMElement e = 	treeview__::GetItemData(dw_tree.GetId(), sitem);
-				string id = e.selectSingleNode("id").text;
-				string xid = e.selectSingleNode("tree").text;
-				int hCursor = xutil__::SetCursorWait();
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("pid",id);
-				arg.AddArg("tree",xid);
-				//if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
-				if(url::get("/sale/data/Role.config/pref/user/select",arg.GetString(),x)!=1)
-				{
-					trace("错误返回="+x.GetXml());
-					return -1;	
-				}
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) DataConfig : public xframe
+{
 
-				msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
-				createTree(ele, sitem);
-				xutil__::RestoreCursor(hCursor);
-				return 1;
-			}
-							
-			int OnRetrieve(string id)
-			{
-				int hIcon= xutil__::SetCursorWait();
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("id",id);
-				trace(id);
-				arg.AddArg("flag","-1");
-				//if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
-				if(url::get("/sale/data/Role.config/pref/maint/data",arg.GetString(),x)!=1)
-				{
-					trace("错误返回1="+x.GetXml());
-					return -1;
-				}
+public:
+	xtreeview	dw_tree;
+	xdwgrid dw_list;
+	xdwgrid dw_role;
+	combobox dw_ddlb;
+	xlayersheet m_sheet;
+public:
+	DataConfig(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static DataConfig* CreateInstance(void* implPtr, void* hWnd)
+	{
+		DataConfig* pWin = new DataConfig(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		TApp::alert(this, str, 3);
+		return 0;
+	}
+	int createTree(KXMLDOMElement e, HTREEITEM parentItem)
+	{
+		if (dw_tree.GetChildItem(parentItem) > 0) return 0;
 
-				if(x.GetXml() == "")
-					x.LoadXml("<root><items/><roles/></root>");
-				
-				xml__ x1 = new xml__;
-				x1.setNativePointer(xml__ ::CreateInstance());
-				if(x.GetXmlDoc().selectSingleNode("root/items"))
-				{
-					dw_list.Retrieve(x.GetXmlDoc().selectSingleNode("root/items"));
-					dw_list.SetReadOnly(true);
-					dw_list.Redraw();
-				}
-				else
-				{
-					x1.LoadXml("<items/>");
-					dw_list.Retrieve(x1);
-					dw_list.SetReadOnly(true);
-					dw_list.Redraw();					
-				}
-				if(x.GetXmlDoc().selectSingleNode("root/roles"))
-				{
-					dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("root/roles"));
-					dw_role.SetReadOnly(true);
-					dw_role.Redraw();		
-				}				
-				else
-				{
-					x1.LoadXml("<roles/>");
-					dw_role.Retrieve(x1);
-					dw_role.SetReadOnly(true);
-					dw_role.Redraw();					
-				}
-				xutil__::RestoreCursor(hIcon);
-				return 1;
-			}
+		var list = e.selectNodes(L"item");
+		int i = 0, s = list.length;
+		KXMLDOMElement xitem;
+		for (i = 0; i < s; i++)
+		{
+			xitem = list.item(s - i - 1);
+			xstring Name = xitem.selectSingleNode(L"name").text();
+			xstring image = xitem.selectSingleNode(L"image").text();
+			HTREEITEM curItem = dw_tree.InsertItem(parentItem, 0, Name, xitem, image.toInt());
+			xstring child = xitem.selectSingleNode(L"child").text();
+			if (child != L"0")
+				dw_tree.SetItemChild1(curItem, 1);
+		}
+		return 1;
+	}
 
-			int OnTreeSelecded( ref TNotifyEvent evt,int p)
-			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int hItem = nmtv.itemNew.hItem;					
-				int wid = dw_tree.GetId();				
-				msxml::IXMLDOMElement ele =treeview__::GetItemData(wid,hItem);
-				
-				string id = ele.SelectSingleNode("id").text;
-				OnRetrieve(id);
-				
-				return 1;	
-			}
-				
-			int OnSelect()
-			{
-				int nIndex = combobox__::GetCurSel(dw_ddlb.GetId());
+	int OnTreeExpanding(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
 
-				combobox__ dw_ddlbdata =  new combobox__;
-				dw_ddlbdata.setNativePointer(this.GetControl("dw_ddlbdata"));
-				int h = combobox__::FindString(dw_ddlbdata.GetId(), nIndex.toString());
-				param p;
-				xnode__ bnode;
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode("tree"));
-				if(h < 0)
-				{
-					string str = "<vbox><xtree name='dw_tree"+nIndex.toString()+"' imagelist='0'/></vbox>";
-					bnode = new xnode__;
-					bnode.setNativePointer(SetAgentNodeContent(anode,str));
-				
-					p = combobox__::GetItemData(dw_ddlb.GetId(), nIndex);
-					msxml::IXMLDOMElement ele = p;
-					
-					dw_tree =  new treeview__;
-					dw_tree.setNativePointer(this.GetControl("dw_tree"+nIndex.toString()));
-				
-					createTree(ele, 0);
-					AttachEvent("dw_tree"+nIndex.toString(), "TVN_ITEMEXPANDING",OnTreeExpanding);
-					AttachEvent("dw_tree"+nIndex.toString(), "TVN_SELCHANGED",OnTreeSelecded);
-				
-					int sk = combobox__::AddItem(dw_ddlbdata.GetId(), nIndex.toString());
-					p = bnode;
-					combobox__::SetItemData(dw_ddlbdata.GetId(), sk, p);
-				}
-				else
-				{
-					p = combobox__::GetItemData(dw_ddlbdata.GetId(), h);
-					bnode = p;
-					SetAgentNodeContent(anode,bnode);
-				
-					dw_tree =  new treeview__;
-					dw_tree.setNativePointer(this.GetControl("dw_tree"+nIndex.toString()));
-				}
-				
-				return 1;
-			}
-			
-			int OnSave()
-			{
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				if(m == 0) return 0;
-				
-				int wid = dw_tree.GetId();
-				int hItem=treeview__::GetSelectedItem(wid);				
-				msxml::IXMLDOMElement ele =treeview__::GetItemData(wid,hItem);
-				string id = ele.SelectSingleNode("id").text;
-				string tpy = ele.SelectSingleNode("type").text;
-				
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				e.SetAttribute("id", id);
-				e.SetAttribute("type", tpy);
-				
-				xml__ x1 = new xml__;
-				x1.setNativePointer(xml__ ::CreateInstance());
-				dw_role.DwUpdateAllToEx(x1.GetXmlDoc());
-				msxml::IXMLDOMElement e1 = x1.GetXmlDoc().documentElement;
-				e.AppendChild(e1);
-	
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());		
-				arg.AddArg("content", e.xml);
-				arg.AddArg("dbmap", "Data.config.dbmap");
-				//if(xaserver__::ExecXAction(GetServerUrl(),"[onSave.xa]",arg.GetString(),x)!=1)
-				if(url::get("/sale/data/Role.config/pref/save",arg.GetString(),x)!=1)
-				//if(url::get("/workflow/action/datarole.resource/bill.update",arg.GetString(),x)!=1)
-				{
-					trace("error:"+x.GetXml());
-					alert("保存出错!");
-					return 0;
-				}
-				if(x.GetXmlDoc().selectSingleNode("error"))
-				{
-					alert("保存出错2!");
-					return 0;
-				}
-				dw_list.ResetUpdateStatus();
-				dw_role.ResetUpdateStatus();
-				alert("保存成功!");
-				
-				return 1;
-			}
-			
-			int OnSelectDdlb(ref TNotifyEvent evt,int p)
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				if(e)
-				{
-					var list = e.SelectNodes("//*[@update.new='1' or @update.modify='1' or @update.delete='1']");
-					int s = list.length;
-					if(s>0)
-					{
-						int ret = win__::MessageBox(this.GetHWND(), "当前修改记录未保存,是否保存?","提示",4);
-						if(ret == 6)
-							OnSave();
-					}
-				}
-						
-				OnSelect();
+		HTREEITEM sitem = nmtv.itemNew.hItem;
 
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				string id;
-				if(m == 0)
-				{
-					id = "";
-				}
-				else
-				{
-					msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
-					id = ele.SelectSingleNode("id").text;
-				}
-				OnRetrieve(id);
+		int i = dw_ddlb.GetCurSel();
+		KXMLDOMElement e = dw_tree.GetItemData(sitem);
+		xstring id = e.selectSingleNode(L"id").text();
+		xstring xid = e.selectSingleNode(L"tree").text();
+		HCURSOR hCursor = xutil::SetCursorWait();
+		xml x;
 
-				return 1;
-			}
-			
-			int createTreeRoot()
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("pid","");
-				arg.AddArg("tree","0");
-				//if(xaserver__::ExecXQuery(GetServerUrl(),"[selectRoleInt.xq]",arg.GetString(),x)!=1)
-				if(url::get("/sale/data/Role.config/pref/user/select",arg.GetString(),x)!=1)
-				{
-					trace("错误返回="+x.GetXml());
-					return -1;	
-				}
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				var list = e.SelectNodes("*");
-				int i;
-				int len = list.length;
-				msxml::IXMLDOMElement ele;
-				for(i=0; i<len; i++)
-				{
-					ele= list.item(i);
-					string name = ele.selectSingleNode("@tree").text;
-					int sk = combobox__::AddItem(dw_ddlb.GetId(), name);
-					param p = ele;
-					combobox__::SetItemData(dw_ddlb.GetId(), sk, p);
-				}
-				if(len > 0)
-				{
-					combobox__::SetCurSel(dw_ddlb.GetId(), 0);
-					OnSelect();
-				}
-				OnRetrieve("");
-				return 1;
-			}
-			
-			int OnSetFocus(ref TEvent evt,int p)
-			{
-				SetAgent("data");
-				return 1;
-			}
-				
-			string GetPath()
-			{
-				int h = treeview__::GetSelectedItem(dw_tree.GetId());
-				if(h == 0) return 0;
-				
-				int tv = dw_tree.GetId();
-				string str = treeview__::GetItemLabel(tv, h);
-				int k = treeview__::GetParentItem(tv, h);
-				while(k > 0)
-				{
-					string tmp = treeview__::GetItemLabel(tv, k);
-					str = tmp+"\\" + str;
-					k = treeview__::GetParentItem(tv, k);
-				}
-				return str;
-			}
-				
-			int OnAddRole()
-			{
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				if(m == 0) return -1;
-				msxml::IXMLDOMElement ele =treeview__::GetItemData(dw_tree.GetId(),m);
-				string tpy=""+ele.selectSingleNode("type").text;
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());		
-				arg.AddArg("dataUrl","/sale/data/Role.config/pref/model/select");
-				openUrl("/sale/view/Role.config/xpage/role/select/user", arg);
-				string str = arg.GetArgString("item");
-				if(str == "") return -1;
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				x.LoadXml(str);
-				var list=x.GetXmlDoc().selectNodes("items/item");
-				int i=0,s=list.length;
-				msxml::IXMLDOMElement xitem;
-				int row = dw_role.GetRowCount() + 1;
-				string treepath = GetPath();
-				for (i=0;i<s;i++)
-				{
-					xitem= list.item(i);
-					string id = ""+xitem.selectSingleNode("@id").text;
-					string name=""+xitem.selectSingleNode("@name").text;
-					//string tpy=""+xitem.selectSingleNode("@type").text;
-					dw_role.InsertRow(0);
-					dw_role.SetItemString(row + i, "id", id);
-					dw_role.SetItemString(row + i, "name", ""+treepath);
-					dw_role.SetItemDisplayString(row + i, "name", name);
-					dw_role.SetItemString(row + i, "type", tpy);
-				}
-				return 1;
-			}
-			
-			int OnAddRow()
-			{
-				int m = treeview__::GetSelectedItem(dw_tree.GetId());
-				if(m == 0) return 0;
-				
-				int k = m_sheet.GetSheetIndex();
-				if(k == 0)
-					//openUrl("/sale/view/role.config/xpage/data/select/resource", dw_list);
-					OpenWindow("dev:xpage[Resource.select.data.config.vx]", dw_list);
-				else
-					OnAddRole();
-					
-				return 1;
-			}
-			
-			int OnDelRow()
-			{
-				int k = m_sheet.GetSheetIndex();
-				int row;
-				string hr_type;
-				msxml::IXMLDOMElement e;
-				if(k == 0)
-				{
-					row = dw_list.GetRow();
-					if(row<1 || row > dw_list.GetRowCount()) return -1;
-					e = dw_list.GetRowElement(row);
-					if(e.selectSingleNode("fromparent"))
-					{
-						hr_type = e.selectSingleNode("fromparent").text;
-						if(hr_type != "")
-						{
-							alert("继承的权限无权删除!");
-							return 0;
-						}
-					}
-					dw_list.DeleteRow(row);				
-				}
-				else
-				{
-					row = dw_role.GetRow();
-					if(row<1 || row > dw_role.GetRowCount()) return -1;
-					e = dw_role.GetRowElement(row);
-					if(e.selectSingleNode("fromparent"))
-					{
-						hr_type = e.selectSingleNode("fromparent").text;
-						if(hr_type != "")
-						{
-							alert("继承的权限无权删除!");
-							return 0;
-						}
-					}
-					dw_role.DeleteRow(row);				
-				}
-				
-				return 1;
-			}
-						
-			int OnSetCopy(xdwgrid__ dw, msxml::IXMLDOMElement e, string name)
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				msxml::IXMLDOMElement ele;
-				bool f = false;
-						
-				int count = dw.GetRowCount();
-				if(count == 0)
-				{
-					x.LoadXml("<" + name + "s/>");
-					ele = x.GetXmlDoc().documentElement;
-				}
-				else
-				{
-					msxml::IXMLDOMElement e1  = dw.GetRowElement(1);
-					ele = e1.parentNode;
-				}
-				var li = e.SelectNodes(name);
-				int i;
-				int len = li.length;
-				string treepath = GetPath();
-				for(i=0; i<len; i++)
-				{
-					msxml::IXMLDOMElement ele1= li.item(i);
-					if(ele1.selectSingleNode("fromparent"))
-					{
-						string str = ele1.selectSingleNode("fromparent").text;
-						if(str != "") continue;
-					}
-					xml__ x1 = new xml__;
-					x1.setNativePointer(xml__::CreateInstance());
-					x1.LoadXml(ele1.xml);
-					msxml::IXMLDOMElement ele2 = x1.GetXmlDoc().documentElement;
-					ele2.setAttribute("update.new","1");
-					ele2.setAttribute("update.modify","1");
-					ele2.setAttribute("guid",publiccode::GetGuid());
-					if(ele2.selectSingleNode("name"))
-						ele2.selectSingleNode("name").text = treepath;
-					//ele1.selectSingleNode("@guid").text = publiccode::GetGuid();
-					//ele1.selectSingleNode("@update.new").text = "1";
-					//ele1.selectSingleNode("@update.modify").text = "1";
-					ele.appendChild(ele2);
-				}
-				dw.Retrieve(ele);
-				dw.SetReadOnly(true);
-				dw.Redraw();
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"pid", id);
+		arg.AddArg(L"tree", xid);
+		//if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1)
+		if (xurl::get(L"/sale/data/Role.config/pref/user/select", arg.GetString(), x) != 1)
+		{
+			trace(L"错误返回=L" + (xstring)x.xml());
+			return -1;
+		}
 
-				return 1;
-			}
-						
-			int OnCopy()
-			{
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());		
-				int p = arg.__nativept;
-				OpenWindow("dev:xpage[Data.config.copy.vx]", p);
-				string id = arg.GetArgString("id");
-				string f = arg.GetArgString("flag");
-				if(id == "") return 1;
-				
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				if(url::get("/sale/data/Role.config/pref/maint/data",arg.GetString(),x)!=1)
-				{
-					trace("错误返回="+x.GetXml());
-					return -1;
-				}
+		KXMLDOMElement ele = x.documentElement();
+		createTree(ele, sitem);
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
 
-				if(x.GetXml() == "")
-					x.LoadXml("<root><items/><roles/></root>");
-				
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				
-				if(f == "0" || f == "1") 
-				{
-					msxml::IXMLDOMElement ele1 = e.selectSingleNode("items");
-					OnSetCopy(dw_list, ele1, "item");
-				}
-				
-				if(f == "0" || f == "2") 
-				{
-					msxml::IXMLDOMElement ele2 = e.selectSingleNode("roles")
-					OnSetCopy(dw_role, ele2, "role");
-				}
-				
-				return 1;
-			}
-			
-			int OnCmdDispatch(string comdid)
+	int OnRetrieve(xstring id)
+	{
+		HCURSOR hIcon = xutil::SetCursorWait();
+		xml x;
+
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"id", id);
+		trace(id);
+		arg.AddArg(L"flag", L"-1");
+		//if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1)
+		if (xurl::get(L"/sale/data/Role.config/pref/maint/data", arg.GetString(), x) != 1)
+		{
+			trace(L"错误返回1=L" + (xstring)x.xml());
+			return -1;
+		}
+
+		if (x.xml() == L"")
+			x.loadXML(L"<root><items/><roles/></root>");
+
+		xml x1;
+
+		if (x.selectSingleNode(L"root/items"))
+		{
+			dw_list.Retrieve(x.selectSingleNode(L"root/items"));
+			dw_list.SetReadOnly(true);
+			dw_list.Redraw();
+		}
+		else
+		{
+			x1.loadXML(L"<items/>");
+			dw_list.Retrieve(x1);
+			dw_list.SetReadOnly(true);
+			dw_list.Redraw();
+		}
+		if (x.selectSingleNode(L"root/roles"))
+		{
+			dw_role.Retrieve(x.selectSingleNode(L"root/roles"));
+			dw_role.SetReadOnly(true);
+			dw_role.Redraw();
+		}
+		else
+		{
+			x1.loadXML(L"<roles/>");
+			dw_role.Retrieve(x1);
+			dw_role.SetReadOnly(true);
+			dw_role.Redraw();
+		}
+		xutil::RestoreCursor(hIcon);
+		return 1;
+	}
+
+	int OnTreeSelecded(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		//int wid = dw_tree.GetId();				
+		KXMLDOMElement ele = dw_tree.GetItemData(hItem);
+
+		xstring id = ele.selectSingleNode(L"id").text();
+		OnRetrieve(id);
+
+		return 1;
+	}
+
+	int OnSelect()
+	{
+		int nIndex = dw_ddlb.GetCurSel();
+
+		combobox dw_ddlbdata = new combobox;
+		dw_ddlbdata.setNativePointer(GetControl(L"dw_ddlbdata"));
+		int h = combobox::FindString(dw_ddlbdata.GetId(), xstring(nIndex));
+		param p;
+		xnode bnode;
+		xnode anode = new xnode;
+		anode.setNativePointer(GetAgentNode(L"tree"));
+		if (h < 0)
+		{
+			xstring str = L"<vbox><xtree name='dw_tree" + xstring(nIndex) + L"' imagelist='0'/></vbox>";
+			bnode = new xnode;
+			bnode.setNativePointer(SetAgentNodeContent(anode, str));
+
+			p = combobox::GetItemData(dw_ddlb.GetId(), nIndex);
+			KXMLDOMElement ele = p;
+
+			dw_tree = new treeview;
+			dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex)));
+
+			createTree(ele, 0);
+			AttachEvent(L"dw_tree" + xstring(nIndex), L"TVN_ITEMEXPANDING", (FEvent)&DataConfig::OnTreeExpanding);
+			AttachEvent(L"dw_tree" + xstring(nIndex), L"TVN_SELCHANGED", (FEvent)&DataConfig::OnTreeSelecded);
+
+			int sk = combobox::AddItem(dw_ddlbdata.GetId(), xstring(nIndex));
+			p = bnode;
+			combobox::SetItemData(dw_ddlbdata.GetId(), sk, p);
+		}
+		else
+		{
+			p = combobox::GetItemData(dw_ddlbdata.GetId(), h);
+			bnode = p;
+			SetAgentNodeContent(anode, bnode);
+
+			dw_tree = new treeview;
+			dw_tree.setNativePointer(GetControl(L"dw_tree" + xstring(nIndex)));
+		}
+
+		return 1;
+	}
+
+	int OnSave()
+	{
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		if (m == 0) return 0;
+
+		//int wid = dw_tree.GetId();
+		HTREEITEM hItem = dw_tree.GetSelectedItem();
+		KXMLDOMElement ele = dw_tree.GetItemData(hItem);
+		xstring id = ele.selectSingleNode(L"id").text();
+		xstring tpy = ele.selectSingleNode(L"type").text();
+
+		xml x;
+
+		dw_list.DwUpdateAllToEx(x);
+		KXMLDOMElement e = x.documentElement();
+		e.setAttribute(L"id", id);
+		e.setAttribute(L"type", tpy);
+
+		xml x1;
+
+		dw_role.DwUpdateAllToEx(x1);
+		KXMLDOMElement e1 = x1.documentElement();
+		e.appendChild(e1);
+
+		xaserverarg arg;
+
+		arg.AddArg(L"content", e.xml());
+		arg.AddArg(L"dbmap", L"Data.config.dbmap");
+		//if(xaserver::ExecXAction(GetServerUrl(),L"[onSave.xa]",arg.GetString(),x)!=1)
+		if (xurl::get(L"/sale/data/Role.config/pref/save", arg.GetString(), x) != 1)
+			//if(xurl::get(L"/workflow/action/datarole.resource/bill.update",arg.GetString(),x)!=1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存出错!");
+			return 0;
+		}
+		if (x.selectSingleNode(L"error"))
+		{
+			alert(L"保存出错2!");
+			return 0;
+		}
+		dw_list.ResetUpdateStatus();
+		dw_role.ResetUpdateStatus();
+		alert(L"保存成功!");
+
+		return 1;
+	}
+
+	int OnSelectDdlb(TEvent* evt, LPARAM p)
+	{
+		xml x;
+
+		dw_list.DwUpdateAllToEx(x);
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			var list = e.selectNodes(L"//*[@update.new='1' or @update.modify='1' or @update.delete='1']");
+			int s = list.length;
+			if (s > 0)
 			{
-				if(comdid == "Config")
-					openUrl("/sale/view/role.config/xpage/data/resource/config");
-				if(comdid == "RightQuery")
-					openUrl("/sale/view/role.config/xpage/data/modulerightquery");
-				else if(comdid == "New")
-					OnAddRow();
-				else if(comdid == "Del")
-					OnDelRow();
-				else if(comdid == "Save")
+				int ret = MessageBox(GetHWND(), L"当前修改记录未保存,是否保存?", L"提示", 4);
+				if (ret == 6)
 					OnSave();
-				else if(comdid == "Copy")
-					OnCopy();
-				else if(comdid == "xmProdDivi")
-					openUrl("/sale/view/RoleAccount3/xpage/data/proddivi");
-				return 0;
 			}
+		}
 
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
+		OnSelect();
 
-			int onload()
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		xstring id;
+		if (m == 0)
+		{
+			id = L"";
+		}
+		else
+		{
+			KXMLDOMElement ele = dw_tree.GetItemData(m);
+			id = ele.selectSingleNode(L"id").text();
+		}
+		OnRetrieve(id);
+
+		return 1;
+	}
+
+	int createTreeRoot()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		arg.AddArg(L"pid", L"");
+		arg.AddArg(L"tree", L"0");
+		//if(xaserver::ExecXQuery(GetServerUrl(),L"[selectRoleInt.xq]",arg.GetString(),x)!=1)
+		if (xurl::get(L"/sale/data/Role.config/pref/user/select", arg.GetString(), x) != 1)
+		{
+			trace(L"错误返回=L" + (xstring)x.xml());
+			return -1;
+		}
+		KXMLDOMElement e = x.documentElement();
+		var list = e.selectNodes(L"*");
+		int i;
+		int len = list.length;
+		KXMLDOMElement ele;
+		for (i = 0; i < len; i++)
+		{
+			ele = list.item(i);
+			xstring name = ele.selectSingleNode(L"@tree").text();
+			int sk = combobox::AddItem(dw_ddlb.GetId(), name);
+			param p = ele;
+			combobox::SetItemData(dw_ddlb.GetId(), sk, p);
+		}
+		if (len > 0)
+		{
+			combobox::SetCurSel(dw_ddlb.GetId(), 0);
+			OnSelect();
+		}
+		OnRetrieve(L"");
+		return 1;
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"data");
+		return 1;
+	}
+
+	xstring GetPath()
+	{
+		HTREEITEM h = dw_tree.GetSelectedItem();
+		if (h == 0) return 0;
+
+		//int tv = dw_tree.GetId();
+		xstring str = dw_tree.GetItemLabel(h);
+		HTREEITEM k = dw_tree.GetParentItem(h);
+		while (k > 0)
+		{
+			xstring tmp = dw_tree.GetItemLabel(k);
+			str = tmp + L"\\" + str;
+			k = dw_tree.GetParentItem(k);
+		}
+		return str;
+	}
+
+	int OnAddRole()
+	{
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		if (m == 0) return -1;
+		KXMLDOMElement ele = dw_tree.GetItemData(m);
+		xstring tpy = L"" + (xstring)ele.selectSingleNode(L"type").text();
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"dataUrl", L"/sale/data/Role.config/pref/model/select");
+		openUrl(L"/sale/view/Role.config/xpage/role/select/user", arg);
+		xstring str = arg.GetArgString(L"item");
+		if (str == L"") return -1;
+		xml x;
+
+		x.loadXML(str);
+		var list = x.selectNodes(L"items/item");
+		int i = 0, s = list.length;
+		KXMLDOMElement xitem;
+		int row = dw_role.GetRowCount() + 1;
+		xstring treepath = GetPath();
+		for (i = 0; i < s; i++)
+		{
+			xitem = list.item(i);
+			xstring id = L"" + (xstring)xitem.selectSingleNode(L"@id").text();
+			xstring name = L"" + (xstring)xitem.selectSingleNode(L"@name").text();
+			//xstring tpy=L""+xitem.selectSingleNode(L"@type").text();
+			dw_role.InsertRow(0);
+			dw_role.SetItemString(row + i, L"id", id);
+			dw_role.SetItemString(row + i, L"name", L"" + treepath);
+			dw_role.SetItemDisplayString(row + i, L"name", name);
+			dw_role.SetItemString(row + i, L"type", tpy);
+		}
+		return 1;
+	}
+
+	int OnAddRow()
+	{
+		HTREEITEM m = dw_tree.GetSelectedItem();
+		if (m == 0) return 0;
+
+		int k = m_sheet.GetSheetIndex();
+		if (k == 0)
+			//openUrl(L"/sale/view/role.config/xpage/data/select/resource", dw_list);
+			OpenWindow(L"dev:xpage[Resource.select.data.config.vx]", dw_list);
+		else
+			OnAddRole();
+
+		return 1;
+	}
+
+	int OnDelRow()
+	{
+		int k = m_sheet.GetSheetIndex();
+		int row;
+		xstring hr_type;
+		KXMLDOMElement e;
+		if (k == 0)
+		{
+			row = dw_list.GetRow();
+			if (row<1 || row > dw_list.GetRowCount()) return -1;
+			e = dw_list.GetRowElement(row);
+			if (e.selectSingleNode(L"fromparent"))
 			{
-				SetAgent("data");
-				
-				dw_list = new xdwgrid__;
-				dw_list.setNativePointer(GetControl("dw_list"));
-				dw_list.openUrl("/sale/view/Role.config/template/data/config/resourceOrg");
-				dw_list.SetReadOnly(false);
-				
-				dw_role = new xdwgrid__;
-				dw_role.setNativePointer(GetControl("dw_role"));	
-				//dw_role.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/role]");
-				//dw_role.openUrl(m_vface+"/template/role/config/role");
-				dw_role.openUrl("/sale/view/Role.config/template/role/config/role");
-				dw_role.SetReadOnly(false);
-				
-				dw_ddlb =  new combobox__;
-				dw_ddlb.setNativePointer(this.GetControl("dw_ddlb"));
-				
-				m_sheet =  new xlayersheet__;
-				m_sheet.setNativePointer(this.GetControl("m_sheet"));
-								
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("dw_ddlb","CBN_SELCHANGE",OnSelectDdlb);
-				
-				createTreeRoot();
-				
-				return 1;
+				hr_type = e.selectSingleNode(L"fromparent").text();
+				if (hr_type != L"")
+				{
+					alert(L"继承的权限无权删除!");
+					return 0;
+				}
 			}
-		]
-	]
-]
\ No newline at end of file
+			dw_list.DeleteRow(row);
+		}
+		else
+		{
+			row = dw_role.GetRow();
+			if (row<1 || row > dw_role.GetRowCount()) return -1;
+			e = dw_role.GetRowElement(row);
+			if (e.selectSingleNode(L"fromparent"))
+			{
+				hr_type = e.selectSingleNode(L"fromparent").text();
+				if (hr_type != L"")
+				{
+					alert(L"继承的权限无权删除!");
+					return 0;
+				}
+			}
+			dw_role.DeleteRow(row);
+		}
+
+		return 1;
+	}
+
+	int OnSetCopy(xdwgrid dw, KXMLDOMElement e, xstring name)
+	{
+		xml x;
+
+		KXMLDOMElement ele;
+		bool f = false;
+
+		int count = dw.GetRowCount();
+		if (count == 0)
+		{
+			x.loadXML(L"<" + name + L"s/>");
+			ele = x.documentElement();
+		}
+		else
+		{
+			KXMLDOMElement e1 = dw.GetRowElement(1);
+			ele = e1.parentNode;
+		}
+		var li = e.selectNodes(name);
+		int i;
+		int len = li.length;
+		xstring treepath = GetPath();
+		for (i = 0; i < len; i++)
+		{
+			KXMLDOMElement ele1 = li.item(i);
+			if (ele1.selectSingleNode(L"fromparent"))
+			{
+				xstring str = ele1.selectSingleNode(L"fromparent").text();
+				if (str != L"") continue;
+			}
+			xml x1;
+
+			x1.loadXML(ele1.xml());
+			KXMLDOMElement ele2 = x1.documentElement();
+			ele2.setAttribute(L"update.new", L"1");
+			ele2.setAttribute(L"update.modify", L"1");
+			ele2.setAttribute(L"guid", publiccode::GetGuid());
+			if (ele2.selectSingleNode(L"name"))
+				ele2.selectSingleNode(L"name").text() = treepath;
+			//ele1.selectSingleNode(L"@guid").text() = publiccode::GetGuid();
+			//ele1.selectSingleNode(L"@update.new").text() = L"1";
+			//ele1.selectSingleNode(L"@update.modify").text() = L"1";
+			ele.appendChild(ele2);
+		}
+		dw.Retrieve(ele);
+		dw.SetReadOnly(true);
+		dw.Redraw();
+
+		return 1;
+	}
+
+	int OnCopy()
+	{
+		xaserverarg arg;
+
+		OpenWindow(L"dev:xpage[Data.config.copy.vx]", arg);
+		xstring id = arg.GetArgString(L"id");
+		xstring f = arg.GetArgString(L"flag");
+		if (id == L"") return 1;
+
+		xml x;
+
+		if (xurl::get(L"/sale/data/Role.config/pref/maint/data", arg.GetString(), x) != 1)
+		{
+			trace(L"错误返回=L" + (xstring)x.xml());
+			return -1;
+		}
+
+		if (x.xml() == L"")
+			x.loadXML(L"<root><items/><roles/></root>");
+
+		KXMLDOMElement e = x.documentElement();
+
+		if (f == L"0" || f == L"1")
+		{
+			KXMLDOMElement ele1 = e.selectSingleNode(L"items");
+			OnSetCopy(dw_list, ele1, L"item");
+		}
+
+		if (f == L"0" || f == L"2")
+		{
+			KXMLDOMElement ele2 = e.selectSingleNode(L"roles");
+			OnSetCopy(dw_role, ele2, L"role");
+		}
+
+		return 1;
+	}
+
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"Config")
+			openUrl(L"/sale/view/role.config/xpage/data/resource/config");
+		if (comdid == L"RightQuery")
+			openUrl(L"/sale/view/role.config/xpage/data/modulerightquery");
+		else if (comdid == L"New")
+			OnAddRow();
+		else if (comdid == L"Del")
+			OnDelRow();
+		else if (comdid == L"Save")
+			OnSave();
+		else if (comdid == L"Copy")
+			OnCopy();
+		else if (comdid == L"xmProdDivi")
+			openUrl(L"/sale/view/RoleAccount3/xpage/data/proddivi");
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int onload()
+	{
+		SetAgent(L"data");
+
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"/sale/view/Role.config/template/data/config/resourceOrg");
+		dw_list.SetReadOnly(false);
+
+		dw_role = new xdwgrid;
+		dw_role.setNativePointer(GetControl(L"dw_role"));
+		//dw_role.SetDataObject(GetServerUrl(), L"dev:sheet[leftFrame.tpl/role]");
+		//dw_role.openUrl(m_vface+L"/template/role/config/role");
+		dw_role.openUrl(L"/sale/view/Role.config/template/role/config/role");
+		dw_role.SetReadOnly(false);
+
+		dw_ddlb = new combobox;
+		dw_ddlb.setNativePointer(GetControl(L"dw_ddlb"));
+
+		m_sheet = new xlayersheet;
+		m_sheet.setNativePointer(GetControl(L"m_sheet"));
+
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&DataConfig::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&DataConfig::OnSetFocus);
+		AttachEvent(L"dw_ddlb", L"CBN_SELCHANGE", (FEvent)&DataConfig::OnSelectDdlb);
+
+		createTreeRoot();
+
+		return 1;
+	}
+};
\ No newline at end of file

--
Gitblit v1.9.3