-
+
-
+
= 0; i--) {
const date = new Date();
date.setDate(date.getDate() - i);
@@ -874,7 +877,7 @@ export default {
applicationData.push(Math.floor(Math.random() * 20) + 10);
approvalData.push(Math.floor(Math.random() * 15) + 5);
}
-
+
const option = {
tooltip: {
trigger: 'axis',
@@ -953,14 +956,14 @@ export default {
}
]
};
-
+
this.trendChart.setOption(option);
},
-
+
/** 更新资质类型分布图 */
updateQualificationChart() {
if (!this.qualificationChart) return;
-
+
const option = {
tooltip: {
trigger: 'axis',
@@ -1023,10 +1026,10 @@ export default {
}
]
};
-
+
this.qualificationChart.setOption(option);
},
-
+
/** 刷新图表数据 */
refreshCharts() {
this.$message({
@@ -1034,19 +1037,19 @@ export default {
type: 'info',
duration: 1000
});
-
+
// 重新获取统计数据
this.getcountSummary();
-
+
// 更新趋势图
this.updateTrendChart();
-
+
// 模拟数据更新
setTimeout(() => {
this.platformUserValue += Math.floor(Math.random() * 100);
this.vetCount += Math.floor(Math.random() * 10);
this.shopCount += Math.floor(Math.random() * 5);
-
+
this.$message({
message: '数据刷新完成',
type: 'success',
@@ -1134,26 +1137,26 @@ export default {
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.04);
-
+
&.has-unread {
background: linear-gradient(145deg, #fff2f0, #ffe7e7);
border-left: 6px solid #ff6b6b;
animation: softPulse 2s infinite;
-
+
.notification-title {
color: #c92a2a;
}
}
-
+
&.no-unread {
background: linear-gradient(145deg, #f0f9ff, #e6f4ff);
border-left: 6px solid #339af0;
-
+
.notification-title {
color: #1971c2;
}
}
-
+
&:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.12);
@@ -1174,14 +1177,14 @@ export default {
justify-content: center;
background: rgba(255, 255, 255, 0.8);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05);
-
+
i {
font-size: 28px;
-
+
.has-unread & {
color: #ff6b6b;
}
-
+
.no-unread & {
color: #339af0;
}
@@ -1225,11 +1228,11 @@ export default {
padding: 2px 8px;
border-radius: 20px;
background: rgba(0, 0, 0, 0.04);
-
+
.has-unread & {
background: rgba(255, 107, 107, 0.1);
}
-
+
.no-unread & {
background: rgba(51, 154, 240, 0.1);
}
@@ -1240,24 +1243,24 @@ export default {
align-items: center;
font-size: 14px;
color: #5a6a7e;
-
+
.stat-dot {
width: 8px;
height: 8px;
border-radius: 50%;
margin-right: 8px;
-
+
&.unread {
background: #ff6b6b;
box-shadow: 0 0 0 2px rgba(255, 107, 107, 0.2);
}
-
+
&.read {
background: #51cf66;
box-shadow: 0 0 0 2px rgba(81, 207, 102, 0.2);
}
}
-
+
.stat-divider {
margin: 0 10px;
color: #d0d7dd;
@@ -1270,20 +1273,20 @@ export default {
border-radius: 16px;
transition: all 0.3s ease;
border: 1px solid #f0f0f0;
-
+
&:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.08);
}
-
+
&-total {
background: linear-gradient(145deg, #fff7e6, #fff2db);
}
-
+
&-read {
background: linear-gradient(145deg, #e8f5e9, #dff0df);
}
-
+
&-unread {
background: linear-gradient(145deg, #ffebee, #ffe4e4);
}
@@ -1306,22 +1309,22 @@ export default {
display: flex;
align-items: center;
justify-content: center;
-
+
i {
font-size: 26px;
color: white;
}
-
+
&.icon-total {
background: linear-gradient(145deg, #ff9a44, #ff6b08);
box-shadow: 0 6px 12px rgba(255, 107, 8, 0.2);
}
-
+
&.icon-read {
background: linear-gradient(145deg, #51cf66, #37b24d);
box-shadow: 0 6px 12px rgba(81, 207, 102, 0.2);
}
-
+
&.icon-unread {
background: linear-gradient(145deg, #ff6b6b, #fa5252);
box-shadow: 0 6px 12px rgba(255, 107, 107, 0.2);
@@ -1351,15 +1354,15 @@ export default {
color: #7c8b9c;
display: flex;
align-items: center;
-
+
i {
margin-right: 4px;
}
-
+
&.positive {
color: #51cf66;
}
-
+
&.warning {
color: #ff922b;
}
@@ -1396,7 +1399,7 @@ export default {
.refresh-btn {
background: #f0f2f5;
border: none;
-
+
&:hover {
background: #e4e7ed;
transform: rotate(180deg);
@@ -1409,11 +1412,11 @@ export default {
display: grid;
gap: 24px;
margin-bottom: 24px;
-
+
&.two-cols {
grid-template-columns: 1fr 1fr;
}
-
+
&:last-child {
margin-bottom: 0;
}
@@ -1427,21 +1430,21 @@ export default {
transition: all 0.3s ease;
border: 1px solid #f0f4f8;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03);
-
+
&:hover {
transform: translateY(-4px);
box-shadow: 0 16px 32px rgba(0, 0, 0, 0.08);
border-color: transparent;
}
-
+
&.gradient-blue {
background: linear-gradient(145deg, #fff, #f9fcff);
}
-
+
&.gradient-purple {
background: linear-gradient(145deg, #fff, #faf9ff);
}
-
+
&.gradient-green {
background: linear-gradient(145deg, #fff, #f9fffb);
}
@@ -1462,7 +1465,7 @@ export default {
font-weight: 600;
font-size: 16px;
color: #2c3e50;
-
+
i {
margin-right: 10px;
color: #409EFF;
@@ -1474,7 +1477,7 @@ export default {
color: #a0b3c2;
font-size: 16px;
cursor: pointer;
-
+
&:hover {
color: #409EFF;
}
@@ -1501,13 +1504,13 @@ export default {
align-items: center;
gap: 8px;
font-size: 14px;
-
+
.dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
-
+
strong {
font-size: 16px;
color: #1e293b;
@@ -1534,7 +1537,7 @@ export default {
border-radius: 16px;
transition: all 0.2s ease;
border: 1px solid #f0f4f8;
-
+
&:hover {
background: #f9fcff;
border-color: #409EFF;
@@ -1550,7 +1553,7 @@ export default {
align-items: center;
justify-content: center;
margin-right: 14px;
-
+
i {
font-size: 22px;
color: white;
@@ -1578,15 +1581,15 @@ export default {
font-size: 11px;
display: flex;
align-items: center;
-
+
&.positive {
color: #51cf66;
}
-
+
&.negative {
color: #ff6b6b;
}
-
+
i {
margin-right: 2px;
}
@@ -1735,11 +1738,11 @@ export default {
.notification-grid {
grid-template-columns: repeat(2, 1fr);
}
-
+
.chart-grid.two-cols {
grid-template-columns: 1fr;
}
-
+
.kpi-grid {
grid-template-columns: repeat(2, 1fr);
}
@@ -1749,35 +1752,35 @@ export default {
.box {
padding: 12px;
}
-
+
.notification-section,
.dashboard-section {
padding: 18px;
}
-
+
.notification-grid {
grid-template-columns: 1fr;
}
-
+
.notification-card-main {
grid-column: span 1;
}
-
+
.dashboard-header {
flex-direction: column;
align-items: flex-start;
gap: 12px;
}
-
+
.header-right {
width: 100%;
justify-content: space-between;
}
-
+
.kpi-grid {
grid-template-columns: 1fr;
}
-
+
.chart-card-footer {
flex-wrap: wrap;
gap: 12px;
@@ -1802,4 +1805,4 @@ export default {
.certificate-upload-container::-webkit-scrollbar-thumb:hover {
background: #a8a8a8;
}
-
\ No newline at end of file
+
diff --git a/chenhai-ui/src/views/system/recommendation/index.vue b/chenhai-ui/src/views/system/recommendation/index.vue
index 1f0cab6..05a5d25 100644
--- a/chenhai-ui/src/views/system/recommendation/index.vue
+++ b/chenhai-ui/src/views/system/recommendation/index.vue
@@ -524,10 +524,10 @@
-
提示:经纬度用于地图定位,如不清楚可留空
+
@@ -658,6 +658,9 @@ export default {
],
specification: [
{ required: true, message: "规格不能为空", trigger: "blur" }
+ ],
+ expertId:[
+ { required: true, message: "推荐专家不能为空", trigger: "blur" }
]
}
};
diff --git a/chenhai-ui/src/views/vet/product/index.vue b/chenhai-ui/src/views/vet/product/index.vue
index d3ae0ab..5080e74 100644
--- a/chenhai-ui/src/views/vet/product/index.vue
+++ b/chenhai-ui/src/views/vet/product/index.vue
@@ -453,241 +453,115 @@
/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -738,9 +612,9 @@
-
-
-
+
+
+
@@ -756,37 +630,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+