Yb-components Yb-components
首页
开发规范
yb-cli
  • 开发指南
  • 更新日志
  • 组件
关于
首页
开发规范
yb-cli
  • 开发指南
  • 更新日志
  • 组件
关于
  • 开发指南
  • 更新日志
  • 数据展示

    • YbTable 表格
    • YbCardList 卡片列表
    • YbTree 树
    • YbCascaderList 级联列表
    • YbSimpleTablePage 分页查询表格
      • YbSimpleCardPage 分页卡片列表
      • YbBasicProfile 基础详情数据展示
      • YbOutscrollLayout 固定在滚动区域外
      • YbOutscrollTree 固定在滚动区域外的Tree
      • YbInfoLayout 信息页布局
      • YbEditLayout 编辑页布局
    • 数据录入

      • YbRowsPopoverForm 浮层多行表单
      • YbFormily 配置式表单
      • YbForm 表单
      • YbRowsForm 多行表单
      • YbCollapseForm 折叠表单
      • YbQueryFilter 筛选表单
      • YbFilesSelect 文件选择器
      • YbRangeWrapper 范围结构
      • YbRangeDatepicker 日期范围
      • YbRange 范围
      • YbFormulaInput 简单运算公式输入
      • YbCron 表达式生成器
      • YbTreeSelect 树型选择器
      • YbInputgroupWrapper 复合组
      • YbThemeSelect 主题风格选择器
      • YbSelect 选择器
      • YbPaginationSelect 分页选择器
      • YbCodemirror 代码编辑器
      • YbCodemirrorSql SQL编辑器
      • YbCodemirrorJson JSON编辑器
      • YbCodemirrorXml XML编辑器
      • YbCombiDatepicker 组合时间
      • YbQuarterPicker 季度选择器
      • YbRangeQuarterPicker 季度范围选择器
      • YbConditionSelect 条件选择器
      • YbCheckboxGroup 多选框组
      • YbIconSelect 选择器
      • YbTagsInput 标签输入框
    • 其他组件

      • YbBallLoading 加载中
      • YbSymbolIcon 多色小图标
      • YbKeybuttonsPopover
      • YbPercentBattery 电池百分比
      • YbAffix 固钉
      • YbPagination 分页器
      • YbCollapse 折叠面板
      • YbScrollTool 滚动工具
    • 物料

      • YbMainSideMenu 侧栏菜单
      • YbLoadRemote 远程应用加载
      • YbLayoutPro 布局
      • YbMainPro 主页
      • YbAppMain 应用主页
      • YbAppLogin 普通登录页
      • YbAppPortal Portal登录页
    • 指令

      • v-fixed-in-scroller
    • Mixins

      • pageList_mixin
      • getScopedSlot_mixin
      • editFormPage_mixin
      • uploadProgressPage_mixin
      • rowActions_mixin
      • rowDeletes_mixin
      • drawerToRouterTab_mixin
    • 实验室

      • YbSwiper 轮播
    • 组件
    • 数据展示
    zougt
    2021-09-28

    YbSimpleTablePage 分页查询表格

    查询表单、数据表格、分页器集一体的带分页等查询逻辑的组件

    # 基本使用

    表格默认只展示前面的 6 列,启用 storageKey 后可以配置【表格展示列】【是否开启纵向边框】,目的是希望在界面展示设计上尽量不出现横向滚动条。
    设置 storageKey 后,表格配置内容均保存至 localStorage,页面刷新会自动读取缓存配置。 当 columns[].visible,设置为 true 时,该字段会默认展示,若设置字段超出 6 个,则后面字段设置无效,可通过表格配置弹窗修改展示状态 当 columns[].visibleForce ,设置为 true 时,该字段会一直默认展示,且无法改变字段展示状态

    暂无数据
    共 0 条
    • 8条/页
    • 10条/页
    • 20条/页
    • 30条/页
    • 40条/页
    • 50条/页
    • 100条/页
    • 200条/页
    • 300条/页
    • 400条/页
    • 500条/页

    无数据

    • 1
    前往
    页
    蓝蓝
    提示
    <template>
        <div class="app-base-bg" style="padding:10px;">
            <yb-simple-table-page
                ref="page"
                :searchForm="searchForm"
                :table="table"
                :pagination="pagination"
                :getTableData="getTableData"
                :defaultPageSize="3"
                storageKey="yb-simple-table-page-1"
            >
                <!-- 表单控件slots "searchForm-"开头的slotName(与searchForm.formItems[].prop拼接) -->
                <template v-slot:searchForm-formItems="{ formModel, formItem }">
                    <el-input
                        v-model="formModel[formItem.prop]"
                        clearable
                    ></el-input>
                </template>
                <!-- 在表单后面追加按钮 -->
                <template v-slot:searchForm-other-buttons="">
                    <el-button type="primary">新增</el-button>
                </template>
                <!-- 表格列slots "table-"开头的slotName(与table.columns[].prop拼接)-->
                <template v-slot:table-action-buttons="{ table }">
                    <el-button type="default" size="mini">查看</el-button>
                    <el-button type="primary" size="mini" @click="openDrawer"
                        >修改</el-button
                    >
                    <el-button type="danger" size="mini" @click="openDialog"
                        >删除</el-button
                    >
                </template>
            </yb-simple-table-page>
            <el-drawer :visible.sync="formViewerDrawer" size="94%" append-to-body>
                <template v-slot:title>
                    <span style="margin-left: 10px">蓝蓝</span>
                </template>
                <div style="margin: 0 20px 20px" ref="formApp"></div>
            </el-drawer>
            <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
                <span>这是一段信息</span>
                <span slot="footer" class="dialog-footer">
                    <el-button @click="dialogVisible = false">取 消</el-button>
                    <el-button type="primary" @click="dialogVisible = false"
                        >确 定</el-button
                    >
                </span>
            </el-dialog>
        </div>
    </template>
    <script>
        const tableData = JSON.parse(
            `[{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老李","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"姓名","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"}]`
        ).map((item, i) => ({ ...item, id: i + 1 }));
        export default {
            data() {
                const formItems = [
                    {
                        label: '病案号',
                        prop: 'medicalRecordNumber',
                    },
                    {
                        label: '姓名',
                        prop: 'patientName',
                        defaultValue: '1',
                    },
                    {
                        label: '',
                        prop: 'other-buttons',
                        // 不包含在栅格布局中
                        excludeSpans: true,
                        // 排放在默认的查询按钮之后
                        after: true,
                    },
                ];
                return {
                    dialogVisible: false,
                    formViewerDrawer: false,
                    pagination: {},
                    searchForm: {
                        formItems,
                        spans: { xl: 8, lg: 12 },
                    },
                    table: {
                        'highlight-current-row': true,
                        columns: [
                            {
                                label: '病案号',
                                prop: 'medicalRecordNumber',
                                'show-overflow-tooltip': true,
                                width: '120px',
                            },
                            {
                                label: '姓名',
                                prop: 'patientName',
                            },
                            {
                                label: '信息分类',
                                prop: 'projectTypeName',
    
                                'show-overflow-tooltip': true,
                            },
                            {
                                label: '操作',
                                prop: 'action-buttons',
                                width: '220px',
                                visibleForce: true,
                            },
                        ],
                    },
                };
            },
            methods: {
                getTableData(query) {
                    return Promise.resolve({
                        total: tableData.length,
                        tableData: tableData.slice(
                            (query.currentPage - 1) * query.pageSize,
                            query.currentPage * query.pageSize
                        ),
                    });
                },
                openDrawer() {
                    this.formViewerDrawer = true;
                },
                openDialog() {
                    this.dialogVisible = true;
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    显示 复制 复制

    # 调整 formItems 布局

    暂无数据
    共 0 条
    • 8条/页
    • 10条/页
    • 20条/页
    • 30条/页
    • 40条/页
    • 50条/页
    • 100条/页
    • 200条/页
    • 300条/页
    • 400条/页
    • 500条/页

    无数据

    • 1
    前往
    页
    蓝蓝
    提示
    <template>
        <div class="app-base-bg" style="padding:10px;">
            <yb-simple-table-page
                ref="page"
                :searchForm="searchForm"
                :table="table"
                :pagination="pagination"
                :getTableData="getTableData"
                :defaultPageSize="3"
                isAffixPagination
            >
                <!-- 表单控件slots "searchForm-"开头的slotName(与searchForm.formItems[].prop拼接) -->
                <template v-slot:searchForm-formItems="{ formModel, formItem }">
                    <el-input
                        v-model="formModel[formItem.prop]"
                        clearable
                    ></el-input>
                </template>
                <!-- 在表单后面追加按钮 -->
                <template v-slot:searchForm-searchFormButtonsAppended="">
                    <el-button type="primary">新增</el-button>
                    <el-button type="primary">导入</el-button>
                </template>
                <!-- 表格列slots "table-"开头的slotName(与table.columns[].prop拼接)-->
                <template v-slot:table-action-buttons="{ table }">
                    <el-button type="default" size="mini">查看</el-button>
                    <el-button type="primary" size="mini" @click="openDrawer"
                        >修改</el-button
                    >
                    <el-button type="danger" size="mini" @click="openDialog"
                        >删除</el-button
                    >
                </template>
                <!-- 对应表格展开行的内容-->
                <template v-slot:table-expand-column="{table}">
                    <div>
                        {{table.row.patientName}}+{{table.row.medicalRecordNumber}}
                    </div>
                </template>
            </yb-simple-table-page>
            <el-drawer :visible.sync="formViewerDrawer" size="94%" append-to-body>
                <template v-slot:title>
                    <span style="margin-left: 10px">蓝蓝</span>
                </template>
                <div style="margin: 0 20px 20px" ref="formApp"></div>
            </el-drawer>
            <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
                <span>这是一段信息</span>
                <span slot="footer" class="dialog-footer">
                    <el-button @click="dialogVisible = false">取 消</el-button>
                    <el-button type="primary" @click="dialogVisible = false"
                        >确 定</el-button
                    >
                </span>
            </el-dialog>
        </div>
    </template>
    <script>
        const tableData = JSON.parse(
            `[{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老李","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"姓名","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"}]`
        ).map((item, i) => ({ ...item, id: i + 1 }));
        export default {
            data() {
                const formItems = [
                    {
                        label: '病案号',
                        prop: 'medicalRecordNumber',
                    },
                    {
                        label: '姓名',
                        prop: 'patientName',
                    },
                    {
                        label: '时间',
                        prop: 'myTime',
                        // 调整单独的栅栏占格
                        spans: { xl: 12, lg: 12, md: 12 },
                    },
                    /**
                     * 默认查询按钮项的属性:
                     * {
                     * label: '',
                     * prop: 'searchFormButtons',
                     * excludeSpans: true,
                     * }
                     * 可进行覆盖追加属性
                     */
                    {
                        prop: 'searchFormButtons',
                        excludeSpans: false,
                        // 调整单独的栅栏占格
                        spans: { xl: 12, lg: 12, md: 12 },
                    },
                ];
                return {
                    dialogVisible: false,
                    formViewerDrawer: false,
                    pagination: {},
                    searchForm: {
                        formItems,
                        // 所有formItems的栅栏占格,默认为{ xl: 4,lg: 6,md: 8,sm: 12, xs: 24}
                        // 进行合并后会是 { xl: 12,lg: 12,md: 12,sm: 12, xs: 24}
                        spans: { xl: 12, lg: 12, md: 12 },
                    },
                    table: {
                        // 'highlight-current-row': true,
                        columns: [
                            {
                                // 启用展开/折叠
                                type: 'expand',
                                prop: 'expand-column',
                            },
                            {
                                // 启用多选框
                                type: 'selection',
                                prop: 'selection-column',
                            },
    
                            {
                                label: '病案号',
                                prop: 'medicalRecordNumber',
                                'show-overflow-tooltip': true,
                                width: '120px',
                            },
                            {
                                label: '姓名',
                                prop: 'patientName',
                            },
                            {
                                label: '信息分类',
                                prop: 'projectTypeName',
    
                                'show-overflow-tooltip': true,
                            },
                            {
                                label: '操作',
                                prop: 'action-buttons',
                                width: '220px',
                            },
                        ],
                    },
                };
            },
            methods: {
                getTableData(query) {
                    return Promise.resolve({
                        total: tableData.length,
                        tableData: tableData.slice(
                            (query.currentPage - 1) * query.pageSize,
                            query.currentPage * query.pageSize
                        ),
                    });
                },
                openDrawer() {
                    this.formViewerDrawer = true;
                },
                openDialog() {
                    this.dialogVisible = true;
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    显示 复制 复制

    # 显示勾选数

    支持分页勾选,可以自定义勾选数的位置

    暂无数据
    共 0 条
    • 8条/页
    • 10条/页
    • 20条/页
    • 30条/页
    • 40条/页
    • 50条/页
    • 100条/页
    • 200条/页
    • 300条/页
    • 400条/页
    • 500条/页

    无数据

    • 1
    前往
    页
    蓝蓝
    提示
    <template>
        <div class="app-base-bg" style="padding:10px;">
            <yb-simple-table-page
                ref="page"
                :searchForm="searchForm"
                :table="table"
                :pagination="pagination"
                :getTableData="getTableData"
                :defaultPageSize="3"
                showSelectionTotal
                @pagesSelectionChange="pagesSelectionChange"
            >
                <!-- 表单控件slots "searchForm-"开头的slotName(与searchForm.formItems[].prop拼接) -->
                <template v-slot:searchForm-formItems="{ formModel, formItem }">
                    <el-input
                        v-model="formModel[formItem.prop]"
                        clearable
                    ></el-input>
                </template>
                <!-- 在表单后面追加按钮 -->
                <template
                    v-slot:searchForm-searchFormButtonsAppended="{pagesSelection, onClearSelection}"
                >
                    <!-- 自定义勾选数的位置 -->
                    <el-tag
                        effect="dark"
                        size="default"
                        style="margin-right:10px"
                        type="warning"
                        :closable="pagesSelection.length > 0"
                        @close="onClearSelection"
                        >勾选数:{{pagesSelection.length}}</el-tag
                    >
                    <el-button type="primary">新增</el-button>
                    <el-button type="primary">导入</el-button>
                </template>
                <!-- 表格列slots "table-"开头的slotName(与table.columns[].prop拼接)-->
                <template v-slot:table-action-buttons="{ table }">
                    <el-button type="default" size="mini">查看</el-button>
                    <el-button type="primary" size="mini" @click="openDrawer"
                        >修改</el-button
                    >
                    <el-button type="danger" size="mini" @click="openDialog"
                        >删除</el-button
                    >
                </template>
                <template v-slot:above-table>
                    <el-button type="primary">新增</el-button>
                    <el-button type="primary">导入</el-button>
                </template>
                <!-- 对应表格展开行的内容-->
                <template v-slot:table-expand-column="{table}">
                    <div>
                        {{table.row.patientName}}+{{table.row.medicalRecordNumber}}
                    </div>
                </template>
            </yb-simple-table-page>
            <el-drawer :visible.sync="formViewerDrawer" size="94%" append-to-body>
                <template v-slot:title>
                    <span style="margin-left: 10px">蓝蓝</span>
                </template>
                <div style="margin: 0 20px 20px" ref="formApp"></div>
            </el-drawer>
            <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
                <span>这是一段信息</span>
                <span slot="footer" class="dialog-footer">
                    <el-button @click="dialogVisible = false">取 消</el-button>
                    <el-button type="primary" @click="dialogVisible = false"
                        >确 定</el-button
                    >
                </span>
            </el-dialog>
        </div>
    </template>
    <script>
        const tableData = JSON.parse(
            `[{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老李","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"姓名","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"}]`
        ).map((item, i) => ({ ...item, id: i + 1 }));
        export default {
            data() {
                const formItems = [
                    {
                        label: '病案号',
                        prop: 'medicalRecordNumber',
                    },
                    {
                        label: '姓名',
                        prop: 'patientName',
                    },
                    {
                        label: '时间',
                        prop: 'myTime',
                        // 调整单独的栅栏占格
                        spans: { xl: 12, lg: 12, md: 12 },
                    },
                    /**
                     * 默认查询按钮项的属性:
                     * {
                     * label: '',
                     * prop: 'searchFormButtons',
                     * excludeSpans: true,
                     * }
                     * 可进行覆盖追加属性
                     */
                    {
                        prop: 'searchFormButtons',
                        excludeSpans: false,
                        // 调整单独的栅栏占格
                        spans: { xl: 12, lg: 12, md: 12 },
                    },
                ];
                return {
                    dialogVisible: false,
                    formViewerDrawer: false,
                    pagination: {},
                    searchForm: {
                        formItems,
                        // 所有formItems的栅栏占格,默认为{ xl: 4,lg: 6,md: 8,sm: 12, xs: 24}
                        // 进行合并后会是 { xl: 12,lg: 12,md: 12,sm: 12, xs: 24}
                        spans: { xl: 12, lg: 12, md: 12 },
                    },
                    table: {
                        // 'highlight-current-row': true,
                        columns: [
                            {
                                // 启用展开/折叠
                                type: 'expand',
                                prop: 'expand-column',
                            },
                            {
                                // 启用多选框
                                type: 'selection',
                                prop: 'selection-column',
                            },
    
                            {
                                label: '病案号',
                                prop: 'medicalRecordNumber',
                                'show-overflow-tooltip': true,
                                width: '120px',
                            },
                            {
                                label: '姓名',
                                prop: 'patientName',
                            },
                            {
                                label: '信息分类',
                                prop: 'projectTypeName',
    
                                'show-overflow-tooltip': true,
                            },
                            {
                                label: '操作',
                                prop: 'action-buttons',
                                width: '220px',
                            },
                        ],
                    },
                };
            },
            methods: {
                getTableData(query) {
                    return Promise.resolve({
                        total: tableData.length,
                        tableData: tableData.slice(
                            (query.currentPage - 1) * query.pageSize,
                            query.currentPage * query.pageSize
                        ),
                    });
                },
                openDrawer() {
                    this.formViewerDrawer = true;
                },
                openDialog() {
                    this.dialogVisible = true;
                },
                pagesSelectionChange(pagesSelection) {
                    console.log(pagesSelection);
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    显示 复制 复制

    # 自定义表格配置事件

    当不设置 storageKey ,可以设置 showColumnsConfig 为 true,启用表格配置

    暂无数据
    共 0 条
    • 8条/页
    • 10条/页
    • 20条/页
    • 30条/页
    • 40条/页
    • 50条/页
    • 100条/页
    • 200条/页
    • 300条/页
    • 400条/页
    • 500条/页

    无数据

    • 1
    前往
    页
    <template>
        <div class="app-base-bg" style="padding:10px;">
            <yb-simple-table-page
                ref="page"
                :searchForm="searchForm"
                :table="table"
                :pagination="pagination"
                :getTableData="getTableData"
                :defaultPageSize="3"
                storageKey="yb-simple-table-page-1"
                @submitConfig="submitConfig"
                @resetConfig="resetConfig"
            >
                <!-- 表单控件slots "searchForm-"开头的slotName(与searchForm.formItems[].prop拼接) -->
                <template v-slot:searchForm-formItems="{ formModel, formItem }">
                    <el-input
                        v-model="formModel[formItem.prop]"
                        clearable
                    ></el-input>
                </template>
            </yb-simple-table-page>
        </div>
    </template>
    <script>
        const defaultColumns = [
            {
                label: '病案号',
                prop: 'medicalRecordNumber',
                'show-overflow-tooltip': true,
                width: '120px',
            },
            {
                label: '姓名',
                prop: 'patientName',
            },
            {
                label: '信息分类',
                prop: 'projectTypeName',
                'show-overflow-tooltip': true,
            },
            {
                label: '机构代码',
                prop: 'fieldName',
            },
        ];
        const tableData = JSON.parse(
            `[{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老李","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"姓名","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"}]`
        ).map((item, i) => ({ ...item, id: i + 1 }));
        export default {
            data() {
                const formItems = [
                    {
                        label: '病案号',
                        prop: 'medicalRecordNumber',
                    },
                    {
                        label: '姓名',
                        prop: 'patientName',
                        defaultValue: '1',
                    },
                ];
                return {
                    pagination: {},
                    searchForm: {
                        formItems,
                        spans: { xl: 8, lg: 12 },
                    },
                    table: {
                        'highlight-current-row': true,
                        columns: defaultColumns,
                    },
                };
            },
            methods: {
                getTableData(query) {
                    return Promise.resolve({
                        total: tableData.length,
                        tableData: tableData.slice(
                            (query.currentPage - 1) * query.pageSize,
                            query.currentPage * query.pageSize
                        ),
                    });
                },
                submitConfig(config, isChange, done) {
                    console.log(config, isChange);
                    // 这里可以远程请求之后再调用done
                    setTimeout(() => {
                        done();
                    }, 1000);
                },
                resetConfig(callback) {
                    callback({
                        showIndexSerial: true,
                        columns: defaultColumns,
                        border: false,
                    });
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    显示 复制 复制

    # 插槽的使用

    • 查询表单的插槽名称在 yb-form 的插槽名称加上前缀"searchForm-",如 "searchForm-formItems"
    • 在默认的查询与重置按钮后追加内容的插槽:"searchForm-searchFormButtonsAppended"
    • 表格的插槽名称在 yb-table 的插槽名称加上前缀"table-",如 "table-columnCells"
    • 表格的插槽名称在 yb-pagination 的插槽名称加上前缀"pagination-",如 "pagination-afterReload"
    • 其他插槽名称:"above-table"(在表格上面的内容)、"above-searchForm"(在查询表单上面的内容)、"default"(默认的插槽,会在表格和分页的末尾追加)
    在表单的上面
    在表格的上面
    暂无数据
    总共:20000,但这次只能查询最多共 0 条
    • 8条/页
    • 10条/页
    • 20条/页
    • 30条/页
    • 40条/页
    • 50条/页
    • 100条/页
    • 200条/页
    • 300条/页
    • 400条/页
    • 500条/页

    无数据

    • 1
    前往
    页
    默认的slot
    <template>
        <div class="app-base-bg" style="padding:10px;">
            <yb-simple-table-page
                ref="page"
                :searchForm="searchForm"
                :table="table"
                :pagination="pagination"
                :getTableData="getTableData"
                :defaultPageSize="3"
            >
                <!-- 表单控件slots "searchForm-"开头的slotName(与searchForm.formItems[].prop拼接) -->
                <template v-slot:searchForm-formItems="{ formModel, formItem }">
                    <el-input
                        v-model="formModel[formItem.prop]"
                        clearable
                    ></el-input>
                </template>
                <!-- 表单控件slots "searchForm-"开头的slotName(与searchForm.formItems[].prop拼接) -->
                <template v-slot:searchForm-patientName="{ formModel, formItem }">
                    <el-date-picker
                        type="date"
                        placeholder="选择日期"
                        v-model="formModel[formItem.prop]"
                    ></el-date-picker>
                </template>
                <!-- 表格列slots "table-"开头的slotName(与table.columns[].prop拼接)-->
                <template v-slot:table-patientName="{ table }">
                    <el-tag size="mini" type="success"
                        >{{ table.row[table.column.property] }}</el-tag
                    >
                </template>
                <!-- 表格列slots "table-"开头的slotName(与table.columns[].prop拼接)-->
                <template v-slot:table-action-buttons="{ table, page }">
                    <el-button type="default" size="mini">查看</el-button>
                </template>
                <!-- 表格上面的slot -->
                <template v-slot:above-table="{ formModel, tableData, page }">
                    <el-alert title="在表格的上面" type="success"> </el-alert>
                </template>
                <!-- 表单上面的slot -->
                <template v-slot:above-searchForm="{ formModel, tableData, page }">
                    <el-alert title="在表单的上面" type="warning"> </el-alert>
                </template>
                <!-- 默认的slot -->
                <el-alert title="默认的slot" type="error"> </el-alert>
                <!-- <template v-slot:default="{ formModel, tableData, page }">
                <el-alert title="默认的slot" type="error"> </el-alert>
            </template> -->
                <template #pagination-afterReload="{page}">
                    <span style="margin-left:10px"
                        >总共:20000,但这次只能查询最多</span
                    >
                </template>
            </yb-simple-table-page>
        </div>
    </template>
    <script>
        const tableData = JSON.parse(
            `[{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老李","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"姓名","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"}]`
        ).map((item, i) => ({ ...item, id: i + 1 }));
        export default {
            data() {
                const formItems = [
                    {
                        label: '病案号',
                        prop: 'medicalRecordNumber',
                    },
                    {
                        label: '姓名',
                        prop: 'patientName',
                    },
                ];
                return {
                    pagination: {},
                    searchForm: {
                        formItems,
                        inline: true,
                        spans: false,
                    },
                    table: {
                        columns: [
                            {
                                label: '病案号',
                                prop: 'medicalRecordNumber',
                                'show-overflow-tooltip': true,
                                width: '120px',
                            },
                            {
                                label: '姓名',
                                prop: 'patientName',
                            },
                            {
                                label: '信息分类',
                                prop: 'projectTypeName',
    
                                'show-overflow-tooltip': true,
                            },
                            {
                                label: '操作',
                                prop: 'action-buttons',
                                width: '220px',
                            },
                        ],
                    },
                };
            },
            methods: {
                getTableData(query) {
                    return Promise.resolve({
                        total: tableData.length,
                        tableData: tableData.slice(
                            (query.currentPage - 1) * query.pageSize,
                            query.currentPage * query.pageSize
                        ),
                    });
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    显示 复制 复制
    • 自定义表格位置内容的插槽名称:"center-content", 可以选择将表格摆放到其他位置,这是个特殊的插槽,必须在 render 函数中使用,而不能在 template
    左边内容
    暂无数据
    共 0 条
    • 8条/页
    • 10条/页
    • 20条/页
    • 30条/页
    • 40条/页
    • 50条/页
    • 100条/页
    • 200条/页
    • 300条/页
    • 400条/页
    • 500条/页

    无数据

    • 1
    前往
    页
    <script>
        const tableData = JSON.parse(
            `[{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老李","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"姓名","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"}]`
        ).map((item, i) => ({ ...item, id: i + 1 }));
        export default {
            data() {
                const formItems = [
                    {
                        label: '病案号',
                        prop: 'medicalRecordNumber',
                    },
                    {
                        label: '姓名',
                        prop: 'patientName',
                    },
                ];
                return {
                    inputValue: null,
                    pagination: {},
                    searchForm: {
                        formItems,
                        inline: false,
                        spans: { xl: 12, lg: 12 },
                    },
                    table: {
                        columns: [
                            {
                                label: '病案号',
                                prop: 'medicalRecordNumber',
                                'show-overflow-tooltip': true,
                                width: '120px',
                            },
                            {
                                label: '姓名',
                                prop: 'patientName',
                            },
                            {
                                label: '信息分类',
                                prop: 'projectTypeName',
    
                                'show-overflow-tooltip': true,
                            },
                        ],
                    },
                };
            },
            render(h) {
                return h('div', { class: 'app-base-bg', style: 'padding:10px' }, [
                    h('yb-simple-table-page', {
                        props: {
                            searchForm: this.searchForm,
                            table: this.table,
                            pagination: this.pagination,
                            getTableData: this.getTableData,
                            defaultPageSize: 3,
                        },
                        ref: 'page',
                        scopedSlots: {
                            'searchForm-formItems': ({ formModel, formItem }) => {
                                return h('el-input', {
                                    model: {
                                        value: formModel[formItem.prop],
                                        callback: (val) => {
                                            this.$set(
                                                formModel,
                                                formItem.prop,
                                                val
                                            );
                                        },
                                        expression: 'formModel[formItem.prop]',
                                    },
                                });
                            },
                            'center-content': ({
                                formModel,
                                tableData,
                                page,
                                tableNode,
                                paginationNode,
                            }) => {
                                return h('el-row', {}, [
                                    h('el-col', { props: { span: 8 } }, [
                                        h('span', {}, '左边内容'),
                                    ]),
                                    h('el-col', { props: { span: 16 } }, [
                                        tableNode,
                                        paginationNode,
                                    ]),
                                ]);
                            },
                        },
                    }),
                ]);
            },
            methods: {
                getTableData(query) {
                    return Promise.resolve({
                        total: tableData.length,
                        tableData: tableData.slice(
                            (query.currentPage - 1) * query.pageSize,
                            query.currentPage * query.pageSize
                        ),
                    });
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    显示 复制 复制

    也可以使用 jsx

    <script lang="jsx">
        const tableData = JSON.parse(
            `[{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老李","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"姓名","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"},{"fieldName":"诊疗信息.组织机构代码","medicalRecordNumber":"BY04","patientName":"老王","projectTypeName":"诊疗信息"}]`
        ).map((item, i) => ({ ...item, id: i + 1 }));
        export default {
            data() {
                const formItems = [
                    {
                        label: '病案号',
                        prop: 'medicalRecordNumber',
                    },
                    {
                        label: '姓名',
                        prop: 'patientName',
                    },
                ];
                return {
                    inputValue: null,
                    pagination: {},
                    searchForm: {
                        formItems,
                        inline: true,
                    },
                    table: {
                        columns: [
                            {
                                label: '病案号',
                                prop: 'medicalRecordNumber',
                                'show-overflow-tooltip': true,
                                width: '120px',
                            },
                            {
                                label: '姓名',
                                prop: 'patientName',
                            },
                            {
                                label: '信息分类',
                                prop: 'projectTypeName',
    
                                'show-overflow-tooltip': true,
                            },
                            {
                                label: '操作',
                                prop: 'action-buttons',
                                width: '220px',
                            },
                        ],
                    },
                };
            },
            render(h) {
                return (
                    <div class="app-base-bg" style={{ padding: '10px' }}>
                        <yb-simple-table-page
                            ref="page"
                            props={{
                                searchForm: this.searchForm,
                                table: this.table,
                                pagination: this.pagination,
                                getTableData: this.getTableData,
                                defaultPageSize: 3,
                            }}
                            scopedSlots={{
                                'searchForm-formItems': ({
                                    formModel,
                                    formItem,
                                }) => {
                                    return (
                                        <el-input
                                            v-model={formModel[formItem.prop]}
                                        />
                                    );
                                },
                                'center-content': ({
                                    formModel,
                                    tableData,
                                    page,
                                    tableNode,
                                    paginationNode,
                                }) => {
                                    <el-row>
                                        <el-col span={8}>左边内容</el-col>
                                        <el-col span={16}>
                                            {tableNode}
                                            {paginationNode}
                                        </el-col>
                                    </el-row>;
                                },
                            }}
                        />
                    </div>
                );
            },
            methods: {
                getTableData(query) {
                    return Promise.resolve({
                        total: tableData.length,
                        tableData: tableData.slice(
                            (query.currentPage - 1) * query.pageSize,
                            query.currentPage * query.pageSize
                        ),
                    });
                },
            },
        };
    </script>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106

    # Props

    参数 说明 类型 可选值 默认值
    searchForm 查询表单的属性,同yb-form,也可以是 false 就不显示表单 object | false - {}
    searchForm.formItems 查询表单项的配置,同yb-form 的 formItems object[] - []
    searchForm.formItems[].after 是否排放在默认的查询按钮之后 boolean - false
    searchForm.formItems[].defaultValue 当前控件的默认值 - - -
    searchForm.showDefaultButtons 是否显示默认的查询、重置按钮 , 此项 formItem 对应的 prop 属性值是 "searchFormButtons" ,可以在 formItems 添加{prop:"searchFormButtons",excludeSpans:false} 覆盖此项的默认属性 boolean - true
    storageKey 浏览器存储 localStorage 的 key,启用后会在表格的右上角出现一个小图标,点击后打开可以配置【表格展示列】【是否开启纵向边框】,页面刷新会自动读取缓存配置,请确保所有 YbSimpleTablePage 组件是具有唯一的 key string - -
    table 表格的属性,属性包含yb-table object - {}
    table.border 是否开启纵向边框,启用 storageKey 可控制 boolean - -
    table.columns 表格列配置,属性包含yb-table 的 columns ,默认只展示前面 table.defaultVisibleColumnLength 个,其余启用 storageKey 可控制 array[] - []
    table.defaultVisibleColumnLength 默认只展示 table.columns 的个数,控制表格尽量不出现横向滚动条 number - 6
    table.columns[].visibleForce 启用 storageKey 后,列字段会进入可选择展示操作,可以启用 visibleForce 来强制此字段一直保持展示,且不能改变展示状态 boolean - false
    table.columns[].visible 启用 storageKey 后,列字段会进入可选择展示操作,可以使用 visible 来控制此字段是否默认展示,并且字段可在表格配置弹窗改变展示状态。当 visible 为 true 的字段个数超出 table.defaultVisibleColumnLength 时,设置默认展示无效,可通过表格配置弹窗修改展示状态 boolean - false
    table.showIndexSerial 是否显示默认的序号列 ,序号列的 prop 属性值是 "tableIndexSerial", 可以对应此属性值添加一列来覆盖序号列的默认属性,比如序号列的宽度默认是"58px",在 columns 中添加 {prop:"tableIndexSerial",width:"40px"} boolean - true
    pagination 分页器的属性,同el-pagination (opens new window),也可以是 false 就不显示分页 object | false - {}
    defaultPageSize 默认每页显示条目个数 number - 10
    defaultCurrentPage 默认当前页数 number - 1
    resetPageWhenColumnsChanged 当 table.columns 变化时是否将分页重置到初始 boolean - true
    getTableData 获取表格行数据的函数,需 return Promise.resolve({total:总条数,tableData:行数据}) function(query,{fieldSort}){return Promise.resolve({total:0,tableData:[]});} - -
    showSelectionTotal 显示勾选数 boolean - -
    aboveTableWrapperClass above-table 插槽的包裹元素的 className string|object|array - -
    selectionTotalTabProps 显示勾选数的 el-tag 组件的 props Object - -
    isAffixPagination 分页器是否浮动 boolean - false
    isDefaultQueryData 是否默认查询数据 boolean - true
    showColumnsConfig 是否启用表格配置,在未设置 storageKey 的情况下,可设置该属性显示表格配置,需配合事件 resetConfig、submitConfig 使用 boolean - false
    dialogConfig 用于设置表格配置弹窗页面的 dialog 属性,支持 el-dialog 属性 object - {}
    dialogConfig.cancelButtonText 表格配置弹窗取消按钮文本 string - '取消'
    dialogConfig.resetButtonText 表格配置弹窗恢复默认配置按钮文本 string - '恢复默认配置'
    dialogConfig.submitButtonText 表格配置弹窗确定按钮文本 string - '确定'

    # Page Methods

    方法调用方式应该是 this.$refs['page']['methodName']()

    方法名称 说明 参数 返回值
    getList 获取列表数据,会调用 getTableData 接受一个对象,会转发给 getTableData -
    searchList 会让分页器回到第一页,会调用 getList,可以理解为查询触发的方法 接受一个对象,会转发给 getTableData -
    resetSearch 重置表单,会调用 searchList,可以理解为重置按钮触发的方法 接受一个对象,会转发给 getTableData -
    getYbForm 取得 yb-form 的组件实例 - -
    getYbTable 取得 yb-table 的组件实例 - -
    setFormModel 设置查询表单的 formModel 接受一个对象 -
    clearPagesSelection 清空所有的勾选 - -
    setPagesSelection 设置勾选项,用于返显勾选需求 ,参数 pagesSelection: 要勾选的行数据 pagesSelection -
    // 例如
    this.$refs['page'].searchList();
    
    1
    2

    # Page Events

    参数 说明 回调参数
    pagesSelectionChange 分页勾选数据改变时触发 pagesSelection
    resetConfig 表格配置弹窗恢复默认配置事件 ((config)=>void) 接收一个函数,设置表格默认信息
    submitConfig 表格配置弹窗确定事件 (config, isChange, done) 接收三个参数,1. 表格配置信息 2. boolean 类型的参数,是否改变了配置后点击确定按钮 3.回调函数,用于关闭弹窗

    事件包含 el-form Events (opens new window)的事件名称加前缀"form-"

    <template>
        <yb-simple-table-page ref="page" @form-validate="formValidate">
        </yb-simple-table-page>
    </template>
    
    1
    2
    3
    4

    事件包含 el-table Events (opens new window)事件名称加前缀"table-"

    <template>
        <yb-simple-table-page ref="page" @table-current-change="tableCurrentChange">
        </yb-simple-table-page>
    </template>
    
    1
    2
    3
    4

    事件包含 el-pagination Events (opens new window)事件名称加前缀"pagination-"

    <template>
        <yb-simple-table-page
            ref="page"
            @pagination-current-change="paginationCurrentChange"
        >
        </yb-simple-table-page>
    </template>
    
    1
    2
    3
    4
    5
    6
    7
    上次更新: 2024/12/13, 19:45:26
    YbCascaderList 级联列表
    YbSimpleCardPage 分页卡片列表

    ← YbCascaderList 级联列表 YbSimpleCardPage 分页卡片列表→

    Theme by Vdoing | Copyright © 2021-2025 YB-GZ | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式