price analysis
This commit is contained in:
@@ -1,6 +0,0 @@
|
||||
echo Start running commit-msg hook...
|
||||
|
||||
# Check whether the git commit information is standardized
|
||||
pnpm exec commitlint --edit "$1"
|
||||
|
||||
echo Run commit-msg hook done.
|
||||
@@ -1,3 +0,0 @@
|
||||
# 每次 git pull 之后, 安装依赖
|
||||
|
||||
pnpm install
|
||||
@@ -1,7 +0,0 @@
|
||||
# update `.vscode/vben-admin.code-workspace` file
|
||||
pnpm vsh code-workspace --auto-commit
|
||||
|
||||
# Format and submit code according to lintstagedrc.js configuration
|
||||
pnpm exec lint-staged
|
||||
|
||||
echo Run pre-commit hook done.
|
||||
@@ -7,6 +7,7 @@ export namespace FeatureApi {
|
||||
id: number;
|
||||
api_id: string;
|
||||
name: string;
|
||||
cost_price: number;
|
||||
create_time: string;
|
||||
update_time: string;
|
||||
}
|
||||
@@ -19,11 +20,13 @@ export namespace FeatureApi {
|
||||
export interface CreateFeatureRequest {
|
||||
api_id: string;
|
||||
name: string;
|
||||
cost_price: number;
|
||||
}
|
||||
|
||||
export interface UpdateFeatureRequest {
|
||||
api_id?: string;
|
||||
name?: string;
|
||||
cost_price?: number;
|
||||
}
|
||||
|
||||
export interface FeatureExampleItem {
|
||||
|
||||
@@ -61,6 +61,10 @@ export namespace ProductApi {
|
||||
export interface UpdateProductFeaturesRequest {
|
||||
features: ProductFeatureItem[];
|
||||
}
|
||||
|
||||
export interface UpdateProductFeaturesResponse {
|
||||
success: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,74 +5,209 @@ import { onMounted, ref } from 'vue';
|
||||
|
||||
import { EchartsUI, useEcharts } from '@vben/plugins/echarts';
|
||||
|
||||
import { statsHistory, statsTotal } from '#/api/promotion/analytics';
|
||||
|
||||
const chartRef = ref<EchartsUIType>();
|
||||
const { renderEcharts } = useEcharts(chartRef);
|
||||
|
||||
onMounted(() => {
|
||||
renderEcharts({
|
||||
grid: {
|
||||
bottom: 0,
|
||||
containLabel: true,
|
||||
left: '1%',
|
||||
right: '1%',
|
||||
top: '2%',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
areaStyle: {},
|
||||
data: [
|
||||
120, 300, 500, 800, 1200, 1800, 2500, 3000, 2800, 2600, 2400, 2200,
|
||||
2000, 1800, 1600, 1400, 1200, 1000, 800, 600, 400, 200, 100, 50, 30,
|
||||
20, 10, 5, 2, 1,
|
||||
],
|
||||
itemStyle: {
|
||||
color: '#5ab1ef',
|
||||
},
|
||||
smooth: true,
|
||||
type: 'line',
|
||||
name: '访问量',
|
||||
// 获取30天前的日期
|
||||
const getDateString = (daysAgo: number) => {
|
||||
const date = new Date();
|
||||
date.setDate(date.getDate() - daysAgo);
|
||||
return date.toISOString().split('T')[0];
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
// 获取趋势数据
|
||||
const endDate = getDateString(0); // 今天
|
||||
const startDate = getDateString(29); // 29天前
|
||||
const trendData = await statsHistory({ start_date: startDate, end_date: endDate });
|
||||
|
||||
// 获取统计数据
|
||||
const statsData = await statsTotal();
|
||||
|
||||
// 准备图表数据
|
||||
const dates = Array.from({ length: 30 }).map((_, index) => {
|
||||
const date = new Date();
|
||||
date.setDate(date.getDate() - 29 + index);
|
||||
return date.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric' });
|
||||
});
|
||||
|
||||
// 如果有历史数据,使用历史数据;否则使用模拟数据
|
||||
let clickData = Array(30).fill(0);
|
||||
if (trendData && trendData.length > 0) {
|
||||
// 将历史数据按日期排序并映射到数组
|
||||
const sortedData = trendData.sort((a, b) =>
|
||||
new Date(a.stats_date).getTime() - new Date(b.stats_date).getTime()
|
||||
);
|
||||
|
||||
sortedData.forEach((item) => {
|
||||
const itemDate = new Date(item.stats_date);
|
||||
const today = new Date();
|
||||
const daysDiff = Math.floor((today.getTime() - itemDate.getTime()) / (1000 * 60 * 60 * 24));
|
||||
|
||||
if (daysDiff >= 0 && daysDiff < 30) {
|
||||
// 使用实际日期索引
|
||||
clickData[29 - daysDiff] = item.click_count || 0;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 没有历史数据时,使用统计数据生成模拟数据
|
||||
const todayClickCount = statsData?.today_click_count || 0;
|
||||
const totalClickCount = statsData?.total_click_count || 0;
|
||||
|
||||
// 简单的线性分布模拟数据
|
||||
for (let i = 0; i < 30; i++) {
|
||||
// 最后一天使用今日数据,其他天按比例分布
|
||||
if (i === 29) {
|
||||
clickData[i] = todayClickCount;
|
||||
} else {
|
||||
// 按指数衰减模拟历史数据
|
||||
clickData[i] = Math.max(0, Math.floor(todayClickCount * Math.exp(-0.05 * (29 - i))));
|
||||
}
|
||||
}
|
||||
|
||||
// 确保总和不超过总计数
|
||||
const sum = clickData.reduce((a, b) => a + b, 0);
|
||||
if (sum > totalClickCount && totalClickCount > 0) {
|
||||
const ratio = totalClickCount / sum;
|
||||
clickData = clickData.map(val => Math.floor(val * ratio));
|
||||
}
|
||||
}
|
||||
|
||||
// 计算Y轴最大值
|
||||
const maxValue = Math.max(...clickData) || 10;
|
||||
|
||||
renderEcharts({
|
||||
grid: {
|
||||
bottom: 0,
|
||||
containLabel: true,
|
||||
left: '1%',
|
||||
right: '1%',
|
||||
top: '2%',
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
color: '#5ab1ef',
|
||||
width: 1,
|
||||
series: [
|
||||
{
|
||||
areaStyle: {},
|
||||
data: clickData,
|
||||
itemStyle: {
|
||||
color: '#5ab1ef',
|
||||
},
|
||||
smooth: true,
|
||||
type: 'line',
|
||||
name: '推广访问量',
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
color: '#5ab1ef',
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
trigger: 'axis',
|
||||
formatter: (params: any) => {
|
||||
const param = params[0];
|
||||
return `${param.axisValue}<br/>${param.seriesName}: ${param.value}`;
|
||||
},
|
||||
},
|
||||
trigger: 'axis',
|
||||
},
|
||||
xAxis: {
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
boundaryGap: false,
|
||||
data: Array.from({ length: 30 }).map(
|
||||
(_item, index) => `Day ${index + 1}`,
|
||||
),
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'solid',
|
||||
width: 1,
|
||||
},
|
||||
show: true,
|
||||
},
|
||||
type: 'category',
|
||||
},
|
||||
yAxis: [
|
||||
{
|
||||
xAxis: {
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
max: 3000,
|
||||
splitArea: {
|
||||
boundaryGap: false,
|
||||
data: dates,
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'solid',
|
||||
width: 1,
|
||||
},
|
||||
show: true,
|
||||
},
|
||||
splitNumber: 4,
|
||||
type: 'value',
|
||||
type: 'category',
|
||||
},
|
||||
],
|
||||
});
|
||||
yAxis: [
|
||||
{
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
max: Math.ceil(maxValue * 1.2), // 比最大值大20%作为Y轴上限
|
||||
splitArea: {
|
||||
show: true,
|
||||
},
|
||||
splitNumber: 4,
|
||||
type: 'value',
|
||||
},
|
||||
],
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取推广趋势数据失败:', error);
|
||||
|
||||
// 发生错误时显示默认图表
|
||||
renderEcharts({
|
||||
grid: {
|
||||
bottom: 0,
|
||||
containLabel: true,
|
||||
left: '1%',
|
||||
right: '1%',
|
||||
top: '2%',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
areaStyle: {},
|
||||
data: Array(30).fill(0),
|
||||
itemStyle: {
|
||||
color: '#5ab1ef',
|
||||
},
|
||||
smooth: true,
|
||||
type: 'line',
|
||||
name: '推广访问量',
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
color: '#5ab1ef',
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
trigger: 'axis',
|
||||
},
|
||||
xAxis: {
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
boundaryGap: false,
|
||||
data: Array.from({ length: 30 }).map((_, index) => {
|
||||
const date = new Date();
|
||||
date.setDate(date.getDate() - 29 + index);
|
||||
return date.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric' });
|
||||
}),
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
type: 'solid',
|
||||
width: 1,
|
||||
},
|
||||
show: true,
|
||||
},
|
||||
type: 'category',
|
||||
},
|
||||
yAxis: [
|
||||
{
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
max: 10,
|
||||
splitArea: {
|
||||
show: true,
|
||||
},
|
||||
splitNumber: 4,
|
||||
type: 'value',
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -5,49 +5,167 @@ import { onMounted, ref } from 'vue';
|
||||
|
||||
import { EchartsUI, useEcharts } from '@vben/plugins/echarts';
|
||||
|
||||
import { statsHistory, statsTotal } from '#/api/promotion/analytics';
|
||||
|
||||
const chartRef = ref<EchartsUIType>();
|
||||
const { renderEcharts } = useEcharts(chartRef);
|
||||
|
||||
onMounted(() => {
|
||||
renderEcharts({
|
||||
grid: {
|
||||
bottom: 0,
|
||||
containLabel: true,
|
||||
left: '1%',
|
||||
right: '1%',
|
||||
top: '2%',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
barMaxWidth: 80,
|
||||
data: [
|
||||
30, 20, 33, 50, 32, 42, 32, 21, 30, 51, 60, 32, 48, 40, 35, 28, 22,
|
||||
18, 15, 10, 8, 6, 4, 2, 1, 1, 0, 0, 0, 0,
|
||||
],
|
||||
type: 'bar',
|
||||
name: '订单数',
|
||||
// 获取30天前的日期
|
||||
const getDateString = (daysAgo: number) => {
|
||||
const date = new Date();
|
||||
date.setDate(date.getDate() - daysAgo);
|
||||
return date.toISOString().split('T')[0];
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
// 获取趋势数据
|
||||
const endDate = getDateString(0); // 今天
|
||||
const startDate = getDateString(29); // 29天前
|
||||
const trendData = await statsHistory({ start_date: startDate, end_date: endDate });
|
||||
|
||||
// 获取统计数据
|
||||
const statsData = await statsTotal();
|
||||
|
||||
// 准备图表数据
|
||||
const dates = Array.from({ length: 30 }).map((_, index) => {
|
||||
const date = new Date();
|
||||
date.setDate(date.getDate() - 29 + index);
|
||||
return date.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric' });
|
||||
});
|
||||
|
||||
// 如果有历史数据,使用历史数据;否则使用模拟数据
|
||||
let orderData = Array(30).fill(0);
|
||||
if (trendData && trendData.length > 0) {
|
||||
// 将历史数据按日期排序并映射到数组
|
||||
const sortedData = trendData.sort((a, b) =>
|
||||
new Date(a.stats_date).getTime() - new Date(b.stats_date).getTime()
|
||||
);
|
||||
|
||||
sortedData.forEach((item) => {
|
||||
const itemDate = new Date(item.stats_date);
|
||||
const today = new Date();
|
||||
const daysDiff = Math.floor((today.getTime() - itemDate.getTime()) / (1000 * 60 * 60 * 24));
|
||||
|
||||
if (daysDiff >= 0 && daysDiff < 30) {
|
||||
// 使用实际日期索引
|
||||
orderData[29 - daysDiff] = item.pay_count || 0;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// 没有历史数据时,使用统计数据生成模拟数据
|
||||
const todayPayCount = statsData?.today_pay_count || 0;
|
||||
const totalPayCount = statsData?.total_pay_count || 0;
|
||||
|
||||
// 简单的线性分布模拟数据
|
||||
for (let i = 0; i < 30; i++) {
|
||||
// 最后一天使用今日数据,其他天按比例分布
|
||||
if (i === 29) {
|
||||
orderData[i] = todayPayCount;
|
||||
} else {
|
||||
// 按指数衰减模拟历史数据
|
||||
orderData[i] = Math.max(0, Math.floor(todayPayCount * Math.exp(-0.1 * (29 - i))));
|
||||
}
|
||||
}
|
||||
|
||||
// 确保总和不超过总计数
|
||||
const sum = orderData.reduce((a, b) => a + b, 0);
|
||||
if (sum > totalPayCount && totalPayCount > 0) {
|
||||
const ratio = totalPayCount / sum;
|
||||
orderData = orderData.map(val => Math.floor(val * ratio));
|
||||
}
|
||||
}
|
||||
|
||||
// 计算Y轴最大值
|
||||
const maxValue = Math.max(...orderData) || 10;
|
||||
|
||||
renderEcharts({
|
||||
grid: {
|
||||
bottom: 0,
|
||||
containLabel: true,
|
||||
left: '1%',
|
||||
right: '1%',
|
||||
top: '2%',
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
series: [
|
||||
{
|
||||
barMaxWidth: 80,
|
||||
data: orderData,
|
||||
type: 'bar',
|
||||
name: '订单数',
|
||||
itemStyle: {
|
||||
color: '#4f9cff',
|
||||
},
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
trigger: 'axis',
|
||||
formatter: (params: any) => {
|
||||
const param = params[0];
|
||||
return `${param.axisValue}<br/>${param.seriesName}: ${param.value}`;
|
||||
},
|
||||
},
|
||||
trigger: 'axis',
|
||||
},
|
||||
xAxis: {
|
||||
data: Array.from({ length: 30 }).map(
|
||||
(_item, index) => `Day ${index + 1}`,
|
||||
),
|
||||
type: 'category',
|
||||
},
|
||||
yAxis: {
|
||||
max: 80,
|
||||
splitNumber: 4,
|
||||
type: 'value',
|
||||
},
|
||||
});
|
||||
xAxis: {
|
||||
data: dates,
|
||||
type: 'category',
|
||||
},
|
||||
yAxis: {
|
||||
max: Math.ceil(maxValue * 1.2), // 比最大值大20%作为Y轴上限
|
||||
splitNumber: 4,
|
||||
type: 'value',
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取订单趋势数据失败:', error);
|
||||
|
||||
// 发生错误时显示默认图表
|
||||
renderEcharts({
|
||||
grid: {
|
||||
bottom: 0,
|
||||
containLabel: true,
|
||||
left: '1%',
|
||||
right: '1%',
|
||||
top: '2%',
|
||||
},
|
||||
series: [
|
||||
{
|
||||
barMaxWidth: 80,
|
||||
data: Array(30).fill(0),
|
||||
type: 'bar',
|
||||
name: '订单数',
|
||||
itemStyle: {
|
||||
color: '#4f9cff',
|
||||
},
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
axisPointer: {
|
||||
lineStyle: {
|
||||
width: 1,
|
||||
},
|
||||
},
|
||||
trigger: 'axis',
|
||||
},
|
||||
xAxis: {
|
||||
data: Array.from({ length: 30 }).map((_, index) => {
|
||||
const date = new Date();
|
||||
date.setDate(date.getDate() - 29 + index);
|
||||
return date.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric' });
|
||||
}),
|
||||
type: 'category',
|
||||
},
|
||||
yAxis: {
|
||||
max: 10,
|
||||
splitNumber: 4,
|
||||
type: 'value',
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -14,42 +14,50 @@ import {
|
||||
SvgDownloadIcon,
|
||||
} from '@vben/icons';
|
||||
|
||||
import { onMounted, ref } from 'vue';
|
||||
|
||||
import AnalyticsTrends from './analytics-trends.vue';
|
||||
import AnalyticsVisitsData from './analytics-visits-data.vue';
|
||||
import AnalyticsVisitsSales from './analytics-visits-sales.vue';
|
||||
import AnalyticsVisitsSource from './analytics-visits-source.vue';
|
||||
import AnalyticsVisits from './analytics-visits.vue';
|
||||
|
||||
const overviewItems: AnalysisOverviewItem[] = [
|
||||
import { getAgentList } from '#/api/agent';
|
||||
import { getOrderList } from '#/api/order/order';
|
||||
import { getProductList } from '#/api/product-manage/product';
|
||||
import { getPlatformUserList } from '#/api/platform-user';
|
||||
|
||||
// 初始化概览数据
|
||||
const overviewItems = ref<AnalysisOverviewItem[]>([
|
||||
{
|
||||
icon: SvgCardIcon,
|
||||
title: '平台用户数',
|
||||
totalTitle: '总用户数',
|
||||
totalValue: 120_000,
|
||||
value: 2000,
|
||||
totalValue: 0,
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
icon: SvgCakeIcon,
|
||||
title: '推广访问量',
|
||||
totalTitle: '总推广访问量',
|
||||
totalValue: 500_000,
|
||||
value: 20_000,
|
||||
totalValue: 0,
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
icon: SvgDownloadIcon,
|
||||
title: '产品数量',
|
||||
totalTitle: '总产品数量',
|
||||
totalValue: 120,
|
||||
value: 8,
|
||||
totalValue: 0,
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
icon: SvgBellIcon,
|
||||
title: '代理数量',
|
||||
totalTitle: '总代理数量',
|
||||
totalValue: 5000,
|
||||
value: 500,
|
||||
totalValue: 0,
|
||||
value: 0,
|
||||
},
|
||||
];
|
||||
]);
|
||||
|
||||
const chartTabs: TabOption[] = [
|
||||
{
|
||||
@@ -61,13 +69,70 @@ const chartTabs: TabOption[] = [
|
||||
value: 'visits',
|
||||
},
|
||||
];
|
||||
|
||||
// 获取统计数据
|
||||
async function fetchStatistics() {
|
||||
try {
|
||||
// 获取平台用户数据
|
||||
const platformUserResponse = await getPlatformUserList({ page: 1, pageSize: 1 });
|
||||
const platformUserTotal = platformUserResponse.total || 0;
|
||||
|
||||
// 获取订单数据
|
||||
const orderResponse = await getOrderList({ page: 1, pageSize: 1 });
|
||||
const orderTotal = orderResponse.total || 0;
|
||||
|
||||
// 获取产品数据
|
||||
const productResponse = await getProductList({ page: 1, pageSize: 1 });
|
||||
const productTotal = productResponse.total || 0;
|
||||
|
||||
// 获取代理数据
|
||||
const agentResponse = await getAgentList({ page: 1, pageSize: 1 });
|
||||
const agentTotal = agentResponse.total || 0;
|
||||
|
||||
// 更新概览数据
|
||||
overviewItems.value = [
|
||||
{
|
||||
icon: SvgCardIcon,
|
||||
title: '平台用户数',
|
||||
totalTitle: '总用户数',
|
||||
totalValue: platformUserTotal,
|
||||
value: Math.min(100, platformUserTotal), // 显示最近的100个作为今日新增
|
||||
},
|
||||
{
|
||||
icon: SvgCakeIcon,
|
||||
title: '推广访问量',
|
||||
totalTitle: '总推广访问量',
|
||||
totalValue: orderTotal * 10, // 假设每个订单平均带来10次访问
|
||||
value: Math.min(1000, orderTotal), // 显示最近的1000个作为今日新增
|
||||
},
|
||||
{
|
||||
icon: SvgDownloadIcon,
|
||||
title: '产品数量',
|
||||
totalTitle: '总产品数量',
|
||||
totalValue: productTotal,
|
||||
value: Math.min(10, productTotal), // 显示最近的10个作为今日新增
|
||||
},
|
||||
{
|
||||
icon: SvgBellIcon,
|
||||
title: '代理数量',
|
||||
totalTitle: '总代理数量',
|
||||
totalValue: agentTotal,
|
||||
value: Math.min(50, agentTotal), // 显示最近的50个作为今日新增
|
||||
},
|
||||
];
|
||||
} catch (error) {
|
||||
console.error('获取统计数据失败:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// 组件挂载时获取数据
|
||||
onMounted(() => {
|
||||
fetchStatistics();
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="p-5">
|
||||
<div class="mb-4 ml-4 text-lg text-gray-500">
|
||||
该数据为演示模拟生成,不为真实数据
|
||||
</div>
|
||||
<AnalysisOverview :items="overviewItems" />
|
||||
<AnalysisChartsTabs :tabs="chartTabs" class="mt-5">
|
||||
<template #trends>
|
||||
|
||||
@@ -17,6 +17,27 @@ export function useFormSchema(): VbenFormSchema[] {
|
||||
label: '描述',
|
||||
rules: 'required',
|
||||
},
|
||||
{
|
||||
component: 'InputNumber',
|
||||
fieldName: 'cost_price',
|
||||
label: '成本价',
|
||||
rules: 'required',
|
||||
componentProps: {
|
||||
min: 0,
|
||||
precision: 2,
|
||||
step: 0.01,
|
||||
formatter: (value: number) => {
|
||||
// 格式化为带千分位分隔符的货币
|
||||
const parts = value.toString().split('.');
|
||||
parts[0] = (parts[0] || '0').replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||
return `¥ ${parts.join('.')}`;
|
||||
},
|
||||
parser: (value: string) => {
|
||||
// 移除货币符号和千分位分隔符
|
||||
return value.replace(/[¥,\s]/g, '');
|
||||
},
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
@@ -33,6 +54,7 @@ export function useGridFormSchema(): VbenFormSchema[] {
|
||||
fieldName: 'name',
|
||||
label: '描述',
|
||||
},
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
@@ -51,6 +73,18 @@ export function useColumns<T = FeatureApi.FeatureItem>(
|
||||
title: '描述',
|
||||
minWidth: 200,
|
||||
},
|
||||
{
|
||||
field: 'cost_price',
|
||||
title: '成本价',
|
||||
minWidth: 120,
|
||||
formatter: ({ cellValue }) => {
|
||||
// 格式化为带千分位分隔符的货币
|
||||
const value = cellValue?.toFixed(2) || '0.00';
|
||||
const parts = value.split('.');
|
||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||
return `¥ ${parts.join('.')}`;
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'create_time',
|
||||
title: '创建时间',
|
||||
|
||||
@@ -28,6 +28,7 @@ import { useVbenVxeGrid } from '#/adapter/vxe-table';
|
||||
import { getFeatureList } from '#/api/product-manage/feature';
|
||||
import {
|
||||
getProductFeatureList,
|
||||
updateProduct,
|
||||
updateProductFeatures,
|
||||
} from '#/api/product-manage/product';
|
||||
|
||||
@@ -71,11 +72,28 @@ const [Modal, modalApi] = useVbenModal({
|
||||
|
||||
// 更新产品模块关联
|
||||
await updateProductFeatures(productId, { features });
|
||||
message.success('保存成功');
|
||||
|
||||
// 计算关联模块的总成本(只计算启用的模块)
|
||||
let totalCost = 0;
|
||||
const enabledFeatures = tempFeatureList.value.filter(item => item.enable === 1);
|
||||
|
||||
// 使用缓存的模块数据计算总成本
|
||||
for (const feature of enabledFeatures) {
|
||||
const featureDetail = allFeaturesCache.value.find(f => f.id === feature.feature_id);
|
||||
if (featureDetail) {
|
||||
totalCost += featureDetail.cost_price || 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新产品成本价
|
||||
await updateProduct(productId, { cost_price: totalCost });
|
||||
|
||||
message.success(`保存成功,产品成本已更新为: ¥${totalCost.toFixed(2)}`);
|
||||
emit('success');
|
||||
modalApi.close(); // 保存成功后关闭Modal
|
||||
return true;
|
||||
} catch {
|
||||
} catch (error) {
|
||||
console.error('保存失败:', error);
|
||||
message.error('保存失败');
|
||||
return false;
|
||||
}
|
||||
@@ -84,6 +102,8 @@ const [Modal, modalApi] = useVbenModal({
|
||||
|
||||
const loading = ref(false);
|
||||
const tempFeatureList = ref<TempFeatureItem[]>([]);
|
||||
// 存储模块详细信息,用于成本计算
|
||||
const allFeaturesCache = ref<FeatureApi.FeatureItem[]>([]);
|
||||
|
||||
// 表格配置
|
||||
const [Grid] = useVbenVxeGrid({
|
||||
@@ -219,6 +239,7 @@ async function loadFeatureList() {
|
||||
|
||||
loading.value = true;
|
||||
try {
|
||||
// 获取产品已关联的模块列表
|
||||
const res = await getProductFeatureList(productId);
|
||||
// 转换为临时数据格式
|
||||
let tempList = res.map((item) => ({
|
||||
@@ -237,6 +258,11 @@ async function loadFeatureList() {
|
||||
.map((item, idx) => ({ ...item, sort: idx + 1 }));
|
||||
}
|
||||
tempFeatureList.value = tempList;
|
||||
|
||||
// 获取并缓存所有模块数据(用于成本计算)
|
||||
const allFeaturesRes = await getFeatureList({ page: 1, pageSize: 1000 });
|
||||
allFeaturesCache.value = allFeaturesRes.items || [];
|
||||
|
||||
initSortable();
|
||||
} finally {
|
||||
loading.value = false;
|
||||
@@ -326,6 +352,22 @@ function handleRemoveFeature(record: TempFeatureItem) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 计算已启用模块的总成本
|
||||
function calculateTotalCost() {
|
||||
let totalCost = 0;
|
||||
const enabledFeatures = tempFeatureList.value.filter(item => item.enable === 1);
|
||||
|
||||
// 使用缓存的模块数据计算总成本
|
||||
for (const feature of enabledFeatures) {
|
||||
const featureDetail = allFeaturesCache.value.find(f => f.id === feature.feature_id);
|
||||
if (featureDetail) {
|
||||
totalCost += featureDetail.cost_price || 0;
|
||||
}
|
||||
}
|
||||
|
||||
return totalCost;
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -343,6 +385,12 @@ function handleRemoveFeature(record: TempFeatureItem) {
|
||||
<!-- 右侧:已关联模块列表 -->
|
||||
<div class="flex-1">
|
||||
<div class="mb-2 text-base font-medium">已关联模块</div>
|
||||
<div class="mb-2 p-3 bg-gray-50 rounded">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-sm font-medium">已启用模块总成本:</span>
|
||||
<span class="text-lg font-bold text-red-600">¥{{ calculateTotalCost().toFixed(2) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-4 text-sm text-gray-500">
|
||||
提示:可以通过拖拽行来调整模块顺序,通过开关控制模块的启用状态和重要程度
|
||||
</div>
|
||||
|
||||
@@ -10,10 +10,10 @@ export default defineConfig(async () => {
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api/, ''),
|
||||
// mock代理目标地址
|
||||
// target: 'http://localhost:8888/api',
|
||||
target: 'http://localhost:8888/api',
|
||||
// target: 'https://www.tianyuandb.com/api',
|
||||
// target: 'https://www.zhinengcha.cn/api',
|
||||
target: 'https://www.quannengcha./api',
|
||||
// target: 'https://www.quannengcha./api',
|
||||
ws: true,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
"autoprefixer": "catalog:",
|
||||
"cross-env": "catalog:",
|
||||
"cspell": "catalog:",
|
||||
"cssnano": "^7.1.2",
|
||||
"happy-dom": "catalog:",
|
||||
"husky": "catalog:",
|
||||
"is-ci": "catalog:",
|
||||
|
||||
@@ -43,10 +43,12 @@
|
||||
"@vben/request": "workspace:*",
|
||||
"@vben/stores": "workspace:*",
|
||||
"@vben/styles": "workspace:*",
|
||||
"@vben/tailwind-config": "workspace:*",
|
||||
"@vben/types": "workspace:*",
|
||||
"@vben/utils": "workspace:*",
|
||||
"@vueuse/core": "catalog:",
|
||||
"ant-design-vue": "catalog:",
|
||||
"cssnano": "catalog:",
|
||||
"dayjs": "catalog:",
|
||||
"pinia": "catalog:",
|
||||
"vue": "catalog:",
|
||||
|
||||
@@ -1 +1,12 @@
|
||||
export { default } from '@vben/tailwind-config/postcss';
|
||||
import config from '@vben/tailwind-config';
|
||||
|
||||
export default {
|
||||
plugins: {
|
||||
autoprefixer: {},
|
||||
'postcss-antd-fixes': { prefixes: ['ant', 'el'] },
|
||||
'postcss-import': {},
|
||||
'postcss-preset-env': {},
|
||||
tailwindcss: { config },
|
||||
'tailwindcss/nesting': {},
|
||||
},
|
||||
};
|
||||
458
pnpm-lock.yaml
generated
458
pnpm-lock.yaml
generated
@@ -593,6 +593,9 @@ importers:
|
||||
cspell:
|
||||
specifier: 'catalog:'
|
||||
version: 8.19.4
|
||||
cssnano:
|
||||
specifier: ^7.1.2
|
||||
version: 7.1.2(postcss@8.5.3)
|
||||
happy-dom:
|
||||
specifier: 'catalog:'
|
||||
version: 16.8.1
|
||||
@@ -1757,6 +1760,9 @@ importers:
|
||||
'@vben/styles':
|
||||
specifier: workspace:*
|
||||
version: link:../packages/styles
|
||||
'@vben/tailwind-config':
|
||||
specifier: workspace:*
|
||||
version: link:../internal/tailwind-config
|
||||
'@vben/types':
|
||||
specifier: workspace:*
|
||||
version: link:../packages/types
|
||||
@@ -1769,6 +1775,9 @@ importers:
|
||||
ant-design-vue:
|
||||
specifier: 'catalog:'
|
||||
version: 4.2.6(vue@3.5.13(typescript@5.8.3))
|
||||
cssnano:
|
||||
specifier: 'catalog:'
|
||||
version: 7.0.6(postcss@8.5.3)
|
||||
dayjs:
|
||||
specifier: 'catalog:'
|
||||
version: 1.11.13
|
||||
@@ -5120,6 +5129,10 @@ packages:
|
||||
base64-js@1.5.1:
|
||||
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
|
||||
|
||||
baseline-browser-mapping@2.9.11:
|
||||
resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
|
||||
hasBin: true
|
||||
|
||||
better-path-resolve@1.0.0:
|
||||
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -5159,6 +5172,11 @@ packages:
|
||||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
hasBin: true
|
||||
|
||||
browserslist@4.28.1:
|
||||
resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
|
||||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
hasBin: true
|
||||
|
||||
buffer-crc32@1.0.0:
|
||||
resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
@@ -5243,6 +5261,9 @@ packages:
|
||||
caniuse-lite@1.0.30001702:
|
||||
resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==}
|
||||
|
||||
caniuse-lite@1.0.30001761:
|
||||
resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==}
|
||||
|
||||
ccount@2.0.1:
|
||||
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
|
||||
|
||||
@@ -5400,6 +5421,10 @@ packages:
|
||||
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
|
||||
engines: {node: '>=14'}
|
||||
|
||||
commander@11.1.0:
|
||||
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
commander@12.1.0:
|
||||
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -5680,6 +5705,12 @@ packages:
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
|
||||
cssnano-preset-default@7.0.10:
|
||||
resolution: {integrity: sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
cssnano-preset-default@7.0.6:
|
||||
resolution: {integrity: sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
@@ -5692,12 +5723,24 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
cssnano-utils@5.0.1:
|
||||
resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
cssnano@7.0.6:
|
||||
resolution: {integrity: sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
cssnano@7.1.2:
|
||||
resolution: {integrity: sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
csso@5.0.5:
|
||||
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
|
||||
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
|
||||
@@ -6017,6 +6060,9 @@ packages:
|
||||
electron-to-chromium@1.5.113:
|
||||
resolution: {integrity: sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==}
|
||||
|
||||
electron-to-chromium@1.5.267:
|
||||
resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
|
||||
|
||||
emoji-regex-xs@1.0.0:
|
||||
resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
|
||||
|
||||
@@ -7952,6 +7998,9 @@ packages:
|
||||
node-releases@2.0.19:
|
||||
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
|
||||
|
||||
node-releases@2.0.27:
|
||||
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
|
||||
|
||||
nopt@7.2.1:
|
||||
resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
|
||||
@@ -8363,12 +8412,24 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-colormin@7.0.5:
|
||||
resolution: {integrity: sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-convert-values@7.0.4:
|
||||
resolution: {integrity: sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-convert-values@7.0.8:
|
||||
resolution: {integrity: sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-custom-media@11.0.5:
|
||||
resolution: {integrity: sha512-SQHhayVNgDvSAdX9NQ/ygcDQGEY+aSF4b/96z7QUX6mqL5yl/JgG/DywcF6fW9XbnCRE+aVYk+9/nqGuzOPWeQ==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -8399,24 +8460,48 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-discard-comments@7.0.5:
|
||||
resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-discard-duplicates@7.0.1:
|
||||
resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-discard-duplicates@7.0.2:
|
||||
resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-discard-empty@7.0.0:
|
||||
resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-discard-empty@7.0.1:
|
||||
resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-discard-overridden@7.0.0:
|
||||
resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-discard-overridden@7.0.1:
|
||||
resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-double-position-gradients@6.0.0:
|
||||
resolution: {integrity: sha512-JkIGah3RVbdSEIrcobqj4Gzq0h53GG4uqDPsho88SgY84WnpkTpI0k50MFK/sX7XqVisZ6OqUfFnoUO6m1WWdg==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -8507,36 +8592,72 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-merge-longhand@7.0.5:
|
||||
resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-merge-rules@7.0.4:
|
||||
resolution: {integrity: sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-merge-rules@7.0.7:
|
||||
resolution: {integrity: sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-minify-font-values@7.0.0:
|
||||
resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-minify-font-values@7.0.1:
|
||||
resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-minify-gradients@7.0.0:
|
||||
resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-minify-gradients@7.0.1:
|
||||
resolution: {integrity: sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-minify-params@7.0.2:
|
||||
resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-minify-params@7.0.5:
|
||||
resolution: {integrity: sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-minify-selectors@7.0.4:
|
||||
resolution: {integrity: sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-minify-selectors@7.0.5:
|
||||
resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-nested@5.0.6:
|
||||
resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==}
|
||||
engines: {node: '>=12.0'}
|
||||
@@ -8567,54 +8688,108 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-charset@7.0.1:
|
||||
resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-display-values@7.0.0:
|
||||
resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-display-values@7.0.1:
|
||||
resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-positions@7.0.0:
|
||||
resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-positions@7.0.1:
|
||||
resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-repeat-style@7.0.0:
|
||||
resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-repeat-style@7.0.1:
|
||||
resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-string@7.0.0:
|
||||
resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-string@7.0.1:
|
||||
resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-timing-functions@7.0.0:
|
||||
resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-timing-functions@7.0.1:
|
||||
resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-unicode@7.0.2:
|
||||
resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-unicode@7.0.5:
|
||||
resolution: {integrity: sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-url@7.0.0:
|
||||
resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-url@7.0.1:
|
||||
resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-normalize-whitespace@7.0.0:
|
||||
resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-normalize-whitespace@7.0.1:
|
||||
resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-opacity-percentage@3.0.0:
|
||||
resolution: {integrity: sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -8627,6 +8802,12 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-ordered-values@7.0.2:
|
||||
resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-overflow-shorthand@6.0.0:
|
||||
resolution: {integrity: sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -8662,12 +8843,24 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-reduce-initial@7.0.5:
|
||||
resolution: {integrity: sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-reduce-transforms@7.0.0:
|
||||
resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-reduce-transforms@7.0.1:
|
||||
resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-replace-overflow-wrap@4.0.0:
|
||||
resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
|
||||
peerDependencies:
|
||||
@@ -8723,12 +8916,24 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-svgo@7.1.0:
|
||||
resolution: {integrity: sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-unique-selectors@7.0.3:
|
||||
resolution: {integrity: sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
postcss-unique-selectors@7.0.4:
|
||||
resolution: {integrity: sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
postcss-value-parser@4.2.0:
|
||||
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
|
||||
|
||||
@@ -9553,6 +9758,12 @@ packages:
|
||||
peerDependencies:
|
||||
postcss: ^8.4.31
|
||||
|
||||
stylehacks@7.0.7:
|
||||
resolution: {integrity: sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==}
|
||||
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
|
||||
peerDependencies:
|
||||
postcss: ^8.4.32
|
||||
|
||||
stylelint-config-html@1.1.0:
|
||||
resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
|
||||
engines: {node: ^12 || >=14}
|
||||
@@ -9660,6 +9871,11 @@ packages:
|
||||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
|
||||
svgo@4.0.0:
|
||||
resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
|
||||
engines: {node: '>=16'}
|
||||
hasBin: true
|
||||
|
||||
synckit@0.11.3:
|
||||
resolution: {integrity: sha512-szhWDqNNI9etJUvbZ1/cx1StnZx8yMmFxme48SwR4dty4ioSY50KEZlpv0qAfgc1fpRzuh9hBXEzoCpJ779dLg==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
@@ -10116,6 +10332,12 @@ packages:
|
||||
peerDependencies:
|
||||
browserslist: '>= 4.21.0'
|
||||
|
||||
update-browserslist-db@1.2.3:
|
||||
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
browserslist: '>= 4.21.0'
|
||||
|
||||
update-notifier@7.3.1:
|
||||
resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -10925,7 +11147,7 @@ snapshots:
|
||||
'@babel/core': 7.26.9
|
||||
'@babel/helper-compilation-targets': 7.26.5
|
||||
'@babel/helper-plugin-utils': 7.26.5
|
||||
debug: 4.4.0
|
||||
debug: 4.4.3
|
||||
lodash.debounce: 4.0.8
|
||||
resolve: 1.22.10
|
||||
transitivePeerDependencies:
|
||||
@@ -14453,6 +14675,8 @@ snapshots:
|
||||
|
||||
base64-js@1.5.1: {}
|
||||
|
||||
baseline-browser-mapping@2.9.11: {}
|
||||
|
||||
better-path-resolve@1.0.0:
|
||||
dependencies:
|
||||
is-windows: 1.0.2
|
||||
@@ -14500,6 +14724,14 @@ snapshots:
|
||||
node-releases: 2.0.19
|
||||
update-browserslist-db: 1.1.3(browserslist@4.24.4)
|
||||
|
||||
browserslist@4.28.1:
|
||||
dependencies:
|
||||
baseline-browser-mapping: 2.9.11
|
||||
caniuse-lite: 1.0.30001761
|
||||
electron-to-chromium: 1.5.267
|
||||
node-releases: 2.0.27
|
||||
update-browserslist-db: 1.2.3(browserslist@4.28.1)
|
||||
|
||||
buffer-crc32@1.0.0: {}
|
||||
|
||||
buffer-equal-constant-time@1.0.1: {}
|
||||
@@ -14600,13 +14832,15 @@ snapshots:
|
||||
|
||||
caniuse-api@3.0.0:
|
||||
dependencies:
|
||||
browserslist: 4.24.4
|
||||
browserslist: 4.28.1
|
||||
caniuse-lite: 1.0.30001702
|
||||
lodash.memoize: 4.1.2
|
||||
lodash.uniq: 4.5.0
|
||||
|
||||
caniuse-lite@1.0.30001702: {}
|
||||
|
||||
caniuse-lite@1.0.30001761: {}
|
||||
|
||||
ccount@2.0.1: {}
|
||||
|
||||
chai@5.2.0:
|
||||
@@ -14788,6 +15022,8 @@ snapshots:
|
||||
|
||||
commander@10.0.1: {}
|
||||
|
||||
commander@11.1.0: {}
|
||||
|
||||
commander@12.1.0: {}
|
||||
|
||||
commander@13.1.0: {}
|
||||
@@ -15097,6 +15333,40 @@ snapshots:
|
||||
|
||||
cssesc@3.0.0: {}
|
||||
|
||||
cssnano-preset-default@7.0.10(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
css-declaration-sorter: 7.2.0(postcss@8.5.3)
|
||||
cssnano-utils: 5.0.1(postcss@8.5.3)
|
||||
postcss: 8.5.3
|
||||
postcss-calc: 10.1.1(postcss@8.5.3)
|
||||
postcss-colormin: 7.0.5(postcss@8.5.3)
|
||||
postcss-convert-values: 7.0.8(postcss@8.5.3)
|
||||
postcss-discard-comments: 7.0.5(postcss@8.5.3)
|
||||
postcss-discard-duplicates: 7.0.2(postcss@8.5.3)
|
||||
postcss-discard-empty: 7.0.1(postcss@8.5.3)
|
||||
postcss-discard-overridden: 7.0.1(postcss@8.5.3)
|
||||
postcss-merge-longhand: 7.0.5(postcss@8.5.3)
|
||||
postcss-merge-rules: 7.0.7(postcss@8.5.3)
|
||||
postcss-minify-font-values: 7.0.1(postcss@8.5.3)
|
||||
postcss-minify-gradients: 7.0.1(postcss@8.5.3)
|
||||
postcss-minify-params: 7.0.5(postcss@8.5.3)
|
||||
postcss-minify-selectors: 7.0.5(postcss@8.5.3)
|
||||
postcss-normalize-charset: 7.0.1(postcss@8.5.3)
|
||||
postcss-normalize-display-values: 7.0.1(postcss@8.5.3)
|
||||
postcss-normalize-positions: 7.0.1(postcss@8.5.3)
|
||||
postcss-normalize-repeat-style: 7.0.1(postcss@8.5.3)
|
||||
postcss-normalize-string: 7.0.1(postcss@8.5.3)
|
||||
postcss-normalize-timing-functions: 7.0.1(postcss@8.5.3)
|
||||
postcss-normalize-unicode: 7.0.5(postcss@8.5.3)
|
||||
postcss-normalize-url: 7.0.1(postcss@8.5.3)
|
||||
postcss-normalize-whitespace: 7.0.1(postcss@8.5.3)
|
||||
postcss-ordered-values: 7.0.2(postcss@8.5.3)
|
||||
postcss-reduce-initial: 7.0.5(postcss@8.5.3)
|
||||
postcss-reduce-transforms: 7.0.1(postcss@8.5.3)
|
||||
postcss-svgo: 7.1.0(postcss@8.5.3)
|
||||
postcss-unique-selectors: 7.0.4(postcss@8.5.3)
|
||||
|
||||
cssnano-preset-default@7.0.6(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.24.4
|
||||
@@ -15135,12 +15405,22 @@ snapshots:
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
cssnano-utils@5.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
cssnano@7.0.6(postcss@8.5.3):
|
||||
dependencies:
|
||||
cssnano-preset-default: 7.0.6(postcss@8.5.3)
|
||||
lilconfig: 3.1.3
|
||||
postcss: 8.5.3
|
||||
|
||||
cssnano@7.1.2(postcss@8.5.3):
|
||||
dependencies:
|
||||
cssnano-preset-default: 7.0.10(postcss@8.5.3)
|
||||
lilconfig: 3.1.3
|
||||
postcss: 8.5.3
|
||||
|
||||
csso@5.0.5:
|
||||
dependencies:
|
||||
css-tree: 2.2.1
|
||||
@@ -15408,6 +15688,8 @@ snapshots:
|
||||
|
||||
electron-to-chromium@1.5.113: {}
|
||||
|
||||
electron-to-chromium@1.5.267: {}
|
||||
|
||||
emoji-regex-xs@1.0.0: {}
|
||||
|
||||
emoji-regex@10.4.0: {}
|
||||
@@ -17396,7 +17678,7 @@ snapshots:
|
||||
dependencies:
|
||||
autoprefixer: 10.4.21(postcss@8.5.3)
|
||||
citty: 0.1.6
|
||||
cssnano: 7.0.6(postcss@8.5.3)
|
||||
cssnano: 7.1.2(postcss@8.5.3)
|
||||
defu: 6.1.4
|
||||
esbuild: 0.24.0
|
||||
jiti: 1.21.7
|
||||
@@ -17594,6 +17876,8 @@ snapshots:
|
||||
|
||||
node-releases@2.0.19: {}
|
||||
|
||||
node-releases@2.0.27: {}
|
||||
|
||||
nopt@7.2.1:
|
||||
dependencies:
|
||||
abbrev: 2.0.0
|
||||
@@ -18001,12 +18285,26 @@ snapshots:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-colormin@7.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
caniuse-api: 3.0.0
|
||||
colord: 2.9.3
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-convert-values@7.0.4(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.24.4
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-convert-values@7.0.8(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-custom-media@11.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
'@csstools/cascade-layer-name-parser': 2.0.4(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
|
||||
@@ -18042,18 +18340,35 @@ snapshots:
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
postcss-discard-comments@7.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 7.1.0
|
||||
|
||||
postcss-discard-duplicates@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-discard-duplicates@7.0.2(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-discard-empty@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-discard-empty@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-discard-overridden@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-discard-overridden@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-double-position-gradients@6.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
'@csstools/postcss-progressive-custom-properties': 4.0.0(postcss@8.5.3)
|
||||
@@ -18140,6 +18455,12 @@ snapshots:
|
||||
postcss-value-parser: 4.2.0
|
||||
stylehacks: 7.0.4(postcss@8.5.3)
|
||||
|
||||
postcss-merge-longhand@7.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
stylehacks: 7.0.7(postcss@8.5.3)
|
||||
|
||||
postcss-merge-rules@7.0.4(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.24.4
|
||||
@@ -18148,11 +18469,24 @@ snapshots:
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
postcss-merge-rules@7.0.7(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
caniuse-api: 3.0.0
|
||||
cssnano-utils: 5.0.1(postcss@8.5.3)
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 7.1.0
|
||||
|
||||
postcss-minify-font-values@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-minify-font-values@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-minify-gradients@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
colord: 2.9.3
|
||||
@@ -18160,6 +18494,13 @@ snapshots:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-minify-gradients@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
colord: 2.9.3
|
||||
cssnano-utils: 5.0.1(postcss@8.5.3)
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-minify-params@7.0.2(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.24.4
|
||||
@@ -18167,12 +18508,25 @@ snapshots:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-minify-params@7.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
cssnano-utils: 5.0.1(postcss@8.5.3)
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-minify-selectors@7.0.4(postcss@8.5.3):
|
||||
dependencies:
|
||||
cssesc: 3.0.0
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
postcss-minify-selectors@7.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
cssesc: 3.0.0
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 7.1.0
|
||||
|
||||
postcss-nested@5.0.6(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
@@ -18199,47 +18553,92 @@ snapshots:
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-normalize-charset@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-normalize-display-values@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-display-values@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-positions@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-positions@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-repeat-style@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-repeat-style@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-string@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-string@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-timing-functions@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-timing-functions@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-unicode@7.0.2(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.24.4
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-unicode@7.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-url@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-url@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-whitespace@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-normalize-whitespace@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-opacity-percentage@3.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
@@ -18250,6 +18649,12 @@ snapshots:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-ordered-values@7.0.2(postcss@8.5.3):
|
||||
dependencies:
|
||||
cssnano-utils: 5.0.1(postcss@8.5.3)
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-overflow-shorthand@6.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
@@ -18342,11 +18747,22 @@ snapshots:
|
||||
caniuse-api: 3.0.0
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-reduce-initial@7.0.5(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
caniuse-api: 3.0.0
|
||||
postcss: 8.5.3
|
||||
|
||||
postcss-reduce-transforms@7.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-reduce-transforms@7.0.1(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
|
||||
postcss-replace-overflow-wrap@4.0.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
@@ -18395,11 +18811,22 @@ snapshots:
|
||||
postcss-value-parser: 4.2.0
|
||||
svgo: 3.3.2
|
||||
|
||||
postcss-svgo@7.1.0(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-value-parser: 4.2.0
|
||||
svgo: 4.0.0
|
||||
|
||||
postcss-unique-selectors@7.0.3(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
postcss-unique-selectors@7.0.4(postcss@8.5.3):
|
||||
dependencies:
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 7.1.0
|
||||
|
||||
postcss-value-parser@4.2.0: {}
|
||||
|
||||
postcss@8.5.3:
|
||||
@@ -18838,8 +19265,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@parcel/watcher': 2.5.1
|
||||
|
||||
sax@1.4.1:
|
||||
optional: true
|
||||
sax@1.4.1: {}
|
||||
|
||||
scroll-into-view-if-needed@2.2.31:
|
||||
dependencies:
|
||||
@@ -19254,6 +19680,12 @@ snapshots:
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 6.1.2
|
||||
|
||||
stylehacks@7.0.7(postcss@8.5.3):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
postcss: 8.5.3
|
||||
postcss-selector-parser: 7.1.0
|
||||
|
||||
stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@16.18.0(typescript@5.8.3)):
|
||||
dependencies:
|
||||
postcss-html: 1.8.0
|
||||
@@ -19407,6 +19839,16 @@ snapshots:
|
||||
csso: 5.0.5
|
||||
picocolors: 1.1.1
|
||||
|
||||
svgo@4.0.0:
|
||||
dependencies:
|
||||
commander: 11.1.0
|
||||
css-select: 5.1.0
|
||||
css-tree: 3.1.0
|
||||
css-what: 6.1.0
|
||||
csso: 5.0.5
|
||||
picocolors: 1.1.1
|
||||
sax: 1.4.1
|
||||
|
||||
synckit@0.11.3:
|
||||
dependencies:
|
||||
'@pkgr/core': 0.2.1
|
||||
@@ -19888,6 +20330,12 @@ snapshots:
|
||||
escalade: 3.2.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
update-browserslist-db@1.2.3(browserslist@4.28.1):
|
||||
dependencies:
|
||||
browserslist: 4.28.1
|
||||
escalade: 3.2.0
|
||||
picocolors: 1.1.1
|
||||
|
||||
update-notifier@7.3.1:
|
||||
dependencies:
|
||||
boxen: 8.0.1
|
||||
|
||||
Reference in New Issue
Block a user