From b1d01ea6fa62ce12c2e592b3315186f6b3c8359d Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期三, 17 七月 2024 15:20:38 +0800
Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/mis-prj

---
 jrj/project/business/SystemSettings/ProcessManagement_A.cpp         |  513 +++
 jrj/project/business/SystemSettings/view.assignadjust.cpp           |  278 +
 jrj/project/business/BasicCode/TestingCompanyMaint.cpp              |    1 
 jrj/project/business/SystemSettings/Organization_A.cpp              |  513 +++
 jrj/project/business/SystemSettings/AddUserGroup.cpp                |  183 +
 jrj/project/business/SystemSettings/Developer.Synch.cpp             |  432 ++
 jrj/ext-jrj/ext-jrj.vcxproj.filters                                 |   72 
 jrj/project/business/SystemSettings/FlowTermImport.cpp              |  177 +
 jrj/project/business/SystemSettings/GroupManagerList_A.cpp          | 1576 ++++++++++
 jrj/project/business/SystemSettings/TestRetrieveing.cpp             |   67 
 jrj/project/business/SystemSettings/AddUser.cpp                     |  229 +
 jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp  | 1576 ++++++++++
 jrj/project/business/SystemSettings/level.Customer.v3.cpp           |  375 ++
 jrj/project/business/BasicCode/ForwarderMaint.cpp                   |    2 
 jrj/project/business/BasicCode/CustomerMarketMaint.cpp              |    1 
 jrj/project/business/SystemSettings/Data.config.cpp                 |  571 +++
 jrj/project/business/SystemSettings/UserImport.cpp                  |  329 ++
 jrj/project/business/SystemSettings/SysUser.cpp                     |  330 ++
 jrj/project/business/SystemSettings/BindComputer.cpp                |  106 
 jrj/project/business/SystemSettings/Role.config.cpp                 |  548 +++
 jrj/project/business/SystemSettings/LogList.cpp                     |  217 +
 jrj/project/business/BasicCode/ShipcompanyMaint.cpp                 |    1 
 jrj/project/business/SystemSettings/FlowTermSelect.cpp              |  176 +
 jrj/project/business/SystemSettings/SysLoginRecord.cpp              |  101 
 jrj/project/business/BasicCode/ExpressMaint.cpp                     |    1 
 jrj/project/business/SystemSettings/Flow3.cpp                       |  476 +++
 jrj/project/business/SystemSettings/Resource.select.data.config.cpp |   93 
 jrj/project/business/SystemSettings/maint.Level.Customer3.cpp       |   88 
 jrj/project/business/SystemSettings/UserPassDlg.cpp                 |  147 
 jrj/ext-jrj/ext-jrj.vcxproj                                         |   69 
 30 files changed, 9,247 insertions(+), 1 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 4013c16..26b4f29 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -817,6 +817,75 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\AddUser.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\AddUserGroup.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\BindComputer.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Buglist.Developer.hxsoft_A.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Data.config.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Developer.Synch.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Flow3.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\FlowTermImport.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\FlowTermSelect.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\GroupManagerList_A.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\level.Customer.v3.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\LogList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\maint.Level.Customer3.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Organization_A.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\ProcessManagement_A.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Resource.select.data.config.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Role.config.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\SysLoginRecord.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\SysUser.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\TestRetrieveing.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\UserImport.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\UserPassDlg.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\view.assignadjust.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\project\business\VATNotify\list.vatnotify.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters
index 965a48d..7fdd5ce 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj.filters
+++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -118,6 +118,9 @@
     <Filter Include="project\business\BasicCode">
       <UniqueIdentifier>{64c23153-69c8-4db3-9225-9e5375e489ff}</UniqueIdentifier>
     </Filter>
+    <Filter Include="project\business\SystemSettings">
+      <UniqueIdentifier>{9d76dee1-2190-4b2c-8f17-bd2e54140f7d}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="framework.h">
@@ -1019,5 +1022,74 @@
     <ClCompile Include="..\project\business\BasicCode\TypeList.maint.supplier.cpp">
       <Filter>project\business\BasicCode</Filter>
     </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\AddUser.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\AddUserGroup.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\BindComputer.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Buglist.Developer.hxsoft_A.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Data.config.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Developer.Synch.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Flow3.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\FlowTermImport.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\FlowTermSelect.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\GroupManagerList_A.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\level.Customer.v3.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\LogList.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\maint.Level.Customer3.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Organization_A.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\ProcessManagement_A.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Resource.select.data.config.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Role.config.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\SysLoginRecord.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\SysUser.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\TestRetrieveing.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\UserImport.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\UserPassDlg.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\view.assignadjust.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CustomerMarketMaint.cpp b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
index ec84f4f..c220d4d 100644
--- a/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
+++ b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
@@ -17,6 +17,7 @@
 	xstring ContactID;
 	xdwtable dw_base;
 	xcell dw_cell;
+	xstring m_EntityID = L"";
 public:
 	CustomerMarketMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
 public:
diff --git a/jrj/project/business/BasicCode/ExpressMaint.cpp b/jrj/project/business/BasicCode/ExpressMaint.cpp
index ce669d1..440ba75 100644
--- a/jrj/project/business/BasicCode/ExpressMaint.cpp
+++ b/jrj/project/business/BasicCode/ExpressMaint.cpp
@@ -17,6 +17,7 @@
 	xstring m_username;
 	xstring ContactID;
 	xcell dw_cell;
+	xstring m_EntityID = L"";
 public:
 	ExpressMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
 public:
diff --git a/jrj/project/business/BasicCode/ForwarderMaint.cpp b/jrj/project/business/BasicCode/ForwarderMaint.cpp
index 89951e0..cf41bc5 100644
--- a/jrj/project/business/BasicCode/ForwarderMaint.cpp
+++ b/jrj/project/business/BasicCode/ForwarderMaint.cpp
@@ -18,7 +18,7 @@
 	xstring m_username;
 	xstring ContactID;
 	xcell dw_cell;
-
+	xstring m_EntityID = L"";
 public:
 	ForwarderMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
 public:
diff --git a/jrj/project/business/BasicCode/ShipcompanyMaint.cpp b/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
index 1d88656..bf9d254 100644
--- a/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
+++ b/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
@@ -16,6 +16,7 @@
 	xstring m_username;
 	xstring ContactID;
 	xdwtable dw_base;
+	xstring m_EntityID = L"";
 	xcell dw_cell;
 public:
 	ShipcompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
diff --git a/jrj/project/business/BasicCode/TestingCompanyMaint.cpp b/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
index 12a369a..c511fff 100644
--- a/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
+++ b/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
@@ -17,6 +17,7 @@
 	xstring ContactID;
 	xdwtable dw_base;
 	xcell dw_cell;
+	xstring m_EntityID = L"";
 public:
 	TestingCompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
 public:
diff --git a/jrj/project/business/SystemSettings/AddUser.cpp b/jrj/project/business/SystemSettings/AddUser.cpp
new file mode 100644
index 0000000..3d9c416
--- /dev/null
+++ b/jrj/project/business/SystemSettings/AddUser.cpp
@@ -0,0 +1,229 @@
+use "win.vl"
+use "treeview.vm"
+use "dev:vm[xdwgrid.vm]"
+use "dev:vm[xdwtable.vm]"
+use "pref.vl"
+use "dev:vm[xml.vm]"
+use "dev:vm[xaserverarg.vm]"
+use "dev:vm[xaserver.vm]"
+use "dev:vm[xutil.vm]"
+use "dev:code[pa.tpp]"
+use "dev:vm[control.vm]"
+#include "dev:xpage[SysUser.vx]"
+
+unit vbusiness.xpage tpp
+[
+	class pa
+	{
+		string note;
+		int hitem;
+		int row;
+		int wid;
+		treeview__ tv;
+		xdwgrid__ dw;
+		win__ pwin;
+	}
+]
+
+unit vbusiness.xpage
+[
+	AddUser is extend win__;
+	about AddUser
+	[
+		control:
+		
+		method:
+		[
+			pa p;
+			
+			int SetAgent()
+			{
+				return 1;
+			}
+			//焦点激活处理函数
+			int OnSetFocus(ref TEvent evt,int param)
+			{
+				int SetAgent();
+
+				//重置工具条
+				return 1;
+			}
+			int AppendItem(xml__ x,msxml::IXMLDOMElement r,string item){
+				var e = x.GetXmlDoc().createElement(item);
+				//xcontrol xc = GetControl(item);
+				control__ xc = new control__;
+				xc.setNativePointer(this.GetControl(item));
+				e.text = xc.GetText();
+				r.appendChild(e);		
+				return 1;
+			}
+			
+			int OnSave()
+			{
+				control__ xc = new control__;
+				/*xc=GetControl("EmployeeNo");
+				if (xc.GetText()=="")
+				{
+					alert("用户代码不能为空!");
+					return 0;
+				}*/
+				xc=GetControl("UserName");
+				if (xc.GetText()=="")
+				{
+					alert("用户名称不能为空!");
+					return 0;
+				}		
+				xml__ x = new xml__;
+				x.setNativePointer(x.CreateInstance());
+				xaserverarg__ arg = new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());
+				x.LoadXml("<SysUser/>");
+				var r = x.GetXmlDoc().documentElement;
+				string guid;
+				string guid1;
+				if (p.note=="修改")
+				{
+					msxml::IXMLDOMElement ele=xdwgrid__::GetRowElement(p.row);
+					guid = ele.selectSingleNode("UserID").text;
+					//guid=ele.getAttribute("guid");
+					//if (ele.selectSingleNode("empid"))
+					//	r.appendChild(ele.selectSingleNode("empid"));			
+				}
+				else
+					guid=win__::GetGuid();
+					//guid1=win32::GetGuid();
+				r.setAttribute("guid",guid);
+				//r.setAttribute("guid1",guid1);
+				//AppendItem(x,r,"EmployeeNo");
+				AppendItem(x,r,"UserName");
+				AppendItem(x,r,"PassWord");
+				AppendItem(x,r,"Status");
+				//trace(x.GetXml());
+				//return 1;
+				arg.AddArg("content",x.GetXml());
+				int ls_item = treeview__::GetSelectedItem(p.wid);
+				msxml::IXMLDOMElement e=treeview__::GetItemData(p.wid,ls_item);
+				string gpguid=e.selectSingleNode("@guid").text;
+				arg.AddArg("gpguid",gpguid);			
+				if (xaserver__::ExecXAction(GetServerUrl(),"[update.User.xa]",arg.GetString())==1)
+				{
+					alert("ok");
+					if (p.note=="修改")
+					{
+						xdwgrid__ dw = new xdwgrid__;
+						//dw.setNativePointer(p.dw_user);
+						int row = dw.GetNextSelectRow(0);
+						//dw.SetItemString(row,"UserName","");
+						msxml::IXMLDOMElement e;
+						e = x.GetXmlDoc().documentElement;
+						string ls_pass = e.selectSingleNode("PassWord").text;
+						string ls_status = e.selectSingleNode("Status").text;
+						dw.SetItemString(row,"PassWord",ls_pass);
+						dw.SetItemString(row,"Status",ls_status);
+						dw.Redraw();
+					}
+					else
+					{
+					//----------
+						//p.pwin.OnTreeSelChanged();
+					}
+				}
+				else
+				{
+					alert("保存出错!");
+					return 0;
+				}
+				return 1;		
+			}
+			
+			int ClearItem(string item)
+			{
+				control__ xc = new control__;
+				xc.setNativePointer(GetControl(item));
+				xc.SetText("");
+				return 1;
+			}
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if (comdid=="cb_cancel")
+					CloseWindow();
+				else if(comdid=="cb_ok")
+				{
+					int r=OnSave();
+					if (r==1)
+						CloseWindow();
+				}
+				else if(comdid=="cb_save")
+				{
+					OnSave();
+					p.note="新增";
+					win__::SetWindowText(GetHWND(),p.note+"用户");
+					ClearItem("userno");
+					ClearItem("username");
+					ClearItem("pwd");
+				}
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int param)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+				//获取焦点事件,用于重置工具条
+				AttachEvent("WM_SETFOCUS",OnSetFocus);
+			}
+			
+			int OnInitial()
+			{
+				SetAgent();
+
+				OnAttachEvent();
+				
+				return 1;
+			}
+			
+			int SetItem(string value,string item){
+				control__ xc = new control__;
+				xc.setNativePointer(GetControl(item));
+				xc.SetText(value);	
+				return 1;
+			}	
+			int onload()
+			{
+				OnInitial();
+				p = new pa;
+				
+				if(this.GetParam())
+				{
+					p=GetParam();
+					win__::SetWindowText(GetHWND(),p.note+"用户");
+					if (p.note=="修改")
+					{
+						xdwgrid__ dw = new xdwgrid__;
+						dw.setNativePointer(p.dw);
+						msxml::IXMLDOMElement ele=dw.GetRowElement(p.row);
+						//if(ele.selectSingleNode("EmployeeNo"))
+							//SetItem(ele.selectSingleNode("EmployeeNo").text,"EmployeeNo");
+						if(ele.selectSingleNode("UserName"))
+							SetItem(ele.selectSingleNode("UserName").text,"UserName");
+						if(ele.selectSingleNode("PassWord"))
+							SetItem(ele.selectSingleNode("PassWord").text,"PassWord");
+						if(ele.selectSingleNode("Status"))
+							SetItem(ele.selectSingleNode("Status").text,"Status");
+					trace("Aa");
+					return 1;
+					}
+				}		
+				return 1;
+			}
+		]
+		
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/AddUserGroup.cpp b/jrj/project/business/SystemSettings/AddUserGroup.cpp
new file mode 100644
index 0000000..fc7a253
--- /dev/null
+++ b/jrj/project/business/SystemSettings/AddUserGroup.cpp
@@ -0,0 +1,183 @@
+use "win.vl"
+use "treeview.vm"
+use "dev:vm[xdwgrid.vm]"
+use "dev:vm[xdwtable.vm]"
+use "pref.vl"
+use "dev:vm[xml.vm]"
+use "dev:vm[xaserverarg.vm]"
+use "dev:vm[xaserver.vm]"
+use "dev:vm[xutil.vm]"
+use "dev:code[pa.tpp]"
+use "dev:vm[control.vm]"
+
+unit vbusiness.xpage tpp
+[
+	class pa
+	{
+		string note;
+		int hitem;
+		int row;
+		int wid;
+		treeview__ tv;
+		xdwgrid__ dw;
+		win__ pwin;
+	}
+]
+			
+unit vbusiness.xpage
+[
+
+	AddUserGroup is extend win__;
+	about AddUserGroup
+	[
+		control:
+		
+		method:
+		[
+			pa p;
+			
+			int SetAgent()
+			{
+				return 1;
+			}
+			//焦点激活处理函数
+			int OnSetFocus(ref TEvent evt,int p)
+			{
+				int SetAgent();
+
+				//重置工具条
+				return 1;
+			}
+			int AppendItem(xml__ x,msxml::IXMLDOMElement r,string item){
+				var e = x.GetXmlDoc().createElement(item);
+				control__ xc = new control__;
+				xc.setNativePointer(this.GetControl(item));
+				e.text = xc.GetText();
+				r.appendChild(e);		
+				return 1;
+			}	
+			int AppendAttrib(xml__ x,msxml::IXMLDOMElement r,string item){
+				var e = x.GetXmlDoc().createElement(item);
+				//xcontrol xc = GetControl(item);
+				control__ xc = new control__;
+				xc.setNativePointer(this.GetControl(item));
+				e.text = xc.GetText();
+				r.setAttribute(item,xc.GetText());
+				return 1;
+			}	
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if (comdid=="cb_cancel")
+					CloseWindow();
+				else if(comdid=="cb_ok")
+				{
+					int wid = p.wid;
+					xml__ x = new xml__;
+					x.setNativePointer(x.CreateInstance());
+					xaserverarg__ arg = new xaserverarg__;
+					arg.setNativePointer(arg.CreateInstance());
+					x.LoadXml("<row/>");
+					var r = x.GetXmlDoc().documentElement;
+					string gpguid;
+					if (p.note=="修改")
+					{
+						msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,p.hitem);
+						gpguid=ele.selectSingleNode("@JobID").text;
+					}
+					else
+						gpguid=win__::GetGuid();
+					r.setAttribute("JobID",gpguid);
+					AppendAttrib(x,r,"JobName");
+					AppendAttrib(x,r,"JobType");
+					//AppendItem(x,r,"JobName");
+					//AppendItem(x,r,"JobType");
+					//trace(x.GetXml());
+					//return 1;
+					arg.AddArg("content",x.GetXml());
+					if (xaserver__::ExecXAction(GetServerUrl(),"[update.Usergroup.xa]",arg.GetString())==1)
+					{
+						control__ xc = new control__;
+						xc.setNativePointer(this.GetControl("JobName"));
+						//p.tv.Redraw();
+						if (p.note=="修改")
+						{
+							treeview__::SetItemData(wid,p.hitem,r);
+							treeview__::SetItemLabel(wid,p.hitem,xc.GetText());
+						}
+						else
+						{
+							int root = treeview__::GetRootItem(wid);
+							treeview__::InsertChildItem(wid,root,xc.GetText(),r,15);
+						}
+						CloseWindow();
+					}
+					else
+					{
+						alert("保存出错!");
+					}
+				}
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+				//获取焦点事件,用于重置工具条
+				AttachEvent("WM_SETFOCUS",OnSetFocus);
+			}
+			
+			int OnInitial()
+			{
+				SetAgent();
+
+				OnAttachEvent();
+				
+				return 1;
+			}
+			
+			int SetItem(string value,string item){
+				control__ xc = new control__;
+				xc.setNativePointer(GetControl(item));
+				xc.SetText(value);	
+				return 1;
+			}	
+			
+			int onload()
+			{
+				OnInitial();
+				p = new pa;
+				
+				if(this.GetParam())
+				{
+					p=GetParam();
+					win__::SetWindowText(GetHWND(),p.note+"用户组");
+					if (p.note=="修改")
+					{
+						int wid = p.wid;
+						msxml::IXMLDOMElement ele=treeview__::GetItemData(wid,p.hitem);
+						//trace(ele.xml);
+						//SetItem(ele.selectSingleNode("gpno").text,"gpno");
+						//SetItem(ele.selectSingleNode("gpname").text,"gpname");
+						string ls_guid = ele.selectSingleNode("@JobID").text;
+						string ls_name = ele.selectSingleNode("@JobName").text;
+						string ls_type = ele.selectSingleNode("@JobType").text;
+						SetItem(ls_guid,"JobID");
+						SetItem(ls_name,"JobName");
+						SetItem(ls_type,"JobType");
+					}
+				}
+				
+				return 1;
+			}
+		]
+		
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/BindComputer.cpp b/jrj/project/business/SystemSettings/BindComputer.cpp
new file mode 100644
index 0000000..0af3e7f
--- /dev/null
+++ b/jrj/project/business/SystemSettings/BindComputer.cpp
@@ -0,0 +1,106 @@
+use"lang.vl"
+use "win.vl"
+use "dev:vm[xdwgrid.vm]"
+
+unit vbusiness.vpage
+[
+	BindComputerDlgNew is extend win__;
+	about BindComputerDlgNew
+	[
+		field:
+			
+		method:
+		[
+			xdwgrid__	dw_list;
+			int  OnRetrieve()
+			{
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());	
+				arg = this.GetParam();	
+				if(arg.GetArgString("BindComputer"))
+				{	
+					string sbys= arg.GetArgString("BindComputer");
+					//alert(sbys);
+					x.LoadXml(sbys);
+					
+				}
+				else
+				{	
+
+					x.LoadXml("<args></args>");	
+				}	
+
+				dw_list.Retrieve(x.GetXmlDoc().selectSingleNode("args"));		
+				dw_list.ResetUpdateStatus();
+				dw_list.Redraw();
+				return 1;
+			}
+			int OnAddRow(xdwgrid__ dw)
+			{
+				dw.InsertRow(0);
+				return 1;
+			}
+			
+			int OnDelRow(xdwgrid__ dw)
+			{
+				int row = dw.GetRow();
+				if(row<1 || row > dw.GetRowCount()) return -1;
+				dw.DeleteRow(row);			
+				return 1;
+			}				
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				dw_list.AcceptText();
+				xaserverarg__ arg = new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());							
+				arg = win__::GetParam();
+				arg.AddArg("comdid",comdid);				
+				if (comdid=="ok")
+				{
+					xml__ x = new xml__;
+					x.setNativePointer(xml__ ::CreateInstance());
+					dw_list.DwUpdateAllTo(x.GetXmlDoc());
+					arg.AddArg("xml",x.GetXml());			
+					CloseWindow();
+				}
+				else if(comdid=="close")
+					CloseWindow();
+				else if(comdid == "add")
+					OnAddRow(dw_list);
+				else if(comdid == "del")
+					OnDelRow(dw_list);				
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+			}
+			int onload()
+			{
+				OnAttachEvent();
+			
+				dw_list = new xdwgrid__;
+				dw_list.setNativePointer(GetControl("dw_list"));
+				dw_list.SetDataObject(GetServerUrl(),"dev:sheet[SysUser.tpl/BindComputer]");
+				dw_list.SetReadOnly(true);
+				if(this.GetParam())
+				{				
+					OnRetrieve();
+				}
+				return 1;
+			}			
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp b/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp
new file mode 100644
index 0000000..ca9b3d6
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Buglist.Developer.hxsoft_A.cpp
@@ -0,0 +1,1576 @@
+#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:
+	ProductLibrary4Win(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ProductLibrary4Win* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ProductLibrary4Win* pWin = new ProductLibrary4Win(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+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 KXMLDOMElement();
+		KXMLDOMElement e = dw_list.GetRowElement(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 = dw_list.GetGuid(row);
+		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 = dw_list.GetItemString(row, L"SKUID");
+			xstring customerItemNo =dw_list.GetItemString( 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 = dw_list.GetGuid(row);
+
+		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 = dw_list.GetItemString(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'>" + dw_list.GetItemString( row, (LPCTSTR)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 (dw_list.GetItemString( row, (LPCTSTR)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>" + dw_list.GetItemString( row, (LPCTSTR)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 (dw_list.GetItemString( 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' >" + dw_list.GetItemString( 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 >" +dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
+			html += L"</tr>";
+		}
+
+		html += L"<tr>";
+		html += L"<td rowspan='3'>" +dw_list.GetItemString( row, L"PackCode") + L"</td><td >包装方式</td><td >" +
+			dw_list.GetItemString(row, L"CPack") + L"</td>";
+		html += L"</tr>";
+		html += L"<tr height='48'>";
+		html += L"<td >包装要求</td><td >" +dw_list.GetItemString( 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>" +dw_list.GetItemString( row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
+			dw_list.GetItemString(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", 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 = dw_list.GetRowElement(row);
+		xstring skuid = dw_list.GetItemString( row, L"@guid");
+		xstring SKUNo = dw_list.GetItemString( 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 ;
+		x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
+			L"<ProductPictureID>" + id + L"</ProductPictureID>" +
+			L"<OriginFile>" + originfile + L"</OriginFile>" +
+			L"<FileExt>" + ext + L"</FileExt>" +
+			L"<SKUID>" + skuid + L"</SKUID>" +
+			L"<Name>[" + SKUNo.trim() + L"]</Name>" +
+			L"<FileName>" + id + L".jpg</FileName>" +
+			L"</Item>"
+		);
+
+		xaserverarg arg;
+		arg.AddArg(L"content", x.xml());
+		if (xurl::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 = dw_list.GetRowElement( row);
+		xstring skuid =dw_list.GetItemString( row, L"SKUID");
+		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
+		xstring CustomerID = m_customer;
+		xstring CustomerItemNo =dw_list.GetItemString( 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;
+		x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
+			L"<ProductPictureID>" + id + L"</ProductPictureID>" +
+			L"<OriginFile>" + originfile + L"</OriginFile>" +
+			L"<FileExt>" + ext + L"</FileExt>" +
+			L"<SKUID>" + skuid + L"</SKUID>" +
+			L"<CustomerItemNo>" + CustomerItemNo + L"</CustomerItemNo>" +
+			L"<CustomerID>" + CustomerID + L"</CustomerID>" +
+			L"<Name>[" + SKUNo.trim() + L"]</Name>" +
+			L"<FileName>" + id + L".jpg</FileName>" +
+			L"</Item>"
+		);
+
+		xaserverarg arg;
+		arg.AddArg(L"content", x.xml());
+		if (xurl::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 (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
+
+		xstring id = images.item(index).selectSingleNode(L"@guid").text();
+
+		xml x ;
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
+		arg.AddArg(L"content", str);
+		if (xurl::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 =dw_list.GetItemString( row, L"SKUID");
+		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
+		xstring CustomerID = m_customer;
+		xstring CustomerItemNo =dw_list.GetItemString( 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 (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
+
+		xstring id = images.item(index).selectSingleNode(L"@guid").text();
+
+		xml x;
+		xaserverarg arg;
+		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
+		arg.AddArg(L"content", str);
+		if (xurl::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 = dw_list.GetRowElement(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 = dw_list.GetRowElement(row);
+		//KXMLDOMElement e = dw_list.GetRowElement(row);
+		//alert(e.xml);
+		xstring id = dw_list.GetItemString( row, L"@guid");
+		//alert(id);
+
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+		xstring categoryid = e1.selectSingleNode(L"@guid").text();
+		//alert(categoryid);
+		xaserverarg* arg = new xaserverarg;
+		arg->AddArg(L"SKUID", id);
+		arg->AddArg(L"CategoryID", categoryid);
+
+		OpenWindow(L"dev:xpage[PictureView.Product3.vx]", (LPARAM)arg);
+
+		return 1;
+	}
+
+	int ItemMaint()
+	{
+		HTREEITEM 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);
+#ifdef shouldfinished
+		int pr = g_xdoc_product;
+		OpenWindow(L"dev:xpage[ProductLibraryItemMaint3.vx]", pr);
+#endif
+		return 1;
+	}
+
+	int ItemAdd()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM 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;
+		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);
+		OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", (LPARAM)&arg);
+
+		if (arg.GetArgString(L"data.modify") == L"1")RetrieveData();
+
+		return 1;
+	}
+
+	int OnAddFolder()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		xstring name = tv_folder.GetItemLabel(hTopItem);
+		xstring selectname = tv_folder.GetItemLabel(hItem);
+
+		xaserverarg arg;
+		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]",(LPARAM)&arg);
+				/*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()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		xstring name = tv_folder.GetItemLabel(hTopItem);
+		xstring selectname = tv_folder.GetItemLabel(hItem);
+
+		xaserverarg arg;
+		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]", (LPARAM)&arg);
+				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")
+		{
+#ifdef shouldfinish
+			OpenWindow(L"dev:xpage[ShoppingCartProductMaint.vx]", trust(g_xdoc_shoppingcart as int));
+#endif
+			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;
+			carg.setNativePointer(carg.CreateInstance());
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", (LPARAM) & carg);
+			return 1;
+		}
+		else if (comdid == L"xmEnquiry")
+		{
+			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;
+			carg.setNativePointer(carg.CreateInstance());
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[Enquiry.Import.vx]", (LPARAM)&carg);
+			return 1;
+		}
+		else if (comdid == L"xmPurchar")
+		{
+			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 ;
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[PO.Import.vx]", (LPARAM)&carg);
+			return 1;
+		}
+		else if (comdid == L"xmSearch")
+		{
+			RetrieveData();
+			return 1;
+		}
+		else if (comdid == L"xmQuote")
+		{
+			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;
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[Quote.Import.vx]",  (LPARAM) & carg);
+			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 = dw_list.GetItemString( 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 hCursor = xutil::SetCursorWait();
+			name = xcontrol(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")
+		{
+#ifdef shouldfinish
+			int r = cast(g_xdoc_product.getData(L"data/Item", L"@guid") as int);
+			OpenWindow(L"dev:xpage[Product.ItemProp.Maint.vx]", r);
+#endif
+			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 = xcontrol(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 =dw_list.GetRowElement(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(TEvent* evt, int param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	//查找当前树项的顶级目录
+	HTREEITEM LookupTopFolder(HTREEITEM hItem)
+	{
+		HTREEITEM hRoot = tv_folder.GetRootItem();
+		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
+		return hItem;
+	}
+
+	//插入产品类项的子项
+	int MakeGoodsFolderItem(HTREEITEM 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;
+
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 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(HTREEITEM 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;
+
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 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(HTREEITEM 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");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+	int MakeGoodCarFolderItem(HTREEITEM 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");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+
+	int ExpandItem(HTREEITEM hItem)
+	{
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		xstring name = tv_folder.GetItemLabel(hTopItem);
+		HTREEITEM 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)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		return ExpandItem(hItem);
+	}
+
+	int ResetAgent(xstring agentAsk)
+	{
+		if (agentFor != agentAsk)
+		{
+			agentFor = agentAsk;
+			m_agentNode = 0;
+			SetAgent();
+		}
+		return 1;
+	}
+
+	HTREEITEM LookupCustomerFolder(HTREEITEM hItem)
+	{
+		while (true)
+		{
+			KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+			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(HTREEITEM hItem)
+	{
+		hItem = LookupCustomerFolder(hItem);
+		if (hItem == 0) return L"";
+		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+		xstring str = e1.getAttribute(L"no");
+		return str.mid(xstring(L"Customer:").length(), 9999);
+	}
+
+	int RetrieveData()
+	{
+		ximageview im = GetControl(L"im1");
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM 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.Reset();
+			im.Redraw();
+
+
+			xshtml 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;
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+
+		if (name == L"购物车")
+		{
+			if (selectname != name)
+			{
+				KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+				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);
+					dw_list.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
+				}
+				else if (e1.getAttribute(L"categoryid") != L"")
+				{
+					xstring categoryid = e1.getAttribute(L"categoryid");
+					dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid));
+					dwc_list.SetReadOnly(true);
+					dwc_list.Reset();
+					dw_list.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();
+					dw_list.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
+				}
+				//dwc_list.PostRetrieve();
+				dwc_list.Redraw();
+
+				xshtml xs = GetControl(L"html_detail");
+				if (dwc_list.GetRowCount() >= 1)
+				{
+					xs.SetContent(makeGoodscarHtml(1));
+
+					if (m_customer != L"")
+					{
+						xstring skuid =dw_list.GetItemString( 1, L"SKUID");
+						xstring customerItemNo =dw_list.GetItemString( 1, L"CustomerItemNo");
+						OnShowImage(skuid, customerItemNo);
+					}
+				}
+				else
+				{
+					im.Reset();
+					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");
+				}
+				else
+					return 1;
+
+				/*	dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(no).GetXmlDoc());
+					dw_list = GetControl(L"dw_list");
+					dw_list.Reset();
+					dw_list.SetReadOnly(true);
+				*/
+
+				if (name == L"个人库")
+					dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
+				else
+				{
+					if (queryString != L"")
+					{
+
+						if (no == L"N000005")
+							dw_list.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
+						else
+							dw_list.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
+					}
+					else
+					{
+						if (no == L"N000005") return 1;
+						dw_list.Retrieve(ProductLibraryView::GetMaintList3(no));
+					}
+				}
+				//dw_list.PostRetrieve();
+				dw_list.Redraw();
+
+				xshtml xs = GetControl(L"html_detail");
+				if (dw_list.GetRowCount() > 0)
+				{
+					xs.SetContent(makeHtml(1));
+					xstring id = dw_list.GetItemString( 1, L"@guid");
+					OnShowImage(id);
+				}
+				else
+				{
+					im.Reset();
+					im.Redraw();
+
+					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)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		HTREEITEM 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();
+		PostMessage(GetHWND(), 0x401, (WPARAM)L"xmRefresh", 0);
+
+		return 1;
+	}
+
+	int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
+	{
+		KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
+		int len = nlist.length();
+		for (int i = 0; i < len; i++)
+		{
+			KXMLDOMElement& e = * new KXMLDOMElement(nlist.item(i));
+			xstring name = e.getAttribute(L"cname");
+			xstring sImage = e.getAttribute(L"image");
+			int image = 15;
+			//if(sImage) image = sImage.toInt();
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 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(TEvent* evt, int lParam)
+	{
+		ximageview im = GetControl(L"im1");
+		xcombobox xc = GetControl(L"precent");
+		xstring text = xc.GetLBText();
+		int p = text.toInt();
+		if (p == 0) p = 100;
+		im.Preview(p);
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ProductLibrary4Win::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ProductLibrary4Win::OnSetFocus);
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnRowChanged);
+		AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnGoodsCarRowChanged);
+		AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ProductLibrary4Win::OnTreeExpanding);
+		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ProductLibrary4Win::OnTreeSelChanged);
+		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick);	//checkbox打钩事件
+		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick2);	//checkbox打钩事件	
+
+		AttachEvent(L"im1", L"IMG_LDBCLICK", (FEvent)&ProductLibrary4Win::OnImgDBClicked);
+		AttachEvent(L"precent", L"CBN_SELCHANGE", (FEvent)&ProductLibrary4Win::OnViewZoomChange);
+
+		return 1;
+	}
+
+	int onload()
+	{
+		agentFor = L"goodslib";
+		m_customer = 0;
+
+		OnAttachEvent();
+
+		tv_folder = GetControl(L"tv_folder");
+		dw_list = GetControl(L"dw_list");
+		dwc_list = GetControl(L"dwc_list");
+
+		InitialFolder();
+
+		dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L""));
+		dw_list = GetControl(L"dw_list");
+		dw_list.SetReadOnly(true);
+
+		dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
+		dwc_list.SetReadOnly(true);
+
+		tv_folder.ExpandItem(tv_folder.GetRootItem());
+		tv_folder.ItemFocus(tv_folder.GetRootItem());
+
+		if (dw_list.GetRowCount())
+		{
+			xshtml xs = GetControl(L"html_detail");
+			xs.SetContent(makeHtml(1));
+		}
+
+		return 1;
+	}
+
+	int onloaded()
+	{
+		SetAgent();
+
+		return 1;
+	}
+
+	int OnImgDBClicked(TEvent * evt, int pr)
+	{
+		IMGNNMHDR& nmtv = *(IMGNNMHDR*)evt->notify.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.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;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Data.config.cpp b/jrj/project/business/SystemSettings/Data.config.cpp
new file mode 100644
index 0000000..f5b5019
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Data.config.cpp
@@ -0,0 +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"
+
+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;
+
+				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;	
+				}
+
+				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;
+				}
+
+				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;
+			}
+
+			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());
+
+				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();
+
+				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);
+
+				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();
+
+				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;
+				}
+
+				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)
+			{
+				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")
+					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);
+			}
+
+			int onload()
+			{
+				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;
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Developer.Synch.cpp b/jrj/project/business/SystemSettings/Developer.Synch.cpp
new file mode 100644
index 0000000..8789e6e
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Developer.Synch.cpp
@@ -0,0 +1,432 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) DeveloperSynch :  public xframe
+	{
+	public:
+		xtreeview	tv_gs;
+		xsedit dw_log;
+	
+		int nItems;
+		int nCount;
+	
+		xstring sContent;
+	public:
+		DeveloperSynch(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static DeveloperSynch* CreateInstance(void* implPtr, void* hWnd)
+		{
+			DeveloperSynch* pWin = new DeveloperSynch(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		xstring ProcessDevCmd(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
+		{
+			if(aurl == L"") aurl = GetServerUrl();
+			//alert(aurl);
+			xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/developer "+cmd,ext,needlogin);
+			return d;
+		}
+	
+		xstring ProcessDevCmd2(xstring cmd,xstring ext, xstring aurl=L"", bool needlogin=false)
+		{
+			if(aurl == L"") aurl = GetServerUrl();
+			//alert(aurl);
+			xstring d = xaserver::ProcessCmd(aurl,L"uri.hxsoft.com/xaserver/dev:"+cmd,ext,needlogin);
+			return d;
+		}
+
+		int GetProjectItem(int hItem)
+		{
+			int pitem = hItem;
+			xstring typ;
+			while(true)
+			{
+				int h =tv_gs.GetItemData(tv_gs.GetId(), pitem);
+				KXMLDOMElement e = trust(h as KXMLDOMElement);
+				typ = GetEleString(e, L"@tagname");
+				if(typ==L"project")break;
+				pitem =tv_gs.GetParentItem(tv_gs.GetId(), pitem);
+				if(pitem<=0)break;
+			}
+			return pitem;
+		}
+		
+		int GetP2Item(int hItem)
+		{
+			int hDomainItem;
+			int hP2Item = hItem;
+			while(true)
+			{
+				hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item);
+				if(xtreeview::GetParentItem(tv_gs.GetId(), hDomainItem)<=0)break;
+				hP2Item = hDomainItem;
+			}
+			return hP2Item;
+		}
+			
+		xstring GetItemGuid(int hItem)
+		{
+			int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
+			KXMLDOMElement e = trust(h as KXMLDOMElement);
+			xstring guid = e.GetAttribute(L"guid");
+			return guid;
+		}
+			
+		xaserverarg GetDataArg(int hItem, xaserverarg arg)
+		{
+			int h =tv_gs.GetItemData(tv_gs.GetId(), hItem);
+			KXMLDOMElement e = trust(h as KXMLDOMElement);
+			xstring node = GetEleString(e, L"@tagname");
+			//WriteLog(e.xml);
+			if(node==L"File" || node==L"file")
+			{
+				xstring caption = e.getAttribute(L"caption");
+				
+				int hP2Item = 0;
+				int hDomainItem = 0;
+				if(xtreeview::GetParentItem(tv_gs.GetId(), hItem)<=0)
+				{
+					hDomainItem = hItem;
+				}else
+				{
+					hP2Item = GetP2Item(hItem);
+					hDomainItem =tv_gs.GetParentItem(tv_gs.GetId(), hP2Item);
+				}	
+
+				//find project folder
+				xstring prjguid=L"";
+				int pitem = GetProjectItem(hItem);
+				if(pitem > 0)
+					prjguid = GetItemGuid(pitem);
+
+				//xaserverarg arg ;
+				//;
+				arg.AddArg(L"project.guid",prjguid);
+				if(hP2Item)
+				{
+					if(hP2Item != hItem)
+					{
+						xstring guid = e.getAttribute(L"guid");
+						arg.AddArg(L"guid",guid);
+					}
+					xstring guid2 = GetItemGuid(hP2Item);
+					arg.AddArg(L"root.guid",guid2);
+				}else if(hDomainItem > 0)
+				{
+					xstring guid3 = GetItemGuid(hDomainItem);
+					arg.AddArg(L"domain.guid",guid3);
+				}
+				return 1;
+			}
+			else if(node==L"folder" || node==L"project")
+				return 2;
+			else
+				return 0;			
+		}
+
+		int SaveData(int hItem)
+		{
+			xcontrol xc = GetControl(L"surl");
+			xstring surl = xc.GetText();
+			if(surl == L"")
+			{
+				alert(L"请输入同步服务器地址");
+				return 1;
+			}
+			
+			xstring name =tv_gs.GetItemLabel(hItem);
+			xaserverarg arg ;
+			;
+			int ret = GetDataArg(hItem, arg);
+			//alert(arg.GetString());
+			if(ret == 0) 
+			{
+				WriteLog(name+L" 失败, 原因:获取工程或文件夹失败!");
+				return -1;
+			}
+			else if(ret == 2) 
+			{
+				ret = SynchFolder(hItem);
+				if(ret == -1)
+					WriteLog(name+L" 失败, 原因:获取文件数据失败!");
+				else if(ret == 0)
+					WriteLog(name+L" 失败, 原因:复制文件失败!");
+				else
+					WriteLog(name);
+				return -1;
+			}
+			SynchFolder(hItem);
+			arg.AddArg(L"__name",name);
+			arg.AddArg(L"__url",surl);
+			synchServer(arg);
+			if(name.right(3) == L".vx" || name.right(5) == L".xpage")
+			{
+				arg.AddArg(L"__name",name + L"[Code]");
+				arg.AddArg(L"iscode",L"yes");
+				synchServer(arg);
+			}
+			return 1;
+		}
+			
+		xstring GetFolderPath(int hItem)
+		{
+			int k = hItem;
+			if(k == 0) return L"";
+			xstring src = L"";
+			//xstring name = L"";
+			while(k > 0)
+			{
+				int h =tv_gs.GetItemData(tv_gs.GetId(), k);
+				k =tv_gs.GetParentItem(tv_gs.GetId(), k);
+				KXMLDOMElement e = trust(h as KXMLDOMElement);
+				xstring node = GetEleString(e, L"@tagname");
+				if(node != L"File" && node != L"file")
+				{
+					xstring tmp = GetEleString(e, L"@src");
+					//if(name == L"") name = GetEleString(e, L"@caption");
+					if(tmp != L"")
+					{
+						SynchFolder(k);
+						if(src == L"") src = tmp;
+						else
+						{
+							int j = 1;
+							int s =  tmp.length()();
+							xstring t = tmp.right(j).left(1);
+							while(t != L"\\" && j < s)
+							{
+								//WriteLog(t);
+								j++;
+								t = tmp.right(j).left(1);
+							}
+							if(j >= s)
+								src = tmp+ L"\\" + src; 
+							else
+								src = tmp.left(s - j)+ L"\\" + src;
+						}
+					}
+				}
+			}
+			if(src == L"")
+			{
+				//WriteLog(name+L" 同步失败, 原因:获取文件数据失败0!");
+				return L"";
+			}
+			//if(src.left(9) ==L"Projects\\") src = src.mid(9, src.length()());
+			src = L"\\" + src;//.replace(L"Projects\\",L"");
+			//WriteLog(src);
+			return src;
+		}
+			
+		int SynchFolder(int hItem)
+		{
+			xstring src =  GetFolderPath(hItem);
+			if(src== L"") return -1;
+			if(xaserver::FileCopy(L"devfolder8001", src, L"devfolder5001", src) != 1)
+				return 0;
+			//WriteLog(src);
+			return 1;
+		}
+			
+		int synchServer(xaserverarg arg)
+		{
+			xstring name = arg.GetArgString(L"__name");
+			xstring surl = arg.GetArgString(L"__url");
+			xstring d =  ProcessDevCmd(L"getobject",arg.GetString());
+			if(d == L"") 
+			{
+				WriteLog(name+L" 失败, 原因:获取文件数据失败!");
+				return -1;
+			}
+			//WriteLog(d);
+			arg.AddArg(L"content",d);
+			ProcessDevCmd(L"saveobject",arg.GetString(), surl,true);
+			WriteLog(name);
+			return 1;
+		}
+			
+		int WriteLog(xstring str)
+		{
+			if(sContent == L"")
+				sContent = str;
+			else
+				sContent += L"\r\n" + str;
+			//alert(sContent);
+			dw_log.SetContent(sContent, L"");
+			return 1;
+		}
+	
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+	
+		int Add(int hItem)
+		{	
+			if(nCount >99)
+			{
+				alert(L"同时同步的数量不能大于100个!");
+				return 1;
+			}
+			nItems[nCount] = hItem; 
+			nCount++;
+			return 1;
+		}
+			
+		int Del(int hItem)
+		{	
+			for(int i=0; i<nCount; i++)
+			{
+				int p = nItems[i];
+				if(p == hItem) break;
+			}
+			if(i<nCount)
+			{
+				for(int j=i; j<nCount - 1; j++)
+				{
+					int k = nItems[j + 1];
+					nItems[j] = k;
+				}
+				nCount --;
+			}
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid != L"synch") return 1;
+			
+			HCURSOR hCursor = xutil::SetCursorWait();
+			sContent = L"";
+			for(int i=0; i<nCount; i++)
+			{
+				int p = nItems[i];
+				//int h =tv_gs.GetItemData(tv_gs.GetId(), p);
+				//KXMLDOMElement e = trust(h as KXMLDOMElement);
+				//alert(e.xml);
+				SaveData(p);
+				xtreeview::SetChecked(tv_gs.GetId(), p,0);
+			}
+			xutil::RestoreCursor(hCursor);
+			nCount = 0;
+			return 0;
+		}
+	
+		int OnTreeCheckBoxSel(TEvent* evt, LPARAM p)
+		{
+			TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
+
+			int hItem = nmtv.FromItem;
+
+			HCURSOR hCursor = xutil::SetCursorWait();
+			int hwnd = nmtv.hwndFrom;
+
+			int c = 1 -tv_gs.GetChecked(hwnd, hItem);
+			if(c == 1)
+				Add(hItem);
+			else
+				Del(hItem);
+			xutil::RestoreCursor(hCursor);
+			return 1;
+		}	
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&DeveloperSynch::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+			AttachEvent(L"DevExplorer",L"TVN_CHECKBOXSEL", (FEvent)&DeveloperSynch::OnTreeCheckBoxSel);
+			AttachEvent(L"DevExplorer", L"TVN_ITEMEXPANDING", (FEvent)&DeveloperSynch::OnTreeExpanding);
+			return 1;
+		}
+		
+		int OnTreeExpanding(TEvent* evt, LPARAM lparam)
+		{
+			TVNNMHDR* nmtv = (TVNNMHDR*)evt->notify.pnmh;
+			int hItem = nmtv.itemNew.hItem;
+			int cItem=xtreeview::GetChildItem(tv_gs.GetId(), hItem);
+			if(cItem > 0) return 1;
+			int p =tv_gs.GetItemData(tv_gs.GetId(), hItem);
+			KXMLDOMElement ele = trust(p as KXMLDOMElement);
+			xstring src =GetEleString(ele, L"@src");
+			xstring tagname =GetEleString(ele, L"@tagname");
+			if (src == L"" || tagname == L"file" || tagname == L"File") return 1;
+			OnSetTree(hItem, GetFolderPath(hItem));
+			
+			return 1;
+		}		
+			
+		int OnSetTree(int pItem, KXMLDOMElement e)
+		{
+			KXMLDOMNodeList li=e.selectNodes(L"*");
+			int i=0;
+			int s=li.length();
+			for (i=0;i<s;i++){
+				KXMLDOMElement  ele= li.item(s - i - 1);
+				xstring caption = GetEleString(ele, L"@caption");
+				xstring src =GetEleString(ele, L"@src");
+				xstring image =GetEleString(ele, L"@image");
+				int p = trust(ele as int);
+				int hItem=xtreeview::InsertItem(tv_gs.GetId(), pItem,0,caption,p,image.toInt());
+				xstring tagname =GetEleString(ele, L"@tagname");
+				if (src != L"" && tagname != L"file" && tagname != L"File")
+					xtreeview::SetItemChild1(tv_gs.GetId(), hItem,1);
+				OnSetTree(hItem, ele);
+			}
+		
+			return 1;
+		}
+			
+		int OnSetTree(int hItem, xstring src)
+		{
+			xml x=new xml;
+			
+			xaserverarg arg;
+			;	
+			arg.AddArg(L"src",src);
+			if(xaserver::ExecXQuery(GetServerUrl(),L"[Developer.Tree.xq]",arg.GetString(),x)!=1)
+			{
+				alert(L"读取节点失败!");
+				return 1;
+			}
+			KXMLDOMElement e = x.documentElement();
+			OnSetTree(hItem, e);
+			return 1;
+		}
+		
+		int onload()
+		{
+			nCount = 0;
+			tv_gs = GetControl(L"DevExplorer");			
+			dw_log = GetControl(L"xlog");
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			OnSetTree(0, L"Projects/projects.xhw");
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Flow3.cpp b/jrj/project/business/SystemSettings/Flow3.cpp
new file mode 100644
index 0000000..b12854a
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Flow3.cpp
@@ -0,0 +1,476 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) flow :  public xframe
+	{
+	public:
+		xtreeview tv_1;
+		xlayersheet	tab_1;
+		xdwgrid	dw_flow;
+		xdwgrid	dw_state;
+		xdwgrid	dw_button;
+		xdwgrid	dw_role;
+		xdwgrid	dw_bill;
+		xdwgrid	dw_scene;
+		xdwgrid	dw_buttonright;
+		xdwgrid	dw_datafieldright;
+		xstring 	flowid;
+	
+		xtreeview tv_folder;
+
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		flow(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static flow* CreateInstance(void* implPtr, void* hWnd)
+		{
+			flow* pWin = new flow(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		xstring GetSheetType(int index)
+		{
+			if (index == 0)  return L"flowitem";
+			else if (index == 1) return L"state";
+			else if (index == 2) return L"actionrole";
+			else if (index == 3) return L"button";
+			else if (index == 4) return L"role";
+			else if (index == 5) return L"bill";
+			else if (index == 6) return L"scene";
+			else if (index ==7) return L"fieldrole";
+			else return L"unkown";
+		}
+		xdwgrid GetSheetDwgrid(int index)
+		{
+			xstring typ = GetSheetType(index);
+			if(typ==L"flowitem") return dw_flow;
+			if(typ==L"actionrole") return dw_buttonright;
+			if(typ==L"state") return dw_state;
+			if(typ==L"button") return dw_button;
+			if(typ==L"role") return dw_role;
+			if(typ==L"bill") return dw_bill;
+			if(typ==L"scene") return dw_scene;
+			if(typ==L"fieldrole") return dw_datafieldright;
+			return 0;
+		}
+		xdwgrid GetSheetDbmap(int index)
+		{
+			xstring typ = GetSheetType(index);
+			if(typ==L"flowitem") return "flow.dbmap";
+			if(typ==L"actionrole") return "workflow.actionrole.dbmap";
+			if(typ==L"state") return "state.dbmap";
+			if(typ==L"button") return "button.dbmap";
+			if(typ==L"role") return "role.dbmap";
+			if(typ==L"bill") return "bill.dbmap";
+			if(typ==L"scene") return "scene.dbmap";
+			if(typ==L"fieldrole") return "workflow.datarole.dbmap";
+			return 0;
+		}
+		
+		xstring GetDwname(xstring typ)
+		{
+			if(typ==L"flowitem") return L"/sale/view/Flow3/template/flow";
+			if(typ==L"actionrole") return L"/sale/view/Flow3/template/buttonright";
+			if(typ==L"state") return L"/sale/view/Flow3/template/state";
+			if(typ==L"button") return L"/sale/view/Flow3/template/button";
+			if(typ==L"role") return L"/sale/view/Flow3/template/role";
+			if(typ==L"bill") return L"/sale/view/Flow3/template/bill";
+			if(typ==L"scene") return L"/sale/view/Flow3/template/scene";
+			if(typ==L"fieldrole") return L"/sale/view/Flow3/template/datafieldright";
+			return L"";
+		}
+		
+		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"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+		int OnSave()
+		{
+			if(flowid==L"") return 1;
+				
+			xstring sdbmap;
+			xml x ;
+			
+			int index = tab_1.GetSheetIndex();
+			sdbmap = (xstring)GetSheetDbmap(index);
+			xdwgrid dw_list = GetSheetDwgrid(index);
+			dw_list.DwUpdateAllToEx(x);
+			//trace(x.xml());
+
+			KXMLDOMNodeList ls = x.documentElement().selectNodes(L"*[@update.modify='1' and @update.new='1']");
+			int len = ls.length();
+			for(int k=0;k<len;k++)
+			{
+				KXMLDOMElement e;
+				if(ls.item(k).selectSingleNode(L"flowID"))
+				{
+					e = ls.item(k).selectSingleNode(L"flowID");
+					e.setAttribute(L"update.modify",L"1");
+					e.text() = flowid;
+				}else
+				{
+					e = x.createElement(L"flowID");
+					e.setAttribute(L"update.modify",L"1");
+					e.text() = flowid;
+					ls.item(k).appendChild(e);
+				}
+			}
+				
+			xaserverarg arg ;
+			;
+			arg.AddArg(L"content",x.xml());
+			arg.AddArg(L"sdbmap",sdbmap);
+			trace(x.xml());
+			if(xurl::get(L"/sale/data/Flow3/save/flow", arg.GetString(),x)!=1)
+			{
+				xstring error = x.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			
+			dw_list.ResetUpdateStatus();
+			
+			//alert(x.xml());
+			alert(L"保存成功!");
+			
+			return 1;
+		}
+		int OnAddrow()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			dw_list.InsertRow(0);
+			
+			return 1;
+		}
+		
+		int OnInsertrow()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			dw_list.InsertRow(dw_list.GetRow());
+			return 1;
+		}
+		
+		int OnDeleterow()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			dw_list.DeleteRow(0);
+				
+			return 1;
+		}
+		
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			
+			//alert(evt.hWnd.toString());
+			
+			return 1;
+		}
+
+		int OnClicked(TEvent* evt, int p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			int row = hdr.row;
+			xstring colname=hdr.colname;
+
+			//trace(colname);
+			
+			xaserverarg arg ;
+			;	
+
+			xstring comdid =L"";
+			xstring data=L"";
+			xstring display=L"";
+			xdwgrid dw_list;
+			
+			int index = tab_1.GetSheetIndex();
+			dw_list = GetSheetDwgrid(index);
+			
+			arg.AddArg(L"sdata",L"");
+			arg.AddArg(L"flowid",flowid);
+			
+			if(colname==L"billID")
+			{
+				arg.AddArg(L"stype",L"bill");
+				arg.AddArg(L"datacolumn",L"billID");
+				arg.AddArg(L"displaycolumn",L"billName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/bill");
+			}
+			else if(colname==L"stateSource")
+			{
+				arg.AddArg(L"stype",L"state");
+				arg.AddArg(L"datacolumn",L"stateID");
+				arg.AddArg(L"displaycolumn",L"stateName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
+			}
+			else if(colname==L"state")
+			{
+				arg.AddArg(L"stype",L"state");
+				arg.AddArg(L"datacolumn",L"stateID");
+				arg.AddArg(L"displaycolumn",L"stateName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
+			}
+			else if(colname==L"stateTarget")
+			{
+				arg.AddArg(L"stype",L"state");
+				arg.AddArg(L"datacolumn",L"stateID");
+				arg.AddArg(L"displaycolumn",L"stateName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/state");
+			}
+			else if(colname==L"roles")
+			{
+				arg.AddArg(L"stype",L"role");
+				arg.AddArg(L"datacolumn",L"roleName");
+				arg.AddArg(L"displaycolumn",L"roleName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/role");
+			}
+			else if(colname==L"flowAction")
+			{
+				arg.AddArg(L"stype",L"button");
+				arg.AddArg(L"datacolumn",L"buttonName");
+				arg.AddArg(L"displaycolumn",L"buttonName");
+				arg.AddArg(L"dwname",L"/sale/view/Flow3/template/button");
+			}
+			else 
+				return 1;
+			
+			OpenWindow(L"dev:xpage[FlowTermSelect.vx]",arg);
+			comdid = arg.GetArgString(L"comdid");
+			
+			if(comdid==L"xmOk")
+			{
+				data = arg.GetArgString(L"data");
+				display = arg.GetArgString(L"display");
+				dw_list.SetItemDisplayString(row,colname,display); 
+				dw_list.SetItemString(row,colname,data); 
+				dw_list.Redraw();
+			}	
+
+			return 1;
+		}					
+
+		int OnImport()
+		{
+			int i = tab_1.GetSheetIndex();
+			xdwgrid dw_list = GetSheetDwgrid(i);
+			
+			xaserverarg arg ;
+			;	
+			arg.SetArg(L"stype",GetSheetType(i),L"xstring");
+			arg.SetArg(L"sdata",L"ddd",L"xstring");
+			arg.SetArg(L"flowID",flowid,L"xstring");
+			int obj = cast(dw_list as int);
+			arg.SetArg(L"dwobj",obj.toString(),L"xstring");
+			arg.SetArg(L"dwname",GetDwname(GetSheetType(i)),L"xstring");
+			OpenWindow(L"dev:xpage[FlowTermImport.vx]",arg);
+
+			return 1;
+		}
+			
+		int  OnRetrieve()
+		{
+			if(flowid==L"") return 1;
+			
+			xml x ;
+			
+			xaserverarg arg ;
+			;	
+			
+			//int i = tab_1.GetSheetIndex();
+			for(int i=0;i<7;i++)
+			{
+				//alert(i.toString());
+				arg.SetArg(L"stype",GetSheetType(i),L"xstring");
+				arg.SetArg(L"sdata",L"ddd",L"xstring");
+				arg.SetArg(L"flowID",flowid,L"xstring");
+				
+				//trace(arg.GetString());
+				if (getUrl(L"/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1)
+				{
+					//trace(x.text());
+					//return -1;
+					continue;
+				}
+				xdwgrid dw_list = GetSheetDwgrid(i);
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			
+			return 1;
+		}
+		
+		int OnTreeSelChanged(TEvent* evt, int p)
+		{
+			NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+			
+			HTREEITEM hItem = nmtv.itemNew.hItem;
+			KXMLDOMElement& e = *(KXMLDOMElement*)tv_1.GetItemData(hItem);
+			flowid = e.getAttribute(L"flowID");
+				
+			HCURSOR hCursor = xutil::SetCursorWait();
+			SetFlowChart(e);
+			OnRetrieve();
+			xutil::RestoreCursor(hCursor);
+			
+			return 1;
+		}	
+
+		int OnTabSelectSheet(TEvent* evt, int p)
+		{
+			//OnRetrieve();
+			
+			return 1;
+		}
+			
+		int SetFlowChart(KXMLDOMElement e)
+		{
+			xstring flowUrl = e.getAttribute(L"flowchart");
+			xflowchart flowchart = GetControl(L"flowchart");
+			xml f ;
+		
+			if(flowUrl != L"")
+			{
+				if(xaserver::FetchXml(flowUrl,L"",f)==1)
+				{
+					flowchart.LoadEx(f.documentElement());
+				}
+			}else
+			{
+				f.loadXML(L"<sheet/>");
+				flowchart.LoadEx(f.documentElement());
+			}
+			return 1;
+		}
+
+			
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if (comdid == L"xmSave") 
+				return OnSave();
+			if (comdid == L"xmAddrow")
+				return OnAddrow();
+			if (comdid == L"xmInsertrow")
+				return OnInsertrow();
+			if (comdid == L"xmDeleterow")
+				return OnDeleterow();
+			if (comdid == L"xmImport")
+				return OnImport();
+				
+			return 0;
+		}
+
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&flow::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&flow::OnSetFocus);
+			
+			AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&flow::OnTreeSelChanged);
+			AttachEvent(L"tab_1",L"LYSN_SELECTEDSHEET", (FEvent)&flow::OnTabSelectSheet);
+			AttachEvent(L"dw_flow",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			AttachEvent(L"dw_buttonright",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			AttachEvent(L"dw_button",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			AttachEvent(L"dw_state",L"DWV_CLICKED", (FEvent)&flow::OnClicked);
+			
+			return 1;
+		}
+		
+		int CreateFlowFloder()
+		{
+			
+			xml x = ViewObject::RetrieveData(L"/sale/data/flow3/flowfolder");
+			if(x)
+			{
+				KXMLDOMNodeList nlist = x.selectNodes(L"//item"); 
+				int len = nlist.length();
+				int hItem = 0;
+				for (int i = 0; i < len; i++)
+				{	
+					KXMLDOMElement e = nlist.item(i);
+					xstring name = e.getAttribute(L"flowName");
+					xstring no = e.getAttribute(L"flowNo");
+					xstring label = name;//no.trim() + L" " + name;
+					int h= tv_folder.InsertChildItem(hItem,label, trust(e as int),22);				
+					//tv_folder.SetItemChild(h,1);
+				}
+			}
+			
+			return 1;
+		}
+
+		int onload()
+		{
+			flowid = L"";
+			tv_folder = GetControl(L"tv_folder");
+			CreateFlowFloder();
+			
+			tv_1 = GetControl(L"tv_1");
+			tab_1 = GetControl(L"tab_1");
+			dw_flow = GetControl(L"dw_flow");
+			dw_flow.openUrl(L"/sale/view/Flow3/template/flow");
+			dw_state = GetControl(L"dw_state");
+			dw_state.openUrl(L"/sale/view/Flow3/template/state");
+			dw_button = GetControl(L"dw_button");
+			dw_button.openUrl(L"/sale/view/Flow3/template/button");
+			dw_role = GetControl(L"dw_role");
+			dw_role.openUrl(L"/sale/view/Flow3/template/role");
+			dw_bill = GetControl(L"dw_bill");
+			dw_bill.openUrl(L"/sale/view/Flow3/template/bill");
+			dw_scene = GetControl(L"dw_scene");
+			dw_scene.openUrl(L"/sale/view/Flow3/template/scene");
+			dw_buttonright = GetControl(L"dw_buttonright");
+			dw_buttonright.openUrl(L"/sale/view/Flow3/template/buttonright");
+			dw_datafieldright = GetControl(L"dw_datafieldright");
+			dw_datafieldright.openUrl(L"/sale/view/Flow3/template/datafieldright");
+			
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			OnRetrieve();
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/FlowTermImport.cpp b/jrj/project/business/SystemSettings/FlowTermImport.cpp
new file mode 100644
index 0000000..13cdf5c
--- /dev/null
+++ b/jrj/project/business/SystemSettings/FlowTermImport.cpp
@@ -0,0 +1,177 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) FlowTermImport :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xstring stype;
+		xstring sdata;
+		xstring flowid;
+		xstring datacolumn;
+		xstring displaycolumn;
+		xdwgrid dw_obj;
+	
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		FlowTermImport(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static FlowTermImport* CreateInstance(void* implPtr, void* hWnd)
+		{
+			FlowTermImport* pWin = new FlowTermImport(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		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"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			//SetAgent();
+			return 1;
+		}
+
+		int OnOK(xstring comdid)
+		{
+			int row = dw_list.GetNextSelectRow(1);
+			if(row < 1 && dw_list.GetRowCount()==1) row = 1;
+			if (row<1)
+			{
+				alert(L"请选择项!");
+				return 1;
+			}	
+			
+			while (row>0)
+			{
+				int nrow = dw_obj.InsertRow(0);
+				int columnCount = dw_obj.GetColumnCount();
+				for(int i=1;i<=columnCount;i++)
+				{
+					if(dw_list.GetColumnName(i)==L"guid") continue;
+					dw_obj.SetItemString(nrow,i,dw_list.GetItemString(row,i));
+					if(dw_list.GetItemDisplayString(row,i)!=L"")
+						dw_obj.SetItemDisplayString(nrow,i,dw_list.GetItemDisplayString(row,i));
+				}
+				row = dw_list.GetNextSelectRow(row + 1);
+			}
+			
+			CloseWindow();
+			return 1;
+		}
+				
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if (comdid==L"xmOk")
+			{
+				OnOK(comdid);
+				return 1;
+			}
+			else if (comdid==L"xmCancel")
+			{
+				CloseWindow();
+				return 1;
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&FlowTermImport::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&FlowTermImport::OnSetFocus);
+			return 1;
+		}
+		
+		int  OnRetrieve()
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+			;	
+			
+			arg.AddArg(L"stype",stype);
+			arg.AddArg(L"sdata",sdata);
+			arg.AddArg(L"flowID",flowid);
+
+			if (getUrl(L"/sale/data/Flow3/retrieve/flowimport",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetReadOnly(true);
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			SetArg();
+			dw_list = GetControl(L"dw_list");
+			//dw_list.openUrl(L"xxx");
+			if(GetWinParam())
+			{
+				xaserverarg arg = GetArg();
+				stype = arg.GetArgString(L"stype");
+				sdata = arg.GetArgString(L"sdata");
+				flowid = arg.GetArgString(L"flowid");
+			
+				xstring dwname = arg.GetArgString(L"dwname");
+				int dwobj = arg.GetArgString(L"dwobj").toInt();
+				dw_obj = cast(dwobj as xdwgrid);
+			
+				dw_list.openUrl(dwname);
+				OnRetrieve();
+				dw_list.SetSelectionMode(3);
+			}
+		
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			//SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/FlowTermSelect.cpp b/jrj/project/business/SystemSettings/FlowTermSelect.cpp
new file mode 100644
index 0000000..ce9d2bb
--- /dev/null
+++ b/jrj/project/business/SystemSettings/FlowTermSelect.cpp
@@ -0,0 +1,176 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) FlowTermSelect :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xstring stype;
+		xstring sdata;
+		xstring flowid;
+		xstring datacolumn;
+		xstring displaycolumn;
+	
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		FlowTermSelect(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static FlowTermSelect* CreateInstance(void* implPtr, void* hWnd)
+		{
+			FlowTermSelect* pWin = new FlowTermSelect(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		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"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			//SetAgent();
+			return 1;
+		}
+
+		int OnOK(xstring comdid)
+		{
+			xaserverarg arg ;		
+			arg = GetArg();
+
+			arg.AddArg(L"comdid",comdid);	
+
+			int row = dw_list.GetNextSelectRow(1);
+			if(row < 1 && dw_list.GetRowCount()==1) row = 1;
+			if (row<1)
+			{
+				alert(L"请选择项!");
+				return 1;
+			}	
+			
+			while (row>0)
+			{			
+				KXMLDOMElement e = dw_list.GetRowElement(row);
+				xstring data = e.selectSingleNode(datacolumn).text()+(xstring)L"";
+				xstring display = e.selectSingleNode(displaycolumn).text()+ (xstring)L"";
+				arg.AddArg(L"data",data);
+				arg.AddArg(L"display",display);						
+				row = dw_list.GetNextSelectRow(row + 1);
+			}
+			CloseWindow();
+			return 1;
+		}
+				
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if (comdid==L"xmOk")
+			{
+				OnOK(comdid);
+				return 1;
+			}
+			else if (comdid==L"xmCancel")
+			{
+				CloseWindow();
+				return 1;
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&FlowTermSelect::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&FlowTermSelect::OnSetFocus);
+			return 1;
+		}
+		
+		int  OnRetrieve()
+		{
+			xml x ;
+			
+			xaserverarg arg ;
+			;	
+			
+			arg.AddArg(L"stype",stype);
+			arg.AddArg(L"sdata",sdata);
+			arg.AddArg(L"flowID",flowid);
+
+			if (getUrl(L"/sale/data/Flow3/retrieve/flowex",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetReadOnly(true);
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			SetArg();
+			dw_list = GetControl(L"dw_list");
+			//dw_list.openUrl(L"xxx");
+			if(GetWinParam())
+			{
+				xaserverarg arg = GetArg();
+				stype = arg.GetArgString(L"stype");
+				sdata = arg.GetArgString(L"sdata");
+				flowid = arg.GetArgString(L"flowid");
+			
+				datacolumn = arg.GetArgString(L"datacolumn");
+				displaycolumn = arg.GetArgString(L"displaycolumn");
+			
+				xstring dwname = arg.GetArgString(L"dwname");
+				dw_list.openUrl(dwname);
+				OnRetrieve();
+				dw_list.SetSelectionMode(1);
+			}
+		
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			//SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/GroupManagerList_A.cpp b/jrj/project/business/SystemSettings/GroupManagerList_A.cpp
new file mode 100644
index 0000000..ca9b3d6
--- /dev/null
+++ b/jrj/project/business/SystemSettings/GroupManagerList_A.cpp
@@ -0,0 +1,1576 @@
+#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:
+	ProductLibrary4Win(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ProductLibrary4Win* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ProductLibrary4Win* pWin = new ProductLibrary4Win(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+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 KXMLDOMElement();
+		KXMLDOMElement e = dw_list.GetRowElement(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 = dw_list.GetGuid(row);
+		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 = dw_list.GetItemString(row, L"SKUID");
+			xstring customerItemNo =dw_list.GetItemString( 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 = dw_list.GetGuid(row);
+
+		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 = dw_list.GetItemString(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'>" + dw_list.GetItemString( row, (LPCTSTR)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 (dw_list.GetItemString( row, (LPCTSTR)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>" + dw_list.GetItemString( row, (LPCTSTR)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 (dw_list.GetItemString( 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' >" + dw_list.GetItemString( 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 >" +dw_list.GetItemString( row, (LPCTSTR)name) + L"</td>";
+			html += L"</tr>";
+		}
+
+		html += L"<tr>";
+		html += L"<td rowspan='3'>" +dw_list.GetItemString( row, L"PackCode") + L"</td><td >包装方式</td><td >" +
+			dw_list.GetItemString(row, L"CPack") + L"</td>";
+		html += L"</tr>";
+		html += L"<tr height='48'>";
+		html += L"<td >包装要求</td><td >" +dw_list.GetItemString( 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>" +dw_list.GetItemString( row, L"QualityCode") + L"</td><td >质量要求</td><td >" +
+			dw_list.GetItemString(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", 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 = dw_list.GetRowElement(row);
+		xstring skuid = dw_list.GetItemString( row, L"@guid");
+		xstring SKUNo = dw_list.GetItemString( 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 ;
+		x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
+			L"<ProductPictureID>" + id + L"</ProductPictureID>" +
+			L"<OriginFile>" + originfile + L"</OriginFile>" +
+			L"<FileExt>" + ext + L"</FileExt>" +
+			L"<SKUID>" + skuid + L"</SKUID>" +
+			L"<Name>[" + SKUNo.trim() + L"]</Name>" +
+			L"<FileName>" + id + L".jpg</FileName>" +
+			L"</Item>"
+		);
+
+		xaserverarg arg;
+		arg.AddArg(L"content", x.xml());
+		if (xurl::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 = dw_list.GetRowElement( row);
+		xstring skuid =dw_list.GetItemString( row, L"SKUID");
+		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
+		xstring CustomerID = m_customer;
+		xstring CustomerItemNo =dw_list.GetItemString( 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;
+		x.loadXML(L"<Item update.new='1' update.modify='1' guid='" + id + L"'>" +
+			L"<ProductPictureID>" + id + L"</ProductPictureID>" +
+			L"<OriginFile>" + originfile + L"</OriginFile>" +
+			L"<FileExt>" + ext + L"</FileExt>" +
+			L"<SKUID>" + skuid + L"</SKUID>" +
+			L"<CustomerItemNo>" + CustomerItemNo + L"</CustomerItemNo>" +
+			L"<CustomerID>" + CustomerID + L"</CustomerID>" +
+			L"<Name>[" + SKUNo.trim() + L"]</Name>" +
+			L"<FileName>" + id + L".jpg</FileName>" +
+			L"</Item>"
+		);
+
+		xaserverarg arg;
+		arg.AddArg(L"content", x.xml());
+		if (xurl::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 (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
+
+		xstring id = images.item(index).selectSingleNode(L"@guid").text();
+
+		xml x ;
+		xaserverarg arg;
+		arg.setNativePointer(arg.CreateInstance());
+		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
+		arg.AddArg(L"content", str);
+		if (xurl::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 =dw_list.GetItemString( row, L"SKUID");
+		xstring SKUNo =dw_list.GetItemString( row, L"SKUID/@__displaystring");
+		xstring CustomerID = m_customer;
+		xstring CustomerItemNo =dw_list.GetItemString( 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 (MessageBox(GetHWND(), L"确认删除当前图片?", L"提示", MB_OKCANCEL) != IDOK) return 1;
+
+		xstring id = images.item(index).selectSingleNode(L"@guid").text();
+
+		xml x;
+		xaserverarg arg;
+		xstring str = L"<Item update.modify='1' update.delete='1' guid='" + id + L"'/>";
+		arg.AddArg(L"content", str);
+		if (xurl::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 = dw_list.GetRowElement(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 = dw_list.GetRowElement(row);
+		//KXMLDOMElement e = dw_list.GetRowElement(row);
+		//alert(e.xml);
+		xstring id = dw_list.GetItemString( row, L"@guid");
+		//alert(id);
+
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+		xstring categoryid = e1.selectSingleNode(L"@guid").text();
+		//alert(categoryid);
+		xaserverarg* arg = new xaserverarg;
+		arg->AddArg(L"SKUID", id);
+		arg->AddArg(L"CategoryID", categoryid);
+
+		OpenWindow(L"dev:xpage[PictureView.Product3.vx]", (LPARAM)arg);
+
+		return 1;
+	}
+
+	int ItemMaint()
+	{
+		HTREEITEM 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);
+#ifdef shouldfinished
+		int pr = g_xdoc_product;
+		OpenWindow(L"dev:xpage[ProductLibraryItemMaint3.vx]", pr);
+#endif
+		return 1;
+	}
+
+	int ItemAdd()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM 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;
+		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);
+		OpenWindow(L"dev:xpage[Quick.Input.NewProduct.vx]", (LPARAM)&arg);
+
+		if (arg.GetArgString(L"data.modify") == L"1")RetrieveData();
+
+		return 1;
+	}
+
+	int OnAddFolder()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		xstring name = tv_folder.GetItemLabel(hTopItem);
+		xstring selectname = tv_folder.GetItemLabel(hItem);
+
+		xaserverarg arg;
+		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]",(LPARAM)&arg);
+				/*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()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		xstring name = tv_folder.GetItemLabel(hTopItem);
+		xstring selectname = tv_folder.GetItemLabel(hItem);
+
+		xaserverarg arg;
+		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]", (LPARAM)&arg);
+				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")
+		{
+#ifdef shouldfinish
+			OpenWindow(L"dev:xpage[ShoppingCartProductMaint.vx]", trust(g_xdoc_shoppingcart as int));
+#endif
+			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;
+			carg.setNativePointer(carg.CreateInstance());
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[SO.Simulation.Import.vx]", (LPARAM) & carg);
+			return 1;
+		}
+		else if (comdid == L"xmEnquiry")
+		{
+			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;
+			carg.setNativePointer(carg.CreateInstance());
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[Enquiry.Import.vx]", (LPARAM)&carg);
+			return 1;
+		}
+		else if (comdid == L"xmPurchar")
+		{
+			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 ;
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[PO.Import.vx]", (LPARAM)&carg);
+			return 1;
+		}
+		else if (comdid == L"xmSearch")
+		{
+			RetrieveData();
+			return 1;
+		}
+		else if (comdid == L"xmQuote")
+		{
+			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;
+			carg.AddArg(L"content", content);
+			OpenWindow(L"dev:xpage[Quote.Import.vx]",  (LPARAM) & carg);
+			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 = dw_list.GetItemString( 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 hCursor = xutil::SetCursorWait();
+			name = xcontrol(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")
+		{
+#ifdef shouldfinish
+			int r = cast(g_xdoc_product.getData(L"data/Item", L"@guid") as int);
+			OpenWindow(L"dev:xpage[Product.ItemProp.Maint.vx]", r);
+#endif
+			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 = xcontrol(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 =dw_list.GetRowElement(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(TEvent* evt, int param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	//查找当前树项的顶级目录
+	HTREEITEM LookupTopFolder(HTREEITEM hItem)
+	{
+		HTREEITEM hRoot = tv_folder.GetRootItem();
+		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
+		return hItem;
+	}
+
+	//插入产品类项的子项
+	int MakeGoodsFolderItem(HTREEITEM 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;
+
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 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(HTREEITEM 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;
+
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, label, e, 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(HTREEITEM 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");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+	int MakeGoodCarFolderItem(HTREEITEM 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");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+
+	int ExpandItem(HTREEITEM hItem)
+	{
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		xstring name = tv_folder.GetItemLabel(hTopItem);
+		HTREEITEM 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)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		return ExpandItem(hItem);
+	}
+
+	int ResetAgent(xstring agentAsk)
+	{
+		if (agentFor != agentAsk)
+		{
+			agentFor = agentAsk;
+			m_agentNode = 0;
+			SetAgent();
+		}
+		return 1;
+	}
+
+	HTREEITEM LookupCustomerFolder(HTREEITEM hItem)
+	{
+		while (true)
+		{
+			KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+			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(HTREEITEM hItem)
+	{
+		hItem = LookupCustomerFolder(hItem);
+		if (hItem == 0) return L"";
+		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+		xstring str = e1.getAttribute(L"no");
+		return str.mid(xstring(L"Customer:").length(), 9999);
+	}
+
+	int RetrieveData()
+	{
+		ximageview im = GetControl(L"im1");
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		HTREEITEM 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.Reset();
+			im.Redraw();
+
+
+			xshtml 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;
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+
+		if (name == L"购物车")
+		{
+			if (selectname != name)
+			{
+				KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+				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);
+					dw_list.Retrieve(ShoppingCartView::GetGoodsList(str, queryString));
+				}
+				else if (e1.getAttribute(L"categoryid") != L"")
+				{
+					xstring categoryid = e1.getAttribute(L"categoryid");
+					dwc_list.SetDataObject(ProductLibraryView::GetMaintListForm3(categoryid));
+					dwc_list.SetReadOnly(true);
+					dwc_list.Reset();
+					dw_list.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();
+					dw_list.Retrieve(ShoppingCartView::GetGoodsList(selectname, queryString));
+				}
+				//dwc_list.PostRetrieve();
+				dwc_list.Redraw();
+
+				xshtml xs = GetControl(L"html_detail");
+				if (dwc_list.GetRowCount() >= 1)
+				{
+					xs.SetContent(makeGoodscarHtml(1));
+
+					if (m_customer != L"")
+					{
+						xstring skuid =dw_list.GetItemString( 1, L"SKUID");
+						xstring customerItemNo =dw_list.GetItemString( 1, L"CustomerItemNo");
+						OnShowImage(skuid, customerItemNo);
+					}
+				}
+				else
+				{
+					im.Reset();
+					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");
+				}
+				else
+					return 1;
+
+				/*	dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(no).GetXmlDoc());
+					dw_list = GetControl(L"dw_list");
+					dw_list.Reset();
+					dw_list.SetReadOnly(true);
+				*/
+
+				if (name == L"个人库")
+					dw_list.Retrieve(ProductLibraryView::GetMaintRoleList3(no));
+				else
+				{
+					if (queryString != L"")
+					{
+
+						if (no == L"N000005")
+							dw_list.Retrieve(ProductLibraryView::GetMaintList3(L"", queryString, L""));
+						else
+							dw_list.Retrieve(ProductLibraryView::GetMaintList3(no, queryString, L""));
+					}
+					else
+					{
+						if (no == L"N000005") return 1;
+						dw_list.Retrieve(ProductLibraryView::GetMaintList3(no));
+					}
+				}
+				//dw_list.PostRetrieve();
+				dw_list.Redraw();
+
+				xshtml xs = GetControl(L"html_detail");
+				if (dw_list.GetRowCount() > 0)
+				{
+					xs.SetContent(makeHtml(1));
+					xstring id = dw_list.GetItemString( 1, L"@guid");
+					OnShowImage(id);
+				}
+				else
+				{
+					im.Reset();
+					im.Redraw();
+
+					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)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		HTREEITEM 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();
+		PostMessage(GetHWND(), 0x401, (WPARAM)L"xmRefresh", 0);
+
+		return 1;
+	}
+
+	int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
+	{
+		KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
+		int len = nlist.length();
+		for (int i = 0; i < len; i++)
+		{
+			KXMLDOMElement& e = * new KXMLDOMElement(nlist.item(i));
+			xstring name = e.getAttribute(L"cname");
+			xstring sImage = e.getAttribute(L"image");
+			int image = 15;
+			//if(sImage) image = sImage.toInt();
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 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(TEvent* evt, int lParam)
+	{
+		ximageview im = GetControl(L"im1");
+		xcombobox xc = GetControl(L"precent");
+		xstring text = xc.GetLBText();
+		int p = text.toInt();
+		if (p == 0) p = 100;
+		im.Preview(p);
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ProductLibrary4Win::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ProductLibrary4Win::OnSetFocus);
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnRowChanged);
+		AttachEvent(L"dwc_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&ProductLibrary4Win::OnGoodsCarRowChanged);
+		AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ProductLibrary4Win::OnTreeExpanding);
+		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ProductLibrary4Win::OnTreeSelChanged);
+		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick);	//checkbox打钩事件
+		AttachEvent(L"WM_COMMAND", (FEvent)&ProductLibrary4Win::OnCkbCLick2);	//checkbox打钩事件	
+
+		AttachEvent(L"im1", L"IMG_LDBCLICK", (FEvent)&ProductLibrary4Win::OnImgDBClicked);
+		AttachEvent(L"precent", L"CBN_SELCHANGE", (FEvent)&ProductLibrary4Win::OnViewZoomChange);
+
+		return 1;
+	}
+
+	int onload()
+	{
+		agentFor = L"goodslib";
+		m_customer = 0;
+
+		OnAttachEvent();
+
+		tv_folder = GetControl(L"tv_folder");
+		dw_list = GetControl(L"dw_list");
+		dwc_list = GetControl(L"dwc_list");
+
+		InitialFolder();
+
+		dw_list.SetDataObject(ProductLibraryView::GetMaintListForm3(L""));
+		dw_list = GetControl(L"dw_list");
+		dw_list.SetReadOnly(true);
+
+		dwc_list.openUrl(L"/sale/view/ProductLibrary/template/cart/goodslist");
+		dwc_list.SetReadOnly(true);
+
+		tv_folder.ExpandItem(tv_folder.GetRootItem());
+		tv_folder.ItemFocus(tv_folder.GetRootItem());
+
+		if (dw_list.GetRowCount())
+		{
+			xshtml xs = GetControl(L"html_detail");
+			xs.SetContent(makeHtml(1));
+		}
+
+		return 1;
+	}
+
+	int onloaded()
+	{
+		SetAgent();
+
+		return 1;
+	}
+
+	int OnImgDBClicked(TEvent * evt, int pr)
+	{
+		IMGNNMHDR& nmtv = *(IMGNNMHDR*)evt->notify.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.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;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/LogList.cpp b/jrj/project/business/SystemSettings/LogList.cpp
new file mode 100644
index 0000000..07f77fb
--- /dev/null
+++ b/jrj/project/business/SystemSettings/LogList.cpp
@@ -0,0 +1,217 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) ViewLogList : public xwin
+	{
+	public:
+		xdwgrid	dw_list;
+		xoffice 	dw_office;
+		xcell		dw_cell;
+		xnode	m_agentNode;	//Agent Condition
+		xstring m_category;
+		xstring argStr;
+		xstring	searchStr;
+	public:
+		ViewLogList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	public:
+		static ViewLogList* CreateInstance(void* implPtr, void* hWnd)
+		{
+			ViewLogList* pWin = new ViewLogList(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		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"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			HCURSOR hCursor =  0;
+			 if(comdid==L"xmQuery")
+			{
+						xaserverarg ar ;
+					
+						ar.AddArg(L"argurl",L"/sale/view/Total3/arg/LogListItem");
+						if(argStr !=L"") 
+							ar.AddArg(L"arg",argStr);
+						OpenWindow(L"dev:xpage[view.total.arg.vx]",ar);
+						xstring arstr = ar.GetArgString(L"arg");
+						if(arstr != L"" && ar.GetArgString(L"action")==L"ok")
+						{
+							argStr = arstr;
+							hCursor = xutil::SetCursorWait();
+							OnRetrieve(L"/sale/data/Total3/total/GDNTotal/Item/LogList",argStr);
+							
+							xutil::RestoreCursor(hCursor);
+						}
+					
+					else
+					{
+						argStr=L"";
+						OnRetrieve(L"/sale/data/Total3/total/GDNTotal/Item/LogList",argStr);
+					}
+				
+				return 1;
+			 }
+					 if(comdid==L"xmAnalysis")
+			{
+				hCursor = xutil::SetCursorWait();
+				xstring str = dw_list.DataAnalysis(L"");
+				xaserverarg arg;
+				;						
+				arg.AddArg(L"html", str);
+				
+				OpenWindow(L"dev:xpage[data.vanalysis.vx]", arg);
+				xutil::RestoreCursor(hCursor);
+				return 1;
+			 }
+					 if(comdid==L"xmSearch") return OnSearch();
+			return 0;
+		}
+					 
+		int OnSearch()
+		{
+			xaserverarg arg;
+			;						
+			arg.AddArg(L"text", searchStr);
+			OpenWindow(L"dev:xpage[search.dialog.vx]", arg);
+			xstring str = arg.GetArgString(L"text");
+			if(str != searchStr)
+			{
+				searchStr = str;
+				dw_list.Filter(L"*",searchStr);
+				return 1;
+			}
+			return 1;
+		}
+		
+
+		
+		int OnCombboChanged(TEvent* evt, LPARAM lParam)
+		{
+			int h = xcombobox::GetCurSel(evt->command.hCtrl);
+			if(h > -1) 
+			{
+				HCURSOR hCursor = xutil::SetCursorWait();
+				KXMLDOMElement e = xcombobox::GetItemData(evt->command.hCtrl, h);
+				
+				PostMessage(GetHWND(),0x401,(LPARAM)L"xmQuery",0);
+				//OnCmdDispatch(L"xmQuery");
+				xutil::RestoreCursor(hCursor);
+			}
+			return 1;
+		}
+
+		
+			
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnDWClick(TEvent* evt, int p)
+		{
+			DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+			xstring value = hdr.data;
+			xstring colname = hdr.colname;
+			int row = hdr.row;
+			
+			if(row < 1) return 1;
+			
+			return 1;
+		}
+
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&ViewLogList::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&ViewLogList::OnSetFocus);
+			AttachEvent(L"cb_report",L"CBN_SELCHANGE", (FEvent)&ViewLogList::OnCombboChanged);
+			AttachEvent(L"dw_report",L"DWV_CLICKED", (FEvent)&ViewLogList::OnDWClick);
+			return 1;
+		}
+		
+		int  OnRetrieve(xstring dataurl, xstring argstr)
+		{
+			dw_list.Reset();
+			
+			xml x ;
+			
+			xaserverarg arg ;
+			;	
+			arg.AddArg(L"arg",argstr);
+			//alert(argstr);
+				
+			if (xurl::get(dataurl,arg.GetString(),x)!=1)
+			{
+				//alert(x.xml());			
+				trace(x.text());
+				dw_list.Redraw();
+				return -1;
+			}
+			//alert(x.xml());			
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+			dw_list.SetReadOnly(true);
+
+			return 1;
+		}
+
+		int onload()
+		{
+			dw_list = GetControl(L"dw_report");
+			dw_office  = GetControl(L"dw_office");
+			dw_cell = GetControl(L"dw_cell");
+			dw_list.openUrl(L"/sale/view/Total3/template/business/gdn/LogList/ship/full");
+			
+			argStr =L"";
+			xcombobox xc = GetControl(L"cb_report");
+			
+
+			OnAttachEvent();	
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();
+			OnCmdDispatch(L"xmQuery");
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Organization_A.cpp b/jrj/project/business/SystemSettings/Organization_A.cpp
new file mode 100644
index 0000000..8f92f1c
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Organization_A.cpp
@@ -0,0 +1,513 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+class __declspec(dllexport) SO3list : public listwin
+{
+public:
+	string m_sType; //树选中的类型
+	string m_sTypeTxt; //树选中的数据
+	string urlTree;
+	string myDataUrl;
+	string rows;
+	xcombobox ddlb_1;
+	xcombobox cbx_datashow;
+
+	int changeddlb;
+
+	xtreeview tv_folder;
+	xdwgrid dw_goods;
+	xdwgrid dw_source;
+public:
+	SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
+public:
+	static SO3list* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SO3list* pWin = new SO3list(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+	//process tree
+	//查找当前树项的顶级目录
+	HTREEITEM LookupTopFolder(HTREEITEM hItem)
+	{
+		HTREEITEM hRoot = tv_folder.GetRootItem();
+		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
+		return hItem;
+	}
+
+	int ExpandCatChildFolder(HTREEITEM 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);
+			string name = e.getAttribute(L"name");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+
+	int ExpandFolderItem(HTREEITEM hItem, string no)
+	{
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows);
+		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);
+			string name = e.getAttribute(L"name");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+
+	//树展开
+	int OnTreeExpanding(TEvent* evt, int p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		string name = tv_folder.GetItemLabel(hTopItem);
+		HTREEITEM child = tv_folder.GetChildItem(hItem);
+
+		KXMLDOMElement e = tv_folder.GetItemData(hItem);
+		if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
+
+		return 1;
+	}
+
+	//展开子文件
+	int  ExpandChildFolder(HTREEITEM 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);
+			string name = e.getAttribute(L"name");
+			xstring sImage = e.getAttribute(L"image");
+			xstring child = e.getAttribute(L"child");
+			int image = 15;
+			if (sImage) image = sImage.toInt();
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
+			if (child != L"no") 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");
+		if (e)
+			ExpandChildFolder(0, e);
+		return 1;
+	}
+
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		if (changeddlb) return 1;
+		return OnPreRetrieve();
+	}
+
+	int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+			return 1;
+		}
+		else if (updateItem == L"setstate")
+		{
+			int row = dw_list.GetRow();
+			if (row < 1) return 1;
+			KXMLDOMElement ele = dw_list.GetRowElement(row);
+			string id = GetEntityIDName(1);
+			string entity = ele.selectSingleNode(id).text();
+			//trace(entity);
+			SetAgent(L"list", entity);
+			if (arg.GetArgString(L"state") != L"")
+				//this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state"));
+				dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
+			if (arg.GetArgString(L"billstatus") != L"")
+			{
+				xstring billstatus = arg.GetArgString(L"billstatus");
+				xstring statusName = GetBillStatusName(billstatus);
+				dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
+				dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
+			}
+
+			dw_list.Redraw();
+		}
+		return 1;
+	}
+
+	bool IsEmptyQueryStr(string queryStr)
+	{
+		if (queryStr == L"") return true;
+		if (queryStr == L"<items join='and'/>") return true;
+		if (queryStr == L"<items join=\"and\"/>") return true;
+		//trace(queryStr);
+		return false;
+	}
+
+	//检索
+	int OnPreRetrieve()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		if (!hItem) return 1;
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+		string no = e1.getAttribute(L"no");
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
+		if (x)
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		else
+		{
+			dw_list.Reset();
+			dw_list.Redraw();
+			dw_goods.Reset();
+			dw_goods.Redraw();
+		}
+		dw_list.SetReadOnly(true);
+		xutil::RestoreCursor(hCursor);
+		return 1;
+		/*
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //第几页
+		arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //每页数量
+		arg.AddArg(L"QueryTxt", m_QueryTxt,""); //查询条件
+		arg.AddArg(L"sType",m_sType,"");
+		arg.AddArg(L"sTypeTxt",m_sTypeTxt,"");
+		xml x =  ViewObject::MakeXml();
+
+		KXMLDOMElement   n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]");
+		if(n)
+		{
+			KXMLDOMElement e = n;
+			if(e.selectSingleNode(L"@dataUrl"))
+			{
+				string dataUrl = e.selectSingleNode(L"@dataUrl").text;
+				if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl;
+				getUrl(dataUrl, arg.GetString(), x);
+				KXMLDOMElement ele=x.GetXmlDoc().documentElement;
+				if(dw_pages.ptr_native_)
+				{
+					if(ele.selectSingleNode(L"@TotalPage"))
+					{
+						string s=ele.selectSingleNode(L"@TotalPage").text; //总数量
+						dw_pages.SetMaxPage(s.toInt());
+					}
+				}
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetReadOnly(true);
+			}
+			else
+			{
+				SetEntityData(arg);
+			}
+		}
+		else
+		{
+			SetEntityData(arg);
+		}
+		*/
+	}
+
+	//历史数据
+	int Onhistroydata()
+	{
+		int row = dw_list.GetNextSelectRow(1);
+		if (row > 0)
+		{
+			KXMLDOMElement e = dw_list.GetRowElement(row);
+			xaserverarg& arg = * new xaserverarg;
+			string sCustomerID = e.selectSingleNode(L"CustomerID").text();
+			arg.AddArg(L"CustomerID", sCustomerID, L"");
+			string sCustomerName = e.selectSingleNode(L"CustomerName").text();
+			arg.AddArg(L"CustomerName", sCustomerName, L"");
+			arg.AddArg(L"EntityName", GetEntityName(1), L"");
+			arg.AddArg(L"EntityID", GetEntityID(1), L"");
+			openUrl(L"/sale/view/SO/xpage/histroydata", &arg);
+		}
+		return 1;
+	}
+
+	//xcombobox下拉
+	int OnSelectDdlb(TEvent* evt, LPARAM p)
+	{
+		changeddlb = 1;
+		HWND wid = ddlb_1.GetHWND();
+		int CB_GETCURSEL = 0x0147;
+		int nIndex =SendMessage(wid, CB_GETCURSEL, 0, 0);
+		KXMLDOMElement e = ddlb_1.GetElement();
+		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
+		string no = e2.selectSingleNode(L"@element").text();
+
+		HTREEITEM hItem = tv_folder.GetRootItem();
+		while (tv_folder.GetChildItem(hItem))
+			tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
+		ExpandFolderItem(hItem, no);
+
+		changeddlb = 0;
+		return 1;
+	}
+
+
+	int OnSelectDataShowDdlb(TEvent* evt, LPARAM p)
+	{
+		HWND wid = cbx_datashow.GetHWND();
+		int CB_GETCURSEL = 0x0147;
+		int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0);
+		KXMLDOMElement e = cbx_datashow.GetElement();
+		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
+		rows = e2.selectSingleNode(L"@rows").text();
+		OnPreRetrieve();
+
+		return 1;
+	}
+
+	int PreOnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"action:bill.new")
+		{
+			xstring s = publiccode::GetUser().id;
+			xstring no = publiccode::GetUser().no;
+			if (no != L"00303" && no != L"admin")
+			{
+				KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
+				if (supplier_x)
+				{
+					if ((xstring)supplier_x.text() != L"业务员")
+					{
+						alert(L"当前角色不是业务员不能新增单子,请重新选择角色");
+						return 0;
+					}
+				}
+			}
+		}
+		if (comdid == L"action:bill.annex")
+		{
+			xstring deptname = publiccode::GetUser().deptname;
+			if (deptname == L"采购部")
+			{
+				return 1;
+			}
+
+			int row = dw_list.GetRow();
+			if (row < 1) return 1;
+			xstring guid = dw_list.GetItemString(row, L"SOID");
+			xaserverarg& arg = * new xaserverarg();
+
+			if (guid.length() <= 0)return 1;
+			
+			arg.AddArg(L"entityid", guid);
+			arg.AddArg(L"Type", L"Y");
+			OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg);
+
+			return 0;
+		}
+		if (comdid == L"action:bill.histroydata") return Onhistroydata();
+		else if (comdid == L"action:bill.refresh")
+		{
+			changeddlb = 1;
+			HTREEITEM RItem = tv_folder.GetRootItem();
+			while (tv_folder.GetChildItem(RItem))
+				tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
+			ExpandFolderItem(RItem, L"Category:Customer");
+			tv_folder.ExpandItem(RItem);
+			tv_folder.ItemFocus(RItem);
+			changeddlb = 0;
+			return OnPreRetrieve();
+		}
+		if (comdid == L"action:bill.saveas")
+		{
+			dw_list.SaveAs(L"");
+			return 1;
+		}
+		if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
+
+		return 1;
+	}
+
+	int OnSourceRemark()
+	{
+		xstring name = L"外销合同";
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
+		KXMLDOMNodeList items = x.selectNodes(L"data/Item");
+		KXMLDOMNode t = items.item(0);
+		xstring Content = L"";
+		if (t.selectSingleNode(L"Content"))
+		{
+			Content = t.selectSingleNode(L"Content").text();
+		}
+		xaserverarg& arg = *new xaserverarg;
+		arg.AddArg(L"value", Content);
+		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg);
+
+		return 1;
+	}
+
+	int OnRowChanged(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+
+
+		if (row < 1) return 1;
+
+		//fixed one event only one process
+		listwin::OnRowChanged(evt, p);
+
+		HCURSOR 	hCursor = xutil::SetCursorWait();
+
+		xstring SONo = dw_list.GetItemString(row, L"SONo");
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo);
+		if (x)
+			dw_goods.Retrieve(x);
+		else
+			dw_goods.Reset();
+		dw_goods.Redraw();
+		dw_goods.SetReadOnly(true);
+
+		x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo);
+		if (x)
+			dw_source.Retrieve(x);
+		else
+			dw_source.Reset();
+		dw_source.Redraw();
+		dw_source.SetReadOnly(true);
+
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+
+
+	int AttachListon()
+	{
+		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //树选择
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//绑定行更改触发事件OnRowChanged
+		//AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked);
+		AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//绑定下拉框更改触发事件OnSelectDdlb
+		AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//绑定选择数据显示下拉列表事件OnSelectDataShowDdlb
+		return 1;
+	}
+
+	int onload()
+	{
+		changeddlb = 0;
+		listwin::onload();
+		ddlb_1 = GetControl(L"cbx_1");
+		cbx_datashow = GetControl(L"cbx_datashow");
+		dw_goods = GetControl(L"dw_goods");
+		dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item");
+		dw_source = GetControl(L"dw_source");
+		dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem");
+
+		dw_goods.SetColumnState(L"ItemID", false);
+		dw_goods.SetColumnState(L"LineType", false);
+		dw_goods.SetColumnState(L"Brand", false);
+		dw_goods.SetColumnState(L"Assortment", false);
+		dw_goods.SetColumnState(L"ClassifyID", false);
+		dw_goods.SetColumnState(L"UnitFreight", false);
+		//dw_goods.SetColumnState(L"CName",false);//隐藏列
+
+		dw_goods.SetColumnState(L"Brand", false);
+		dw_goods.SetColumnState(L"SKUNo", false);
+		dw_goods.SetColumnState(L"SOLineNo", false);
+		dw_goods.SetColumnState(L"CustomerPONo", false);
+		dw_goods.SetColumnState(L"ScheduleShipDate", false);
+
+		dw_goods.SetColumnState(L"PackTechNote", false);
+		dw_goods.SetColumnState(L"EnquiryPriceListID", false);
+		dw_goods.SetColumnState(L"Submitter", false);
+		dw_goods.SetColumnState(L"POSupplierID", false);
+		dw_goods.SetColumnState(L"QuoteLineID", false);
+
+		dw_list.SetColumnState(L"CreatorID", false);
+		dw_list.SetColumnState(L"SOID", false);
+
+
+		string groupname = publiccode::GetUser().groupname;
+		if (groupname == L"采购小组")
+		{
+			dw_list.SetColumnState(L"USDAmount", false);
+			dw_list.SetColumnState(L"RMBAmount", false);
+
+			dw_goods.SetColumnState(L"UnitPrice", false);
+			dw_goods.SetColumnState(L"Amount", false);
+			dw_goods.SetColumnState(L"UnitCommPrice", false);
+			dw_goods.SetColumnState(L"CommissionRate", false);
+
+			dw_source.SetColumnState(L"UnitPrice", false);
+			dw_source.SetColumnState(L"Amount", false);
+			dw_source.SetColumnState(L"FOBAmount", false);
+			dw_source.SetColumnState(L"BuyUnitPrice", false);
+			dw_source.SetColumnState(L"BuyAmount", false);
+			dw_source.SetColumnState(L"CostRate", false);
+		}
+
+		rows = L"500";
+		myDataUrl = L"/sale/data/SaleOrder/folder/list";
+		urlTree = L"/sale/data/SaleOrder/folder";
+		tv_folder = GetControl(L"tv_folder");
+		tv_folder.SetLineAtRoot(true);
+		InitialFolder();
+
+		return 1;
+	}
+
+	int onloaded()
+	{
+		listwin::onloaded();
+
+		//attach my control event
+		AttachListon();
+
+		dw_list.SetColumnState(L"SOID", false);
+
+		HTREEITEM hItem = tv_folder.GetRootItem();
+		ExpandFolderItem(hItem, L"Category:Customer");
+		tv_folder.ExpandItem(hItem);
+		//tv_folder.ItemFocus(tv_folder.GetChildItem(hItem));
+		tv_folder.ItemFocus(hItem);
+
+
+		return -1;
+	}
+
+	int ProcessUsedArg(xaserverarg arg)
+	{
+		HTREEITEM hItem = tv_folder.GetCaretItem();
+		if (hItem ) return 1;
+		KXMLDOMElement e =  tv_folder.GetItemData(hItem);
+		xstring  no = e.getAttribute(L"no");
+		if (no.find(L"Customer:") >= 0)
+		{
+			arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
+			xstring name = e.getAttribute(L"name");
+			if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
+			arg.AddArg(L"CustomerName", name);
+		}
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/ProcessManagement_A.cpp b/jrj/project/business/SystemSettings/ProcessManagement_A.cpp
new file mode 100644
index 0000000..8f92f1c
--- /dev/null
+++ b/jrj/project/business/SystemSettings/ProcessManagement_A.cpp
@@ -0,0 +1,513 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+class __declspec(dllexport) SO3list : public listwin
+{
+public:
+	string m_sType; //树选中的类型
+	string m_sTypeTxt; //树选中的数据
+	string urlTree;
+	string myDataUrl;
+	string rows;
+	xcombobox ddlb_1;
+	xcombobox cbx_datashow;
+
+	int changeddlb;
+
+	xtreeview tv_folder;
+	xdwgrid dw_goods;
+	xdwgrid dw_source;
+public:
+	SO3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
+public:
+	static SO3list* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SO3list* pWin = new SO3list(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+	//process tree
+	//查找当前树项的顶级目录
+	HTREEITEM LookupTopFolder(HTREEITEM hItem)
+	{
+		HTREEITEM hRoot = tv_folder.GetRootItem();
+		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
+		return hItem;
+	}
+
+	int ExpandCatChildFolder(HTREEITEM 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);
+			string name = e.getAttribute(L"name");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+
+	int ExpandFolderItem(HTREEITEM hItem, string no)
+	{
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),urlTree, L"no", no, L"rows", rows);
+		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);
+			string name = e.getAttribute(L"name");
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, 35);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+
+	//树展开
+	int OnTreeExpanding(TEvent* evt, int p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		HTREEITEM hTopItem = LookupTopFolder(hItem);
+		string name = tv_folder.GetItemLabel(hTopItem);
+		HTREEITEM child = tv_folder.GetChildItem(hItem);
+
+		KXMLDOMElement e = tv_folder.GetItemData(hItem);
+		if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
+
+		return 1;
+	}
+
+	//展开子文件
+	int  ExpandChildFolder(HTREEITEM 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);
+			string name = e.getAttribute(L"name");
+			xstring sImage = e.getAttribute(L"image");
+			xstring child = e.getAttribute(L"child");
+			int image = 15;
+			if (sImage) image = sImage.toInt();
+			HTREEITEM h = tv_folder.InsertChildItem(hItem, name, e, image);
+			if (child != L"no") 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");
+		if (e)
+			ExpandChildFolder(0, e);
+		return 1;
+	}
+
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		if (changeddlb) return 1;
+		return OnPreRetrieve();
+	}
+
+	int ViewUpdate(LPARAM pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+			return 1;
+		}
+		else if (updateItem == L"setstate")
+		{
+			int row = dw_list.GetRow();
+			if (row < 1) return 1;
+			KXMLDOMElement ele = dw_list.GetRowElement(row);
+			string id = GetEntityIDName(1);
+			string entity = ele.selectSingleNode(id).text();
+			//trace(entity);
+			SetAgent(L"list", entity);
+			if (arg.GetArgString(L"state") != L"")
+				//this.dw_list.SetItemString(row, "ApprovalStatus", arg.GetArgString(L"state"));
+				dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
+			if (arg.GetArgString(L"billstatus") != L"")
+			{
+				xstring billstatus = arg.GetArgString(L"billstatus");
+				xstring statusName = GetBillStatusName(billstatus);
+				dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
+				dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
+			}
+
+			dw_list.Redraw();
+		}
+		return 1;
+	}
+
+	bool IsEmptyQueryStr(string queryStr)
+	{
+		if (queryStr == L"") return true;
+		if (queryStr == L"<items join='and'/>") return true;
+		if (queryStr == L"<items join=\"and\"/>") return true;
+		//trace(queryStr);
+		return false;
+	}
+
+	//检索
+	int OnPreRetrieve()
+	{
+		HTREEITEM hItem = tv_folder.GetSelectedItem();
+		if (!hItem) return 1;
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		KXMLDOMElement e1 = tv_folder.GetItemData(hItem);
+		string no = e1.getAttribute(L"no");
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
+		if (x)
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		else
+		{
+			dw_list.Reset();
+			dw_list.Redraw();
+			dw_goods.Reset();
+			dw_goods.Redraw();
+		}
+		dw_list.SetReadOnly(true);
+		xutil::RestoreCursor(hCursor);
+		return 1;
+		/*
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"pageindex", m_pageIndex.toString(),""); //第几页
+		arg.AddArg(L"pagenumber", m_pageNumber.toString(),""); //每页数量
+		arg.AddArg(L"QueryTxt", m_QueryTxt,""); //查询条件
+		arg.AddArg(L"sType",m_sType,"");
+		arg.AddArg(L"sTypeTxt",m_sTypeTxt,"");
+		xml x =  ViewObject::MakeXml();
+
+		KXMLDOMElement   n = m_configDoc.selectSingleNode(L"//list/dwview[@type='dwgrid'][1]");
+		if(n)
+		{
+			KXMLDOMElement e = n;
+			if(e.selectSingleNode(L"@dataUrl"))
+			{
+				string dataUrl = e.selectSingleNode(L"@dataUrl").text;
+				if(dataUrl.left(1)!="/") dataUrl = GetEntityName(1)+"/"+dataUrl;
+				getUrl(dataUrl, arg.GetString(), x);
+				KXMLDOMElement ele=x.GetXmlDoc().documentElement;
+				if(dw_pages.ptr_native_)
+				{
+					if(ele.selectSingleNode(L"@TotalPage"))
+					{
+						string s=ele.selectSingleNode(L"@TotalPage").text; //总数量
+						dw_pages.SetMaxPage(s.toInt());
+					}
+				}
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetReadOnly(true);
+			}
+			else
+			{
+				SetEntityData(arg);
+			}
+		}
+		else
+		{
+			SetEntityData(arg);
+		}
+		*/
+	}
+
+	//历史数据
+	int Onhistroydata()
+	{
+		int row = dw_list.GetNextSelectRow(1);
+		if (row > 0)
+		{
+			KXMLDOMElement e = dw_list.GetRowElement(row);
+			xaserverarg& arg = * new xaserverarg;
+			string sCustomerID = e.selectSingleNode(L"CustomerID").text();
+			arg.AddArg(L"CustomerID", sCustomerID, L"");
+			string sCustomerName = e.selectSingleNode(L"CustomerName").text();
+			arg.AddArg(L"CustomerName", sCustomerName, L"");
+			arg.AddArg(L"EntityName", GetEntityName(1), L"");
+			arg.AddArg(L"EntityID", GetEntityID(1), L"");
+			openUrl(L"/sale/view/SO/xpage/histroydata", &arg);
+		}
+		return 1;
+	}
+
+	//xcombobox下拉
+	int OnSelectDdlb(TEvent* evt, LPARAM p)
+	{
+		changeddlb = 1;
+		HWND wid = ddlb_1.GetHWND();
+		int CB_GETCURSEL = 0x0147;
+		int nIndex =SendMessage(wid, CB_GETCURSEL, 0, 0);
+		KXMLDOMElement e = ddlb_1.GetElement();
+		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
+		string no = e2.selectSingleNode(L"@element").text();
+
+		HTREEITEM hItem = tv_folder.GetRootItem();
+		while (tv_folder.GetChildItem(hItem))
+			tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
+		ExpandFolderItem(hItem, no);
+
+		changeddlb = 0;
+		return 1;
+	}
+
+
+	int OnSelectDataShowDdlb(TEvent* evt, LPARAM p)
+	{
+		HWND wid = cbx_datashow.GetHWND();
+		int CB_GETCURSEL = 0x0147;
+		int nIndex = SendMessage(wid, CB_GETCURSEL, 0, 0);
+		KXMLDOMElement e = cbx_datashow.GetElement();
+		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring(nIndex + 1) + L"]");
+		rows = e2.selectSingleNode(L"@rows").text();
+		OnPreRetrieve();
+
+		return 1;
+	}
+
+	int PreOnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"action:bill.new")
+		{
+			xstring s = publiccode::GetUser().id;
+			xstring no = publiccode::GetUser().no;
+			if (no != L"00303" && no != L"admin")
+			{
+				KXMLDOMDocument supplier_x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
+				if (supplier_x)
+				{
+					if ((xstring)supplier_x.text() != L"业务员")
+					{
+						alert(L"当前角色不是业务员不能新增单子,请重新选择角色");
+						return 0;
+					}
+				}
+			}
+		}
+		if (comdid == L"action:bill.annex")
+		{
+			xstring deptname = publiccode::GetUser().deptname;
+			if (deptname == L"采购部")
+			{
+				return 1;
+			}
+
+			int row = dw_list.GetRow();
+			if (row < 1) return 1;
+			xstring guid = dw_list.GetItemString(row, L"SOID");
+			xaserverarg& arg = * new xaserverarg();
+
+			if (guid.length() <= 0)return 1;
+			
+			arg.AddArg(L"entityid", guid);
+			arg.AddArg(L"Type", L"Y");
+			OpenWindow(L"dev:xpage[maint.Document.SO3.v3.vx]", arg);
+
+			return 0;
+		}
+		if (comdid == L"action:bill.histroydata") return Onhistroydata();
+		else if (comdid == L"action:bill.refresh")
+		{
+			changeddlb = 1;
+			HTREEITEM RItem = tv_folder.GetRootItem();
+			while (tv_folder.GetChildItem(RItem))
+				tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
+			ExpandFolderItem(RItem, L"Category:Customer");
+			tv_folder.ExpandItem(RItem);
+			tv_folder.ItemFocus(RItem);
+			changeddlb = 0;
+			return OnPreRetrieve();
+		}
+		if (comdid == L"action:bill.saveas")
+		{
+			dw_list.SaveAs(L"");
+			return 1;
+		}
+		if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
+
+		return 1;
+	}
+
+	int OnSourceRemark()
+	{
+		xstring name = L"外销合同";
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
+		KXMLDOMNodeList items = x.selectNodes(L"data/Item");
+		KXMLDOMNode t = items.item(0);
+		xstring Content = L"";
+		if (t.selectSingleNode(L"Content"))
+		{
+			Content = t.selectSingleNode(L"Content").text();
+		}
+		xaserverarg& arg = *new xaserverarg;
+		arg.AddArg(L"value", Content);
+		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg);
+
+		return 1;
+	}
+
+	int OnRowChanged(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR&  hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+
+
+		if (row < 1) return 1;
+
+		//fixed one event only one process
+		listwin::OnRowChanged(evt, p);
+
+		HCURSOR 	hCursor = xutil::SetCursorWait();
+
+		xstring SONo = dw_list.GetItemString(row, L"SONo");
+		KXMLDOMDocument x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/item", L"id", SONo);
+		if (x)
+			dw_goods.Retrieve(x);
+		else
+			dw_goods.Reset();
+		dw_goods.Redraw();
+		dw_goods.SetReadOnly(true);
+
+		x = ViewObject::RetrieveData(GetServerUrl(),L"/sale/data/SaleOrder/maint/itemwithsource", L"id", SONo);
+		if (x)
+			dw_source.Retrieve(x);
+		else
+			dw_source.Reset();
+		dw_source.Redraw();
+		dw_source.SetReadOnly(true);
+
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+
+
+	int AttachListon()
+	{
+		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&SO3list::OnTreeSelChanged); //树选择
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SO3list::OnRowChanged);//绑定行更改触发事件OnRowChanged
+		//AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&listwin::OnDoubleClicked);
+		AttachEvent(L"cbx_1", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDdlb);//绑定下拉框更改触发事件OnSelectDdlb
+		AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", (FEvent)&SO3list::OnSelectDataShowDdlb);//绑定选择数据显示下拉列表事件OnSelectDataShowDdlb
+		return 1;
+	}
+
+	int onload()
+	{
+		changeddlb = 0;
+		listwin::onload();
+		ddlb_1 = GetControl(L"cbx_1");
+		cbx_datashow = GetControl(L"cbx_datashow");
+		dw_goods = GetControl(L"dw_goods");
+		dw_goods.openUrl(GetServerUrl(),L"/sale/view/SaleOrder/template/item");
+		dw_source = GetControl(L"dw_source");
+		dw_source.openUrl(GetServerUrl(), L"/sale/view/SaleOrder/template/sourceitem");
+
+		dw_goods.SetColumnState(L"ItemID", false);
+		dw_goods.SetColumnState(L"LineType", false);
+		dw_goods.SetColumnState(L"Brand", false);
+		dw_goods.SetColumnState(L"Assortment", false);
+		dw_goods.SetColumnState(L"ClassifyID", false);
+		dw_goods.SetColumnState(L"UnitFreight", false);
+		//dw_goods.SetColumnState(L"CName",false);//隐藏列
+
+		dw_goods.SetColumnState(L"Brand", false);
+		dw_goods.SetColumnState(L"SKUNo", false);
+		dw_goods.SetColumnState(L"SOLineNo", false);
+		dw_goods.SetColumnState(L"CustomerPONo", false);
+		dw_goods.SetColumnState(L"ScheduleShipDate", false);
+
+		dw_goods.SetColumnState(L"PackTechNote", false);
+		dw_goods.SetColumnState(L"EnquiryPriceListID", false);
+		dw_goods.SetColumnState(L"Submitter", false);
+		dw_goods.SetColumnState(L"POSupplierID", false);
+		dw_goods.SetColumnState(L"QuoteLineID", false);
+
+		dw_list.SetColumnState(L"CreatorID", false);
+		dw_list.SetColumnState(L"SOID", false);
+
+
+		string groupname = publiccode::GetUser().groupname;
+		if (groupname == L"采购小组")
+		{
+			dw_list.SetColumnState(L"USDAmount", false);
+			dw_list.SetColumnState(L"RMBAmount", false);
+
+			dw_goods.SetColumnState(L"UnitPrice", false);
+			dw_goods.SetColumnState(L"Amount", false);
+			dw_goods.SetColumnState(L"UnitCommPrice", false);
+			dw_goods.SetColumnState(L"CommissionRate", false);
+
+			dw_source.SetColumnState(L"UnitPrice", false);
+			dw_source.SetColumnState(L"Amount", false);
+			dw_source.SetColumnState(L"FOBAmount", false);
+			dw_source.SetColumnState(L"BuyUnitPrice", false);
+			dw_source.SetColumnState(L"BuyAmount", false);
+			dw_source.SetColumnState(L"CostRate", false);
+		}
+
+		rows = L"500";
+		myDataUrl = L"/sale/data/SaleOrder/folder/list";
+		urlTree = L"/sale/data/SaleOrder/folder";
+		tv_folder = GetControl(L"tv_folder");
+		tv_folder.SetLineAtRoot(true);
+		InitialFolder();
+
+		return 1;
+	}
+
+	int onloaded()
+	{
+		listwin::onloaded();
+
+		//attach my control event
+		AttachListon();
+
+		dw_list.SetColumnState(L"SOID", false);
+
+		HTREEITEM hItem = tv_folder.GetRootItem();
+		ExpandFolderItem(hItem, L"Category:Customer");
+		tv_folder.ExpandItem(hItem);
+		//tv_folder.ItemFocus(tv_folder.GetChildItem(hItem));
+		tv_folder.ItemFocus(hItem);
+
+
+		return -1;
+	}
+
+	int ProcessUsedArg(xaserverarg arg)
+	{
+		HTREEITEM hItem = tv_folder.GetCaretItem();
+		if (hItem ) return 1;
+		KXMLDOMElement e =  tv_folder.GetItemData(hItem);
+		xstring  no = e.getAttribute(L"no");
+		if (no.find(L"Customer:") >= 0)
+		{
+			arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
+			xstring name = e.getAttribute(L"name");
+			if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
+			arg.AddArg(L"CustomerName", name);
+		}
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Resource.select.data.config.cpp b/jrj/project/business/SystemSettings/Resource.select.data.config.cpp
new file mode 100644
index 0000000..ea28235
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Resource.select.data.config.cpp
@@ -0,0 +1,93 @@
+use "dev:code[Data.resource.config.vx]"
+
+unit vbusiness.vpage
+[
+	resourceselectRole is extend DataRConfig;
+	about resourceselectRole
+	[
+		field:
+			
+		method:
+		[
+			int ForChild()
+			{
+				this.dw_list.SetReadOnly(true);
+				return 0;
+			}		
+		
+			int OnSelectAll()
+			{
+				if(this.dw_list.GetRowCount() > 0 )
+					this.dw_list.SelectRow(1,true);
+
+				this.dw_list.SelectRow(0,true);
+				this.dw_list.Redraw();
+				return 1;
+			}
+			
+			int OnSelectNo()
+			{
+				this.dw_list.SelectRow(0,false);
+				this.dw_list.Redraw();
+				return 1;
+			}
+			
+			int OnOk()
+			{
+				xdwgrid__ dw_param = this.GetParam();
+				if (dw_param)
+				{
+					int row = this.dw_list.GetNextSelectRow(1);
+					int dw_row = dw_param.GetRowCount();
+					while (row>0){
+						msxml::IXMLDOMElement e = this.dw_list.GetRowElement(row);
+						string scetegory = e.selectSingleNode("cetegory").text;
+						string sResource = e.selectSingleNode("resource").text;
+						string sName = e.selectSingleNode("name").text;
+						string sResConfigID = e.selectSingleNode("ResConfigID").text;
+						dw_row += 1;
+						dw_param.InsertRow(-1);
+						dw_param.SetItemString(dw_row,"cetegory",scetegory);
+						dw_param.SetItemString(dw_row,"resource",sResource);
+						dw_param.SetItemString(dw_row,"name",sName);
+						dw_param.SetItemString(dw_row,"ResConfigID",sResConfigID);
+					
+						this.dw_list.SelectRow(row,false);
+						row = this.dw_list.GetNextSelectRow(row + 1);
+					}
+					this.dw_list.Redraw();
+				}	
+				CloseWindow();
+				return 1;
+			}
+			
+			int OnCancel()
+			{
+				win__::CloseWindow();		
+				return 1;
+			}
+
+			int OnCmdDispatch(string comdid)
+			{
+				if (comdid=="SelectAll") OnSelectAll();
+				else if (comdid=="SelectNo") OnSelectNo();
+				else if (comdid=="Ok") OnOk();
+				else if (comdid=="Cancel") OnCancel();					
+				return 0;
+			}
+			
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int onload()
+			{
+				DataRConfig::onload();
+				this.dw_list.SetSelectionMode(3);
+				
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/Role.config.cpp b/jrj/project/business/SystemSettings/Role.config.cpp
new file mode 100644
index 0000000..f0287cc
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Role.config.cpp
@@ -0,0 +1,548 @@
+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 "sys.base.vl"
+
+use "dev:vm[xcell.vm]"
+
+unit vbusiness.vpage
+[
+	Roleconfig is extend TProject;
+	about Roleconfig
+	[
+		field:
+			
+		method:
+		[
+			treeview__	tv_menu;
+			xdwtable__ dw_list;
+			xdwgrid__ dw_param;
+			xdwgrid__ dw_role;
+			string m_status;
+			
+			int SetAgent()
+			{
+				string xfNodeAgentArea  = "agentarea";
+				xnode__ anode = new xnode__;
+				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
+				var xframeElement =  win__::GetElement();
+				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]");
+				if(agent)
+				{
+					string s = agent.xml+"";
+					SetAgentNodeContent (anode,s);
+				}
+				return 1;
+			}
+		
+			int createTree(string id, int parentItem)
+			{	
+				if(treeview__::GetChildItem(tv_menu.GetId(), parentItem) > 0) return 0;
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());	
+				arg.AddArg("pid",id);
+				//if(xaserver__::ExecXQuery(GetServerUrl(),"[leftFrame.xq]",arg.GetString(),x)!=1)
+				//if(url::get(m_iface+"/pref/tree",arg.GetString(),x)!=1)
+				if(url::get("/sale/data/Role.config/pref/tree",arg.GetString(),x)!=1)
+				{
+					trace(x.GetXml());
+					return -1;	
+				}
+				//trace(x.GetXml());
+				var list=x.GetXmlDoc().selectNodes("items/item");
+				int i=0,s=list.length;
+				msxml::IXMLDOMElement xitem;
+				for (i=0;i<s;i++)
+				{
+					xitem= list.item(s - i - 1);
+					string id = xitem.selectSingleNode("ModuleID").text;
+					string Name="";
+					if(xitem.selectSingleNode("ModuleName")) Name=xitem.selectSingleNode("ModuleName").text;
+					string image = 15;
+					if(xitem.selectSingleNode("ModuelImage")) image=xitem.selectSingleNode("ModuelImage").text;
+					int curItem=treeview__::InsertItem(tv_menu.GetId(), parentItem,0,Name,id,image.toInt());		
+					string child=xitem.selectSingleNode("@child").text;//item.getAttribute("HasChild");	
+					if (child != "0")
+						treeview__::SetItemChild1(tv_menu.GetId(), curItem,1);
+				}
+			}
+				
+			int OnNew()
+			{
+				int i =1;
+				while(dw_list.GetColumnName(i) != "")
+				{
+					dw_list.SetItemString(1, i, "");
+					i++;
+				}
+				dw_list.ResetUpdateStatus();
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				x.LoadXml("<item><ModuelPage/><status _displaystring='启用'>Y</status><type _displaystring='菜单'>0</type><ModuelImage>17</ModuelImage><ModuelParam><args/></ModuelParam><roles/></item>");
+				dw_list.Retrieve(x);
+				dw_list.ResetUpdateStatus();
+				dw_list.Redraw();
+				dw_param.Retrieve(x.GetXmlDoc().selectSingleNode("item/ModuelParam/args"));
+				dw_param.ResetUpdateStatus();
+				dw_param.Redraw();
+				dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("item/roles"));
+				dw_role.ResetUpdateStatus();
+				dw_role.Redraw();
+				return 1;
+			}
+			
+			int OnAddRow(xdwgrid__ dw)
+			{
+				dw.InsertRow(0);
+				return 1;
+			}
+			
+			int OnDelRow(xdwgrid__ dw)
+			{
+				int row = dw.GetRow();
+				if(row<1 || row > dw.GetRowCount()) return -1;
+				dw.DeleteRow(row);
+				return 1;
+			}
+/*			
+			int openUrl(string aurl, param para)
+			{
+				int pos = aurl.find("/",0);
+				if(pos<0) return "";
+				string iface = aurl.left(pos);
+				string root = aurl.mid(pos + 1,9999);
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				if( iface.find(".vface",0)<0 ) 
+				{
+					return -1;
+				}
+				else
+				{
+					string typ = iface.mid(iface.find(".",0) + 1,9999);
+					xaserver__::LoadUrl("","dev:"+typ+"["+iface+"]","",x);
+				}
+				var doc = x.GetXmlDoc();
+				var n = doc.selectSingleNode("//resource[@url='" + root+"']/@src");
+				if(n)
+				{
+					string xq = n.text;
+					return OpenWindow(xq, para);
+				}else
+				{
+					n = doc.selectSingleNode("//group[@for='worknode']/resource[@url='" + root+"']");
+					if(n)
+					{
+						string vface  = n.selectSingleNode("@vface").text;
+						string view   = n.selectSingleNode("@view").text;
+						string config = n.selectSingleNode("@config").text;
+						if(config != "" )
+						{
+							xaserverarg__ arg = para;
+							arg.AddArg("config",config);
+						}
+						
+						if(vface=="."|| vface=="")
+						{
+							var v = doc.selectSingleNode("//resource[@url='" + view+"']/@src");
+							if(v)
+							{
+								return OpenWindow(v.text, para);
+							}
+						}else
+							return openUrl(vface+"/"+view,para);
+					}
+				}
+				return -1;
+			}
+*/			
+			int OnAddRole()
+			{
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());		
+				//OpenWindow("dev:xpage[selectRole.vx]", arg);
+				//openUrl(m_vface+"/xpage/role/select/user", arg);
+				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;
+				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", name);
+					dw_role.SetItemString(row + i, "type", tpy);
+				}
+				return 1;
+			}
+			
+			int OnDel()
+			{
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				dw_list.DwUpdateAllTo(x.GetXmlDoc());
+				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
+				string id = e.selectSingleNode("@guid").text;
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());		
+				arg.AddArg("id", id);
+				//trace(id);
+				//if(xaserver__::ExecXQuery(GetServerUrl(),"[deleteModule.xq]",arg.GetString(),x)!=1)
+				//if(url::get(m_iface+"/pref/delete",arg.GetString(),x)!=1)
+				if(url::get("/sale/data/Role.config/pref/delete",arg.GetString(),x)!=1)
+				{
+					trace("error:"+x.GetXml());
+					alert("删除出错!");
+					return 0;
+				}
+				if(x.GetXmlDoc().selectSingleNode("error"))
+				{
+					alert("请先删除子项!");
+					return 0;				
+				}
+				int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
+				treeview__::DeleteItem(tv_menu.GetId(), sitem);
+				return 1;
+			}
+			
+			int OnSave()
+			{
+				dw_param.AcceptText();
+				dw_list.AcceptText();
+				/*int aa=1,bb=1;
+				xpoint p;
+				dw_list.getNullCell(p);
+				int xx = p.x;
+				trace(xx);
+				int yy = p.y;
+				trace(yy);
+				string zz = dw_list.GetColumnName(yy);
+				trace(zz);*/
+				
+				int m = treeview__::GetSelectedItem(tv_menu.GetId());
+				if(m == 0) return -1;
+				
+				int n = treeview__::GetRootItem(tv_menu.GetId());
+				if(m == n)
+					if(m_status == "update.modify")
+					{
+						alert("根节点不能修改!");
+						return 1;
+					}
+				
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				dw_list.DwUpdateAllTo(x.GetXmlDoc());
+				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
+				e.SetAttribute(m_status, "1");
+				//trace(e.xml);
+				//return 1;
+				
+				xml__ x1 = new xml__;
+				x1.setNativePointer(xml__ ::CreateInstance());
+				dw_param.DwUpdateAllTo(x1.GetXmlDoc());
+				msxml::IXMLDOMElement p = x1.GetXmlDoc().documentElement;
+				e.AppendChild(p);
+				
+				xml__ x2 = new xml__;
+				x2.setNativePointer(xml__ ::CreateInstance());
+				dw_role.DwUpdateAllToEx(x2.GetXmlDoc());
+				msxml::IXMLDOMElement r = x2.GetXmlDoc().documentElement;
+				e.AppendChild(r);
+				
+				//trace(e.xml);
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());		
+				arg.AddArg("content", e.xml);
+				arg.AddArg("dbmap", "Role.config.dbmap");
+				//if(xaserver__::ExecXQuery(GetServerUrl(),"[saveModule.xq]",arg.GetString(),x)!=1)
+				//if(url::get(m_iface+"/pref/save",arg.GetString(),x)!=1)
+				if(url::get("/sale/data/Role.config/pref/save",arg.GetString(),x)!=1)
+				{
+					trace("error:"+x.GetXml());
+					alert("保存出错!");
+					return 0;
+				}
+				//trace(x.GetXml());
+				if(x.GetXmlDoc().selectSingleNode("error"))
+				{
+					alert("保存出错2!");
+					return 0;				
+				}				
+				dw_list.ResetUpdateStatus();
+				dw_param.ResetUpdateStatus();
+				dw_role.ResetUpdateStatus();
+				
+				string id = e.selectSingleNode("@guid").text;
+				string name = "";
+				if(e.selectSingleNode("ModuleName"))
+					name = e.selectSingleNode("ModuleName").text;
+				string image = 15;
+				if(e.selectSingleNode("ModuelImage"))
+					image = e.selectSingleNode("ModuelImage").text;
+				int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
+				if(m_status == "update.new")
+					treeview__::InsertChildItem(tv_menu.GetId(), sitem, name, id, image.toInt());
+				else if(m_status == "update.modify")
+					treeview__::SetItemLabel(tv_menu.GetId(), sitem, name);
+				
+				if(m_status == "update.new")
+				{
+					OnNew();				
+					int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
+					string xxid = treeview__::GetItemData(tv_menu.GetId(), sitem);
+					dw_list.SetItemString(1, "ModulePID", xxid);
+				}
+				alert("保存成功!");
+				return 1;
+			}
+
+			int OnCmdDispatch(string comdid)
+			{
+				int hCursor = xutil__::SetCursorWait();
+				if(comdid == "New")
+				{
+					m_status = "update.new";
+					OnNew();				
+					int sitem = treeview__::GetSelectedItem(tv_menu.GetId());
+					string id = treeview__::GetItemData(tv_menu.GetId(), sitem);
+					dw_list.SetItemString(1, "ModulePID", id);
+				}
+				else if(comdid == "addparam")
+					OnAddRow(dw_param);
+				else if(comdid == "delparam")
+					OnDelRow(dw_param);
+				else if(comdid == "addrole")
+					OnAddRole();
+				else if(comdid == "delrole")
+					OnDelRow(dw_role);
+				else if(comdid == "Del")
+					OnDel();
+				else if(comdid == "Save")
+					OnSave();
+
+				xutil__::RestoreCursor(hCursor);
+				return 0;
+			}
+
+			int OnTreeMoveNode(ref TNotifyEvent evt,int p)	
+			{
+				ref TVNNMHDR nmtv = evt.pnmh;
+				int xfrom = nmtv.FromItem;
+				int xto = nmtv.ToItem;
+				
+				int ret = win__::MessageBox(this.GetHWND(), "确定移动节点!","提示:",1);
+				//trace(ret);
+				if(ret == 2)
+				{
+					treeview__::DeleteItem(tv_menu.GetId(), xto);
+					return -1;
+				}
+				
+				string fid = treeview__::GetItemData(tv_menu.GetId(), xfrom);
+				int xpto = treeview__::GetParentItem(tv_menu.GetId(), xto);
+				string tid = treeview__::GetItemData(tv_menu.GetId(), xpto);
+				
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());		
+				arg.AddArg("from", fid);
+				arg.AddArg("to", tid);
+				trace(arg.GetString());
+				//if(url::get(m_iface+"/pref/tree/move",arg.GetString(),x)!=1)
+				if(url::get("/sale/data/Role.config/pref/tree/move",arg.GetString(),x)!=1)
+				{
+					trace("error:"+x.GetXml());
+					alert("移动节点出错!");
+					treeview__::DeleteItem(tv_menu.GetId(), xto);
+					return 0;
+				}
+				treeview__::DeleteItem(tv_menu.GetId(), xfrom);
+				return 1;
+			}
+
+			int OnTreeExpanding(ref TNotifyEvent evt,int p)	
+			{
+				ref NMTREEVIEW nmtv = evt.pnmh;
+				int sitem = nmtv.itemNew.hItem;
+					
+				string id = treeview__::GetItemData(tv_menu.GetId(), sitem);
+				int hCursor = xutil__::SetCursorWait();
+				createTree(id, sitem);
+				xutil__::RestoreCursor(hCursor);
+				return 1;
+			}
+			
+			int OnTreeSelChanged(ref TNotifyEvent evt,int p)
+			{
+				ref NMTREEVIEW nmtv = evt.pnmh;
+				int hItem = nmtv.itemNew.hItem;
+				
+				int hCursor = xutil__::SetCursorWait();
+				string id = treeview__::GetItemData(tv_menu.GetId(), hItem);
+				//trace(id);
+				m_status = "update.modify";
+				
+				OnNew();
+				
+				int xItem = treeview__::GetRootItem(tv_menu.GetId());
+				if(hItem == xItem)
+				{
+					string label = treeview__::GetItemLabel(tv_menu.GetId(), xItem);
+					dw_list.SetItemString(1, "ModuleName", label);
+					dw_list.ResetUpdateStatus();
+					return 0;
+				}
+				
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());	
+				arg.AddArg("id",id);
+				//if(xaserver__::ExecXQuery(GetServerUrl(),"[leftMenu.xq]",arg.GetString(),x)!=1)
+				//if(url::get(m_iface+"/pref/maint",arg.GetString(),x)!=1)
+				if(url::get("/sale/data/Role.config/pref/maint",arg.GetString(),x)!=1)
+				{
+					trace(x.GetXml());
+					return -1;	
+				}
+				dw_list.Retrieve(x);
+				dw_list.ResetUpdateStatus();
+				dw_list.Redraw();
+				if(x.GetXmlDoc().selectSingleNode("item/ModuelParam/args"))
+				{
+					dw_param.Retrieve(x.GetXmlDoc().selectSingleNode("item/ModuelParam/args"));
+					dw_param.ResetUpdateStatus();
+					dw_param.Redraw();
+				}
+				if(x.GetXmlDoc().selectSingleNode("item/roles"))
+				{
+					dw_role.Retrieve(x.GetXmlDoc().selectSingleNode("item/roles"));
+					dw_role.ResetUpdateStatus();
+					dw_role.SetReadOnly(true);
+					dw_role.Redraw();
+				}
+				//msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
+				
+				xutil__::RestoreCursor(hCursor);
+				return 1;
+			}
+			
+			int OnSetFocus(ref TEvent evt,int p)
+			{
+				SetAgent();
+				return 1;
+			}
+
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int OnItemChanged(ref TNotifyEvent evt,int p)
+			{
+				ref DWNMHDR  hdr = evt.pnmh;
+				string colname=hdr.colname;
+				if(colname == "type")
+				{
+					string value = hdr.data;
+					//trace(colname, value);
+					if(value == "0")
+						dw_list.SetItemString(1, "ModuelImage", "17");
+					else
+						dw_list.SetItemString(1, "ModuelImage", "16");
+				}
+				return 1;		
+			}
+					
+			int OnDBClick(ref TNotifyEvent evt,int p)
+			{
+				ref DWNMHDR  hdr = evt.pnmh;
+				string colname=hdr.colname;
+				if(colname == "type")
+				{
+					string value = hdr.data;
+					//trace(colname, value);
+					if(value == "0")
+						dw_list.SetItemString(1, "ModuelImage", "17");
+					else
+						dw_list.SetItemString(1, "ModuelImage", "16");
+				}
+				return 1;
+			}
+
+			int OnItemError(ref TNotifyEvent evt,int p)
+			{
+				ref DWNMHDR  hdr = evt.pnmh;
+				string colname=hdr.colname;
+				trace(colname);
+				int e = hdr.idFrom;
+				trace(e);
+
+				return 1;
+			}
+
+			int onload()
+			{
+				tv_menu = new treeview__;
+				tv_menu.setNativePointer(GetControl("tv_folder"));
+				int hItem = treeview__::InsertChildItem(tv_menu.GetId(), 0, "模块", "", 17);
+				createTree("null", hItem);
+				treeview__::ExpandItemEx(tv_menu.GetId(), hItem);
+				
+				dw_list = new xdwtable__;
+				dw_list.setNativePointer(GetControl("dw_base"));				
+				//dw_list.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/module]");
+				//dw_list.openUrl(m_vface+"/template/role/config/module");
+				dw_list.openUrl("/sale/view/Role.config/template/role/config/module");
+				dw_list.SetColHeaderHeight(0);
+				dw_list.SetRowSelectorWidth(0);
+				dw_list.SetScrollState(false);
+				
+				dw_param = new xdwgrid__;
+				dw_param.setNativePointer(GetControl("dw_param"));			
+				//dw_param.SetDataObject(GetServerUrl(), "dev:sheet[leftFrame.tpl/param]");
+				//dw_param.openUrl(m_vface+"/template/role/config/param");
+				dw_param.openUrl("/sale/view/Role.config/template/role/config/param");
+				
+				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);
+
+				AttachEvent("tv_folder", "TVN_ITEMEXPANDING",OnTreeExpanding);
+				AttachEvent("tv_folder", "TVN_SELCHANGED",OnTreeSelChanged);	
+				AttachEvent("tv_folder", "TVN_ENDDRAG",OnTreeMoveNode);	
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+				AttachEvent("WM_SETFOCUS",OnSetFocus);
+				AttachEvent("dw_base","DWV_ITEMCHANGED",OnItemChanged);
+				AttachEvent("dw_base","DWV_DOUBLECLICKED",OnDBClick);
+				AttachEvent("dw_base","DWV_ITEMERROR",OnItemError);
+
+				SetAgent();
+
+				return 1;
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/SysLoginRecord.cpp b/jrj/project/business/SystemSettings/SysLoginRecord.cpp
new file mode 100644
index 0000000..72012a6
--- /dev/null
+++ b/jrj/project/business/SystemSettings/SysLoginRecord.cpp
@@ -0,0 +1,101 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport)  SysLoginRecord : public xframe
+	{
+	public:
+		xdwgrid  dw_logrecord;		
+		xdwtable dw_arg;
+	public:
+		SysLoginRecord(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static SysLoginRecord* CreateInstance(void* implPtr, void* hWnd)
+		{
+			SysLoginRecord* pWin = new SysLoginRecord(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int OnRetrieve()
+			{
+				xcontrol xc_text =GetControl(L"QueryTxt");				
+				xcontrol xc_cbx = GetControl(L"cbx_type");				
+				xstring ls_querytxt;
+				xstring ls_querytype;
+				ls_querytxt =   xc_text.GetText();
+				ls_querytype = xc_cbx.GetText();
+				xml x ;
+				xaserverarg arg ;
+				arg.AddArg(L"sType",ls_querytype);
+				arg.AddArg(L"QueryText",ls_querytxt);
+				arg.AddArg(L"QueryArg",GetQueryArg());
+				//alert(ls_querytxt);
+				if (xurl::get(L"/sale/data/Total3/total/GDNTotal/Item/GetSysLoginLog",arg.GetString(),x) == 1)
+				{
+					//trace(x.xml());
+					dw_logrecord.Retrieve(x);
+					dw_logrecord.Redraw();
+					dw_logrecord.SetSelectionMode(1);
+				}
+				else
+					alert(L"查不到");				
+				return 1;
+			}
+			//命令发布函数
+			int OnCmdDispatch(xstring comdid)
+			{
+				HCURSOR hCursor = xutil::SetCursorWait();
+				if(comdid==L"ContSearch")
+					OnRetrieve();
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(TEvent* evt, LPARAM param)
+			{
+				return OnCmdDispatch(evt->xcommand.pStrID);
+			}
+				
+				xstring GetQueryArg()
+		{
+			dw_arg.AcceptText();
+			xml x ;
+			
+			dw_arg.DwUpdateAllTo(x);
+			return x.xml();
+		}	
+						
+						
+			int OnAttachEvent()
+			{
+				AttachEvent(L"WM_XCOMMAND", (FEvent)&SysLoginRecord::OnXCommand);
+				return 1;
+			}
+		
+		int onload()
+		{
+			dw_logrecord = GetControl(L"dw_logrecord");
+			dw_logrecord.openUrl(L"/sale/view/SysUser/template/SysLoginRecord");
+			dw_arg = GetControl(L"dw_arg");
+			dw_arg.openUrl(L"/sale/view/AR/template/queryarg");
+			dw_arg.SetColHeaderHeight(0);
+			dw_arg.SetRowSelectorWidth(0);
+			dw_arg.SetHScrollState(false);
+			dw_arg.SetVScrollState(false);
+			return 0;
+		}
+		int onloaded()
+		{
+				//alert(L"xxx");
+				OnAttachEvent();
+				//OnRetrieve();
+				return 1;
+			}			
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/SysUser.cpp b/jrj/project/business/SystemSettings/SysUser.cpp
new file mode 100644
index 0000000..51322ba
--- /dev/null
+++ b/jrj/project/business/SystemSettings/SysUser.cpp
@@ -0,0 +1,330 @@
+use "win.vl"
+use "treeview.vm"
+use "dev:vm[xdwgrid.vm]"
+use "dev:vm[xdwtable.vm]"
+use "pref.vl"
+use "dev:vm[xml.vm]"
+use "dev:vm[xaserverarg.vm]"
+use "dev:vm[xaserver.vm]"
+use "dev:vm[xutil.vm]"
+use "dev:code[pa.tpp]"
+use "list.vl"
+
+unit vbusiness.xpage
+[
+	SysUser is extend list;
+	about SysUser
+	[
+		
+		method:
+		[
+			treeview__ tv_usergroup;
+			xdwgrid__ dw_user;
+			xnode__	m_agentNode;
+			string strJobID;			
+			int SetAgent()
+			{
+				string xfNodeAgentArea  = "agentarea";
+				xnode__ anode = new xnode__;
+				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
+				var xframeElement =  GetElement();
+				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					SetAgentNodeContent (anode,s);
+				}
+				return 1;
+			}
+			
+			//焦点激活处理函数
+			int OnSetFocus(ref TEvent evt,int param)
+			{
+				SetAgent();
+				//重置工具条
+				return 1;
+			}
+				
+			int SetEntityData(param p)
+			{
+				xml__ x=new xml__;	
+				x.setNativePointer(x.CreateInstance());
+				xaserverarg__ arg = new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());
+				string str = this.m_QueryTxt;
+				//trace(ele.xml);
+				//alert(str);
+				arg.AddArg("guid",str);
+				//trace(strJobID);
+				if (xaserver__::ExecXQuery("","[list.SysUser.xq]",arg.GetString(),x) == 1)
+				{
+					dw_user.AcceptText();					
+					dw_user.Retrieve(x);
+					dw_user.Redraw();
+				}
+				return 1;
+			}
+			
+			int OnTreeSelChanged(ref TNotifyEvent evt,int p)
+			{
+				ref NMTREEVIEW nmtv = evt.pnmh;
+				int hItem = nmtv.itemNew.hItem;	
+			
+				int wid = tv_usergroup.GetId();
+				int hitem=treeview__::GetSelectedItem(wid);
+				int rootItem = treeview__::GetRootItem(wid);
+				//if (hItem <=0 || hItem == rootItem) 
+				//	return 0;	
+				msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
+				//trace("ok");
+				if (ele)
+				{				
+					xml__ x=new xml__;	
+					x.setNativePointer(x.CreateInstance());
+					xaserverarg__ arg = new xaserverarg__;
+					arg.setNativePointer(arg.CreateInstance());
+					strJobID = ele.selectSingleNode("@JobID").text;
+					//trace(ele.xml);
+					//alert(strJobID);
+					arg.AddArg("guid",strJobID);
+					//trace(strJobID);
+					if (xaserver__::ExecXQuery("","[list.SysUser.xq]",arg.GetString(),x) == 1)
+					{
+						dw_user.AcceptText();					
+						dw_user.Retrieve(x);
+						dw_user.Redraw();
+					}
+				}
+				
+				return 1;
+			}
+
+			int xmImport()
+			{
+				
+				int wid = tv_usergroup.GetId();
+				int hitem=treeview__::GetSelectedItem(wid);
+				if (!hitem)
+				{
+					alert("请选择职位!");
+					return 0;
+				}
+				OpenWindow("dev:xpage[UserImport.vx]",this);						
+				//openUrl("系统用户.vface/xpage/SysUser/UserImport", this);
+				return 1;		
+			}
+			int OnSave()
+			{
+				xml__ x=new xml__;
+				x.setNativePointer(x.CreateInstance());			
+				dw_user.DwUpdateAllToEx(x.GetXmlDoc());
+				xaserverarg__ arg = new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());
+				arg.AddArg("content",x.GetXml());
+				arg.AddArg("dbmap","SysUser.dbmap");
+				if(getUrl("/sale/data/SysUser/SysUser",arg.GetString(),x)!=1)
+				{
+					//trace("error:"+x.GetXml());
+					alert("保存失败");
+				}
+				else{
+					if(x.GetXmlDoc().selectSingleNode("erroe"))
+					{
+						alert("保存出错2! ");
+						return 0;				
+					}
+					//trace(x.GetXml());
+					dw_user.ResetUpdateStatus();
+					win__::MessageBox(GetHWND(),"保存成功!","提示",0);	
+				}
+				
+/*					arg.AddArg("xdata",x.GetXml());
+				//arg.AddArg("jobguid",strJobID);
+				//trace(x.GetXml());
+				//trace(strJobID);				
+				//if (getUrl("/sale/data/SysUser/SysUser",arg.GetString(),x) != 1)
+				//trace(xaserver__::ExecXAction(GetServerUrl(),"[SysUser.xa]",arg.GetString(),x));
+			if (xaserver__::ExecXAction(GetServerUrl(),"[SysUser.xa]",arg.GetString(),x)!=1)				
+				{
+					//trace("error:"+x.GetXml());
+					alert("保存失败");
+				}
+				else{
+					if(x.GetXmlDoc().selectSingleNode("ERROR"))
+					{
+						alert("保存出错2! ");
+						return 0;				
+					}
+					win__::MessageBox(GetHWND(),"保存成功!","提示",0);	
+				}*/
+				return 1;
+			}				
+			int OnAddRow()
+			{
+				int wid = tv_usergroup.GetId();
+				int hitem=treeview__::GetSelectedItem(wid);
+				if(hitem==0)
+				{
+					alert("请先选择职位类型!");
+				}
+				else
+				{
+					int row = dw_user.InsertRow(0);
+					dw_user.SetItemString(row,"Status","Y");				
+				}
+				return 1;
+			}
+			
+			int OnInsertRow()
+			{
+				int wid = tv_usergroup.GetId();
+				int hitem=treeview__::GetSelectedItem(wid);
+				if(hitem==0)
+				{
+					alert("请先选择职位类型!");
+				}
+				else
+				{
+					int crow=dw_user.GetRow();
+					int row=dw_user.InsertRow(crow);
+					dw_user.SetItemString(row,"Status","Y");				
+				}
+				return 1;
+			}
+
+			int OnDeleteRow()
+			{
+				int row=dw_user.GetRow();
+				dw_user.DeleteRow(row);
+				return 1;
+			}
+				
+			int OnJobType()
+			{
+				openUrl("组织架构.vface/worknode/Hr/HrJob");
+				return 1;
+			}
+				
+			int OnClicked(ref TNotifyEvent evt,int p)
+			{	
+				ref DWNMHDR  hdr = evt.pnmh;				
+				int row = hdr.row;
+				int col=hdr.col ;
+				string colname=dw_user.GetColumnName(col);
+				msxml::IXMLDOMElement xrow = dw_user.GetRowElement(row);
+				string BindComputer=xrow.selectSingleNode("BindComputer").text;			
+				xaserverarg__ arg = new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());
+				if(BindComputer  != "" )
+				{	
+					arg.AddArg("BindComputer",BindComputer);					
+				}
+			
+				string comdid;
+				if(colname=="BindComputer")
+				{	
+					openUrl("系统用户.vface/xpage/SysUser/BindComputer/dialog", arg);		
+					comdid = arg.GetArgString("comdid");			
+					if(comdid=="ok")
+					{
+						string strxml = arg.GetArgString("xml");					
+						dw_user.SetItemDisplayString(row,colname,strxml); 
+						dw_user.SetItemString(row,colname,strxml); 					
+						dw_user.Redraw();
+					}
+				}				
+				return 1;
+			}	
+					
+			int OnResetPass()
+			{
+				xaserverarg__ arg = new xaserverarg__;
+				int pt = arg.CreateInstance();
+				arg.setNativePointer(pt);
+					
+				int row = dw_user.GetRow();
+				if(row < 1) return 1;
+				arg.AddArg("user", dw_user.GetItemString(row,"EmployeeNo"));
+				
+				OpenWindow("dev:xpage[ResetUserPassDlg.vx]",pt);
+				return 1;
+			}
+					
+			int Onlog()
+			{
+				openUrl("/sale/view/SysUser/xpage/SysUser/SysLoginRecord");
+				return 1;
+			}
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if (comdid =="Save")  OnSave();
+				else if (comdid =="AddRow") OnAddRow();
+				else if (comdid =="InsertRow") OnInsertRow();
+				else if (comdid =="DeleteRow") OnDeleteRow();
+				else if (comdid =="JobType") OnJobType();
+				else if (comdid=="xmImport") xmImport();
+				else if (comdid == "xmLog") Onlog();
+				else if(comdid=="_cb_grid_search") return GridSearchEx();
+				else if(comdid=="xmResetPass") return OnResetPass();
+				else if(comdid=="xmResetPassEx") OpenWindow("dev:xpage[SysForcePassward.vx]");
+				return 0;			
+			}
+			
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int param)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+				//获取焦点事件,用于重置工具条
+				AttachEvent("WM_SETFOCUS",OnSetFocus);
+				//获得树的选择事件
+				AttachEvent("tv_usergroup", "TVN_SELCHANGED",OnTreeSelChanged);
+				//AttachEvent("dw_user","DWV_ITEMBEINGEDIT",OnClicked);					
+				AttachEvent("dw_user","DWV_DOUBLECLICKED",OnClicked);					
+			}
+			
+			int OnInitial()
+			{
+				SetAgent();
+
+				OnAttachEvent();
+				return 1;
+			}
+			
+			int onload()
+			{
+				m_agentNode = new xnode__;
+				
+				tv_usergroup =  new treeview__;
+				tv_usergroup.setNativePointer(this.GetControl("tv_usergroup"));			
+				dw_user =  new xdwgrid__;
+				dw_user.setNativePointer(this.GetControl("dw_user"));				
+				dw_user.SetDataObject(GetServerUrl(),"dev:sheet[SysUser.tpl/UserList]");	
+				dw_user.SetReadOnly(true);		
+				dw_user.SetSelectionMode(1);
+
+				OnInitial();
+				int wid = tv_usergroup.GetId();
+				int root = treeview__::GetRootItem(wid);		
+				treeview__::ExpandItem(wid,root);
+
+				xml__ x=new xml__;
+				x.setNativePointer(xml__::CreateInstance());				
+				x.LoadXml("<Config/>");
+				this.m_configDoc = x.GetXmlDoc();
+				rowSearch("系统用户.vface/template/SysUser/list");
+				GridSearchEx();
+				
+				return 1;
+			}
+		]
+		
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/TestRetrieveing.cpp b/jrj/project/business/SystemSettings/TestRetrieveing.cpp
new file mode 100644
index 0000000..d61909f
--- /dev/null
+++ b/jrj/project/business/SystemSettings/TestRetrieveing.cpp
@@ -0,0 +1,67 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) TestRetrieveingWin:  public xframe
+	{
+	public:
+		//xdwgrid	dw_list;
+
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		TestRetrieveingWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static TestRetrieveingWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			TestRetrieveingWin* pWin = new TestRetrieveingWin(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"RetrieveFinished")
+			{
+				CloseWindow();
+				return 1;
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&TestRetrieveingWin::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&TestRetrieveingWin::OnSetFocus);
+			return 1;
+		}
+		
+		int onload()
+		{
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/UserImport.cpp b/jrj/project/business/SystemSettings/UserImport.cpp
new file mode 100644
index 0000000..801196b
--- /dev/null
+++ b/jrj/project/business/SystemSettings/UserImport.cpp
@@ -0,0 +1,329 @@
+use "win.vl"
+use "treeview.vm"
+use "dev:vm[xdwgrid.vm]"
+use "dev:vm[xdwtable.vm]"
+use "pref.vl"
+use "dev:vm[xml.vm]"
+use "dev:vm[xaserverarg.vm]"
+use "dev:vm[xaserver.vm]"
+use "dev:vm[xutil.vm]"
+use "dev:code[SysUser.vx]"
+use "frame.vl"
+use "file.vl"
+unit vbusiness.xpage
+[
+	UserImport is extend frame;
+	about UserImport
+	[
+		field:
+		[
+			SysUser lw_obj;
+			xdwgrid__	dw_list;
+			treeview__		tv_org;
+			xnode__	m_agentNode;	//Agent Condition
+			string	m_agentCond;	//Agent Node
+			string	m_sTxt;
+			string		is_orgid;			
+		]
+		
+		method:
+		[
+			int SetAgent()
+			{
+				string xfNodeAgentArea  = "agentarea";
+				xnode__ anode = new xnode__;
+				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
+				var xframeElement =  GetElement();
+				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					SetAgentNodeContent (anode,s);
+				}
+				return 1;
+			}
+
+			//焦点激活处理函数
+			int OnSetFocus(ref TEvent evt,int param)
+			{
+				SetAgent();
+				//重置工具条
+				return 1;
+			}
+
+			int  OnRetrieve(string ls_orgid)
+			{
+
+				xml__ x=new xml__;
+				x.setNativePointer(x.CreateInstance());
+				xaserverarg__ arg = new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());
+				arg.AddArg("OrgID",ls_orgid);
+				//trace(ls_orgid);
+				//if (xaserver__::ExecXQuery(GetServerUrl(),"[MSSqlHrEmployee.xq]",arg.GetString(),x) == 1)
+				if (url::get("SysUser.config/UserSelect.xq",arg.GetString(),x) == 1)
+				{
+					dw_list.Retrieve(x);
+					dw_list.Redraw();
+				}
+				//trace(x.GetXml());
+				return 1;
+			}
+			
+			int OnOK()
+			{
+				if (GetParam())
+				{
+					lw_obj = new SysUser;
+					lw_obj.setNativePointer(GetParam());
+					lw_obj = GetParam();
+				}
+				else
+					return 0;
+
+				int row = dw_list.GetNextSelectRow(1);
+				trace(row);
+				if (row<1)
+				{
+					alert("请选择人员!");
+					return 1;
+				}	
+				
+				string sPositionID,sPositionName;
+				string sOrgID,sOrgName;
+				string sJobID,sJobName;
+				int wid = lw_obj.tv_usergroup.GetId();
+				int hitem=treeview__::GetSelectedItem(wid);
+				msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
+
+				
+				while (row>0)
+				{	
+					trace(row);
+					msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
+					trace(e.xml);				
+					string sEmployeeNo = e.selectSingleNode("EmployeeNo").text+"";
+					string sOldEmpNo = e.selectSingleNode("OldEmpNo").text+"";				
+					string sPersonID = e.selectSingleNode("PersonID").text+"";
+					string sPersonName = e.selectSingleNode("Name").text+"";
+					string sPassWord = xutil__::MD5(sOldEmpNo);
+				
+					/*
+					xml__ xx = new xml__;
+					xx.setNativePointer(xml__ ::CreateInstance());
+					xaserverarg__ arg=new xaserverarg__;
+					arg.setNativePointer(arg.CreateInstance());	
+					arg.AddArg("userno",sOldEmpNo);
+					arg.AddArg("password",sPassWord);
+					if(url::get("/sale/data/SysUser/GetOldPassWord",arg.GetString(),xx)==1)
+					{
+						if(xx.GetXml()!="")
+						{
+							msxml::IXMLDOMElement ex = xx.GetXmlDoc().documentElement;
+							sPassWord = ""+ex.text;
+						}
+					}*/
+
+					int nRow = lw_obj.dw_user.InsertRow(0);
+					lw_obj.dw_user.SetItemString(nRow,"EmployeeNo",sEmployeeNo);
+					lw_obj.dw_user.SetItemString(nRow,"UserName",sOldEmpNo);
+					lw_obj.dw_user.SetItemString(nRow,"PassWord",sPassWord);						
+					lw_obj.dw_user.SetItemString(nRow,"PersonID",sPersonID);
+					lw_obj.dw_user.SetItemDisplayString(nRow,"PersonID",sPersonName);
+					lw_obj.dw_user.SetItemString(nRow,"Status","Y");
+					lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效");
+					lw_obj.dw_user.SetItemString(nRow,"OldEmpNo",sOldEmpNo);						
+				/*
+					lw_obj.dw_user.SetItemString(nRow,"PositionID",sPositionID);
+					lw_obj.dw_user.SetItemDisplayString(nRow,"PositionID",sPositionName);
+					lw_obj.dw_user.SetItemString(nRow,"OrgID",sOrgID);
+					lw_obj.dw_user.SetItemDisplayString(nRow,"OrgID",sOrgName);
+					lw_obj.dw_user.SetItemString(nRow,"JobID",sJobID);
+					lw_obj.dw_user.SetItemDisplayString(nRow,"JobID",sJobName);
+				
+					lw_obj.dw_user.SetItemString(nRow,"Status","Y");
+					lw_obj.dw_user.SetItemDisplayString(nRow,"Status","有效");
+					string sdate = TApp::GetCurDate()+"";
+					lw_obj.dw_user.SetItemString(nRow,"StartDate",sdate+"");
+					lw_obj.dw_user.SetItemString(nRow,"EndDate","2050-12-31");*/
+				
+					row = dw_list.GetNextSelectRow(row + 1);
+					trace(row);
+				}
+				CloseWindow();
+				return 1;
+			}
+			int OnSubTree(string id,int parentitem)
+			{
+				int wid = tv_org.GetId();
+				if (treeview__::GetChildItem(wid,parentitem) >0) return 1;
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());	
+				arg.AddArg("sguid",id);
+				if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
+				{
+					trace(x.GetXml());
+					return -1;	
+				}
+				//trace(x.GetXml());
+				var list=x.GetXmlDoc().selectNodes("//item");
+				int i=0,s=list.length;
+				msxml::IXMLDOMElement xitem;
+				string sName; 
+				string sguid; 
+				string stype; 
+				if (s >0)
+				{
+					for (i=0;i<s;i++)
+					{
+						xitem= list.item(i);
+						sName = xitem.SelectSingleNode("name").text;
+						sguid = xitem.SelectSingleNode("id").text;
+						stype = xitem.SelectSingleNode("typ").text;
+						//int curItem = tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
+						int curItem=0;
+						if (stype =="Org")
+						{
+							curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,15,4);
+							tv_org.SetItemChild1(wid,curItem,1);
+						}
+						else
+							{
+							curItem=tv_org.InsertChildItemEx(wid,parentitem,sName,xitem,21,21);
+						}
+						//OnSubTree(sguid,curItem);
+					}
+				}
+				return 1;
+			}
+				
+			int OnCreateTree(string id,int parentitem)
+			{
+				//while (tv_1.GetRootItem()>0)
+				//	tv_1.DeleteItem(tv_1.GetRootItem());				
+				int wid = tv_org.GetId();
+				xml__ x = new xml__;
+				x.setNativePointer(xml__ ::CreateInstance());
+				x.LoadXml("<item><id>"+id+"</id><no/><name>凤凰集团</name><typ>Org</typ></item>");
+				//msxml::IXMLDOMDocument root = x.GetXmlDoc();
+				//msxml::IXMLDOMElement RDoc = x.GetXmlDoc().documentElement;
+				//msxml::IXMLDOMElement ele = RDoc.SelectSingleNode("//Org");
+				msxml::IXMLDOMElement ele = x.GetXmlDoc().SelectSingleNode("//item");
+				int hItem = treeview__::InsertChildItemEx(wid,0,"凤凰集团",ele,15,4);
+				treeview__::SetItemChild1(wid,hItem,1);
+				return 1;
+				
+				/*xaserverarg__ arg=new xaserverarg__;
+				arg.setNativePointer(arg.CreateInstance());	
+				arg.AddArg("sguid",id);
+				if(url::post("/sale/data/OrganizationStruct/tree.child.OrgChart",arg.GetString(),x)!=1)
+				{
+					trace(x.GetXml());
+					return -1;	
+				}
+				//trace(x.GetXml());
+				var list=x.GetXmlDoc().selectNodes("//item");
+				int i=0,s=list.length;
+				msxml::IXMLDOMElement xitem;
+				string sName; 
+				string sguid;
+				if (s >0)
+				{
+					for (i=0;i<s;i++)
+					{
+						xitem= list.item(i);
+						sName = xitem.SelectSingleNode("@name").text;
+						sguid = xitem.SelectSingleNode("@id").text;
+						int curItem = tv_org.InsertChildItemEx(wid,hItem,sName,xitem,15,4);
+						tv_org.SetItemChild1(wid,curItem,1);
+						//OnSubTree(sguid,curItem);
+					}
+				}
+				return 1;*/
+			}
+				
+			int OnTreeExpanding(ref TNotifyEvent evt,int p)	
+			{
+				ref NMTREEVIEW nmtv = evt.pnmh;
+				int sitem = nmtv.itemNew.hItem;
+					
+				int hCursor = xutil__::SetCursorWait();
+				//string id = treeview__::GetItemData(tv_org.GetId(), sitem);
+				msxml::IXMLDOMElement ele = treeview__::GetItemData(tv_org.GetId(),sitem);
+				string id = ele.SelectSingleNode("id").text;
+				OnSubTree(id, sitem);
+				xutil__::RestoreCursor(hCursor);
+				return 1;
+			}
+			
+			int OnTreeSelChanged(ref TXCommandEvent evt,int p)
+			{
+				int wid = tv_org.GetId();
+				int hitem=treeview__::GetSelectedItem(wid);
+				msxml::IXMLDOMElement ele = treeview__::GetItemData(wid,hitem);
+				if (ele)
+				{
+					string ls_orgid = ele.SelectSingleNode("id").text;
+					is_orgid = ls_orgid;
+					OnRetrieve(ls_orgid);
+				}
+				return 1;
+			}			
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if (comdid=="cb_import")
+					OnOK();
+				else if (comdid=="cb_close")
+					CloseWindow();
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+				//获取焦点事件,用于重置工具条
+				AttachEvent("WM_SETFOCUS",OnSetFocus);
+				//获得树的选择事件
+				AttachEvent("tv_org", "TVN_SELCHANGED",OnTreeSelChanged);
+				AttachEvent("tv_org", "TVN_ITEMEXPANDING",OnTreeExpanding);				
+			}
+			
+			int OnInitial()
+			{
+				SetAgent();
+				OnAttachEvent();		
+				return 1;
+			}
+			
+			int onload()
+			{			
+				tv_org = new treeview__ ;
+				tv_org.setNativePointer(this.GetControl("tv_org"));
+				dw_list =  new xdwgrid__;
+				dw_list.setNativePointer(this.GetControl("dw_list"));						
+				dw_list.openUrl("系统用户.vface/template/SysUser/EmpSelect");		
+				dw_list.SetSelectionMode(3); //3
+				dw_list.SetReadOnly(true);
+
+				OnInitial();
+				OnCreateTree("00000000-0000-0000-0000-000000000000", 0);
+				int wid = tv_org.GetId();
+				int root = treeview__::GetRootItem(wid);		
+				treeview__::ExpandItem(wid,root);				
+				OnRetrieve("00000000-0000-0000-0000-000000000000");
+				return 1;
+			}
+		]
+		
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/UserPassDlg.cpp b/jrj/project/business/SystemSettings/UserPassDlg.cpp
new file mode 100644
index 0000000..2dc14b5
--- /dev/null
+++ b/jrj/project/business/SystemSettings/UserPassDlg.cpp
@@ -0,0 +1,147 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) UserPassDlg :  public xframe
+	{
+	public:
+		//xdwgrid	dw_list;
+
+		xnode	m_agentNode;	//Agent Condition
+
+		static xstring MD5(xstring) native from "XUtil.dll" alias "?MD5@IXFUtil@XFrame@Hxsoft@@SAPA_WPA_W@Z";
+	public:
+		UserPassDlg(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static UserPassDlg* CreateInstance(void* implPtr, void* hWnd)
+		{
+			UserPassDlg* pWin = new UserPassDlg(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		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"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmCancel")
+			{
+				CloseWindow();
+				return 1;
+			}
+			else if(comdid==L"xmOk")
+			{
+				if(xcontrol(GetControl(L"old_pass")).GetText()==L"")
+				{
+					alert(L"请输入旧口令!");
+					SetFocus(xcontrol(GetControl(L"old_pass")).GetId());
+					return 1;
+				}
+				
+				xstring ostr = xcontrol(GetControl(L"old_pass")).GetText();
+				xstring str1 = xcontrol(GetControl(L"new_pass")).GetText();
+				xstring str2 = xcontrol(GetControl(L"new_pass1")).GetText();
+				if(str1 != str2)
+				{
+					alert(L"两遍新口令不一致!");
+					SetFocus(xcontrol(GetControl(L"new_pass1")).GetId());
+					return 1;
+				}
+				
+				xstring oldpass = MD5(ostr);
+				xstring newpass = MD5(str1);
+				
+				xml x;
+				
+				xaserverarg arg ;
+				;
+				arg.AddArg(L"old_password",oldpass);
+				arg.AddArg(L"new_password",newpass);
+				
+				if(getUrl(L"/sale/data/SysUser/update/password",arg.GetString(),x)!=1)
+				{
+					alert(L"修改失败");
+				}
+				else{
+					if(x.selectSingleNode(L"error"))
+					{
+						alert(x.selectSingleNode(L"error").text());
+						return 1;				
+					}
+					MessageBox(GetHWND(),L"修改口令成功!",L"提示",0);	
+					CloseWindow();
+				}
+				return 1;
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&UserPassDlg::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&UserPassDlg::OnSetFocus);
+			return 1;
+		}
+		
+		int onload()
+		{
+
+			//const int EM_SETPASSWORDCHAR =0x00CC;
+			//win32::SendMessage(GetControl(L"old_pass").GetId(),EM_SETPASSWORDCHAR,42,0);
+			//win32::SendMessage(GetControl(L"new_pass").GetId(),EM_SETPASSWORDCHAR,42,0);
+			//win32::SendMessage(GetControl(L"new_pass1").GetId(),EM_SETPASSWORDCHAR,42,0);
+			
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/level.Customer.v3.cpp b/jrj/project/business/SystemSettings/level.Customer.v3.cpp
new file mode 100644
index 0000000..9326ae6
--- /dev/null
+++ b/jrj/project/business/SystemSettings/level.Customer.v3.cpp
@@ -0,0 +1,375 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class  __declspec(dllexport) levelCustomerv3 : public listwin
+{
+public:
+	xdwgrid dw_goods;
+	xtreeview tv_1;
+	xcombobox ddlb_1;
+	int	changeddlb;
+	
+	xstring m_sType; //type
+	xstring m_sTypeTxt; //选中树的data
+//	xstring m_searchtxt;
+	int PIndex;
+	xnode	m_agentNode;	//Agent Condition
+	xstring	m_agentCond;	//Agent Node
+
+public:
+	levelCustomerv3(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
+public:
+	static levelCustomerv3* CreateInstance(void* implPtr, void* hWnd)
+	{
+		levelCustomerv3* pWin = new levelCustomerv3(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int OnPreRetrieve()
+	{
+		xml x ;
+		
+		xaserverarg arg ;
+		;	
+		arg.AddArg(L"pageindex", xstring(PIndex)); //第几页
+		arg.AddArg(L"pagenumber", xstring(m_pageNumber)); //每页数量
+		arg.AddArg(L"QueryTxt",m_QueryTxt );
+		arg.AddArg(L"sType", m_sType);//没有参数
+		arg.AddArg(L"sTypeTxt", m_sTypeTxt);//没有参数		
+		
+		if(getUrl(L"/sale/data/"+GetEntityName(1)+L"/entity/list",arg.GetString(),x)!=1)
+		{
+			alert(L"出现错误请联系管理员!");
+			return 0;
+		}else	
+		{
+			KXMLDOMElement e=x.documentElement();
+			if(listwin::dw_pages.ptr_native_ && e.selectSingleNode(L"@TotalPage"))
+			{
+				xstring s=e.selectSingleNode(L"@TotalPage").text(); //总数量				
+				listwin::dw_pages.SetMaxPage(s.toInt());
+			}
+			listwin::dw_list.Retrieve(x);
+			listwin::dw_list.Redraw();
+			listwin::dw_list.SetReadOnly(true);		
+		}
+		return 1;
+	}
+			
+	int OnChangePages(TEvent* evt, int p)
+	{
+		PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
+		
+		int c = h.cur;
+		HCURSOR hCursor = xutil::SetCursorWait();
+		OnRetrieve();
+		PIndex=c;
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+	
+	int ViewUpdate(int pr,xstring updateItem,xaserverarg  arg)
+	{
+		if(updateItem == L"refresh")
+		{
+			xdwpages zz = GetControl(L"pages");
+			int h = zz.SetCurPage(1);	
+			OnRetrieve();
+		}
+		return 1;
+	}
+
+	//树选择
+	int OnTreeSelChanged(TEvent* evt, int p)
+	{
+		if (changeddlb != 1)
+		{				
+			
+			HTREEITEM h=tv_1.GetSelectedItem();
+			KXMLDOMElement e = tv_1.GetItemData(h);
+			
+			xstring t = e.selectSingleNode(L"@type").text();
+			m_sType=t+L"";
+			xstring txt = e.selectSingleNode(L"@code").text();
+			if (txt == L"")
+				txt = e.selectSingleNode(L"@name").text();
+			m_sTypeTxt= txt+L"";
+
+			PIndex= 1;	
+			OnRetrieve();
+		}			
+		return 1;
+	}
+			
+	int  createSubTree(HTREEITEM h, KXMLDOMElement ele)
+	{
+		KXMLDOMNodeList nlist=ele.selectNodes(L"item");
+		int i;
+		int s=nlist.length();
+		if (s>0)
+			for (i=0; i<s; i++)
+			{
+				KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i));
+				xstring name = e->selectSingleNode(L"@name").text();
+				HTREEITEM hw = tv_1.InsertChildItem(h, name, (LPARAM)e, 15);
+				createSubTree(hw, *e);
+			}		
+		return 1;
+	}
+
+
+	int OnCreateTree(xstring sType)
+	{
+		
+		while (tv_1.GetRootItem()>0)
+			tv_1.DeleteItem(tv_1.GetRootItem());
+		
+		xml x ;
+		
+		xaserverarg arg ;
+		;
+		arg.AddArg(L"sType",sType);
+		if(getUrl(L"/sale/data/"+GetEntityName(1)+L"/pref/list/tree",arg.GetString(),x)!=1)
+		{
+			trace(x.text());
+			return -1;
+		}else	
+		{
+			KXMLDOMNodeList nlist=x.selectNodes(L"root/item");
+			int len = nlist.length();
+			if (len >0)
+			{
+				int i;
+				for (i=0;i <len; i++)
+				{
+					KXMLDOMElement* e = new KXMLDOMElement(nlist.item(i));
+					xstring name = e->selectSingleNode(L"@name").text();
+					HTREEITEM hw = tv_1.InsertChildItem(0, name, (LPARAM)e, 15);
+
+					createSubTree(hw, *e);
+					tv_1.ExpandItem(hw);
+				}
+				tv_1.ExpandItem(0);
+			}
+		}	
+		
+		return 1;
+	}
+			
+	//xcombobox下拉
+	int OnSelectDdlb(TEvent* evt, int p)
+	{
+		changeddlb = 1;
+
+		int CB_GETCURSEL = 0x0147;
+		int nIndex = SendMessageW(ddlb_1.GetHWND(), CB_GETCURSEL, 0, 0);
+		KXMLDOMElement e = ddlb_1.GetElement();//GetitemData(wid,nIndex);//ddlb_1.GetElement();
+		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + xstring((nIndex + 1)) + L"]");
+		xstring text = e2.selectSingleNode(L"@element").text();
+		OnCreateTree(text);
+		changeddlb = 0;
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		int row = listwin::dw_list.GetNextSelectRow(1);
+		if (row < 1){
+			row = listwin::dw_list.GetRow();
+			if (row < 1) {
+				return -1;
+			}
+		}
+			
+		KXMLDOMElement e = listwin::dw_list.GetRowElement(row);
+		xstring sguid = e.selectSingleNode(L"@guid").text();
+		xstring sName = e.selectSingleNode(L"Name").text()+(xstring)L"";
+		int  MB_YESNO = 0x00000004;
+		int  IDYES =  6;	
+		if(MessageBox(GetHWND(),L"确认要删除客户 "+sName+L" 的信息吗?",L"提示",MB_YESNO)!=IDYES) return 1;
+		xml x ;
+		
+		xaserverarg arg ;
+		;
+		arg.AddArg(L"guid",sguid);
+		if (xurl::post(L"/sale/data/"+GetEntityName(1)+L"/entity/delete",arg.GetString(),x) != 1)
+		{
+			xstring error = x.text();
+			trace(error);
+		}
+		else
+		{
+			listwin::dw_list.DeleteRow(row);
+		}
+		return 1;
+	}
+
+	int OnSelectAllRow()
+	{
+		int rows =  listwin::dw_list.GetRowCount();
+		if(rows < 1) return -1;
+		 listwin::dw_list.SelectRow(1, rows, true);
+		 listwin::dw_list.Redraw();
+		return 1;
+	}
+
+	int OnRClick(TEvent* evt, int p)
+	{
+		return 1;
+	}			
+	int OnLogOff()
+	{
+		return 1;
+	}
+	//设置层级弹出窗与保存
+	int OnLevelCustomer()
+	{
+		xaserverarg arg ;
+		;
+		OpenWindow(L"dev:xpage[maint.Level.Customer3.vx]", arg);
+		
+		xml ux ;
+		
+		ux.loadXML(L"<Partys/>");
+		KXMLDOMElement ele = ux.documentElement();
+
+		if(arg.GetArgString(L"ok")==L"true")
+		{
+			xml x ;
+			
+			x.loadXML(arg.GetArgString(L"arg"));
+			KXMLDOMElement uele = x.documentElement(); 
+			xstring ParentPartyID = uele.selectSingleNode(L"//ParentPartyID").text();
+			xstring ParentPartyName = L"";
+			xstring GroupPartyID = uele.selectSingleNode(L"//GroupPartyID").text();
+			xstring GroupPartyName = L"";
+			
+			if( uele.selectSingleNode(L"//ParentPartyID/@_displaystring"))
+				ParentPartyName = uele.selectSingleNode(L"//ParentPartyID/@_displaystring").text();
+			if(uele.selectSingleNode(L"//GroupPartyID/@_displaystring"))
+				GroupPartyName = uele.selectSingleNode(L"//GroupPartyID/@_displaystring").text();
+			
+			int row =  dw_list.GetNextSelectRow(1);
+			while(row > 0)
+			{
+				dw_list.SetItemString(row,L"ParentPartyID",ParentPartyID);
+				dw_list.SetItemDisplayString(row,L"ParentPartyID",ParentPartyName);
+				dw_list.SetItemString(row,L"GroupPartyID",GroupPartyID);
+				dw_list.SetItemDisplayString(row,L"GroupPartyID",GroupPartyName);
+				ele.appendChild(dw_list.GetRowElement(row).cloneNode(-1));
+				row =  dw_list.GetNextSelectRow(row + 1);
+			}
+			dw_list.Redraw();
+			arg.AddArg(L"content",ele.xml());
+			if (getUrl(L"/sale/data/CustomerV3/level/update",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				 alert(L"设置错误!");
+				return -1;
+			}else
+			{
+				 alert(L"设置成功!");
+			}
+		}		
+		return 1;
+	}
+	
+	int PreOnCmdDispatch(xstring comdid)
+	{
+		if(comdid.find(L"action:LogOff",0)>=0) return OnLogOff();
+		if(comdid.find(L"action:bill.delete",0)>=0) return OnDeleteRow();
+		//if(comdid==L"action:search1") return GridSearch();
+		if(comdid==L"action:bill.refresh") 
+		{
+			return OnRetrieve();
+		}
+		if(comdid==L"action:level.customer")
+		{
+			return OnLevelCustomer();
+		}
+
+		return 1;
+	}
+
+	int OnRowChangedEx(TEvent* evt, int p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		KXMLDOMElement ele = listwin::dw_list.GetRowElement(row);
+		xstring entity = ele.selectSingleNode(L"CustomerID").text();
+		xml x ;
+		
+		xaserverarg arg ;
+		;
+		arg.AddArg(L"EntityID",entity);
+		if (getUrl(L"/sale/data/CustomerV3/entity/customeritem",arg.GetString(),x)!=1)
+		{
+			trace(x.text());
+			return -1;
+		}else
+		{
+			dw_goods.Retrieve(x);
+			dw_goods.Redraw();
+			dw_goods.SetReadOnly(true);
+		}
+		return 1;
+	}
+		
+
+	int PostOnAttachEvent()
+	{
+		//获得树的选择事件
+		AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&levelCustomerv3::OnTreeSelChanged);
+		AttachEvent(L"cbx_1",L"CBN_SELCHANGE", (FEvent)&levelCustomerv3::OnSelectDdlb);
+		AttachEvent(L"pages",L"PAGE_CLICK", (FEvent)&levelCustomerv3::OnChangePages);
+		AttachEvent(L"dw_list",L"DWV_RCLICKED", (FEvent)&levelCustomerv3::OnRClick);//鼠标右键
+		//AttachEvent(L"dw_list",L"DWV_CLICKED",OnClick);//鼠标右键
+		AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED", (FEvent)&levelCustomerv3::OnRowChangedEx);
+		
+		return 1;
+	}
+			
+	int onload()
+	{
+		PIndex=1;
+		listwin::m_QueryTxt =L""; //查询条件
+		m_sType=L""; //type
+		m_sTypeTxt=L""; //选中树的data
+
+		listwin::onload();
+		
+		tv_1 =  GetControl(L"tv_1");	
+		ddlb_1 = GetControl(L"cbx_1");
+		
+		changeddlb = 0;
+		OnCreateTree(L"Source");
+		dw_goods = GetControl(L"dw_goods");
+		dw_goods.openUrl(L"/sale/view/CustomerV3/template/customer/customeritem");
+
+		return 1;
+	}
+	
+	int onloaded()
+	{
+		listwin::onloaded();
+		
+		xstring EntityID;
+		int row =  dw_list.GetRow();
+		if(row<0 || row>dw_list.GetRowCount()) return (xstring)L"";
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		xstring id = listwin::m_configDoc.selectSingleNode(L"//entity/EntityID[1]").text();
+		if(ele.selectSingleNode(id))
+			EntityID = ele.selectSingleNode(id).text();
+		
+		return 1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/maint.Level.Customer3.cpp b/jrj/project/business/SystemSettings/maint.Level.Customer3.cpp
new file mode 100644
index 0000000..4416535
--- /dev/null
+++ b/jrj/project/business/SystemSettings/maint.Level.Customer3.cpp
@@ -0,0 +1,88 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) MaintLevelCustomerWin :  public xframe
+	{
+	public:
+		xdwtable dw_arg;
+		xaserverarg  arg;
+
+	public:
+		MaintLevelCustomerWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static MaintLevelCustomerWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			MaintLevelCustomerWin* pWin = new MaintLevelCustomerWin(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmOk")
+			{
+				xml x ;
+				
+				dw_arg.AcceptText();
+				dw_arg.DwUpdateAllTo(x);
+				if(arg)
+				{					
+					arg.AddArg(L"arg",x.xml());
+					arg.AddArg(L"ok",L"true");
+				}
+				CloseWindow();
+				
+				return 1;
+			}
+			else if(comdid==L"xmCancel")
+			{
+				if(arg)arg.AddArg(L"ok",L"false");
+				CloseWindow();
+				return 1;
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&MaintLevelCustomerWin::OnXCommand);
+			return 1;
+		}
+		
+		int onload()
+		{
+			SetArg();
+			dw_arg = GetControl(L"dw_arg");
+			
+			if(GetWinParam())arg = GetArg();
+			
+			xstring dw = L"/sale/view/CustomerV3/template/customer/level.maint";
+			dw_arg.openUrl(dw);
+		
+			dw_arg.SetColHeaderHeight(0);
+			dw_arg.SetRowSelectorWidth(0);
+			dw_arg.SetHScrollState(false);
+			dw_arg.SetVScrollState(false);
+			
+		
+			OnAttachEvent();	
+			
+			return 1;
+		}
+		
+	};
diff --git a/jrj/project/business/SystemSettings/view.assignadjust.cpp b/jrj/project/business/SystemSettings/view.assignadjust.cpp
new file mode 100644
index 0000000..326e9c8
--- /dev/null
+++ b/jrj/project/business/SystemSettings/view.assignadjust.cpp
@@ -0,0 +1,278 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) AssignAdjustWin :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+		KXMLDOMElement rptEle;
+		xstring argStr;
+		xstring	searchStr;
+		int      hWndRetrieveTip;
+		bool    dataretrieveing;
+	public:
+		AssignAdjustWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static AssignAdjustWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			AssignAdjustWin* pWin = new AssignAdjustWin(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		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"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+				
+		int OnSave()
+		{
+			xml x ;
+			
+			dw_list.AcceptText();
+			dw_list.DwUpdateAllToEx(x);
+			xaserverarg arg ;
+				
+			
+			xml x0;
+			x0.loadXML(L"<data/>");
+			KXMLDOMNodeList t = x.selectNodes(L"data/node()[(@update.new='1') or (@update.modify='1') or (@update.delete='1') ]");
+			KXMLDOMElement e1= x0.documentElement();
+			
+			xstring val0 = x.xml();
+			for(int i=0; i < t.length(); i++)
+			{
+				KXMLDOMElement e= t.item(i);
+				e1.appendChild(e);
+			}
+			
+			x = ViewObject::RetrieveData(rptEle.getAttribute(L"update"),L"content",x0.xml());		
+			xstring str = x.documentElement().getAttribute(L"text");
+			if(str == L"true")
+			{
+				dw_list.ResetUpdateStatus();
+				alert(L"保存成功!"); 
+			}else 
+			{
+				alert(L"保存失败!");
+			}
+			return 1;
+		}
+		
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+			
+			int  OnMultiDeal()
+			{
+				dw_list.AcceptText();
+				int row = dw_list.GetNextSelectRow(1);
+				xstring SalespersonID = dw_list.GetItemString(row, L"SalespersonID");
+				xstring Sales = dw_list.GetItemDisplayString(row, L"SalespersonID");
+				while(row > 0 && row <= dw_list.GetRowCount())
+				{
+						row =  dw_list.GetNextSelectRow(row + 1);
+						dw_list.SetItemString(row, L"SalespersonID", SalespersonID);
+						dw_list.SetItemDisplayString(row, L"SalespersonID", Sales);
+						
+				}
+				dw_list.Redraw();
+			}
+				
+				
+		int OnSearch()
+		{
+			xaserverarg arg;
+			;						
+			arg.AddArg(L"text", searchStr);
+			OpenWindow(L"dev:xpage[search.dialog.vx]", arg);
+			xstring str = arg.GetArgString(L"text");
+			if(str != searchStr)
+			{
+				searchStr = str;
+				dw_list.Filter(L"*",searchStr);
+				return 1;
+			}
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmSave")return OnSave();
+			if(comdid==L"xmMultiDeal")return OnMultiDeal();
+			if(comdid==L"xmSearch") return OnSearch();	
+			 if(comdid==L"xmAnalysis")
+			{
+				//hCursor = xutil::SetCursorWait();
+				xstring str = dw_list.DataAnalysis(L"");
+				xaserverarg arg;
+				;						
+				arg.AddArg(L"html", str);
+				
+				OpenWindow(L"dev:xpage[data.vanalysis.vx]", arg);
+				//xutil::RestoreCursor(hCursor);
+				return 1;
+			 }
+			if(comdid==L"xmQuery")
+			{
+				if(rptEle)
+				{
+					xstring argUrl = rptEle.getAttribute(L"arg");
+					if(argUrl !=L"")
+					{
+						xaserverarg ar ;
+						
+						ar.AddArg(L"argurl",argUrl);
+						if(argStr !=L"") 
+							ar.AddArg(L"arg",argStr);
+						OpenWindow(L"dev:xpage[view.total.arg.vx]",ar);
+						xstring arstr = ar.GetArgString(L"arg");
+						if(arstr != L"" && ar.GetArgString(L"action")==L"ok")
+						{
+							argStr = arstr;
+							OnRetrieve(rptEle.getAttribute(L"data"),argStr);
+						}
+					}
+					else
+					{
+						argStr=L"";
+						OnRetrieve(rptEle.getAttribute(L"data"),argStr);
+					}
+				}
+				return 1;
+			 }
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&AssignAdjustWin::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&AssignAdjustWin::OnSetFocus);
+			
+			AttachEvent(L"cb_report",L"CBN_SELCHANGE", (FEvent)&AssignAdjustWin::OnCombboChanged);
+			return 1;
+		}
+		
+		int OnCombboChanged(TEvent* evt, LPARAM lParam)
+		{
+			int h = xcombobox::GetCurSel(evt->command.hCtrl);
+			if(h > -1) ShowList(h);
+			return 1;
+		}
+			
+		int SwitchReport(KXMLDOMElement e)
+		{
+			rptEle = e;
+			xstring dwname = e.getAttribute(L"template");
+			dw_list.openUrl(dwname);
+			dw_list.Redraw();
+			return 1;
+		}
+
+		int ShowList(int h)
+		{
+			KXMLDOMElement xframeElement =  GetElement();
+			KXMLDOMElement e =  xframeElement.selectSingleNode(L"//xcombobox[@name='cb_report']/item["+(h+1).toString()+L"]");
+			if(e)	SwitchReport(e);
+			PostMessage(GetHWND(),0x401,(LPARAM)L"xmQuery",0);
+			return 1;
+		}
+
+				int ShowRetrieveingTip()
+		{
+			dataretrieveing = true;
+			xwin pwin = OpenWindow(L"dev:xpage[TestRetrieveing.vx]",0);
+			hWndRetrieveTip =pwin.GetHWND();
+			return 1;
+		}
+		int CloseRetrieveTip()
+		{
+			dataretrieveing = false;
+			SendMessage(hWndRetrieveTip,0x401, (LPARAM)L"RetrieveFinished",0);
+			hWndRetrieveTip = 0;
+			
+			return 1;
+		}
+		
+		int  OnRetrieve(xstring dataurl, xstring argstr)
+		{
+			if(!rptEle) return 0;
+			dw_list.Reset();
+			
+			xml x ;
+			
+			xaserverarg arg ;
+			;	
+			arg.AddArg(L"arg",argstr);
+			if (xurl::get(dataurl,arg.GetString(),x)!=1)
+			{
+				
+				trace(L"错误信息=L"+(xstring)x.text());
+				dw_list.Redraw();
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+				dw_list.SetSelectionMode(4);
+				//dw_list.SetReadOnly(true);
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			rptEle = 0;
+			dw_list = GetControl(L"dw_list");
+			OnAttachEvent();	
+			
+			hWndRetrieveTip = 0;
+			dataretrieveing = false;
+			ShowList(0);
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
\ No newline at end of file

--
Gitblit v1.9.3