From f990e3309e0901685b64e07664e44cdd5109dd92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9D=88=E3=83=BE=E9=AD=82?= <283591387@qq.com> Date: Wed, 6 Apr 2022 15:58:39 +0000 Subject: [PATCH 1/2] update README.md. --- README.md | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index a3adbd6d..487fefdc 100644 --- a/README.md +++ b/README.md @@ -33,73 +33,73 @@ ## App/H5开发 - http://v2.volcore.xyz/app/guide ## 框架移动端(uniapp)已发布,同样全自动生成代码 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/qrcode.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m001.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m002.png) +![Home](/imgs/qrcode.png) +![Home](/imgs/m001.png) +![Home](/imgs/m002.png) ## 框架已支持Vue3版本 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/v3.png) +![Home](/imgs/v3.png) ## 框架已增加低代码设计器 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/fd01.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/fd02.png) +![Home](/imgs/fd01.png) +![Home](/imgs/fd02.png) ## 框架2.0已更新(部分新增功能截图) 增加切换皮肤功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h.png) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/home_them.png) +![Home](/imgs/h.png) +![Home](/imgs/home_them.png) 增加可复用的后台请求参数校验 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/validator.png) +![Home](/imgs/validator.png) 增加树形菜单与代码生成页面使用 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/x7tree.png) +![Home](/imgs/x7tree.png) 增加文本编辑器直接发布静态页面功能 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editor.png) +![Home](/imgs/editor.png) 一对一多从表显示(只需要少量代码就可完成成,其他都由代码生成器生成) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m1.png) +![Home](/imgs/m1.png) 表合并显示 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/span.png) +![Home](/imgs/span.png) 从图上传图片 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/p1.png) +![Home](/imgs/p1.png) 一对多从表(不限从表数量)扩展 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/multi.png) +![Home](/imgs/multi.png) 图表 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/charts.png) +![Home](/imgs/charts.png) ## 1、只读基础表单 整个只读的基础表单的所有前后端代码,全部由代码生成器生成,代码生成器中几乎不需要配置,并支持并后端业务代码扩展,直接生成代码后,配置菜单权限即可 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table1.png) +![Home](/imgs/table1.png) ## 2、自动绑定下拉框数据表单 整个自动绑定下拉框数据表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,在代码生成器中只需要指定数据源编号,页面加载时会根据编号自动加载数据源并绑定 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table2.png) +![Home](/imgs/table2.png) ## 3、启用图片支持、审核表单 整个启用图片支持、审核表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,审核功能需要在菜单配置权限、代码生成器中勾选启用图片支持 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table3.png) +![Home](/imgs/table3.png) ## 4、高级查询 整个表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,查询字段、类型(下拉框、日期、TextArea等)、所在行与列都由代码生成器完成,不需要写任何代码 - ![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/tablesearch4.png) + ![Home](/imgs/tablesearch4.png) ## 5、主从表新建、编辑 主从表新建、编辑所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,新建、编辑从表配置、字段、类型(下拉框、日期、TextArea等)、所在行与列、字段是否只读、标签显示的长度等都由代码生成器完成,不需要写任何代码 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editTbale2.png) +![Home](/imgs/editTbale2.png) ## 6、excel导入 excel导入整个页面都由代码生成器生成,导入的字段、字段是否必填,下载模板也由代码生成器上配置(自己根据实际需要决定是否采用此方法),导入时会验证是否为空与数据的合法性,逻辑校验自己实现扩展方法即可 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/importTable1.png) +![Home](/imgs/importTable1.png) ## 7、H5开发 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h5.jpg) +![Home](/imgs/h5.jpg) ## 8、权限分配 目前只实现了对用户的角色的Action进行权限分配 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/auth.png) +![Home](/imgs/auth.png) ## 9、代码生成器 代码生成器提供了20多种可配置的属性,可灵活配置显示、查询、编辑、导入、导出、主从关系等功能点击看代码生成器文档 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/coder.png) +![Home](/imgs/coder.png) 其他功能。。。。。 -- Gitee From 5d405a0a7634532b00f5eece6f6c70fe180df9e3 Mon Sep 17 00:00:00 2001 From: luo jieming Date: Fri, 8 Apr 2022 15:57:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8C=89=E9=92=AE=E4=BB=8E=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E8=AF=BB=E5=8F=96=E4=BC=98=E5=8C=96,=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E6=80=A7=E9=AB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/system/Sys_Menu.vue" | 30 +++++++++---------- .../VOL.Core/Enums/ActionPermissionOptions.cs | 22 ++++++++++++-- Vue.Net/VOL.Core/Extensions/EnumExtension.cs | 28 +++++++++++++++++ .../Filters/EnumDisplayNameAttribute.cs | 15 ++++++++++ .../System/Partial/Sys_MenuController.cs | 17 +++++++++++ 5 files changed, 94 insertions(+), 18 deletions(-) create mode 100644 Vue.Net/VOL.Core/Extensions/EnumExtension.cs create mode 100644 Vue.Net/VOL.Core/Filters/EnumDisplayNameAttribute.cs diff --git "a/Vol.Vue3\347\211\210\346\234\254/src/views/system/Sys_Menu.vue" "b/Vol.Vue3\347\211\210\346\234\254/src/views/system/Sys_Menu.vue" index 65f235ec..345e77df 100644 --- "a/Vol.Vue3\347\211\210\346\234\254/src/views/system/Sys_Menu.vue" +++ "b/Vol.Vue3\347\211\210\346\234\254/src/views/system/Sys_Menu.vue" @@ -288,28 +288,28 @@ export default defineComponent({ setup () { const tree = ref([]); const actionValues = ref([]); - const action = ref([ - { text: "查询", value: "Search" }, - { text: "新建", value: "Add" }, - { text: "删除", value: "Delete" }, - { text: "编辑", value: "Update" }, - { text: "导入", value: "Import" }, - { text: "导出", value: "Export" }, - { text: "上传", value: "Upload" }, - { text: "审核", value: "Audit" }, - ]); + const action = ref([]); const actions = ref([]); - actionValues.value = action.value.map((x) => { - return x.value; - }); + // actionValues.value = action.value.map((x) => { + // return x.value; + // }); const initTree = () => { http.post("/api/menu/getMenu", {}, true).then((x) => { x.forEach(item=>{item.icon='el-icon-menu'}) tree.value = x; }); }; + const initButtons = () => { + http.post("/api/menu/getButtons", {}, true).then((x) => { + //x.forEach(item => { item.icon = 'el-icon-menu' }) + action.value = x; + //console.log(x); + actionValues.value = action.value.map((x) => { + return x.value; + }); onMounted(() => { initTree(); + initButtons(); }); const actionModel = ref(false); const checkAll = ref(false); @@ -463,7 +463,7 @@ export default defineComponent({ fields.value.icon = x.icon; if (x.auth) { x.auth = JSON.parse(x.auth); - action.value.splice(8, action.value.length); + //action.value.splice(8, action.value.length); actions.value = x.auth.map((element) => { if (actionValues.value.indexOf(element.value) == -1) { @@ -472,7 +472,7 @@ export default defineComponent({ return element.value; }); } else { - action.value.splice(8, action.value.length); + //action.value.splice(8, action.value.length); x.auth = []; fields.value.icon = ""; actions.value = []; diff --git a/Vue.Net/VOL.Core/Enums/ActionPermissionOptions.cs b/Vue.Net/VOL.Core/Enums/ActionPermissionOptions.cs index 5b216367..c6d19a24 100644 --- a/Vue.Net/VOL.Core/Enums/ActionPermissionOptions.cs +++ b/Vue.Net/VOL.Core/Enums/ActionPermissionOptions.cs @@ -6,13 +6,29 @@ namespace VOL.Core.Enums { public enum ActionPermissionOptions { + [EnumDisplayName(displayName = "新建")] Add = 0, + [EnumDisplayName(displayName = "删除")] Delete = 1, + [EnumDisplayName(displayName = "编辑")] Update = 2, - Search=3, - Export=4, + [EnumDisplayName(displayName = "查询")] + Search = 3, + [EnumDisplayName(displayName = "导出")] + Export = 4, + [EnumDisplayName(displayName = "审核")] Audit, + [EnumDisplayName(displayName = "上传")] Upload,//上传文件 - Import //导入表数据Excel + [EnumDisplayName(displayName = "导入")] + Import, //导入表数据Excel + [EnumDisplayName(displayName = "查看")] + Look, //查看 + [EnumDisplayName(displayName = "查看1")] + Look2, + [EnumDisplayName(displayName = "查看2")] + Look3, + [EnumDisplayName(displayName = "查看3")] + Look4 } } diff --git a/Vue.Net/VOL.Core/Extensions/EnumExtension.cs b/Vue.Net/VOL.Core/Extensions/EnumExtension.cs new file mode 100644 index 00000000..7fedce78 --- /dev/null +++ b/Vue.Net/VOL.Core/Extensions/EnumExtension.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using VOL.Core.Enums; +using VOL.Core.Filters; + +namespace VOL.Core.Extensions +{ + public static class EnumExtension + { + /// + /// 获取枚举TestEnum的displayName + /// + /// 枚举项 + /// 枚举项的displayName + public static string GetDisplayName(this Enum oa) + { + string disName = ""; + Type type = oa.GetType(); + string name = Enum.GetName(type, oa); + FieldInfo field = type.GetField(name); + EnumDisplayNameAttribute attribute = Attribute.GetCustomAttribute(field, typeof(EnumDisplayNameAttribute)) as EnumDisplayNameAttribute; + disName = attribute == null ? null : attribute.displayName; + return disName; + } + } +} diff --git a/Vue.Net/VOL.Core/Filters/EnumDisplayNameAttribute.cs b/Vue.Net/VOL.Core/Filters/EnumDisplayNameAttribute.cs new file mode 100644 index 00000000..8099341f --- /dev/null +++ b/Vue.Net/VOL.Core/Filters/EnumDisplayNameAttribute.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace VOL.Core.Filters +{ + /// + /// 定义一个Attribute类,作用域为字段(tips:可以是枚举的字段,也可以是类的字段) + /// + [AttributeUsage(AttributeTargets.Field)] + class EnumDisplayNameAttribute : Attribute + { + public string displayName; + } +} diff --git a/Vue.Net/VOL.WebApi/Controllers/System/Partial/Sys_MenuController.cs b/Vue.Net/VOL.WebApi/Controllers/System/Partial/Sys_MenuController.cs index 7e3e90af..17434dfd 100644 --- a/Vue.Net/VOL.WebApi/Controllers/System/Partial/Sys_MenuController.cs +++ b/Vue.Net/VOL.WebApi/Controllers/System/Partial/Sys_MenuController.cs @@ -64,5 +64,22 @@ namespace VOL.System.Controllers return Json(webResponse.OK("删除成功")); } + [HttpPost, Route("getButtons"), AllowAnonymous] + public async Task GetButtons() + { + var result = await Task.Run(() => + { + List objList = new List(); + //遍历枚举 + foreach (ActionPermissionOptions suit in Enum.GetValues(typeof(ActionPermissionOptions))) + { + //Console.WriteLine((int)suit + " " + suit.GetDisplayName() + ":" + suit.ToString()); + var obj = new { text = suit.GetDisplayName(), value = suit.ToString() }; + objList.Add(obj); + } + return objList; + }); + return Json(result); + } } } -- Gitee