From 2dd3471f980ed7d84723e7553a690eaf6c718b97 Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Tue, 28 Oct 2025 14:17:28 +0800 Subject: [PATCH 01/19] =?UTF-8?q?fix:=20antdv=20ele=20detail=20=20?= =?UTF-8?q?=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/infra/apiAccessLog/data.ts | 2 +- .../src/views/pay/notify/modules/detail.vue | 8 +- .../src/views/pay/order/modules/detail.vue | 8 +- .../src/views/pay/refund/modules/detail.vue | 8 +- .../src/views/pay/transfer/modules/detail.vue | 8 +- .../views/system/loginlog/modules/detail.vue | 8 +- .../views/system/mail/log/modules/detail.vue | 8 +- .../system/notify/message/modules/detail.vue | 8 +- .../views/system/notify/my/modules/detail.vue | 8 +- .../system/operatelog/modules/detail.vue | 8 +- .../views/system/sms/log/modules/detail.vue | 8 +- .../system/social/user/modules/detail.vue | 12 ++- .../components/description/description.vue | 3 +- .../src/components/description/typing.ts | 2 - .../src/views/infra/apiAccessLog/data.ts | 2 +- .../infra/apiAccessLog/modules/detail.vue | 2 +- .../infra/apiErrorLog/modules/detail.vue | 1 + .../src/views/infra/job/modules/detail.vue | 1 + .../src/views/infra/redis/modules/info.vue | 2 +- .../views/mall/trade/afterSale/detail/data.ts | 41 +++++------ .../mall/trade/afterSale/detail/index.vue | 39 ++++------ .../src/views/mall/trade/order/detail/data.ts | 73 +++++++------------ .../views/mall/trade/order/detail/index.vue | 32 +++----- apps/web-ele/src/views/pay/notify/data.ts | 21 ++---- .../src/views/pay/notify/modules/detail.vue | 12 +-- .../src/views/pay/order/modules/detail.vue | 1 + .../system/notify/message/modules/detail.vue | 1 + .../views/system/notify/my/modules/detail.vue | 1 + .../system/operatelog/modules/detail.vue | 2 +- .../system/social/user/modules/detail.vue | 2 + 30 files changed, 131 insertions(+), 201 deletions(-) diff --git a/apps/web-antd/src/views/infra/apiAccessLog/data.ts b/apps/web-antd/src/views/infra/apiAccessLog/data.ts index 73662e3a3..83b2977c0 100644 --- a/apps/web-antd/src/views/infra/apiAccessLog/data.ts +++ b/apps/web-antd/src/views/infra/apiAccessLog/data.ts @@ -245,7 +245,7 @@ export function useDetailSchema(): DescriptionItemSchema[] { render: (val, data) => { if (val === 0) { return '正常'; - } else if (val > 0 && data?.resultCode > 0) { + } else if (val > 0 && data?.resultMsg) { return `失败 | ${val} | ${data.resultMsg}`; } return ''; diff --git a/apps/web-antd/src/views/pay/notify/modules/detail.vue b/apps/web-antd/src/views/pay/notify/modules/detail.vue index 7914903da..fb79db80a 100644 --- a/apps/web-antd/src/views/pay/notify/modules/detail.vue +++ b/apps/web-antd/src/views/pay/notify/modules/detail.vue @@ -17,11 +17,9 @@ import { useDetailLogColumns, useDetailSchema } from '../data'; const formData = ref(); const [Description] = useDescription({ - componentProps: { - bordered: true, - column: 2, - class: 'mx-4', - }, + bordered: true, + column: 2, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/pay/order/modules/detail.vue b/apps/web-antd/src/views/pay/order/modules/detail.vue index dea8cdad4..68b5426c2 100644 --- a/apps/web-antd/src/views/pay/order/modules/detail.vue +++ b/apps/web-antd/src/views/pay/order/modules/detail.vue @@ -13,11 +13,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 2, - class: 'mx-4', - }, + bordered: true, + column: 2, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/pay/refund/modules/detail.vue b/apps/web-antd/src/views/pay/refund/modules/detail.vue index 1617b1d60..79adf6d65 100644 --- a/apps/web-antd/src/views/pay/refund/modules/detail.vue +++ b/apps/web-antd/src/views/pay/refund/modules/detail.vue @@ -13,11 +13,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 2, - class: 'mx-4', - }, + bordered: true, + column: 2, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/pay/transfer/modules/detail.vue b/apps/web-antd/src/views/pay/transfer/modules/detail.vue index f3841f080..ea9fb84b6 100644 --- a/apps/web-antd/src/views/pay/transfer/modules/detail.vue +++ b/apps/web-antd/src/views/pay/transfer/modules/detail.vue @@ -13,11 +13,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 2, - class: 'mx-4', - }, + bordered: true, + column: 2, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/system/loginlog/modules/detail.vue b/apps/web-antd/src/views/system/loginlog/modules/detail.vue index 61bcc89b6..a0970c5c2 100644 --- a/apps/web-antd/src/views/system/loginlog/modules/detail.vue +++ b/apps/web-antd/src/views/system/loginlog/modules/detail.vue @@ -12,11 +12,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 1, - class: 'mx-4', - }, + bordered: true, + column: 1, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/system/mail/log/modules/detail.vue b/apps/web-antd/src/views/system/mail/log/modules/detail.vue index f4f465982..e9fe28d76 100644 --- a/apps/web-antd/src/views/system/mail/log/modules/detail.vue +++ b/apps/web-antd/src/views/system/mail/log/modules/detail.vue @@ -12,11 +12,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 2, - class: 'mx-4', - }, + bordered: true, + column: 2, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/system/notify/message/modules/detail.vue b/apps/web-antd/src/views/system/notify/message/modules/detail.vue index 0a3597176..7b4afe83e 100644 --- a/apps/web-antd/src/views/system/notify/message/modules/detail.vue +++ b/apps/web-antd/src/views/system/notify/message/modules/detail.vue @@ -12,11 +12,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 1, - class: 'mx-4', - }, + bordered: true, + column: 1, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/system/notify/my/modules/detail.vue b/apps/web-antd/src/views/system/notify/my/modules/detail.vue index 0a3597176..7b4afe83e 100644 --- a/apps/web-antd/src/views/system/notify/my/modules/detail.vue +++ b/apps/web-antd/src/views/system/notify/my/modules/detail.vue @@ -12,11 +12,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 1, - class: 'mx-4', - }, + bordered: true, + column: 1, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/system/operatelog/modules/detail.vue b/apps/web-antd/src/views/system/operatelog/modules/detail.vue index ad77e52ba..e69d8b20d 100644 --- a/apps/web-antd/src/views/system/operatelog/modules/detail.vue +++ b/apps/web-antd/src/views/system/operatelog/modules/detail.vue @@ -12,11 +12,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 1, - class: 'mx-4', - }, + bordered: true, + column: 1, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/system/sms/log/modules/detail.vue b/apps/web-antd/src/views/system/sms/log/modules/detail.vue index e440a8de3..71cfb2c3a 100644 --- a/apps/web-antd/src/views/system/sms/log/modules/detail.vue +++ b/apps/web-antd/src/views/system/sms/log/modules/detail.vue @@ -12,11 +12,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 2, - class: 'mx-4', - }, + bordered: true, + column: 2, + class: 'mx-4', schema: useDetailSchema(), }); diff --git a/apps/web-antd/src/views/system/social/user/modules/detail.vue b/apps/web-antd/src/views/system/social/user/modules/detail.vue index 6234ae279..df24c9bab 100644 --- a/apps/web-antd/src/views/system/social/user/modules/detail.vue +++ b/apps/web-antd/src/views/system/social/user/modules/detail.vue @@ -14,13 +14,11 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ - componentProps: { - bordered: true, - column: 1, - size: 'middle', - class: 'mx-4', - labelStyle: { width: '185px' }, - }, + bordered: true, + column: 1, + size: 'middle', + class: 'mx-4', + labelStyle: { width: '185px' }, schema: useDetailSchema(), }); diff --git a/apps/web-ele/src/components/description/description.vue b/apps/web-ele/src/components/description/description.vue index 527c886f2..3272748e3 100644 --- a/apps/web-ele/src/components/description/description.vue +++ b/apps/web-ele/src/components/description/description.vue @@ -10,8 +10,7 @@ import { get, getNestedValue, isFunction } from '@vben/utils'; import { ElDescriptions, ElDescriptionsItem } from 'element-plus'; const props = { - // TODO @星语:bordered 不生效;之前好像是 border - bordered: { default: true, type: Boolean }, + border: { default: true, type: Boolean }, column: { default: () => { return { lg: 3, md: 3, sm: 2, xl: 3, xs: 1, xxl: 4 }; diff --git a/apps/web-ele/src/components/description/typing.ts b/apps/web-ele/src/components/description/typing.ts index eb16c33d2..fca7f62c3 100644 --- a/apps/web-ele/src/components/description/typing.ts +++ b/apps/web-ele/src/components/description/typing.ts @@ -32,8 +32,6 @@ export interface DescriptionProps extends ElDescriptionProps { schema: DescriptionItemSchema[]; // 数据 data: Recordable; - // 是否包含边框 - bordered?: boolean; } export interface DescInstance { diff --git a/apps/web-ele/src/views/infra/apiAccessLog/data.ts b/apps/web-ele/src/views/infra/apiAccessLog/data.ts index f10d3be8e..0abdede2d 100644 --- a/apps/web-ele/src/views/infra/apiAccessLog/data.ts +++ b/apps/web-ele/src/views/infra/apiAccessLog/data.ts @@ -245,7 +245,7 @@ export function useDetailSchema(): DescriptionItemSchema[] { render: (val, data) => { if (val === 0) { return '正常'; - } else if (data && data.resultCode > 0) { + } else if (data && data.resultMsg) { return `失败 | ${val} | ${data.resultMsg}`; } return ''; diff --git a/apps/web-ele/src/views/infra/apiAccessLog/modules/detail.vue b/apps/web-ele/src/views/infra/apiAccessLog/modules/detail.vue index 3b0186176..f5b3c65a3 100644 --- a/apps/web-ele/src/views/infra/apiAccessLog/modules/detail.vue +++ b/apps/web-ele/src/views/infra/apiAccessLog/modules/detail.vue @@ -11,8 +11,8 @@ import { useDetailSchema } from '../data'; const formData = ref(); -// TODO @xingyu:antd 和 el 这 2 个组件在这个模块的 detail.vue 不一样,看看是不是统一?还是就是区分的哈? const [Descriptions] = useDescription({ + border: true, column: 1, labelWidth: 110, schema: useDetailSchema(), diff --git a/apps/web-ele/src/views/infra/apiErrorLog/modules/detail.vue b/apps/web-ele/src/views/infra/apiErrorLog/modules/detail.vue index 40a3a8aa2..bfe5fbd23 100644 --- a/apps/web-ele/src/views/infra/apiErrorLog/modules/detail.vue +++ b/apps/web-ele/src/views/infra/apiErrorLog/modules/detail.vue @@ -12,6 +12,7 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ + border: true, column: 1, labelWidth: 110, schema: useDetailSchema(), diff --git a/apps/web-ele/src/views/infra/job/modules/detail.vue b/apps/web-ele/src/views/infra/job/modules/detail.vue index 0ee8e5133..01528a091 100644 --- a/apps/web-ele/src/views/infra/job/modules/detail.vue +++ b/apps/web-ele/src/views/infra/job/modules/detail.vue @@ -14,6 +14,7 @@ const formData = ref(); // 任务详情 const nextTimes = ref([]); // 下一次执行时间 const [Descriptions] = useDescription({ + border: true, column: 1, labelWidth: 140, schema: useDetailSchema(), diff --git a/apps/web-ele/src/views/infra/redis/modules/info.vue b/apps/web-ele/src/views/infra/redis/modules/info.vue index bee9922bb..95859e3c0 100644 --- a/apps/web-ele/src/views/infra/redis/modules/info.vue +++ b/apps/web-ele/src/views/infra/redis/modules/info.vue @@ -8,7 +8,7 @@ defineProps<{ }>(); const [Descriptions] = useDescription({ - bordered: false, + border: false, column: 6, schema: [ { diff --git a/apps/web-ele/src/views/mall/trade/afterSale/detail/data.ts b/apps/web-ele/src/views/mall/trade/afterSale/detail/data.ts index 9cdc2ec37..1e532c935 100644 --- a/apps/web-ele/src/views/mall/trade/afterSale/detail/data.ts +++ b/apps/web-ele/src/views/mall/trade/afterSale/detail/data.ts @@ -1,4 +1,3 @@ -import type { MallAfterSaleApi } from '#/api/mall/trade/afterSale'; import type { DescriptionItemSchema } from '#/components/description'; import { h } from 'vue'; @@ -20,19 +19,19 @@ export function useOrderInfoSchema(): DescriptionItemSchema[] { { field: 'order.deliveryType', label: '配送方式', - content: (data: MallAfterSaleApi.AfterSale) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_DELIVERY_TYPE, - value: data?.order?.deliveryType, + value: val, }), }, { field: 'order.type', label: '订单类型', - content: (data: MallAfterSaleApi.AfterSale) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_ORDER_TYPE, - value: data?.order?.type, + value: val, }), }, { @@ -46,10 +45,10 @@ export function useOrderInfoSchema(): DescriptionItemSchema[] { { field: 'order.terminal', label: '订单来源', - content: (data: MallAfterSaleApi.AfterSale) => + render: (val) => h(DictTag, { type: DICT_TYPE.TERMINAL, - value: data?.order?.terminal, + value: val, }), }, { @@ -67,10 +66,10 @@ export function useOrderInfoSchema(): DescriptionItemSchema[] { { field: 'order.payChannelCode', label: '付款方式', - content: (data: MallAfterSaleApi.AfterSale) => + render: (val) => h(DictTag, { type: DICT_TYPE.PAY_CHANNEL_CODE, - value: data?.order?.payChannelCode, + value: val, }), }, { @@ -90,32 +89,30 @@ export function useAfterSaleInfoSchema(): DescriptionItemSchema[] { { field: 'auditTime', label: '申请时间', - content: (data: MallAfterSaleApi.AfterSale) => - formatDate(data?.auditTime) as string, + render: (val) => formatDate(val) as string, }, { field: 'type', label: '售后类型', - content: (data: MallAfterSaleApi.AfterSale) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_AFTER_SALE_TYPE, - value: data?.type, + value: val, }), }, { field: 'way', label: '售后方式', - content: (data: MallAfterSaleApi.AfterSale) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_AFTER_SALE_WAY, - value: data?.way, + value: val, }), }, { field: 'refundPrice', label: '退款金额', - content: (data: MallAfterSaleApi.AfterSale) => - fenToYuan(data?.refundPrice ?? 0), + render: (val) => fenToYuan(val ?? 0), }, { field: 'applyReason', @@ -128,8 +125,8 @@ export function useAfterSaleInfoSchema(): DescriptionItemSchema[] { { field: 'applyPicUrls', label: '凭证图片', - content: (data) => { - const images = data?.applyPicUrls || []; + render: (val) => { + const images = val || []; return h( 'div', { class: 'flex gap-10px' }, @@ -153,16 +150,16 @@ export function useRefundStatusSchema(): DescriptionItemSchema[] { { field: 'status', label: '退款状态', - content: (data) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_AFTER_SALE_STATUS, - value: data?.status, + value: val, }), }, { field: 'reminder', label: '提醒', - content: () => + render: () => h('div', { class: 'text-red-500 mb-10px' }, [ h('div', '如果未发货,请点击同意退款给买家。'), h('div', '如果实际已发货,请主动与买家联系。'), diff --git a/apps/web-ele/src/views/mall/trade/afterSale/detail/index.vue b/apps/web-ele/src/views/mall/trade/afterSale/detail/index.vue index c5230f2c6..66d4e6bdd 100644 --- a/apps/web-ele/src/views/mall/trade/afterSale/detail/index.vue +++ b/apps/web-ele/src/views/mall/trade/afterSale/detail/index.vue @@ -49,38 +49,29 @@ const afterSale = ref({ }); const [OrderDescriptions] = useDescription({ - componentProps: { - title: '订单信息', - border: false, - column: 3, - direction: 'horizontal', - labelWidth: 140, - extra: '', - }, + title: '订单信息', + border: false, + column: 3, + direction: 'horizontal', + labelWidth: 140, schema: useOrderInfoSchema(), }); const [AfterSaleDescriptions] = useDescription({ - componentProps: { - title: '售后信息', - border: false, - column: 3, - direction: 'horizontal', - labelWidth: 140, - extra: '', - }, + title: '售后信息', + border: false, + column: 3, + direction: 'horizontal', + labelWidth: 140, schema: useAfterSaleInfoSchema(), }); const [RefundStatusDescriptions] = useDescription({ - componentProps: { - title: '退款状态', - border: false, - column: 1, - direction: 'horizontal', - labelWidth: 140, - extra: '', - }, + title: '退款状态', + border: false, + column: 1, + direction: 'horizontal', + labelWidth: 140, schema: useRefundStatusSchema(), }); diff --git a/apps/web-ele/src/views/mall/trade/order/detail/data.ts b/apps/web-ele/src/views/mall/trade/order/detail/data.ts index 74dfbcfda..febf4ed5e 100644 --- a/apps/web-ele/src/views/mall/trade/order/detail/data.ts +++ b/apps/web-ele/src/views/mall/trade/order/detail/data.ts @@ -1,5 +1,4 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; -import type { MallOrderApi } from '#/api/mall/trade/order'; import type { DescriptionItemSchema } from '#/components/description'; import { h } from 'vue'; @@ -23,19 +22,19 @@ export function useOrderInfoSchema(): DescriptionItemSchema[] { { field: 'type', label: '订单类型', - content: (data: MallOrderApi.Order) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_ORDER_TYPE, - value: data?.type, + value: val, }), }, { field: 'terminal', label: '订单来源', - content: (data: MallOrderApi.Order) => + render: (val) => h(DictTag, { type: DICT_TYPE.TERMINAL, - value: data?.terminal, + value: val, }), }, { @@ -53,10 +52,10 @@ export function useOrderInfoSchema(): DescriptionItemSchema[] { { field: 'payChannelCode', label: '付款方式', - content: (data: MallOrderApi.Order) => + render: (val) => h(DictTag, { type: DICT_TYPE.PAY_CHANNEL_CODE, - value: data?.payChannelCode, + value: val, }), }, { @@ -72,16 +71,16 @@ export function useOrderStatusSchema(): DescriptionItemSchema[] { { field: 'status', label: '订单状态', - content: (data: MallOrderApi.Order) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_ORDER_STATUS, - value: data?.status, + value: val, }), }, { field: 'reminder', label: '提醒', - content: () => + render: () => h('div', { class: 'space-y-1' }, [ h('div', '买家付款成功后,货款将直接进入您的商户号(微信、支付宝)'), h('div', '请及时关注你发出的包裹状态,确保可以配送至买家手中'), @@ -100,66 +99,46 @@ export function useOrderPriceSchema(): DescriptionItemSchema[] { { field: 'totalPrice', label: '商品总额', - content: (data: MallOrderApi.Order) => - `${fenToYuan(data?.totalPrice ?? 0)} 元`, + render: (val) => `${fenToYuan(val ?? 0)} 元`, }, { field: 'deliveryPrice', label: '运费金额', - content: (data: MallOrderApi.Order) => - `${fenToYuan(data?.deliveryPrice ?? 0)} 元`, + render: (val) => `${fenToYuan(val ?? 0)} 元`, }, { field: 'adjustPrice', label: '订单调价', - content: (data: MallOrderApi.Order) => - `${fenToYuan(data?.adjustPrice ?? 0)} 元`, + render: (val) => `${fenToYuan(val ?? 0)} 元`, }, { field: 'couponPrice', label: '优惠劵优惠', - content: (data: MallOrderApi.Order) => - h( - 'span', - { class: 'text-red-500' }, - `${fenToYuan(data?.couponPrice ?? 0)} 元`, - ), + render: (val) => + h('span', { class: 'text-red-500' }, `${fenToYuan(val ?? 0)} 元`), }, { field: 'vipPrice', label: 'VIP 优惠', - content: (data: MallOrderApi.Order) => - h( - 'span', - { class: 'text-red-500' }, - `${fenToYuan(data?.vipPrice ?? 0)} 元`, - ), + render: (val) => + h('span', { class: 'text-red-500' }, `${fenToYuan(val ?? 0)} 元`), }, { field: 'discountPrice', label: '活动优惠', - content: (data: MallOrderApi.Order) => - h( - 'span', - { class: 'text-red-500' }, - `${fenToYuan(data?.discountPrice ?? 0)} 元`, - ), + render: (val) => + h('span', { class: 'text-red-500' }, `${fenToYuan(val ?? 0)} 元`), }, { field: 'pointPrice', label: '积分抵扣', - content: (data: MallOrderApi.Order) => - h( - 'span', - { class: 'text-red-500' }, - `${fenToYuan(data?.pointPrice ?? 0)} 元`, - ), + render: (val) => + h('span', { class: 'text-red-500' }, `${fenToYuan(val ?? 0)} 元`), }, { field: 'payPrice', label: '应付金额', - content: (data: MallOrderApi.Order) => - `${fenToYuan(data?.payPrice ?? 0)} 元`, + render: (val) => `${fenToYuan(val ?? 0)} 元`, }, ]; } @@ -170,10 +149,10 @@ export function useDeliveryInfoSchema(): DescriptionItemSchema[] { { field: 'deliveryType', label: '配送方式', - content: (data: MallOrderApi.Order) => + render: (val) => h(DictTag, { type: DICT_TYPE.TRADE_DELIVERY_TYPE, - value: data?.deliveryType, + value: val, }), }, { @@ -187,14 +166,12 @@ export function useDeliveryInfoSchema(): DescriptionItemSchema[] { { field: 'receiverAddress', label: '收货地址', - content: (data: MallOrderApi.Order) => - `${data?.receiverAreaName} ${data?.receiverDetailAddress}`.trim(), + render: (val, data) => `${data?.receiverAreaName} ${val}`.trim(), }, { field: 'deliveryTime', label: '发货时间', - content: (data: MallOrderApi.Order) => - formatDateTime(data?.deliveryTime) as string, + render: (val) => formatDateTime(val) as string, }, ]; } diff --git a/apps/web-ele/src/views/mall/trade/order/detail/index.vue b/apps/web-ele/src/views/mall/trade/order/detail/index.vue index dbae802ef..d0700e91c 100644 --- a/apps/web-ele/src/views/mall/trade/order/detail/index.vue +++ b/apps/web-ele/src/views/mall/trade/order/detail/index.vue @@ -57,38 +57,30 @@ const expressTrackList = ref([]); const pickUpStore = ref(); const [OrderInfoDescriptions] = useDescription({ - componentProps: { - title: '订单信息', - border: false, - column: 3, - }, + title: '订单信息', + border: false, + column: 3, schema: useOrderInfoSchema(), }); const [OrderStatusDescriptions] = useDescription({ - componentProps: { - title: '订单状态', - border: false, - column: 1, - }, + title: '订单状态', + border: false, + column: 1, schema: useOrderStatusSchema(), }); const [OrderPriceDescriptions] = useDescription({ - componentProps: { - title: '费用信息', - border: false, - column: 4, - }, + title: '费用信息', + border: false, + column: 4, schema: useOrderPriceSchema(), }); const [DeliveryInfoDescriptions] = useDescription({ - componentProps: { - title: '收货信息', - border: false, - column: 3, - }, + title: '收货信息', + border: false, + column: 3, schema: useDeliveryInfoSchema(), }); diff --git a/apps/web-ele/src/views/pay/notify/data.ts b/apps/web-ele/src/views/pay/notify/data.ts index 8d301628d..d94c31865 100644 --- a/apps/web-ele/src/views/pay/notify/data.ts +++ b/apps/web-ele/src/views/pay/notify/data.ts @@ -1,6 +1,5 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { VxeTableGridOptions } from '#/adapter/vxe-table'; -import type { PayNotifyApi } from '#/api/pay/notify'; import type { DescriptionItemSchema } from '#/components/description'; import { h } from 'vue'; @@ -182,10 +181,10 @@ export function useDetailSchema(): DescriptionItemSchema[] { { field: 'type', label: '通知类型', - content: (data: PayNotifyApi.NotifyTask) => + render: (val) => h(DictTag, { type: DICT_TYPE.PAY_NOTIFY_TYPE, - value: data?.type, + value: val, }), }, { @@ -195,10 +194,10 @@ export function useDetailSchema(): DescriptionItemSchema[] { { field: 'status', label: '通知状态', - content: (data: PayNotifyApi.NotifyTask) => + render: (val) => h(DictTag, { type: DICT_TYPE.PAY_NOTIFY_STATUS, - value: data?.status, + value: val, }), }, { @@ -208,14 +207,12 @@ export function useDetailSchema(): DescriptionItemSchema[] { { field: 'lastExecuteTime', label: '最后通知时间', - content: (data: PayNotifyApi.NotifyTask) => - formatDateTime(data?.lastExecuteTime) as string, + render: (val) => formatDateTime(val) as string, }, { field: 'nextNotifyTime', label: '下次通知时间', - content: (data: PayNotifyApi.NotifyTask) => - formatDateTime(data?.nextNotifyTime) as string, + render: (val) => formatDateTime(val) as string, }, { field: 'notifyTimes', @@ -228,14 +225,12 @@ export function useDetailSchema(): DescriptionItemSchema[] { { field: 'createTime', label: '创建时间', - content: (data: PayNotifyApi.NotifyTask) => - formatDateTime(data?.createTime) as string, + render: (val) => formatDateTime(val) as string, }, { field: 'updateTime', label: '更新时间', - content: (data: PayNotifyApi.NotifyTask) => - formatDateTime(data?.updateTime) as string, + render: (val) => formatDateTime(val) as string, }, ]; } diff --git a/apps/web-ele/src/views/pay/notify/modules/detail.vue b/apps/web-ele/src/views/pay/notify/modules/detail.vue index 26bc4a747..0375c6fa3 100644 --- a/apps/web-ele/src/views/pay/notify/modules/detail.vue +++ b/apps/web-ele/src/views/pay/notify/modules/detail.vue @@ -17,14 +17,10 @@ import { useDetailLogColumns, useDetailSchema } from '../data'; const formData = ref(); const [Description] = useDescription({ - componentProps: { - border: true, - column: 2, - direction: 'horizontal', - labelWidth: 140, - title: '', - extra: '', - }, + border: true, + column: 2, + direction: 'horizontal', + labelWidth: 140, schema: useDetailSchema(), }); diff --git a/apps/web-ele/src/views/pay/order/modules/detail.vue b/apps/web-ele/src/views/pay/order/modules/detail.vue index 4072e4e45..452e63e18 100644 --- a/apps/web-ele/src/views/pay/order/modules/detail.vue +++ b/apps/web-ele/src/views/pay/order/modules/detail.vue @@ -13,6 +13,7 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ + border: true, column: 2, labelWidth: 140, schema: useDetailSchema(), diff --git a/apps/web-ele/src/views/system/notify/message/modules/detail.vue b/apps/web-ele/src/views/system/notify/message/modules/detail.vue index 8d9385ab9..0db8555f5 100644 --- a/apps/web-ele/src/views/system/notify/message/modules/detail.vue +++ b/apps/web-ele/src/views/system/notify/message/modules/detail.vue @@ -12,6 +12,7 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ + border: true, column: 1, labelWidth: 140, schema: useDetailSchema(), diff --git a/apps/web-ele/src/views/system/notify/my/modules/detail.vue b/apps/web-ele/src/views/system/notify/my/modules/detail.vue index 8d9385ab9..0db8555f5 100644 --- a/apps/web-ele/src/views/system/notify/my/modules/detail.vue +++ b/apps/web-ele/src/views/system/notify/my/modules/detail.vue @@ -12,6 +12,7 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ + border: true, column: 1, labelWidth: 140, schema: useDetailSchema(), diff --git a/apps/web-ele/src/views/system/operatelog/modules/detail.vue b/apps/web-ele/src/views/system/operatelog/modules/detail.vue index cf892c0f1..d9d224f55 100644 --- a/apps/web-ele/src/views/system/operatelog/modules/detail.vue +++ b/apps/web-ele/src/views/system/operatelog/modules/detail.vue @@ -12,8 +12,8 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ + border: true, column: 1, - direction: 'horizontal', labelWidth: 110, schema: useDetailSchema(), }); diff --git a/apps/web-ele/src/views/system/social/user/modules/detail.vue b/apps/web-ele/src/views/system/social/user/modules/detail.vue index ffae89ce5..a70a29247 100644 --- a/apps/web-ele/src/views/system/social/user/modules/detail.vue +++ b/apps/web-ele/src/views/system/social/user/modules/detail.vue @@ -14,7 +14,9 @@ import { useDetailSchema } from '../data'; const formData = ref(); const [Descriptions] = useDescription({ + border: true, column: 1, + size: 'large', labelWidth: 185, schema: useDetailSchema(), }); From f88713ce289d441aea4893de642234e49cac1b9c Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Tue, 28 Oct 2025 14:19:22 +0800 Subject: [PATCH 02/19] chore: engines --- package.json | 4 +- pnpm-lock.yaml | 604 +++++++++++++++++++++++++------------------------ 2 files changed, 306 insertions(+), 302 deletions(-) diff --git a/package.json b/package.json index f7c29406c..0745b1137 100644 --- a/package.json +++ b/package.json @@ -95,8 +95,8 @@ "vue-tsc": "catalog:" }, "engines": { - "node": ">=20.10.0", - "pnpm": ">=9.12.0" + "node": ">=20.12.0", + "pnpm": ">=10.14.0" }, "packageManager": "pnpm@10.14.0", "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d74811fa4..a8a91aa6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,7 +74,7 @@ catalogs: version: 1.56.1 '@pnpm/workspace.read-manifest': specifier: ^1000.2.0 - version: 1000.2.4 + version: 1000.2.5 '@stylistic/stylelint-plugin': specifier: ^3.1.3 version: 3.1.3 @@ -134,7 +134,7 @@ catalogs: version: 14.1.2 '@types/node': specifier: ^22.16.0 - version: 22.18.11 + version: 22.18.12 '@types/nprogress': specifier: ^0.2.3 version: 0.2.3 @@ -152,10 +152,10 @@ catalogs: version: 1.15.8 '@typescript-eslint/eslint-plugin': specifier: ^8.35.1 - version: 8.46.1 + version: 8.46.2 '@typescript-eslint/parser': specifier: ^8.35.1 - version: 8.46.1 + version: 8.46.2 '@vee-validate/zod': specifier: ^4.15.1 version: 4.15.1 @@ -602,7 +602,7 @@ catalogs: version: 4.1.0 vxe-pc-ui: specifier: ^4.9.29 - version: 4.10.2 + version: 4.10.5 vxe-table: specifier: ^4.16.11 version: 4.17.0 @@ -633,13 +633,13 @@ importers: version: 0.5.1 '@changesets/cli': specifier: 'catalog:' - version: 2.29.7(@types/node@22.18.11) + version: 2.29.7(@types/node@22.18.12) '@playwright/test': specifier: 'catalog:' version: 1.56.1 '@types/node': specifier: 'catalog:' - version: 22.18.11 + version: 22.18.12 '@vben/commitlint-config': specifier: workspace:* version: link:internal/lint-configs/commitlint-config @@ -669,10 +669,10 @@ importers: version: link:scripts/vsh '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.1(vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + version: 6.0.1(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) '@vitejs/plugin-vue-jsx': specifier: 'catalog:' - version: 5.1.1(vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + version: 5.1.1(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) '@vue/test-utils': specifier: 'catalog:' version: 2.4.6 @@ -714,10 +714,10 @@ importers: version: 3.6.1(sass@1.93.2)(typescript@5.9.3)(vue-tsc@2.2.10(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3)) vite: specifier: 'catalog:' - version: 7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + version: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) vitest: specifier: 'catalog:' - version: 3.2.4(@types/node@22.18.11)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + version: 3.2.4(@types/node@22.18.12)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) vue: specifier: ^3.5.17 version: 3.5.22(typescript@5.9.3) @@ -854,6 +854,9 @@ importers: vue3-signature: specifier: 'catalog:' version: 0.2.4(vue@3.5.22(typescript@5.9.3)) + vuedraggable: + specifier: 'catalog:' + version: 4.1.0(vue@3.5.22(typescript@5.9.3)) apps/web-ele: dependencies: @@ -1043,20 +1046,20 @@ importers: version: 1.9.17(vue@3.5.22(typescript@5.9.3)) vitepress-plugin-group-icons: specifier: 'catalog:' - version: 1.6.4(markdown-it@14.1.0)(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)) + version: 1.6.4(markdown-it@14.1.0)(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)) devDependencies: '@nolebase/vitepress-plugin-git-changelog': specifier: 'catalog:' - version: 2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3)) + version: 2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3)) '@vben/vite-config': specifier: workspace:* version: link:../internal/vite-config '@vite-pwa/vitepress': specifier: 'catalog:' - version: 1.0.1(vite-plugin-pwa@1.1.0(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0)) + version: 1.0.1(vite-plugin-pwa@1.1.0(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0)) vitepress: specifier: 'catalog:' - version: 1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3) + version: 1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3) vue: specifier: ^3.5.17 version: 3.5.22(typescript@5.9.3) @@ -1065,7 +1068,7 @@ importers: dependencies: '@commitlint/cli': specifier: 'catalog:' - version: 19.8.1(@types/node@24.8.1)(typescript@5.9.3) + version: 19.8.1(@types/node@24.9.1)(typescript@5.9.3) '@commitlint/config-conventional': specifier: 'catalog:' version: 19.8.1 @@ -1092,7 +1095,7 @@ importers: version: 3.3.1(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-import-x: specifier: 'catalog:' - version: 4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + version: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) devDependencies: '@eslint/js': specifier: 'catalog:' @@ -1102,10 +1105,10 @@ importers: version: 9.6.1 '@typescript-eslint/eslint-plugin': specifier: 'catalog:' - version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 'catalog:' - version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: specifier: 'catalog:' version: 9.38.0(jiti@2.6.1) @@ -1138,13 +1141,13 @@ importers: version: 59.0.1(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-unused-imports: specifier: 'catalog:' - version: 4.3.0(@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) + version: 4.3.0(@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-vitest: specifier: 'catalog:' - version: 0.5.4(@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)(vitest@3.2.4(@types/node@24.8.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + version: 0.5.4(@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)(vitest@3.2.4(@types/node@24.9.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) eslint-plugin-vue: specifier: 'catalog:' - version: 10.5.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))) + version: 10.5.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))) globals: specifier: 'catalog:' version: 16.4.0 @@ -1299,7 +1302,7 @@ importers: version: link:../../packages/types vite: specifier: 'catalog:' - version: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + version: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) internal/vite-config: dependencies: @@ -1329,14 +1332,14 @@ importers: version: 2.0.3 vite-plugin-pwa: specifier: 'catalog:' - version: 1.1.0(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0) + version: 1.1.0(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0) vite-plugin-vue-devtools: specifier: 'catalog:' - version: 7.7.7(rollup@4.52.5)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + version: 7.7.7(rollup@4.52.5)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) devDependencies: '@pnpm/workspace.read-manifest': specifier: 'catalog:' - version: 1000.2.4 + version: 1000.2.5 '@types/archiver': specifier: 'catalog:' version: 6.0.3 @@ -1348,10 +1351,10 @@ importers: version: link:../node-utils '@vitejs/plugin-vue': specifier: 'catalog:' - version: 6.0.1(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + version: 6.0.1(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) '@vitejs/plugin-vue-jsx': specifier: 'catalog:' - version: 5.1.1(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + version: 5.1.1(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) dayjs: specifier: 'catalog:' version: 1.11.18 @@ -1369,16 +1372,16 @@ importers: version: 1.93.2 vite: specifier: 'catalog:' - version: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + version: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) vite-plugin-compression: specifier: 'catalog:' - version: 0.5.1(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + version: 0.5.1(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.4(@types/node@24.8.1)(rollup@4.52.5)(typescript@5.9.3)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.9.1)(rollup@4.52.5)(typescript@5.9.3)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) vite-plugin-html: specifier: 'catalog:' - version: 3.2.2(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + version: 3.2.2(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) vite-plugin-lazy-import: specifier: 'catalog:' version: 1.0.7 @@ -1914,7 +1917,7 @@ importers: version: 3.5.22(typescript@5.9.3) vxe-pc-ui: specifier: 'catalog:' - version: 4.10.2(vue@3.5.22(typescript@5.9.3)) + version: 4.10.5(vue@3.5.22(typescript@5.9.3)) vxe-table: specifier: 'catalog:' version: 4.17.0(vue@3.5.22(typescript@5.9.3)) @@ -3599,11 +3602,11 @@ packages: peerDependencies: vue: ^3.5.17 - '@emnapi/core@1.5.0': - resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/core@1.6.0': + resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - '@emnapi/runtime@1.5.0': - resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -4109,11 +4112,11 @@ packages: '@marijn/find-cluster-break@1.0.2': resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} - '@microsoft/api-extractor-model@7.31.1': - resolution: {integrity: sha512-Dhnip5OFKbl85rq/ICHBFGhV4RA5UQSl8AC/P/zoGvs+CBudPkatt5kIhMGiYgVPnUWmfR6fcp38+1AFLYNtUw==} + '@microsoft/api-extractor-model@7.31.2': + resolution: {integrity: sha512-d0WwxwBLZaHokTrOngqHVkQK59NlveV5RE4wEpjaybhSNmEK9N7KPCcT5n8JcpH6k5o6AhxG47g1km2D7BZw8Q==} - '@microsoft/api-extractor@7.53.1': - resolution: {integrity: sha512-bul5eTNxijLdDBqLye74u9494sRmf+9QULtec9Od0uHnifahGeNt8CC4/xCdn7mVyEBrXIQyQ5+sc4Uc0QfBSA==} + '@microsoft/api-extractor@7.53.2': + resolution: {integrity: sha512-hG3+wJY6aZlkQhGpUbhq1C5F1uJLsmDjrwVea+WT18RbD1XtIGn/c4uyMF7gdXLjLNwErB47hnRk9QNjpEHUWA==} hasBin: true '@microsoft/fetch-event-source@2.0.1': @@ -4289,12 +4292,12 @@ packages: resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} - '@pnpm/types@1000.8.0': - resolution: {integrity: sha512-yx86CGHHquWAI0GgKIuV/RnYewcf5fVFZemC45C/K2cX0uV8GB8TUP541ZrokWola2fZx5sn1vL7xzbceRZfoQ==} + '@pnpm/types@1000.9.0': + resolution: {integrity: sha512-UvDTCxnbyqkTg2X0dBOuZ4IdFJ8g4UFu0Ybv/5/cZAxCWVhNl1hC/Xc9hR4tZrlBL0NRFePLRhO/iw9LmA1lbw==} engines: {node: '>=18.12'} - '@pnpm/workspace.read-manifest@1000.2.4': - resolution: {integrity: sha512-MxzprPLd17yNKs/w5a2+c+Cg9hfB0VAjFxcrR+McI49IYoWA17rViDyXDOX595xy2ntycUCkq6ZgQeWpfgl89w==} + '@pnpm/workspace.read-manifest@1000.2.5': + resolution: {integrity: sha512-kiFdZbwoIqNEwfBVSprSXuaKHdlORingq2uR4ofH9F8r8lwpIY/2bACl6VuFASHGSZ1Bs3Oy6VicSMPQRsKTJg==} engines: {node: '>=18.12'} '@polka/url@1.0.0-next.29': @@ -4550,8 +4553,8 @@ packages: cpu: [x64] os: [win32] - '@rushstack/node-core-library@5.17.0': - resolution: {integrity: sha512-24vt1GbHN6kyIglRMTVpyEiNRRRJK8uZHc1XoGAhmnTDKnrWet8OmOpImMswJIe6gM78eV8cMg1HXwuUHkSSgg==} + '@rushstack/node-core-library@5.17.1': + resolution: {integrity: sha512-Mtcsa0aRJgYJOpeTe4qElLTRBlijNohdliq/xOhqce5rlzMIfLr73j9wUuj6GYPZPbG0S+is/RL2l0m/vnL55A==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -4569,16 +4572,16 @@ packages: '@rushstack/rig-package@0.6.0': resolution: {integrity: sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==} - '@rushstack/terminal@0.19.1': - resolution: {integrity: sha512-jsBuSad67IDVMO2yp0hDfs0OdE4z3mDIjIL2pclDT3aEJboeZXE85e1HjuD0F6JoW3XgHvDwoX+WOV+AVTDQeA==} + '@rushstack/terminal@0.19.2': + resolution: {integrity: sha512-SJLC+6oUrJ0OOpuuwXxhktCTE3jeYVIwtvREdNhbcnVQrYGaDJpAoBgNVfw+VH0pTPpFLBqoPHsRRz7mj7WlbA==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@5.1.1': - resolution: {integrity: sha512-HPzFsUcr+wZ3oQI08Ec/E6cuiAVHKzrXZGHhwiwIGygAFiqN5QzX+ff30n70NU2WyE26CykgMwBZZSSyHCJrzA==} + '@rushstack/ts-command-line@5.1.2': + resolution: {integrity: sha512-jn0EnSefYrkZDrBGd6KGuecL84LI06DgzL4hVQ46AUijNBt2nRU/ST4HhrfII/w91siCd1J/Okvxq/BS75Me/A==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -4725,8 +4728,8 @@ packages: '@types/bintrees@1.0.6': resolution: {integrity: sha512-pZWT4Bz+tWwxlDspSjdoIza4PE5lbGI4Xvs3FZV/2v5m5SDA8LwNpU8AXxlndmARO7OaQ1Vf3zFenOsNMzaRkQ==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/codemirror@5.60.16': resolution: {integrity: sha512-V/yHdamffSS075jit+fDxaOAmdP2liok8NSNJnAZfDJErzOheuygHZEhAJrfmk5TEyM32MhkZjwo/idX791yxw==} @@ -4902,11 +4905,11 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.18.11': - resolution: {integrity: sha512-Gd33J2XIrXurb+eT2ktze3rJAfAp9ZNjlBdh4SVgyrKEOADwCbdUDaK7QgJno8Ue4kcajscsKqu6n8OBG3hhCQ==} + '@types/node@22.18.12': + resolution: {integrity: sha512-BICHQ67iqxQGFSzfCFTT7MRQ5XcBjG5aeKh5Ok38UBbPe5fxTyE+aHFxwVrGyr8GNlqFMLKD1D3P2K/1ks8tog==} - '@types/node@24.8.1': - resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} + '@types/node@24.9.1': + resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} '@types/nprogress@0.2.3': resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==} @@ -4950,23 +4953,23 @@ packages: '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} - '@typescript-eslint/eslint-plugin@8.46.1': - resolution: {integrity: sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==} + '@typescript-eslint/eslint-plugin@8.46.2': + resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.46.1 + '@typescript-eslint/parser': ^8.46.2 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.46.1': - resolution: {integrity: sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==} + '@typescript-eslint/parser@8.46.2': + resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.46.1': - resolution: {integrity: sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==} + '@typescript-eslint/project-service@8.46.2': + resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -4975,18 +4978,18 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.46.1': - resolution: {integrity: sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==} + '@typescript-eslint/scope-manager@8.46.2': + resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.46.1': - resolution: {integrity: sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==} + '@typescript-eslint/tsconfig-utils@8.46.2': + resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.46.1': - resolution: {integrity: sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==} + '@typescript-eslint/type-utils@8.46.2': + resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4996,8 +4999,8 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.46.1': - resolution: {integrity: sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==} + '@typescript-eslint/types@8.46.2': + resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.18.0': @@ -5009,8 +5012,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.46.1': - resolution: {integrity: sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==} + '@typescript-eslint/typescript-estree@8.46.2': + resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -5021,8 +5024,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.46.1': - resolution: {integrity: sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==} + '@typescript-eslint/utils@8.46.2': + resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5032,8 +5035,8 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.46.1': - resolution: {integrity: sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==} + '@typescript-eslint/visitor-keys@8.46.2': + resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -5717,8 +5720,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.8.18: - resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==} + baseline-browser-mapping@2.8.19: + resolution: {integrity: sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==} hasBin: true better-path-resolve@1.0.0: @@ -6158,9 +6161,9 @@ packages: copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - copy-anything@3.0.5: - resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} - engines: {node: '>=12.13'} + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} core-js-compat@3.46.0: resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==} @@ -6817,8 +6820,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.237: - resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} + electron-to-chromium@1.5.238: + resolution: {integrity: sha512-khBdc+w/Gv+cS8e/Pbnaw/FXcBUeKrRVik9IxfXtgREOWyJhR4tj43n3amkVogJ/yeQUqzkrZcFhtIxIdqmmcQ==} element-plus@2.11.5: resolution: {integrity: sha512-O+bIVHQCjUDm4GiIznDXRoS8ar2TpWLwfOGnN/Aam0VXf5kbuc4SxdKKJdovWNxmxeqbcwjsSZPKgtXNcqys4A==} @@ -7492,8 +7495,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.12.0: - resolution: {integrity: sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} giget@2.0.0: resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} @@ -7802,8 +7805,8 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - ioredis@5.8.1: - resolution: {integrity: sha512-Qho8TgIamqEPdgiMadJwzRMW3TudIg6vpg4YONokGDudy4eqRIJtDbVX72pfLBcWxvbn3qm/40TyGUObdW4tLQ==} + ioredis@5.8.2: + resolution: {integrity: sha512-C6uC+kleiIMmjViJINWk80sOQw5lEzse1ZmvD+S/s8p8CWapftSaC+kocGTx6xrbrJ4WmYQGC08ffHLr6ToR6Q==} engines: {node: '>=12.22.0'} iron-webcrypto@1.2.1: @@ -8044,9 +8047,9 @@ packages: is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - is-what@4.1.16: - resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} - engines: {node: '>=12.13'} + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} @@ -8838,8 +8841,8 @@ packages: node-mock-http@1.0.3: resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==} - node-releases@2.0.25: - resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} + node-releases@2.0.26: + resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==} nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} @@ -9970,8 +9973,8 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} hasBin: true @@ -10537,8 +10540,8 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - superjson@2.2.2: - resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} + superjson@2.2.3: + resolution: {integrity: sha512-ay3d+LW/S6yppKoTz3Bq4mG0xrS5bFwfWEBmQfbC7lt5wmtk+Obq0TxVuA9eYRirBTQb1K3eEpBRHMQEo0WyVw==} engines: {node: '>=16'} supports-color@10.2.2: @@ -10857,8 +10860,8 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici-types@7.14.0: - resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} undici@7.16.0: resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} @@ -11339,8 +11342,8 @@ packages: peerDependencies: vue: ^3.5.17 - vxe-pc-ui@4.10.2: - resolution: {integrity: sha512-qEU9h/DLLdFDAXQEKmRRO4Eo1Sh7n66pHJGUflzkGFB85PYxDxzqDLtx4iiS+q0pxVz1bGWG3phLgi20Dx48Zg==} + vxe-pc-ui@4.10.5: + resolution: {integrity: sha512-ASGSBIhEXRYmro/kVzK+es5DOchWvFXegM2osqrCIKQcFTAkLzLU4mZc8jOihNaxwy212819w8kLdS9KDwpvSg==} vxe-table@4.17.0: resolution: {integrity: sha512-IpyY5uzgMt4NEgTl0brAFe/xSyrBK8U0763uCG8LUe8TbGVuWMD5bCP9DYqkjK7cBmJjXtzwxlQ6I3auzCGd3Q==} @@ -11882,7 +11885,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -12633,7 +12636,7 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.29.7(@types/node@22.18.11)': + '@changesets/cli@2.29.7(@types/node@22.18.12)': dependencies: '@changesets/apply-release-plan': 7.0.13 '@changesets/assemble-release-plan': 6.0.9 @@ -12649,7 +12652,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.2(@types/node@22.18.11) + '@inquirer/external-editor': 1.0.2(@types/node@22.18.12) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 @@ -12810,11 +12813,11 @@ snapshots: style-mod: 4.1.3 w3c-keyname: 2.2.8 - '@commitlint/cli@19.8.1(@types/node@24.8.1)(typescript@5.9.3)': + '@commitlint/cli@19.8.1(@types/node@24.9.1)(typescript@5.9.3)': dependencies: '@commitlint/format': 19.8.1 '@commitlint/lint': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@24.8.1)(typescript@5.9.3) + '@commitlint/load': 19.8.1(@types/node@24.9.1)(typescript@5.9.3) '@commitlint/read': 19.8.1 '@commitlint/types': 19.8.1 tinyexec: 1.0.1 @@ -12861,7 +12864,7 @@ snapshots: '@commitlint/rules': 19.8.1 '@commitlint/types': 19.8.1 - '@commitlint/load@19.8.1(@types/node@24.8.1)(typescript@5.9.3)': + '@commitlint/load@19.8.1(@types/node@24.9.1)(typescript@5.9.3)': dependencies: '@commitlint/config-validator': 19.8.1 '@commitlint/execute-rule': 19.8.1 @@ -12869,7 +12872,7 @@ snapshots: '@commitlint/types': 19.8.1 chalk: 5.6.2 cosmiconfig: 9.0.0(typescript@5.9.3) - cosmiconfig-typescript-loader: 6.2.0(@types/node@24.8.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.2.0(@types/node@24.9.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -13464,13 +13467,13 @@ snapshots: dependencies: vue: 3.5.22(typescript@5.9.3) - '@emnapi/core@1.5.0': + '@emnapi/core@1.6.0': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.5.0': + '@emnapi/runtime@1.6.0': dependencies: tslib: 2.8.1 optional: true @@ -13489,7 +13492,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -13809,12 +13812,12 @@ snapshots: '@iconify/types': 2.0.0 vue: 3.5.22(typescript@5.9.3) - '@inquirer/external-editor@1.0.2(@types/node@22.18.11)': + '@inquirer/external-editor@1.0.2(@types/node@22.18.12)': dependencies: chardet: 2.1.0 iconv-lite: 0.7.0 optionalDependencies: - '@types/node': 22.18.11 + '@types/node': 22.18.12 '@internationalized/date@3.10.0': dependencies: @@ -13857,8 +13860,8 @@ snapshots: '@intlify/shared': 11.1.12 '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.22)(vue-i18n@11.1.12(vue@3.5.22(typescript@5.9.3)))(vue@3.5.22(typescript@5.9.3)) '@rollup/pluginutils': 5.3.0(rollup@4.52.5) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) debug: 4.4.3 fast-glob: 3.3.3 js-yaml: 4.1.0 @@ -14020,26 +14023,26 @@ snapshots: '@marijn/find-cluster-break@1.0.2': {} - '@microsoft/api-extractor-model@7.31.1(@types/node@24.8.1)': + '@microsoft/api-extractor-model@7.31.2(@types/node@24.9.1)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.17.0(@types/node@24.8.1) + '@rushstack/node-core-library': 5.17.1(@types/node@24.9.1) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.53.1(@types/node@24.8.1)': + '@microsoft/api-extractor@7.53.2(@types/node@24.9.1)': dependencies: - '@microsoft/api-extractor-model': 7.31.1(@types/node@24.8.1) + '@microsoft/api-extractor-model': 7.31.2(@types/node@24.9.1) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.17.0(@types/node@24.8.1) + '@rushstack/node-core-library': 5.17.1(@types/node@24.9.1) '@rushstack/rig-package': 0.6.0 - '@rushstack/terminal': 0.19.1(@types/node@24.8.1) - '@rushstack/ts-command-line': 5.1.1(@types/node@24.8.1) + '@rushstack/terminal': 0.19.2(@types/node@24.9.1) + '@rushstack/ts-command-line': 5.1.2(@types/node@24.9.1) lodash: 4.17.21 minimatch: 10.0.3 - resolve: 1.22.10 + resolve: 1.22.11 semver: 7.5.4 source-map: 0.6.1 typescript: 5.8.2 @@ -14053,14 +14056,14 @@ snapshots: '@microsoft/tsdoc': 0.15.1 ajv: 8.12.0 jju: 1.4.0 - resolve: 1.22.10 + resolve: 1.22.11 '@microsoft/tsdoc@0.15.1': {} '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.5.0 - '@emnapi/runtime': 1.5.0 + '@emnapi/core': 1.6.0 + '@emnapi/runtime': 1.6.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -14076,17 +14079,17 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nolebase/ui@2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3))': + '@nolebase/ui@2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3))': dependencies: '@iconify-json/octicon': 1.2.16 less: 4.4.2 - vitepress: 1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3) + vitepress: 1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3) vue: 3.5.22(typescript@5.9.3) - '@nolebase/vitepress-plugin-git-changelog@2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3))': + '@nolebase/vitepress-plugin-git-changelog@2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3))': dependencies: '@iconify-json/octicon': 1.2.16 - '@nolebase/ui': 2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3)) + '@nolebase/ui': 2.18.2(vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3))(vue@3.5.22(typescript@5.9.3)) colorette: 2.0.20 date-fns: 4.1.0 defu: 6.1.4 @@ -14096,7 +14099,7 @@ snapshots: gray-matter: 4.0.3 less: 4.4.2 uncrypto: 0.1.3 - vitepress: 1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3) + vitepress: 1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3) transitivePeerDependencies: - vue @@ -14227,13 +14230,13 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@pnpm/types@1000.8.0': {} + '@pnpm/types@1000.9.0': {} - '@pnpm/workspace.read-manifest@1000.2.4': + '@pnpm/workspace.read-manifest@1000.2.5': dependencies: '@pnpm/constants': 1001.3.1 '@pnpm/error': 1000.0.5 - '@pnpm/types': 1000.8.0 + '@pnpm/types': 1000.9.0 read-yaml-file: 2.1.0 '@polka/url@1.0.0-next.29': {} @@ -14303,7 +14306,7 @@ snapshots: '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 optionalDependencies: rollup: 2.79.2 @@ -14313,7 +14316,7 @@ snapshots: '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 optionalDependencies: rollup: 4.52.5 @@ -14440,7 +14443,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true - '@rushstack/node-core-library@5.17.0(@types/node@24.8.1)': + '@rushstack/node-core-library@5.17.1(@types/node@24.9.1)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -14448,31 +14451,31 @@ snapshots: fs-extra: 11.3.2 import-lazy: 4.0.0 jju: 1.4.0 - resolve: 1.22.10 + resolve: 1.22.11 semver: 7.5.4 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 - '@rushstack/problem-matcher@0.1.1(@types/node@24.8.1)': + '@rushstack/problem-matcher@0.1.1(@types/node@24.9.1)': optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 '@rushstack/rig-package@0.6.0': dependencies: - resolve: 1.22.10 + resolve: 1.22.11 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.19.1(@types/node@24.8.1)': + '@rushstack/terminal@0.19.2(@types/node@24.9.1)': dependencies: - '@rushstack/node-core-library': 5.17.0(@types/node@24.8.1) - '@rushstack/problem-matcher': 0.1.1(@types/node@24.8.1) + '@rushstack/node-core-library': 5.17.1(@types/node@24.9.1) + '@rushstack/problem-matcher': 0.1.1(@types/node@24.9.1) supports-color: 8.1.1 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 - '@rushstack/ts-command-line@5.1.1(@types/node@24.8.1)': + '@rushstack/ts-command-line@5.1.2(@types/node@24.9.1)': dependencies: - '@rushstack/terminal': 0.19.1(@types/node@24.8.1) + '@rushstack/terminal': 0.19.2(@types/node@24.9.1) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -14639,9 +14642,10 @@ snapshots: '@types/bintrees@1.0.6': {} - '@types/chai@5.2.2': + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/codemirror@5.60.16': dependencies: @@ -14649,7 +14653,7 @@ snapshots: '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 '@types/crypto-js@4.2.2': {} @@ -14796,7 +14800,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 24.8.1 + '@types/node': 24.9.1 '@types/katex@0.16.7': {} @@ -14841,13 +14845,13 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.18.11': + '@types/node@22.18.12': dependencies: undici-types: 6.21.0 - '@types/node@24.8.1': + '@types/node@24.9.1': dependencies: - undici-types: 7.14.0 + undici-types: 7.16.0 '@types/nprogress@0.2.3': {} @@ -14859,13 +14863,13 @@ snapshots: '@types/qrcode@1.5.5': dependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 '@types/qs@6.14.0': {} '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 '@types/resolve@1.20.2': {} @@ -14885,14 +14889,14 @@ snapshots: '@types/web-bluetooth@0.0.21': {} - '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/type-utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 eslint: 9.38.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 @@ -14902,22 +14906,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.2 debug: 4.4.3 eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.46.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: @@ -14928,20 +14932,20 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.46.1': + '@typescript-eslint/scope-manager@8.46.2': dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 - '@typescript-eslint/tsconfig-utils@8.46.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.38.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -14951,7 +14955,7 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.46.1': {} + '@typescript-eslint/types@8.46.2': {} '@typescript-eslint/typescript-estree@7.18.0(typescript@5.9.3)': dependencies: @@ -14968,12 +14972,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.46.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.46.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.1(typescript@5.9.3) - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/visitor-keys': 8.46.1 + '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -14995,12 +14999,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -15011,9 +15015,9 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.46.1': + '@typescript-eslint/visitor-keys@8.46.2': dependencies: - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -15104,66 +15108,66 @@ snapshots: - rollup - supports-color - '@vite-pwa/vitepress@1.0.1(vite-plugin-pwa@1.1.0(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0))': + '@vite-pwa/vitepress@1.0.1(vite-plugin-pwa@1.1.0(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0))': dependencies: - vite-plugin-pwa: 1.1.0(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0) + vite-plugin-pwa: 1.1.0(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0) - '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) '@rolldown/pluginutils': 1.0.0-beta.44 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4) - vite: 7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.1(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) '@rolldown/pluginutils': 1.0.0-beta.44 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4) - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.9.3))': + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.9.3))': dependencies: - vite: 5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) + vite: 5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) vue: 3.5.22(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.1(vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) vue: 3.5.22(typescript@5.9.3) - '@vitejs/plugin-vue@6.0.1(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.1(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.29 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) vue: 3.5.22(typescript@5.9.3) '@vitest/expect@3.2.4': dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - vite: 7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -15273,14 +15277,14 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.7 - '@vue/devtools-core@7.7.7(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': + '@vue/devtools-core@7.7.7(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 7.7.7 '@vue/devtools-shared': 7.7.7 mitt: 3.0.1 nanoid: 5.1.6 pathe: 2.0.3 - vite-hot-client: 2.1.0(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + vite-hot-client: 2.1.0(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) vue: 3.5.22(typescript@5.9.3) transitivePeerDependencies: - vite @@ -15293,7 +15297,7 @@ snapshots: mitt: 3.0.1 perfect-debounce: 1.0.0 speakingurl: 14.0.1 - superjson: 2.2.2 + superjson: 2.2.3 '@vue/devtools-shared@7.7.7': dependencies: @@ -15780,7 +15784,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.8.18: {} + baseline-browser-mapping@2.8.19: {} better-path-resolve@1.0.0: dependencies: @@ -15862,10 +15866,10 @@ snapshots: browserslist@4.26.3: dependencies: - baseline-browser-mapping: 2.8.18 + baseline-browser-mapping: 2.8.19 caniuse-lite: 1.0.30001751 - electron-to-chromium: 1.5.237 - node-releases: 2.0.25 + electron-to-chromium: 1.5.238 + node-releases: 2.0.26 update-browserslist-db: 1.1.3(browserslist@4.26.3) buffer-crc32@1.0.0: {} @@ -16069,7 +16073,7 @@ snapshots: '@ast-grep/napi': 0.37.0 '@vue/compiler-sfc': 3.5.22 commander: 12.1.0 - get-tsconfig: 4.12.0 + get-tsconfig: 4.13.0 graph-cycles: 3.0.0 listr2: 8.3.3 minimatch: 9.0.5 @@ -16272,9 +16276,9 @@ snapshots: dependencies: is-what: 3.14.1 - copy-anything@3.0.5: + copy-anything@4.0.5: dependencies: - is-what: 4.1.16 + is-what: 5.5.0 core-js-compat@3.46.0: dependencies: @@ -16286,9 +16290,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@6.2.0(@types/node@24.8.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): + cosmiconfig-typescript-loader@6.2.0(@types/node@24.9.1)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): dependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.6.1 typescript: 5.9.3 @@ -16813,7 +16817,7 @@ snapshots: please-upgrade-node: 3.2.0 readdirp: 3.6.0 require-package-name: 2.0.1 - resolve: 1.22.10 + resolve: 1.22.11 resolve-from: 5.0.0 semver: 7.7.3 yargs: 16.2.0 @@ -16994,7 +16998,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.237: {} + electron-to-chromium@1.5.238: {} element-plus@2.11.5(vue@3.5.22(typescript@5.9.3)): dependencies: @@ -17217,7 +17221,7 @@ snapshots: eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: - get-tsconfig: 4.12.0 + get-tsconfig: 4.13.0 stable-hash-x: 0.2.0 optionalDependencies: unrs-resolver: 1.11.1 @@ -17246,9 +17250,9 @@ snapshots: eslint: 9.38.0(jiti@2.6.1) ignore: 5.3.2 - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.46.1 + '@typescript-eslint/types': 8.46.2 comment-parser: 1.4.1 debug: 4.4.3 eslint: 9.38.0(jiti@2.6.1) @@ -17259,7 +17263,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -17300,7 +17304,7 @@ snapshots: enhanced-resolve: 5.18.3 eslint: 9.38.0(jiti@2.6.1) eslint-plugin-es-x: 7.8.0(eslint@9.38.0(jiti@2.6.1)) - get-tsconfig: 4.12.0 + get-tsconfig: 4.13.0 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -17313,8 +17317,8 @@ snapshots: eslint-plugin-perfectionist@4.15.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.46.1 - '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -17368,24 +17372,24 @@ snapshots: semver: 7.7.3 strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): + eslint-plugin-unused-imports@4.3.0(@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1)): dependencies: eslint: 9.38.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)(vitest@3.2.4(@types/node@24.8.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): + eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)(vitest@3.2.4(@types/node@24.9.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): dependencies: '@typescript-eslint/utils': 7.18.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint: 9.38.0(jiti@2.6.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) - vitest: 3.2.4(@types/node@24.8.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + vitest: 3.2.4(@types/node@24.9.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-vue@10.5.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))): + eslint-plugin-vue@10.5.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) eslint: 9.38.0(jiti@2.6.1) @@ -17396,7 +17400,7 @@ snapshots: vue-eslint-parser: 10.2.0(eslint@9.38.0(jiti@2.6.1)) xml-name-validator: 4.0.0 optionalDependencies: - '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) eslint-scope@8.4.0: dependencies: @@ -17827,7 +17831,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.12.0: + get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -18175,7 +18179,7 @@ snapshots: internmap@2.0.3: {} - ioredis@5.8.1: + ioredis@5.8.2: dependencies: '@ioredis/commands': 1.4.0 cluster-key-slot: 1.1.2 @@ -18388,7 +18392,7 @@ snapshots: is-what@3.14.1: {} - is-what@4.1.16: {} + is-what@5.5.0: {} is-windows@1.0.2: {} @@ -19149,7 +19153,7 @@ snapshots: h3: 1.15.4 hookable: 5.5.3 httpxy: 0.1.7 - ioredis: 5.8.1 + ioredis: 5.8.2 jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 @@ -19182,7 +19186,7 @@ snapshots: unenv: 2.0.0-rc.21 unimport: 5.5.0 unplugin-utils: 0.3.1 - unstorage: 1.17.1(db0@0.3.4)(ioredis@5.8.1) + unstorage: 1.17.1(db0@0.3.4)(ioredis@5.8.2) untyped: 2.0.0 unwasm: 0.3.11 youch: 4.1.0-beta.11 @@ -19258,7 +19262,7 @@ snapshots: node-mock-http@1.0.3: {} - node-releases@2.0.25: {} + node-releases@2.0.26: {} nopt@7.2.1: dependencies: @@ -19749,14 +19753,14 @@ snapshots: postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 postcss-import@16.1.1(postcss@8.5.6): dependencies: postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.10 + resolve: 1.22.11 postcss-js@4.1.0(postcss@8.5.6): dependencies: @@ -20340,7 +20344,7 @@ snapshots: resolve.exports@2.0.3: {} - resolve@1.22.10: + resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 @@ -20991,9 +20995,9 @@ snapshots: pirates: 4.0.7 ts-interface-checker: 0.1.13 - superjson@2.2.2: + superjson@2.2.3: dependencies: - copy-anything: 3.0.5 + copy-anything: 4.0.5 supports-color@10.2.2: {} @@ -21091,7 +21095,7 @@ snapshots: postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.1) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 - resolve: 1.22.10 + resolve: 1.22.11 sucrase: 3.35.0 transitivePeerDependencies: - tsx @@ -21356,7 +21360,7 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.14.0: {} + undici-types@7.16.0: {} undici@7.16.0: {} @@ -21492,7 +21496,7 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unstorage@1.17.1(db0@0.3.4)(ioredis@5.8.1): + unstorage@1.17.1(db0@0.3.4)(ioredis@5.8.2): dependencies: anymatch: 3.1.3 chokidar: 4.0.3 @@ -21504,7 +21508,7 @@ snapshots: ufo: 1.6.1 optionalDependencies: db0: 0.3.4 - ioredis: 5.8.1 + ioredis: 5.8.2 untun@0.1.3: dependencies: @@ -21579,17 +21583,17 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-hot-client@2.1.0(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): + vite-hot-client@2.1.0(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): dependencies: - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) - vite-node@3.2.4(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -21604,13 +21608,13 @@ snapshots: - tsx - yaml - vite-node@3.2.4(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): + vite-node@3.2.4(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -21626,18 +21630,18 @@ snapshots: - yaml optional: true - vite-plugin-compression@0.5.1(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): + vite-plugin-compression@0.5.1(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): dependencies: chalk: 4.1.2 debug: 4.4.3 fs-extra: 10.1.0 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - vite-plugin-dts@4.5.4(@types/node@24.8.1)(rollup@4.52.5)(typescript@5.9.3)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.9.1)(rollup@4.52.5)(typescript@5.9.3)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): dependencies: - '@microsoft/api-extractor': 7.53.1(@types/node@24.8.1) + '@microsoft/api-extractor': 7.53.2(@types/node@24.9.1) '@rollup/pluginutils': 5.3.0(rollup@4.52.5) '@volar/typescript': 2.4.23 '@vue/language-core': 2.2.0(typescript@5.9.3) @@ -21648,13 +21652,13 @@ snapshots: magic-string: 0.30.19 typescript: 5.9.3 optionalDependencies: - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-html@3.2.2(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): + vite-plugin-html@3.2.2(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): dependencies: '@rollup/pluginutils': 4.2.1 colorette: 2.0.20 @@ -21668,9 +21672,9 @@ snapshots: html-minifier-terser: 6.1.0 node-html-parser: 5.4.2 pathe: 0.2.0 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) - vite-plugin-inspect@0.8.9(rollup@4.52.5)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): + vite-plugin-inspect@0.8.9(rollup@4.52.5)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.3.0(rollup@4.52.5) @@ -21681,7 +21685,7 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.2 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - rollup - supports-color @@ -21693,45 +21697,45 @@ snapshots: rollup: 4.52.5 xe-utils: 3.7.9 - vite-plugin-pwa@1.1.0(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0): + vite-plugin-pwa@1.1.0(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(workbox-build@7.3.0)(workbox-window@7.3.0): dependencies: debug: 4.4.3 pretty-bytes: 6.1.1 tinyglobby: 0.2.15 - vite: 5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) + vite: 5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) workbox-build: 7.3.0 workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite-plugin-pwa@1.1.0(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0): + vite-plugin-pwa@1.1.0(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0): dependencies: debug: 4.4.3 pretty-bytes: 6.1.1 tinyglobby: 0.2.15 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) workbox-build: 7.3.0 workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@7.7.7(rollup@4.52.5)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)): + vite-plugin-vue-devtools@7.7.7(rollup@4.52.5)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)): dependencies: - '@vue/devtools-core': 7.7.7(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) + '@vue/devtools-core': 7.7.7(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3)) '@vue/devtools-kit': 7.7.7 '@vue/devtools-shared': 7.7.7 execa: 9.6.0 sirv: 3.0.2 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) - vite-plugin-inspect: 0.8.9(rollup@4.52.5)(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) - vite-plugin-vue-inspector: 5.3.2(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite-plugin-inspect: 0.8.9(rollup@4.52.5)(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + vite-plugin-vue-inspector: 5.3.2(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.2(vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): + vite-plugin-vue-inspector@5.3.2(vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)): dependencies: '@babel/core': 7.28.4 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.4) @@ -21742,23 +21746,23 @@ snapshots: '@vue/compiler-dom': 3.5.22 kolorist: 1.8.0 magic-string: 0.30.19 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0): + vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0): dependencies: esbuild: 0.25.3 postcss: 8.5.6 rollup: 4.52.5 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 fsevents: 2.3.3 less: 4.4.2 sass: 1.93.2 terser: 5.44.0 - vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): + vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): dependencies: esbuild: 0.25.3 fdir: 6.5.0(picomatch@4.0.3) @@ -21767,7 +21771,7 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.18.11 + '@types/node': 22.18.12 fsevents: 2.3.3 jiti: 2.6.1 less: 4.4.2 @@ -21775,7 +21779,7 @@ snapshots: terser: 5.44.0 yaml: 2.8.1 - vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): + vite@7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): dependencies: esbuild: 0.25.3 fdir: 6.5.0(picomatch@4.0.3) @@ -21784,7 +21788,7 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 fsevents: 2.3.3 jiti: 2.6.1 less: 4.4.2 @@ -21792,17 +21796,17 @@ snapshots: terser: 5.44.0 yaml: 2.8.1 - vitepress-plugin-group-icons@1.6.4(markdown-it@14.1.0)(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)): + vitepress-plugin-group-icons@1.6.4(markdown-it@14.1.0)(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)): dependencies: '@iconify-json/logos': 1.2.9 '@iconify-json/vscode-icons': 1.2.32 '@iconify/utils': 3.0.2 markdown-it: 14.1.0 - vite: 5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) + vite: 5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) transitivePeerDependencies: - supports-color - vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.8.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3): + vitepress@1.6.4(@algolia/client-search@5.40.1)(@types/node@24.9.1)(async-validator@4.2.5)(axios@1.12.2)(less@4.4.2)(nprogress@0.2.0)(postcss@8.5.6)(qrcode@1.5.4)(sass@1.93.2)(search-insights@2.17.3)(sortablejs@1.15.6)(terser@5.44.0)(typescript@5.9.3): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.40.1)(search-insights@2.17.3) @@ -21811,7 +21815,7 @@ snapshots: '@shikijs/transformers': 2.5.0 '@shikijs/types': 2.5.0 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.9.3)) + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.9.3)) '@vue/devtools-api': 7.7.7 '@vue/shared': 3.5.22 '@vueuse/core': 12.8.2(typescript@5.9.3) @@ -21820,7 +21824,7 @@ snapshots: mark.js: 8.11.1 minisearch: 7.2.0 shiki: 2.5.0 - vite: 5.4.21(@types/node@24.8.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) + vite: 5.4.21(@types/node@24.9.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0) vue: 3.5.22(typescript@5.9.3) optionalDependencies: postcss: 8.5.6 @@ -21851,11 +21855,11 @@ snapshots: - typescript - universal-cookie - vitest@3.2.4(@types/node@22.18.11)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): + vitest@3.2.4(@types/node@22.18.12)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -21873,11 +21877,11 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.18.11 + '@types/node': 22.18.12 happy-dom: 17.6.3 transitivePeerDependencies: - jiti @@ -21893,11 +21897,11 @@ snapshots: - tsx - yaml - vitest@3.2.4(@types/node@24.8.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): + vitest@3.2.4(@types/node@24.9.1)(happy-dom@17.6.3)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1): dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.1.11(@types/node@22.18.11)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(vite@7.1.11(@types/node@22.18.12)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -21915,11 +21919,11 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@24.8.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.11(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@24.9.1)(jiti@2.6.1)(less@4.4.2)(sass@1.93.2)(terser@5.44.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.8.1 + '@types/node': 24.9.1 happy-dom: 17.6.3 transitivePeerDependencies: - jiti @@ -22033,7 +22037,7 @@ snapshots: vooks: 0.2.12(vue@3.5.22(typescript@5.9.3)) vue: 3.5.22(typescript@5.9.3) - vxe-pc-ui@4.10.2(vue@3.5.22(typescript@5.9.3)): + vxe-pc-ui@4.10.5(vue@3.5.22(typescript@5.9.3)): dependencies: '@vxe-ui/core': 4.2.12(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: @@ -22041,7 +22045,7 @@ snapshots: vxe-table@4.17.0(vue@3.5.22(typescript@5.9.3)): dependencies: - vxe-pc-ui: 4.10.2(vue@3.5.22(typescript@5.9.3)) + vxe-pc-ui: 4.10.5(vue@3.5.22(typescript@5.9.3)) transitivePeerDependencies: - vue From 32d8af5475c0a3ce2c3a388f047232f8e9884314 Mon Sep 17 00:00:00 2001 From: xingyu4j Date: Tue, 28 Oct 2025 14:29:42 +0800 Subject: [PATCH 03/19] fix: lint --- .../bpm/processInstance/create/index.vue | 22 +++++++++---------- .../components/mobile/hot-zone/property.vue | 12 +++++++--- .../components/mobile/image-bar/property.vue | 7 ++++-- .../components/mobile/notice-bar/index.vue | 2 +- .../point/components/point-showcase.vue | 7 +++--- .../mall/promotion/rewardActivity/index.vue | 1 - 6 files changed, 30 insertions(+), 21 deletions(-) diff --git a/apps/web-antd/src/views/bpm/processInstance/create/index.vue b/apps/web-antd/src/views/bpm/processInstance/create/index.vue index c4cefbbfc..691cf0bbb 100644 --- a/apps/web-antd/src/views/bpm/processInstance/create/index.vue +++ b/apps/web-antd/src/views/bpm/processInstance/create/index.vue @@ -284,6 +284,17 @@ onMounted(() => { diff --git a/apps/web-antd/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue b/apps/web-antd/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue index 4f4702812..835434341 100644 --- a/apps/web-antd/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue +++ b/apps/web-antd/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue @@ -4,7 +4,6 @@ import type { HotZoneProperty } from './config'; import { ref } from 'vue'; import { useVModel } from '@vueuse/core'; - import { Button, Form, FormItem, Typography } from 'ant-design-vue'; import UploadImg from '#/components/upload/image-upload.vue'; @@ -30,7 +29,12 @@ const handleOpenEditDialog = () => { - - From 11ac616fd19f81f686e3f0cbb4ea185ed2e41fdf Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 28 Oct 2025 18:04:37 +0800 Subject: [PATCH 07/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20coupon-card=20=E7=9A=84=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=20&=20=E5=A2=9E=E5=8A=A0=E4=BC=98=E6=83=A0?= =?UTF-8?q?=E5=8A=B5=20select=20=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/mobile/coupon-card/index.vue | 2 +- .../mobile/coupon-card/property.vue | 27 ++-- .../mall/promotion/coupon/components/index.ts | 2 +- .../coupon/components/select-data.ts | 119 ++++++++++++++++++ .../promotion/coupon/components/select.vue | 69 ++++++++++ .../components/{data.ts => send-form-data.ts} | 0 .../promotion/coupon/components/send-form.vue | 2 +- 7 files changed, 207 insertions(+), 14 deletions(-) create mode 100644 apps/web-ele/src/views/mall/promotion/coupon/components/select-data.ts create mode 100644 apps/web-ele/src/views/mall/promotion/coupon/components/select.vue rename apps/web-ele/src/views/mall/promotion/coupon/components/{data.ts => send-form-data.ts} (100%) diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/index.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/index.vue index b97b54140..5f6bcbb32 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/index.vue @@ -60,7 +60,7 @@ watch( { immediate: true, deep: true }, ); -/** 提取手机宽度 */ +/** 初始化 */ onMounted(() => { phoneWidth.value = containerRef.value?.wrapRef?.offsetWidth || 375; }); diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/property.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/property.vue index 9913bf542..d84038775 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/property.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/coupon-card/property.vue @@ -5,6 +5,7 @@ import type { MallCouponTemplateApi } from '#/api/mall/promotion/coupon/couponTe import { ref, watch } from 'vue'; +import { useVbenModal } from '@vben/common-ui'; import { CouponTemplateTakeTypeEnum, PromotionDiscountTypeEnum, @@ -26,10 +27,9 @@ import { import * as CouponTemplateApi from '#/api/mall/promotion/coupon/couponTemplate'; import UploadImg from '#/components/upload/image-upload.vue'; import { ColorInput } from '#/views/mall/promotion/components'; +import CouponSelect from '#/views/mall/promotion/coupon/components/select.vue'; import ComponentContainerProperty from '../../component-container-property.vue'; -// TODO: 添加组件 -// import CouponSelect from '#/views/mall/promotion/coupon/components/coupon-select.vue'; /** 优惠券卡片属性面板 */ defineOptions({ name: 'CouponCardProperty' }); @@ -41,18 +41,26 @@ const emit = defineEmits(['update:modelValue']); const formData = useVModel(props, 'modelValue', emit); const couponList = ref([]); // 已选择的优惠券列表 -const couponSelectDialog = ref(); + +const [CouponSelectModal, couponSelectModalApi] = useVbenModal({ + connectedComponent: CouponSelect, + destroyOnClose: true, +}); /** 添加优惠劵 */ const handleAddCoupon = () => { - couponSelectDialog.value.open(); + couponSelectModalApi.open(); }; /** 处理优惠劵选择 */ -const handleCouponSelect = () => { - formData.value.couponIds = couponList.value.map((coupon) => coupon.id); +const handleCouponSelect = ( + selectedCoupons: MallCouponTemplateApi.CouponTemplate[], +) => { + couponList.value = selectedCoupons; + formData.value.couponIds = selectedCoupons.map((coupon) => coupon.id); }; +/** 监听优惠券 ID 变化,加载优惠券列表 */ watch( () => formData.value.couponIds, async () => { @@ -157,11 +165,8 @@ watch( - - diff --git a/apps/web-ele/src/views/mall/promotion/coupon/components/index.ts b/apps/web-ele/src/views/mall/promotion/coupon/components/index.ts index 00a6c3f32..24cb4e274 100644 --- a/apps/web-ele/src/views/mall/promotion/coupon/components/index.ts +++ b/apps/web-ele/src/views/mall/promotion/coupon/components/index.ts @@ -1,2 +1,2 @@ -export * from './data'; +export { default as CouponSelect } from './select.vue'; export { default as CouponSendForm } from './send-form.vue'; diff --git a/apps/web-ele/src/views/mall/promotion/coupon/components/select-data.ts b/apps/web-ele/src/views/mall/promotion/coupon/components/select-data.ts new file mode 100644 index 000000000..bf7c993e3 --- /dev/null +++ b/apps/web-ele/src/views/mall/promotion/coupon/components/select-data.ts @@ -0,0 +1,119 @@ +import type { VbenFormSchema } from '#/adapter/form'; +import type { VxeTableGridOptions } from '#/adapter/vxe-table'; + +import { DICT_TYPE } from '@vben/constants'; +import { getDictOptions } from '@vben/hooks'; + +import { + discountFormat, + remainedCountFormat, + takeLimitCountFormat, + validityTypeFormat, +} from '../formatter'; + +/** 优惠券选择的搜索表单 */ +export function useGridFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'name', + label: '优惠券名称', + component: 'Input', + componentProps: { + placeholder: '请输入优惠劵名', + clearable: true, + }, + }, + { + fieldName: 'discountType', + label: '优惠类型', + component: 'Select', + componentProps: { + options: getDictOptions(DICT_TYPE.PROMOTION_DISCOUNT_TYPE, 'number'), + placeholder: '请选择优惠券类型', + clearable: true, + }, + }, + ]; +} + +/** 优惠券选择的表格列 */ +export function useGridColumns(): VxeTableGridOptions['columns'] { + return [ + { type: 'checkbox', width: 55 }, + { + field: 'name', + title: '优惠券名称', + minWidth: 140, + }, + { + field: 'productScope', + title: '类型', + minWidth: 80, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.PROMOTION_PRODUCT_SCOPE }, + }, + }, + { + field: 'discountType', + title: '优惠类型', + minWidth: 100, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.PROMOTION_DISCOUNT_TYPE }, + }, + }, + { + field: 'discountPrice', + title: '优惠力度', + minWidth: 100, + formatter: ({ row }) => discountFormat(row), + }, + { + field: 'takeType', + title: '领取方式', + minWidth: 100, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.PROMOTION_COUPON_TAKE_TYPE }, + }, + }, + { + field: 'validityType', + title: '使用时间', + minWidth: 185, + align: 'center', + formatter: ({ row }) => validityTypeFormat(row), + }, + { + field: 'totalCount', + title: '发放数量', + minWidth: 100, + align: 'center', + }, + { + field: 'remainedCount', + title: '剩余数量', + minWidth: 100, + align: 'center', + formatter: ({ row }) => remainedCountFormat(row), + }, + { + field: 'takeLimitCount', + title: '领取上限', + minWidth: 100, + align: 'center', + formatter: ({ row }) => takeLimitCountFormat(row), + }, + { + field: 'status', + title: '状态', + minWidth: 80, + align: 'center', + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.COMMON_STATUS }, + }, + }, + ]; +} diff --git a/apps/web-ele/src/views/mall/promotion/coupon/components/select.vue b/apps/web-ele/src/views/mall/promotion/coupon/components/select.vue new file mode 100644 index 000000000..8d75c2388 --- /dev/null +++ b/apps/web-ele/src/views/mall/promotion/coupon/components/select.vue @@ -0,0 +1,69 @@ + + + + diff --git a/apps/web-ele/src/views/mall/promotion/coupon/components/data.ts b/apps/web-ele/src/views/mall/promotion/coupon/components/send-form-data.ts similarity index 100% rename from apps/web-ele/src/views/mall/promotion/coupon/components/data.ts rename to apps/web-ele/src/views/mall/promotion/coupon/components/send-form-data.ts diff --git a/apps/web-ele/src/views/mall/promotion/coupon/components/send-form.vue b/apps/web-ele/src/views/mall/promotion/coupon/components/send-form.vue index 83e989227..9a8c4b192 100644 --- a/apps/web-ele/src/views/mall/promotion/coupon/components/send-form.vue +++ b/apps/web-ele/src/views/mall/promotion/coupon/components/send-form.vue @@ -11,7 +11,7 @@ import { TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { sendCoupon } from '#/api/mall/promotion/coupon/coupon'; import { getCouponTemplatePage } from '#/api/mall/promotion/coupon/couponTemplate'; -import { useFormSchema, useGridColumns } from './data'; +import { useFormSchema, useGridColumns } from './send-form-data.ts'; /** 发送优惠券 */ async function handleSendCoupon(row: MallCouponTemplateApi.CouponTemplate) { From 328ad78a2c336b1f1e80ceb80d0afe8945d6785c Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 28 Oct 2025 18:49:26 +0800 Subject: [PATCH 08/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20divider=20=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/components/color-input/index.vue | 9 +++++---- .../mobile/{Divider => divider}/config.ts | 17 ++++++----------- .../mobile/{Divider => divider}/index.vue | 2 -- .../mobile/{Divider => divider}/property.vue | 18 ++++++++---------- 4 files changed, 19 insertions(+), 27 deletions(-) rename apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/{Divider => divider}/config.ts (62%) rename apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/{Divider => divider}/index.vue (94%) rename apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/{Divider => divider}/property.vue (93%) diff --git a/apps/web-ele/src/views/mall/promotion/components/color-input/index.vue b/apps/web-ele/src/views/mall/promotion/components/color-input/index.vue index fdc881853..996863b5b 100644 --- a/apps/web-ele/src/views/mall/promotion/components/color-input/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/color-input/index.vue @@ -1,7 +1,8 @@ diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/Divider/property.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/divider/property.vue similarity index 93% rename from apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/Divider/property.vue rename to apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/divider/property.vue index 27df10576..4308e4ced 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/Divider/property.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/divider/property.vue @@ -13,15 +13,15 @@ import { ElTooltip, } from 'element-plus'; -import { InputWithColor as ColorInput } from '#/views/mall/promotion/components'; +import { ColorInput } from '#/views/mall/promotion/components'; -// 导航栏属性面板 +/** 导航栏属性面板 */ defineOptions({ name: 'DividerProperty' }); -const props = defineProps<{ modelValue: DividerProperty }>(); -const emit = defineEmits(['update:modelValue']); -const formData = useVModel(props, 'modelValue', emit); -// 线类型 +const props = defineProps<{ modelValue: DividerProperty }>(); + +const emit = defineEmits(['update:modelValue']); + const BORDER_TYPES = [ { icon: 'vaadin:line-h', @@ -43,7 +43,8 @@ const BORDER_TYPES = [ text: '无', type: 'none', }, -]; +]; // 线类型 +const formData = useVModel(props, 'modelValue', emit); - - From a4f7a51ba0ca45312212fb7c2954a40069d7a932 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 28 Oct 2025 19:08:39 +0800 Subject: [PATCH 09/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20floating-action-button=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobile/floating-action-button/config.ts | 27 +++++++------------ .../mobile/floating-action-button/index.vue | 24 +++++++---------- .../floating-action-button/property.vue | 6 ++--- 3 files changed, 23 insertions(+), 34 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/config.ts b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/config.ts index 22b98581c..d93b1f462 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/config.ts +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/config.ts @@ -1,28 +1,21 @@ import type { DiyComponent } from '../../../util'; -// 悬浮按钮属性 +/** 悬浮按钮属性 */ export interface FloatingActionButtonProperty { - // 展开方向 - direction: 'horizontal' | 'vertical'; - // 是否显示文字 - showText: boolean; - // 按钮列表 - list: FloatingActionButtonItemProperty[]; + direction: 'horizontal' | 'vertical'; // 展开方向 + showText: boolean; // 是否显示文字 + list: FloatingActionButtonItemProperty[]; // 按钮列表 } -// 悬浮按钮项属性 +/** 悬浮按钮项属性 */ export interface FloatingActionButtonItemProperty { - // 图片地址 - imgUrl: string; - // 跳转连接 - url: string; - // 文字 - text: string; - // 文字颜色 - textColor: string; + imgUrl: string; // 图片地址 + url: string; // 跳转连接 + text: string; // 文字 + textColor: string; // 文字颜色 } -// 定义组件 +/** 定义组件 */ export const component = { id: 'FloatingActionButton', name: '悬浮按钮', diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/index.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/index.vue index eb6563766..d0c2ae410 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/floating-action-button/index.vue @@ -5,23 +5,20 @@ import { ref } from 'vue'; import { IconifyIcon } from '@vben/icons'; -import { ElImage, ElMessage } from 'element-plus'; +import { ElButton, ElImage } from 'element-plus'; /** 悬浮按钮 */ defineOptions({ name: 'FloatingActionButton' }); -// 定义属性 + +/** 定义属性 */ defineProps<{ property: FloatingActionButtonProperty }>(); -// 是否展开 -const expanded = ref(false); -// 处理展开/折叠 -const handleToggleFab = () => { - expanded.value = !expanded.value; -}; +const expanded = ref(false); // 是否展开 -const handleActive = (index: number) => { - ElMessage.success(`点击了${index}`); -}; +/** 处理展开/折叠 */ +function handleToggleFab() { + expanded.value = !expanded.value; +} - - From 4de005061047e46b593c891a44cbdc83a5cc8d3e Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 28 Oct 2025 19:22:27 +0800 Subject: [PATCH 10/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20hot-zone=20=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8850%=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hot-zone-edit-dialog/controller.ts | 27 ++++--- .../components/hot-zone-edit-dialog/index.vue | 79 +++++++++++-------- .../components/mobile/hot-zone/config.ts | 29 +++---- .../components/mobile/hot-zone/index.vue | 1 + .../components/mobile/hot-zone/property.vue | 9 ++- .../views/mall/promotion/components/index.ts | 1 + 6 files changed, 77 insertions(+), 69 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/controller.ts b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/controller.ts index 2bac4c39e..b4000eccc 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/controller.ts +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/controller.ts @@ -2,10 +2,9 @@ import type { StyleValue } from 'vue'; import type { HotZoneItemProperty } from '../../config'; -// 热区的最小宽高 -export const HOT_ZONE_MIN_SIZE = 100; +export const HOT_ZONE_MIN_SIZE = 100; // 热区的最小宽高 -// 控制的类型 +/** 控制的类型 */ export enum CONTROL_TYPE_ENUM { LEFT, TOP, @@ -13,14 +12,14 @@ export enum CONTROL_TYPE_ENUM { HEIGHT, } -// 定义热区的控制点 +/** 定义热区的控制点 */ export interface ControlDot { position: string; types: CONTROL_TYPE_ENUM[]; style: StyleValue; } -// 热区的8个控制点 +/** 热区的 8 个控制点 */ export const CONTROL_DOT_LIST = [ { position: '左上角', @@ -98,10 +97,10 @@ export const CONTROL_DOT_LIST = [ ] as ControlDot[]; // region 热区的缩放 -// 热区的缩放比例 -export const HOT_ZONE_SCALE_RATE = 2; -// 缩小:缩回适合手机屏幕的大小 -export const zoomOut = (list?: HotZoneItemProperty[]) => { +export const HOT_ZONE_SCALE_RATE = 2; // 热区的缩放比例 + +/** 缩小:缩回适合手机屏幕的大小 */ +export function zoomOut(list?: HotZoneItemProperty[]) { return ( list?.map((hotZone) => ({ ...hotZone, @@ -111,9 +110,10 @@ export const zoomOut = (list?: HotZoneItemProperty[]) => { height: (hotZone.height /= HOT_ZONE_SCALE_RATE), })) || [] ); -}; -// 放大:作用是为了方便在电脑屏幕上编辑 -export const zoomIn = (list?: HotZoneItemProperty[]) => { +} + +/** 放大:作用是为了方便在电脑屏幕上编辑 */ +export function zoomIn(list?: HotZoneItemProperty[]) { return ( list?.map((hotZone) => ({ ...hotZone, @@ -123,7 +123,8 @@ export const zoomIn = (list?: HotZoneItemProperty[]) => { height: (hotZone.height *= HOT_ZONE_SCALE_RATE), })) || [] ); -}; +} + // endregion /** diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue index f59459a3f..ee2b85a08 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue @@ -10,6 +10,8 @@ import { IconifyIcon } from '@vben/icons'; import { ElButton, ElDialog, ElImage } from 'element-plus'; +import { AppLinkSelectDialog } from '#/views/mall/promotion/components'; + import { CONTROL_DOT_LIST, CONTROL_TYPE_ENUM, @@ -22,7 +24,7 @@ import { /** 热区编辑对话框 */ defineOptions({ name: 'HotZoneEditDialog' }); -// 定义属性 +/** 定义属性 */ const props = defineProps({ modelValue: { type: Array, @@ -33,51 +35,53 @@ const props = defineProps({ default: '', }, }); + const emit = defineEmits(['update:modelValue']); + const formData = ref([]); -// 弹窗的是否显示 -const dialogVisible = ref(false); -// 打开弹窗 +const dialogVisible = ref(false); // 弹窗的是否显示 + +/** 打开弹窗 */ const open = () => { // 放大 formData.value = zoomIn(props.modelValue); dialogVisible.value = true; }; -// 提供 open 方法,用于打开弹窗 -defineExpose({ open }); -// 热区容器 -const container = ref(); +defineExpose({ open }); // 提供 open 方法,用于打开弹窗 -// 增加热区 -const handleAdd = () => { +const container = ref(); // 热区容器 + +/** 增加热区 */ +function handleAdd() { formData.value.push({ width: HOT_ZONE_MIN_SIZE, height: HOT_ZONE_MIN_SIZE, top: 0, left: 0, } as HotZoneItemProperty); -}; -// 删除热区 -const handleRemove = (hotZone: HotZoneItemProperty) => { - formData.value = formData.value.filter((item) => item !== hotZone); -}; +} -// 移动热区 -const handleMove = (item: HotZoneItemProperty, e: MouseEvent) => { +/** 删除热区 */ +function handleRemove(hotZone: HotZoneItemProperty) { + formData.value = formData.value.filter((item) => item !== hotZone); +} + +/** 移动热区 */ +function handleMove(item: HotZoneItemProperty, e: MouseEvent) { useDraggable(item, e, (left, top, _, __, moveWidth, moveHeight) => { setLeft(item, left + moveWidth); setTop(item, top + moveHeight); }); -}; +} -// 调整热区大小、位置 -const handleResize = ( +/** 调整热区大小、位置 */ +function handleResize( item: HotZoneItemProperty, ctrlDot: ControlDot, e: MouseEvent, -) => { +) { useDraggable(item, e, (left, top, width, height, moveWidth, moveHeight) => { ctrlDot.types.forEach((type) => { switch (type) { @@ -112,23 +116,25 @@ const handleResize = ( } }); }); -}; +} -// 设置X轴坐标 -const setLeft = (item: HotZoneItemProperty, left: number) => { +/** 设置 X 轴坐标 */ +function setLeft(item: HotZoneItemProperty, left: number) { // 不能超出容器 if (left >= 0 && left <= container.value!.offsetWidth - item.width) { item.left = left; } -}; -// 设置Y轴坐标 -const setTop = (item: HotZoneItemProperty, top: number) => { +} + +/** 设置Y轴坐标 */ +function setTop(item: HotZoneItemProperty, top: number) { // 不能超出容器 if (top >= 0 && top <= container.value!.offsetHeight - item.height) { item.top = top; } -}; -// 设置宽度 +} + +/** 设置宽度 */ const setWidth = (item: HotZoneItemProperty, width: number) => { // 不能小于最小宽度 && 不能超出容器右边 if ( @@ -138,7 +144,8 @@ const setWidth = (item: HotZoneItemProperty, width: number) => { item.width = width; } }; -// 设置高度 + +/** 设置高度 */ const setHeight = (item: HotZoneItemProperty, height: number) => { // 不能小于最小高度 && 不能超出容器底部 if ( @@ -149,13 +156,12 @@ const setHeight = (item: HotZoneItemProperty, height: number) => { } }; -// 处理对话框关闭 +/** 处理对话框关闭 */ const handleSubmit = () => { - // 会自动触发handleClose dialogVisible.value = false; }; -// 处理对话框关闭 +/** 处理对话框关闭 */ const handleClose = () => { // 缩小 const list = zoomOut(formData.value); @@ -164,12 +170,16 @@ const handleClose = () => { const activeHotZone = ref(); const appLinkDialogRef = ref(); + const handleShowAppLinkDialog = (hotZone: HotZoneItemProperty) => { activeHotZone.value = hotZone; appLinkDialogRef.value.open(hotZone.url); }; + const handleAppLinkChange = (appLink: AppLink) => { - if (!appLink || !activeHotZone.value) return; + if (!appLink || !activeHotZone.value) { + return; + } activeHotZone.value.name = appLink.name; activeHotZone.value.url = appLink.path; }; @@ -231,6 +241,7 @@ const handleAppLinkChange = (appLink: AppLink) => { + (); diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue index bb3ebb667..9702db917 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/property.vue @@ -15,12 +15,14 @@ import HotZoneEditDialog from './components/hot-zone-edit-dialog/index.vue'; defineOptions({ name: 'HotZoneProperty' }); const props = defineProps<{ modelValue: HotZoneProperty }>(); + const emit = defineEmits(['update:modelValue']); + const formData = useVModel(props, 'modelValue', emit); -// 热区编辑对话框 -const editDialogRef = ref(); -// 打开热区编辑对话框 +const editDialogRef = ref(); // 热区编辑对话框 + +/** 打开热区编辑对话框 */ const handleOpenEditDialog = () => { editDialogRef.value.open(); }; @@ -49,6 +51,7 @@ const handleOpenEditDialog = () => { 设置热区 + Date: Tue, 28 Oct 2025 20:22:53 +0800 Subject: [PATCH 11/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20app-link-input=20=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8850%=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/app-link-input/index.vue | 25 +++++++++++++------ ...nk-select-dialog.vue => select-dialog.vue} | 15 +++++++---- .../views/mall/promotion/components/index.ts | 2 +- 3 files changed, 28 insertions(+), 14 deletions(-) rename apps/web-ele/src/views/mall/promotion/components/app-link-input/{app-link-select-dialog.vue => select-dialog.vue} (98%) diff --git a/apps/web-ele/src/views/mall/promotion/components/app-link-input/index.vue b/apps/web-ele/src/views/mall/promotion/components/app-link-input/index.vue index 2118dda5b..e1060efaa 100644 --- a/apps/web-ele/src/views/mall/promotion/components/app-link-input/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/app-link-input/index.vue @@ -1,14 +1,15 @@ diff --git a/apps/web-ele/src/views/mall/promotion/components/app-link-input/app-link-select-dialog.vue b/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue similarity index 98% rename from apps/web-ele/src/views/mall/promotion/components/app-link-input/app-link-select-dialog.vue rename to apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue index b2362962a..7962dc165 100644 --- a/apps/web-ele/src/views/mall/promotion/components/app-link-input/app-link-select-dialog.vue +++ b/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue @@ -39,9 +39,10 @@ const detailSelectDialog = ref<{ type: undefined, }); // 详情选择对话框 -/** 打开弹窗 */ const dialogVisible = ref(false); -const open = (link: string) => { + +/** 打开弹窗 */ +function open(link: string) { activeAppLink.value.path = link; dialogVisible.value = true; // 滚动到当前的链接 @@ -55,14 +56,16 @@ const open = (link: string) => { }), ); if (group) { + // TODO @AI:await 方式; // 使用 nextTick 的原因:可能 Dom 还没生成,导致滚动失败 nextTick(() => handleGroupSelected(group.name)); } -}; +} + defineExpose({ open }); /** 处理 APP 链接选中 */ -const handleAppLinkSelected = (appLink: AppLink) => { +function handleAppLinkSelected(appLink: AppLink) { if (!isSameLink(appLink.path, activeAppLink.value.path)) { activeAppLink.value = appLink; } @@ -82,7 +85,7 @@ const handleAppLinkSelected = (appLink: AppLink) => { break; } } -}; +} function handleSubmit() { dialogVisible.value = false; @@ -92,6 +95,7 @@ function handleSubmit() { /** * 处理右侧链接列表滚动 + * * @param {object} param0 滚动事件参数 * @param {number} param0.scrollTop 滚动条的位置 */ @@ -214,6 +218,7 @@ function handleProductCategorySelected(id: number) { 取 消 + Date: Tue, 28 Oct 2025 20:31:12 +0800 Subject: [PATCH 12/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20hot-zone=20=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8870%=EF=BC=89=E4=BD=BF=E7=94=A8=20Modal=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=20el-dialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/hot-zone-edit-dialog/index.vue | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue index ee2b85a08..175f36866 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/hot-zone/components/hot-zone-edit-dialog/index.vue @@ -6,9 +6,10 @@ import type { AppLink } from '#/views/mall/promotion/components/app-link-input/d import { ref } from 'vue'; +import { useVbenModal } from '@vben/common-ui'; import { IconifyIcon } from '@vben/icons'; -import { ElButton, ElDialog, ElImage } from 'element-plus'; +import { ElButton, ElImage } from 'element-plus'; import { AppLinkSelectDialog } from '#/views/mall/promotion/components'; @@ -40,14 +41,19 @@ const emit = defineEmits(['update:modelValue']); const formData = ref([]); -const dialogVisible = ref(false); // 弹窗的是否显示 +const [Modal, modalApi] = useVbenModal({ + onClosed() { + const list = zoomOut(formData.value); + emit('update:modelValue', list); + }, +}); /** 打开弹窗 */ -const open = () => { +function open() { // 放大 formData.value = zoomIn(props.modelValue); - dialogVisible.value = true; -}; + modalApi.open(); +} defineExpose({ open }); // 提供 open 方法,用于打开弹窗 @@ -156,16 +162,9 @@ const setHeight = (item: HotZoneItemProperty, height: number) => { } }; -/** 处理对话框关闭 */ +/** 处理对话框确定 */ const handleSubmit = () => { - dialogVisible.value = false; -}; - -/** 处理对话框关闭 */ -const handleClose = () => { - // 缩小 - const list = zoomOut(formData.value); - emit('update:modelValue', list); + modalApi.close(); }; const activeHotZone = ref(); @@ -186,12 +185,7 @@ const handleAppLinkChange = (appLink: AppLink) => { - + Date: Tue, 28 Oct 2025 21:03:18 +0800 Subject: [PATCH 13/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20hot-zone=20=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8870%=EF=BC=89=E4=BD=BF=E7=94=A8=20Modal=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=20el-dialog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app-link-input/select-dialog.vue | 65 +++++++++---------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue b/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue index 7962dc165..818f8764b 100644 --- a/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue +++ b/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue @@ -5,9 +5,10 @@ import type { AppLink } from './data'; import { nextTick, ref } from 'vue'; +import { useVbenModal } from '@vben/common-ui'; import { getUrlNumberValue } from '@vben/utils'; -import { ElScrollbar } from 'element-plus'; +import { ElButton, ElScrollbar, ElTooltip } from 'element-plus'; import ProductCategorySelect from '#/views/mall/product/category/components/product-category-select.vue'; @@ -39,12 +40,20 @@ const detailSelectDialog = ref<{ type: undefined, }); // 详情选择对话框 -const dialogVisible = ref(false); +const [Modal, modalApi] = useVbenModal({ + onConfirm() { + emit('change', activeAppLink.value.path); + emit('appLinkChange', activeAppLink.value); + modalApi.close(); + }, +}); + +defineExpose({ open }); /** 打开弹窗 */ -function open(link: string) { +async function open(link: string) { activeAppLink.value.path = link; - dialogVisible.value = true; + modalApi.open(); // 滚动到当前的链接 const group = APP_LINK_GROUP_LIST.find((group) => group.links.some((linkItem) => { @@ -56,14 +65,12 @@ function open(link: string) { }), ); if (group) { - // TODO @AI:await 方式; // 使用 nextTick 的原因:可能 Dom 还没生成,导致滚动失败 - nextTick(() => handleGroupSelected(group.name)); + await nextTick(); + handleGroupSelected(group.name); } } -defineExpose({ open }); - /** 处理 APP 链接选中 */ function handleAppLinkSelected(appLink: AppLink) { if (!isSameLink(appLink.path, activeAppLink.value.path)) { @@ -87,12 +94,6 @@ function handleAppLinkSelected(appLink: AppLink) { } } -function handleSubmit() { - dialogVisible.value = false; - emit('change', activeAppLink.value.path); - emit('appLinkChange', activeAppLink.value); -} - /** * 处理右侧链接列表滚动 * @@ -156,15 +157,17 @@ function handleProductCategorySelected(id: number) { } - From 05dc2c7eb2ddf6015fa448700b526d475f3f92ec Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 28 Oct 2025 22:56:01 +0800 Subject: [PATCH 14/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20hot-zone=20=E4=BB=A3=E7=A0=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8880%=EF=BC=89=E8=BF=9B=E4=B8=80=E6=AD=A5?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20Modal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/app-link-input/select-dialog.vue | 8 +++----- .../components/hot-zone-edit-dialog/index.vue | 15 ++++----------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue b/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue index 818f8764b..445060aee 100644 --- a/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue +++ b/apps/web-ele/src/views/mall/promotion/components/app-link-input/select-dialog.vue @@ -48,8 +48,6 @@ const [Modal, modalApi] = useVbenModal({ }, }); -defineExpose({ open }); - /** 打开弹窗 */ async function open(link: string) { activeAppLink.value.path = link; @@ -71,6 +69,8 @@ async function open(link: string) { } } +defineExpose({ open }); + /** 处理 APP 链接选中 */ function handleAppLinkSelected(appLink: AppLink) { if (!isSameLink(appLink.path, activeAppLink.value.path)) { @@ -139,7 +139,7 @@ function scrollToGroupBtn(group: string) { /** 是否为相同的链接(不比较参数,只比较链接) */ function isSameLink(link1: string, link2: string) { - return link2 ? link1.split('?')[0] === link2.split('?')[0] : false; + return link2 ? link1?.split('?')[0] === link2.split('?')[0] : false; } /** 处理详情选择 */ @@ -166,7 +166,6 @@ function handleProductCategorySelected(id: number) { view-class="flex flex-col" class="border-r border-gray-200 pr-2" > - - ([]); const [Modal, modalApi] = useVbenModal({ - onClosed() { + showCancelButton: false, + onConfirm() { const list = zoomOut(formData.value); emit('update:modelValue', list); + modalApi.close(); }, }); @@ -162,11 +164,6 @@ const setHeight = (item: HotZoneItemProperty, height: number) => { } }; -/** 处理对话框确定 */ -const handleSubmit = () => { - modalApi.close(); -}; - const activeHotZone = ref(); const appLinkDialogRef = ref(); @@ -224,15 +221,11 @@ const handleAppLinkChange = (appLink: AppLink) => { > - - - From fa383159ea89af03414dfc77befc853caf35ac1b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 29 Oct 2025 09:52:01 +0800 Subject: [PATCH 17/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20magic-cube=20=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/mobile/magic-cube/config.ts | 41 +++++++------------ .../components/mobile/magic-cube/index.vue | 8 ++-- .../components/mobile/magic-cube/property.vue | 10 ++--- 3 files changed, 23 insertions(+), 36 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/config.ts b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/config.ts index ef03fc9a6..13b1c4721 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/config.ts +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/config.ts @@ -2,39 +2,26 @@ import type { ComponentStyle, DiyComponent } from '../../../util'; /** 广告魔方属性 */ export interface MagicCubeProperty { - // 上圆角 - borderRadiusTop: number; - // 下圆角 - borderRadiusBottom: number; - // 间隔 - space: number; - // 导航菜单列表 - list: MagicCubeItemProperty[]; - // 组件样式 - style: ComponentStyle; + borderRadiusTop: number; // 上圆角 + borderRadiusBottom: number; // 下圆角 + space: number; // 间隔 + list: MagicCubeItemProperty[]; // 导航菜单列表 + style: ComponentStyle; // 组件样式 } /** 广告魔方项目属性 */ export interface MagicCubeItemProperty { - // 图标链接 - imgUrl: string; - // 链接 - url: string; - // 宽 - width: number; - // 高 - height: number; - // 上 - top: number; - // 左 - left: number; - // 右 - right: number; - // 下 - bottom: number; + imgUrl: string; // 图标链接 + url: string; // 链接 + width: number; // 宽 + height: number; // 高 + top: number; // 上 + left: number; // 左 + right: number; // 右 + bottom: number; // 下 } -// 定义组件 +/** 定义组件 */ export const component = { id: 'MagicCube', name: '广告魔方', diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/index.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/index.vue index 5a3aa7e57..1965bde82 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/index.vue @@ -9,9 +9,11 @@ import { ElImage } from 'element-plus'; /** 广告魔方 */ defineOptions({ name: 'MagicCube' }); + const props = defineProps<{ property: MagicCubeProperty }>(); -// 一个方块的大小 -const CUBE_SIZE = 93.75; + +const CUBE_SIZE = 93.75; // 一个方块的大小 + /** * 计算方块的行数 * 行数用于计算魔方的总体高度,存在以下情况: @@ -80,5 +82,3 @@ const rowCount = computed(() => { - - diff --git a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/property.vue b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/property.vue index 1f23095c6..ddccd8d0f 100644 --- a/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/property.vue +++ b/apps/web-ele/src/views/mall/promotion/components/diy-editor/components/mobile/magic-cube/property.vue @@ -18,11 +18,14 @@ import ComponentContainerProperty from '../../component-container-property.vue'; defineOptions({ name: 'MagicCubeProperty' }); const props = defineProps<{ modelValue: MagicCubeProperty }>(); + const emit = defineEmits(['update:modelValue']); + const formData = useVModel(props, 'modelValue', emit); -// 选中的热区 -const selectedHotAreaIndex = ref(-1); +const selectedHotAreaIndex = ref(-1); // 选中的热区 + +/** 处理热区被选中事件 */ const handleHotAreaSelected = (_: any, index: number) => { selectedHotAreaIndex.value = index; }; @@ -30,7 +33,6 @@ const handleHotAreaSelected = (_: any, index: number) => { - - From cb9fc7ad3ff80b704f9aeaa51c77bc1dfe3e6a3b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 29 Oct 2025 13:56:10 +0800 Subject: [PATCH 18/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20magic-cube-editor=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/magic-cube-editor/index.vue | 58 +++++++++---------- .../components/magic-cube-editor/util.ts | 38 ++++++------ 2 files changed, 43 insertions(+), 53 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue index d260ded9c..0e30219f3 100644 --- a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue @@ -7,16 +7,16 @@ import { IconifyIcon } from '@vben/icons'; import { createRect, isContains, isOverlap } from './util'; -// TODO @AI: 改成标准注释 -// 魔方编辑器 -// 有两部分组成: -// 1. 魔方矩阵:位于底层,由方块组件的二维表格,用于创建热区 -// 操作方法: -// 1.1 点击其中一个方块就会进入热区选择模式 -// 1.2 再次点击另外一个方块时,结束热区选择模式 -// 1.3 在两个方块中间的区域创建热区 -// 如果两次点击的都是同一方块,就只创建一个格子的热区 -// 2. 热区:位于顶层,采用绝对定位,覆盖在魔方矩阵上面。 +/** + * 魔方编辑器,有两部分组成: + * 1. 魔方矩阵:位于底层,由方块组件的二维表格,用于创建热区 + * 操作方法: + * 1.1 点击其中一个方块就会进入热区选择模式 + * 1.2 再次点击另外一个方块时,结束热区选择模式 + * 1.3 在两个方块中间的区域创建热区 + * 如果两次点击的都是同一方块,就只创建一个格子的热区 + * 2. 热区:位于顶层,采用绝对定位,覆盖在魔方矩阵上面。 + */ defineOptions({ name: 'MagicCubeEditor' }); /** 定义属性 */ @@ -29,12 +29,10 @@ const props = defineProps({ type: Number, default: 4, }, // 行数,默认 4 行 - cols: { type: Number, default: 4, }, // 列数,默认 4 列 - cubeSize: { type: Number, default: 75, @@ -70,6 +68,7 @@ watch( ); const hotAreas = ref([]); // 热区列表 + /** 初始化热区 */ watch( () => props.modelValue, @@ -86,20 +85,20 @@ const isHotAreaSelectMode = () => !!hotAreaBeginCube.value; // 是否开启了 * @param currentRow 当前行号 * @param currentCol 当前列号 */ -const handleCubeClick = (currentRow: number, currentCol: number) => { +function handleCubeClick(currentRow: number, currentCol: number) { const currentCube = cubes.value[currentRow]?.[currentCol]; if (!currentCube) { return; } - // 情况1:进入热区选择模式 + // 情况 1:进入热区选择模式 if (!isHotAreaSelectMode()) { hotAreaBeginCube.value = currentCube; hotAreaBeginCube.value!.active = true; return; } - // 情况2:结束热区选择模式 + // 情况 2:结束热区选择模式 hotAreas.value.push(createRect(hotAreaBeginCube.value!, currentCube)); // 结束热区选择模式 exitHotAreaSelectMode(); @@ -111,7 +110,7 @@ const handleCubeClick = (currentRow: number, currentCol: number) => { } // 发送热区变动通知 emitUpdateModelValue(); -}; +} /** * 处理鼠标经过方块 @@ -119,7 +118,7 @@ const handleCubeClick = (currentRow: number, currentCol: number) => { * @param currentRow 当前行号 * @param currentCol 当前列号 */ -const handleCellHover = (currentRow: number, currentCol: number) => { +function handleCellHover(currentRow: number, currentCol: number) { // 当前没有进入热区选择模式 if (!isHotAreaSelectMode()) { return; @@ -138,7 +137,6 @@ const handleCellHover = (currentRow: number, currentCol: number) => { if (isOverlap(hotArea, currentSelectedArea)) { // 结束热区选择模式 exitHotAreaSelectMode(); - return; } } @@ -147,13 +145,9 @@ const handleCellHover = (currentRow: number, currentCol: number) => { eachCube((_, __, cube) => { cube.active = isContains(currentSelectedArea, cube); }); -}; +} -/** - * 处理热区删除 - * - * @param index 热区索引 - */ +/** 处理热区删除 */ function handleDeleteHotArea(index: number) { hotAreas.value.splice(index, 1); // 结束热区选择模式 @@ -165,14 +159,14 @@ function handleDeleteHotArea(index: number) { const emitUpdateModelValue = () => emit('update:modelValue', hotAreas.value); // 发送热区变动通知 const selectedHotAreaIndex = ref(0); // 热区选中 -const handleHotAreaSelected = (hotArea: Rect, index: number) => { + +/** 处理热区选中 */ +function handleHotAreaSelected(hotArea: Rect, index: number) { selectedHotAreaIndex.value = index; emit('hotAreaSelected', hotArea, index); -}; +} -/** - * 结束热区选择模式 - */ +/** 结束热区选择模式 */ function exitHotAreaSelectMode() { // 移除方块激活标记 eachCube((_, __, cube) => { @@ -246,9 +240,9 @@ const eachCube = (callback: (x: number, y: number, cube: Cube) => void) => { > - {{ - `${hotArea.width}×${hotArea.height}` - }} + + {{ `${hotArea.width}×${hotArea.height}`}} + diff --git a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts index 1ee8fb5a4..152ce0cbe 100644 --- a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts +++ b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts @@ -1,52 +1,49 @@ -// 坐标点 +/** 坐标点 */ export interface Point { x: number; y: number; } -// 矩形 +/** 矩形 */ export interface Rect { - // 左上角 X 轴坐标 - left: number; - // 左上角 Y 轴坐标 - top: number; - // 右下角 X 轴坐标 - right: number; - // 右下角 Y 轴坐标 - bottom: number; - // 矩形宽度 - width: number; - // 矩形高度 - height: number; + left: number; // 左上角 X 轴坐标 + top: number; // 左上角 Y 轴坐标 + right: number; // 右下角 X 轴坐标 + bottom: number; // 右下角 Y 轴坐标 + width: number; // 矩形宽度 + height: number; // 矩形高度 } /** * 判断两个矩形是否重叠 + * * @param a 矩形 A * @param b 矩形 B */ -export const isOverlap = (a: Rect, b: Rect): boolean => { +export function isOverlap(a: Rect, b: Rect): boolean { return ( a.left < b.left + b.width && a.left + a.width > b.left && a.top < b.top + b.height && a.height + a.top > b.top ); -}; +} + /** * 检查坐标点是否在矩形内 * @param hotArea 矩形 * @param point 坐标 */ -export const isContains = (hotArea: Rect, point: Point): boolean => { +export function isContains(hotArea: Rect, point: Point): boolean { return ( point.x >= hotArea.left && point.x < hotArea.right && point.y >= hotArea.top && point.y < hotArea.bottom ); -}; +} +// TODO @AI:linter 修复 /** * 在两个坐标点中间,创建一个矩形 * @@ -59,7 +56,7 @@ export const isContains = (hotArea: Rect, point: Point): boolean => { * @param a 坐标点一 * @param b 坐标点二 */ -export const createRect = (a: Point, b: Point): Rect => { +export function createRect(a: Point, b: Point): Rect { // 计算矩形的范围 const [left, left2] = [a.x, b.x].sort(); const [top, top2] = [a.y, b.y].sort(); @@ -67,6 +64,5 @@ export const createRect = (a: Point, b: Point): Rect => { const bottom = top2 + 1; const height = bottom - top; const width = right - left; - return { left, right, top, bottom, height, width }; -}; +} From 38df83e2812cb9d116a68a6057ac21a965e33b7e Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 30 Oct 2025 00:11:56 +0800 Subject: [PATCH 19/19] =?UTF-8?q?feat=EF=BC=9A=E3=80=90mall=E3=80=91diy=20?= =?UTF-8?q?editor=20=E7=9A=84=20magic-cube-editor=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../promotion/components/magic-cube-editor/index.vue | 7 ++++++- .../mall/promotion/components/magic-cube-editor/util.ts | 9 ++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue index 0e30219f3..b985a8142 100644 --- a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue +++ b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/index.vue @@ -241,7 +241,7 @@ const eachCube = (callback: (x: number, y: number, cube: Cube) => void) => { - {{ `${hotArea.width}×${hotArea.height}`}} + {{ `${hotArea.width}×${hotArea.height}` }} @@ -259,6 +259,11 @@ const eachCube = (callback: (x: number, y: number, cube: Cube) => void) => { text-align: center; cursor: pointer; border: 1px solid var(--el-border-color); + line-height: 1; + + :deep(.iconify) { + display: inline-block; + } &.active { background: var(--el-color-primary-light-9); diff --git a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts index 152ce0cbe..6e3eb7cd2 100644 --- a/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts +++ b/apps/web-ele/src/views/mall/promotion/components/magic-cube-editor/util.ts @@ -43,7 +43,6 @@ export function isContains(hotArea: Rect, point: Point): boolean { ); } -// TODO @AI:linter 修复 /** * 在两个坐标点中间,创建一个矩形 * @@ -58,8 +57,12 @@ export function isContains(hotArea: Rect, point: Point): boolean { */ export function createRect(a: Point, b: Point): Rect { // 计算矩形的范围 - const [left, left2] = [a.x, b.x].sort(); - const [top, top2] = [a.y, b.y].sort(); + let [left, left2] = [a.x, b.x].sort(); + left = left ?? 0; + left2 = left2 ?? 0; + let [top, top2] = [a.y, b.y].sort(); + top = top ?? 0; + top2 = top2 ?? 0; const right = left2 + 1; const bottom = top2 + 1; const height = bottom - top;