Browse Source

👣 重构底层组件

master
wangxiang 3 years ago
parent
commit
48879d8d98
  1. 251
      kicc-ui/src/assets/styles/kicc.less
  2. 1
      kicc-ui/src/assets/styles/var/index.less
  3. 13
      kicc-ui/src/assets/styles/var/kicc.less
  4. 115
      kicc-ui/src/components/Table/src/BasicTable.vue
  5. 53
      kicc-ui/src/components/Table/src/components/TableAction.vue
  6. 16
      kicc-ui/src/components/Table/src/components/TableHeader.vue
  7. 76
      kicc-ui/src/components/Table/src/components/settings/ColumnSetting.vue
  8. 10
      kicc-ui/src/utils/dateUtil.ts
  9. 118
      kicc-ui/src/views/system/config/config.data.ts
  10. 239
      kicc-ui/src/views/system/config/index.vue

251
kicc-ui/src/assets/styles/kicc.less

@ -17,13 +17,252 @@
} }
} }
.table-title {
// 基础表格样式
[data-theme='dark'] {
.ant-table-tbody > tr:hover.ant-table-row-selected > td,
.ant-table-tbody > tr.ant-table-row-selected td {
background-color: #262626;
}
.@{basic-table-prefix-cls} {
// [黑暗模式]table顶部插槽多选栏样式
.alert {
background-color: #323232;
border-color: #424242;
}
}
}
.@{basic-table-prefix-cls} {
max-width: 100%;
&-row__striped {
td {
background-color: @app-content-background;
}
}
&-form-container {
padding: 16px;
.ant-form {
padding: 12px 10px 6px 10px;
margin-bottom: 16px;
background-color: @component-background;
border-radius: 2px;
}
}
.ant-tag {
margin-right: 0;
}
.ant-table-wrapper {
padding: 6px;
background-color: @component-background;
border-radius: 2px;
.ant-table-title {
min-height: 40px;
padding: 0 0 8px 0 !important;
}
.ant-table.ant-table-bordered .ant-table-title {
border: none !important;
}
}
.ant-table {
width: 100%;
overflow-x: hidden;
&-title {
display: flex;
padding: 8px 6px;
border-bottom: none;
justify-content: space-between;
align-items: center;
}
.ant-table-tbody > tr.ant-table-row-selected td {
background-color: fade(@primary-color, 8%) !important;
}
}
.ant-pagination {
margin: 10px 0 0 0;
}
.ant-table-footer {
padding: 0;
.ant-table-wrapper {
padding: 0;
}
table {
border: none !important;
}
.ant-table-body {
overflow-x: hidden !important;
overflow-y: scroll !important;
}
td {
padding: 12px 8px;
}
// [明亮模式]table顶部插槽多选栏样式
.alert {
height: 38px;
background-color: #f3f3f3;
border-color: #e3e3e3;
}
&--inset {
.ant-table-wrapper {
padding: 0;
}
}
}
// 表格头部样式
.@{basic-table-header-prefix-cls} {
&__toolbar {
flex: 1;
display: flex;
align-items: center;
justify-content: flex-end;
> * {
margin-right: 8px;
}
}
}
// 表格动作样式
.@{basic-table-action-prefix-cls} {
display: flex;
align-items: center;
.action-divider {
display: table;
}
&.left {
justify-content: flex-start;
}
&.center {
justify-content: center;
}
&.right {
justify-content: flex-end;
}
button {
display: flex;
align-items: center;
span {
margin-left: 0 !important;
}
}
button.ant-btn-circle {
span {
margin: auto !important;
}
}
.ant-divider,
.ant-divider-vertical {
margin: 0 2px;
}
.icon-more {
transform: rotate(90deg);
svg {
font-size: 1.1em;
font-weight: 700;
}
}
}
// 表格设置样式
.table-coulmn-drag-icon {
margin: 0 5px;
cursor: move;
}
.@{basic-column-setting-prefix-cls} {
&__popover-title {
position: relative; position: relative;
display: flex; display: flex;
padding-left: 7px; align-items: center;
font-size: 14px; justify-content: space-between;
font-weight: 500; }
line-height: 24px;
color: rgba(0, 0, 0, 0.85); &__check-item {
display: flex;
align-items: center;
min-width: 100%;
padding: 4px 16px 8px 0;
.ant-checkbox-wrapper {
width: 100%;
&:hover {
color: @primary-color;
}
}
}
&__fixed-left,
&__fixed-right {
color: rgba(0, 0, 0, 0.45);
cursor: pointer; cursor: pointer;
&.active,
&:hover {
color: @primary-color;
}
&.disabled {
color: @disabled-color;
cursor: not-allowed;
}
}
&__fixed-right {
transform: rotate(180deg);
}
&__cloumn-list {
svg {
width: 1em !important;
height: 1em !important;
}
.ant-popover-inner-content {
// max-height: 360px;
padding-right: 0;
padding-left: 0;
// overflow: auto;
}
.ant-checkbox-group {
width: 100%;
min-width: 260px;
// flex-wrap: wrap;
}
.scrollbar {
height: 220px;
}
}
}
} }

1
kicc-ui/src/assets/styles/var/index.less

@ -8,6 +8,7 @@
@import (reference) '../color.less'; @import (reference) '../color.less';
@import 'easing'; @import 'easing';
@import 'breakpoint'; @import 'breakpoint';
@import 'kicc';
@namespace: kicc; @namespace: kicc;

13
kicc-ui/src/assets/styles/var/kicc.less

@ -0,0 +1,13 @@
/**
* @program: kicc-ui
* @description: kicc系统相关变量定义
* 在kicc系统中全局调用的变量全部在这里配置
* @author: entfrm开发团队-王翔
* @create: 2022/4/7
*/
// 基础表格变量
@basic-table-prefix-cls: ~'@{namespace}-basic-table';
@basic-table-header-prefix-cls: ~'@{namespace}-basic-table-header';
@basic-table-action-prefix-cls: ~'@{namespace}-basic-table-action';
@basic-column-setting-prefix-cls: ~'@{namespace}-basic-column-setting';

115
kicc-ui/src/components/Table/src/BasicTable.vue

@ -318,118 +318,3 @@
}, },
}); });
</script> </script>
<style lang="less">
@border-color: #cecece4d;
@prefix-cls: ~'@{namespace}-basic-table';
[data-theme='dark'] {
.ant-table-tbody > tr:hover.ant-table-row-selected > td,
.ant-table-tbody > tr.ant-table-row-selected td {
background-color: #262626;
}
.@{prefix-cls} {
// []table
.alert {
background-color: #323232;
border-color: #424242;
}
}
}
.@{prefix-cls} {
max-width: 100%;
&-row__striped {
td {
background-color: @app-content-background;
}
}
&-form-container {
padding: 16px;
.ant-form {
padding: 12px 10px 6px 10px;
margin-bottom: 16px;
background-color: @component-background;
border-radius: 2px;
}
}
.ant-tag {
margin-right: 0;
}
.ant-table-wrapper {
padding: 6px;
background-color: @component-background;
border-radius: 2px;
.ant-table-title {
min-height: 40px;
padding: 0 0 8px 0 !important;
}
.ant-table.ant-table-bordered .ant-table-title {
border: none !important;
}
}
.ant-table {
width: 100%;
overflow-x: hidden;
&-title {
display: flex;
padding: 8px 6px;
border-bottom: none;
justify-content: space-between;
align-items: center;
}
.ant-table-tbody > tr.ant-table-row-selected td {
background-color: fade(@primary-color, 8%) !important;
}
}
.ant-pagination {
margin: 10px 0 0 0;
}
.ant-table-footer {
padding: 0;
.ant-table-wrapper {
padding: 0;
}
table {
border: none !important;
}
.ant-table-body {
overflow-x: hidden !important;
overflow-y: scroll !important;
}
td {
padding: 12px 8px;
}
// []table
.alert {
height: 38px;
background-color: #f3f3f3;
border-color: #e3e3e3;
}
&--inset {
.ant-table-wrapper {
padding: 0;
}
}
}
}
</style>

53
kicc-ui/src/components/Table/src/components/TableAction.vue

@ -148,56 +148,3 @@
}, },
}); });
</script> </script>
<style lang="less">
@prefix-cls: ~'@{namespace}-basic-table-action';
.@{prefix-cls} {
display: flex;
align-items: center;
.action-divider {
display: table;
}
&.left {
justify-content: flex-start;
}
&.center {
justify-content: center;
}
&.right {
justify-content: flex-end;
}
button {
display: flex;
align-items: center;
span {
margin-left: 0 !important;
}
}
button.ant-btn-circle {
span {
margin: auto !important;
}
}
.ant-divider,
.ant-divider-vertical {
margin: 0 2px;
}
.icon-more {
transform: rotate(90deg);
svg {
font-size: 1.1em;
font-weight: 700;
}
}
}
</style>

16
kicc-ui/src/components/Table/src/components/TableHeader.vue

@ -102,19 +102,3 @@
}, },
}); });
</script> </script>
<style lang="less">
@prefix-cls: ~'@{namespace}-basic-table-header';
.@{prefix-cls} {
&__toolbar {
flex: 1;
display: flex;
align-items: center;
justify-content: flex-end;
> * {
margin-right: 8px;
}
}
}
</style>

76
kicc-ui/src/components/Table/src/components/settings/ColumnSetting.vue

@ -387,79 +387,3 @@
}, },
}); });
</script> </script>
<style lang="less">
@prefix-cls: ~'@{namespace}-basic-column-setting';
.table-coulmn-drag-icon {
margin: 0 5px;
cursor: move;
}
.@{prefix-cls} {
&__popover-title {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
}
&__check-item {
display: flex;
align-items: center;
min-width: 100%;
padding: 4px 16px 8px 0;
.ant-checkbox-wrapper {
width: 100%;
&:hover {
color: @primary-color;
}
}
}
&__fixed-left,
&__fixed-right {
color: rgba(0, 0, 0, 0.45);
cursor: pointer;
&.active,
&:hover {
color: @primary-color;
}
&.disabled {
color: @disabled-color;
cursor: not-allowed;
}
}
&__fixed-right {
transform: rotate(180deg);
}
&__cloumn-list {
svg {
width: 1em !important;
height: 1em !important;
}
.ant-popover-inner-content {
// max-height: 360px;
padding-right: 0;
padding-left: 0;
// overflow: auto;
}
.ant-checkbox-group {
width: 100%;
min-width: 260px;
// flex-wrap: wrap;
}
.scrollbar {
height: 220px;
}
}
}
</style>

10
kicc-ui/src/utils/dateUtil.ts

@ -22,13 +22,15 @@ export function formatToDate(date: moment.MomentInput = undefined, format = DATE
} }
/** 添加日期范围 */ /** 添加日期范围 */
export function convertDateRange(params: Recordable, dateRangeField: string): Recordable { export function convertDateRange(params: Recordable, dateRange: string[]): Recordable {
const search = params, dateRange = search[dateRangeField]; const search = params;
if (null != dateRange && dateRange?.length > 0) { search.beginTime = '';
search.endTime = '';
if (dateRange && dateRange?.length > 0) {
search.beginTime = dateRange[0]; search.beginTime = dateRange[0];
search.endTime = dateRange[1]; search.endTime = dateRange[1];
} }
return search; return params;
} }
export const dateUtil = moment; export const dateUtil = moment;

118
kicc-ui/src/views/system/config/config.data.ts

@ -1,50 +1,39 @@
/** /**
* @program: kicc-ui * @program: kicc-ui
* @description: * @description:
* @author: entfrm开发团队- * @author: entfrm开发团队-
* @create: 2022/4/21 * @create: 2022/4/21
*/ */
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { h } from 'vue'; import { h } from 'vue';
import { Tag } from 'ant-design-vue'; import { Tag } from 'ant-design-vue';
import { ColumnProps } from "ant-design-vue/lib/table/interface";
export const columns: BasicColumn[] = [ /** 表格列配置 */
export const columns: ColumnProps[] = [
{ {
title: '参数名称', title: '参数名称',
dataIndex: 'name', dataIndex: 'name'
width: 200
}, },
{ {
title: '参数键名', title: '参数键名',
dataIndex: 'key', dataIndex: 'key'
width: 200
}, },
{ {
title: '参数键值', title: '参数键值',
dataIndex: 'value', dataIndex: 'value'
width: 200
}, },
{ {
title: '系统内置', title: '系统内置',
dataIndex: 'isSys', dataIndex: 'isSys',
width: 120,
customRender: ({record}) => { customRender: ({record}) => {
let text = ''; return record.isSys == '0' ? h(Tag, { color: 'success' }, '是') : h(Tag, { color: 'red' }, '否');
if (record.isSys === '0'){
text = '是';
}else {
text = '否';
}
return h(Tag, ()=> text);
} }
}, },
{ {
title: '备注', title: '备注',
dataIndex: 'remarks', dataIndex: 'remarks',
customRender: ({record}) => { customRender: ({record}) => {
return record.remarks || h(Tag, {color: 'red'}, () => '暂无数据'); return record.remarks || h(Tag, {color: 'red'},'暂无数据');
} }
}, },
{ {
@ -52,92 +41,3 @@ export const columns: BasicColumn[] = [
dataIndex: 'createTime' dataIndex: 'createTime'
} }
]; ];
export const searchFormSchema: FormSchema[] = [
{
field: 'name',
label: '参数名称',
component: 'Input',
componentProps: {
placeholder: '请输入角色名称',
},
colProps: {span: 8}
},
{
field: 'key',
label: '参数键名',
component: 'Input',
componentProps: {
placeholder: '请输入参数键名',
},
colProps: {span: 8}
},
{
field: 'isSys',
label: '系统内置',
component: 'Select',
componentProps: {
options: [
{label: '是', value: '0'},
{label: '否', value: '1'}
]
},
colProps: {span: 7}
}
];
export const formSchema: FormSchema[] = [
{
field: 'id',
label: 'ID',
component: 'Input',
show: false
},
{
field: 'name',
label: '参数名称',
required: true,
component: 'Input',
colProps: {
span: 12
}
},
{
field: 'key',
label: '参数键名',
component: 'Input',
required: true,
colProps: {
span: 12
}
},
{
field: 'value',
label: '参数键值',
component: 'Input',
required: true,
colProps: {
span: 12
}
},
{
field: 'isSys',
label: '系统内置',
component: 'RadioButtonGroup',
defaultValue: '0',
componentProps: {
options: [
{label: '是', value: '0'},
{label: '否', value: '1'}
],
},
colProps: {
span: 12
}
},
{
label: '备注',
field: 'remarks',
component: 'InputTextArea',
}
];

239
kicc-ui/src/views/system/config/index.vue

@ -1,6 +1,5 @@
<template> <template>
<div> <div ref="wrapRef" :class="[prefixCls, [`${prefixCls}-form-container`]]">
<div :class="[prefixCls, [`${prefixCls}-form-container`]]">
<AForm ref="formElRef" <AForm ref="formElRef"
layout="inline" layout="inline"
:colon="false" :colon="false"
@ -23,7 +22,25 @@
class="mr-2">重置</a-button> class="mr-2">重置</a-button>
</AFormItem> </AFormItem>
</AForm> </AForm>
<ATable :dataSource="dataSource" :columns="columns"> <ATable ref="tableElRef"
:size="state.selectedKeys[0]"
:dataSource="state.dataSource"
:columns="columns"
:scroll="{
x: '100%',
y: state.tableHeight,
scrollToFirstRowOnChange: true
}"
:pagination="{
current: 1,
pageSize: 10,
size: 'small',
defaultPageSize: 10,
showTotal: (total) => t('component.table.total', { total }),
showSizeChanger: true,
showQuickJumper: true,
}"
>
<template #title> <template #title>
<div style="width: 100%"> <div style="width: 100%">
<div class="flex items-center"> <div class="flex items-center">
@ -31,45 +48,49 @@
<div :class="`${headerPrefixCls}__toolbar`"> <div :class="`${headerPrefixCls}__toolbar`">
<a-button type="primary">新增</a-button> <a-button type="primary">新增</a-button>
<a-button type="primary">编辑</a-button> <a-button type="primary">编辑</a-button>
<Divider type="vertical"/> <a-button type="primary">删除</a-button>
<ADivider type="vertical"/>
<div class="table-settings"> <div class="table-settings">
<!--重做--> <!--重做-->
<Tooltip placement="top"> <ATooltip placement="top">
<template #title> <template #title>
<span>{{ t('common.redo') }}</span> <span>{{ t('common.redo') }}</span>
</template> </template>
<RedoOutlined @click="() => { console.log(1) }"/> <RedoOutlined @click="handleQuery"/>
</Tooltip> </ATooltip>
<!--尺寸--> <!--尺寸-->
<Tooltip placement="top"> <ATooltip placement="top">
<template #title> <template #title>
<span>{{ t('component.table.settingDens') }}</span> <span>{{ t('component.table.settingDens') }}</span>
</template> </template>
<Dropdown placement="bottomCenter" :trigger="['click']" :getPopupContainer="getPopupContainer"> <ADropdown :trigger="['click']"
:getPopupContainer="getPopupContainer"
placement="bottomCenter"
>
<ColumnHeightOutlined/> <ColumnHeightOutlined/>
<template #overlay> <template #overlay>
<Menu @click="()=>{console.log(2)}" selectable :selectedKeys="[]"> <AMenu v-model:selectedKeys="state.selectedKeys" selectable>
<MenuItem key="default"> <AMenuItem key="default">
<span>{{ t('component.table.settingDensDefault') }}</span> <span>{{ t('component.table.settingDensDefault') }}</span>
</MenuItem> </AMenuItem>
<MenuItem key="middle"> <AMenuItem key="middle">
<span>{{ t('component.table.settingDensMiddle') }}</span> <span>{{ t('component.table.settingDensMiddle') }}</span>
</MenuItem> </AMenuItem>
<MenuItem key="small"> <AMenuItem key="small">
<span>{{ t('component.table.settingDensSmall') }}</span> <span>{{ t('component.table.settingDensSmall') }}</span>
</MenuItem> </AMenuItem>
</Menu> </AMenu>
</template> </template>
</Dropdown> </ADropdown>
</Tooltip> </ATooltip>
<!--全屏--> <!--全屏-->
<Tooltip placement="top"> <ATooltip placement="top">
<template #title> <template #title>
<span>{{ t('component.table.settingFullScreen') }}</span> <span>{{ t('component.table.settingFullScreen') }}</span>
</template> </template>
<FullscreenOutlined @click="() => {console.log(3)}" /> <FullscreenOutlined v-if="!isFullscreen" @click="toggle"/>
<!--<FullscreenExitOutlined @click="toggle" v-else />--> <FullscreenExitOutlined v-else @click="toggle"/>
</Tooltip> </ATooltip>
</div> </div>
</div> </div>
</div> </div>
@ -77,110 +98,87 @@
</template> </template>
</ATable> </ATable>
</div> </div>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
/** /**
* 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致 * 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
* 采用ant-design-vue表格表单组件编写,采用 setup 写法 * 采用ant-design-vue表格表单组件编写,采用 setup 写法
* 当vben的BasicTable跟BasicForm组件不能满足一些特殊需求时,需要写原生ant-design-vue组件时,请严格参考此处代码
* 当前原生ant-design-vue表格表单组件模板,目前已经与系统项目配置高度集成,系统配置发生修改时组件也会产生对应的变化
* 目前是基于vben的BasicTable跟BasicForm组件重写出一套ant-design-vue原生表格表单组件模板
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved. * Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔 * author entfrm开发团队-王翔
*/ */
import { BasicTitle } from '/@/components/Basic'; import { BasicTitle } from '/@/components/Basic';
import { RedoOutlined, ColumnHeightOutlined, FullscreenOutlined, FullscreenExitOutlined } from '@ant-design/icons-vue'; import { RedoOutlined, ColumnHeightOutlined, FullscreenOutlined, FullscreenExitOutlined, LeftOutlined, RightOutlined } from '@ant-design/icons-vue';
import { computed, ComputedRef, ref, useSlots } from 'vue'; import { ref, onMounted } from 'vue';
import { Table, Form, Row, Col, Divider, Tooltip, Dropdown, Menu } from 'ant-design-vue'; import { Table, Form, Row, Col, Divider, Tooltip, Dropdown, Menu } from 'ant-design-vue';
const MenuItem = Menu.Item; import { SizeType } from '/@/components/Table';
import { default as TableTitle } from '/@/components/Table/src/components/TableTitle.vue'; import { listConfig, delConfig } from '/@/api/platform/system/controller/config';
import {
BasicTable,
useTable,
TableAction,
InnerHandlers,
ColumnChangeParam,
BasicTableProps,
} from '/@/components/Table';
import { getPopupContainer } from '/@/utils';
//import { list, remove } from '/@/api/platform/system/controller/config';
import ConfigModal from './ConfigModal.vue'; import ConfigModal from './ConfigModal.vue';
import { searchFormSchema } from './config.data'; import { columns } from './config.data';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { reactive, toRaw, unref } from 'vue'; import { reactive, toRaw, unref } from 'vue';
import {useModal} from "/@/components/Modal"; import {useModal} from "/@/components/Modal";
import {useDesign} from "/@/hooks/web/useDesign"; import {useDesign} from "/@/hooks/web/useDesign";
import { t } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import { createFormContext } from "/@/components/Form/src/hooks/useFormContext"; import { createFormContext } from "/@/components/Form/src/hooks/useFormContext";
import {useTableHeader} from "/@/components/Table/src/hooks/useTableHeader"; import {useTableHeader} from "/@/components/Table/src/hooks/useTableHeader";
import {basicProps} from "/@/components/Table/src/props"; import {basicProps} from "/@/components/Table/src/props";
import { convertDateRange } from "/@/utils/dateUtil";
const { createConfirm } = useMessage(); import { useFullscreen } from "@vueuse/core";
const { createMessage } = useMessage(); import { getPopupContainer } from '/@/utils';
const { prefixCls } = useDesign('basic-table'); import {useTimeoutFn} from "/@/hooks/core/useTimeout";
const { prefixCls: headerPrefixCls } = useDesign('basic-table-header');
interface ItemRender {
page: number;
type: 'page' | 'prev' | 'next';
originalElement: any;
}
/** 类型规范统一声明定义区域 */
interface TableState {
ids: string[];
single: boolean;
multiple: boolean;
total: number;
tableHeight: number;
tableInstance: ComponentRef;
selectedKeys: SizeType[];
queryParams: Recordable;
dataSource: any[];
dateRange: string[];
}
/** 通用变量统一声明区域 */
const ATable = Table; const ATable = Table;
const AForm = Form; const AForm = Form;
const AMenu = Menu;
const AFormItem = Form.Item; const AFormItem = Form.Item;
const ACol = Col; const AMenuItem = Menu.Item;
const ADivider = Divider;
const ATooltip = Tooltip;
const ADropdown = Dropdown;
const ARow = Row; const ARow = Row;
const ACol = Col;
const handlers: InnerHandlers = { const { t } = useI18n();
onColumnsChange: (data: ColumnChangeParam[]) => { const wrapRef = ref(null);
console.log(1111); const tableElRef = ref<ComponentRef>(null);
},
};
const dataSource = [
{
key: '1',
name: '胡彦斌',
age: 32,
address: '西湖区湖底公园1号',
},
{
key: '2',
name: '胡彦祖',
age: 42,
address: '西湖区湖底公园1号',
},
];
const columns = [ const { createConfirm } = useMessage();
{ const { createMessage } = useMessage();
title: '姓名',
dataIndex: 'name',
key: 'name',
},
{
title: '年龄',
dataIndex: 'age',
key: 'age',
},
{
title: '住址',
dataIndex: 'address',
key: 'address',
},
];
const state = reactive({ const { prefixCls } = useDesign('basic-table');
// const { prefixCls: headerPrefixCls } = useDesign('basic-table-header');
ids: [],
//
single: true,
//
multiple: true
});
const { toggle, isFullscreen } = useFullscreen(wrapRef);
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
const [registerTable, { reload }] = useTable({ /*const [registerTable, { reload }] = useTable({
title: '角色列表', title: '角色列表',
//api: list, //api: list,
columns, columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema
},
useSearchForm: true, useSearchForm: true,
showTableSetting: true, showTableSetting: true,
bordered: true, bordered: true,
@ -194,8 +192,59 @@
slots: { customRender: 'action' }, slots: { customRender: 'action' },
fixed: false fixed: false
} }
});*/
const state = reactive<TableState>({
//
ids: [],
//
single: true,
//
multiple: true,
//
total: 0,
//
tableHeight: 650,
// a-table
tableInstance: null,
//
selectedKeys: [ 'middle' ],
//
queryParams: {
current: 1,
size: 10
},
//
dataSource: [],
//
dateRange: []
});
/** 生命周期钩子回调处理区域 */
onMounted(() => {
state.tableInstance = unref(tableElRef);
if (! state.tableInstance?.$el) return;
// ,BasicTableref,,
const bodyEl: HTMLElement | null = state.tableInstance.$el.querySelector('.ant-table-body');
bodyEl && (bodyEl.style.height = `${state.tableHeight}px`);
useTimeoutFn(() => getList() , 16);
}); });
/** 搜索按钮操作 */
function handleQuery() {
state.queryParams.current = 1;
getList();
}
/** 查询列表数据 */
function getList() {
listConfig(convertDateRange(state.queryParams, state.dateRange)).then(response => {
state.dataSource = response.data;
state.total = response.total;
});
}
/** 处理多选框选中数据 */ /** 处理多选框选中数据 */
function handleSelectionChange(selection?: Recordable) { function handleSelectionChange(selection?: Recordable) {
const rawRows = toRaw(selection?.rows) || []; const rawRows = toRaw(selection?.rows) || [];

Loading…
Cancel
Save