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)已发布,同样全自动生成代码
-
-
-
+
+
+
## 框架已支持Vue3版本
-
+
## 框架已增加低代码设计器
-
-
+
+
## 框架2.0已更新(部分新增功能截图)
增加切换皮肤功能
-
-
+
+
增加可复用的后台请求参数校验
-
+
增加树形菜单与代码生成页面使用
-
+
增加文本编辑器直接发布静态页面功能
-
+
一对一多从表显示(只需要少量代码就可完成成,其他都由代码生成器生成)
-
+
表合并显示 (只需要几行代码完成代码生成器生成的页面实现扩展)
-
+
从图上传图片 (只需要几行代码完成代码生成器生成的页面实现扩展)
-
+
一对多从表(不限从表数量)扩展
-
+
图表
-
+
## 1、只读基础表单
整个只读的基础表单的所有前后端代码,全部由代码生成器生成,代码生成器中几乎不需要配置,并支持并后端业务代码扩展,直接生成代码后,配置菜单权限即可
-
+
## 2、自动绑定下拉框数据表单
整个自动绑定下拉框数据表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,在代码生成器中只需要指定数据源编号,页面加载时会根据编号自动加载数据源并绑定
-
+
## 3、启用图片支持、审核表单
整个启用图片支持、审核表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,审核功能需要在菜单配置权限、代码生成器中勾选启用图片支持
-
+
## 4、高级查询
整个表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,查询字段、类型(下拉框、日期、TextArea等)、所在行与列都由代码生成器完成,不需要写任何代码
- 
+ 
## 5、主从表新建、编辑
主从表新建、编辑所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,新建、编辑从表配置、字段、类型(下拉框、日期、TextArea等)、所在行与列、字段是否只读、标签显示的长度等都由代码生成器完成,不需要写任何代码
-
+
## 6、excel导入
excel导入整个页面都由代码生成器生成,导入的字段、字段是否必填,下载模板也由代码生成器上配置(自己根据实际需要决定是否采用此方法),导入时会验证是否为空与数据的合法性,逻辑校验自己实现扩展方法即可
-
+
## 7、H5开发
-
+
## 8、权限分配
目前只实现了对用户的角色的Action进行权限分配
-
+
## 9、代码生成器
代码生成器提供了20多种可配置的属性,可灵活配置显示、查询、编辑、导入、导出、主从关系等功能点击看代码生成器文档
-
+
其他功能。。。。。
--
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