From 02d9b65dc9a20bfe51819081be46578e020d6a57 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, 26 Jan 2022 02:59:01 +0000 Subject: [PATCH 01/16] update README.md. --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index bc7ca553..47975b34 100644 --- a/README.md +++ b/README.md @@ -31,69 +31,69 @@ ## App/H5开发 - http://v2.volcore.xyz/app/guide ## 框架已支持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 86284e2d23a2980c24e6dd1d0975f513bf150225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A4=A9=E7=A9=BA?= Date: Tue, 15 Mar 2022 01:35:24 +0000 Subject: [PATCH 02/16] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20qqq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qqq/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 qqq/.keep diff --git a/qqq/.keep b/qqq/.keep new file mode 100644 index 00000000..e69de29b -- Gitee From 06ba96ad4b9a0d9c97c3d6e518cd136425362b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A4=A9=E7=A9=BA?= Date: Tue, 15 Mar 2022 01:36:20 +0000 Subject: [PATCH 03/16] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20qq?= =?UTF-8?q?q?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qqq/.keep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 qqq/.keep diff --git a/qqq/.keep b/qqq/.keep deleted file mode 100644 index e69de29b..00000000 -- Gitee From 781a23a653139b5879af91522b1d9345e16772bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A4=A9=E7=A9=BA?= Date: Tue, 15 Mar 2022 01:37:46 +0000 Subject: [PATCH 04/16] add testpj. --- testpj | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 testpj diff --git a/testpj b/testpj new file mode 100644 index 00000000..e69de29b -- Gitee From ad71a6bc94731ef430ee708d241e628e755eaf58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A4=A9=E7=A9=BA?= Date: Tue, 15 Mar 2022 01:38:25 +0000 Subject: [PATCH 05/16] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20te?= =?UTF-8?q?stpj?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- testpj | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 testpj diff --git a/testpj b/testpj deleted file mode 100644 index e69de29b..00000000 -- Gitee From f173eb011dca629d0263e2bbea4f44f72879cee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A4=A9=E7=A9=BA?= Date: Tue, 15 Mar 2022 02:00:12 +0000 Subject: [PATCH 06/16] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20RE?= =?UTF-8?q?ADME.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 114 ------------------------------------------------------ 1 file changed, 114 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 47975b34..00000000 --- a/README.md +++ /dev/null @@ -1,114 +0,0 @@ -## Vue + .NetCore前后端分离,不一样的快速发开框架(提供Vue2/Vue3版本) - -## 框架核心 - - 快速开发(基础功能全部由代码生成器生成) - - 支持前端、后台自定义业务代码扩展,后台提供了大量常用扩展与通用类 - - 前端、后台提供了近300个扩展方法与属性,开发人员可在此功能上编写扩展自定义业务代码 - - 代码生成(代码生成器可直接生成主/从表前后端业务代码,有30多种属性可在线配置生成的代码) - - 前端table自动转换key/value - - 前端表单select/checkbox自动绑定数据源,不需要写任何代码 - - 支持(主从表)一对一前后端代码全自动生成、并支持数据源自动绑定与业务代码扩展,不需要写任何代码 - - 支持一对多从表自定义扩展(不限从表类型与从表数量) , 一对多从表使用扩展可轻松实现 - - 如果能上手框架,可以体会到不用996,更不用掉头发的感觉^_^ - -## 框架适用范围 - - 前后端分离项目 - - 编写各种后台restful api接口。后台基础代码由代码生成器完成,在生成的代码上继续编写业务即可 - - 前端表单开发(直接上手看demo即可) - - 配合app做H5或全h5开发 - - 发布静态(h5)页面,框架已经提供了demo - - 在现有的代码生成器功能上,继续定制开发代码生成器功能,解决重复性工作 -## 框架开发依赖环境 - - 后台:VS2019 、.NetCore3.1 、EFCore3.1、JWT、Dapper、Autofac、SqlServer/MySql、Redis(可选,默认使用内置IMemory) - - 前端:VsCode、Vue2/vue3(webpack、node.js,如果没有此环境自行搜索:vue webpack npm)、vuex、axios、promise、iview、element-ui - -## 项目启动与上手 - - http://v2.volcore.xyz/document/guide -## vue2版本 - - http://v2.volcore.xyz -## vue3版本 - - http://www.volcore.xyz -## App/H5开发 - - http://v2.volcore.xyz/app/guide -## 框架已支持Vue3版本 -![Home](/imgs/v3.png) -## 框架已增加低代码设计器 -![Home](/imgs/fd01.png) -![Home](/imgs/fd02.png) -## 框架2.0已更新(部分新增功能截图) -增加切换皮肤功能 -![Home](/imgs/h.png) -![Home](/imgs/home_them.png) -增加可复用的后台请求参数校验 -![Home](/imgs/validator.png) -增加树形菜单与代码生成页面使用 -![Home](/imgs/x7tree.png) -增加文本编辑器直接发布静态页面功能 -![Home](/imgs/editor.png) -一对一多从表显示(只需要少量代码就可完成成,其他都由代码生成器生成) -![Home](/imgs/m1.png) -表合并显示 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](/imgs/span.png) -从图上传图片 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](/imgs/p1.png) -一对多从表(不限从表数量)扩展 -![Home](/imgs/multi.png) -图表 -![Home](/imgs/charts.png) - - - -## 1、只读基础表单 -整个只读的基础表单的所有前后端代码,全部由代码生成器生成,代码生成器中几乎不需要配置,并支持并后端业务代码扩展,直接生成代码后,配置菜单权限即可 -![Home](/imgs/table1.png) - -## 2、自动绑定下拉框数据表单 -整个自动绑定下拉框数据表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,在代码生成器中只需要指定数据源编号,页面加载时会根据编号自动加载数据源并绑定 -![Home](/imgs/table2.png) - -## 3、启用图片支持、审核表单 -整个启用图片支持、审核表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,审核功能需要在菜单配置权限、代码生成器中勾选启用图片支持 -![Home](/imgs/table3.png) - -## 4、高级查询 -整个表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,查询字段、类型(下拉框、日期、TextArea等)、所在行与列都由代码生成器完成,不需要写任何代码 - ![Home](/imgs/tablesearch4.png) - -## 5、主从表新建、编辑 -主从表新建、编辑所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,新建、编辑从表配置、字段、类型(下拉框、日期、TextArea等)、所在行与列、字段是否只读、标签显示的长度等都由代码生成器完成,不需要写任何代码 -![Home](/imgs/editTbale2.png) - - -## 6、excel导入 -excel导入整个页面都由代码生成器生成,导入的字段、字段是否必填,下载模板也由代码生成器上配置(自己根据实际需要决定是否采用此方法),导入时会验证是否为空与数据的合法性,逻辑校验自己实现扩展方法即可 -![Home](/imgs/importTable1.png) - - -## 7、H5开发 -![Home](/imgs/h5.jpg) - -## 8、权限分配 -目前只实现了对用户的角色的Action进行权限分配 -![Home](/imgs/auth.png) - -## 9、代码生成器 -代码生成器提供了20多种可配置的属性,可灵活配置显示、查询、编辑、导入、导出、主从关系等功能点击看代码生成器文档 -![Home](/imgs/coder.png) - -其他功能。。。。。 - -## 框架预览 - - 框架内置了大量的通用组件可直接使用,并内置了基于本框架定制开发的代码生成器,尽量避免重复性代码编写。 - - 框架不仅仅是快速开发,更多的是倾向于业务代码扩展的编写与代码规范。 - - 如果有什么问题或建议,提issue或加QQ:283591387 - - QQ1群:45221949 - - QQ2群:913189178 - - - - vue3地址:http://www.volcore.xyz - - vue2地址:http://v2.volcore.xyz - - 帐号:admin666密码:123456(本地超级管理员帐号:admin密码123456) - - github地址:https://github.com/cq-panda/vue.netcore - - gitee码云:https://gitee.com/x_discoverer/Vue.NetCore - - 框架文档:http://v2.volcore.xyz/document/guide - - 框架更新日志:http://v2.volcore.xyz/document/log - -- Gitee From 066e91b734304ce8533b0993584cb49ae4668c14 Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Tue, 15 Mar 2022 10:03:07 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E8=BF=BD=E5=8A=A0readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..bc7ca553 --- /dev/null +++ b/README.md @@ -0,0 +1,114 @@ +## Vue + .NetCore前后端分离,不一样的快速发开框架(提供Vue2/Vue3版本) + +## 框架核心 + - 快速开发(基础功能全部由代码生成器生成) + - 支持前端、后台自定义业务代码扩展,后台提供了大量常用扩展与通用类 + - 前端、后台提供了近300个扩展方法与属性,开发人员可在此功能上编写扩展自定义业务代码 + - 代码生成(代码生成器可直接生成主/从表前后端业务代码,有30多种属性可在线配置生成的代码) + - 前端table自动转换key/value + - 前端表单select/checkbox自动绑定数据源,不需要写任何代码 + - 支持(主从表)一对一前后端代码全自动生成、并支持数据源自动绑定与业务代码扩展,不需要写任何代码 + - 支持一对多从表自定义扩展(不限从表类型与从表数量) , 一对多从表使用扩展可轻松实现 + - 如果能上手框架,可以体会到不用996,更不用掉头发的感觉^_^ + +## 框架适用范围 + - 前后端分离项目 + - 编写各种后台restful api接口。后台基础代码由代码生成器完成,在生成的代码上继续编写业务即可 + - 前端表单开发(直接上手看demo即可) + - 配合app做H5或全h5开发 + - 发布静态(h5)页面,框架已经提供了demo + - 在现有的代码生成器功能上,继续定制开发代码生成器功能,解决重复性工作 +## 框架开发依赖环境 + - 后台:VS2019 、.NetCore3.1 、EFCore3.1、JWT、Dapper、Autofac、SqlServer/MySql、Redis(可选,默认使用内置IMemory) + - 前端:VsCode、Vue2/vue3(webpack、node.js,如果没有此环境自行搜索:vue webpack npm)、vuex、axios、promise、iview、element-ui + +## 项目启动与上手 + - http://v2.volcore.xyz/document/guide +## vue2版本 + - http://v2.volcore.xyz +## vue3版本 + - http://www.volcore.xyz +## App/H5开发 + - http://v2.volcore.xyz/app/guide +## 框架已支持Vue3版本 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/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) +## 框架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](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/validator.png) +增加树形菜单与代码生成页面使用 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/x7tree.png) +增加文本编辑器直接发布静态页面功能 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editor.png) +一对一多从表显示(只需要少量代码就可完成成,其他都由代码生成器生成) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m1.png) +表合并显示 (只需要几行代码完成代码生成器生成的页面实现扩展) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/span.png) +从图上传图片 (只需要几行代码完成代码生成器生成的页面实现扩展) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/p1.png) +一对多从表(不限从表数量)扩展 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/multi.png) +图表 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/charts.png) + + + +## 1、只读基础表单 +整个只读的基础表单的所有前后端代码,全部由代码生成器生成,代码生成器中几乎不需要配置,并支持并后端业务代码扩展,直接生成代码后,配置菜单权限即可 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table1.png) + +## 2、自动绑定下拉框数据表单 +整个自动绑定下拉框数据表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,在代码生成器中只需要指定数据源编号,页面加载时会根据编号自动加载数据源并绑定 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table2.png) + +## 3、启用图片支持、审核表单 +整个启用图片支持、审核表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,审核功能需要在菜单配置权限、代码生成器中勾选启用图片支持 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table3.png) + +## 4、高级查询 +整个表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,查询字段、类型(下拉框、日期、TextArea等)、所在行与列都由代码生成器完成,不需要写任何代码 + ![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/tablesearch4.png) + +## 5、主从表新建、编辑 +主从表新建、编辑所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,新建、编辑从表配置、字段、类型(下拉框、日期、TextArea等)、所在行与列、字段是否只读、标签显示的长度等都由代码生成器完成,不需要写任何代码 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editTbale2.png) + + +## 6、excel导入 +excel导入整个页面都由代码生成器生成,导入的字段、字段是否必填,下载模板也由代码生成器上配置(自己根据实际需要决定是否采用此方法),导入时会验证是否为空与数据的合法性,逻辑校验自己实现扩展方法即可 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/importTable1.png) + + +## 7、H5开发 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h5.jpg) + +## 8、权限分配 +目前只实现了对用户的角色的Action进行权限分配 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/auth.png) + +## 9、代码生成器 +代码生成器提供了20多种可配置的属性,可灵活配置显示、查询、编辑、导入、导出、主从关系等功能点击看代码生成器文档 +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/coder.png) + +其他功能。。。。。 + +## 框架预览 + - 框架内置了大量的通用组件可直接使用,并内置了基于本框架定制开发的代码生成器,尽量避免重复性代码编写。 + - 框架不仅仅是快速开发,更多的是倾向于业务代码扩展的编写与代码规范。 + - 如果有什么问题或建议,提issue或加QQ:283591387 + - QQ1群:45221949 + - QQ2群:913189178 + - + - vue3地址:http://www.volcore.xyz + - vue2地址:http://v2.volcore.xyz + - 帐号:admin666密码:123456(本地超级管理员帐号:admin密码123456) + - github地址:https://github.com/cq-panda/vue.netcore + - gitee码云:https://gitee.com/x_discoverer/Vue.NetCore + - 框架文档:http://v2.volcore.xyz/document/guide + - 框架更新日志:http://v2.volcore.xyz/document/log + -- Gitee From 9f5dc4ca3502b5ec7c59fc77ff414736a1e6322a Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Wed, 16 Mar 2022 11:36:26 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=A4=9A=E8=A1=8C=E7=BC=96=E8=BE=91=E6=97=B6=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=B6=88=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/basic/ViewGrid/methods.js" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" "b/Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" index bccf392a..a3e1775e 100644 --- "a/Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" +++ "b/Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" @@ -825,7 +825,10 @@ let methods = { } if (rows.length == 0) { return this.$error("请选择要编辑的行!"); + }else if(rows.length > 1){ + return this.$error("有且只能选择一行!"); } + //记录当前编辑的行 this.currentRow = rows[0]; //初始化弹出框 -- Gitee From cb6889fb8956bc33d99275bab8612a7b99758a50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A4=A9=E7=A9=BA?= Date: Thu, 17 Mar 2022 12:51:57 +0000 Subject: [PATCH 09/16] update README.md. --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index bc7ca553..47975b34 100644 --- a/README.md +++ b/README.md @@ -31,69 +31,69 @@ ## App/H5开发 - http://v2.volcore.xyz/app/guide ## 框架已支持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 f0dcedf3951daa74e2bc48b11c680afca018f68a Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Thu, 17 Mar 2022 21:01:30 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47975b34..09c29530 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Vue + .NetCore前后端分离,不一样的快速发开框架(提供Vue2/Vue3版本) +## Vue + .NetCore前后端分离,不一样的快速发开框架(提供Vue2/Vue3版本)------ ## 框架核心 - 快速开发(基础功能全部由代码生成器生成) -- Gitee From e9b66de93c98dc7d5cbead2821612f087ed947ed Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Fri, 18 Mar 2022 11:13:15 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E7=9A=84=E5=88=A4=E6=96=AD=EF=BC=8C=E5=B1=8F=E8=94=BD=E4=B8=8D?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E9=94=99=E8=AF=AF=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Vol.Vue3\347\211\210\346\234\254/src/views/Index.vue" | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git "a/Vol.Vue3\347\211\210\346\234\254/src/views/Index.vue" "b/Vol.Vue3\347\211\210\346\234\254/src/views/Index.vue" index 64bec2aa..d8fed351 100644 --- "a/Vol.Vue3\347\211\210\346\234\254/src/views/Index.vue" +++ "b/Vol.Vue3\347\211\210\346\234\254/src/views/Index.vue" @@ -306,7 +306,9 @@ export default defineComponent({ let _userInfo = store.getters.getUserInfo(); if (_userInfo) { userName.value = _userInfo.userName; - userImg.value = _config.base.getImgSrc(_userInfo.img, http.ipAddress); + if(_userInfo.img!=null){ + userImg.value = _config.base.getImgSrc(_userInfo.img, http.ipAddress); + } } Object.assign(_config.$tabs, { open: open, close: close }); -- Gitee From 04c3e63181bd31d79e6742c73e8e0f1b142f8371 Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Fri, 18 Mar 2022 11:19:31 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=AE=98=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09c29530..47975b34 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Vue + .NetCore前后端分离,不一样的快速发开框架(提供Vue2/Vue3版本)------ +## Vue + .NetCore前后端分离,不一样的快速发开框架(提供Vue2/Vue3版本) ## 框架核心 - 快速开发(基础功能全部由代码生成器生成) -- Gitee From 99a01f9006a8dc39ecff5983d42732e342e12250 Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Fri, 18 Mar 2022 11:21:50 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47975b34..e015117d 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ ## App/H5开发 - http://v2.volcore.xyz/app/guide ## 框架已支持Vue3版本 -![Home](/imgs/v3.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/v3.png) ## 框架已增加低代码设计器 ![Home](/imgs/fd01.png) ![Home](/imgs/fd02.png) -- Gitee From 3153f7a1d211d4cfafa797f2ae4057a969ddc642 Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Fri, 18 Mar 2022 11:26:50 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index e015117d..bc7ca553 100644 --- a/README.md +++ b/README.md @@ -31,69 +31,69 @@ ## App/H5开发 - http://v2.volcore.xyz/app/guide ## 框架已支持Vue3版本 -![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/v3.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/v3.png) ## 框架已增加低代码设计器 -![Home](/imgs/fd01.png) -![Home](/imgs/fd02.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) ## 框架2.0已更新(部分新增功能截图) 增加切换皮肤功能 -![Home](/imgs/h.png) -![Home](/imgs/home_them.png) +![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/validator.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/validator.png) 增加树形菜单与代码生成页面使用 -![Home](/imgs/x7tree.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/x7tree.png) 增加文本编辑器直接发布静态页面功能 -![Home](/imgs/editor.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editor.png) 一对一多从表显示(只需要少量代码就可完成成,其他都由代码生成器生成) -![Home](/imgs/m1.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/m1.png) 表合并显示 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](/imgs/span.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/span.png) 从图上传图片 (只需要几行代码完成代码生成器生成的页面实现扩展) -![Home](/imgs/p1.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/p1.png) 一对多从表(不限从表数量)扩展 -![Home](/imgs/multi.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/multi.png) 图表 -![Home](/imgs/charts.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/charts.png) ## 1、只读基础表单 整个只读的基础表单的所有前后端代码,全部由代码生成器生成,代码生成器中几乎不需要配置,并支持并后端业务代码扩展,直接生成代码后,配置菜单权限即可 -![Home](/imgs/table1.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table1.png) ## 2、自动绑定下拉框数据表单 整个自动绑定下拉框数据表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,在代码生成器中只需要指定数据源编号,页面加载时会根据编号自动加载数据源并绑定 -![Home](/imgs/table2.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table2.png) ## 3、启用图片支持、审核表单 整个启用图片支持、审核表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,审核功能需要在菜单配置权限、代码生成器中勾选启用图片支持 -![Home](/imgs/table3.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/table3.png) ## 4、高级查询 整个表单的所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,查询字段、类型(下拉框、日期、TextArea等)、所在行与列都由代码生成器完成,不需要写任何代码 - ![Home](/imgs/tablesearch4.png) + ![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/tablesearch4.png) ## 5、主从表新建、编辑 主从表新建、编辑所有前后端代码,全部由代码生成器生成,并支持并后端业务代码扩展,新建、编辑从表配置、字段、类型(下拉框、日期、TextArea等)、所在行与列、字段是否只读、标签显示的长度等都由代码生成器完成,不需要写任何代码 -![Home](/imgs/editTbale2.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/editTbale2.png) ## 6、excel导入 excel导入整个页面都由代码生成器生成,导入的字段、字段是否必填,下载模板也由代码生成器上配置(自己根据实际需要决定是否采用此方法),导入时会验证是否为空与数据的合法性,逻辑校验自己实现扩展方法即可 -![Home](/imgs/importTable1.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/importTable1.png) ## 7、H5开发 -![Home](/imgs/h5.jpg) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/h5.jpg) ## 8、权限分配 目前只实现了对用户的角色的Action进行权限分配 -![Home](/imgs/auth.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/auth.png) ## 9、代码生成器 代码生成器提供了20多种可配置的属性,可灵活配置显示、查询、编辑、导入、导出、主从关系等功能点击看代码生成器文档 -![Home](/imgs/coder.png) +![Home](https://github.com/cq-panda/Vue.NetCore/blob/master/imgs/coder.png) 其他功能。。。。。 -- Gitee From 63adf0e63615f808f4cbfa825c22738c96cd675c Mon Sep 17 00:00:00 2001 From: "p1j123456@126.com" Date: Tue, 22 Mar 2022 17:22:23 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E8=AE=BE=E7=BD=AEtree?= =?UTF-8?q?=E5=A4=8D=E9=80=89=E6=A1=86=E7=9A=84=E9=80=89=E4=B8=AD=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/system/Permission.vue" | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git "a/Vol.Vue3\347\211\210\346\234\254/src/views/system/Permission.vue" "b/Vol.Vue3\347\211\210\346\234\254/src/views/system/Permission.vue" index f7038bf8..f45dacec 100644 --- "a/Vol.Vue3\347\211\210\346\234\254/src/views/system/Permission.vue" +++ "b/Vol.Vue3\347\211\210\346\234\254/src/views/system/Permission.vue" @@ -13,6 +13,7 @@ { + // 清空菜单权限的复选框选中状态 + this.$refs.menuTreePermission.setChecked(x.id,false,false); x.actions.forEach((a) => { a.checked = false; }); @@ -100,6 +103,12 @@ export default { result.data.forEach((item) => { if (item.actions.length == 0) return; let sourceItem = this.data.find((f) => f.id == item.id); + + // 设置菜单复选框的选中状态为选中 + this.$nextTick(()=> { + this.$refs.menuTreePermission.setChecked(item.id,true,false); + }); + if (!sourceItem) return; item.actions.forEach((actions) => { sourceItem.actions.forEach((soure) => { -- Gitee From 06d330c98b573cbd600066b964c4b398f7f66d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E7=9A=84=E5=A4=A9=E7=A9=BA?= Date: Tue, 22 Mar 2022 09:42:18 +0000 Subject: [PATCH 16/16] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20Vo?= =?UTF-8?q?l.Vue3=E7=89=88=E6=9C=AC/src/components/basic/ViewGrid/methods.?= =?UTF-8?q?js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/basic/ViewGrid/methods.js" | 1448 ----------------- 1 file changed, 1448 deletions(-) delete mode 100644 "Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" diff --git "a/Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" "b/Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" deleted file mode 100644 index a3e1775e..00000000 --- "a/Vol.Vue3\347\211\210\346\234\254/src/components/basic/ViewGrid/methods.js" +++ /dev/null @@ -1,1448 +0,0 @@ -import detailMethods from "./detailMethods.js"; -//业务处理方法,全部可以由开发覆盖 -import serviceFilter from "./serviceFilter.js"; -let methods = { - //当添加扩展组件gridHeader/gridBody/gridFooter及明细modelHeader/modelBody/modelFooter时, - //如果要获取父级Vue对象,请使用此方法进行回调 - parentCall(fun) { - if (typeof fun != "function") { - return console.log("扩展组件需要传入一个回调方法才能获取父级Vue对象"); - } - fun(this); - }, - getCurrentAction() { - if (this.currentReadonly) { - return ""; - } - return "--" + (this.currentAction == this.const.ADD ? "新增" : "编辑"); - }, - quickSearchKeyPress($event) { - //查询字段为input时,按回车查询 - if ($event.keyCode == 13) { - if (this.searchFormFields[this.singleSearch.field] != "") { - this.search(); - } - } - }, - getButtons() { - //生成ViewGrid界面的操作按钮及更多选项 - let searchIndex = this.buttons.findIndex(x => { - return x.value == "Search"; - }); - //添加高级查询 - - if (searchIndex != -1) { - this.buttons.splice(searchIndex + 1, 0, { - icon: this.fiexdSearchForm ? 'el-icon-refresh-left' : 'el-icon-search', - name: this.fiexdSearchForm ? '重置' : "高级查询", - plain: true, - type: this.buttons[searchIndex].type, - onClick: () => { - if (this.fiexdSearchForm) { - return this.resetSearch() - } - this.searchBoxShow = !this.searchBoxShow; - } - }); - } - this.maxBtnLength += searchIndex == -1 ? 0 : 1; - if (this.buttons.length <= this.maxBtnLength) return this.buttons; - let btns = this.buttons.slice(0, this.maxBtnLength); - btns[this.maxBtnLength - 1].last = true; - return btns; - }, - extendBtn(btns, source) { - //btns权限按钮,source为扩展按钮 - if (!btns || !(source && source instanceof Array)) { - return; - } - //source通过在表的扩展js文件中buttons对应按钮的属性index决定按钮所放位置 - source.forEach(x => { - //通过按钮的Index属性,放到指定的位置 - btns.splice(x.index == undefined ? btns.length : x.index, 0, x); - }); - // if (this.extend.buttons.view) { - // this.extend.buttons.view.forEach((x) => { - // //通过按钮的Index属性,放到指定的位置 - // this.buttons.splice(x.index == undefined ? this.buttons.length : x.index, 0, x); - // }) - // } - }, - initBoxButtons() { - //初始化ViewGird与弹出框/明细表按钮 - let path = this.$route.path; - //通过菜单获取用户所对应菜单需要显示的按钮 - let permissionButtons = this.permission.getButtons( - path, - null, - this.extend.tableAction, - this.table.name - ); - if (permissionButtons) { - //2020.03.31添加深拷贝按钮组 - permissionButtons.forEach(p => { - let _obj = {}; - for (const key in p) { - _obj[key] = p[key]; - } - this.buttons.push(_obj); - }); - // this.buttons.push(...permissionButtons); - } - if (!this.extend) { - this.extend = {}; - } - if (!this.extend.buttons) { - this.extend.buttons = {}; - } - //查询界面扩展按钮(扩展按钮可自行通过设置按钮的Index属性显示到具体位置) - if (this.extend.buttons.view) { - this.extendBtn(this.buttons, this.extend.buttons.view); - } - - //弹出框按钮 - let boxButtons = []; - - let saveBtn = this.buttons.some(x => { - if ( - x.value && - (x.value.toLowerCase() == this.const.ADD.toLowerCase() || - x.value.toLowerCase() == this.const.EDIT.toLowerCase()) - ) - return true; - }); - this.currentReadonly = !saveBtn; - //从表表格操作按钮 - let detailGridButtons = { - name: "刷新", - type: 'info', - icon: "el-icon-refresh", - onClick() { - //如果明细表当前的状态为新建时,禁止刷新 - if (this.currentAction == this.const.ADD) { - return; - } - this.refreshRow(); - } - }; - - let importExcel = this.buttons.some(x => { - if (x.value == this.const.IMPORT) return true; - }); - //如果有导入权限,则需要初始化导入组件 - if (importExcel) { - this.upload.url = this.getUrl(this.const.IMPORT); - //定义下载模板的文件名 - this.upload.template.fileName = this.table.cnName; - //定义下载模板的Url路径 - this.upload.template.url = - this.http.ipAddress + this.getUrl(this.const.DOWNLOADTEMPLATE, true); - } - - // disabled - //如果当前角色没有编辑或新建功能,查看明细时字段设置全部只读 - //只有明细表,将明细表也设置为不可能编辑,并且不显示添加行、删除行 - if (!saveBtn) { - this.editFormOptions.forEach(row => { - row.forEach(x => { - x.disabled = true; - }); - }); - //没有新增编辑权限的,弹出框都设置为只读 - this.detail.columns.forEach(row => { - if (row.hasOwnProperty("edit")) { - row["edit"] = false; - } - }); - //弹出框扩展按钮 - this.extendBtn(boxButtons, this.extend.buttons.box); - //弹出弹框按钮(2020.04.21),没有编辑或新建权限时,也可以通过buttons属性添加自定义弹出框按钮 - this.boxButtons.push(...boxButtons); - this.detailOptions.buttons.push(detailGridButtons); - //弹出框扩展明细表按钮 - this.extendBtn(this.detailOptions.buttons, this.extend.buttons.detail); - - return boxButtons; - } - - this.detailOptions.edit = true; - boxButtons.push( - ...[ - { - name: "保 存", - icon: "el-icon-check", - type: "danger", - value: "save", - onClick() { - this.save(); - } - }, - { - name: "重 置", - icon: "el-icon-refresh-right", - type: "primary", - onClick() { - this.resetEdit(); - } - } - ] - ); - //从表表格操作按钮 - this.detailOptions.buttons.push( - ...[ - { - name: "添加行", - icon: "el-icon-plus", - type: 'primary', - hidden: false, - plain: true, - onClick() { - this.addRow(); - } - }, - { - type: 'danger', - plain: true, - name: "删除行", - hidden: false, - icon: "el-icon-delete", - onClick() { - this.delRow(); - } - }, - //2022.01.08增加明细表导入导出功能 - //注意需要重写后台明细表接口的导入与下载模板、导出的权限,Sys_DictionaryListController.cs/SellOrderListController.cs - { - type: 'danger', - plain: true, - name: "导入", - value: 'import', - hidden: false, - icon: "el-icon-upload2", - onClick() { - this.upload.url = `${this.http.ipAddress}api/${this.detail.table}/${this.const.IMPORT}?table=1`; - this.upload.template.url = `${this.http.ipAddress}api/${this.detail.table}/${this.const.DOWNLOADTEMPLATE}`; - //定义下载模板的文件名 - this.upload.template.fileName = this.detail.cnName; - this.upload.excel = true; - } - }, - { - type: 'danger', - plain: true, - name: "导出", - value: 'export', - icon: "el-icon-download", - hidden: false, - onClick() { - this.export(true); - } - } - ] - ); - - //弹出框扩展按钮 - this.extendBtn(boxButtons, this.extend.buttons.box); - - //弹出框扩展明细表按钮 - this.detailOptions.buttons.push(detailGridButtons); - this.extendBtn(this.detailOptions.buttons, this.extend.buttons.detail); - - //弹出弹框按钮 - this.boxButtons.push(...boxButtons); - }, - onClick(click) { - click.apply(this); - }, - changeDropdown(btnName, v1) { - let button = this.buttons.filter(x => { - return x.name == btnName; - }); - if (button && button.length > 0) { - button[0].onClick.apply(this); - } - }, - emptyValue(value) { - if (typeof value == 'string' && value.trim() === "") { - return true; - } - if (value instanceof Array && !value.length) { - return true; - } - return value === null || value === undefined || value === ""; - }, - getSearchParameters() { - //获取查询参数 - // 2020.09.11增加固定查询表单,如果设置固定了查询表单,点击查询时,不再关闭 - if (!this.fiexdSearchForm) { - this.searchBoxShow = false; - } - - let query = { wheres: [] }; - for (const key in this.searchFormFields) { - let value = this.searchFormFields[key]; - if (this.emptyValue(value)) continue; - - if (typeof value == "number") { - value = value + ""; - } - let displayType = this.getSearchItem(key); - - //联级只保留选中节点的最后一个值 - if (displayType == "cascader") { - //查询下面所有的子节点,如:选中的是父节点,应该查询下面所有的节点数据--待完 - value = value.length ? (value[value.length - 1] + "") : ""; - } - //2021.05.02增加区间查询 - if ( - typeof value == "string" || - ["date", "datetime", "range"].indexOf(displayType) == -1 - ) { - - query.wheres.push({ - name: key, - value: typeof value == "string" ? (value + '').trim() : value.join(","), - displayType: displayType - }); - continue; - } - for (let index = 0; index < value.length; index++) { - if (!this.emptyValue(value[index])) { - query.wheres.push({ - name: key, - value: (value[index] + '').trim(), - displayType: (() => { - if (["date", "datetime", "range"].indexOf(displayType) != -1) { - return index ? "lessorequal" : "thanorequal"; - } - return displayType; - })() - }); - } - } - } - return query; - }, - search() { - //查询 - // let query = this.getSearchParameters(); - // this.$refs.table.load(query, true); - this.$refs.table.load(null, true); - }, - loadTableBefore(param, callBack) { - //查询前设置查询条件及分页信息 - let query = this.getSearchParameters(); - if (query) { - param = Object.assign(param, query); - } - let status = this.searchBefore(param); - callBack(status); - }, - loadTableAfter(data, callBack, result) { - //查询后 - //2020.10.30增加查询后返回所有的查询信息 - let status = this.searchAfter(data, result); - callBack(status); - }, - loadDetailTableBefore(param, callBack) { - //明细查询前 - //新建时禁止加载明细 - if (this.currentAction == this.const.ADD) { - callBack(false); - return false; - } - let status = this.searchDetailBefore(param); - callBack(status); - }, - loadDetailTableAfter(data, callBack) { - //明细查询后 - let status = this.searchDetailAfter(data); - callBack(status); - }, - getSearchItem(field) { - //获取查询的参数 - let data; - for (let index = 0; index < this.searchFormOptions.length; index++) { - if (data) return data.type; - const item = this.searchFormOptions[index]; - data = item.find(x => { - return x.field == field; - }); - } - return data.type; - }, - resetSearch() { - //重置查询对象 - this.resetSearchForm(); - //2020.10.17增加重置后方法 - this.resetSearchFormAfter && this.resetSearchFormAfter(); - }, - resetEdit() { - //重置编辑的数据 - let isEdit = this.currentAction != this.const.ADD; - //重置之前 - if (!this[isEdit ? "resetUpdateFormBefore" : "resetAddFormBefore"]()) { - return; - } - let objKey = {}; - //编辑状态下,不需要重置主键,创建时间创建人 - if (isEdit) { - objKey[this.table.key] = this.editFormFields[this.table.key]; - } - this.resetEditForm(objKey); - //重置之后 - - if (!this[isEdit ? "resetUpdateFormAfter" : "resetAddFormAfter"]()) { - return; - } - }, - resetSearchForm(sourceObj) { - //重置查询表 - this.resetForm("searchForm", sourceObj); - }, - resetEditForm(sourceObj) { - if (this.hasDetail && this.$refs.detail) { - // this.$refs.detail.rowData.splice(0); - this.$refs.detail.reset(); - } - this.resetForm("form", sourceObj); - }, - getKeyValueType(formData, isEditForm) { - try { - let keyLeft = (isEditForm ? "e" : "s") + "_b_"; - formData.forEach(item => { - item.forEach(x => { - if (this.keyValueType.hasOwnProperty(keyLeft + x.field)) { - return true; - } - let data; - if (x.type == "switch") { - this.keyValueType[x.field] = 1; - } else if (x.bind && x.bind.data) { - data = x.bind.data; - } else if (x.data) { - if (x.data instanceof Array) { - data = x.data; - } else if (x.data.data && x.data.data instanceof Array) { - data = x.data.data; - } - } - if ( - data && - data.length > 0 && - !this.keyValueType.hasOwnProperty(x.field) - ) { - this.keyValueType[x.field] = data[0].key; - this.keyValueType[keyLeft + x.field] = x.type; - } - }); - }); - } catch (error) { - console.log(error.message); - } - }, - resetForm(formName, sourceObj) { - // return; - //重置表单数据 - if (this.$refs[formName]) { - this.$refs[formName].reset(); - } - - if (!sourceObj) return; - let form, keyLeft; - if (formName == "searchForm") { - form = this.searchFormFields; - keyLeft = "s" + "_b_"; - } else { - form = this.editFormFields; - keyLeft = "e" + "_b_"; - } - //获取数据源的data类型,否则如果数据源data的key是数字,重置的值是字符串就无法绑定值 - if (!this.keyValueType._dinit) { - this.getKeyValueType(this.editFormOptions, true); - this.getKeyValueType(this.searchFormOptions, false); - this.keyValueType._dinit = true; - } - var _cascaderParentTree; - for (const key in form) { - if (sourceObj.hasOwnProperty(key)) { - let newVal = sourceObj[key]; - let kv_type = this.keyValueType[keyLeft + key]; - - if ( - kv_type == "selectList" || - kv_type == "checkbox" || - kv_type == "cascader" - ) { - // 2020.05.31增加iview组件Cascader - // 2020.11.01增加iview组件Cascader表单重置时查询所有的父节点 - if (kv_type == "cascader") { - var treeDic = this.dicKeys.find(dic => { - return dic.fileds && dic.fileds.indexOf(key) != -1; - }) - if (treeDic && treeDic.orginData && treeDic.orginData.length) { - if (typeof treeDic.orginData[0].id == 'number') { - newVal = ~~newVal; - } else { - newVal = newVal + ''; - } - _cascaderParentTree = this.base.getTreeAllParent(newVal, treeDic.orginData); - if (_cascaderParentTree) { - newVal = _cascaderParentTree.map(x => { return x.id }) - } - } else { - newVal = [newVal]; - } - } - else if ( - newVal != "" && - newVal != undefined && - typeof newVal == "string" - ) { - newVal = newVal.split(","); - } else if (kv_type == "checkbox") { - newVal = []; - } - } else if ( - this.keyValueType.hasOwnProperty(key) && - typeof this.keyValueType[key] == "number" && - newVal * 1 == newVal - ) { - newVal = newVal * 1; - } else { - if (newVal == null || newVal == undefined) { - newVal = ""; - } else { - newVal += ""; - } - } - if (newVal instanceof Array) { - if (form[key]) { - form[key] = []; - } - - // this.$set(form, key, newVal); - form[key] = newVal; - // if (kv_type == "cascader") { - // this.$nextTick(() => { - // //封装后iview原生监听不到model变化,后面再调试看看2020.11.01 - // _cascaderParentTree = _cascaderParentTree || []; - // _cascaderParentTree.forEach(c => { - // c.label = c.value; - // }) - // // this.$refs.form.$refs[key][0].selected = _cascaderParentTree; - // }); - // } - } else { - form[key] = newVal; - } - } else { - form[key] = form[key] instanceof Array ? [] : ""; - } - } - }, - onBtnClick(param) { - this[param.method](param.data); - }, - refresh() { - //刷新 - this.search(); - // this.$refs.table.load(); - }, - saveBefore(formData) { - return true; - }, - saveAfter(formData, result) { - return true; - }, - save() { - //新增或编辑时保存 - // if (!this.$refs.form.validate()) return; - this.$refs.form.validate(result => { - if (result) { - this.saveExecute(); - } - }); - }, - async saveExecute() { - let editFormFields = {}; - //上传文件以逗号隔开 - for (const key in this.editFormFields) { - if ( - this.uploadfiled && - this.uploadfiled.length > 0 && - this.uploadfiled.indexOf(key) != -1 && - this.editFormFields[key] instanceof Array - ) { - let allPath = this.editFormFields[key].map(x => { - return x.path; - }); - editFormFields[key] = allPath.join(","); - } else { - //2021.05.30修复下拉框清除数据后后台不能保存的问题 - if (this.editFormFields[key] === undefined && this.dicKeys.some(x => { return x.fileds && x.fileds.indexOf(key) != -1 })) { - editFormFields[key] = null; - } else { - editFormFields[key] = this.editFormFields[key]; - } - - } - } - //将数组转换成string - //2020.11.01增加级联处理 - for (const key in editFormFields) { - if (editFormFields[key] instanceof Array) { - - var iscascader = this.dicKeys.some(x => { return x.type == "cascader" && x.fileds && x.fileds.indexOf(key) != -1 }); - if (iscascader && editFormFields[key].length) { - editFormFields[key] = editFormFields[key][editFormFields[key].length - 1]; - } else { - editFormFields[key] = editFormFields[key].join(","); - } - - } - } - - let formData = { - mainData: editFormFields, - detailData: null, - delKeys: null - }; - - //获取明细数据(前台数据明细未做校验,待完.后台已经校验) - if (this.hasDetail) { - formData.detailData = this.$refs.detail.rowData; - } - if (this.detailOptions.delKeys.length > 0) { - formData.delKeys = this.detailOptions.delKeys; - } - //保存前拦截 - let _currentIsAdd = this.currentAction == this.const.ADD; - if (_currentIsAdd) { - //2020.12.06增加新建前异步处理方法 - //2021.08.16修复异步语法写错的问题 - if (!this.addBefore(formData) || !await this.addBeforeAsync(formData)) return; - } else { - //2020.12.06增加修改前异步处理方法 - if (!this.updateBefore(formData) || !await this.updateBeforeAsync(formData)) return; - } - let url = this.getUrl(this.currentAction); - this.http.post(url, formData, true).then(x => { - //保存后 - if (_currentIsAdd) { - if (!this.addAfter(x)) return; - //连续添加 - if (this.continueAdd && x.status) { - this.$success(x.message); - //新建 - this.currentAction = this.const.ADD; - this.currentRow = {}; - this.resetAdd(); - this.refresh(); - return; - } - } else { - if (!this.updateAfter(x)) return; - } - if (!x.status) return this.$error(x.message); - this.$success(x.message); - //如果保存成功后需要关闭编辑框,直接返回不处理后面 - if (this.boxOptions.saveClose) { - this.boxModel = false; - //2020.12.27如果是编辑保存后不重置分页页数,刷新页面时还是显示当前页的数据 - this.$refs.table.load(null, _currentIsAdd); - //this.refresh(); - return; - } - let resultRow; - if (typeof x.data == "string" && x.data != "") { - resultRow = JSON.parse(x.data); - } else { - resultRow = x.data; - } - - if (this.currentAction == this.const.ADD) { - // this.currentRow=x.data; - this.editFormFields[this.table.key] = ""; - this.currentAction = this.const.EDIT; - this.currentRow = resultRow.data; - } - this.resetEditForm(resultRow.data); - // console.log(resultRow); - if (this.hasDetail) { - this.detailOptions.delKeys = []; - if (resultRow.list) { - this.$refs.detail.rowData.push(...resultRow.list); - } - } - this.$refs.table.load(null, _currentIsAdd); - // this.refresh(); - }); - }, - del(rows) { - if (rows) { - if (!(rows instanceof Array)) { - rows = [rows]; - } - } else { - rows = this.$refs.table.getSelected(); - } - //删除数据 - - if (!rows || rows.length == 0) return this.$error("请选择要删除的行!"); - let delKeys = rows.map(x => { - return x[this.table.key]; - }); - if (!delKeys || delKeys.length == 0) - return this.$error("没有获取要删除的行数据!"); - //删除前 - if (!this.delBefore(delKeys, rows)) { - return; - } - let tigger = false; - this.$confirm('确认要删除选择的数据吗?', '警告', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - center: true - }).then(() => { - if (tigger) return; - tigger = true; - let url = this.getUrl(this.const.DEL); - this.http.post(url, delKeys, "正在删除数据....").then(x => { - if (!x.status) return this.$error(x.message); - this.$success(x.message); - //删除后 - if (!this.delAfter(x)) { - return; - } - this.refresh(); - }); - }) - - }, - async modelOpenBeforeAsync(row) { - return true; - }, - async initBox() { - //2022.01.08增加新建时隐藏明细表导出功能 - this.detailOptions.buttons.forEach(x => { - if (x.value == 'export') { - x.hidden = this.currentAction == 'Add' - } - }) - //初始化新建、编辑的弹出框 - if (!await this.modelOpenBeforeAsync(this.currentRow)) return false; - this.modelOpenBefore(this.currentRow); - if (!this.boxInit) { - this.boxInit = true; - this.boxModel = true; - // this.detailUrl = this.url; - } - return true; - }, - setEditForm(row) { - // if (this.remoteColumns.length == 0 || !rows || rows.length == 0) return; - let remoteColumns = this.$refs.table.remoteColumns; - remoteColumns.forEach(column => { - this.editFormOptions.forEach(option => { - option.forEach(x => { - if (x.field == column.field) { - x.data.data = Object.assign([], x.data, column.bind.data); - } - }); - }); - }); - this.editFormFields; - //重置编辑表单数据 - this.editFormFields[this.table.key] = row[this.table.key]; - - this.resetEditForm(row); - this.currentAction = this.const.EDIT; - this.boxModel = true; - }, - async linkData(row, column) { - //点击table单元格快捷链接显示编辑数据 - this.currentAction = this.const.EDIT; - this.currentRow = row; - if (!await this.initBox()) return; - this.resetDetailTable(row); - this.setEditForm(row); - this.setContinueAdd(false); - //设置远程查询表单的默认key/value - this.getRemoteFormDefaultKeyValue(); - //点击编辑按钮弹出框后,可以在此处写逻辑,如,从后台获取数据 - this.modelOpenProcess(row); - }, - setContinueAdd(isAdd) { - if (!this.continueAdd) return; - var _button = this.boxButtons.find(x => { return x.value == "save" }); - if (_button) { - _button.name = isAdd ? this.continueAddName : '保 存'; - } - }, - resetAdd() { - if (this.hasDetail) { - this.$refs.detail && - // this.$refs.detail.rowData && - this.$refs.detail.reset(); - } - let obj = {}; - //如果有switch标签,默认都设置为是 - this.editFormOptions.forEach(x => { - x.forEach(item => { - if (item.type == "switch") { - obj[item.field] = 1; - } - }); - }); - this.resetEditForm(obj); - }, - async add() { - //新建 - this.currentAction = this.const.ADD; - this.currentRow = {}; - if (!await this.initBox()) return; - - this.resetAdd(); - this.setContinueAdd(true); - // this.resetEditForm(); - this.boxModel = true; - //点击新建按钮弹出框后,可以在此处写逻辑,如,从后台获取数据 - this.modelOpenProcess(); - // this.modelOpenAfter(); - }, - async edit(rows) { - //编辑 - this.currentAction = this.const.EDIT; - if (rows) { - if (!(rows instanceof Array)) { - rows = [rows]; - } - } - else { - rows = this.$refs.table.getSelected(); - } - if (rows.length == 0) { - return this.$error("请选择要编辑的行!"); - }else if(rows.length > 1){ - return this.$error("有且只能选择一行!"); - } - - //记录当前编辑的行 - this.currentRow = rows[0]; - //初始化弹出框 - if (!await this.initBox()) return; - this.setContinueAdd(false); - //重置表单 - this.resetDetailTable(); - - //设置当前的数据到表单上 - this.setEditForm(rows[0]); - //设置远程查询表单的默认key/value - this.getRemoteFormDefaultKeyValue(); - //点击编辑按钮弹出框后,可以在此处写逻辑,如,从后台获取数据 - this.modelOpenProcess(rows[0]); - // this.modelOpenAfter(rows[0]); - }, - getRemoteFormDefaultKeyValue() { - //设置表单远程数据源的默认key.value - if (this.currentAction != this.const.EDIT || this.remoteKeys.length == 0) - return; - this.editFormOptions.forEach((x, xIndex) => { - x.forEach((item, yIndex) => { - if (item.remote) { - let column = this.columns.find(x => { - return x.bind && x.bind.key == item.dataKey; - }); - if (!column) return; - let key = this.currentRow[item.field]; - let obj = column.bind.data.find(x => { - return x.key == key; - }); - // obj ? obj.value : key如果没有查到数据源,直接使用原数据 - item.data = [{ key: key, value: obj ? obj.value : key }]; - this.editFormOptions[xIndex].splice(yIndex, 1, item); - // this.$set(item, 'data', [{ key: key + '', value: obj.value }]) - // item.data = [{ key: key + '', value: obj.value }]; - } - }); - }); - }, - modelOpenProcess(row) { - this.$nextTick(() => { - this.modelOpenAfter(row); - }); - return; - // if (!this.$refs.form) { - // let timeOut = setTimeout(x => { - // this.modelOpenAfter(row); - // }, 500) - // return; - // } - // this.modelOpenAfter(row); - }, - import() { - //导入(上传excel),弹出导入组件UploadExcel.vue - this.upload.excel = true; - this.$refs.upload_excel && this.$refs.upload_excel.reset(); - }, - download(url, fileName) { - //下载导出的文件 - let xmlResquest = new XMLHttpRequest(); - xmlResquest.open("GET", url, true); - xmlResquest.setRequestHeader("Content-type", "application/json"); - xmlResquest.setRequestHeader( - "Authorization", - this.$store.getters.getToken() - ); - let elink = this.$refs.export; - xmlResquest.responseType = "blob"; - xmlResquest.onload = function (oEvent) { - if (xmlResquest.status != 200) { - this.$error("下载文件出错了.."); - return; - } - let content = xmlResquest.response; - // let elink = this.$refs.export;//document.createElement("a"); - elink.download = fileName; //+".xlsx"; - // elink.style.display = "none"; - let blob = new Blob([content]); - elink.href = URL.createObjectURL(blob); - // document.body.appendChild(elink); - elink.click(); - // document.body.removeChild(elink); - }; - xmlResquest.send(); - }, - getFileName(isDetail) { //2021.01.08增加导出excel时自定义文件名 - if (isDetail) { - return this.detail.cnName + '.xlsx'; - } - return this.table.cnName + '.xlsx'; - }, - export(isDetail) { - //导出 - let url, query, param; - if (isDetail) { - //明细表导出时如果是新建状态,禁止导出 - if (this.currentAction == "Add") { - return; - } - url = `api/${this.detail.table}/${this.const.EXPORT}`; - param = { wheres: [{ name: this.table.key, value: this.editFormFields[this.table.key] }] }; - } else {//主表导出 - url = this.getUrl(this.const.EXPORT); - query = this.getSearchParameters(); - param = { order: this.pagination.order, wheres: query.wheres || [] }; - } - //2020.06.25增加导出前处理 - if (!isDetail && !this.exportBefore(param)) { - return; - } - - if (param.wheres && typeof param.wheres == "object") { - param.wheres = JSON.stringify(param.wheres); - } - let $http = this.http; - let fileName = this.getFileName(isDetail) - //2021.01.08优化导出功能 - $http.post(url, param, "正在导出数据....", { responseType: "blob" }).then((content) => { - const blob = new Blob([content]); - if ("download" in document.createElement("a")) { - // 非IE下载 - const elink = document.createElement("a"); - elink.download = fileName; - elink.style.display = "none"; - elink.href = URL.createObjectURL(blob); - document.body.appendChild(elink); - elink.click(); - URL.revokeObjectURL(elink.href); - document.body.removeChild(elink); - } else { - // IE10+下载 - navigator.msSaveBlob(blob, fileName); - } - }); - //.then(result => { - // if (!result.status) { - // return this.$error(result.message); - // } - // let path = this.getUrl(this.const.DOWNLOAD); - // path = path[0] == "/" ? path.substring(1) : path; - // this.download( - // $http.ipAddress + path + "?path=" + result.data, - // this.table.cnName + ".xlsx" // filePath - // ); - /// window.open($http.ipAddress + path + "?fileName=" + filePath, "_self"); - // }); - }, - getSelectRows() { - //获取选中的行 - return this.$refs.table.getSelected(); - }, - getDetailSelectRows() { - //或获取明细选中的行 - if (!this.$refs.detail) { - return []; - } - return this.$refs.detail.getSelected(); - }, - audit() { - //审核弹出框 - let rows = this.$refs.table.getSelected(); - if (rows.length == 0) return this.$error("请选择要审核的行!"); - let checkStatus = rows.every(x => { - return x.AuditStatus > 0; - }); - if (checkStatus) return this.$error("只能选择审核中的数据!"); - this.auditParam.rows = rows.length; - this.auditParam.model = true; - }, - saveAudit() { - //保存审核 - let rows = this.$refs.table.getSelected(); - if (this.auditParam.status == -1) return this.$error("请选择审核结果!"); - - if (rows.length != this.auditParam.rows) - return this.$error("所选数据已发生变化,请重新选择审数据!"); - - let keys = rows.map(x => { - return x[this.table.key]; - }); - if (!this.auditBefore(keys, rows)) { - return; - } - let url = - this.getUrl(this.const.AUDIT) + - "?auditReason=" + - this.auditParam.reason + - "&auditStatus=" + - this.auditParam.status; - this.http.post(url, keys, "审核中....").then(x => { - if (!this.auditAfter(x, rows)) { - return; - } - if (!x.status) return this.$error(x.message); - this.auditParam.rows = 0; - this.auditParam.status = -1; - this.auditParam.reason = ""; - this.auditParam.model = false; - this.$success(x.message); - this.refresh(); - }); - }, - viewModelCancel() { - //查看表结构 - this.viewModel = false; - }, - initFormOptions(formOptions, keys, formFields, isEdit) { - //初始化查询、编辑对象的下拉框数据源、图片上传链接地址 - //let defaultOption = { key: "", value: "请选择" }; - //有上传的字段 - //2020.05.03新增 - //编辑数据源的类型 - formOptions.forEach(item => { - item.forEach(d => { - if ( - d.type == "img" || - d.type == "excel" || - d.type == "file" || - d.columnType == "img" - ) { - d.url = this.http.ipAddress + "api" + this.table.url + "Upload"; - this.uploadfiled.push(d.field); - } - if (!d.dataKey) return true; - //开启远程搜索 - if (d.remote) { - this.remoteKeys.push(d.dataKey); - d.data = []; //{ dicNo: d.dataKey, data: [] }; - return true; - } - //2020.05.03增加编辑表单对checkbox的支持 - if (d.type == "checkbox" && !(formFields[d.field] instanceof Array)) { - formFields[d.field] = []; - } - if (keys.indexOf(d.dataKey) == -1) { - //2020.05.03增加记录编辑字段的数据源类型 - - keys.push(d.dataKey); - //2020.05.03修复查询表单与编辑表单type类型变成强一致性的问题 - //this.dicKeys.push({ dicNo: d.dataKey, data: [], type: d.type }); - // 2020.11.01增加iview组件Cascader数据源存储 - let _dic = { dicNo: d.dataKey, data: [], fileds: [d.field], orginData: [] }; - if (d.type == "cascader") { - _dic.type = "cascader"; - } - if (isEdit) { - _dic['e_type'] = d.type; - } - this.dicKeys.push(_dic); - } else if (d.type == "cascader") { - //强制开启联级可以选择某个节点 - if (!d.hasOwnProperty("changeOnSelect")) { - d.changeOnSelect = true; - // d.formatter = label => { - // return label.join(' / ') - // }; - } - - this.dicKeys.forEach(x => { - if (x.dicNo == d.dataKey) { - x.type = "cascader"; - x.fileds.push(d.field); - } - }) - } - if (d.type != "cascader") { - //2020.01.30移除内部表单formOptions数据源配置格式data.data,所有参数改为与组件api格式相同 - Object.assign( - d, - this.dicKeys.filter(f => { - return f.dicNo == d.dataKey; - })[0] - ); - } - }); - }); - }, - //初始table与明细表的数据源指向dicKeys对象,再去后台加载数据源 - initColumns(scoure, dicKeys, keys) { - if (!scoure || !(scoure instanceof Array)) return; - scoure.forEach(item => { - if (!item.bind || (item.bind.data && item.bind.data.length > 0)) - return true; - let key = item.bind.key || item.bind.dicNo; - if (this.remoteKeys.indexOf(key) != -1) { - item.bind.remote = true; - return true; - } - if (this.hasKeyField.indexOf(item.field) == -1) { - this.hasKeyField.push(item.field); - } - var dic = dicKeys.filter(x => { - return x.dicNo == key; - }); - if (!dic || dic.length == 0) { - dicKeys.push({ dicNo: key, data: [] }); - dic = [dicKeys[dicKeys.length - 1]]; - keys.push(key); - } - //2020.11.01增加级联处理 - if (dic[0].type == "cascader") { - item.bind = { data: dic[0].orginData, tyep: "select" } - } else { - item.bind = dic[0]; - } - //2020.05.03优化table数据源checkbox与select类型从编辑列中选取 - item.bind.type = item.bind.e_type || "string"; - }); - }, - bindOptions(dic) { - //绑定下拉框的数据源 - //绑定后台的字典数据 - dic.forEach(d => { - this.dicKeys.forEach(x => { - if (x.dicNo != d.dicNo) return true; - //2020.10.26增加级联数据源绑定处理 - if (x.type == "cascader") { - // x.data=d.data; - //生成tree结构 - let _data = JSON.parse(JSON.stringify(d.data)); - // _data.forEach(d => { - // d.label = d.value; - // d.value = d.key; - // }) - let arr = this.base.convertTree(_data, (node, data, isRoot) => { - if (!node.inited) { - node.inited = true; - node.label = node.value; - node.value = node.key; - } - }) - x.data.push(...arr); - x.orginData.push(...d.data); - //2021.10.17修复查询级联不能绑定数据源的问题 - this.searchFormOptions.forEach(searhcOption => { - searhcOption.forEach(_option => { - if (_option.type == 'cascader' && _option.dataKey == x.dicNo) { - _option.data = arr; - _option.orginData = d.data; - } - }) - }) - //2021.10.17修复级联不能二级刷新的问题 - this.editFormOptions.forEach(editOption => { - editOption.forEach(_option => { - if (_option.type == 'cascader' && _option.dataKey == x.dicNo) { - _option.data = arr; - _option.orginData = d.data; - } - }) - }) - } else if (d.data.length > 0 && !d.data[0].hasOwnProperty("key")) { - let source = d.data, - newSource = new Array(source.length); - for (let index = 0; index < source.length; index++) { - newSource[index] = { - //默认从字典数据读出来的key都是string类型,但如果数据从sql中查询的可能为非string,否是async-validator需要重置设置格式 - key: source["key"] + "", //source[index][x.config.valueField] + "", - value: source["value"] //source[index][x.config.textField] - }; - } - - x.data.push(...newSource); - } else { - //2020.06.06,如果是selectList数据源使用的自定义sql并且key是数字,强制转换成字符串 - if ( - x.e_type == "selectList" && - d.data.length > 0 && - typeof d.data[0].key == "number" - ) { - d.data.forEach(c => { - c.key = c.key + ""; - }); - } - x.data.push(...d.data); - } - if ( - this.singleSearch && - this.singleSearch.dataKey && - this.singleSearch.dataKey == x.dicNo - ) { - this.singleSearch.data.splice(0, 1, ...x.data); - } - }); - }); - }, - getUrl(action, ingorPrefix) { - //是否忽略前缀/ 获取操作的url - return (!ingorPrefix ? "/" : "") + "api" + this.table.url + action; - }, - initDicKeys() { - //初始化字典数据 - let keys = []; - this.dicKeys.splice(0); - //初始化编辑数据源,默认为一个空数组,如果要求必填设置type=number/decimal的最小值 - this.initFormOptions(this.editFormOptions, keys, this.editFormFields, true); - //初始化查询数据源,默认为一个空数组 - this.initFormOptions( - this.searchFormOptions, - keys, - this.searchFormFields, - false - ); - //查询日期设置为可选开始与结果日期 - this.searchFormOptions.forEach(item => { - item.forEach(x => { - if (x.type == "date" || x.type == "datetime") x.range = true; - }); - }); - //初始化datatable表数据源,默认为一个空数组,dicKeys为界面所有的数据字典编号 - this.initColumns(this.columns, this.dicKeys, keys); - //2021.05.23默认开启查询页面所有字段排序,如果不需要排序,在onInited遍历columns设置sort=false - //2021.09.25移除强制排序功能 - // this.columns.forEach(x => { - // x.sort = x.render ? false : true; - // }) - if (this.detailOptions && this.detailOptions.columns) { - this.initColumns(this.detailOptions.columns, this.dicKeys, keys); - } - //初始化快速查询字段,默认使用代码生成器配置的第一个查询字段 - if (this.searchFormOptions.length > 0) { - this.singleSearch = { - dataKey: this.searchFormOptions[0][0].dataKey, - dicNo: this.searchFormOptions[0][0].dicNo, - field: this.searchFormOptions[0][0].field, - title: this.searchFormOptions[0][0].title, - type: this.searchFormOptions[0][0].type, - data: [] - }; - // this.singleSearch = this.searchFormOptions[0][0]; - } - if (keys.length == 0) return; - let $internalVue = this; - this.http.post("/api/Sys_Dictionary/GetVueDictionary", keys).then(dic => { - $internalVue.bindOptions(dic); - }); - }, - setFiexdColumn(columns, containerWidth) { - //计算整个table的宽度,根据宽度决定是否启用第一行显示的列为固定列 - //2021.09.21移除强制固定第一列 - // let columnsWidth = 0; - // columns.forEach(x => { - // if (!x.hidden && x.width) { - // columnsWidth += x.width; - // } - // }); - // //启用第一列为固定列 - // if (columnsWidth > containerWidth) { - // let firstColumn = columns.find(x => !x.hidden); - // if (firstColumn) { - // firstColumn.fixed = true; - // } - // } - }, - initBoxHeightWidth() { - //初始化弹出框的高度与宽度 - let clientHeight = document.documentElement.clientHeight; - //弹出框高度至少250px - clientHeight = clientHeight < 250 ? 250 : clientHeight; - let clientWidth = document.documentElement.clientWidth; - if (this.editFormOptions.some(x => { return x.some(item => { return item.type == "editor" }) })) { - this.editor.uploadImgUrl = this.getUrl("upload"); - this.boxOptions.height = clientHeight * 0.8; - this.boxOptions.width = clientWidth * 0.8; - } - else { - if (this.boxOptions.height) { - //如果高度与宽度超过了获取到的可见高宽度,则设为默认的90%高宽 - if (this.boxOptions.height > clientHeight * 0.8) { - this.boxOptions.height = clientHeight * 0.8; - } - } - if (this.boxOptions.width) { - //如果高度与宽度超过了获取到的可见高宽度,则设为默认的90%高宽 - if (this.boxOptions.width > clientWidth * 0.8) { - this.boxOptions.width = clientWidth * 0.8; - } - } - } - //计算整个table的宽度,根据宽度决定是否启用第一行显示的列为固定列 - let maxTableWidth = clientWidth - 270; - this.setFiexdColumn(this.columns, maxTableWidth); - - this.height = this.tableHeight || clientHeight - 206; - this.url = this.getUrl(this.const.PAGE); - //计算弹出框的高与宽度 - //如果有明细表,高度与宽带设置为0.9/0.82 - if (this.detail.columns && this.detail.columns.length > 0) { - this.hasDetail = true; - clientWidth = clientWidth * 0.8; - clientHeight = clientHeight * 0.85; - if (!this.detailOptions.height) { - this.detailOptions.height = - clientHeight - this.editFormOptions.length * 57 - 205; - this.detailOptions.height = - this.detailOptions.height < 240 ? 240 : this.detailOptions.height; - } - - this.detailOptions.columns = this.detail.columns; - this.detailOptions.pagination.sortName = this.detail.sortName; - this.detailOptions.cnName = this.detail.cnName; - this.detailOptions.key = this.detail.key; - this.detailOptions.url = this.getUrl("getDetailPage"); - //计算弹出框整个table的宽度,根据宽度决定是否启用第一行显示的列为固定列 - this.setFiexdColumn(this.detail.columns, clientWidth); - } else { - let maxColumns = 1; //最大列数,根据列计算弹框的宽度 - this.editFormOptions.forEach(x => { - if (x.length > maxColumns) maxColumns = x.length; - }); - let maxHeightRate = 0.7, - maxWidthRate = 0.5; - maxWidthRate = maxColumns / 10 + 0.3; - maxHeightRate = (this.editFormOptions.length || 1) * 0.1 + 0.03; - maxHeightRate = maxHeightRate > 0.9 ? 0.9 : maxHeightRate; - clientWidth = clientWidth * maxWidthRate; - clientHeight = clientHeight * maxHeightRate; - // this.boxOptions.width = clientWidth * maxWidthRate; - // this.boxOptions.height = clientHeight * maxHeightRate; - } - if (!this.boxOptions.height) { - this.boxOptions.height = clientHeight + 10; - } - if (!this.boxOptions.width) { - this.boxOptions.width = clientWidth + 30; - } - }, - rowOnChange(row) { - this.rowChange(row); - }, - rowChange(row) { - //选中行checkbox行事件 - }, - rowOnClick({ row, column, event }) { - this.rowClick({ row, column, event }); - }, - rowClick({ row, column, event }) { - // 点击行事件(2020.11.07) - }, - rowOnDbClick({ row, column, event }) { - this.rowDbClick({ row, column, event }); - }, - rowDbClick({ row, column, event }) { - // 双击击行事件(2021.05.23) - }, - $error(message) { - this.$message.error(message) - // this.$message({ - // type: 'error', - // content: message, - // duration: 5 - // }); - }, - $success(message) { - this.$message.success(message) - }, - setFiexdSearchForm(visiable) { //2020.09.011增加固定查询表单功能,visiable=true默认将查询表单展开 - this.fiexdSearchForm = true; - let refreshBtn = this.buttons.find(x => x.name == "刷 新"); - if (visiable) { - this.searchBoxShow = true; - } - if (refreshBtn) { - refreshBtn.name = "重 置"; - refreshBtn.onClick = function () { - this.resetSearch(); - }; - } - }, - endEditBefore(row, column, index) {//2021.03.19是否开启查询界面表格双击编辑结束方法,返回false不会结束编辑 - return true; - }, - filterPermission(tableName, permission) { //2021.03.19判断是否有某个表的按钮权限 - //:["Search","Add","Delete","Update","Import","Export","Upload","Audit"] - const _result = (this.$store.state.permission || []).find(x => { return x.url == '/' + tableName }); - return _result && _result.permission.some(x => x == permission); - }, - destroyed() { //2021.04.11增加vue页面销毁方法,路由必须设置keepLive:false,设置方法见:前端开发文档-》[禁用页面缓存keepAlive] - - }, - loadTreeTableChildren(tree, treeNode, resolve) { - this.loadTreeChildren.call(this, tree, treeNode, resolve); - }, - loadTreeChildren(tree, treeNode, resolve) {//树形结构加载子节点(2021.05.02),在onInit中设置了rowKey主键字段后才会生效 - return resolve([]); - }, - importDetailAfter(data) { //2022.01.08增加明细表导入后处理 - - }, - importExcelAfter(data) {//2022.01.08增加明细表导入后方法判断 - - if (!data.status) { - return;// this.$message.error(data.message); - } - //明细表导入 - if (this.boxModel) { - if (data.data) { - data.data = JSON.parse(data.data); - } else { - data.data = [] - } - data.data.forEach(x=>{ - x[this.detail.key]=undefined; - x[this.table.key]=undefined; - }) - this.importDetailAfter(data); //增加明细表导入后处理 - this.$refs.detail.rowData.unshift(...data.data); - this.upload.excel=false; - return; - } - this.importAfter(data); - } -}; -//合并扩展方法 -methods = Object.assign(methods, detailMethods, serviceFilter); -export default methods; -- Gitee