From 64eed7b39a5f760b19688a74a8ea0c7299eba770 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 7 Oct 2025 10:47:07 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E3=80=90antd=E3=80=91=E3=80=90ele?= =?UTF-8?q?=E3=80=91=E3=80=90member=20=E4=BC=9A=E5=91=98=E3=80=91signin=20?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=20antd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/member/signin/config/data.ts | 35 +++++++++++++------ .../src/views/member/signin/config/index.vue | 16 ++++++--- .../member/signin/config/modules/form.vue | 2 +- .../src/views/member/signin/record/data.ts | 15 +++++++- .../src/views/member/signin/record/index.vue | 9 ++++- 5 files changed, 60 insertions(+), 17 deletions(-) diff --git a/apps/web-antd/src/views/member/signin/config/data.ts b/apps/web-antd/src/views/member/signin/config/data.ts index c1237cdd7..2d3ca68ae 100644 --- a/apps/web-antd/src/views/member/signin/config/data.ts +++ b/apps/web-antd/src/views/member/signin/config/data.ts @@ -6,6 +6,16 @@ import { getDictOptions } from '@vben/hooks'; import { z } from '#/adapter/form'; +/** 奖励验证函数 */ +const awardValidator = (value: number, formData: any, field: string) => { + const point = formData.point || 0; + const experience = formData.experience || 0; + if (point === 0 && experience === 0) { + return '奖励积分与奖励经验至少配置一个'; + } + return true; +}; + /** 新增/修改的表单 */ export function useFormSchema(): VbenFormSchema[] { return [ @@ -26,7 +36,9 @@ export function useFormSchema(): VbenFormSchema[] { min: 1, max: 7, precision: 0, + placeholder: '请输入签到天数', }, + rules: z.number().min(1).max(7, '签到天数必须在1-7之间'), }, { component: 'InputNumber', @@ -35,7 +47,11 @@ export function useFormSchema(): VbenFormSchema[] { componentProps: { min: 0, precision: 0, + placeholder: '请输入获得积分', }, + rules: z.number().min(0, '获得积分不能小于0').refine(awardValidator, { + message: '奖励积分与奖励经验至少配置一个', + }), }, { component: 'InputNumber', @@ -44,7 +60,11 @@ export function useFormSchema(): VbenFormSchema[] { componentProps: { min: 0, precision: 0, + placeholder: '请输入奖励经验', }, + rules: z.number().min(0, '奖励经验不能小于0').refine(awardValidator, { + message: '奖励积分与奖励经验至少配置一个', + }), }, { fieldName: 'status', @@ -63,39 +83,34 @@ export function useFormSchema(): VbenFormSchema[] { /** 列表的字段 */ export function useGridColumns(): VxeTableGridOptions['columns'] { return [ - { - field: 'id', - title: '编号', - }, { field: 'day', title: '签到天数', + minWidth: 120, formatter: ({ cellValue }) => ['第', cellValue, '天'].join(' '), }, { field: 'point', title: '获得积分', + minWidth: 120, }, { field: 'experience', title: '奖励经验', + minWidth: 120, }, { field: 'status', title: '状态', + minWidth: 100, cellRender: { name: 'CellDict', props: { type: DICT_TYPE.COMMON_STATUS }, }, }, - { - field: 'createTime', - title: '创建时间', - formatter: 'formatDateTime', - }, { title: '操作', - width: 130, + width: 150, fixed: 'right', slots: { default: 'actions' }, }, diff --git a/apps/web-antd/src/views/member/signin/config/index.vue b/apps/web-antd/src/views/member/signin/config/index.vue index cbee2f478..43de9e233 100644 --- a/apps/web-antd/src/views/member/signin/config/index.vue +++ b/apps/web-antd/src/views/member/signin/config/index.vue @@ -2,7 +2,7 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { MemberSignInConfigApi } from '#/api/member/signin/config'; -import { Page, useVbenModal } from '@vben/common-ui'; +import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { message } from 'ant-design-vue'; @@ -22,7 +22,7 @@ const [FormModal, formModalApi] = useVbenModal({ }); /** 刷新表格 */ -function onRefresh() { +function handleRefresh() { gridApi.query(); } @@ -47,7 +47,7 @@ async function handleDelete(row: MemberSignInConfigApi.SignInConfig) { message.success({ content: $t('ui.actionMessage.deleteSuccess'), }); - onRefresh(); + handleRefresh(); } finally { hideLoading(); } @@ -70,6 +70,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ }, rowConfig: { keyField: 'id', + isHover: true, }, toolbarConfig: { refresh: true, @@ -81,7 +82,14 @@ const [Grid, gridApi] = useVbenVxeGrid({