feat: 实现卡片可见性管理并优化多个组件功能

- 在UserDropdown组件中添加卡片名称映射
- 为sale.vue、seniorManager.vue、topone.vue和secondTop.vue添加卡片可见性控制
- 在CustomerDetail.vue中添加通话数据检查逻辑
- 将https.js中的API基础路径切换为生产环境
This commit is contained in:
2025-09-03 11:41:09 +08:00
parent e94ea6b592
commit f47211b0b0
7 changed files with 148 additions and 40 deletions

View File

@@ -4,28 +4,33 @@
<div class="dashboard-header">
<h1>管理者数据看板</h1>
<!-- 头像 -->
<UserDropdown />
<UserDropdown
:card-visibility="cardVisibility"
@update-card-visibility="updateCardVisibility"
/>
</div>
<!-- 第一行核心业绩指标销售实时进度 -->
<div class="dashboard-row row-1">
<!-- 核心业绩指标 -->
<kpi-metrics :kpi-data="totalDeals" :format-number="formatNumber" />
<kpi-metrics v-if="cardVisibility.kpiMetrics" :kpi-data="totalDeals" :format-number="formatNumber" />
<!-- 销售实时进度 -->
<sales-progress :sales-data="realTimeProgress" />
<sales-progress v-if="cardVisibility.salesProgress" :sales-data="realTimeProgress" />
<!-- 各中心营期阶段 -->
<period-stage />
<period-stage v-if="cardVisibility.periodStage" />
</div>
<!-- 第二行 -->
<div class="dashboard-row row-3">
<!-- 转化漏斗 -->
<funnel-chart
v-if="cardVisibility.funnelChart"
:funnel-data="formattedFunnelData"
:comparison-data="formattedComparisonData"
@time-range-change="handleTimeRangeChange"
/>
<!-- 销售个人业绩排行榜 -->
<personal-sales-ranking
v-if="cardVisibility.personalSalesRanking"
:ranking-data="formattedSalesRankingData"
:format-number="formatNumber"
:get-rank-class="getRankClass"
@@ -34,6 +39,7 @@
/>
<!-- 优质通话 -->
<quality-calls
v-if="cardVisibility.qualityCalls"
:quality-calls="excellentRecord"
@play-call="playCall"
@download-call="downloadCall"
@@ -43,21 +49,23 @@
<div class="dashboard-row row-3">
<!-- 业绩排行榜 -->
<ranking-list
v-if="cardVisibility.rankingList"
:format-number="formatNumber"
:get-rank-class="getRankClass"
/>
<!-- 客户类型占比 -->
<customer-type :customer-data="customerTypeRatio" @category-change="getCustomerTypeRatio" />
<customer-type v-if="cardVisibility.customerType" :customer-data="customerTypeRatio" @category-change="getCustomerTypeRatio" />
<!-- 客户迫切解决的问题排行榜 -->
<problem-ranking :ranking-data="problemRankingData" />
<problem-ranking v-if="cardVisibility.problemRanking" :ranking-data="problemRankingData" />
</div>
<!-- 第四行详细数据表格和数据详情 -->
<div class="dashboard-row" v-show="false">
<CampManagement />
<CampManagement v-if="cardVisibility.campManagement" />
</div>
<!-- 第五行 -->
<div class="dashboard-row" >
<DetailedDataTable
v-if="cardVisibility.detailedDataTable"
:table-data="detailData"
:level-tree="levelTree"
v-model:selected-person="selectedPerson"
@@ -213,6 +221,26 @@ const selectedPerson = ref(null);
const userStore = useUserStore();
// 卡片显示状态管理
const cardVisibility = ref({
kpiMetrics: true,
salesProgress: true,
periodStage: true,
funnelChart: true,
personalSalesRanking: true,
qualityCalls: true,
rankingList: true,
customerType: true,
problemRanking: true,
campManagement: true,
detailedDataTable: true
});
// 更新卡片显示状态
const updateCardVisibility = (newVisibility) => {
Object.assign(cardVisibility.value, newVisibility);
};
// 计算属性
const filteredTableData = computed(() => {
let filtered = tableData.value;