Avue的v2版本是一个基于element-ui低代码前端框架,Avue的v3是一个基于element-plus低代码前端框架,它使用 JSON 配置来生成页面,可以减少页面开发工作量,极大提升效率。avue对于后台管理系统的开发极其便捷,就是配置不容易记住,熟练该框架配置来开发会好点,不然真不如直接用element来开发的好,以下以v2为例。
npm、yarn安装
npm i @smallwei/avue -S
yarn add @smallwei/avue -S
或
CDN在线安装
<!-- 引入样式文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@smallwei/avue/lib/index.css"/>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"/>
<!-- 引入相关JS 文件 -->
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@smallwei/avue/lib/avue.min.js"></script>
引入
通过CDN安装的,会挂载在全局属性AVUE下,通过 Vue.use(AVUE) 注册。
import Avue from '@smallwei/avue';
import '@smallwei/avue/lib/index.css';
Vue.use(Avue);
全局配置
Vue.use(AVUE,{
size:'', // 组件的尺寸,默认small。可选值 small/mini/medium
tableSize:'', //
formSize:'', //
appendToBody:true, //
modalAppendToBody:true, //
menuType:'', // 用于改变操作栏菜单按钮类型性,属性的组件的默认尺寸均为 text。可选值 button/icon/text/menu
qiniu:{ // 七牛云配置
AK: '',
SK: '',
scope: '',
url: '',
deadline: 1
},
ali:{ // 阿里云配置
region: '',
endpoint: '',
accessKeyId: '',
accessKeySecret: '',
bucket: '',
},
theme:'', // 主题颜色配置,属性的组件的默认白色。可选值 dark
canvas:{ // 水印配置
text: 'avuejs.com',
fontFamily: 'microsoft yahei',
color: "#999",
fontSize: 16,
opacity: 100,
bottom: 10,
right: 10,
ratio: 1
},
});
Avue 采用中文作为默认语言,同时支持多语言切换
import Vue from 'vue'
import Avue from '@smallwei/avue'
import zhLocale from '@smallwei/avue/lib/locale/lang/zh'
import enLocale from '@smallwei/avue/lib/locale/lang/en'
Vue.use(Avue, { enLocale })
crud 表格回调函数事件
on-load:这个事件会在表格所在的组件加载时就会执行,初始化表格数据。当表格翻页、页码变化时候也会自动执行该方法,使用了这个方法可以省略表格的current-change 、size-change两个回调函数。
current-change:表格页码发生变化时触发,第一个参数为当前页码。
size-change:表格页容量变化时触发,第一个参数就是当前页容量大小。
search-change :表格查询按钮回调函数,默认有两个参数 form与done, form为搜索框的值,done为关闭搜索的刷新状态回调函数。
row-save :表格新增表单确定按钮的回调函数,默认有三个参数分别为:row(表单的值),done(用于关闭表单回调函数),loading(页面loading状态) 。
row-update :表格行编辑确定按钮的回调,默认四个参数 row(当前行),index(索引),done(关闭弹框回调函数),loading(页面loading状态)。
row-del:表格操作行删除按钮回调函数,默认两个参数,row(当前行数据),index(当前索引) 。
refresh-change:表格的刷新按钮回调函数。
current-row-change:当前表格行被点击时的回调函数,第一个参数是当前行数据。
tree-load:表格行展开的懒加载回调,带三个参数 row(当前展开行的数据),treeNode(展开行节点数据),resolve(行懒加载的成功回调函数,在resolve里面将懒加载的数据传出去表格进行渲染)。
before-close:打开前的回调函数,两个参数done(用于关闭Dialog),type(当前窗口类型)。
before-close:关闭前的回调函数,done(用于关闭Dialog),type(当前窗口的类型)。
search-reset:点击清空按钮触发,清空搜索框回调函数。
selection-change:当表格选择项勾选发生变化时会触发该回调函数。
dateChange:dateBtn为true时的选择日期回调函数。
<avue-crud
ref="crud"
data="data" // 表格显示的数据
:option="option" // 表格配置项
:page.sync="page"
:permission="permission" // 表格按钮权限控制
@on-load="onLoad"
@current-change="currentChange"
@size-change="pageSizeChange"
@search-change="searchChange"
@row-save="rowSave"
@row-update="rowUpdate"
@row-del="rowDel"
@refresh-change="refreshChange"
@current-row-change="handleCurrentRowChange"
@tree-load="treeLoad"
@before-open="beforeOpen"
@before-close="beforeClose"
@search-reset="searchReset"
/>
const option = {
'table-loading':'', // 表格等待框的控制
size:'', // 组件尺寸
maxHeight:'', // 表格的最大高度
index:'', // 是否有序号
indexWidth:'', // 序号列宽度
indexFixed:'', // 序号列是否冻结列
menu:'', // 是否有操作栏
menuWidth:'', // 操作栏宽度
menuTitle:'', // 操作栏标题
menuFixed:'', // 操作栏列冻结列
menuType:'', // 操作栏按钮样式
menuHeaderAlign:'', // 操作栏表头的对齐方式
title:'', // 表格标题
addBtn:'', // 表格新增按钮;edit(修改)、del(删除)、view(查看)、update(修改)、save(保存)、cancel(取消)、search(查询)、empty(清空)
addBtnText:'', // 表格新增按钮文案
addBtnIcon:'', // 表格新增按钮图标
printBtn:'', // 表格打印按钮
excelBtn:'', // 表格导出按钮
filterBtn:'', // 表格自定义过滤按钮
refreshBtn:'', // 表格刷新数据按钮
columnBtn:'', // 表格列操作按钮
searchShowBtn:'', // 表格搜索显隐按钮
copyBtn:'', // 表格复制数据按钮
addTitle:'', // 表格新增弹窗标题 edit(修改)、view(查看)
dialogDrag:'', // 表格弹窗是否可以拖拽
searchIndex:'', // 表格搜索半收缩个数
searchPlaceholder:'', // 搜索项辅助文字
searchSpan:'', // 搜索项框栅列
searchGutter:'', // 搜索项框间距
searchLabelWidth:'', // 搜索项标题宽度
searchLabelPosition:'', // 搜索项标题位置
column:[ // 表格列配置
{
label:'', // 列标题
prop:'', // 列标题的内容属性名称
type:'', //
width:'', // 对应列的宽度
minWidth:'', // 对应列的最小宽度
fixed:'', // 列固定
sortable:'', // 对应列是否可以排序,监听 sort-change 回调,true, false, 'custom'
formatter:'', // 格式化列内容,(row, value, row, column)
overHidden:'', // 当内容过长被隐藏时显示 tooltip
align:'', // 对齐方式
headerAlign:'', // 表头对齐方式
filters:'', // 数据过滤的选项
search:'', // 是否为搜索项
searchValue:'', // 搜索项初始化值
searchPlaceholder:'', // 搜索项辅助文字
searchSpan:'', // 搜索项框栅列
searchOrder:'', // 搜索项位置排序,序号越大越靠前
searchLabelWidth:'', // 搜索项标题宽度
searchClearable:'', // 搜索项清除
searchMultiple:'', // 搜索项是否多选
searchTags:'', // 搜索项将选中值按文字的形式展示
display:'', // 弹出表单是否显示
disabled:'', // 弹出表单是否禁止
addDisabled:'', // 表单新增时项是否禁止,edit(编辑)、view(查看)
addDisplay:'', // 表单新增时项是否显示,edit(编辑)、view(查看)
resizable:'', // 对应列是否可以通过拖动改变宽度(需要在option中border属性为真)
searchClearable:'', // 搜索项清除
searchClearable:'', // 搜索项清除
searchClearable:'', // 搜索项清除
dicData:[ // 下拉项字典枚举
{label:'A',value: 'a'},
],
rules:[ // 表单字段校验规则
{equired: true,message: "请输入姓名",trigger: "blur"},
],
hide: false, // 隐藏列
}
],
};
<avue-crud :data="data" :option="option" ref="crud">
<!-- 左边插槽 -->
<template slot-scope="scope" slot="menuLeft">
<el-button type="danger" @click="$refs.crud.rowAdd()">新增</el-button>
</template>
<!-- 右边插槽 -->
<template slot-scope="scope" slot="menuRight">
<el-button type="danger" @click=() => {}">刷新</el-button>
</template>
<!-- 自定义行内操作栏插槽 -->
<template slot-scope="{row,index}" slot="menu">
<el-button @click="$refs.crud.rowEdit(row,index)">编辑</el-button>
<el-button @click="$refs.crud.rowDel(row,index)">删除</el-button>
</template>
<!-- 自定义弹窗内按钮插槽 -->
<template slot-scope="{row,index,type}" slot="menuForm">
<el-button v-if="type=='add'" @click="$refs.crud.rowSave()">自定义新增</el-button>
<el-button v-if="type=='edit'" @click="$refs.crud.rowUpdate()>自定义修改</el-button>
<el-button @click="$refs.crud.closeDialog()">取消</el-button>
</template>
<!-- 自定义表单插槽,slot="propForm" -->
<template slot-scope="{type,disabled}" slot="nameForm"> // column: [{prop:'name',formslot:true}]
<el-tag v-if="type=='add'">新增</el-tag>
<el-tag v-else-if="type=='edit'">修改</el-tag>
<el-tag v-else-if="type=='view'">查看</el-tag>
<el-tag>{{user.name?user.name:'暂时没有内容'}}</el-tag>
<el-input :disabled="disabled" v-model="user.name"></el-input>
</template>
<!-- 自定义表单错误提示插槽,slot="propError" -->
<template slot-scope="{error}" slot="nameError"> // column: [{prop:'name',labelslot:true}]
<p style="color:green">自定义提示{{error}}</p>
</template>
<!-- 自定义表单标题,slot="propLabel" -->
<template slot-scope="scope" slot="nameLabel"> // column: [{prop:'name',errorslot:true}]
<span>姓名 </span>
<el-tooltip class="item" effect="dark" content="文字提示" placement="top-start">
<i class="el-icon-warning"></i>
</el-tooltip>
</template>
<!-- 向搜索表单插入一个额外的(column中没有的字段)输入框 -->
<template slot="search">
<el-form-item label="状态">
<el-input placeholder="状态" v-model="search.value"/>
</el-form-item>
</template>
<!-- 向表单中插入一个额外的输入框 -->
<template slot="menuForm">
<el-form-item label="维修">
<el-input placeholder="维修" v-model="search.value"/>
</el-form-item>
</template>
</avue-crud>
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案