123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- import { default } from '../../../../CABaggageData2.0/src/components/BackButton/index.vue';
- <template>
- <el-table
- v-el-table-infinite-scroll="load"
- :row-key="props.tableProperty.rowKey ? props.tableProperty.rowKey : tablePropertyDefault.rowKey"
- :row-style="rowStyle"
- :data="props.tableData"
- :height=" props.tableProperty.height ? props.tableProperty.height : tablePropertyDefault.height"
- :max-height=" props.tableProperty.maxHeight ? props.tableProperty.maxHeight : tablePropertyDefault.maxHeight"
- :stripe="props.tableProperty.stripe ? props.tableProperty.stripe : tablePropertyDefault.stripe"
- :border="props.tableProperty.border ? props.tableProperty.border : tablePropertyDefault.border"
- :highlight-current-row="props.tableProperty.highlightCurrentRow ? props.tableProperty.highlightCurrentRow : tablePropertyDefault.highlightCurrentRow"
- :header-cell-class-name=" props.tableProperty.headerRowClassName ? props.tableProperty.headerRowClassName : tablePropertyDefault.headerRowClassName"
- :tooltip-effect="props.tableProperty.tooltipEffect ? props.tableProperty.tooltipEffect : tablePropertyDefault.tooltipEffect"
- :show-summary="props.tableProperty.showSummary ? props.tableProperty.showSummary : tablePropertyDefault.showSummary"
- :row-class-name="tableRowClassName"
- :cell-class-name="cellClassName"
- >
- <!-- label-class-name 可通过 tableHeader中传入class来修改某一个或某一类表头的样式-->
- <el-table-column
- class="infinite-list-item"
- v-for="(items, index) in props.tableHeader"
- :key="index"
- :label="items.label"
- :prop="items.key"
- :width="props.tableColumnProperty.width"
- :sortable="items.sortable ? items.sortable : props.tableColumnProperty.sortable"
- :show-overflow-tooltip="props.tableColumnProperty.showOverflowTooltip"
- :align="items.align ? items.align : props.tableColumnProperty.align"
- :header-align="items.headerAlign ? items.headerAlign : props.tableColumnProperty.headerAlign"
- :label-class-name="items.lableClass ? items.lableClass : ''"
- >
- <template #default="scope">
- <!-- 枚举值则为 items.key+'-enum' -->
- {{ scope.row[items.key+'-enum'] ? scope.row[items.key+'-enum']:scope.row[items.key]}}
- </template>
- </el-table-column>
- <el-table-column
- v-if="props.tableBtnGroup.length"
- label="操作"
- :align="props.tableColumnProperty.align"
- :width="BtnGroupWidth"
- >
- <template #default="scope">
- <el-button
- v-for="(btn, index) in props.tableBtnGroup"
- :key="index"
- size="small"
- @click="handleClick(scope.$index, scope.row, btn.param)"
- :class="btn.className"
- >{{ btn.name }}</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- <!-- <ul v-infinite-scroll="load" class="infinite-list" style="overflow: auto">
- <li v-for="i in count" :key="i" class="infinite-list-item">{{ i }}</li>
- </ul> -->
- </template>
- <script setup lang="ts">
- //表格参数
- const tablePropertyDefault = {
- height: "100%",
- maxHeight: "100%",
- stripe: true,
- border: true,
- highlightCurrentRow: false,
- rowClassName: "rowClass",
- headerRowClassName: "headerRowClass",
- tooltipEffect: "light",
- showSummary: false,
- rowKey: "",
- };
- const props = defineProps({
- //表头参数数组
- tableHeader: {
- type: Array,
- default: [],
- },
- //表格参数
- tableProperty: {
- type: Object,
- default: {
- height: "100%",
- maxHeight: "100%",
- stripe: true,
- border: true,
- highlightCurrentRow: false,
- rowClassName: "rowClass",
- headerRowClassName: "headerRowClass",
- tooltipEffect: "light",
- showSummary: false,
- rowKey: "",
- },
- },
- //公共表头参数
- tableColumnProperty: {
- type: Object,
- default: {
- width: "",
- fixed: "",
- sortable: false,
- showOverflowTooltip: false,
- align: "center",
- headerAlign: "",
- },
- },
- //操作栏按钮组
- tableBtnGroup: {
- type: Array,
- default: [
- // {
- // name:"编辑", //按钮名称
- // className:"editBtn", //按钮class样式 可以在父组件中定义好此class样式
- // param:2 //按钮类型参数
- // }
- ],
- },
- //表格数据
- tableData: {
- type: Array,
- default: [],
- },
- //操作栏宽度
- BtnGroupWidth:{
- type:String,
- default:""
- }
- });
- //向父组件传参 btnClick:点击按钮后 load 触发下拉加载 cellClass 修改某一行class的触发条件
- const emit = defineEmits(["btnClick", "load","cellClass"]);
- //按钮点击index为当前行序号 row 为当前行 param按钮类型判断参数由父组件传过来
- const handleClick = (index: number, row: Object, param: number) => {
- emit("btnClick", index, row, param);
- };
- //行公共样式
- const rowStyle = (row: Object, rowIndex: number) => {
- let styleJson: Object = {
- height: "50px",
- fontSize: "14px",
- color: "#101116",
- };
- return styleJson;
- };
- //表格行class样式 可通过父组件直接传class名称修改当前行样式
- const tableRowClassName = (row: Object, rowIndex: number) => {
- if (row.row.rowClass) {
- return row.row.rowClass;
- }
- return "";
- };
- //给某一格加class
- const cellClass=ref("")
- const cellClassName = (row: Object) => {
- emit("cellClass",row)
- return cellClass.value;
- };
- //滚动分页加载
- const load = () => {
- emit("load", true);
- };
- defineExpose({
- cellClass
- })
- </script>
- <style scoped lang="scss">
- .infinite-list {
- height: 300px;
- padding: 0;
- margin: 0;
- list-style: none;
- }
- .infinite-list .infinite-list-item {
- display: flex;
- align-items: center;
- justify-content: center;
- height: 50px;
- background: var(--el-color-primary-light-9);
- margin: 10px;
- color: var(--el-color-primary);
- }
- .infinite-list .infinite-list-item + .list-item {
- margin-top: 10px;
- }
- ::v-deep.el-table .rowClass {
- height: 40px;
- font-size: 14px;
- color: #101116;
- }
- ::v-deep.el-table .headerRowClass {
- height: 40px;
- background: #ffffff;
- font-size: 14px;
- font-weight: bold;
- color: #101116;
- }
- ::v-deep.el-table .editBtn {
- background: #ffffff;
- border: 1px solid #f79ec6;
- box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.06);
- border-radius: 4px;
- font-size: 12px;
- font-weight: 400;
- color: #ac014d;
- }
- ::v-deep.el-table .delBtn {
- background: #eb2f3b;
- box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.06);
- border-radius: 4px;
- font-size: 12px;
- font-weight: 400;
- color: #ffffff;
- border: none;
- }
- </style>
|