# ruoyi
**Repository Path**: lanbgit/ruoyi
## Basic Information
- **Project Name**: ruoyi
- **Description**: Vue2低代码版本-开源版
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2024-09-11
- **Last Updated**: 2024-09-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 若依低代码版
#### 介绍
###### 内置组件已全部开放,作者微信号:LowcodeMan
###### 已使用当前低代码落地一套完整的后台管理系统
###### 现开放集成若依版本,已提供示例页面,有兴趣的小伙伴可免费下载使用。
###### 当前项目版本插件成熟度已满足大部分业务场景开发,功能,BUG将不定期优化并修复更新
#### 安装教程
##### 1. 直接参考若依开源项目部署启动即可
##### 2. 低代码插件已集成,可完全平替项目内所有功能
# 1.低代码介绍
###### Vue2版本基于`Element UI`、Vue3版本基于`Element Plus`
###### Vue2版本体验点此进入:[Vue2低代码设计器](http://120.25.191.141/)
###### Vue3版本体验点此进入:[Vue3低代码设计器](http://120.25.191.141:3000/)
###### Vue2版本App体验点此进入:[Vue2-App低代码设计器](http://120.25.191.141:8088/)
###### Vue3版本带后台开源地址:[Vue3版本](https://gitee.com/lowcode-open/springboot-plus)
# 2.快速开始
## 2.1前后端集成
### **1.安装低代码插件包(直接下载即可)**
###### [📎LowcodeDesigner.umd.min.js](https://www.yuque.com/attachments/yuque/0/2024/js/648549/1724549300598-e041007e-4335-4345-93f3-bcb3bcb5137b.js)
###### [📎LowcodeDesigner.css](https://www.yuque.com/attachments/yuque/0/2024/css/648549/1724549298097-639426bb-df4c-48af-8152-94da6ddbbbee.css)
###### 说明:将插件包引入到Vue2项目内,如放入lib目录,并在main.js中引入

```javascript
import lowcodeForm from '@/../lib/LowcodeDesigner.umd.min.js'
import '@/../lib/LowcodeDesigner.css'
Vue.use(lowcodeForm,{})
```
### **2.表格插件包**
#### 1)安装
```shell
npm install vxe-table@legacy
```
#### 2)引入
```javascript
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
Vue.use(VXETable)
```
### **3.集成低代码设计器和渲染器**
#### 1)设计器页面-(需根据自身项目改造接口部分)
```javascript
关闭
保存
```
#### 2)渲染器页面-(需根据自身项目改造接口部分)
```javascript
```
说明:示例将以上2个页面添加到 src/views/lowcode 目录下,并新增一个路由
```javascript
{
path: '/lowcode/designer',
component: () => import('@/views/lowcode/locode-design'),
name: 'LowcodeDesign',
}
```
## 2.2个性化配置
### 1.请求头
### 2.按钮权限
### 3.远程字段
## 2.3组件拓展(非免费版内容)
### 1.描述文件注册
### 2.组件注册
### 3.配置面板注册
### 4.事件注册
# 3.事件介绍
### 1.表单事件
#### 1)表单数据初始化
> 说明:在表单元素加载或渲染到页面上时,对表单内的数据进行设置或初始化
```javascript
_this.execute("@form.init",{
id:"本页面",//页面ID,默认可以不调整
data:{
"field1":"表单字段1",
"field2":2,
"field3":"20240101",
"field4":true
}
})
```
#### 2)改变表单数据值
> 说明:表单字段需要动态修改数据时可使用
```javascript
_this.execute("@form.value",{
id:"本页面",//页面ID,默认可以不调整
name:"字段",//需要修改的表单字段
value:""//值
})
```
#### 3)获取表单数据
> 说明:需要从表单获取数据或者提交单据时候可使用
```javascript
let form = _this.resolvePromise({id:"本页面",event:"@form"})
```
#### 4)获取表单传递数据
> 说明:从A页面打开B页面会传递一些数据,可通过以下方法拿到传递的数据内容
```javascript
let prop = _this.resolvePromise({id:"本页面",event:"@prop"})
```
#### 5)表单校验
```javascript
_this.submitValid(function(_this,isValid,errorMap){
//isValid为true表示校验通过,false表示校验不通过
})
```
```javascript
let isValid = _this.submitMainValid()
```
```javascript
let fields = ["字段"];
let errorMap = _this.submitFieldValid(fields)
```
#### 6)实时数据源
```javascript
let dataSource = {
url:"",
methodType:"post",
headers:{},
params:{}
}
_this.resolveDataSource(dataSource).then(function(response){
//执行业务逻辑
})
```
```javascript
let dataSource = {
url:"",
methodType:"post",
headers:{},
params:{}
}
_this.resolveDataSourceCallback(dataSource, function(response){
//执行业务逻辑
}, function(error){
//执行逻辑
})
```
#### 7)执行自定义数据源
```javascript
_this.execute("@dataSource.方法名",{
id:"本页面",//页面ID,默认可以不调整
data:{}//可传参
})
```
#### 8)执行自定义事件
> 提示:自定义事件可以有返回值
```javascript
_this.execute("@formEvent.方法名",{
id:"本页面",//页面ID,默认可以不调整
data:{}//可传参
})
```
#### 9)打开弹窗-需要调用接口
```javascript
_this.execute("本页面.openM",{
id:"页面ID",//需要弹出的页面ID
data:{}//可传参给弹出的页面
})
```
#### 10)打开弹窗-直接使用JSON元数据(不常用)
```javascript
_this.execute("本页面.openF",{
id:"ID",//自定义一个页面ID
formContent:{},//弹窗JSON元数据(即:弹窗的设计页面JSON数据)
formValue:{}//弹窗JSON元数据内的表单初始化数据
})
```
#### 11)路由切换跳转
```javascript
_this.execute("本页面.router",{
path:"路由地址",//地址
data:{}//参数
})
```
#### 12)不切换路由跳转
```javascript
_this.execute("本页面.navigator",{
id:"页面ID",//需要打开的页面ID
data:{}//可传参给打开的页面
})
```
### 2.组件事件
#### 1)组件启用禁用
```javascript
_this.execute("字段.enabled",false)
```
#### 2)组件只读非只读
```javascript
_this.execute("字段.readonly",false)
```
#### 3)组件显示隐藏
```javascript
_this.execute("字段.visibled",false)
```
#### 4)组件必填非必填
```javascript
_this.execute("字段.required",false)
```
# 4.组件介绍
### **1.布局组件**
#### 1)高级布局
```javascript
_this.execute("@widget.setTitle",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级布局组件的字段值
data:""
})
```
```javascript
_this.execute("@widget.openFooter",{
id:"本页面",//页面ID,默认可以不调整
field:"字段"//高级布局组件的字段值
})
```
#### 2)弹窗布局
```javascript
_this.execute("本页面.openM",{
id:"页面ID",//需要打开的弹窗页面ID
title:"",//弹窗标题
data:{}//需要传递到弹窗页面的数据
})
```
```javascript
_this.execute("@widget.closeM",{
id:"本页面",//页面ID,默认可以不调整
field:"字段"//弹窗布局组件的字段值
})
```
#### 3)弹窗树布局
```javascript
_this.execute("本页面.openM",{
id:"页面ID",//需要打开的弹窗页面ID
title:"",//弹窗标题
data:{}//需要传递到弹窗页面的数据
})
```
```javascript
_this.execute("@widget.closeM",{
id:"本页面",//页面ID,默认可以不调整
field:"字段"//弹窗树布局组件的字段值
})
```
#### 4)抽屉布局
```javascript
_this.execute("本页面.openM",{
id:"页面ID",//需要打开的抽屉页面ID
title:"",//抽屉标题
data:{}//需要传递到抽屉页面的数据
})
```
```javascript
_this.execute("@widget.closeM",{
id:"本页面",//页面ID,默认可以不调整
field:"字段"//抽屉布局组件的字段值
})
```
### 2.容器组件
#### 1)标签页
```javascript
let activeKey = _this.execute("@widget.fetchActiveTabKey",{
id:"本页面",//页面ID,默认可以不调整
field:"字段"//标签页组件的字段值
})
```
```javascript
_this.execute("@widget.dynamicBadge",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//标签页组件的字段值
data:{
key:"标签项ID",//标签项的ID
number:99//数值
}
})
```
#### 2)卡片组件
```javascript
_this.execute("@widget.setDesc",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//卡片组件的字段值
data:""//描述文字
})
```
#### 3)树组件
```javascript
_this.execute("@widget.loadData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
data:{}//数据源参数
})
```
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
data:[]//值集合
})
```
```javascript
_this.execute("@widget.getCheckedDatas",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
})
```
```javascript
_this.execute("@widget.getCheckedKeys",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
})
```
```javascript
_this.execute("@widget.getAllCheckedDatas",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
})
```
```javascript
_this.execute("@widget.getAllCheckedKeys",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
})
```
```javascript
_this.execute("@widget.setCheckedKeys",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
data:{keys:[],isLeaf:false},//isLeaf:true表示只选中叶子节点
})
```
```javascript
_this.execute("@widget.setChecked",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
data:{key:"",isChecked:true,isChildChecked:true},//isChildChecked:false表示不选中子节点
})
```
#### 4)进度条组件
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//树组件的字段值
data:50//数值
})
```
#### 5)时间线组件
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//时间线组件的字段值
data:[
{"content":"开始","timestamp":"2018-04-19","type":"info","placement":"top"},
{"content":"延期","timestamp":"2018-04-15","type":"warning","icon":"el-icon-warning-outline"},
{"content":"再次延期","timestamp":"2018-04-17","type":"danger","hideTimestamp":true},
{"content":"进行中","timestamp":"2018-04-13","type":"success"},
{"content":"结束","timestamp":"2018-04-11","type":"primary"}
]
})
```
#### 6)Echarts组件
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段"//图表组件的字段值
data:{"key":[//key表示数据项的字段
20,30,40
]}
})
```
#### 7)IFRAM组件
```javascript
_this.execute("@widget.setUrl",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//IFRAM组件的字段值
data:"http://120.25.191.141/"
})
```
8)统计数值组件
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//统计数值组件的字段值
data:{type:"number|date",value:"值|日期",prefix:"",suffix:""}//type=number为数值类型,date表示倒计时
})
```
### 3.表单组件
#### 1)高级表格组件
```javascript
_this.execute("@widget.loadData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{}//请求参数
})
```
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:[]//数据集合
})
```
```javascript
_this.execute("@widget.addPreRow",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{}//[{},{}]
})
```
```javascript
_this.execute("@widget.addRow",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{}//[{},{}]
})
```
```javascript
_this.execute("@widget.removeRow",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:row//表格的行数据,一般在操作列点击事件内自带
})
```
```javascript
let selectRows = _this.execute("@widget.getSelectRows",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:true//是否全部,默认即可,兼容虚拟列
})
```
```javascript
_this.execute("@widget.selectRows",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{row|rows|rowId|rowIds,checked}//可传行/行集合/行ID/行ID集合,是否选中
})
```
```javascript
_this.execute("@widget.toggleCheckbox",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:true//选中状态
})
```
```javascript
_this.execute("@widget.columnReadonly",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:[{rowId:rowId,colId:"列字段",readonly:true}]}//表格行ID,列的字段,是否只读
})
```
```javascript
_this.execute("@widget.columnValue",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:[{rowId:rowId,colId:"列字段",value:""}]//表格行ID,列的字段,值
})
```
```javascript
_this.execute("@widget.columnRequired",{
id:"本页面",//页面ID,默认可以不调整
field:"",//高级表格组件的字段值
data:{colId:'列字段',required:true,message:'必填'}//列的字段,是否必填,必填提示
})
```
```javascript
_this.execute("@widget.columnVisible",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",
data:{colIds:[],visible:true}//列的字段集合,是否显示
})
```
```javascript
/*
参考表格列的options数据
{
"columnType":"",//dict,date,datetime,time,number,switch...
}
*/
_this.execute("@widget.dynamicColumn",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{insertField:"",columns}//列字段(空默认动态加到最后一列),表格列的options数据
})
```
```javascript
_this.execute("@widget.flushFooter",{
id:"本页面",//页面ID,默认可以不调整
field:"字段"//高级表格组件的字段值
})
```
```javascript
_this.execute("@widget.toggleRowExpand",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:row//表格行
})
```
```javascript
_this.execute("@widget.addSecondRow",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{"parentRow":row,data:{}}//一级表格行,数据或集合
})
```
```javascript
_this.execute("@widget.removeSecondRow",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:row//二级表格的行 row:{ parentRow, currentRow, rowIndex }
})
```
```javascript
_this.execute("@widget.secondTableReadonly",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{
"parentRow":parentRow,//一级表格行
"data":[{
rowId:rowId,//二级表格行ID
colId:"列字段",//二级表格列字段
readonly:true//是否只读
}]
}
})
```
```javascript
_this.execute("@widget.secondColumnValue",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{
parentRow:row.parentRow,//一级表格行
data:[{
rowId:row.currentRow.rowId,//二级表格行ID
colId:"列字段",//二级表格列字段
value:""//值
}]
}
})
```
```javascript
_this.execute("@widget.secondColumnRequired",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//高级表格组件的字段值
data:{
parentRow:row.parentRow,//一级表格行
config:{
required:true,//是否必填
colId:'类字段',//二级表格列字段
message:'必填'//必填提示
}
}
})
```
#### 2)卡片表格组件
```javascript
_this.execute("@widget.loadData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//卡片表格组件的字段值
data:{}//请求参数
})
```
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//卡片表格组件的字段值
data:[]//数据集合
})
```
#### 3)方片表格组件
```javascript
_this.execute("@widget.loadData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//方片表格组件的字段值
data:{}//请求参数
})
```
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//方片表格组件的字段值
data:[]//数据集合
})
```
#### 4)下拉组件
```javascript
_this.execute("@widget.loadData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//下拉组件的字段值
data:{}//请求参数
})
```
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//下拉组件的字段值
data:[]//数据集合
})
```
#### 5)下拉树组件
```javascript
_this.execute("@widget.loadData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//下拉树组件的字段值
data:{}//请求参数
})
```
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//下拉树组件的字段值
data:[]//数据集合
})
```
#### 6)步骤条组件
```javascript
_this.execute("@widget.back",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//步骤条组件的字段值
})
```
```javascript
_this.execute("@widget.next",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//步骤条组件的字段值
})
```
```javascript
_this.execute("@widget.setData",{
id:"本页面",//页面ID,默认可以不调整
field:"字段",//步骤条组件的字段值
data:[
{"title":"第一步","description":"描述一","icon":""},
{"title":"第二步","description":"描述二","icon":""},
{"title":"第三步","description":"描述三","icon":""}
]
})
```
# 5.场景功能介绍
待用户实际反馈
### 微信二维码
