From 603ce4df28d440b9faf989073d6a587cf4065d67 Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期三, 05 三月 2025 16:45:22 +0800
Subject: [PATCH] update

---
 jrj/project/business/SystemSettings/CommentaryEx.dialog.cpp |  250 +++++++++++++++++++++++++++
 jrj/ext-jrj/ext-jrj.vcxproj                                 |    6 
 jrj/project/business/SystemSettings/Commentary.dialog.cpp   |  269 +++++++++++++++++++++++++++++
 jrj/ext-jrj/ext-jrj.vcxproj.filters                         |    6 
 4 files changed, 531 insertions(+), 0 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 6fe1efa..107fc38 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -1044,6 +1044,12 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Commentary.dialog.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\CommentaryEx.dialog.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\project\business\SystemSettings\Data.config.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters
index f8b4313..46be3b7 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj.filters
+++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -1604,6 +1604,12 @@
     <ClCompile Include="..\project\business\Expense\PremiumRateList.cpp">
       <Filter>project\business\Expense</Filter>
     </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\Commentary.dialog.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\SystemSettings\CommentaryEx.dialog.cpp">
+      <Filter>project\business\SystemSettings</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <None Include="ext-jrj.def">
diff --git a/jrj/project/business/SystemSettings/Commentary.dialog.cpp b/jrj/project/business/SystemSettings/Commentary.dialog.cpp
new file mode 100644
index 0000000..d6ee7d3
--- /dev/null
+++ b/jrj/project/business/SystemSettings/Commentary.dialog.cpp
@@ -0,0 +1,269 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) Commentary : public xframe
+{
+
+public:
+	
+				string m_EntityID;
+				string m_EntityType;
+				string m_EntityConnect;
+				string m_ConnectID;
+
+				control__ m_Edit;
+				html__ m_Html;
+				combobox__ m_cb;
+public:
+	BindComputerDlgNew(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static BindComputerDlgNew* CreateInstance(void* implPtr, void* hWnd)
+	{
+		BindComputerDlgNew* pWin = new BindComputerDlgNew(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+				string GetGuid() {
+					return TApp::GetGuid();
+				}
+
+				int Init()
+				{
+					if (m_EntityID == "") return -1;
+
+					xml__ x = new xml__;
+					x.setNativePointer(x.CreateInstance());
+					xaserverarg__ arg = new xaserverarg__;
+					arg.setNativePointer(arg.CreateInstance());
+					arg.AddArg("EntityID", m_EntityID);
+					arg.AddArg("EntityType", m_EntityType);
+					arg.AddArg("EntityConnect", m_EntityConnect);
+					if (url::get("/sale/data/Commentary/entity/notelist", arg.GetString(), x) == 1)
+					{
+						//trace(x.GetXml());
+						m_Html.SetContent(x.GetXml());
+						m_Html.Redraw();
+					}
+					return 1;
+				}
+
+				int AppendItem(xml__ x, msxml::IXMLDOMElement r, string name, string value)
+				{
+					var e = x.GetXmlDoc().createElement(name);
+					e.text = value;
+					r.appendChild(e);
+					return 1;
+				}
+
+				int showAtt()
+				{
+					xnode__ anode = new xnode__;
+					anode.setNativePointer(GetAgentNode("att"));
+					int s = combobox__::GetCount(m_cb.GetId());
+					xml__ x = new xml__;
+					x.setNativePointer(xml__::CreateInstance());
+					x.LoadXml("<vbox/>");
+					msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
+					//trace(str);
+					int i = 0;
+					for (i = 0; i < s; i++)
+					{
+						string tmp = combobox__::GetLBText(m_cb.GetId(), i);
+						//trace(tmp);
+						var e = x.GetXmlDoc().createElement("hbox");
+						e.setAttribute("height", "20");
+						var l = x.GetXmlDoc().createElement("xlabel");
+						l.setAttribute("caption", "" + tmp);
+						var b = x.GetXmlDoc().createElement("xtoolbutton");
+						b.setAttribute("width", "18");
+						b.setAttribute("name", "att_" + i.toString());
+						b.setAttribute("image", "1,5");
+						e.appendChild(l);
+						e.appendChild(b);
+						ele.appendChild(e);
+						var g = x.GetXmlDoc().createElement("xlabel");
+						g.setAttribute("height", "2");
+						g.setAttribute("style", "background-color:#000000");
+						ele.appendChild(g);
+					}
+					//trace(ele.xml);
+					SetAgentNodeContent(anode, ele.xml);
+					anode.SetWidthHeight(-1, i * 20 + 1);
+					return 1;
+				}
+
+				int addAtt()
+				{
+					string guid = TApp::GetGuid();
+					string ret = xaserver__::UploadFile("attachment", guid + ".jpg", this.GetHWND(), "", false);
+					//trace(ret);
+					int nIndex = combobox__::AddItem(m_cb.GetId(), ret, guid + ".jpg");
+					showAtt();
+					return 1;
+				}
+
+				int delAtt(string no)
+				{
+					int nIndex = no.toInt();
+					combobox__::DeleteItem(m_cb.GetId(), nIndex);
+					showAtt();
+					return 1;
+				}
+				msxml::IXMLDOMElement getAtt()
+				{
+					int s = combobox__::GetCount(m_cb.GetId());
+					xml__ x = new xml__;
+					x.setNativePointer(xml__::CreateInstance());
+					x.LoadXml("<Attachment/>");
+					msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
+					//trace(str);
+					int i = 0;
+					for (i = 0; i < s; i++)
+					{
+						string tmp = combobox__::GetLBText(m_cb.GetId(), i);
+						string tmp2 = combobox__::GetitemData(m_cb.GetId(), i);
+						var e = x.GetXmlDoc().createElement("item");
+						e.setAttribute("name", "" + tmp);
+						e.setAttribute("file", "" + tmp2);
+						ele.appendChild(e);
+					}
+					return ele;
+				}
+				//命令发布函数
+				int OnCmdDispatch(string comdid)
+				{
+					if (comdid == "xmOK")
+					{
+						if (m_EntityID == "") return 1;
+
+						xml__ x = new xml__;
+						x.setNativePointer(xml__::CreateInstance());
+						xaserverarg__ arg = new xaserverarg__;
+						arg.setNativePointer(arg.CreateInstance());
+						string value = m_Edit.GetText();
+						if (value == "")
+						{
+							alert("请填写批注!");
+							return 1;
+						}
+
+						x.LoadXml("<Commentary update.new='1' update.modify='1'/>");
+						msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
+						AppendItem(x, ele, "CommentaryID", GetGuid());
+						AppendItem(x, ele, "EntityID", m_EntityID);
+						AppendItem(x, ele, "EntityType", m_EntityType);
+						AppendItem(x, ele, "Remark", value);
+						AppendItem(x, ele, "ParentConnect", m_EntityConnect);
+						AppendItem(x, ele, "ParentCommentaryID", m_ConnectID);
+						AppendItem(x, ele, "CreatorID", xaserver__::GetUserId());
+						ele.appendChild(getAtt());
+
+						//trace(ele.xml);
+						arg.AddArg("content", "<root>" + ele.xml + "</root>");
+
+						if (getUrl("/workflow/action/Commentary/bill.update", arg.GetString(), x) == 1)
+						{
+							//trace(x.GetXml());
+							//alert("添加成功!");
+							m_Edit.SetText("");
+							combobox__::ResetContent(m_cb.GetId());
+							Init();
+							showAtt();
+							return 1;
+						}
+						else
+						{
+							alert("添加失败!");
+							return -1;
+						}
+					}
+					else if (comdid == "xmAtt")
+					{
+						addAtt();
+					}
+					else if (comdid.left(4) == "att_")
+					{
+						delAtt(comdid.right(comdid.length() - 4));
+					}
+					else
+					{
+						CloseWindow();
+					}
+					return 1;
+				}
+
+				//命令处理事件
+				int OnXCommand(ref TXCommandEvent evt, int param)
+				{
+					return OnCmdDispatch(evt.pStrID);
+				}
+
+				int OnHtmlClick(ref  TNotifyEvent evt, int p)
+				{
+					ref  HTMLNMHDR p = evt.pnmh;
+					const string d = m_Html.GetData(p.object);
+					if (d == "") return -1;
+					string file = d.mid(0, d.find("|##@@|", 0));
+					string name = d.mid(d.find("|##@@|", 0) + 6, d.length());
+
+					xaserver__::CreateDirectory("C:/Temp");
+					int openRet = xaserver__::DownLoadFile(GetServerUrl(), "/business/supplierattachment/" + file, name, "C:/Temp/" + name);
+					if (openRet < 0)
+					{
+						alert("文件打开失败!");
+						return -1;
+					}
+					openRet = win__::ShellExecute(0, "open", "C:/Temp/" + name, "", "", 5);
+					if (openRet < 32)
+					{
+						alert("文件打开失败2!");
+						return -1;
+					}
+
+					return -1;
+				}
+
+				int OnAttachEvent()
+				{
+					//绑定工具条点击事件
+					AttachEvent("WM_XCOMMAND", OnXCommand);
+					AttachEvent("note", "HTC_OBJECTCLICKED", OnHtmlClick);
+				}
+
+				int onload()
+				{
+					OnAttachEvent();
+
+					m_Edit = new control__;
+					m_Edit.setNativePointer(GetControl("Txt"));
+
+					m_Html = new html__;
+					m_Html.setNativePointer(GetControl("note"));
+
+					m_cb = new html__;
+					m_cb.setNativePointer(GetControl("attlist"));
+
+					m_EntityID = "";
+					m_EntityType = "";
+					m_EntityConnect = "";
+					m_ConnectID = "";
+
+					if (this.GetParam())
+					{
+						xaserverarg__ arg = this.GetParam();
+						m_EntityID = arg.GetArgString("EntityID");
+						m_EntityType = arg.GetArgString("m_EntityType");
+						m_EntityConnect = arg.GetArgString("m_EntityConnect");
+					}
+					Init();
+
+					return 1;
+				}
+			]
+		]
+]
\ No newline at end of file
diff --git a/jrj/project/business/SystemSettings/CommentaryEx.dialog.cpp b/jrj/project/business/SystemSettings/CommentaryEx.dialog.cpp
new file mode 100644
index 0000000..0c49a7e
--- /dev/null
+++ b/jrj/project/business/SystemSettings/CommentaryEx.dialog.cpp
@@ -0,0 +1,250 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+use "publiccode.vutil.vbusiness.vd"
+
+unit business
+[
+	class CommentaryEx : public  xframe
+	{
+		string m_EntityID;
+		string m_EntityType;
+		string m_EntityConnect;
+		string m_ConnectID;
+
+		xcontrol m_Edit;
+		htmlctrl m_Html;
+		xcombobox m_cb;
+
+		int Init()
+		{
+			if (m_EntityID == "") return -1;
+
+			xml x = new xml;
+			x.setNativePointer(x.CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg("EntityID", m_EntityID);
+			arg.AddArg("EntityType", m_EntityType);
+			arg.AddArg("EntityConnect", m_EntityConnect);
+			if (url::get("/sale/data/Commentary/entity/notelist", arg.GetString(), x) == 1)
+			{
+				m_Html.SetContent(x.GetXml());
+				m_Html.Redraw();
+			}
+			return 1;
+		}
+
+		int AppendItem(xml x, msxml::IXMLDOMElement r, string name, string value)
+		{
+			msxml::IXMLDOMElement e = x.GetXmlDoc().createElement(name);
+			e.text = value;
+			r.appendChild(e);
+			return 1;
+		}
+
+		int showAtt()
+		{
+			xnode anode = GetAgentNode("att");
+			int s = xcombobox::GetCount(m_cb.GetId());
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			x.LoadXml("<vbox/>");
+			msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
+			int i = 0;
+			for (i = 0; i < s; i++)
+			{
+				string tmp = xcombobox::GetLBText(m_cb.GetId(), i);
+				msxml::IXMLDOMElement e = x.GetXmlDoc().createElement("hbox");
+				e.setAttribute("height", "20");
+				msxml::IXMLDOMElement l = x.GetXmlDoc().createElement("xlabel");
+				l.setAttribute("caption", "" + tmp);
+				msxml::IXMLDOMElement b = x.GetXmlDoc().createElement("xtoolbutton");
+				b.setAttribute("width", "18");
+				b.setAttribute("name", "att_" + i.toString());
+				b.setAttribute("image", "1,5");
+				e.appendChild(l);
+				e.appendChild(b);
+				ele.appendChild(e);
+				msxml::IXMLDOMElement g = x.GetXmlDoc().createElement("xlabel");
+				g.setAttribute("height", "2");
+				g.setAttribute("style", "background-color:#000000");
+				ele.appendChild(g);
+			}
+			SetAgentNodeContent(anode, ele.xml);
+			anode.SetWidthHeight(-1, i * 20 + 1);
+			return 1;
+		}
+
+		int addAtt()
+		{
+			string guid = publiccode::GetGuid();
+			string str = guid.left(2);
+			string ret = xaserver::UploadFile("attachment" + str, guid + ".jpg", this.GetHWND(), "", false);
+			int nIndex = xcombobox::AddItem(m_cb.GetId(), ret, guid + ".jpg");
+			showAtt();
+			return 1;
+		}
+
+		int delAtt(string no)
+		{
+			int nIndex = no.toInt();
+			xcombobox::DeleteItem(m_cb.GetId(), nIndex);
+			showAtt();
+			return 1;
+		}
+
+		msxml::IXMLDOMElement getAtt()
+		{
+			int s = xcombobox::GetCount(m_cb.GetId());
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			x.LoadXml("<Attachment/>");
+			msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
+			int i = 0;
+			for (i = 0; i < s; i++)
+			{
+				string tmp = xcombobox::GetLBText(m_cb.GetId(), i);
+				string tmp2 = xcombobox::GetItemData(m_cb.GetId(), i);
+				msxml::IXMLDOMElement e = x.GetXmlDoc().createElement("item");
+				e.setAttribute("name", "" + tmp);
+				e.setAttribute("file", "" + tmp2);
+				ele.appendChild(e);
+			}
+			return ele;
+		}
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if (comdid == "xmOK")
+			{
+				if (m_EntityID == "") return 1;
+
+				xml x = new xml;
+				x.setNativePointer(xml::CreateInstance());
+				xaserverarg arg = new xaserverarg;
+				arg.setNativePointer(arg.CreateInstance());
+				string value = m_Edit.GetText();
+				if (value == "")
+				{
+					alert("请填写批注!");
+					return 1;
+				}
+
+				x.LoadXml("<Commentary update.new='1' update.modify='1'/>");
+				msxml::IXMLDOMElement ele = x.GetXmlDoc().documentElement;
+				AppendItem(x, ele, "CommentaryID", publiccode::GetGuid());
+				AppendItem(x, ele, "EntityID", m_EntityID);
+				AppendItem(x, ele, "EntityType", m_EntityType);
+				AppendItem(x, ele, "Remark", value);
+				AppendItem(x, ele, "ParentConnect", m_EntityConnect);
+				AppendItem(x, ele, "ParentCommentaryID", m_ConnectID);
+				AppendItem(x, ele, "CreatorID", xaserver::GetUserId());
+				ele.appendChild(getAtt());
+
+				arg.AddArg("content", "<root>" + ele.xml + "</root>");
+
+				if (getUrl("/workflow/action/Commentary/bill.update", arg.GetString(), x) == 1)
+				{
+					m_Edit.SetText("");
+					xcombobox::ResetContent(m_cb.GetId());
+					Init();
+					showAtt();
+					return 1;
+				}
+				else
+				{
+					alert("添加失败!");
+					return -1;
+				}
+			}
+			else if (comdid == "xmAtt")
+			{
+				addAtt();
+			}
+			else if (comdid.left(4) == "att_")
+			{
+				delAtt(comdid.right(comdid.length() - 4));
+			}
+			else
+			{
+				CloseWindow();
+			}
+			return 1;
+		}
+
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt, int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+
+		int OnHtmlClick(ref  TNotifyEvent evt, int pr)
+		{
+			ref  HTMLNMHDR p = evt.pnmh;
+			const string d = m_Html.GetData(p.object);
+			if (d == "") return -1;
+			string file = d.mid(0, d.find("|##@@|", 0));
+			string name = d.mid(d.find("|##@@|", 0) + 6, d.length());
+
+
+			xaserver::CreateDirectory("C:/Temp");
+			string str = file.left(2);
+			string ext = "";
+			if (name.find(".") >= 0) ext = name.mid(name.find("."), name.length());
+			string sfile = file.left(file.length() - 4);
+			//trace("--"+ext +" " + "/business/attachment/"+str+"/"+ file);
+			//int openRet = xaserver::DownLoadFile(GetServerUrl(),"/business/attachment/"+str+"/"+ file,name,"C:/Temp/"+name);
+			int openRet = xaserver::DownLoadFile(GetServerUrl(), "/business/attachment/" + str + "/" + file, "", "C:/Temp/" + sfile + ext);
+			if (openRet < 0)
+			{
+				alert("文件打开失败1!");
+				return -1;
+			}
+			//openRet = win32::ShellExecute(0,"open","C:/Temp/"+name,"","",5);	
+			openRet = win32::ShellExecute(0, "open", "C:/Temp/" + sfile + ext, "", "", 5);
+			if (openRet < 32)
+			{
+				alert("文件打开失败2!");
+				return -1;
+			}
+
+			return -1;
+		}
+
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND", OnXCommand);
+			AttachEvent("note", "HTC_OBJECTCLICKED", OnHtmlClick);
+		}
+
+		int onload()
+		{
+			OnAttachEvent();
+
+			m_Edit = GetControl("Txt");
+
+			m_Html = GetControl("note");
+
+			m_cb = GetControl("attlist");
+
+			m_EntityID = "";
+			m_EntityType = "";
+			m_EntityConnect = "";
+			m_ConnectID = "";
+
+			if (this.GetParam())
+			{
+				//xaserverarg arg = new xaserverarg;
+				//arg.setNativePointer(GetParam());
+				xaserverarg arg = GetParam();
+				m_EntityID = arg.GetArgString("EntityID");
+				m_EntityType = arg.GetArgString("m_EntityType");
+				m_EntityConnect = arg.GetArgString("m_EntityConnect");
+			}
+			Init();
+
+			return 1;
+		}
+	};
+]
\ No newline at end of file

--
Gitblit v1.9.3