|
|
@@ -11,8 +11,7 @@ import { enterpriseStatisticsClient } from '../../api/enterpriseStatisticsClient
|
|
|
import type {
|
|
|
EmploymentCountResponse,
|
|
|
AverageSalaryResponse,
|
|
|
- EmploymentRateResponse,
|
|
|
- NewCountResponse
|
|
|
+ EmploymentRateResponse
|
|
|
} from '../../api/types'
|
|
|
|
|
|
/**
|
|
|
@@ -29,20 +28,46 @@ const isAverageSalarySuccess = (data: any): data is AverageSalaryResponse => {
|
|
|
const isEmploymentRateSuccess = (data: any): data is EmploymentRateResponse => {
|
|
|
return data && !('code' in data && 'message' in data)
|
|
|
}
|
|
|
-const isNewCountSuccess = (data: any): data is NewCountResponse => {
|
|
|
- return data && !('code' in data && 'message' in data)
|
|
|
+
|
|
|
+/**
|
|
|
+ * 检查字符串是否为纯数字(用于识别需要转换的省份ID)
|
|
|
+ */
|
|
|
+const isNumericString = (str: string): boolean => {
|
|
|
+ return /^\d+$/.test(str)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 从 key 中提取省份名称(格式:省份-城市)
|
|
|
+ */
|
|
|
+const extractProvinceFromKey = (key: string): string => {
|
|
|
+ const parts = key.split('-')
|
|
|
+ return parts[0] || key
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 数据转换工具:将API统计数据转换为柱状图格式
|
|
|
+ * 优先使用中文名称的 province,如果是数字ID则从 key 提取
|
|
|
*/
|
|
|
-const convertToColumnData = (stats: any[]) => ({
|
|
|
- categories: stats.map(item => item.key),
|
|
|
+const convertToColumnData = (stats: any[]) => {
|
|
|
+ console.debug('[convertToColumnData] Input stats:', JSON.stringify(stats))
|
|
|
+ const result = {
|
|
|
+ categories: stats.map(item => {
|
|
|
+ // 优先使用 province,但如果 province 是纯数字,则从 key 提取省份名称
|
|
|
+ if (item.province && !isNumericString(item.province)) {
|
|
|
+ return item.province
|
|
|
+ }
|
|
|
+ // 如果 province 是数字或不存在,从 key 提取
|
|
|
+ return item.key ? extractProvinceFromKey(item.key) : item.province || item.key
|
|
|
+ }),
|
|
|
series: [{
|
|
|
name: '人数',
|
|
|
data: stats.map(item => item.value || 0)
|
|
|
}]
|
|
|
-})
|
|
|
+ }
|
|
|
+ console.debug('[convertToColumnData] Output categories:', result.categories)
|
|
|
+ console.debug('[convertToColumnData] Output series:', result.series)
|
|
|
+ return result
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
* 数据转换工具:将API统计数据转换为饼图格式
|
|
|
@@ -120,17 +145,6 @@ const Statistics: React.FC<StatisticsProps> = () => {
|
|
|
gcTime: 10 * 60 * 1000
|
|
|
})
|
|
|
|
|
|
- // 获取新增人数统计(简化版:无查询参数)
|
|
|
- const { data: newCountData, isLoading: isLoadingNewCount } = useQuery({
|
|
|
- queryKey: ['statistics', 'new-count'],
|
|
|
- queryFn: async () => {
|
|
|
- const response = await enterpriseStatisticsClient['new-count'].$get()
|
|
|
- return await response.json()
|
|
|
- },
|
|
|
- staleTime: 5 * 60 * 1000,
|
|
|
- gcTime: 10 * 60 * 1000
|
|
|
- })
|
|
|
-
|
|
|
// 获取残疾类型分布数据(无查询参数)
|
|
|
const { data: disabilityData, isLoading: isLoadingDisability } = useQuery({
|
|
|
queryKey: ['statistics', 'disability-type-distribution'],
|
|
|
@@ -266,18 +280,6 @@ const Statistics: React.FC<StatisticsProps> = () => {
|
|
|
<Text className="text-2xl font-bold text-gray-800">{employmentRateData.rate ?? 0}%</Text>
|
|
|
)}
|
|
|
</View>
|
|
|
-
|
|
|
- {/* 新增人数卡片 */}
|
|
|
- <View className="stat-card bg-white rounded-lg p-3 shadow-sm flex flex-col">
|
|
|
- <Text className="text-sm text-gray-600 mb-2">新增人数</Text>
|
|
|
- {isLoadingNewCount ? (
|
|
|
- <Text className="text-2xl font-bold text-gray-400">加载中...</Text>
|
|
|
- ) : !isNewCountSuccess(newCountData) ? (
|
|
|
- <Text className="text-2xl font-bold text-gray-400">--</Text>
|
|
|
- ) : (
|
|
|
- <Text className="text-2xl font-bold text-gray-800">{newCountData.count ?? 0}</Text>
|
|
|
- )}
|
|
|
- </View>
|
|
|
</View>
|
|
|
|
|
|
{/* 残疾类型分布 */}
|
|
|
@@ -368,8 +370,21 @@ const Statistics: React.FC<StatisticsProps> = () => {
|
|
|
<Text className="text-gray-500 text-center py-4">加载中...</Text>
|
|
|
) : (() => {
|
|
|
const stats = getStats(householdData)
|
|
|
+ // 详细调试信息
|
|
|
+ console.log('📊 [户籍省份分布] 原始 API 数据:', JSON.stringify(householdData, null, 2))
|
|
|
+ console.log('📊 [户籍省份分布] stats 数组:', JSON.stringify(stats, null, 2))
|
|
|
if (stats.length > 0) {
|
|
|
const chartData = convertToColumnData(stats.slice(0, 6))
|
|
|
+ console.log('📊 [户籍省份分布] 转换后的 categories:', chartData.categories)
|
|
|
+ console.log('📊 [户籍省份分布] 转换后的 series:', JSON.stringify(chartData.series, null, 2))
|
|
|
+ // 检查每个 stat 项的 province 值
|
|
|
+ stats.forEach((item, index) => {
|
|
|
+ console.log(`📊 [户籍省份分布] stat[${index}]:`, {
|
|
|
+ key: item.key,
|
|
|
+ province: item.province,
|
|
|
+ isNumericProvince: item.province ? /^\d+$/.test(item.province) : 'N/A'
|
|
|
+ })
|
|
|
+ })
|
|
|
return (
|
|
|
<View className="mt-3">
|
|
|
<BarChart
|