經過 npm 安裝css
npm install avl-components -D
複製代碼
在 vue 項目 main.js 裏面引入(目前沒有作按需加載 默認全局引入)前端
import AvlComponents from "avl-components";
import "avl-components/lib/avl-components.css";
Vue.use(AvlComponents);
複製代碼
全局引入以後 默認註冊了 vue 全局組件 使用以下vue
下面是一個自定義表頭和列內容的使用例子
<avl-table
ref="avlTable"
:tableConfig="tableConfig"
:requestFun="requestFun"
:requestParamsOrData="requestParamsOrData" @onHandleSizeChange="onHandleSizeChange"
@onHandleCurrentChange="onHandleCurrentChange" @onHandleSelectionChange="onHandleSelectionChange"
@onOperateBtn="onHandleOperateBtn"
@onHandleSortChange="onHandleSortChange"
@onRowClick="onHandleRowClick"
>
<!-- 狀態自定義表頭 -->
這裏的slot 須要和配置項定義的一致
<template slot="stateHeader">
<el-dropdown @command="handleFilterTag">
<span class="el-dropdown-link">
狀態
<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="all">所有</el-dropdown-item>
<el-dropdown-item command="1">進行中</el-dropdown-item>
<el-dropdown-item command="2">已完成</el-dropdown-item>
<el-dropdown-item command="3">已失敗</el-dropdown-item>
<el-dropdown-item command="0">未檢測</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
<!-- 狀態自定義列內容 -->
這裏的slot 須要和配置項定義的一致
<template slot-scope="props" slot="analysisStatus">
<div v-if="props.scope.row.analysisStatus=== 1">
<el-tag>進行中</el-tag>
</div>
<el-tag v-else-if="props.scope.row.analysisStatus=== 3" type="danger">已失敗</el-tag>
<el-tag v-else-if="props.scope.row.analysisStatus=== 0" type="danger">未檢測</el-tag>
<el-tag v-else type="success">已完成</el-tag>
</template>
<!-- 也能夠自定義操做列 這裏的slot會覆蓋下面的操做列配置項 -->
<template slot-scope="props" slot="operation">
xxx
</template>
</avl-table>
下面是事件監聽
// 操做按鈕事件監聽
onHandleOperateBtn(val) {
console.log(val);
},
// 分頁切換
onHandleCurrentChange(val) {
console.log(val);
},
onHandleSizeChange(val) {
console.log(val);
},
// 表格排序監聽
onHandleSortChange(val) {
console.log(val);
},
// 多選按鈕操做監聽
onHandleSelectionChange(val) {
console.log(val);
},
//行點擊事件
onHandleRowClick(val){
console.log(val);
}
複製代碼
一個完整的配置例子以下npm
建議本身新建一個相關表格的配置文件並引入 例如 pageConfig.js數組
export const tableConfig = {
hasSelect: true, // 有無選中列
hasOperation: true, // 有無操做列
border: false, // 是否帶有縱向邊框 默認爲false
hasExpand: false, // 有無展開行功能 默認爲false
rowClick: false, //是否開啓行點擊 默認爲false
expands: [],開啓行展開以後的數據
columns: [ //自定義列 是一個數組 數組每一項表明一列
{
id: "1", //惟一標識
label: "狀態", //列名
prop: "analysisStatus", //列對應的後臺字段名 和自定義列slot對應
width: "320", //列寬
className: "", //只自定義class類
minWidth: "100", //最小寬度
show: "template", //true 表明不作任何處理 false表明隱藏 template表明自定義模板
sortable: "custom", //排序統一採用後臺控制 custom表明後臺排序 默認不排序
formatData: formatAddTime, //表明數據格式化 相似於filter過濾器功能 默認爲null
showHeader: true, //表明是否自定義表頭 默認爲false
headerProp: "stateHeader" //自定義表頭slot name值 須要showHeader配置爲true
}
],
operation: {
// 操做功能
label: "操做", // 操做列的表頭文字
width: "200", // 操做列的寬度
className: "", // 操做列的class名
data: [
// 操做列數據
{
id: 1, // 按鈕循環組件的key值
label: "保存", // 按鈕文字
Fun: "handleSubmit", // 點擊按鈕後觸發的父組件事件
size: "mini", // 按鈕大小
classname: "", // 按鈕的類名
type: "success" //可選的有primary / success / warning / danger / info / text
}
]
},
// 搜索參數表明是什麼形式傳給後臺 默認是params 可是post請求下能夠配置data
searchProp: {
// name:'data'
},
// 格式化數據必定要返回一個對象 表明數據和數量
formatTableData: ({data}) => {
return {
data: data.apkAnalysis,
totalCount: data.counts
};
}
};
// 列表請求配置 返回一個promise
export const requestFun = ({params,data})=>{
return request({
method: "get",
url: "/apkAnalysis",
params,
data
});
}
// 列表請求查詢參數
export const requestParamsOrData = {
page: 1,
pageSize: 10
};
複製代碼
avl-table 使用注意事項 1.自定義列內容使用時默認數據 slot-scope="props" 使用方法爲 props.scope.row.xxpromise
下面是一個自定義表單的使用例子
<avl-form @handleEventChange="onHandleEventChange" :formConfig="formConfig">
</avl-form>
下面是事件監聽
// 表單變化事件監聽
onHandleEventChange(val) {
console.log(val);
},
複製代碼
一個完整的配置例子以下bash
// 搜索表單配置
export const formConfig = [
{
id: 1, //惟一標識
propName: "address1", //字段名
className: "", // 自定義class樣式
type: "avl-radio", // 標識屬於哪一種form組件 avl-radio
avl-checkbox avl-input avl-select avl-cascader avl-switch
size: "small", // 大小
defaultValue: "beijing", // 默認值string
// 默認的選擇項
defaultOptions: [
{
label: "北京",
value: "beijing"
},
{
label: "上海",
value: "shanghai"
},
{
label: "武漢",
value: "wuhan"
}
],
showBtnStyle: true // 是否爲按鈕樣式
// 按鈕樣式下自定義樣式(默認自帶樣式)
// btnStyle: {
// textColor: "#fff",
// fill: "#409E"
// },
// showBorder: true // 是否顯示邊框
},
{
id: 2,
propName: "address2",
className: "", // 自定義class樣式
type: "avl-checkbox", // 標識屬於哪一種form組件
size: "small", // 大小 medium / small / mini
defaultValue: ["beijing"], // 默認值array
// 默認的選擇項
defaultOptions: [
{
label: "北京",
value: "beijing"
},
{
label: "上海",
value: "shanghai"
},
{
label: "武漢",
value: "wuhan"
}
],
// showBtnStyle: true // 是否爲按鈕樣式
// 按鈕樣式下自定義樣式(默認自帶樣式)
// btnStyle: {
// textColor: "#fff",
// fill: "#409EFF"
// },
// showBorder: true // 是否顯示邊框
// 可勾選的最小與最大值
// min:1,
// max:2
},
{
id: 3,
propName: "search",
className: "", // 自定義class樣式
type: "avl-input", // 標識屬於哪一種form組件
size: "small", // 大小
defaultValue: "", // 默認值string
placeholder: "請輸入內容", // 默認的提示語
// clearable: true,
// showWordLimit: true, // 是否顯示輸入字數統計
// 最小與最大值
// minlength: 0,
// maxlength: 10
},
{
id: 4,
propName: "address3",
className: "", // 自定義class樣式
type: "avl-select", // 標識屬於哪一種form組件
size: "small", // 大小
defaultValue: "beijing", // 默認值
// 默認的選擇項
defaultOptions: [],
// 獲取數據的方式(請求遠程數據舉例)
getInitData() {
if (!localStorage.getItem("defaultOptions1")) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const defaultOptions = [
{
label: "北京",
value: "beijing"
},
{
label: "上海",
value: "shanghai"
},
{
label: "武漢",
value: "wuhan"
}
];
resolve(defaultOptions);
}, 2000);
});
} else {
return JSON.parse(localStorage.getItem("defaultOptions1"));
}
},
// clearable: true, // 是否顯示清除按鈕
// multiple: true, // 多選
// multipleLimit:0, // 多選限制 0表明無限制
// collapseTags:true, // 多選展現摺疊
// filterable: true, // 支持過濾
// filterMethod:null // 自定義過濾方式 能夠配合遠程過濾
},
{
id: 5,
propName: "test",
className: "", // 自定義class樣式
type: "avl-cascader", // 標識屬於哪一種form組件
size: "small", // 大小
defaultValue: "", // 默認值
defaultOptions: [], // 默認的選擇項
// 獲取數據的方式(請求遠程數據)
getInitData() {
return [];
},
// showLastLevel: true, // 只展現最後一級名稱
// collapseTags:true, // 多選展現摺疊
// separator:'/', // 選項分隔符
props: {
// expandTrigger: "hover", // 次級菜單的展開方式 hover
// multiple: true, //是否多選
// checkStrictly: true, //是否嚴格的遵照父子節點不互相關聯
// lazy: false, //是否動態加載子節點,需與 lazyLoad 方法結合使用
// lazyLoad: null, //加載動態數據的方法,僅在 lazy 爲 true 時有效
// value: "value",
// label: "label",
// children: "children",
// disabled: "disabled",
// leaf: "leaf"
}
// clearable: true, // 是否顯示清除按鈕
// filterable: true, // 支持過濾
// filterMethod:null // 自定義過濾方式 能夠配合遠程過濾
},
{
id: 6,
propName: "test1",
className: "", // 自定義class樣式
type: "avl-switch", // 標識屬於哪一種form組件
size: "small", // 大小
defaultValue: true, // 默認值
config: {
"active-text": "按月付費",
"inactive-text": "按年付費",
// "active-value":true, //打開的值
// "inactive-value":false, //關閉的值
"active-color": "#13ce66",
"inactive-color": "#ff4949"
}
// disabled: true, //禁用
// width:40, //寬度
}
];
複製代碼
avl-form 使用注意事項 1.數據源須要後臺請求時能夠參照 avl-select 配置post