From 7cb8953728193293a35af6ce140009c3908779ad Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期四, 28 三月 2024 11:41:40 +0800
Subject: [PATCH] 可编辑表格的组件增加是否可配置表头的功能+增加如果配置了才可以配置表头,默认不可配的逻辑调整
---
src/components/makepager/TableCommonView.vue | 93 ++++++++++++++++++++++++++++++++++++++++------
1 files changed, 81 insertions(+), 12 deletions(-)
diff --git a/src/components/makepager/TableCommonView.vue b/src/components/makepager/TableCommonView.vue
index fb8bbf5..71a800f 100644
--- a/src/components/makepager/TableCommonView.vue
+++ b/src/components/makepager/TableCommonView.vue
@@ -1,12 +1,13 @@
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
<template>
- <div class="table-view">
+ <div class="table-view" v-loading="loading">
<el-table
ref="table"
border
:data="tableList.tableInfomation"
tooltip-effect="dark"
:height="'calc(100% - 0px)'"
+ :max-height="tableList.maxHeight"
style="width: 100%"
:lazy="tableList.lazy"
:show-summary="showSummary.show"
@@ -15,9 +16,11 @@
@selection-change="handleSelectionChange"
:header-cell-style="{ background: '#f1f3f8', color: '#000009', 'font-size': '12px', 'font-family': 'PingFangSC' }"
size="mini"
+ @row-click="tableRowClick"
+ :row-class-name="tableRowClassName"
>
+ <el-table-column v-if="selectBox" type="selection" width="40" :selectable="selectable"> </el-table-column>
<el-table-column v-if="tableList.selectIndex" type="index" label="搴忓彿" width="50"></el-table-column>
- <el-table-column v-if="selectBox" type="selection" width="40"> </el-table-column>
<el-table-column
v-for="(item, i) in tableList.tableColumn"
:key="i"
@@ -80,7 +83,7 @@
<div v-else-if="item.isProductName" class="product-view">
<ul v-if="scope.row.products && scope.row.products.length > 0">
<li v-for="(item, index) in scope.row.products" :key="index">
- <div :class="scope.row.products.length === 1 ? 'name-view no-bottom' : 'name-view'">
+ <div class="name-view">
{{ item.name }}
</div>
</li>
@@ -90,7 +93,7 @@
<div v-else-if="item.isProductAmount" class="product-view">
<ul v-if="scope.row.products && scope.row.products.length > 0">
<li v-for="(item, index) in scope.row.products" :key="index">
- <div :class="scope.row.products.length === 1 ? 'name-view no-bottom' : 'name-view'">
+ <div class="name-view">
{{ item.amount }}
</div>
</li>
@@ -100,7 +103,7 @@
<div v-else-if="item.isProductPrice" class="product-view">
<ul v-if="scope.row.products && scope.row.products.length > 0">
<li v-for="(item, index) in scope.row.products" :key="index">
- <div :class="scope.row.products.length === 1 ? 'name-view no-bottom' : 'name-view'">
+ <div class="name-view">
{{ item.price }}
</div>
</li>
@@ -110,13 +113,34 @@
<div v-else-if="item.isProductTotal" class="product-view">
<ul v-if="scope.row.products && scope.row.products.length > 0">
<li v-for="(item, index) in scope.row.products" :key="index">
- <div :class="scope.row.products.length === 1 ? 'name-view no-bottom' : 'name-view'">
+ <div class="name-view">
{{ item.total }}
</div>
</li>
</ul>
<div v-else class="no-product">{{ "--" }}</div>
</div>
+ <!-- 璋冪敤鏂规硶鏄剧ず鏂囧瓧 -->
+ <div v-else-if="item.isCallMethod">
+ <span :class="item.isClass ? item.getClassName(scope.row[item.prop], scope.row) : ''">{{
+ item.getCallMethod(scope.row[item.prop], scope.row)
+ }}</span>
+ </div>
+ <span
+ v-else-if="item.isClass"
+ :class="
+ item.isClass
+ ? item.getClassName(scope.row[item.prop], scope.row)
+ : ''
+ "
+ >{{
+ scope.row[item.prop]
+ ? scope.row[item.prop]
+ : scope.row[item.prop] === 0
+ ? scope.row[item.prop]
+ : "--"
+ }}</span
+ >
<span v-else>{{ scope.row[item.prop] ? scope.row[item.prop] : "--" }}</span>
</template>
</el-table-column>
@@ -127,8 +151,8 @@
</el-table>
<div class="overSpread1" v-show="iscolopen" @click="onMaskClick"></div>
- <div class="styleBtn">
- <i @click="checkCol()" class="label">...</i>
+ <div class="styleBtn" >
+ <i @click="checkCol()" v-if='colOpenShow' class="label">...</i>
<el-checkbox-group v-model="showcol" v-show="iscolopen" class="checkbox-group" @change="selectCheckBoxList">
<el-checkbox v-for="item in tableList.allcol" :label="item" :key="item">{{ item }} </el-checkbox>
</el-checkbox-group>
@@ -143,6 +167,11 @@
selectBox: {
type: Boolean,
default: false
+ },
+ // 鏄惁鍙互閰嶇疆鍒楄〃 琛ㄥご
+ colOpenShow: {
+ type: Boolean,
+ default: true,
},
tableList: {
type: Object,
@@ -168,8 +197,24 @@
mergeNumber: 1
}
}
+ },
+ // 閫変腑鐨勬牱寮�
+ selectClassRow: {
+ type: Object,
+ default: () => {
+ return {}
+ }
+ },
+ loading: {
+ type: Boolean,
+ default: false
+ },
+ selectBoxList: {
+ type: Array,
+ default: () => []
}
},
+
data() {
return {
iscolopen: false,
@@ -358,6 +403,27 @@
// 鍏叡锛堥攢鍞満浼氥�佹姤浠峰崟銆侀攢鍞�诲崟銆侀攢鍞瓙鍗曘�傘�傘�傦級
selCommonClick(row) {
this.$emit("selCommonClick", row)
+ },
+ // 琛岀偣鍑�
+ tableRowClick(row, column, event) {
+ this.$emit("tableRowClick", row, column, event)
+ },
+ // 鍗曢�夎鐩稿叧
+ tableRowClassName({ row }) {
+ if (Object.keys(this.selectClassRow).length > 0) {
+ if (row.id == this.selectClassRow.id) {
+ return "onSelect"
+ }
+ }
+ this.$emit("tableRowClassName", row)
+ },
+ selectable(row) {
+ let list = this.selectBoxList.map((item) => item.number)
+ if (list.findIndex((v) => v == row.number) == -1) {
+ return true
+ } else {
+ return false
+ }
}
}
}
@@ -384,8 +450,8 @@
margin-left: -10px;
margin-right: -11px;
li {
- height: 57px;
- line-height: 57px;
+ height: 22px;
+ line-height: 22px;
.name-view {
padding-left: 10px;
border-bottom: 1px solid #ebeef5;
@@ -394,9 +460,12 @@
border-bottom: 0;
}
}
+ li:last-child .name-view {
+ border-bottom: none;
+ }
.no-product {
- height: 57px;
- line-height: 57px;
+ height: 22px;
+ line-height: 22px;
}
}
}
--
Gitblit v1.8.0