You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

659 lines
22 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections;
using System.Data;
using BP.DA;
using BP.En;
namespace BP.GPM
{
/// <summary>
/// 菜单
/// </summary>
public class MenuAttr : EntityTreeAttr
{
/// <summary>
/// 控制方法
/// </summary>
public const string MenuCtrlWay = "MenuCtrlWay";
/// <summary>
/// 系统
/// </summary>
public const string FK_App = "FK_App";
/// <summary>
/// 图片
/// </summary>
public const string Img = "Img";
/// <summary>
/// 连接
/// </summary>
public const string Url = "Url";
/// <summary>
/// 连接pc
/// </summary>
public const string UrlExt = "UrlExt";
/// <summary>
/// 连接(移动端)
/// </summary>
public const string MobileUrlExt = "MobileUrlExt";
/// <summary>
/// 控制内容
/// </summary>
public const string CtrlObjs = "CtrlObjs";
/// <summary>
/// 是否启用
/// </summary>
public const string IsEnable = "IsEnable";
/// <summary>
/// 打开方式
/// </summary>
public const string OpenWay = "OpenWay";
/// <summary>
/// 标记
/// </summary>
public const string Flag = "Flag";
/// <summary>
/// 扩展1
/// </summary>
public const string Tag1 = "Tag1";
/// <summary>
/// 扩展2
/// </summary>
public const string Tag2 = "Tag2";
/// <summary>
/// Tag3
/// </summary>
public const string Tag3 = "Tag3";
/// <summary>
/// 图标
/// </summary>
public const string Icon = "Icon";
}
/// <summary>
/// 菜单
/// </summary>
public class Menu : EntityTree
{
#region 属性
public override UAC HisUAC
{
get
{
UAC uac = new UAC();
if (BP.Web.WebUser.No.Contains("admin") == true)
{
uac.IsDelete = true;
uac.IsUpdate = true;
uac.IsInsert = true;
return uac;
}
else
{
uac.Readonly();
}
return uac;
}
}
public string CtrlObjs
{
get
{
return this.GetValStringByKey(MenuAttr.CtrlObjs);
}
set
{
this.SetValByKey(MenuAttr.CtrlObjs, value);
}
}
/// <summary>
/// 功能
/// </summary>
public MenuType HisMenuType
{
get
{
return (MenuType)this.GetValIntByKey(MenuAttr.MenuType);
}
set
{
this.SetValByKey(MenuAttr.MenuType, (int)value);
}
}
/// <summary>
/// 是否启用
/// </summary>
public bool IsEnable
{
get
{
return this.GetValBooleanByKey(MenuAttr.IsEnable);
}
set
{
this.SetValByKey(MenuAttr.IsEnable, value);
}
}
/// <summary>
/// 打开方式
/// </summary>
public string OpenWay
{
get
{
int openWay = 0;
switch (openWay)
{
case 0:
return "_blank";
case 1:
return this.No;
default:
return "";
}
}
}
/// <summary>
/// 是否是ccSytem
/// </summary>
public MenuType MenuType
{
get
{
return (MenuType)this.GetValIntByKey(MenuAttr.MenuType);
}
set
{
this.SetValByKey(MenuAttr.MenuType, (int)value);
}
}
public string FK_App
{
get
{
return this.GetValStringByKey(MenuAttr.FK_App);
}
set
{
this.SetValByKey(MenuAttr.FK_App, value);
}
}
public string Flag
{
get
{
return this.GetValStringByKey(MenuAttr.Flag);
}
set
{
this.SetValByKey(MenuAttr.Flag, value);
}
}
public string Img
{
get
{
string s = this.GetValStringByKey("WebPath");
if (DataType.IsNullOrEmpty(s))
{
if (this.HisMenuType == GPM.MenuType.Dir)
return "/Images/Btn/View.gif";
else
return "/Images/Btn/Go.gif";
}
else
{
return s;
}
}
set
{
this.SetValByKey("WebPath", value);
}
}
public string Url
{
get
{
return this.GetValStringByKey(MenuAttr.Url);
}
set
{
this.SetValByKey(MenuAttr.Url, value);
}
}
public string UrlExt
{
get
{
return this.GetValStringByKey(MenuAttr.UrlExt);
}
set
{
this.SetValByKey(MenuAttr.UrlExt, value);
}
}
public string MobileUrlExt
{
get
{
return this.GetValStringByKey(MenuAttr.MobileUrlExt);
}
set
{
this.SetValByKey(MenuAttr.MobileUrlExt, value);
}
}
public bool IsCheck = false;
/// <summary>
/// 标记
/// </summary>
public string Tag1
{
get
{
return this.GetValStringByKey(MenuAttr.Tag1);
}
set
{
this.SetValByKey(MenuAttr.Tag1, value);
}
}
#endregion
#region 构造方法
/// <summary>
/// 菜单
/// </summary>
public Menu()
{
}
/// <summary>
/// 菜单
/// </summary>
/// <param name="no"></param>
public Menu(string no)
{
this.No = no;
this.Retrieve();
}
protected override bool beforeDelete()
{
if (this.Flag.Contains("FlowSort") || this.Flag.Contains("Flow"))
{
throw new Exception("@删除失败,此项为工作流菜单,不能删除。");
}
return base.beforeDelete();
}
protected override void afterDelete()
{
//删除他的子项目.
Menus ens = new Menus();
ens.Retrieve(MenuAttr.ParentNo, this.No);
foreach (Menu item in ens)
item.Delete();
base.afterDelete();
}
/// <summary>
/// EnMap
/// </summary>
public override Map EnMap
{
get
{
if (this._enMap != null)
return this._enMap;
Map map = new Map("GPM_Menu", "系统菜单"); // 类的基本属性.
map.setEnType( BP.En.EnType.Sys);
map.setCodeStruct("4");
#region 与树有关的必备属性.
map.AddTBStringPK(MenuAttr.No, null, "功能编号", true, true, 1, 90, 50);
map.AddDDLEntities(MenuAttr.ParentNo, null, DataType.AppString, "父节点", new Menus(), "No", "Name", false);
map.AddTBString(MenuAttr.Name, null, "名称", true, false, 0, 300, 200, true);
map.AddTBInt(MenuAttr.Idx, 0, "顺序号", true, false);
#endregion 与树有关的必备属性.
// 类的字段属性.
map.AddDDLSysEnum(MenuAttr.MenuType, 0, "菜单类型", true, true, MenuAttr.MenuType,
"@0=系统根目录@1=系统类别@2=系统@3=目录@4=功能/界面@5=功能控制点");
//map.AddDDLSysEnum(MenuAttr.MenuType, 0, "菜单类型", true, true, "MenuTypeExt",
// "@3=目录@4=功能/界面@5=功能控制点");
// @0=系统根目录@1=系统类别@2=系统.
map.AddDDLEntities(MenuAttr.FK_App, null, "系统", new Apps(), false);
map.AddDDLSysEnum(MenuAttr.OpenWay, 1, "打开方式", true, true, MenuAttr.OpenWay,
"@0=新窗口@1=本窗口@2=覆盖新窗口");
//map.AddTBString(MenuAttr.Url, null, "连接", false, false, 0, 3900, 200, true);
map.AddTBString(MenuAttr.UrlExt, null, "PC端连接", true, false, 0, 3900, 200, true);
map.AddTBString(MenuAttr.MobileUrlExt, null, "移动端连接", true, false, 0, 3900, 200, true);
map.AddBoolean(MenuAttr.IsEnable, true, "是否启用?", true, true);
map.AddTBString(MenuAttr.Icon, null, "Icon", true, false, 0, 500, 50, true);
map.AddDDLSysEnum(MenuAttr.MenuCtrlWay, 0, "控制方式", true, true, MenuAttr.MenuCtrlWay,
"@0=按照设置的控制@1=任何人都可以使用@2=Admin用户可以使用");
map.AddTBString(MenuAttr.Flag, null, "标记", true, false, 0, 500, 20, false);
map.AddTBString(MenuAttr.Tag1, null, "Tag1", true, false, 0, 500, 20, true);
map.AddTBString(MenuAttr.Tag2, null, "Tag2", true, false, 0, 500, 20, true);
map.AddTBString(MenuAttr.Tag3, null, "Tag3", true, false, 0, 500, 20, true);
map.AddTBString(EntityNoMyFileAttr.WebPath, "/WF/Img/FileType/IE.gif", "图标", true, false, 0, 200, 20, true);
//2020.12.4 增加了附件字段.
map.AddMyFile("图标"); //附件.
map.AddSearchAttr(MenuAttr.FK_App);
map.AddSearchAttr(MenuAttr.MenuType);
map.AddSearchAttr(MenuAttr.OpenWay);
//map.AddDDLSysEnum(AppAttr.CtrlWay, 1, "控制方式", true, true, AppAttr.CtrlWay,
// "@0=游客@1=所有人员@2=按岗位@3=按部门@4=按人员@5=按SQL");
// map.AddTBString(MenuAttr.CtrlObjs, null, "控制内容", false, false, 0, 4000, 20);
//// 一对多的关系.
//map.AttrsOfOneVSM.Add(new ByStations(), new Stations(), ByStationAttr.RefObj, ByStationAttr.FK_Station,
// StationAttr.Name, StationAttr.No, "可访问的岗位");
//map.AttrsOfOneVSM.Add(new ByDepts(), new Depts(), ByStationAttr.RefObj, ByDeptAttr.FK_Dept,
// DeptAttr.Name, DeptAttr.No, "可访问的部门");
//map.AttrsOfOneVSM.Add(new ByEmps(), new Emps(), ByStationAttr.RefObj, ByEmpAttr.FK_Emp,
// EmpAttr.Name, EmpAttr.No, "可访问的人员");
#region 基本功能.
//可以访问的权限组.
map.AttrsOfOneVSM.Add(new GroupMenus(), new Groups(),
GroupMenuAttr.FK_Menu, GroupMenuAttr.FK_Group, EmpAttr.Name, EmpAttr.No, "绑定到权限组");
//可以访问的权限组.
map.AttrsOfOneVSM.Add(new StationMenus(), new BP.Port.Stations(),
StationMenuAttr.FK_Menu, StationMenuAttr.FK_Station, EmpAttr.Name, EmpAttr.No, "绑定到岗位-列表模式");
//可以访问的权限组.
map.AttrsOfOneVSM.AddGroupListModel(new StationMenus(), new BP.Port.Stations(),
StationMenuAttr.FK_Menu, StationMenuAttr.FK_Station, "绑定到岗位-分组模式", BP.Port.StationAttr.FK_StationType, "Name", EmpAttr.No);
//可以访问的权限组.(岗位)
map.AttrsOfOneVSM.Add(new DeptMenus(), new BP.Port.Depts(),
DeptMenuAttr.FK_Menu, DeptMenuAttr.FK_Dept, DeptAttr.Name, DeptAttr.No, "绑定到部门-列表模式");
map.AttrsOfOneVSM.AddBranches(new DeptMenus(), new Depts(),
DeptMenuAttr.FK_Menu, DeptMenuAttr.FK_Dept, "部门(树)", EmpAttr.Name, EmpAttr.No);
//节点绑定人员. 使用树杆与叶子的模式绑定.
map.AttrsOfOneVSM.AddBranchesAndLeaf(new EmpMenus(), new BP.Port.Emps(),
EmpMenuAttr.FK_Menu,
EmpMenuAttr.FK_Emp, "绑定人员-树结构", EmpAttr.FK_Dept, EmpAttr.Name, EmpAttr.No, "@WebUser.FK_Dept");
//不带有参数的方法.
RefMethod rm = new RefMethod();
rm.Title = "增加(增删改查)功能权限";
rm.Warning = "确定要增加吗?";
rm.ClassMethodName = this.ToString() + ".DoAddRight3";
rm.IsForEns = true;
rm.IsCanBatch = true; //是否可以批处理?
map.AddRefMethod(rm);
#endregion 基本功能.
#region 创建菜单.
rm = new RefMethod();
rm.GroupName = "创建菜单(对目录有效)";
rm.Title = "创建单据";
rm.Warning = "您确定要创建吗?";
rm.HisAttrs.AddTBString("No", null, "单据编号", true, false, 0, 100, 100);
rm.HisAttrs.AddTBString("Name", null, "单据名称", true, false, 0, 100, 400);
rm.HisAttrs.AddTBString("PTable", null, "存储表(为空则为编号相同)", true, false, 0, 100, 100);
rm.HisAttrs.AddDDLSysEnum("FrmType", 0, "单据模式", true, true, "BillFrmType", "@0=傻瓜表单@1=自由表单");
rm.HisAttrs.AddDDLSQL("Sys_FormTree", "", "选择表单树", "SELECT No,Name FROM Sys_FormTree WHERE ParentNo='1'");
rm.ClassMethodName = this.ToString() + ".DoAddCCBill";
map.AddRefMethod(rm);
#endregion 创建菜单.
this._enMap = map;
return this._enMap;
}
}
#endregion
/// <summary>
/// 增加单据
/// </summary>
/// <param name="no">编号</param>
/// <param name="name">名称</param>
/// <param name="ptable">物理表</param>
/// <param name="frmType">表单类型</param>
/// <returns></returns>
public string DoAddCCBill(string no, string name, string ptable, int frmType, string formTree)
{
if (this.MenuType != GPM.MenuType.Dir)
return "err@菜单树的节点必须为目录才能创建.";
try
{
//创建表单.
if (frmType == 0)
BP.Sys.CCFormAPI.CreateFrm(no, name, formTree, Sys.FrmType.FoolForm);
else
BP.Sys.CCFormAPI.CreateFrm(no, name, formTree, Sys.FrmType.Develop);
//更改单据属性.
BP.CCBill.FrmBill fb = new BP.CCBill.FrmBill(no);
fb.No = no;
fb.Name = name;
fb.PTable = ptable;
fb.Update();
//执行绑定.
fb.DoBindMenu(this.No, name);
return "<a href='../Comm/En.htm?EnName=BP.CCBill.FrmBill&No=" + no + "' target=_blank>打开单据属性</a>.";
}
catch (Exception ex)
{
return "err@" + ex.Message;
}
}
/// <summary>
/// 增加增删改查功能权限
/// </summary>
/// <returns></returns>
public string DoAddRight3()
{
if (this.UrlExt.Contains("Search.htm") == false && this.UrlExt.Contains("Search.htm") == false)
return "该功能非Search组件所以您不能增加功能权限.";
Menu en = this.DoCreateSubNode() as Menu;
en.Name = "增加权限";
en.MenuType = GPM.MenuType.Function; //功能权限.
en.Url = this.UrlExt;
en.Tag1 = "Insert";
en.Update();
en = this.DoCreateSubNode() as Menu;
en.Name = "修改权限";
en.MenuType = GPM.MenuType.Function; //功能权限.
en.Url = this.UrlExt;
en.Tag1 = "Update";
en.Update();
en = this.DoCreateSubNode() as Menu;
en.Name = "删除权限";
en.MenuType = GPM.MenuType.Function; //功能权限.
en.Url = this.UrlExt;
en.Tag1 = "Delete";
en.Update();
return "增加成功,请刷新节点.";
}
/// <summary>
/// 路径
/// </summary>
public string WebPath
{
get
{
return this.GetValStrByKey(EntityNoMyFileAttr.WebPath);
}
set
{
this.SetValByKey(EntityNoMyFileAttr.WebPath, value);
}
}
/// <summary>
/// 更新
/// </summary>
/// <returns></returns>
protected override bool beforeUpdateInsertAction()
{
//判断选择的类型是否正确.
if (this.HisMenuType == MenuType.Root && this.ParentNo.Equals("0") == false)
{
Menu en = new Menu(this.ParentNo);
if (en.HisMenuType == MenuType.Dir)
this.HisMenuType = MenuType.Menu;
if (en.HisMenuType == MenuType.App)
this.HisMenuType = MenuType.Dir;
if (en.HisMenuType == MenuType.AppSort)
this.HisMenuType = MenuType.App;
}
//如果是菜单类别.
//if (this.HisMenuType == MenuType.AppSort)
//{
// Menu en = new Menu(this.ParentNo);
// if (en.HisMenuType != MenuType.Root)
// throw new Exception("err@当前菜单类型是系统类别但是父节点不是root选择不正确.");
//}
//if (this.HisMenuType == MenuType.App)
//{
// Menu en = new Menu(this.ParentNo);
// if (en.HisMenuType != MenuType.AppSort)
// throw new Exception("err@当前菜单类型是系统,但是父节点不是系统类别,选择不正确.");
//}
//if (this.HisMenuType == MenuType.Dir)
//{
// Menu en = new Menu(this.ParentNo);
// if (en.HisMenuType != MenuType.App)
// throw new Exception("err@当前菜单类型是目录,但是父节点不是系统,选择不正确.");
//}
//if (this.HisMenuType == MenuType.Menu)
//{
// if (DataType.IsNullOrEmpty(this.UrlExt) == true)
// throw new Exception("err@请设置页面链接.");
//}
//if (this.HisMenuType == MenuType.Function)
//{
// if (DataType.IsNullOrEmpty(this.Flag) == true)
// throw new Exception("err@请设置功能点标记.");
//}
this.WebPath = this.WebPath.Replace("//", "/");
//设置他的系统编号.
if (DataType.IsNullOrEmpty(this.ParentNo) == false
&& (this.MenuType == MenuType.Menu
|| this.MenuType == MenuType.Dir
|| this.MenuType == MenuType.Function))
{
Menu en = new Menu(this.ParentNo);
this.FK_App = en.FK_App;
}
this.Url = this.UrlExt;
return base.beforeUpdateInsertAction();
}
/// <summary>
/// 创建下级节点.
/// </summary>
/// <returns></returns>
public string DoMyCreateSubNode()
{
Entity en = this.DoCreateSubNode();
en.SetValByKey(MenuAttr.FK_App, this.GetValByKey(MenuAttr.FK_App));
en.Update();
return en.ToJson();
}
/// <summary>
/// 创建同级节点.
/// </summary>
/// <returns></returns>
public string DoMyCreateSameLevelNode()
{
Entity en = this.DoCreateSameLevelNode();
en.SetValByKey(MenuAttr.FK_App, this.GetValByKey(MenuAttr.FK_App));
en.Update();
return en.ToJson();
}
}
/// <summary>
/// 菜单s
/// </summary>
public class Menus : EntitiesTree
{
#region 构造
/// <summary>
/// 菜单s
/// </summary>
public Menus()
{
}
/// <summary>
/// 得到它的 Entity
/// </summary>
public override Entity GetNewEntity
{
get
{
return new Menu();
}
}
#endregion
#region 为了适应自动翻译成java的需要,把实体转换成List.
/// <summary>
/// 转化成 java list,C#不能调用.
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.IList<Menu> ToJavaList()
{
return (System.Collections.Generic.IList<Menu>)this;
}
/// <summary>
/// 转化成list
/// </summary>
/// <returns>List</returns>
public System.Collections.Generic.List<Menu> Tolist()
{
System.Collections.Generic.List<Menu> list = new System.Collections.Generic.List<Menu>();
for (int i = 0; i < this.Count; i++)
{
list.Add((Menu)this[i]);
}
return list;
}
#endregion 为了适应自动翻译成java的需要,把实体转换成List.
}
}