校验规则
rules: {
link: [{ required: true, message: 'link is required', trigger: 'change' }],
timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }],
title: [{ required: true, message: 'title is required', trigger: 'blur' }]
},v-if使用
<el-button v-if="scope.status!='deleted'" size="mini" type="danger" @click="fnDelete(scope)">
跳转到新页面
<el-table-column min-width="300px" label="Title">
<template slot-scope="{row}">
<router-link :to="'/example/edit/'+row.id" class="link-type">
<span>{{ row.title }}</span>
</router-link>
</template>
</el-table-column>input输入框
<el-form-item label="title">
<el-input v-model="temp.title" placeholder="Please enter the content" />
</el-form-item>textarea输入框
<el-form-item label="title">
<el-input v-model="temp.desc" autosize :rows="3" type="textarea" class="article-textarea" placeholder="Please enter the content" />
</el-form-item>number输入框
<el-form-item label="排序(越大越前)">
<el-input-number v-model="temp.sort" :min="0" :max="1000000" label="排序" />
</el-form-item>select标签
<el-col :span="10" offset="1">
<el-form-item label-width="90px" label="性别">
<el-select v-model="postForm.sex" placeholder="性别" clearable class="filter-item">
<el-option v-for="(item, index) in sexOptions" :key="index+1" :label="item" :value="index+1" />
</el-select>
</el-form-item>
</el-col>tag标签
<el-tag
:type="scope.row.sex | filterType"
effect="light">
{{ scope.row.sex | filterSex }}
</el-tag>filters:{
filterType(re){
if(re == 1){
return ''
}else if(re == 2){
return 'danger'
}else{
return 'info'
}
},
filterSex(re){
if(re == 1){
return '男'
}else if(re == 2){
return '女'
}else{
return '未知'
}
}
},$message提示弹框
this.$message('aaaaaaaaa!')this.$message.success('aaaaaaaaa!')this.$message.warning('aaaaaaaaa!')this.$message.error('aaaaaaaaa!')const $message = this.$message({
message: ' Compiling the theme',
customClass: 'theme-message',
type: 'success',
duration: 0,
iconClass: 'el-icon-loading'
})
setTimeout(function(){
$message.close()
},2000)上传组件TMupload
import TMupload from '@/components/TMupload'
components: { TMupload },<el-form-item label-width="0"> <TMupload :imgsrc.sync="temp.img" tips="图片(建议尺寸600*800)" id="img"> </TMupload> </el-form-item>
// 继续处理data和resetTemp中的this.temp.img = ''
富文本Tinymce
import Tinymce from '@/components/Tinymce'
components: { Tinymce },<el-dialog id="firstDialog" width="1000px" :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
<el-form-item label="content:">
<tinymce ref="tinymceid" v-model="temp.content" :width="600" :height="300" />
</el-form-item>
</el-dialog>// 需设置data的continueTime: 0,不是data.temp的continueTime
handleUpdate(row) {
this.temp = Object.assign({}, row)
this.temp.table = 'case'
this.dialogStatus = 'update'
this.dialogFormVisible = true
this.$nextTick(() => {
this.fnSetZindex()
this.$refs['dataForm'].clearValidate()
if(this.continueTime > 0){
this.$refs['tinymceid'].setContent(this.temp.content)
}
this.continueTime++
})
},fnSetZindex() {
var firstDialog = document.getElementById('firstDialog')
setTimeout(function(){
// 设置为较高的值,防止富文本上传时遮罩混乱
firstDialog.style.zIndex = 3000
},0)
}分页组件Pagination
import Pagination from '@/components/Pagination'
components: { Pagination },<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="fetchData" />
// 再单独处理total,listQuery,fetchData等
listQuery: {
page: 1,
limit: 10,
table: 'case',
},删除按钮提示框
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleUpdate(scope.row)">
修改
</el-button>
<el-button size="mini" type="danger" @click="fnDelete(scope.row)">
删除
</el-button>
</template>fnDelete(row) {
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.listLoading = true
var deleteObj = {}
deleteObj.id = row.id
deleteObj.table = 'case'
deleteOne(deleteObj).then((response) => {
for (const v of this.list) {
if (v.id === row.id) {
const index = this.list.indexOf(v)
this.list.splice(index, 1)
break
}
}
this.$message.success('删除成功!')
this.listLoading = false
})
}).catch(() => {
});
},条件搜索框在template的.app-container 的.app-container下添加
输入搜索框
<el-input v-model="listQuery.device_id" placeholder="设备编码(支持模糊搜索)" clearable style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
选择搜索框
<el-select v-model="listQuery.pay_status" placeholder="付款状态" clearable style="width: 160px" class="filter-item"> <el-option v-for="(item, index) in statusOptions" :key="index" :label="item" :value="index" /> </el-select>
日期选择框
<div class="block filter-item">
<el-date-picker
v-model="listQuery.create_time"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['00:00:00', '23:59:59']">
</el-date-picker>
</div>搜索按钮
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter"> 搜索 </el-button>
搜索时页码归1
handleFilter() {
this.listQuery.page = 1
this.fetchData()
},data中定义
statusOptions:['未付款','已付款'],
listQuery中定义
create_time: undefined,
无需重新定义搜索方法直接调用fetchData即可
icon引用,icon-class为icons/svg文件夹下的svg文件名称,custom-class可自定义样式
<svg-icon icon-class="example" class-name='custom-class' />
导出excel
在搜索按钮后面添加“导出excel”按钮
<el-button class="filter-item" :loading="downloadLoading" type="primary" icon="el-icon-document" @click="handleDownload">
导出excel
</el-button>data中return默认值
downloadLoading: false,
methods方法定义
handleDownload() {
this.downloadLoading = true
var myDate = new Date();
var filename = myDate.getFullYear() + '-' + parseInt(myDate.getMonth() + 1) + '-' + myDate.getDate();
import('@/vendor/Export2Excel').then(excel => {
const tHeader = ['Id', '设备号', '用户', '价格', '时长', '状态', '创建时间']
const filterVal = ['id', 'device_id', 'user_name', 'price', 'total_time', 'pay_status', 'create_time']
const list = this.list
const data = this.formatJson(filterVal, list)
console.log(data)
excel.export_json_to_excel({
header: tHeader,
data,
filename: filename,
autoWidth: true,
bookType: 'xlsx'
})
this.downloadLoading = false
})
},有需要过滤的数据时循环过滤
formatJson(filterVal, jsonData) {
return jsonData.map(v => filterVal.map(j => {
if (j === 'timestamp') {
return parseTime(v[j])
} else {
return v[j]
}
}))
},确保src/vendor/Export2Excel.js存在且node_modules下存在file-saver和xlsx文件夹即可~