迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:ivzone开源软件地址:https://gitee.com/iteaj/ivzone开源软件介绍:关于ivzone(交流群:616124620)
仓库目录说明
项目展示低代码设计器
增删改查页面代码生成器简洁的写法<template> <IvzBasicView> // 基础视图页面 <IvzViewSearch> // 基础搜索组件 <IvzInput field="name" label="茶叶名称"/> <template #func> <IvzFuncBtn func='view' url='/product/list'>查询</IvzFuncBtn> <IvzFuncBtn func="add" url='/product/add'>新增</IvzFuncBtn> </template> </IvzBasicSearch> // 基础表组件 <IvzViewTable :bordered="true" :columns="columns" :dataSource="dataSource" rowKey="id"> <template #c_action="{record}"> <IvzFuncTag func='edit' url='/product/edit'>修改</IvzFuncTag> <IvzFuncTag func="del" url='/product/del'>删除</IvzFuncTag> </template> </IvzBasicTable> <IvzViewModal>// 基础模态框编辑组件 <IvzInput field="name" label="茶叶名称"/> <template #title="{model}"> {{model.id ? '编辑产品' : '新增产品'}} </template> <template #footer> <IvzFuncBtn func='cancel'>取消</IvzFuncBtn> <IvzFuncBtn func='submit' url='/product/add'>提交</IvzFuncBtn> <IvzFuncBtn func='reset'>重置</IvzFuncBtn> </template> </IvzBasicModal> </IvzBasicView></template><script>export default { name: "Demo", setup() { let columns = [ {field: 'name', title: '产品名称'}, {field: 'type', title: '产品类型'}, {field: 'action', type:'action', title: '操作'}, ] let dataSource = [ {id: 1, name: '清香秋茶', type: '清香型'} ] return {columns, dataSource} }}</script> 核心思想约定大于配置
灵活(只做增强不做限制)
核心功能
组件使用教程功能组件
IvzFuncBtn功能按钮:用在搜索组件和编辑组件 <IvzBasicView> <IvzViewSearch> <template #func={model}> <IvzFuncBtn func='add'>新增</IvzFuncBtn> // 点击默认动作:将打开一个编辑框(IvzViewModal or IvzViewDrawer) <IvzFuncBtn func='query' url="/project/query">搜索</IvzFuncBtn> // 点击默认动作:重新刷新列表 <IvzFuncBtn func='reset'>重置</IvzFuncBtn> // 点击默认动作:重置搜索表单, 并且重新刷新列表(和表格组件联动) </template> </IvzViewSearch> <IvzViewModal> <template #footer={model}> <IvzFuncBtn func='cancel'>取消</IvzFuncBtn> // 点击默认动作:关闭当前编辑框, 关闭提交动画关闭提交按钮动作 // 点击默认动作:校验表单是否通过, 然后提交表单, 开启表单的提交动画, 开启提交按钮的提交动画(防止多次提交) <IvzFuncBtn func='submit' :url="model.id ? '/project/edit':'/project/add'">提交</IvzFuncBtn> <IvzFuncBtn func='reset'>重置</IvzFuncBtn> // 点击默认动作:重置编辑表单 </tempalte> </IvzViewSearch></IvzBasicView> IvzFuncTag功能tag:用于表格操作 <IvzBasicView rowKey="id"> <IvzViewTable> <template #c_action={record}> // 点击默认动作:打开编辑框, 并获取和渲染url对应的数据 <IvzFuncBtn func='edit' :data="record" url="/project/edit">编辑</IvzFuncBtn> // 点击默认动作:弹出删除确认框, 确定之后调用url对应的接口删除数据, 提交的参数是数组格式:[record[rowKey]] <IvzFuncBtn func='del' :data="record" url="/project/del">删除</IvzFuncBtn> </template> </IvzViewSearch></IvzBasicView> 误操作确认有时候为了防止某些功能的误操作,将会在点击功能的时候弹框确认, 这时候可以使用:confirm属性 <IvzFuncBtn func='demo' :data="record" url="/project/demo" confirm>容易误操作</IvzFuncBtn> 与编辑框联动主要用于点击功能按钮时弹出对应的编辑框
<IvzBasicView rowKey="id"> <IvzViewTable> <template #c_action={record}> // 默认动作:打开id="modPwd"的编辑框, 并且设置编辑框: model[rowKey]=record[rowKey] <IvzFuncBtn func='edit:modPwd' :data="record">修改密码</IvzFuncBtn> </template> </IvzViewSearch> // 修改密码编辑框 <IvzBasicModal id="modPwd" :rules="[自定义校验规则]"> <IvzPassword label="密码" field="password" /> <template #footer={model}> <IvzFuncBtn func='cancel'>取消</IvzFuncBtn> // 点击默认动作:关闭当前编辑框, 关闭提交动画关闭提交按钮动作 // 默认动作:校验表单, 然后提交表单, 开启表单的提交动画, 开启提交按钮的提交动画(防止多次提交) <IvzFuncBtn func='submit' :url="model.id ? '/project/edit':'/project/add'">提交</IvzFuncBtn> <IvzFuncBtn func='reset'>重置</IvzFuncBtn> // 点击默认动作:重置编辑表单 </tempalte> </IvzBasicSearch></IvzBasicView>
<IvzBasicView rowKey="id"> <IvzViewTable> <template #c_action={record}> // 打开新增的编辑框, 并且设置编辑框父id: model[pid]=record[rowKey] <IvzFuncBtn func='add:child' :data="record">新增子菜单</IvzFuncBtn> </template> </IvzViewSearch></IvzBasicView> 功能权限功能权限主要是用来控制页面是否需要显示对应的功能 v-auth指令// 后台使用shiro做权限校验 // 基础用法// 存在权限字符串就显示<AButton v-auth="'core:project:add'">新增</ABtton>// 高级用法// and参数, 必须满足数组里面的两个权限<AButton v-auth:and="['core:project:view', 'core:project:info']">详情</ABtton>// or参数, 只需满足数组里面的两个权限的任何一个<AButton v-auth:or="['core:project:view', 'core:project:info']">详情</ABtton>// and的简写<AButton v-auth="['core:project:view', 'core:project:info']">详情</ABtton> 使用url做权限判断url的控制方式是通过后台是否有返回功能组件[IvzFuncBtn or IvzFuncTag]对应的url // 使用auth属性控制权限校验的开关// 比如回台返回的功能菜单包括 新增(/project/add)、编辑(/project/edit)、搜索(/project/query)<IvzBasicView auth> <IvzViewSearch> <template #func> <IvzFuncBtn func='add' url='/project/add'>新增</IvzFuncBtn> // 显示 <IvzFuncBtn func='import' url='/project/import'>导入</IvzFuncBtn> // 不显示 </template> </IvzViewSearch> <IvzViewTable> <template #c_action={record}> <IvzFuncTag func='edit' url='/project/edit' :data="record">修改</IvzFuncTag > // 显示 <IvzFuncTag func='del' url='/project/del' :data="record">删除</IvzFuncTag > // 不显示 </template> </IvzViewSearch></IvzBasicView> 编辑详情url// 此处的url是获取编辑详情数据的url,但是并没有指定参数,也无需指定参数<IvzFuncTag func='edit' url='/project/edit' :data="record">修改</IvzFuncTag >// 默认获取编辑地址url的方法如下:Context.jsthis.getEditUrl = function (model, editContext) { let rowKey = this.getRowKey(); let editFunc = this.getTableFunc(FuncNameMeta.EDIT); if(editFunc && model) { return `${editFunc.getUrl()}?${rowKey}=${model[rowKey]}`; } else { console.warn('未指定编辑功能获取详情数据地址') return null; }}// 如果以上方法不能满足你获取url,可以在mount钩子里面覆盖掉此方法,重写 视图组件视图组件是用来组织视图子组件的容器且必须作为.vue页面的顶级组件。再此容器内支持对所有的可联动的视图子组件做联动操作:比如点击搜索组件的查询按钮表格组件将发起查询接口获 IvzBasicView<template> <IvzBasicView> ... </IvzBasicView></template><script>...</script> 使用url作为权限控制 <IvzBasicView auth>...</IvzBasicView> 指定功能的唯一键 <IvzBasicView rowKey="id">...</IvzBasicView>// 此属性将用来做表格、编辑与新增、新增子记录的判断 视图子组件
IvzViewSearch
IvzViewModalIvzViewDrawerIvzViewTable
IvzBasicModalIvzBasicDrawerantd2组件扩展增强ATable组件antd的表格组件说实话如果没有去认证研究和实践真的很难看得懂,而且很多功能都要自己实现,比如单击和双击、表格和多选等等, 没有一定的使用经验确实会感觉难用,所以提供了IvzBaiscTable表格增强组件。IvzBasicTable组件支持ATable组件的大部分属性,下面主要看一下不支持的属性和增强的功能 1.不支持的属性
const columns = [ // 支持rowSelection里面的多数属性 // type不支持 默认:checkbox,不支持radio {type: 'selection', title: '多选'}, {field: 'name', title: '菜单名称', align: 'left'}]// onChange、onSelect、onSelectAll、onSelectInvert方法将直接支持在IvzBasicTable组件上使用事件<IvzBasicTable ref="tableRef" @selectChange="xx" @select="xx" @selectAll="xx" @selectInvert="xx"></IvzBasicTable>// selectedRowKeys 不支持, 通过方法提供this.$refs['tableRef'].getSelectedRowKeys();
自定义列slot// columns列不支持customRender, 通过slot方式提供// 展示通过slot实现自定义此列const columns = [ {field: 'name', title: '菜单名称', align: 'left'}, {field: 'user.name', title: '用户名称', align: 'left'}]// 插槽名称规则:前缀 c_ + 字段名 = c_name// 如果是a.b的格式将'.'换成'_'即:c_a_b<IvzBasicTable rowKey="id"> <template #c_name="{record}"> <a>{{record.name}}</a> </template> <template #c_user_name="{record}"> <a>{{record.user.name}}</a> </template></IvzBasicTable> 字典和url支持将value转成label 比如性别字段:数据库存的是值:man,表格需要展示:男 // 通过本地变量sexconst sex = [ {label: '男', value: 'man'},{label: '女', value: 'woman'}]const columns = [ {field: 'sex', title: '性别', options: sex}]// 通过字典, 提供的字典类型sex,必须可以返回options格式相同的数组const columns = [ {field: 'sex', title: '性别', dict: 'sex'}]// 通过url, 提供的url必须可以返回options格式相同的数组const columns = [ {field: 'sex', title: '性别', url: '/core/getSex'}] 4.日期格式化如果是日期列,会默认将日期进行安装指定的格式进行格式化,可以用默认格式也可以自定义格式 // 通过指定type='date'const columns = [ {field: 'createTime', title: '创建时间', type: 'date'}]// 默认格式 {datetime: 'YYYY-MM-DD HH:mm:ss', date: 'YYYY-MM-DD', month: 'MM', week: 'E', time: 'HH:mm:ss'}// 通过picker指定具体类型,不指定则默认使用datetime格式const columns = [ {field: 'createTime', title: '创建时间', type: 'date', picker: 'month'}] 5.操作列IvzBasicTable组件支持使用两种方式定义操作列第一 使用功能点列表 // 使用type="action"声明此列是操作列const columns = [ {field: 'action', title: '操作', type: 'action', funMetas: [ {field:'Edit', '编辑',props: {onClick: (row) => {}}}, {field:'Del', '删除', props: {onClick: (row) => {}}} ] }] 第二 使用自定义slot // template<template #c_action={record, column}> <a-button>编辑</a-button> <a-button>修改</a-button></template>// jsconst columns = [ {field: 'action', title: '操作', type: 'action'}] 6.数据格式化除了上面的自定义slot,日期格式化,字典url,IvzBasicTable组件还支持自定义格式化数据 const columns = [ {field: 'createTime', title: '创建时间', formatter: ({value,record,column}) => value}] 安装教程
git clone https://gitee.com/iteaj/ivzone.git
// 进入项目目录然后执行命令npm install// 如果嫌国内速度慢可以切换到淘宝源npm install -g cnpm --registry=https://registry.npmmirror.comcnpm install
vite dev
vite build 使用说明
// 修改文件 vite.config.jsserver: { proxy: { '^/api/.*': { changeOrigin: true, target: 'http://127.0.0.1:8085', // 后端地址 rewrite: (path) => path.replace(/^\/api/, '') }, }}// 也可以使用线上地址server: { proxy: { '^/api/.*': { changeOrigin: true, target: 'http://demo.iteaj.com', // 后端地址 }, }}
![]() |
2022-08-15
2022-08-17
2023-10-27
2022-09-23
2022-08-13
请发表评论