feat: 签到记录

pull/119/head
xingyu4j 2025-05-28 21:06:48 +08:00
parent d1ae887eba
commit 2e3c43091a
2 changed files with 103 additions and 25 deletions

View File

@ -0,0 +1,58 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { getRangePickerDefaultProps } from '#/utils';
/** 列表的搜索表单 */
export function useGridFormSchema(): VbenFormSchema[] {
return [
{
fieldName: 'nickname',
label: '签到用户',
component: 'Input',
},
{
fieldName: 'day',
label: '签到天数',
component: 'Input',
},
{
fieldName: 'createTime',
label: '签到时间',
component: 'RangePicker',
componentProps: {
...getRangePickerDefaultProps(),
allowClear: true,
},
},
];
}
/** 列表的字段 */
export function useGridColumns(): VxeTableGridOptions['columns'] {
return [
{
field: 'id',
title: '编号',
},
{
field: 'nickname',
title: '签到用户',
},
{
field: 'day',
title: '签到天数',
formatter: ({ cellValue }) => ['第', cellValue, '天'].join(' '),
},
{
field: 'point',
title: '获得积分',
slots: { default: 'point' },
},
{
field: 'createTime',
title: '签到时间',
formatter: 'formatDateTime',
},
];
}

View File

@ -1,34 +1,54 @@
<script lang="ts" setup>
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MemberSignInRecordApi } from '#/api/member/signin/record';
import { Page } from '@vben/common-ui';
import { Button } from 'ant-design-vue';
import { Tag } from 'ant-design-vue';
import { DocAlert } from '#/components/doc-alert';
import { useVbenVxeGrid } from '#/adapter/vxe-table';
import { getSignInRecordPage } from '#/api/member/signin/record';
import { useGridColumns, useGridFormSchema } from './data';
const [Grid] = useVbenVxeGrid({
formOptions: {
schema: useGridFormSchema(),
},
gridOptions: {
columns: useGridColumns(),
height: 'auto',
keepSource: true,
proxyConfig: {
ajax: {
query: async ({ page }, formValues) => {
return await getSignInRecordPage({
pageNo: page.currentPage,
pageSize: page.pageSize,
...formValues,
});
},
},
},
rowConfig: {
keyField: 'id',
},
toolbarConfig: {
refresh: { code: 'query' },
search: true,
},
} as VxeTableGridOptions<MemberSignInRecordApi.SignInRecord>,
});
</script>
<template>
<Page>
<DocAlert
title="会员等级、积分、签到"
url="https://doc.iocoder.cn/member/level/"
/>
<Button
danger
type="link"
target="_blank"
href="https://github.com/yudaocode/yudao-ui-admin-vue3"
>
该功能支持 Vue3 + element-plus 版本
</Button>
<br />
<Button
type="link"
target="_blank"
href="https://github.com/yudaocode/yudao-ui-admin-vue3/blob/master/src/views/member/signin/record/index"
>
可参考
https://github.com/yudaocode/yudao-ui-admin-vue3/blob/master/src/views/member/signin/record/index
代码pull request 贡献给我们
</Button>
<Page auto-content-height>
<Grid table-title="">
<template #point="{ row }">
<Tag :color="row.point > 0 ? '#108ee9' : '#f50'">
{{ row.point > 0 ? `+${row.point}` : row.point }}
</Tag>
</template>
</Grid>
</Page>
</template>