简体中文
[vue-iotequ-admin] 是一个前后端分离的综合解决方案,它基于 vue 和 element-ui实现。它使用了最新的前端技术栈,内置了 i18n 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。后台采用spring boot实现,集成spring security ,oauth2.0提供权限管理方案。同时提供基于数据库访问操作的代码生成工具(code-generator),快速提供基本的数据操作的前后端代码。
**该项目不支持低版本浏览器(如 ie),有需求请自行添加 polyfill
**目前版本为 v3.0.0
基于 vue-cli
进行构建,若发现问题,欢迎提issue。
你需要在本地安装 node.js 。本项目技术栈基于 ES2015+、vue、vuex、vue-router 、vue-cli 、axios 和 element-ui,所有的请求数据都使用Mock.js进行模拟,提前了解和学习这些知识会对使用本项目有很大的帮助。
如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 和 pr
- 登录 / 注销
- 账号密码登录
- 短线验证码登录
- 第三方授权登录
- 短信注册
- 个人信息中心
- 权限验证
- 路由权限
- 后台访问控制
- 角色权限
- 部门权限
- 权限配置
- 消息 / 任务
- 日志
- 消息
- 事件
- 任务
- 字典
- 系统数据字典
- 常量字典
- sql选择数据字典
- 视图检索字典
- 动态条件检索
- 多选、层级字典
- 流程控制
- 有限状态机
- 时间线
- 消息与待办事务
- 权限、人员、状态、迁移
- 代码生成
- 基于maven项目的生成工具
- 数据访问dao
- 实体类entity
- Restful controller
- 通用服务模板
- 前端列表
- 前端表单
- 路由
- 多语言文件
- 基于mixin机制的代码扩展
- Excel
- 导出excel
- 导入excel
- 前端本地化导出
- 列表
- 动态表格
- 拖拽表格
- 内联编辑
- 内嵌菜单
- 右键菜单
- 表格表单联动编辑
- 手机端
- 自动适配
- 统一的视图组件
- 适配手机的卡片表格
- 下拉、上滑、左滑
- 抽屉效果
- actionSheet
- 組件
- 图像上传
- 文件上传
- 二维码
- 返回顶部
- 拖拽Dialog
- 列表拖拽
- 可拖动分栏
- 页面框架
- 国际化多语言
- 消息
- 动态侧边栏
- 动态面包屑
- 快捷导航(标签页)
- Svg 图标
- Screenfull全屏
- 页脚
- 多环境发布
- dev sit stage prod
# 克隆项目
git clone -b git@github.com:qinyoyo/iotequ.git
# 进入项目目录
cd vue-iotequ
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install -g mirror-config-china --registry=http://registry.npm.taobao.org
# 启动服务
npm run dev
# 克隆项目
git clone -b git@github.com:qinyoyo/iotequ.git
# 进入项目目录
cd iotequ
# 开发环境
idea / eclipse 导入maven项目
默认浏览器访问 http://localhost:8188
# 构建测试环境
npm run build:stage
# 构建生产环境
npm run build:prod
# 后端
maven package
# 预览发布环境效果
npm run preview
# 预览发布环境效果 + 静态资源分析
npm run preview -- --report
# 代码格式检查
npm run lint
# 代码格式检查并自动修复
npm run lint -- --fix
- controller : controller文件,自定义代码请通过服务扩展实现
- dao 数据访问接口
- pojo:所有的生成的实体类均实现接口 CgEntity,实现CgTableAnnotation标注接口
- service/impl:服务,ICgService的实现类。 命名规则为: XxxController 注入 CgXxxService实例,CgXxxService为Cg自动生成文件 自定义代码文件,请实现服务: @Service public class XxxService extends CgXxxService 如果定义了自定义的XxxService,controller将注入该实例而不注入CgXxxService实例 如果定义了流程控制,请实现服务 public class XxxFlowService extends SysFlowProcessService 或 public class XxxFlowService implements IFlowService
- util目录请自行定义
- resources/mybatis : mapper定义文件
- cg自定义代码原则:
- 不要修改由cg生成的文件
- 通过服务实现特定功能
- 所有的url请求必须通过button的完整定义,以保持前后端一致。具体的功能实现在自定义服务代码中实现
- assets:静态资源
- components通用组件,iotequ cg组件
- directive 通用指令,iotequ cg指令
- filters:过滤器
- icons 图标,可以扩展
- lang 多语言
- layout 页面框架
- router 路由控制
- store vuex状态控制
- styles css文件
- utils 一般通用函数
- views 页面定义,所有cg生成的文件均在该目录下
- 子目录名 为模块名
- 二级子目录名为 代码定义名
- 多语言文件 zh-cg.js,en-cg.js。自己需要的多语言文件定义请参照生成的两个文件格式定义,文件名为 zh-xxx.js 和 en-xxx.js。文件为一个map定义,用 export default 导出
- route-cg.js。如果需要扩展路由定义,请编写文件 route-*.js
- vue文件 cg 生成的页面定义组件
- -mixin.js,-mixin.vue :自定义功能扩展文件,见3)
- common-views:系统使用的页面
-
cg_list定义生成CgListXxx.vue, xxxx.vue组件, cg_form定义生成CgFormXxx.vue和xxxx.vue组件
-
Cg组件名为 CgListX.vue,定义一个 CgListX-mixin.js或CgListX-mixin.vue,Cg组件会自动将该组件通过 mixin 混入到Cg组件。该文件的定义与普通组件定义相同(必须是自定义文件混入到Cg文件,反过来使用则自定义方法无法在模板中使用。Mixin类似继承,父类不可能使用子类的方法)
-
mixin规则:
-
遵从vue通用规则
-
组件混入后,组件的继承关系从上至下为:基类组件(List,Record,Dialog,Form或Table), 生成组件,扩展组件,多个扩展组件将先被混为一个组件后在混入生成组件。因此多个扩展可能存在函数冲突,因此建议只定义一个扩展文件
-
如果重写生成组件的方法需要调用父组件的方法,按照以下规则定义: i. 自定义文件methods中定义一个优先级方法: useMixinMethodsFirst () { return true } ii. 通过 “super_函数名” 调用被覆盖的组件方法
-
如果需要修改组件的data,请在created中定义,如自定义验证规则rules等。确保修改data属性不会影响组件的基本功能
-
预定义函数,以下函数可以在自定义代码中重定义 i. useMixinMethodsFirst () 返回boolean 定义 自定义函数覆盖组件同名函数 ii. disabledAction(btn) 返回 Boolean 判断自定义按钮当前是否禁用 iii. extendActionFilter(action,record) 判断制定操作是否可用,
action:string,record:一个对象。返回true可用,false 不可用 iv. rowRender(row,index) 仅对mobile有效。自定义列表的显示。返回一个jsx定义 v. rowRenderGroupTitle(index) 仅对mobile有效,当时用自定义列表显示时,返回分组的标题 vi. rowClassName({row,rowIndex}) 仅对mobile有效,自定义行class vii. newRecordForEditInline() 对于支持行内编辑的表格,可以通过在最后一行的最后一个字段回车新建一行,该重载该函数可以自定义缺省参数。结合后台 beforSave重载,可以快速输入表格数据。 viii. editInlineValidate(row, originalRow, editInlineFields)行内编辑校验函数
-
各个组件的模板属性,在cg里面添加定义(详见cg定义)
-
表单定义附加属性
-
列表定义附加属性
- cgListField为cgList子表,关联字段为 listName对应name。
- 在cgListField 中的所有字段必须为cgField中定义的字段,该字段列表通过table_id分类。但cgListField没有tableId字段,我们需要将cgList的tableId字段传递到cgListField
- 主从表定义文件为cgList目录下对应的list.vue,因此扩展该组件,定义文件list-mixin.js,定义一个属性 tableId,并修改 rowClick方法,点击cgList行时设置tableId。该方法覆盖原有方法,需要配置优先级方法
- 扩展cgListField,定义文件CgListCgListField-mixin.js,扩展一个props,命名为tableId,该值需要从 list表传递过来,需要设置主从表sonsProperties配置,配置一句 :tableId=”tableId”即可
- CgListCgListField-mixin.js配置watch,tableId改变时,从cgField获得字段列表
- CgListCgListField-mixin.js修改函数doAction,当为add或new时,执行一个transfer操作,打开对话框,获得选择,修改列表
- 用户:用户只能编辑自己的cg定义
- 项目:一个用户下可以创建多个项目,项目对应spring boot的一个maven项目(pom)
- 代码定义:项目的子表,用以定义java后端的代码
- 字段:定义数据库字段定义或计算字段定义,生成实体类
- 按钮:也叫action,定义前后端的扩展操作
- 列表视图:定义前端列表视图,可以定义多个
- 表单:定义前端表单,可以定义多个
-
第一种方式:按照Cg定义层次先后定义,禁止使用admin账户定义,即: 先创建用户 -> 分配cg权限 ->
创建项目 ->
创建代码定义->
字段定义 ->
按钮定义->
列表定义 ->
表单定义
-
第二种方式:本地快捷方式,从数据库表导入定义后再修改,即:
先创建用户 -> 分配cg权限 ->
创建项目->
自动导入数据库表(表名必须以项目简写和下划线开始,表包含主键)->
修改字段->
按钮定义->
修改列表定义->
修改表单定义
与pom对项目的定义相同,增加一个代码定义字段,用于标记数据库表的前缀 其余的按照设计填写即可 所有字段取值请按照统一规则填写,受正则表达式约束 项目定义一般很少修改,配置好后生成pom文件可以根据需要修改 代码生成时不生成项目定义的pom文件
-
项目,组织机构:通过定义的项目列表选择
-
cg代码:小写单词,下划线连接,可以使用数字(不推荐)
-
标题:代码的名称
-
数据库表:为空或 项目代码_code
-
模板:vue-element
-
Entity类名: 推荐使用 项目简写+code的驼峰表达式的首位大写格式
-
子包,一般可设置为空。如果项目比较复杂,可以定义子包
-
Licence,使用天数:不需要就设置为空
-
Import列表:java代码使用到的应用,逗号分隔
-
功能列表:需要生成哪些系统功能
-
实体类的代码定义:import列表,基类以及接口,自定义代码。不再推荐使用
-
-
主键:cg定义(包括非数据库cg定义)字段均需定义一个且仅有一个主键
-
标题
-
字段名: . 数据库字段名,小写加下划线组成 . 为空,表示非数据库字段,仅仅是一个实体类字段,用于传递数据 . 字段名 加 冒号 加 数据库表达式 :数据库计算字段。不建议使用,会影响不同数据库的适配
-
Entity名:字段名的驼峰格式
-
控件类型
mltext类型为多语言类型,数据以 | 分隔,前一个为中文,后一个为英语。如 部门|Department在中文环境显示为部门,英文环境显示为Department。编辑时根据语言自动合并。
-
是否可以多选(如果有此属性的话,select,file模式下需要设置)
-
排序
-
默认值 . 常量,字符串或数字等 . js:js代码 用一句js代码赋值,多为函数调用 . f:java后台代码,需要从后台设置默认值。为减少交互,尽量减少使用
-
显示格式
. 为空,使用默认格式,推荐 . js:js代码,用js函数设置显示内容。仅对列表有效。使用{field}来表示当先记录.如:
js:userFormatter(${field},’%d’)
-
校验表达式 . 正则表达式 . js:js代码 当js代码返回true时,通过验证,返回false 或非空字符串时不通过,提示默认提示语或返回的字符串
-
校验提示语
-
数据库属性:字段类型,字段长度,可空,主键或索引,小数位长,小数精度,主从表定义等(主从表请先定义主表后再定义从表)
-
字典定义
- 字典表或sql语句
- 为空,通过后面的code,text对配置固定选择值
- 为表名,全表选择作为字典
- 系统数据字典名(code和text为空时)
- Sql语句,必须以小写的select开头,如果需要部门权限限制,必须使用该模式,而且选择的字段中必须包含org_code字段。如 select org_code,name from sys_org
- f:java函数,后端通过一个函数设置字典
- js:js代码函数,前端函数设置字典
- dict:字段entity名,引用一个字段对应的字典,当两个字段的字典完全一致时,使用字典应用提高效率
- 字典表或sql语句
-
字典code
- 空,使用函数,应用或系统数据字典
- 逗号分隔序列,定义固定的字典值
- 数据库字段名
- 字典text:字典显示值
- 空,使用函数,应用或系统数据字典,或使用与code相同的序列
- 逗号分隔序列,定义固定的字典显示值
- 数据库字段名
- 动态条件:使用sql查询时,可以配置动态查询条件。该条件为标准的sql语句的where(不含)子句
- ${entity名} :引用本记录字段值
- ${ system.user.xxx} :引用登录用户的某个属性
- ${ System.orgListWithSuborg} :允许的部门数据列表
- ${ System.clientIp}:客户端ip
- 树形结构字典
- 是否在显示完整的名称,可能需要较宽的显示空间
- 父亲字段名:数据库字段名而非entity名
- 树键值字段:缺省使用主键,数据库字段名而非entity名
-
join 表连接,dict_list
-
join:标准的sql语法的join子句,将关联表字段加入到本表。一般对于数据量较大的主表字段引用(字典的效率较低)采用join方式。Join数据选择与字典的选择类似,但是是采用的弹出列表视图的方式。
-
join默认为单选,当设置为多选时,可以批量选择快速插入数据(关联字段为join列表选择,其余字段值相同。用户必须有 updateSelective 权限)。例如,向用户分组批量插入用户
-
join,dict_list必须要设置数据库字段名才有效。如果没有关联数据表,请设置一个虚拟的数据库字段名
-
dict_list: 支持多选的类似join用法,仅能插入单个字段。一般对于数据量较大字典应用且需要支持多选时,使用
-
列表视图名:join选择表连接必须指定一个已定义的列表视图,该列表视图
-
关联字段:与本字段相等的关联视图的字段
-
插入字段列表:join到本记录的关联视图的entity字段列表(dict_list只能插入一个字段).定义多个以逗号分隔。每一个引入字段定义为: [[新的标题=]新的数据库名称=]引入的字段实体类名称
-
关联筛选条件:
定义关联视图查询的查询条件,为 关联视图Entity字段名 = 本记录Entity字段名的逗号分隔序列,如两个名称相同,可以省略 等号及本记录字段名,如 orgCode,name=username
-
-
-
- 系统功能在cg代码定义里面选择。当需要自定义功能时,可通过增加按钮来扩展。
- 系统功能和扩展的后台功能受角色权限控制
- 操作代码:唯一的标识功能的驼峰表达式,同一个代码定义不能重复,也不可与系统预定义的功能代码重复
- 标题:提示语
- 图标:显示的图标
- 行为特性:
- 仅前端函数:不生成后台java代码。不受权限控制约束
- 页面跳转:路由跳转,也不生成后台代码
- 自定义函数调用后端:生成后端代码,受权限控制。调用后端功能是由前端代码定义执行的,因此比较灵活
- 仅后端操作:生成后台代码,由cg自动执行调用。上传一个id参数
- 行属性,仅对列表按钮操作有效,单行、多行或行无关
- 执行函数或参数
- 对于行为特性为仅前端和自定义调用后端时,这儿为一个函数调用。如果为组件的方法,请加上this.前缀,如this.connect(0)。如果该操作与行相关,调用时会自动将row或 [rows] 作为最后一个参数传递,实际调用为 this.connect(0,{row:选择的行记录})
- 参数,object写法。如对于页面跳转,必须输入url属性,以及其他的附加属性,如 :{url:"/reader/devPeople/sample",openMode:"edit"}。如果有后台操作,可以设置超时, timeout:超时时长。设为0表示无限等待,会弹出进度条。后台操作需要使用Util.setProgress函数设置当前的进度。完成时,需要调用Util.setProgress(100)
- 显示属性:决定改按钮的使用环境(手机端、pc端,列表工具,行显示(暂不支持)或表单显示)
- 操作前提示:对于危险操作可以在操作前提示用户选择是否执行
- 操作后刷新列表:仅对列表后端操作有效
-
-
一个代码定义可以有多个列表视图。譬如定义一个普通的数据列表视图,定义一个join选择视图等。也可以没有列表视图
-
列表视图属性
-
名称:驼峰格式,用于指定组件名称,类名等。一个项目下唯一
-
路由最后一级:默认使用list,join等,在vue路由里指定子路由的名称
-
图标、标题、tag标题:图标和标题
-
拖拽排序字段:该字段必须为一个整数值。通过列表的拖拽自动排序
-
行内编辑:允许直接在列表中修改记录
-
行内详情:保留,未使用
-
主从表:
-
子表:可选的列表,多选.可以输入一个组件(c|组件名|组件文件|标题)。如:
c|CgFormPermissionTree|/common-views/extend-views/CgFormPermissionTree|sysPermission.title.record
-
子表外键字段列表:与子表顺序对应,一个子表输入一项 : 子表关联字段Entity名|主表关联字段Entity名,引用主表主键时可以省略主表主键。如 orgCode,tableId|id
-
主从表排列方式
-
主表宽度:百分比,上下排列时为高度比例
-
子组件属性:指定子组件的模板属性而不是采用cg的默认设置。与子表排列顺序相同,逗号分隔。如 : ,:tableId="tableId" 会在第二个子表组件模板加上属性:tableId="tableId"
-
-
树形结构列表
- 树显示entity字段:以该字段作为树结构显示标识
- 树的父级entity:定义上级id的字段,必须与主键对应
-
合并字段:指定合并分组的字段,可多选
-
表格属性:
- 表高度:0表示自动适配,建议使用0
- 表最大高度:0表示自动适配
- 显示在标题里的字段:多用于主从表标识当前的主表
- 分页:pc模式使用分页插件,手机模式使用 loadmore模式 工具条模式:1:工具条 2:下拉菜单,其余值保留,均当成1处理
- 多选:
- 其余属性保留,请使用默认值
-
页面定义
-
顶部轮播图像列表,保留
-
功能清单:选择本列表使用的功能
-
本地导出:本地导出仅导出列表数据,前端操作,数据不可重新导入
-
默认排序:数据库查询的默认排序order by 子句
-
-
视图属性:一个列表会生成两个组件,视图组件可以直接在路由中显示,列表组件必须在其他视图模板中使用。试图组件会使用列表组件以及可能的子表组件。视图属性定义了视图组件渲染列表组件时的属性
-
列表属性:列表视图的自定义属性 例如 定义 一个 devPeople的列表,路由为 list,会生成 列表组件 CgListDevPeople和视图组件list List的模板大致为 :
<template> <el-card shadow="hover"> <div slot="header"> <cg-header …/> </div> <CgListDevPeople 视图属性 … /> </el-card> </div> </template>
而CgListDevPeople大致为
自定义字段显示 或 cg默认显示
-
-
-
-
-
列表视图的字段为代码定义的字段(包括join加入的字段)的子集
-
也可以定义或增加字段用于特定的数据传输(与后台数据无关)。自定义的字段不支持字典选择
-
查询模式:
- 自动,系统自动设置。一般都选用改模式
- 筛选:通过查询的列表数据集合进行筛选
- 范围:目前暂且只支持数字和时间的范围选择(时间自动也是范围选择),要实现时间的匹配选择(=),请使用模糊查询,然后选定字段名
-
缺省查询条件:该字段查询匹配的默认值,为js常量或计算值如:
[time.startOf(time.dateAdd(new Date(),-1,'day'),'day'), time.endOf(time.dateAdd(new Date(),-1,'day'))]
定义了一个时间范围
-
修改控件类型为 :允许修改字段的控件类型,非字典类型不能修改为字典类
-
隐藏字段:字段只做传值使用,不显示。存在字典且允许双击编辑的字段,必须设置为隐藏字段。
-
对齐方式
-
行内编辑:该字段可编辑,如果列表打开了行内编辑的话
-
默认宽度:0位自动设置
-
列属性:见列表视图页面定义例子
-
自定义字段显示: 用自定义的字段显示替代默认的显示如:
<i :class="scope.row.isRunning?'fa fa-play':'fa fa-pause'" />
- 其余扩展属性保留,未使用
-
-
-
一个代码定义可以有多个表单视图,譬如流程类处理,每个流程可能需要定义不同的表单
-
表单属性
- 名称:驼峰格式,用于指定组件名称,类名等。一个项目下唯一
- 路由最后一级:默认使用record等,在vue路由里指定子路由的名称
- 图标、form标题、tag标题、字段标题位置(仅对pc生效):图标和标题
- 是否流程定义。cg会自动添加流程处理相关字段的处理。
- 是否对话框模式
- 是否支持连续新建
- 顶部轮播图像(保留 8000
- 可选的功能:如果存在的话,可以选择
-
视图属性:与列表类似一个表单会生成两个组件,视图组件可以直接在路由中显示,表单组件必须在其他视图模板中使用。视图组件会使用表单组件。视图属性定义了视图组件渲染表单组件时的属性
-
-
表单属性:表单视图的自定义属性 例如 定义 一个 devPeople的表单,路由为 record,会生成 表单组件 CgFormDevPeople和视图组件 record
``` record的模板大致为 : <template> <div class="cg-form"> <cg-header /> <CgFormDevPeople 视图属性/> </div> </template> 而CgFormDevPeople大致为 <template> <div class="cg-form"> <el-form 表单属性 > <el-form-item form-item属性> <el-xxx 输入控件属性> Slot模板属性 </el-xxx> </el-form-item> </el-form> </div> </template> ```
-
- 分组标签:表单字段是严格排序的。如果需要对表单进行tabs分类处理,在每一个tab的第一个字段中协商分组标签文字即可。如果分组,那么第一个字段必须设置分组标签 - 更改控件类型:与列表视图字段类似 - 图标 - 宽度: 最大宽度为24。在pc模式下,会按照24的总宽度进行匹配,自动合并行 - 隐藏:不显示,不占宽度,仅传递数据 - 显示title提示 - 只读:如果为新建并且字段必须赋值(必填为true),该只读属性自动失效 - 必填 - 输入控件属性:见上例 - Form_item属性 - Slot模板属性:仅对显示类型为text有效 - 超链接:标题为连接的锚点
rules.js定义了表单字段的验证条件
可以自定义 rules-mixin.js 定义自己的验证条件。rules-mixin的定义优先
自定义验证条件模板 1 :
export default {
entityName : [
{
.......
},
......
],
.....
}
如果验证函数需要应用对象属性,请使用自定义验证模板2:
export default function getRules(vueObject, getRecordfunc) {
return {
entityName : [
{
.......
},
......
],
.....
}
}
vueObject 为表单cgForm,列表cgList对象,getRecordfunc为一个函数,返回整条记录
列表行内编辑引用相同的验证规则
前面定义了有很多自定义属性,目前在于有效的对模板进行自定义配置。 譬如,一般的form-item的标题是固定设置的 :label = “$t(‘label’)” 如何做到动态变化form-item的标题呢?你可以 在form-item属性里这样 设置 :label = “labelFunc($t(‘label’))” 而通过一个labelFunc函数来动态设置。 可以定义的属性取决于具体的组件,也并非所有属性都可定义(cg默认不允许修改的属性),一般编程就够了
在表单字段里增加一个字段,字段名在表字段没有定义时,将显示类型调整为 html, 在slot-属性里写入具体的自定义表单项的html定义即可自定义表单项,如按钮,等等
- 在列表表格内对数据进行编辑。
- 仅对pc有效
- 列表视图需要打开行内编辑
- 选择需要编辑的字段打开行内编辑。行内编辑字段为空时将设置数据库字段为null(不支持‘’空串)等
- 行内编辑提供一种快速的编辑模式,使用与form表单相同的校验规则
- 新增加系统功能 editInline_add。打开该开关,可以在列表中快速插入行数据并进行修改,保存。修改方式为行内编辑,并遵从行内编辑规则。对于新建的行其余的字段赋值,请通过重写函数newRecordForEditInline,和editInlineValidate函数来修改字段。
- 行编辑行操作通过右键处理,多行或插入操作通过主菜单处理
- 行内编辑支持回车键向后快速切换焦点。到达最后一个字段回车,如果支持插入操作将自动插入一行记录
-
项目定义代码在项目维护中生成
-
代码定义生成代码在代码定义里生成
-
通过代码下载生成的代码
-
生成的代码包含了sql脚本。第一次你可用该脚本来初始化数据库
-
代码按照前后端目录分开,直接拷贝即可。
-
前端功能扩展
-
扩展文件在 src/extend-src下
-
initial-xxx.js 开始初始化的执行函数,可以定义多个,依次执行
-
initialized-xxx.js 初始化完成后执行的函数
-
login-xxx.js 登录后执行的函数
-
logout-xxx.js 退出登录执行的函数
-
menu-actions-xxx.js 为主菜单定义可以调用的函数
-
定义方法参见各个demo.js文件
-
-
定义菜单项
-
功能地址必填,指定路由路径。定义路由跳转地址和设定菜单执行权限,如果用户不具备该路由权限,该菜单项不会显示
-
操作函数:为一个menu-actions-xxx.js文件定义的函数名称。为空时,进行路由切换。如果为request,则通过get访问后端地址,后端地址为路由路径指定
-
附加参数为一个json串,用于给操作函数传递参数,或为空
-
显示或隐藏菜单:调用 src/utils/menu.js中定义的hideMenu或showMenu函数,参数为显示或隐藏的完整路由路径(完整匹配),及 menu定义的功能地址。如一菜单匹配,其所有子菜单也会被显示或隐藏。该功能仅仅限制菜单的显示,而无关后端权限。
-
-
按钮的显示扩展控制
-
子表列表为空,隐藏所有下拉菜单
-
流程控制扩展功能通过每列的 字段 flowAvailableActions 下发给前端,后端修改流程控制服务的函数 getAllOperations 实现具体的功能扩展
-
通过权限控制隐藏不需要的按钮
- 按钮与后台相关,用户必须拥有后台相关权限
- 组件通过mixin自定义函数 extendActionFilter(action, record)来进行按钮筛选,action为功能按钮名,record为当前行数据(没有行数据,该参数为空)。返回false将禁用该功能
-
form表单的自定义按钮,可以通过mixin扩展定义函数 disabledAction(btn)来使其处于非激活状态,参数为完整的按钮定义object
-
-
对话框函数
-
调用 window.$vue.$dialog(对话框组件类, 传递的参数map)
- 参考 views/common-views/extend-views/CgRegTest.vue
-
先定义一个组件,模板格式为:
......<script> export default { name: 'CgDialogDemo', directives: { elDragDialog }, props: { dialogClass: { type: String, default: null }, ...... }, data() { return { visible: true, ...... } }, methods: { closeDialog(confirm) { this.visible = false this.$emit('close', confirm ? this.selected : null) ...... }, ...... } } </script> -
动态打开一个页面**
- 调用 @/utils/cg.js的函数 jump2Url,参数依次为 1)完整的路由地址(必须有路由的定义),2)附加参数,3)$router(组件 this.$router,可省略)
- 如果路由配置为对话框(meta.dialog=true),调用$dialog打开对话框,否则通过 push 打开路由
- 路由配置必须设置 props = true
- 如果打开一个list列表(路由名字以List结尾),将参数传递给 List 的props定义 fixedQueryRecord,用来设置list列表打开的条件。默认列表打开将会立即执行refresh操作,进行列表的数据查询和字典设置。设置 fixedQueryRecord.ignoreRefreshImmediate=true可以禁止立即刷新数据
- 如果打开其他的页面,参数将会传递给组件的属性 routeParams。cg生成的form表单,routeParams有效的参数包括
- onChange :function({ record, isNew, refresh }), record为更新后的记录,新建时isNew=true,需要强制刷新(设置refresh=true,如舒心列表结构改变等)
- fixedFields:固定字段及其值,map object,多用于新建记录设置参数
- openMode:打开模式,'new','edit','view'
- record : 记录
- id: 主键值,此时不传record,通过id查询记录
- cg生成的表单通过函数 this.openParams()引用(由于表单也可通过 query传递参数,故用该函数来判断引用)
- 自定义参数引用请在mixin扩展中定义
-
-
全局消息传递
- 发送消息 this.$eventBus.$emit(messageName,messageParams)
- 注册处理消息 this.$eventBus.$on(messageName,(messageParams)=>{ 处理函数 })
-
关闭表单检查是否保存
- 默认对话框表单关闭时将检查是否保存数据,提示用户选择是否放弃修改(非对话框不检查)
- CgFormxxx 表单设置变量 ignoreRecordChanged = true 将不检查数据是否变化
Copyright (c) 2020-present Qinyoyo