using SqlSugar; using System.Windows.Forms; using Sunny.UI; using WinformDevFramework.Core.Configuration; using WinformDevFramework.Core.Winform; using WinformDevFramework.IServices.System; using WinformDevFramework.Models; using static Npgsql.Replication.PgOutput.Messages.RelationMessage; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace WinformDevFramework { public partial class FrmMenu : BaseForm1 { private ISysMenuServices _sysMenuServices; public FrmMenu(ISysMenuServices sysMenuServices) { _sysMenuServices = sysMenuServices; InitializeComponent(); this.DoubleBuffered=true; } /// /// 初始化数据 /// public override void Init() { base.Init(); dataGridViewList.DoubleBuffered(); ltMenuTitle.Label.Text = "菜单名称"; ltIcon.Label.Text = "菜单图标"; ltMenuUrl.Label.Text = "菜单Url"; ltSort.Label.Text = "排序"; ltCreateBy.Label.Text = "创建人"; ltUpdateBy.Label.Text = "修改人"; lcMenuType.Label.Text = "菜单类型"; ldCreateDate.Label.Text = "创建时间"; ldUpdateDate.Label.Text = "修改时间"; ltIcon.TextBox.TextChanged += TextBox_TextChanged; dataGridViewList.CellFormatting += DataGridViewList_CellFormatting; uiComboTreeViewPMenu.CanSelectRootNode=true; //初始化父菜单数据 var menus = GetAllMenus(); SetParentMenu(menus); //初始化菜单类型 this.lcMenuType.ComboBox.DataSource = new List(){"Button","Form","Menu"}; //初始化 数据列表 列名称 this.dataGridViewList.DataSource=menus.OrderBy(p=>p.PermissionCode).ToList(); this.dataGridViewList.Columns["ID"]!.HeaderText = "ID"; this.dataGridViewList.Columns["PMenuName"]!.HeaderText = "父菜单"; this.dataGridViewList.Columns["PMenuName"].DisplayIndex=1; this.dataGridViewList.Columns["Title"]!.HeaderText = "菜单名称"; this.dataGridViewList.Columns["Title"].DisplayIndex = 2; this.dataGridViewList.Columns["MenuCode"]!.HeaderText = "菜单编码"; this.dataGridViewList.Columns["PermissionCode"]!.HeaderText = "菜单权限标识"; this.dataGridViewList.Columns["Icon"]!.HeaderText = "图标"; this.dataGridViewList.Columns["Icon"].Visible = false; this.dataGridViewList.Columns["Url"]!.HeaderText = "菜单URL"; this.dataGridViewList.Columns["SortOrder"]!.HeaderText = "排序"; this.dataGridViewList.Columns["MenuType"]!.HeaderText = "菜单类型"; this.dataGridViewList.Columns["CreateByName"]!.HeaderText = "创建人"; this.dataGridViewList.Columns["CreatedDate"]!.HeaderText = "创建时间"; this.dataGridViewList.Columns["UpdateByName"]!.HeaderText = "修改人"; this.dataGridViewList.Columns["UpdatedDate"]!.HeaderText = "修改时间"; this.dataGridViewList.Columns["ParentID"].Visible = false; this.dataGridViewList.Columns["CreatedBy"].Visible = false; this.dataGridViewList.Columns["UpdatedBy"].Visible = false; DataGridViewImageColumn imageColumn = new DataGridViewImageColumn(); imageColumn.HeaderText = "图标"; imageColumn.Name = "ImageColumn"; imageColumn.DefaultCellStyle.NullValue = null; this.dataGridViewList.Columns.Add(imageColumn); SetToolButtonStatus(formStatus); SetToolsButton(); } private void DataGridViewList_CellFormatting(object? sender, DataGridViewCellFormattingEventArgs e) { if (e.RowIndex >= 0 && dataGridViewList.Columns[e.ColumnIndex] is DataGridViewImageColumn) { // 获取当前行的数据 var rowData = dataGridViewList.Rows[e.RowIndex].DataBoundItem as sysMenu; // 根据行的数据设置图片 if (rowData != null) { // 根据需要设置图片的逻辑 // 这里假设你有一个名为"ImageFilePath"的属性,表示图片的文件路径 string imageFilePath =Application.StartupPath+"\\"+ rowData.Icon; // 设置单元格的图片 if (!string.IsNullOrEmpty(imageFilePath)&&File.Exists(imageFilePath)) { e.Value = Image.FromFile(imageFilePath); } } } } private void TextBox_TextChanged(object? sender, EventArgs e) { if (string.IsNullOrEmpty(ltIcon.TextBox.Text)) { pictureBox.Image = null; } else { if(File.Exists(Application.StartupPath + "\\" + ltIcon.TextBox.Text)) pictureBox.Image = Image.FromFile(Application.StartupPath+"\\"+ltIcon.TextBox.Text); } } /// /// 父菜单控件设置 /// private void SetParentMenu(List menus) { uiComboTreeViewPMenu.Nodes.Clear(); List nodes = new List(); foreach (var menu in menus) { TreeNode node = new TreeNode(menu.Title); node.Tag = menu; node.Name = menu.ID.ToString(); nodes.Add(node); } foreach (var treeNode in nodes) { var menu = (sysMenu)treeNode.Tag; treeNode.Nodes.AddRange(nodes.Where(p => menu.ID == ((sysMenu)p.Tag).ParentID).ToArray()); } uiComboTreeViewPMenu.Nodes.Add(nodes.Where(p => ((sysMenu)p.Tag).ParentID == 0).FirstOrDefault()); } /// /// 获取所有菜单项 /// /// private List GetAllMenus() { var menus = _sysMenuServices.QueryMuch((m, pm, u1, u2) => new object[] { JoinType.Left,m.ParentID==pm.ID, JoinType.Left,m.CreatedBy==u1.ID, JoinType.Left,m.UpdatedBy==u2.ID, }, (m, pm, u1, u2) => new sysMenu() { ID = m.ID, CreatedBy = m.CreatedBy, UpdatedBy = m.UpdatedBy, ParentID = m.ParentID, Title = m.Title, Icon = m.Icon, PMenuName = pm.Title, CreateByName = u1.Fullname, CreatedDate = m.CreatedDate, MenuType = m.MenuType, UpdatedDate = m.UpdatedDate, UpdateByName = u2.Fullname, SortOrder = m.SortOrder, URL = m.URL, MenuCode = m.MenuCode, PermissionCode = m.PermissionCode, } ); return menus; } public override void TabControlSelectingFunction(object? sender, TabControlCancelEventArgs e) { base.TabControlSelectingFunction(sender, e); } public override void DataGridViewListDoubleClick(object? sender, DataGridViewCellEventArgs e) { base.DataGridViewListDoubleClick(sender, e); var g = (DataGridView)sender; var model=g.CurrentRow.DataBoundItem as sysMenu; //给详情页设置数据 this.txtID.Text = model.ID.ToString(); this.ltMenuTitle.TextBox.Text = model.Title; this.ltMenuUrl.TextBox.Text = model.URL; this.ltSort.TextBox.Text = model.SortOrder.ToString(); this.lcMenuType.ComboBox.Text = model.MenuType; this.ltIcon.TextBox.Text=model.Icon; this.ltCreateBy.TextBox.Text = model.CreateByName; this.ldCreateDate.DateTimePicker.Text=model.CreatedDate.ToString(); this.ltUpdateBy.TextBox.Text = model.UpdateByName; this.ldUpdateDate.DateTimePicker.Text = model.UpdatedDate.ToString(); txtMenuCode.Text=model.MenuCode; txtPermissionCode.Text =model.PermissionCode; var pmenu = _sysMenuServices.QueryById(model.ParentID); if (pmenu != null) { TreeNode node = new TreeNode(pmenu.Title); node.Name = pmenu.ID.ToString(); node.Tag = pmenu; this.uiComboTreeViewPMenu.TreeView.SelectedNode = this.uiComboTreeViewPMenu.TreeView.Nodes.Find(pmenu.ID.ToString(),true).FirstOrDefault(); this.uiComboTreeViewPMenu.Text = pmenu.Title; this.uiComboTreeViewPMenu.Tag = pmenu.ID; } SetToolButtonStatus(formStatus); } public override void AddFunction(object sender, EventArgs e) { base.AddFunction(sender, e); SetToolButtonStatus(formStatus); ltCreateBy.TextBox.Text = AppInfo.User.Fullname; ldCreateDate.DateTimePicker.Text= DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); ltSort.TextBox.Text = "1"; } /// /// 设置功能按钮状态 /// public override void SetToolButtonStatus(FormStatus status) { switch (status) { case FormStatus.Add: { btnAdd.Enabled = false; btnEdit.Enabled = false; btnSave.Enabled = true; btnDel.Enabled = false; btnCanel.Enabled = true; SetControlStatus(this.groupBox1,true); ClearControlsText(this.groupBox1); break; } case FormStatus.Edit: { btnAdd.Enabled = false; btnEdit.Enabled = false; btnSave.Enabled = true; btnDel.Enabled = false; btnCanel.Enabled = true; SetControlStatus(this.groupBox1, true); break; } case FormStatus.View: { btnAdd.Enabled = true; btnEdit.Enabled = true; btnSave.Enabled = false; btnDel.Enabled = true; btnCanel.Enabled = false; SetControlStatus(this.groupBox1,false); break; } case FormStatus.Canel: { btnAdd.Enabled = true; btnEdit.Enabled = true; btnSave.Enabled = false; btnDel.Enabled = false; btnCanel.Enabled = false; SetControlStatus(this.groupBox1, false); break; } case FormStatus.First: { btnAdd.Enabled = true; btnEdit.Enabled = false; btnSave.Enabled = false; btnDel.Enabled = false; btnCanel.Enabled=false; SetControlStatus(this.groupBox1, false); break; } case FormStatus.Save: { btnAdd.Enabled = true; btnEdit.Enabled = true; btnSave.Enabled = false; btnDel.Enabled = true; btnCanel.Enabled = false; SetControlStatus(this.groupBox1, false); break; } case FormStatus.Del: { btnAdd.Enabled = true; btnEdit.Enabled = false; btnSave.Enabled = false; btnDel.Enabled = false; btnCanel.Enabled = false; SetControlStatus(this.groupBox1, false); ClearControlsText(this.groupBox1); break; } } } public override void EditFunction(object sender, EventArgs e) { base.EditFunction(sender, e); SetToolButtonStatus(formStatus); ltUpdateBy.TextBox.Text = AppInfo.User.Fullname; ldUpdateDate.DateTimePicker.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } public override void SaveFunction(object sender, EventArgs e) { base.SaveFunction(sender, e); if (ValidateData()) { //新增 if (string.IsNullOrEmpty(txtID.Text)) { sysMenu newMenu = new sysMenu(); newMenu.CreatedBy = AppInfo.User.ID; newMenu.CreatedDate = DateTime.Parse(ldCreateDate.DateTimePicker.Text); newMenu.Title = ltMenuTitle.TextBox.Text; newMenu.URL = ltMenuUrl.TextBox.Text; if (uiComboTreeViewPMenu.TreeView.SelectedNode == null) { newMenu.ParentID = int.Parse(uiComboTreeViewPMenu.Tag.ToString()); } else { newMenu.ParentID = ((sysMenu)uiComboTreeViewPMenu.TreeView.SelectedNode.Tag).ID; } newMenu.SortOrder = Int32.Parse(ltSort.TextBox.Text); newMenu.MenuType = lcMenuType.ComboBox.Text; newMenu.Icon = ltIcon.TextBox.Text; newMenu.MenuCode=txtMenuCode.Text; newMenu.PermissionCode=txtPermissionCode.Text; var id = _sysMenuServices.Insert(newMenu); txtID.Text = id.ToString(); if (id > 0) { MessageBox.Show("保存成功!", "提示"); } } // 修改 else { sysMenu newMenu = _sysMenuServices.QueryById(int.Parse(txtID.Text)); newMenu.UpdatedBy = AppInfo.User.ID; newMenu.UpdatedDate = DateTime.Parse(ldCreateDate.DateTimePicker.Text); newMenu.Title = ltMenuTitle.TextBox.Text; newMenu.URL = ltMenuUrl.TextBox.Text; if (uiComboTreeViewPMenu.TreeView.SelectedNode == null) { newMenu.ParentID = int.Parse(uiComboTreeViewPMenu.Tag.ToString()); } else { newMenu.ParentID = ((sysMenu)uiComboTreeViewPMenu.TreeView.SelectedNode.Tag).ID; } newMenu.SortOrder = Int32.Parse(ltSort.TextBox.Text); newMenu.MenuType = lcMenuType.ComboBox.Text; newMenu.Icon = ltIcon.TextBox.Text; newMenu.MenuCode = txtMenuCode.Text; newMenu.PermissionCode = txtPermissionCode.Text; if (_sysMenuServices.Update(newMenu)) { MessageBox.Show("保存成功!", "提示"); } } SetToolButtonStatus(formStatus); var menus = GetAllMenus(); this.dataGridViewList.DataSource = menus.OrderBy(p => p.PermissionCode).ToList(); SetParentMenu(menus); } } public override void DelFunction(object sender, EventArgs e) { base.DelFunction(sender, e); var result = MessageBox.Show("是否删除?", "确认", MessageBoxButtons.YesNoCancel); if (result == DialogResult.Yes) { _sysMenuServices.DeleteById(Int32.Parse(txtID.Text)); formStatus = FormStatus.Del; SetToolButtonStatus(formStatus); var menus = GetAllMenus(); this.dataGridViewList.DataSource = menus.OrderBy(p => p.PermissionCode).ToList(); SetParentMenu(menus); } } public override void CanelFunction(object sender, EventArgs e) { bool isAdd = formStatus == FormStatus.Add; base.CanelFunction(sender, e); SetToolButtonStatus(formStatus); if (isAdd) btnEdit.Enabled = false; } //验证数据 private bool ValidateData() { bool result=false; if (string.IsNullOrEmpty(ltMenuTitle.TextBox.Text)) { MessageBox.Show("菜单名称不能为空!"); return result; } if (!lcMenuType.ComboBox.Text.Equals("Menu")&&string.IsNullOrEmpty(uiComboTreeViewPMenu.Text)) { MessageBox.Show("父菜单不能为空!"); return result; } if (lcMenuType.ComboBox.Text.Equals("Form") && (string.IsNullOrEmpty(ltMenuUrl.TextBox.Text))) { MessageBox.Show("菜单图标不能为空!"); return result; } if (string.IsNullOrEmpty(txtMenuCode.Text)) { MessageBox.Show("菜单编码不能为空!"); return result; } if (string.IsNullOrEmpty(txtPermissionCode.Text)) { MessageBox.Show("权限标识不能为空!"); return result; } result = true; return result; } /// /// 选择图标 /// /// /// private void btnSelectIcon_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.InitialDirectory = Application.StartupPath + "Resources\\"; openFileDialog.Filter = "Image Files (*.jpg, *.png, *.gif, *.bmp)|*.jpg; *.png; *.gif; *.bmp"; openFileDialog.Multiselect = false; if (openFileDialog.ShowDialog() == DialogResult.OK) { string selectedImagePath = openFileDialog.FileName.Replace(Application.StartupPath,""); ltIcon.TextBox.Text= selectedImagePath; } } } }