一、安装
通过 npm 安装
在现有项目中使用 Avue 时,可以通过 npm 或 yarn 进行安装(需要先引入ElementUI作为依赖支持):
| npm i @smallwei/avue -S |
| yarn add @smallwei/avue -S |
复制
| |
| import ElementUI from 'element-ui'; |
| import 'element-ui/lib/theme-chalk/index.css'; |
| import Avue from '@smallwei/avue'; |
| import '@smallwei/avue/lib/index.css'; |
| Vue.use(ElementUI) |
| Vue.use(Avue); |
复制
使用字典需要引入axios
| import axios from 'axios' |
| Vue.use(Avue,{axios}) |
| |
| |
| |
| window.axios = axios |
复制
通过脚手架安装
在新项目中使用 Avue 时,推荐使用 Vue 官方提供的脚手架 Vue Cli 创建项目并安装 Avue
| |
| npm install -g @vue/cli |
| |
| |
| vue create hello-world |
| |
| |
| vue ui |
| |
| 在图形化界面中,点击 依赖 -> 安装依赖,然后将 @smallwei/avue 添加到依赖中即可。 |
复制
二、使用
| |
| <template> |
| |
| <basic-container> |
| |
| <avue-crud |
| //设置表格属性 |
| :option="option" |
| //来存取页面的值 |
| v-model="form" |
| //获取后台数据 |
| :data="data" |
| :table-loading="loading" |
| //分页 |
| :page="page" |
| //权限控制 操作按钮动态显示 |
| :permission="permissionList" |
| //打开前回调 |
| :before-open="beforeOpen" |
| // 关闭前回调 |
| :before-close="beforeClose" |
| //获取dom 结构 |
| ref="crud" |
| //数据编辑后出发 |
| @row-update="rowUpdate" |
| //新增数据确定后执行 |
| @row-save="rowSave" |
| // 行删除 |
| @row-del="rowDel" |
| //点击搜索后触发该事件 |
| @search-change="searchChange" |
| //清空搜索回调方法 |
| @search-reset="searchReset" |
| //当选择项发生变化时会触发该事件 |
| @selection-change="selectionChange" |
| @current-change="currentChange" |
| //点击每页多少条 |
| @size-change="sizeChange" |
| //点击刷新 |
| @refresh-change="onLoad(page)" |
| //初始化页面 |
| @on-load="onLoad" |
| > |
| //自定义按钮 |
| <template slot-scope="scope" slot="menu"> |
| <el-button @click="submitHandle(scope.row)">提交</el-button > |
| </template> |
| <template slot-scope="{ row }" slot="status"> |
| //更改表格内容 |
| <el-tag v-if="row.status == 0">待审</el-tag> |
| <el-tag v-else-if="row.status == 1" type="info">审批中</el-tag> |
| </template> |
| </avue-crud> |
| </basic-container> |
| </template> |
| <script> |
| export default { |
| data() { |
| return { |
| form: {}, |
| type: "", |
| page: { |
| pageSize: 10, |
| currentPage: 1, |
| total: 0, |
| }, |
| selectionList: [], |
| option: { |
| |
| align:'left', |
| |
| width: '100%', |
| |
| calcHeight: 'auto', |
| |
| height: 'auto', |
| |
| maxHeight: 'auto', |
| |
| tip: false, |
| |
| border: true, |
| |
| index: true, |
| |
| indexLabel: "序号", |
| |
| printBtn: true |
| |
| refreshBtn: true |
| |
| viewBtn: true, |
| |
| editBtn: false, |
| |
| delBtn: false, |
| |
| searchShow: true, |
| editBtnText:'编辑文案', |
| viewBtnText:'查看文案', |
| printBtnText:'打印文案', |
| excelBtnText:'导出文案', |
| updateBtnText:'修改文案', |
| saveBtnText:'保存文案', |
| cancelBtnText:'取消文案', |
| |
| dialogWidth: 600, |
| column: [ |
| { |
| label: "请假人", |
| |
| prop: "userId", |
| |
| type: "tree", |
| |
| /daterange/timerange/datetimerange/week/month/year/dates/password/switch/tree/number |
| maxRows:4, |
| minRows:2, |
| |
| search: true, |
| |
| editDisabled: true, |
| |
| addDisabled: true, |
| |
| display: false, |
| |
| addDisplay: false, |
| |
| viewDisplay: true, |
| |
| editDisplay: false, |
| |
| hide: true, |
| |
| multiple: true, |
| |
| dicData: [], |
| |
| props: { |
| value: "sysId", |
| label: "name", |
| }, |
| |
| dicUrl: "/api/blade-system/dict/dictionary?code=exam_state", |
| |
| format: "yyyy-MM-dd hh:mm:ss", |
| valueFormat: "yyyy-MM-dd hh:mm:ss", |
| |
| rules: [ |
| { |
| required: true, |
| message: "请选择请假人", |
| trigger: "blur", |
| }, |
| ], |
| }, |
| data: [] |
| }; |
| }, |
| mounted() { |
| |
| personnel(1, 10000, { |
| is_deleted: 0, |
| }).then((res) => { |
| this.option.column.forEach((item) => { |
| if (item.prop == "userId") { |
| item.dicData = res.data.data.records; |
| } |
| }); |
| }); |
| }, |
| methods: { |
| onLoad(page, params = {}) { |
| this.loading = true |
| getList( |
| page.currentPage, |
| page.pageSize, |
| Object.assign(params, this.query) |
| ).then((res) => { |
| |
| const data = res.data.data; |
| this.page.total = data.total; |
| this.data = data.records; |
| this.loading = false; |
| |
| }); |
| }, |
| }, |
| }; |
| </script> |
| |
| <style> |
| </style> |
| |
复制
三、全局api
| this.$DialogForm.show({ |
| title: '弹窗页面', |
| width: '30%', |
| menuPosition:'right', |
| option:{ |
| submitText: '完成', |
| span:24, |
| column: [{ |
| label: "姓名", |
| prop: "name", |
| rules: [{ |
| required: true, |
| message: "请输入姓名", |
| trigger: "blur" |
| }], |
| }] |
| }, |
| beforeClose: (done) => { |
| this.$message.success('关闭前方法') |
| done() |
| }, |
| callback:(res)=>{ |
| console.log(res.data); |
| this.$message.success('关闭等待框') |
| setTimeout(() => { |
| res.done() |
| setTimeout(() => { |
| this.$message.success('关闭弹窗') |
| res.close() |
| }, 1000) |
| }, 1000) |
| } |
| }) |
复制
2.$Clipboard复制到剪切板
| this.$Clipboard({ |
| text: '复制的文本内容' |
| }).then(() => { |
| this.$message.success('复制成功') |
| }).catch(() => { |
| this.$message.error('复制失败') |
| }); |
复制
3.$ImagePreview图片预览
| data() { |
| var link = 'https://lokeshdhakar.com/projects/lightbox2/images/'; |
| return { |
| datas: [ |
| { thumbUrl: `${link}thumb-4.jpg`, url: `${link}image-4.jpg` }, |
| { thumbUrl: `${link}thumb-5.jpg`, url: `${link}image-5.jpg` }, |
| { thumbUrl: `${link}thumb-6.jpg`, url: `${link}image-6.jpg` }, |
| ] |
| } |
| } |
| this.$ImagePreview(this.datas, index); |
复制
3.$Print 打印插件
| <div id="test"></div> |
| this.$Print('#test') |
复制
4.$Export excel导出
| let opt = { |
| title: '文档标题', |
| column: [{ |
| label: '标题', |
| prop: 'title' |
| }], |
| data: [{ |
| title: "测试数据1" |
| }, { |
| title: "测试数据2" |
| }] |
| } |
| this.$Export.excel({ |
| title: opt.title || new Date().getTime(), |
| columns: opt.column, |
| data: opt.data |
| }); |
复制
5.$Log日志打印
| /** |
| * 内置5中常用颜色,默认为primary |
| * default: |
| * primary: |
| * success: |
| * warning: |
| * danger: |
| * 也可以直接打印彩色文字 |
| */ |
| |
| this.$Log.capsule('标题','内容','primary') |
| this.$Log.primary('内容') |
复制
6.findObject发现结构对象
| var option = {column:[]} |
| var prop = this.findObject(option.column,'prop'); |
| console.log(prop) |
复制
7.watermark全局水印
| this.watermark({ |
| fontSize: '14px', |
| width: '100', |
| height: '80', |
| text: 'avue局部水印' |
| }); |
复制
8.downFile文件下载
| var url = "https://avuejs.com/images/logo-bg.jpg"; |
| this.downFile(url,'logo.jpg'); |
复制
9.randomId随机数生成
| var str = this.randomId(); |
| console.log(str) |
复制
10.loadScript动态加载js/css
| this.loadScript('js','xxx.js').then(()=>{ |
| |
| }) |
| this.loadScript('css','xxx.css').then(()=>{ |
| |
| }) |
复制
11.deepClone对象深拷贝
| var obj1 = { |
| name:'张三' |
| } |
| var obj2 = this.deepClone(obj1); |
复制
12.setPx设置css像素方法
| var obj = 23 |
| console.log(this.setPx(obj)) |
| console.log(this.setPx('100%')) |
| console.log(this.setPx('23px')) |
复制
13.validatenull判断空
| var obj1 = {} |
| var obj2 = [] |
| var str1 = '' |
| var str2 = undefined |
| var str3 = null; |
| console.log(this.validatenull(obj1)) |
| console.log(this.validatenull(obj2)) |
| console.log(this.validatenull(str1)) |
| console.log(this.validatenull(str2)) |
| console.log(this.validatenull(str3)) |
复制
14.findNode数组中寻找对象下标
| var list = [{ |
| prop:'name' |
| },{ |
| prop:'sex' |
| }] |
| var obj = this.findNode(list,'sex','prop'); |
| console.log(obj) |
复制
15.vaildData验证对象
| var obj = {} |
| console.log(this.vaildData(obj,'默认值')) |
| console.log(this.vaildData(obj,{name:11})) |
| var obj2 = true |
| console.log(this.vaildData(obj2,false)) |
复制
16.表格合计
| |
| |
| option:{ |
| showSummary:true, |
| } |
| |
| |
| |
| <avue-crud ref="crud" :page="page" :data="dataList" :option="option" @search-change="searchChange" @on-load="getDataList" @refresh-change="getDataList" |
| :summary-method="getSummaries"> |
| </avue-crud> |
| |
| |
| |
| |
| getSummaries(param) { |
| const { columns, data } = param; |
| const sums = []; |
| columns.forEach((column, index) => { |
| if (index === 0) { |
| sums[index] = '合计'; |
| return; |
| } |
| const values = data.map((item) => Number(item[column.property])); |
| |
| if (column.property == 'id' || column.property == 'name') { |
| sums[index] = values.reduce((prev, curr) => { |
| const value = Number(curr); |
| if (!isNaN(value)) { |
| return prev + curr; |
| } else { |
| return prev; |
| } |
| }, 0); |
| sums[index]; |
| } else { |
| sums[index] = '-'; |
| } |
| }); |
| return sums; |
| }, |
复制
点击跳转Avue官方文档,查看更多详细内容。如有其他疑问可在评论区留言...
感觉还可以的请点赞、收藏、关注,谢谢您的观看