Merge pull request #10157 from ulleo/table-pager

feat(图表): 明细表的分页,可以自定义输入跳转到多少页
This commit is contained in:
ulleo 2024-06-06 18:13:55 +08:00 committed by GitHub
commit 08efbe4f00
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 93 additions and 43 deletions

View File

@ -939,6 +939,9 @@ export default {
table_align_center: '居中',
table_align_right: '右对齐',
table_scroll_bar_color: '滚动条颜色',
table_pager_style: '分页器风格',
page_pager_simple: '精简',
page_pager_general: '常规',
draw_back: '收回',
senior: '高级',
senior_cfg: '高级设置',

View File

@ -92,6 +92,10 @@ declare interface ChartBasicStyle {
* 表格分页模式
*/
tablePageMode: 'page' | 'pull'
/**
* 表格分页器风格
*/
tablePageStyle: 'simple' | 'general'
/**
* 表格分页大小
*/

View File

@ -718,49 +718,61 @@ onMounted(() => {
</el-col>
</el-row>
<el-row :gutter="8">
<el-col :span="12" v-if="showProperty('tablePageMode')">
<el-form-item
:label="t('chart.table_page_mode')"
class="form-item"
:class="'form-item-' + themes"
>
<el-select
:effect="themes"
v-model="state.basicStyleForm.tablePageMode"
:placeholder="t('chart.table_page_mode')"
@change="changeBasicStyle('tablePageMode', true)"
>
<el-option :label="t('chart.page_mode_page')" value="page" />
<el-option :label="t('chart.page_mode_pull')" value="pull" />
</el-select>
</el-form-item>
</el-col>
<el-col
:span="12"
v-if="showProperty('tablePageMode') && state.basicStyleForm.tablePageMode === 'page'"
<el-form-item
v-if="showProperty('tablePageMode')"
:label="t('chart.table_page_mode')"
class="form-item"
:class="'form-item-' + themes"
>
<el-radio-group
:effect="themes"
v-model="state.basicStyleForm.tablePageMode"
@change="changeBasicStyle('tablePageMode', true)"
>
<el-form-item
:label="t('chart.table_page_size')"
class="form-item"
:class="'form-item-' + themes"
>
<el-select
:effect="themes"
v-model="state.basicStyleForm.tablePageSize"
:placeholder="t('chart.table_page_size')"
@change="changeBasicStyle('tablePageSize', true)"
>
<el-option
v-for="item in pageSizeOptions"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-radio :effect="themes" label="page">{{ t('chart.page_mode_page') }}</el-radio>
<el-radio :effect="themes" label="pull">{{ t('chart.page_mode_pull') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if="showProperty('tablePageMode')"
:label="t('chart.table_pager_style')"
class="form-item"
:class="'form-item-' + themes"
>
<el-radio-group
:effect="themes"
v-model="state.basicStyleForm.tablePageStyle"
@change="changeBasicStyle('tablePageStyle', true)"
>
<el-radio :effect="themes" label="simple">{{ t('chart.page_pager_simple') }}</el-radio>
<el-radio :effect="themes" label="general">{{ t('chart.page_pager_general') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if="
showProperty('tablePageMode') &&
state.basicStyleForm.tablePageMode === 'page' &&
state.basicStyleForm.tablePageStyle === 'simple'
"
:label="t('chart.table_page_size')"
class="form-item"
:class="'form-item-' + themes"
>
<el-select
:effect="themes"
v-model="state.basicStyleForm.tablePageSize"
:placeholder="t('chart.table_page_size')"
@change="changeBasicStyle('tablePageSize', true)"
>
<el-option
v-for="item in pageSizeOptions"
:key="item.value"
:label="item.name"
:value="item.value"
/>
</el-select>
</el-form-item>
<!--table end-->
<!--table2 start-->

View File

@ -1401,6 +1401,7 @@ export const DEFAULT_BASIC_STYLE: ChartBasicStyle = {
tableColumnWidth: 100,
tableFieldWidth: [],
tablePageMode: 'page',
tablePageStyle: 'simple',
tablePageSize: 20,
gaugeStyle: 'default',
colorScheme: 'default',

View File

@ -90,7 +90,9 @@ const state = reactive({
currentPage: 1
},
totalItems: 0,
showPage: false
showPage: false,
pageStyle: 'simple',
currentPageSize: 0
})
//
let chartData = shallowRef<Partial<Chart['data']>>({
@ -182,6 +184,12 @@ const setupPage = (chart: ChartObj, resetPageInfo?: boolean) => {
if (resetPageInfo) {
state.pageInfo.currentPage = 1
}
state.pageStyle = customAttr.basicStyle.tablePageStyle
if (state.pageStyle === 'general') {
if (state.currentPageSize == 0) {
state.currentPageSize = pageInfo.pageSize
}
}
}
const initScroll = () => {
@ -242,6 +250,16 @@ const handleCurrentChange = pageNum => {
const chart = { ...view.value, chartExtRequest: extReq }
calcData(chart, null, false)
}
const handlePageSizeChange = pageSize => {
let extReq = { pageSize: pageSize }
if (chartExtRequest.value) {
extReq = { ...extReq, ...chartExtRequest.value }
}
const chart = { ...view.value, chartExtRequest: extReq }
calcData(chart, null, false)
}
const pointClickTrans = () => {
if (embeddedCallBack.value === 'yes') {
trackClick('pointClick')
@ -457,6 +475,7 @@ const tabStyle = computed(() => [
<div class="table-page-info" :style="tabStyle">
<div>{{ state.pageInfo.total }}</div>
<el-pagination
v-if="state.pageStyle !== 'general'"
class="table-page-content"
layout="prev, pager, next"
v-model:page-size="state.pageInfo.pageSize"
@ -465,6 +484,17 @@ const tabStyle = computed(() => [
:total="state.pageInfo.total"
@update:current-page="handleCurrentChange"
/>
<el-pagination
v-else
class="table-page-content"
layout="prev, pager, next, sizes, jumper"
v-model:page-size="state.currentPageSize"
v-model:current-page="state.pageInfo.currentPage"
:pager-count="5"
:total="state.pageInfo.total"
@update:current-page="handleCurrentChange"
@update:page-size="handlePageSizeChange"
/>
</div>
</el-row>
<chart-error v-if="isError" :err-msg="errMsg" />