1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <template>
- <a-drawer v-model:visible="visible"
- :title="title"
- :width="width"
- :destroy-on-close="destroyOnClose"
- :placement="placement">
- <a-table :rowKey="rowKey"
- :columns="columns"
- :data-source="source"
- :pagination="tablePageOptions"
- @change="onPageChange">
- <template #operator="{ record }">
- <slot :data="record"></slot>
- </template>
- </a-table>
- </a-drawer>
- </template>
- <script lang="ts">
- import { defineComponent, PropType, ref, watchEffect } from "vue";
- import usePagination from "@/hooks/usePagination";
- import { IMeta, PageOptions } from "@/types/api";
- const DrawerWrapper = defineComponent({
- props: {
- show: {
- type: Boolean,
- default: false,
- },
- destroyOnClose: {
- type: Boolean,
- default: true,
- },
- width: {
- type: [Number, String],
- default: "70%",
- },
- placement: {
- type: String,
- default: "right",
- },
- rowKey: {
- type: String,
- default: "id",
- },
- title: String,
- source: Array,
- columns: Array,
- meta: {
- type: Object as PropType<Partial<IMeta>>,
- default: {},
- },
- },
- emits: ["update:show", "pageChange"],
- setup(props, { emit }) {
- const { meta, tablePageOptions } = usePagination();
- let visible = ref(props.show);
- watchEffect(() => (meta.value = props.meta));
- watchEffect(() => (visible.value = props.show));
- watchEffect(() => emit("update:show", visible.value));
- const onPageChange = (pagination: PageOptions) => {
- emit("pageChange", pagination.current);
- };
- return { visible, tablePageOptions, onPageChange };
- },
- });
- export default DrawerWrapper;
- </script>
|