xj qian
2024-06-28 24979676af0d645c28fc05157ed61fc3fafbee3b
jrj/project/business/HR/AdministrativeDepartment.cpp
@@ -1,102 +1,115 @@
use "xcontrol.vframe.vbusiness.vd"//hxsoft.com -> Developer -> wlib -> vframe
use "xbase.vframe.vbusiness.vd"//hxsoft.com -> Developer -> wlib -> vframe
use "saleorder.view.vd"
unit trade
[
   class ViewAdministrativeDepartmentList : public listwin
#include <wobject/xstring.hpp>
#include <xcontrol/xtreeview.hpp>
#include <xcontrol/xdwgrid.hpp>
#include <xcontrol/xcell.hpp>
#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
#include "viewobject/view.base.hpp"
using xml = KXMLDOMDocument;
   class  __declspec(dllexport) ViewAdministrativeDepartmentList : public listwin
   {
   public:
      xdwgrid      dw_list;
      xtreeview   tv_folder;//hxsoft.com -> Developer -> wface -> vcontrol
      string rows;
      string urlTree;
      string myDataUrl;
      xstring rows;
      xstring urlTree;
      xstring myDataUrl;
      int changeddlb;
      xnode   m_agentNode;   //Agent Condition
   public:
      ViewAdministrativeDepartmentList(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
   public:
      static ViewAdministrativeDepartmentList* CreateInstance(void* implPtr, void* hWnd)
      {
         ViewAdministrativeDepartmentList* pWin = new ViewAdministrativeDepartmentList(implPtr, (HWND)hWnd);
         return pWin;
      }
      int SetAgent()
      {
         string xfNodeAgentArea = "agentarea";
         xstring xfNodeAgentArea = L"agentarea";
         xnode anode = GetAgentNode(xfNodeAgentArea);
         if (m_agentNode)
         {
            SetAgentNodeContent(anode, m_agentNode);
            SetAgentNode(anode, m_agentNode);
         }
         else
         {
            msxml::IXMLDOMElement xframeElement = GetElement();
            msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/" + xfNodeAgentArea + "[1]/*");
            KXMLDOMElement xframeElement = GetElement();
            KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
            if (agent)
            {
               string s = agent.xml;
               m_agentNode = SetAgentNodeContent(anode, s);
               xstring s = agent.xml();
               m_agentNode = SetAgentNode(anode, s);
            }
         }
         return 1;
      }
      //展开放进树里面
      int ExpandCatChildFolder(int hItem, msxml::IXMLDOMElement ele, int image)
      int ExpandCatChildFolder(HTREEITEM hItem, KXMLDOMElement ele, int image)
      {
         /*在具体应用时可以用DOMDocument的Load方法来装载XML文档
         用IXMLDOMNode 的selectNodes(查询的结果有多个,得到存放搜索结果的链表)
         或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,
         用createNode和appendChild方法来创建节点和追加节点,
         用IXMLDOMElement的setAttribute和getAttribute方法来设置和获得节点的属性。*/
         msxml::IXMLDOMNodeList nlist = ele.SelectNodes("item");
         int len = nlist.length;
         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++)
         {
            msxml::IXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute("name");
            int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), image);//trust(e as int)将e放入树结构里面的data属性中
            KXMLDOMElement& e = *new KXMLDOMElement(nlist.item(i));
            xstring name = e.getAttribute(L"name");
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM)&e, image);//trust(e as int)将e放入树结构里面的data属性中
            ExpandCatChildFolder(h, e, 35);
         }
         return 1;
      }
      //展开文件夹明细
      int ExpandFolderItem(int hItem, string parentid)
      int ExpandFolderItem(HTREEITEM hItem, xstring parentid)
      {
         xml x = ViewObject::RetrieveData(urlTree, "status", "有效", "parentid", parentid);//获取后台数据
         xml x = ViewObject::RetrieveData(urlTree, L"status", L"有效", L"parentid", parentid);//获取后台数据
         if (!x) {
            return 0;
         }
         msxml::IXMLDOMNodeList nlist = x.GetXmlDoc().SelectNodes("data/Item");
         int len = nlist.length;
         KXMLDOMNodeList nlist = x.selectNodes(L"data/Item");
         int len = nlist.length();
         for (int i = 0; i < len; i++)
         {
            msxml::IXMLDOMElement e = nlist.item(i);
            string name = e.selectSingleNode("name").text;
            int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), 35);
            KXMLDOMElement& e = *new KXMLDOMElement(nlist.item(i));
            xstring name = e.selectSingleNode(L"name").text();
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM)&e, 35);
            ExpandCatChildFolder(h, e, 35);
         }
         return 1;
      }
      //查找当前树项的顶级目录
      int LookupTopFolder(int hItem)
      HTREEITEM LookupTopFolder(HTREEITEM hItem)
      {
         int hRoot = tv_folder.GetRootItem();
         HTREEITEM hRoot = tv_folder.GetRootItem();
         while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
         return hItem;
      }
      //树展开
      int OnTreeExpanding(ref TNotifyEvent evt, int p)
      int OnTreeExpanding(TEvent* evt, int p)
      {
         ref NMTREEVIEW nmtv = evt.pnmh;
         int hItem = nmtv.itemNew.hItem;
         int hTopItem = LookupTopFolder(hItem);
         string name = tv_folder.GetItemLabel(hTopItem);
         int child = tv_folder.GetChildItem(hItem);
         NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
         HTREEITEM hItem = nmtv.itemNew.hItem;
         HTREEITEM hTopItem = LookupTopFolder(hItem);
         xstring name = tv_folder.GetItemLabel(hTopItem);
         HTREEITEM child = tv_folder.GetChildItem(hItem);
         msxml::IXMLDOMElement e = tv_folder.GetItemData(hItem);
         string parentid = "";
         if (name != "部门结构")
            parentid = e.selectSingleNode("adid").text;
         KXMLDOMElement e = tv_folder.GetItemData(hItem);
         xstring parentid = L"";
         if (name != L"部门结构")
            parentid = e.selectSingleNode(L"adid").text();
         trace(parentid);
         if (!child) {
            ExpandFolderItem(hItem, parentid);
@@ -107,26 +120,26 @@
      //查询节点的列表数据
      int OnPreRetrieve()
      {
         int hItem = tv_folder.GetSelectedItem();
         HTREEITEM hItem = tv_folder.GetSelectedItem();
         if (hItem <= 0) return 1;
         //int    hCursor = xutil::SetCursorWait();
         msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement);
         string name = e.getAttribute("name");
         KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
         xstring name = e.getAttribute(L"name");
         xml x = 0;
         string parentid = "";
         if (name != "部门结构")
            parentid = e.selectSingleNode("adid").text;
         xstring parentid = L"";
         if (name != L"部门结构")
            parentid = e.selectSingleNode(L"adid").text();
         trace(parentid);
         x = ViewObject::RetrieveData(myDataUrl, "parentid", parentid);
         x = ViewObject::RetrieveData(myDataUrl, L"parentid", parentid);
         if (x)
         {
            //trace(x.GetXml());
            //trace(x.xml());
            dw_list.Retrieve(x);
            dw_list.Redraw();
         }
         else {
            dw_list.ResetEx();
            dw_list.Reset();
            dw_list.Redraw();
         }
         dw_list.SetReadOnly(true);
@@ -134,20 +147,20 @@
         return 1;
      }
      int OnTreeSelChanged(ref TNotifyEvent evt, int p)
      int OnTreeSelChanged(TEvent* evt, int p)
      {
         if (changeddlb)
            return 1;
         int hItem = tv_folder.GetSelectedItem();
         HTREEITEM hItem = tv_folder.GetSelectedItem();
         if (hItem <= 0)
            return 1;
         int child = tv_folder.GetChildItem(hItem);
         HTREEITEM child = tv_folder.GetChildItem(hItem);
         if (!child) {
            int    hCursor = xutil::SetCursorWait();
            msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement);
            if (!e.getAttribute("name")) {
               string adid = e.selectSingleNode("adid").text;
               string parentid = adid;
            HCURSOR    hCursor = xutil::SetCursorWait();
            KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
            if (!e.getAttribute(L"name")) {
               xstring adid = e.selectSingleNode(L"adid").text();
               xstring parentid = adid;
               ExpandFolderItem(hItem, parentid);
            }
         }
@@ -155,7 +168,7 @@
      }
      //焦点激活处理函数
      int OnSetFocus(ref TEvent evt, int param)
      int OnSetFocus(TEvent* evt, LPARAM p)
      {
         //重置工具条
         SetAgent();
@@ -164,18 +177,18 @@
      int OnAdd()
      {
         int hItem = tv_folder.GetSelectedItem();
         HTREEITEM hItem = tv_folder.GetSelectedItem();
         if (hItem <= 0)
            return 1;
         int hCursor = xutil::SetCursorWait();
         msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement);
         string parentid = "";//父级id
         if (!e.getAttribute("name"))
            parentid = e.selectSingleNode("adid").text;
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         arg.AddArg("parentid", parentid);
         OpenWindow("dev:xpage[AdministrativeDepartmentFolder.vx]", cast(arg as int));
         HCURSOR hCursor = xutil::SetCursorWait();
         KXMLDOMElement& e = *(KXMLDOMElement*)tv_folder.GetItemData(hItem);
         xstring parentid = L"";//父级id
         if (!e.getAttribute(L"name"))
            parentid = e.selectSingleNode(L"adid").text();
         xaserverarg arg;
         arg.AddArg(L"parentid", parentid);
         OpenWindow(L"dev:xpage[AdministrativeDepartmentFolder.vx]",arg);
         return 1;
      }
@@ -187,32 +200,32 @@
         if(hItem <=0)
            return 1;
         int hCursor = xutil::SetCursorWait();
         msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement);
         KXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
         if(e.getAttribute("name"))
         if(e.getAttribute(L"name"))
            return 1;*/
         int row = dw_list.GetRow();
         if (row < 1)
            return 1;
         string parentid = "", adid = "";
         /*msxml::IXMLDOMElement ele = dw_list.GetRowElement(row);
         adid = ele.selectSingleNode("adid").text;*/
         adid = dw_list.GetItemString(row, "adid");
         parentid = dw_list.GetItemString(row, "parentid");
         xstring parentid = L"", adid = L"";
         /*KXMLDOMElement ele = dw_list.GetRowElement(row);
         adid = ele.selectSingleNode(L"adid").text();*/
         adid = dw_list.GetItemString(row, L"adid");
         parentid = dw_list.GetItemString(row, L"parentid");
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         /*string parentid = "", adid = "";//父级id
         xaserverarg arg;
         /*xstring parentid = L"", adid = L"";//父级id
         if(!e.getAttribute("name")){
         if(!e.getAttribute(L"name")){
            parentid = e.selectSingleNode("adid").text;
            adid = e.selectSingleNode("adid").text;
            parentid = e.selectSingleNode(L"adid").text();
            adid = e.selectSingleNode(L"adid").text();
         }*/
         arg.AddArg("parentid", parentid);
         arg.AddArg("adid", adid);
         OpenWindow("dev:xpage[AdministrativeDepartmentFolder.vx]", cast(arg as int));
         arg.AddArg(L"parentid", parentid);
         arg.AddArg(L"adid", adid);
         OpenWindow(L"dev:xpage[AdministrativeDepartmentFolder.vx]",arg);
         return 1;
      }
@@ -222,32 +235,32 @@
         if(hItem <=0) return 1;
         int    hCursor = xutil::SetCursorWait();
         msxml::IXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as msxml::IXMLDOMElement);
         string name = e.getAttribute("name");
         string adid = "";
         if(name != "部门结构")
            adid = e.selectSingleNode("adid").text;*/
         KXMLDOMElement e = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
         xstring name = e.getAttribute(L"name");
         xstring adid = L"";
         if(name != L"部门结构")
            adid = e.selectSingleNode(L"adid").text();*/
         int row = dw_list.GetRow();
         if (row < 1)
            return 1;
         string adid = "";
         /*msxml::IXMLDOMElement ele = dw_list.GetRowElement(row);
         adid = ele.selectSingleNode("adid").text;*/
         adid = dw_list.GetItemString(row, "adid");
         xstring adid = L"";
         /*KXMLDOMElement ele = dw_list.GetRowElement(row);
         adid = ele.selectSingleNode(L"adid").text();*/
         adid = dw_list.GetItemString(row, L"adid");
         xml x = new xml;
         x.setNativePointer(xml::CreateInstance());
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         arg.AddArg("adid", adid);
         if (getUrl("/sale/data/AdministrativeDepartment/ad_delete", arg.GetString(), x) != 1)
         xaserverarg arg;
         arg.AddArg(L"adid", adid);
         if (getUrl(L"/sale/data/AdministrativeDepartment/ad_delete", arg.GetString(), x) != 1)
         {
            string error = x.GetXmlDoc().text;
            alert("err:" + error);
            xstring error = x.text();
            alert(L"err:" + error);
            return 1;
         }
         alert(x.GetXmlDoc().text);
         alert(x.text());
         dw_list.DeleteRow(row);
         return 1;
      }
@@ -259,38 +272,38 @@
      }
      //命令发布函数
      int OnCmdDispatch(string comdid)
      int OnCmdDispatch(xstring comdid)
      {
         if (comdid == "xmUpdate")
         if (comdid == L"xmUpdate")
            return OnUpdate();
         else if (comdid == "xmAdd")
         else if (comdid == L"xmAdd")
            return OnAdd();
         else if (comdid == "xmDelete")
         else if (comdid == L"xmDelete")
            return OnDelete();
         else if (comdid == "xmRefresh")
         else if (comdid == L"xmRefresh")
            return OnRefresh();
         return 0;
      }
      //命令处理事件
      int OnXCommand(ref TXCommandEvent evt, int param)
      int OnXCommand(TEvent* evt, LPARAM p)
      {
         return OnCmdDispatch(evt.pStrID);
         return OnCmdDispatch(evt->xcommand.pStrID);
      }
      int OnAttachEvent()
      {
         AttachEvent("tv_folder", "TVN_SELCHANGED", OnTreeSelChanged); //树选择
         AttachEvent("tv_folder", "TVN_ITEMEXPANDING", OnTreeExpanding); //树展开
         AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&ViewAdministrativeDepartmentList::OnTreeSelChanged); //树选择
         AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING", (FEvent)&ViewAdministrativeDepartmentList::OnTreeExpanding); //树展开
         //AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowChanged);
         //AttachEvent("cbx_1","CBN_SELCHANGE",OnSelectDdlb);
         //AttachEvent("cbx_datashow","CBN_SELCHANGE",OnSelectDataShowDdlb);
         //AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED",OnRowChanged);
         //AttachEvent(L"cbx_1",L"CBN_SELCHANGE",OnSelectDdlb);
         //AttachEvent(L"cbx_datashow",L"CBN_SELCHANGE",OnSelectDataShowDdlb);
         //绑定工具条点击事件
         AttachEvent("WM_XCOMMAND", OnXCommand);
         AttachEvent(L"WM_XCOMMAND", (FEvent)&ViewAdministrativeDepartmentList::OnXCommand);
         //获取焦点事件,用于重置工具条
         AttachEvent("WM_SETFOCUS", OnSetFocus);
         AttachEvent(L"WM_SETFOCUS", (FEvent)&ViewAdministrativeDepartmentList::OnSetFocus);
      }
      /*
@@ -298,13 +311,13 @@
      int  OnRetrieve()
      {
         xml x = new xml;
         x.setNativePointer(xml::CreateInstance());
         xaserverarg arg = new xaserverarg;
         arg.setNativePointer(arg.CreateInstance());
         //arg.AddArg("xxx","xxx");
         xaserverarg arg;
         //arg.AddArg(L"xxx",L"xxx");
         if (getUrl(myDataUrl,arg.GetString(),x)!=1)
         {
            trace(x.GetXmlDoc().text);
            trace(x.text());
            return -1;
         }else
         {
@@ -316,20 +329,20 @@
      */
      //展开子文件
      int  ExpandChildFolder(int hItem, msxml::IXMLDOMElement pElement)
      int  ExpandChildFolder(HTREEITEM hItem, KXMLDOMElement pElement)
      {
         msxml::IXMLDOMNodeList nlist = pElement.SelectNodes("Item");
         int len = nlist.length;
         KXMLDOMNodeList nlist = pElement.selectNodes(L"Item");
         int len = nlist.length();
         for (int i = 0; i < len; i++)
         {
            msxml::IXMLDOMElement e = nlist.item(i);
            string name = e.getAttribute("name");
            string sImage = e.getAttribute("image");
            string child = e.getAttribute("child");
            KXMLDOMElement& e = *new KXMLDOMElement(nlist.item(i));
            xstring name = e.getAttribute(L"name");
            xstring sImage = e.getAttribute(L"image");
            xstring child = e.getAttribute(L"child");
            int image = 18;
            if (sImage) image = sImage.toInt();
            int h = tv_folder.InsertChildItem(tv_folder.GetId(), hItem, name, trust(e as int), image);
            if (child != "no")
            HTREEITEM h = tv_folder.InsertChildItem(hItem, name, (LPARAM) & e, image);
            if (child != L"no")
               tv_folder.SetItemChild(h, 1);
            ExpandChildFolder(h, e);
         }
@@ -339,8 +352,8 @@
      //初始化文件夹
      int  InitialFolder()
      {
         msxml::IXMLDOMElement xframeElement = GetElement();
         msxml::IXMLDOMElement e = xframeElement.selectSingleNode("//xtree[@name='tv_folder']/initial");
         KXMLDOMElement xframeElement = GetElement();
         KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
         if (e)
            ExpandChildFolder(0, e);
         return 1;
@@ -348,14 +361,14 @@
      int onload()
      {
         dw_list = GetControl("dw_list");
         dw_list.openUrl("/sale/view/AdministrativeDepartment/template/adlist");
         dw_list.SetColumnState("adid", false);
         dw_list.SetColumnState("parentid", false);
         dw_list = GetControl(L"dw_list");
         dw_list.openUrl(L"/sale/view/AdministrativeDepartment/template/adlist");
         dw_list.SetColumnState(L"adid", false);
         dw_list.SetColumnState(L"parentid", false);
         myDataUrl = "/sale/data/AdministrativeDepartment/ad_list";
         urlTree = "/sale/data/AdministrativeDepartment/ad_sidelist";
         tv_folder = GetControl("tv_folder");
         myDataUrl = L"/sale/data/AdministrativeDepartment/ad_list";
         urlTree = L"/sale/data/AdministrativeDepartment/ad_sidelist";
         tv_folder = GetControl(L"tv_folder");
         tv_folder.SetLineAtRoot(true);
         InitialFolder();
         OnAttachEvent();
@@ -369,5 +382,4 @@
         return 1;
      }
   };
]
   };