<template>
|
<div class="layout-container">
|
<div class="view-container">
|
<div class="grid-search">
|
<div class="fiexd-search-box" v-show="true">
|
<vol-form ref="searchForm" style="padding: 0 15px" :label-width="100" :formRules="searchFormOptions"
|
:formFields="searchFormFields">
|
</vol-form>
|
<div v-if="fiexdSearchForm" class="fs-line"></div>
|
</div>
|
<div class="view-header">
|
<div class="desc-text">
|
<i class="el-icon-s-grid" />
|
<span>{{ title }}</span>
|
</div>
|
<div class="notice">
|
<a class="text" title="{{title}}"></a>
|
</div>
|
|
<div class="btn-group">
|
<template :key="bIndex" v-for="(btn, bIndex) in Mybuttons.slice(0, 6)">
|
<el-button :type="btn.type" size="small" :dark="btn.dark" :plain="btn.plain"
|
@click="changeDropdown(btn.name)">
|
<i :class="btn.icon"></i>
|
{{ btn.name }}
|
</el-button>
|
</template>
|
<el-dropdown size="small" @click="changeDropdown"
|
v-if="Mybuttons.length > 5">
|
<el-button type="primary" plain size="small">
|
更多<i class="el-icon-arrow-down el-icon--right"></i>
|
</el-button>
|
<template #dropdown>
|
<el-dropdown-menu>
|
<el-dropdown-item @click="changeDropdown(item.name)" :name="item.name"
|
v-show="!item.hidden" v-for="(item, dIndex) in Mybuttons.slice(6)" :key="dIndex">
|
<i :class="item.icon"></i>
|
{{ item.name }}
|
</el-dropdown-item>
|
</el-dropdown-menu>
|
</template>
|
</el-dropdown>
|
</div>
|
</div>
|
</div>
|
|
<div class="grid-container">
|
<el-table ref="table" stripe :data="tableData" :height="heigth" style="width: 100%" border
|
@selection-change="selectionChange">
|
<el-table-column type="selection" width="55" />
|
<el-table-column prop="order_id" label="主键" v-if="false"></el-table-column>
|
<el-table-column type="expand">
|
<template #default="props">
|
<h4>明细数据</h4>
|
<div m="4">
|
<el-table stripe :data="props.row.boxingInfoDetails" max-height="400"
|
style="width: 100%" border>
|
<el-table-column label="序号" type="index" fixed="left" width="55"></el-table-column>
|
<el-table-column :key="index" v-for="(item, index) in detailColumns"
|
:label="item.title" :prop="item.field" :width="item.width"
|
show-overflow-tooltip></el-table-column>
|
</el-table>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column v-for="(item, index) in columns" :key="index" :label="item.title"
|
:prop="item.field" sortable="true" show-overflow-tooltip>
|
<template #default="scope" v-if="item.type == 'tag'">
|
<el-tag size="small">
|
{{ getDictionary(scope.row, item) }}
|
</el-tag>
|
</template>
|
</el-table-column>
|
</el-table>
|
<template v-if="true">
|
<div class="block pagination" key="pagination-01" style="display: flex">
|
<div style="flex: 1"></div>
|
<el-pagination key="pagination-02" @size-change="handleSizeChange"
|
@current-change="handleCurrentChange" :current-page="currentPage1.page"
|
:page-sizes="currentPage1.sizes" :page-size="currentPage1.size"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="currentPage1.total"></el-pagination>
|
</div>
|
</template>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import VolForm from "../VolForm.vue";
|
import VolBox from "../VolBox.vue";
|
import VolTable from "../VolTable.vue";
|
import buttons from "@/api/buttons";
|
import methodss from './methodsDetail.jsx';
|
export default {
|
components: {
|
'vol-form': VolForm,
|
'vol-table': VolTable,
|
'vol-box': VolBox
|
},
|
|
name: 'CustomTableComponent',
|
data() {
|
return {
|
tableData: [],
|
Mybuttons: [],
|
currentPage1: {
|
sort: "",
|
order: "desc",
|
Foots: "",
|
total: 0,
|
// 2020.08.29增加自定义分页条大小
|
sizes: [30, 60, 100, 120],
|
size: 30, // 默认分页大小
|
Wheres: [],
|
page: 1,
|
rows: 30,
|
},
|
selectRows: [],
|
};
|
},
|
props: {
|
url: String,
|
title: String,
|
columns: {
|
type: Array,
|
default: []
|
},
|
detailColumns: Array,
|
searchFormOptions: Object,
|
searchFormFields: Array,
|
dropdownItems: Array,
|
heigth: String,
|
table: String,
|
},
|
methods: {
|
...methodss.methods,
|
...methodss.data,
|
changeDropdown(btnName, v1) {
|
let button = this.dropdownItems.filter((x) => {
|
return x.name == btnName
|
})
|
if (button && button.length > 0) {
|
button[0].onClick.apply(this)
|
}
|
},
|
handleSizeChange(val) {
|
this.currentPage1.pageSize = val;
|
},
|
handleCurrentChange(val) {
|
this.currentPage1.currentPage = val;
|
},
|
|
getPageData() {
|
// 获取分页数据
|
var query = this.getSearchParameters();
|
let param = {
|
page: this.currentPage1.page,
|
rows: this.currentPage1.rows,
|
sort: this.currentPage1.sort,
|
order: this.currentPage1.order,
|
wheres: "", // 查询条件,格式为[{ name: "字段", value: "xx" }]
|
};
|
param = Object.assign(param, query);
|
param.wheres = JSON.stringify(param.wheres);
|
this.http.post(this.url, param, "查询中").then((x) => {
|
this.tableData = x.rows;
|
this.currentPage1.total = x.total;
|
});
|
},
|
search() {
|
this.getPageData();
|
},
|
|
getSearchParameters() {
|
//获取查询参数
|
let query = { wheres: [] };
|
for (const key in this.searchFormFields) {
|
let value = this.searchFormFields[key];
|
if (this.emptyValue(value)) continue;
|
|
if (typeof value == "number") {
|
value = value + "";
|
}
|
let displayType = this.getSearchItem(key);
|
|
//联级只保留选中节点的最后一个值
|
if (displayType == "cascader") {
|
//查询下面所有的子节点,如:选中的是父节点,应该查询下面所有的节点数据--待完
|
value = value.length ? value[value.length - 1] + "" : "";
|
}
|
//2021.05.02增加区间查询
|
if (
|
typeof value == "string" ||
|
["date", "datetime", "range"].indexOf(displayType) == -1
|
) {
|
query.wheres.push({
|
name: key,
|
value:
|
typeof value == "string" ? (value + "").trim() : value.join(","),
|
displayType: displayType,
|
});
|
continue;
|
}
|
for (let index = 0; index < value.length; index++) {
|
if (!this.emptyValue(value[index])) {
|
query.wheres.push({
|
name: key,
|
value: (value[index] + "").trim(),
|
displayType: (() => {
|
if (["date", "datetime", "range"].indexOf(displayType) != -1) {
|
return index ? "lessorequal" : "thanorequal";
|
}
|
return displayType;
|
})(),
|
});
|
}
|
}
|
}
|
return query;
|
},
|
|
getSearchItem(field) {
|
//获取查询的参数
|
let data;
|
for (let index = 0; index < this.searchFormOptions.length; index++) {
|
if (data) return data.type;
|
const item = this.searchFormOptions[index];
|
data = item.find((x) => {
|
return x.field == field;
|
});
|
}
|
|
return (data || {}).type;
|
},
|
|
emptyValue(value) {
|
if (typeof value == "string" && value.trim() === "") {
|
return true;
|
}
|
if (value instanceof Array && !value.length) {
|
return true;
|
}
|
return value === null || value === undefined || value === "";
|
},
|
|
|
filterPermission(tableName, permission) {
|
//2021.03.19判断是否有某个表的按钮权限
|
//:["Search","Add","Delete","Update","Import","Export","Upload","Audit"]
|
const _result = (this.$store.state.permission || []).find((x) => {
|
return x.url == '/' + tableName
|
})
|
return _result
|
},
|
getButtons() {
|
console.log(buttons);
|
buttons.forEach(element => {
|
this.dropdownItems.push(element);
|
});
|
}
|
},
|
created() {
|
this.getPageData();
|
let permission = this.filterPermission(this.table);
|
console.log(permission);
|
this.getButtons();
|
this.Mybuttons = this.dropdownItems.filter(item => permission.permission.includes(item.value));
|
}
|
};
|
</script>
|
|
<style>
|
@import "./ViewGrid.less";
|
|
.pagination {
|
text-align: right;
|
padding: 2px 28px;
|
border: 1px solid #eee;
|
border-top: 0px;
|
}
|
</style>
|