import React, { useState, useEffect, useCallback } from 'react';
import { Table, Button, Modal, Form, Input, Select, InputNumber, Space, Card, message, Popconfirm, Tag } from 'antd';
import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons';
import { declarationConfigAPI } from '../../services/api';
const { Option } = Select;
const PointProjectManagement = () => {
const [form] = Form.useForm();
const [modalVisible, setModalVisible] = useState(false);
const [editingRecord, setEditingRecord] = useState(null);
const [loading, setLoading] = useState(false);
const [projectData, setProjectData] = useState([]);
const [pagination, setPagination] = useState({
current: 1,
pageSize: 10,
total: 0,
});
const [filters, setFilters] = useState({});
const [categories, setCategories] = useState([]);
// 获取申报项目配置列表
const fetchProjectData = useCallback(async (page = pagination.current, size = pagination.pageSize, filterParams = {}) => {
try {
setLoading(true);
const queryParams = {
page,
size,
...filters,
...filterParams,
};
console.log('调用接口获取申报项目配置列表:', queryParams); // 添加调试日志
const response = await declarationConfigAPI.getDeclarationConfigList(queryParams);
console.log('接口响应:', response); // 添加调试日志
if (response.code === 0) {
// 转换数据格式以适配前端显示
const transformedData = response.data.content?.map(item => ({
id: item.id,
projectName: item.category_desc,
projectType: item.category_desc,
pointType: item.is_positive === 1 ? '正向积分' : '负向积分',
basePoints: item.points,
maxPoints: item.points, // 使用相同分值作为最高分值
conditions: Array.isArray(JSON.parse(item.secondary || '[]'))
? JSON.parse(item.secondary || '[]').join('、')
: item.secondary || '无',
status: item.is_active === '1' ? '启用' : '禁用',
createTime: item.create_time,
// 保存原始数据用于编辑
originalData: item,
})) || [];
setProjectData(transformedData);
setPagination(prev => ({
...prev,
total: response.data.totalElements || 0,
}));
}
} catch (error) {
console.error('获取申报项目配置列表失败:', error);
message.error('获取申报项目配置列表失败');
} finally {
setLoading(false);
}
}, [filters]);
// 获取分类列表
const fetchCategories = useCallback(async () => {
try {
console.log('调用接口获取分类列表'); // 添加调试日志
const response = await declarationConfigAPI.getDeclarationConfigCategories();
console.log('分类接口响应:', response); // 添加调试日志
if (response.code === 0) {
setCategories(response.data || []);
}
} catch (error) {
console.error('获取分类列表失败:', error);
}
}, []);
// 页面初始化加载数据
useEffect(() => {
console.log('页面初始化,开始加载数据'); // 添加调试日志
fetchProjectData();
fetchCategories();
}, []); // 只在组件挂载时执行一次
// 处理分页变化
const handleTableChange = (paginationInfo) => {
setPagination(prev => ({
...prev,
current: paginationInfo.current,
pageSize: paginationInfo.pageSize,
}));
// 分页变化时重新获取数据
fetchProjectData(paginationInfo.current, paginationInfo.pageSize);
};
const columns = [
{
title: '项目名称',
dataIndex: 'projectName',
key: 'projectName',
},
{
title: '项目类型',
dataIndex: 'projectType',
key: 'projectType',
render: (type) => {
const colorMap = {
'社区服务': 'blue',
'敬老助残': 'green',
'环保活动': 'orange',
'特殊贡献': 'purple',
};
return
配置不同项目的积分分值,设置积分获得条件和上限