|
|
@@ -29,6 +29,12 @@ const props = withDefaults(
|
|
|
thTrClass?: string
|
|
|
tdTrClass?: string
|
|
|
rowSpanSuffix?: string //rowsapn 的字段后缀 后台应该组成 `${字段}${后缀}`
|
|
|
+ isTree?: boolean
|
|
|
+ expandDepth?: number
|
|
|
+ intervalLeft?: number
|
|
|
+ keyField?: string
|
|
|
+ parentField?: string
|
|
|
+ childrenField?: string
|
|
|
}>(),
|
|
|
{
|
|
|
selectedItems: () => {
|
|
|
@@ -44,7 +50,7 @@ const props = withDefaults(
|
|
|
fixedNumber: 0,
|
|
|
fixedRightNumber: 0,
|
|
|
emptyTableText: "未查询到数据",
|
|
|
- tableClass: "table-bordered table-rounded table-striped table-row-dashed",
|
|
|
+ tableClass: "table-bordered table-rounded",
|
|
|
rowSpanSuffix: "_rowSpan",
|
|
|
}
|
|
|
)
|
|
|
@@ -131,109 +137,129 @@ defineExpose({
|
|
|
})
|
|
|
</script>
|
|
|
<template>
|
|
|
- <TableFixed
|
|
|
- v-if="props.fixedColumn && props.fixedNumber > 0"
|
|
|
- @onSort="onSort"
|
|
|
- @on-select-all="onSelectAll"
|
|
|
- @on-change="onSelectItemsChange"
|
|
|
- :table="table"
|
|
|
- :header="header"
|
|
|
- :data="data"
|
|
|
- v-model:selected-items="selectedItems"
|
|
|
- :fixed-number="fixedNumber"
|
|
|
- :checkbox-all-value="check"
|
|
|
- :checkbox-field="checkboxField"
|
|
|
- :has-checkbox="hasCheckbox"
|
|
|
- :check-multiple="checkMultiple"
|
|
|
- :multiple-page-check="multiplePageCheck"
|
|
|
- :sort-field="sortField"
|
|
|
- :sort-order="sortOrder"
|
|
|
- :table-class="tableClass"
|
|
|
- :header-class="headerClass"
|
|
|
- :th-tr-class="thTrClass"
|
|
|
- :row-span-suffix="rowSpanSuffix"
|
|
|
- :body-class="bodyClass"
|
|
|
- :td-tr-class="tdTrClass"
|
|
|
- >
|
|
|
- <template v-for="(_, name) in $slots" v-slot:[name]="{ row: item }">
|
|
|
- <slot :name="name" :row="item" />
|
|
|
- </template>
|
|
|
- </TableFixed>
|
|
|
-
|
|
|
- <div class="table-responsive position-relative">
|
|
|
- <table
|
|
|
- ref="table"
|
|
|
- class="table align-middle fs-6 gy-5 no-footer"
|
|
|
- :class="loading ? `overlay overlay-block ${tableClass}` : `${tableClass}`"
|
|
|
- :style="tableStyle"
|
|
|
+ <div class="table-box">
|
|
|
+ <TableFixed
|
|
|
+ v-if="props.fixedColumn && props.fixedNumber > 0"
|
|
|
+ @onSort="onSort"
|
|
|
+ @on-select-all="onSelectAll"
|
|
|
+ @on-change="onSelectItemsChange"
|
|
|
+ :table="table"
|
|
|
+ :header="header"
|
|
|
+ :data="data"
|
|
|
+ v-model:selected-items="selectedItems"
|
|
|
+ :fixed-number="fixedNumber"
|
|
|
+ :checkbox-all-value="check"
|
|
|
+ :checkbox-field="checkboxField"
|
|
|
+ :has-checkbox="hasCheckbox"
|
|
|
+ :check-multiple="checkMultiple"
|
|
|
+ :multiple-page-check="multiplePageCheck"
|
|
|
+ :sort-field="sortField"
|
|
|
+ :sort-order="sortOrder"
|
|
|
+ :table-class="tableClass"
|
|
|
+ :header-class="headerClass"
|
|
|
+ :th-tr-class="thTrClass"
|
|
|
+ :row-span-suffix="rowSpanSuffix"
|
|
|
+ :body-class="bodyClass"
|
|
|
+ :td-tr-class="tdTrClass"
|
|
|
+ :is-tree="isTree"
|
|
|
+ :interval-left="intervalLeft"
|
|
|
+ :key-field="keyField"
|
|
|
+ :children-field="childrenField"
|
|
|
+ :parent-field="parentField"
|
|
|
+ :expand-depth="expandDepth"
|
|
|
>
|
|
|
- <TableHeadRow
|
|
|
- @onSort="onSort"
|
|
|
- @on-select-all="onSelectAll"
|
|
|
- :checkbox-all-value="check"
|
|
|
- :has-checkbox="hasCheckbox"
|
|
|
- :check-multiple="checkMultiple"
|
|
|
- :sort-field="sortField"
|
|
|
- :sort-order="sortOrder"
|
|
|
- :header="header"
|
|
|
- :fixed-column="fixedColumn"
|
|
|
- :fixed-number="fixedNumber"
|
|
|
- :fixed-right-number="fixedRightNumber"
|
|
|
- :header-class="headerClass"
|
|
|
- :th-tr-class="thTrClass"
|
|
|
- >
|
|
|
- <template v-for="(_, name) in $slots" #[name]="{ row: item }">
|
|
|
- <slot v-if="name.toString().endsWith('_header')" :name="name" :row="item" />
|
|
|
- </template>
|
|
|
- </TableHeadRow>
|
|
|
- <TableBodyRow
|
|
|
- v-if="data.length !== 0"
|
|
|
- @on-change="onSelectItemsChange"
|
|
|
- v-model:currently-selected-items="selectedItems"
|
|
|
- :check-multiple="checkMultiple"
|
|
|
- :data="data"
|
|
|
- :header="header"
|
|
|
- :has-checkbox="hasCheckbox"
|
|
|
- :checkbox-field="checkboxField"
|
|
|
- :fixed-column="fixedColumn"
|
|
|
- :fixed-number="fixedNumber"
|
|
|
- :fixed-right-number="fixedRightNumber"
|
|
|
- :body-class="bodyClass"
|
|
|
- :td-tr-class="tdTrClass"
|
|
|
- :row-span-suffix="rowSpanSuffix"
|
|
|
+ <template v-for="(_, name) in $slots" v-slot:[name]="{ row: item }">
|
|
|
+ <slot :name="name" :row="item" />
|
|
|
+ </template>
|
|
|
+ </TableFixed>
|
|
|
+
|
|
|
+ <div class="table-responsive">
|
|
|
+ <table
|
|
|
+ ref="table"
|
|
|
+ class="table align-middle fs-6 gy-5 no-footer"
|
|
|
+ :class="loading ? `overlay overlay-block ${tableClass}` : `${tableClass}`"
|
|
|
+ :style="tableStyle"
|
|
|
>
|
|
|
- <template v-for="(_, name) in $slots" v-slot:[name]="{ row: item }">
|
|
|
- <slot v-if="!name.toString().endsWith('_header')" :name="name" :row="item" />
|
|
|
- </template>
|
|
|
- </TableBodyRow>
|
|
|
- <tr v-if="loading" style="height: 50px"></tr>
|
|
|
- </table>
|
|
|
- <template v-if="data.length == 0 && !loading">
|
|
|
- <div class="text-center text-primary mt-10 mb-5 fs-4">
|
|
|
- {{ emptyTableText }}
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <Loading v-if="loading" />
|
|
|
+ <TableHeadRow
|
|
|
+ @onSort="onSort"
|
|
|
+ @on-select-all="onSelectAll"
|
|
|
+ :checkbox-all-value="check"
|
|
|
+ :has-checkbox="hasCheckbox"
|
|
|
+ :check-multiple="checkMultiple"
|
|
|
+ :sort-field="sortField"
|
|
|
+ :sort-order="sortOrder"
|
|
|
+ :header="header"
|
|
|
+ :fixed-column="fixedColumn"
|
|
|
+ :fixed-number="fixedNumber"
|
|
|
+ :fixed-right-number="fixedRightNumber"
|
|
|
+ :header-class="headerClass"
|
|
|
+ :th-tr-class="thTrClass"
|
|
|
+ >
|
|
|
+ <template v-for="(_, name) in $slots" #[name]="{ row: item }">
|
|
|
+ <slot v-if="name.toString().endsWith('_header')" :name="name" :row="item" />
|
|
|
+ </template>
|
|
|
+ </TableHeadRow>
|
|
|
+ <TableBodyRow
|
|
|
+ v-if="data.length !== 0"
|
|
|
+ @on-change="onSelectItemsChange"
|
|
|
+ v-model:currently-selected-items="selectedItems"
|
|
|
+ :check-multiple="checkMultiple"
|
|
|
+ :data="data"
|
|
|
+ :header="header"
|
|
|
+ :has-checkbox="hasCheckbox"
|
|
|
+ :checkbox-field="checkboxField"
|
|
|
+ :fixed-column="fixedColumn"
|
|
|
+ :fixed-number="fixedNumber"
|
|
|
+ :fixed-right-number="fixedRightNumber"
|
|
|
+ :body-class="bodyClass"
|
|
|
+ :td-tr-class="tdTrClass"
|
|
|
+ :row-span-suffix="rowSpanSuffix"
|
|
|
+ :is-tree="isTree"
|
|
|
+ :interval-left="intervalLeft"
|
|
|
+ :key-field="keyField"
|
|
|
+ :parent-field="parentField"
|
|
|
+ :children-field="childrenField"
|
|
|
+ :expand-depth="expandDepth"
|
|
|
+ >
|
|
|
+ <template v-for="(_, name) in $slots" v-slot:[name]="{ row: item }">
|
|
|
+ <slot v-if="!name.toString().endsWith('_header')" :name="name" :row="item" />
|
|
|
+ </template>
|
|
|
+ </TableBodyRow>
|
|
|
+ <tr v-if="loading" style="height: 50px"></tr>
|
|
|
+ </table>
|
|
|
+ <template v-if="data.length == 0 && !loading">
|
|
|
+ <div class="text-center text-primary mt-10 mb-5 fs-4">
|
|
|
+ {{ emptyTableText }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <Loading v-if="loading" />
|
|
|
+ </div>
|
|
|
+ <TableFixedRight
|
|
|
+ v-if="props.fixedColumn && props.fixedRightNumber > 0"
|
|
|
+ @onSort="onSort"
|
|
|
+ @on-select-all="onSelectAll"
|
|
|
+ :table="table"
|
|
|
+ :fixed-number="fixedRightNumber"
|
|
|
+ :header="header"
|
|
|
+ :data="data"
|
|
|
+ :sort-field="sortField"
|
|
|
+ :sort-order="sortOrder"
|
|
|
+ :table-class="tableClass"
|
|
|
+ :header-class="headerClass"
|
|
|
+ :th-tr-class="thTrClass"
|
|
|
+ :body-class="bodyClass"
|
|
|
+ :td-tr-class="tdTrClass"
|
|
|
+ :row-span-suffix="rowSpanSuffix"
|
|
|
+ :is-tree="isTree"
|
|
|
+ :interval-left="intervalLeft"
|
|
|
+ :key-field="keyField"
|
|
|
+ :parent-field="parentField"
|
|
|
+ :children-field="childrenField"
|
|
|
+ :expand-depth="expandDepth"
|
|
|
+ >
|
|
|
+ <template v-for="(_, name) in $slots" #[name]="{ row: item }">
|
|
|
+ <slot :name="name" :row="item" />
|
|
|
+ </template>
|
|
|
+ </TableFixedRight>
|
|
|
</div>
|
|
|
- <TableFixedRight
|
|
|
- v-if="props.fixedColumn && props.fixedRightNumber > 0"
|
|
|
- @onSort="onSort"
|
|
|
- @on-select-all="onSelectAll"
|
|
|
- :table="table"
|
|
|
- :fixed-number="fixedRightNumber"
|
|
|
- :header="header"
|
|
|
- :data="data"
|
|
|
- :sort-field="sortField"
|
|
|
- :sort-order="sortOrder"
|
|
|
- :table-class="tableClass"
|
|
|
- :header-class="headerClass"
|
|
|
- :th-tr-class="thTrClass"
|
|
|
- :body-class="bodyClass"
|
|
|
- :td-tr-class="tdTrClass"
|
|
|
- :row-span-suffix="rowSpanSuffix"
|
|
|
- >
|
|
|
- <template v-for="(_, name) in $slots" #[name]="{ row: item }">
|
|
|
- <slot :name="name" :row="item" />
|
|
|
- </template>
|
|
|
- </TableFixedRight>
|
|
|
</template>
|