一、Avue是啥?
Avue 是一個基於Element框架低代碼前端框架,它使用 JSON 配置來生成頁面,可以減少頁面開發工作量,極大提升效率。
二、Avue安裝
安裝
通過npm安裝
#安裝 npm i @smallwei/avue -S yarn add @smallwei/avue -S # 引入 import Avue from '@smallwei/avue'; import '@smallwei/avue/lib/index.css'; Vue.use(Avue);
通過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>
<div id="app"></div>
<script>
// 在 #app 標簽下渲染一個按鈕組件
new Vue({
el:'app',
data(){
return{}
}
});
app.use(AVUE);
</script>
通過腳手架安裝
# 安裝 Vue Cli npm install -g @vue/cli # 創建一個項目 vue create hello-world # 創建完成后,可以通過命令打開圖形化界面,如下圖所示 vue ui 在圖形化界面中,點擊 依賴 -> 安裝依賴,然后將 @smallwei/avue 添加到依賴中即可。
三、Avue使用
<template>
<div id="app">
<el-row style="margin-bottom:20px;font-size:15px">
<el-col :span="4">
顯示邊框:
<el-switch size="small" v-model="showBorder"></el-switch>
</el-col>
<el-col :span="4">
顯示斑馬紋:
<el-switch size="small" v-model="showStripe"></el-switch>
</el-col>
<el-col :span="4">
顯示索引:
<el-switch size="small" v-model="showIndex"></el-switch>
</el-col>
<el-col :span="4">
顯示多選框:
<el-switch size="small" v-model="showCheckbox"></el-switch>
</el-col>
<el-col :span="4">
顯示表頭:
<el-switch size="small" v-model="showHeader"></el-switch>
</el-col>
</el-row>
<el-row style="margin-bottom:20px">
<el-radio-group v-model="sizeValue">
<el-radio label="small">默認</el-radio>
<el-radio label="medium">medium</el-radio>
<el-radio label="small">small</el-radio>
<el-radio label="mini">mini</el-radio>
</el-radio-group>
</el-row>
<avue-crud :data="data" :option="option0"></avue-crud>
</div>
</template>
<script>
export default {
data() {
return {
obj: {},
data: [
{
name: "張三",
sex: "男"
},
{
name: "李四",
sex: "女"
},
{
name: "王五",
sex: "女"
},
{
name: "趙六",
sex: "男"
}
],
showBorder: false,
showStripe: false,
showHeader: true,
showIndex: true,
showCheckbox: false,
showPage: false,
sizeValue: "small"
};
},
computed: {
option0() {
return {
searchMenuSpan: 8,
border: this.showBorder,
stripe: this.showStripe,
showHeader: this.showHeader,
index: this.showIndex,
size: this.sizeValue,
selection: this.showCheckbox,
page: this.showPage,
align: "center",
menuAlign: "center",
column: [
{
label: "姓名",
prop: "name",
search: true
},
{
label: "性別",
prop: "sex"
}
]
};
}
}
};
</script>
運行截圖



各種操作的案例
<template>
<div id="app">
權限開關
<el-switch
:active-value="false"
:inactive-value="true"
v-model="text"
active-color="#13ce66"
inactive-color="#ff4949"
/>
<avue-crud
:page.sync="page"
:data="data"
:permission="permission"
:option="option"
:before-open="beforeOpen"
@row-save="rowSave"
@row-del="rowDel"
@on-load="onLoad"
@search-change="searchChange"
>
<template slot-scope="{row,index}" slot="menuForm">
<el-button
type="primary"
icon="el-icon-check"
size="small"
plain
v-show="type === 'add'"
>繼續添加{{index}}</el-button>
</template>
</avue-crud>
</div>
</template>
<script>
export default {
data() {
return {
page: {
pageSize: 2,
currentPage: 1
},
data: [
{
name: "張三",
sex: "男",
$cellEdit: true
},
{
name: "李四",
sex: "女"
},
{
name: "王五",
sex: "女"
},
{
name: "趙六",
sex: "男"
}
],
text: false,
permission: {
viewBtn: true
},
type: ""
};
},
computed: {
option() {
return {
card: true,
tip: false,
selection: true,
editBtn: true,
viewBtn: true,
searchMenuSpan: 8,
showHeader: true,
index: true,
size: "small",
align: "center",
menuAlign: "center",
column: [
{
dicData: [{ label: "王五", value: "男" }],
filters: true,
filterMethod: function(value, row) {
return row.sex === value;
},
sortable: true,
label: "姓名",
prop: "name",
search: true,
cell: true,
rules: [
{
required: true,
message: "請輸入姓名",
trigger: "blur"
}
]
},
{
label: "性別",
prop: "sex",
formatter: function(row) {
return row.name + "自定義";
},
type: "radio",
dicData: [
{
label: "顯示",
value: 0
},
{
label: "隱藏",
value: 1
}
]
},
{
hide: true,
cell: true,
label: "省份",
prop: "province",
type: "select",
search: true,
props: {
label: "name",
value: "code"
},
dicUrl: `https://cli.avuejs.com/api/area/getProvince`,
dicFormatter: (res) => {
// 接口設計正確就可以不用這個
console.log(res.data)
return res.data
},
rules: [
{
required: true,
message: "請選擇省份",
trigger: "blur"
}
]
}
]
};
}
},
methods: {
onLoad(page) {
console.log("分頁信息:", page);
this.page.total = 100;
},
searchChange(params, done) {
console.log("--params", params);
setTimeout(() => {
done();
}, 2000);
},
rowSave(form, done) {
this.$message.success("新增數據" + JSON.stringify(form));
done();
},
beforeOpen(done, type) {
this.type = type;
done();
},
rowDel() {
this.$message.success('del')
}
},
watch: {
text() {
if (this.text === true) {
this.permission.viewBtn = false;
} else {
this.permission.viewBtn = true;
}
}
}
};
</script>
四、Avue優/缺點
優點:
1.僅需一個json自動生成增刪改查頁面
2.結合業務快速化開發,節約開發時間成本
缺點:
1.大量定制 UI
JSON 配置使得 Avue 更適合做有大量常見 UI 組件的頁面,但對於面向普通客戶(toC)的頁面,往往追求個性化的視覺效果,這種情況下用 Avue 就不合適,實際上絕大部分前端 UI 組件庫也都不適合,只能定制開發。
2.極為復雜或特殊的交互
有些復雜的前端功能,比如 可視化編輯器,其中有大量定制的拖拽操作,這種需要依賴原生 DOM 實現的功能無法使用 Avue。
五、總結
如果只是內部使用的管理系統 or OA系統,可以使用Avue進行開發,涉及到的自定義組件無需過多。如果是對外的大型管理系統,有特殊定制化的項目,可以結合Avue使用,畢竟它可以讓開發者減少很多工作量。
