Files
lserp_cs_6.0/插件库/Lskj.Control/BrowserSetting/BsOpenModuleHandler.cs
T

353 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using DevExpress.Utils;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraTab;
using Lskj.Business;
using Lskj.Business.Impl;
using Lskj.Control.Model;
using Lskj.Data;
using Lskj.Model;
using Lskj.Util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Xilium.CefGlue;
namespace Lskj.Control.BrowserSetting
{
public class BsOpenModuleHandler : CefV8Handler
{
public CefV8Context V8Context;
public BsOpenModuleHandler()
{
}
protected override bool Execute(string name, CefV8Value obj, CefV8Value[] arguments, out CefV8Value returnValue, out string exception)
{
CefV8Value outreturnValue = null;
string outexception = "";
bool outtrn = false;
if (name == "OpenModule" && arguments.Length == 5)
{
CefProcessMessage cefProcessMessage = CefProcessMessage.Create("OpenModule");
cefProcessMessage.Arguments.SetString(0, arguments[0].GetStringValue());
cefProcessMessage.Arguments.SetString(1, arguments[1].GetStringValue());
cefProcessMessage.Arguments.SetString(2, arguments[2].GetStringValue());
cefProcessMessage.Arguments.SetString(3, arguments[3].GetStringValue());
cefProcessMessage.Arguments.SetString(4, arguments[4].GetStringValue());
V8Context.GetFrame().SendProcessMessage(CefProcessId.Browser, cefProcessMessage);
outreturnValue = CefV8Value.CreateUndefined();
outexception = null;
outtrn = true;
}
else if (name == "OpenOnRightClick" && arguments.Length == 4)
{
CefProcessMessage cefProcessMessage = CefProcessMessage.Create("OpenOnRightClick");
cefProcessMessage.Arguments.SetString(0, arguments[0].GetStringValue());
cefProcessMessage.Arguments.SetString(1, arguments[1].GetStringValue());
cefProcessMessage.Arguments.SetString(2, arguments[2].GetStringValue());
cefProcessMessage.Arguments.SetString(3, arguments[3].GetStringValue());
V8Context.GetFrame().SendProcessMessage(CefProcessId.Browser, cefProcessMessage);
outreturnValue = CefV8Value.CreateUndefined();
outexception = null;
outtrn = true;
}
else if (name == "CloseWin" && arguments.Length == 0)
{
CefProcessMessage cefProcessMessage = CefProcessMessage.Create("CloseWin");
V8Context.GetFrame().SendProcessMessage(CefProcessId.Browser, cefProcessMessage);
outreturnValue = CefV8Value.CreateUndefined();
outexception = null;
outtrn = true;
}
else if (name == "SelectPro" && arguments.Length == 2)
{
CefProcessMessage cefProcessMessage = CefProcessMessage.Create("SelectPro");
cefProcessMessage.Arguments.SetString(0, arguments[0].GetStringValue());
cefProcessMessage.Arguments.SetString(1, arguments[1].GetStringValue());
V8Context.GetFrame().SendProcessMessage(CefProcessId.Browser, cefProcessMessage);
outreturnValue = CefV8Value.CreateUndefined();
outexception = null;
outtrn = true;
}
else
{
outreturnValue = null;
outexception = "Invalid method call";
outtrn = false;
}
returnValue = outreturnValue;
exception = outexception;
return outtrn;
}
/// <summary>
/// <para>说明:调用右键方法</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-08-18 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="arrayItem"></param>
/// <param name="rightId"></param>
/// <param name="MenuName"></param>
/// <param name="mMenuCode"></param>
public static void OpenRightModule(string arrayItem, string rightId, string MenuName, string mMenuCode)
{
DataRow item = BaseImpl.GetDataRowResult(string.Format(@"select * from P_systempopupmenu where id='{0}'", rightId));
if (item != null)
{
GridRightMenuModel menuModel = new GridRightMenuModel(item);
BaseRightMenu menu = new BaseRightMenu();
menu.Model = new DynamicModel(new string[] { MenuName, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, "1", mMenuCode });
//DataRow[] dataRows = JsonHandler.ParseJsonArrayToDataRows(arrayItem);
//JArray jArray = (JArray)JsonConvert.DeserializeObject(arrayItem);
DataTable dataTable = JsonUtil.ToDataTablePreservingComplexValues(arrayItem);
if (dataTable != null && dataTable.Rows.Count > 0)
{
menu.ExecRightMenu(menuModel, dataTable.Select());
}
}
else
{
MessageUtil.Show("未找到右键id");
}
}
/// <summary>
/// <para>说明:打开模块</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-08-18 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="menuId">The menu identifier.</param>
/// <param name="menuName">Name of the menu.</param>
/// <param name="modelFlag">The model flag.</param>
/// <param name="
/// Params">The URL parameters.</param>
public static void OpenModule(string menuId, string menuName, string dllName, string modelFlag, string urlParams)
{
try
{
// 验证参数
if (string.IsNullOrWhiteSpace(dllName))
{
MessageUtil.Show(ResourceKeys.NotFoundMenu);
return;
}
// 验证权限
int purview = 1;
if (!string.IsNullOrEmpty(menuId))
{
// 验证权限
purview = MainImpl.GetUserPurviewsByMenuId(menuId);
if (purview == 0)
{
MessageUtil.Show(ResourceKeys.UnPurview);
return;
}
}
LogUtil.WriteDebug(urlParams + "", "操作模块", menuName, menuName);
DllModule module = new DllModule
{
DllName = ReplaceDllFileName(dllName),
Id = menuId,
Name = menuName
};
string[] args = new string[]{
menuName,
ERPInfo.Instance.UserId,
ERPInfo.Instance.UserName,
purview + "",
urlParams,
menuId
};
dllName = MainImpl.GetDefaultValue(dllName);
if (SystemInfo.Instance.SoftOpenMode)
{
foreach (XtraTabPage tablepage in ERPInfo.Instance.PageControl.TabPages)
{
if (tablepage.Text == menuName)
{
MessageUtil.Show("已设置不能打开多个相同模块!");
ERPInfo.Instance.PageControl.SelectedTabPage = tablepage;
return;
}
}
}
if (dllName.ToLower().Contains(".exe"))
{
WinHelper.WinExec(dllName);
}
else if (dllName.ToLower().IndexOf("http:", StringComparison.OrdinalIgnoreCase) != -1 ||
dllName.ToLower().IndexOf("www.", StringComparison.OrdinalIgnoreCase) != -1 ||
dllName.ToLower().IndexOf("ftp:", StringComparison.OrdinalIgnoreCase) != -1)
{
Process.Start(dllName);
}
else
{
if (dllName.ToLower().EndsWith(".lsp"))
{
//MessageBox.Show(PubUtil.AbsolutelyLibPath + dllName+" "+ menuName+" "+purview+" "+urlParams);
// 打开delphi程序
DelphiHelper.LoadDelphiDll(PubUtil.AbsolutelyLibPath + dllName, "", menuName, "", "", purview, urlParams);
}
else
{
// 打开module程序
AddModuleToTab(module, args);
}
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// <para>说明:特殊dll模块处理</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2018-04-20 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="dllName">Name of the DLL.</param>
/// <returns>System.String.</returns>
private static string ReplaceDllFileName(string dllName)
{
switch (dllName.ToLower().Trim())
{
case "pubspec.dll":
dllName = "Lskj.PubSpec.dll";
break;
}
return dllName;
}
/// <summary>
/// <para>说明:添加模块到tab中</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2017-08-16 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="tabMain">The tab main.</param>
/// <param name="module">The module.</param>
/// <param name="args">The arguments.</param>
public static void AddModuleToTab(DllModule module, string[] args)
{
try
{
string guid = Guid.NewGuid().ToString();
XtraTabPage tp = new XtraTabPage();
ERPInfo.Instance.selectFormModleId = module.Id;
IForm iform = FormHelper.LoadDllForm(module.DllName, args);
// 菜单打开的模块默认最大化,界面FormState设置为Normal模式,否则会出现界面不是全屏,会显示默认阴影界面
//iform.SubForm.WindowState = _frmMain.WindowState;
iform.SubForm.WindowState = FormWindowState.Normal; ;
Form form = iform.SubForm; // 表示组成应用程序的用户界面的窗口或对话框。
form.Tag = guid;
tp.Text = module.Name;
tp.Tag = guid;
// 这个必须有不然会提示:"不能向tabControl中添加顶级控件"
form.TopLevel = false;
//form.Location = new Point(0, 0);
form.Dock = DockStyle.Fill;//客户需要缩放
form.AutoSize = true;
//form.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
//form.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height - MinusTheHeight;
form.FormBorderStyle = FormBorderStyle.None;
tp.AutoScroll = true;
tp.Controls.Add(form);
tp.ShowCloseButton = DefaultBoolean.True;
tp.Dock = DockStyle.Fill;
//module.Tag = "1";
module.Tag = guid;
module.ModuleForm = form;
form.Show();
if (args != null && !string.IsNullOrEmpty(args[4] + ""))
{
ModuleModel moduleModel = new ModuleModel(MainImpl.GetSystemdllTab(args[4] + ""));
if (!string.IsNullOrEmpty(moduleModel.SearchCondFormModuleCode))
{
ModuleConditionsPanelEx mcpex = new ModuleConditionsPanelEx();
mcpex.InitializeControl(new ModuleModel(MainImpl.GetSystemdllTab(moduleModel.SearchCondFormModuleCode)), null, null, true);
if (StaticControl.ConditionsPanelDic.ContainsKey(args[4] + ""))
{
StaticControl.ConditionsPanelDic[args[4] + ""].Dispose();
StaticControl.ConditionsPanelDic[args[4] + ""] = mcpex;
}
else
{
StaticControl.ConditionsPanelDic.Add(args[4] + "", mcpex);
}
DialogResult dialogResult = mcpex.ShowDialog();
}
}
ERPInfo.Instance.PageControl.TabPages.Add(tp);
ERPInfo.Instance.PageControl.SelectedTabPage = tp;
ERPInfo.Instance.ModuleForms.Add(guid, module);
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(ex.InnerException != null ? ex.InnerException.Message : ex.Message);
LogHelper.Instance.WriteError(ex);
//LogUtil.WriteError("打开" + module.Name + "模块失败!", ex);
}
}
public static void AddReturnRow(string rowdata)
{
if (!string.IsNullOrWhiteSpace(rowdata) && StaticControl.RightMenuGridView != null)
{
DataTable dataTable = JsonUtil.ToDataTablePreservingComplexValues(rowdata);
DataTable gridTable = (StaticControl.RightMenuGridView.GridControl.DataSource as DataTable).TrimDeleteRows();
if (gridTable == null) return;
GridColumnCollection gridColumns = StaticControl.RightMenuGridView.Columns;
if (!string.IsNullOrWhiteSpace(StaticControl.Comprefix) && dataTable.Columns.Contains("ProductId"))
{
dataTable.Columns["ProductId"].ColumnName = StaticControl.Comprefix+"ProductId"; // 将ProductId加上前缀
}
DataRow rowItem = dataTable.Rows[0];
StaticControl.ReturnRowLisy.Add(rowItem);
}
}
}
}