diff --git a/src/components/pages/AdminDashboard.tsx b/src/components/pages/AdminDashboard.tsx index de4f9c4..ab8a177 100644 --- a/src/components/pages/AdminDashboard.tsx +++ b/src/components/pages/AdminDashboard.tsx @@ -47,8 +47,8 @@ export default function AdminDashboard() {

管理后台首页

欢迎使用动态路由管理系统

- - - - - - - ))} - + {activeTab === "all" ? ( ) : ( @@ -569,8 +569,8 @@ export default function CompanyPermissionsPage() {
- {selectedUser.loginDate - ? new Date(selectedUser.loginDate).toLocaleString('zh-CN') + {selectedUser.loginDate + ? new Date(selectedUser.loginDate).toLocaleString('zh-CN') : '-'}
@@ -593,9 +593,9 @@ export default function CompanyPermissionsPage() { 修改用户信息 {selectedUser && ( - { setIsEditDialogOpen(false) setSelectedUser(null) @@ -626,8 +626,8 @@ export default function CompanyPermissionsPage() {
- - - - -
- -
- + {/* 详细信息 */}
{/* 商户信息 */} @@ -1321,7 +1321,7 @@ export default function EquipmentPage() {
)} - + {/* 检测信息 */}
检测信息
@@ -1340,11 +1340,11 @@ export default function EquipmentPage() {
)} - - {/* 负责经销商 */} + + {/* 负责区域负责人 */} {item.createdBy && (
-
负责经销商
+
负责区域负责人
{item.createdBy}
)} diff --git a/src/components/pages/InventoryPage.tsx b/src/components/pages/InventoryPage.tsx index 660664f..fd6b494 100644 --- a/src/components/pages/InventoryPage.tsx +++ b/src/components/pages/InventoryPage.tsx @@ -43,7 +43,7 @@ export default function InventoryPage() { try { const result = await apiGet('/back/category') console.log('分类数据:', result) - + if (result && result.code === 200 && result.data) { setCategories(result.data) } else { @@ -54,20 +54,20 @@ export default function InventoryPage() { } } - // 获取经销商数据 + // 获取区域负责人数据 const fetchDealers = async () => { try { const roleId = "2" const result = await apiGet(`/back/findNextInfo?roleId=${roleId}`) - console.log('经销商数据:', result) - + console.log('区域负责人数据:', result) + if (result && result.code === 200 && result.data && Array.isArray(result.data)) { setDealers(result.data) } else { - console.error('获取经销商失败:', result?.msg || '未知错误') + console.error('获取区域负责人失败:', result?.msg || '未知错误') } } catch (error) { - console.error('请求经销商失败:', error) + console.error('请求区域负责人失败:', error) } } @@ -76,9 +76,9 @@ export default function InventoryPage() { try { setIsLoading(true) const result = await apiGet(`/back/inventory/list?pageNum=${pageNum}&pageSize=${pageSizeParam}`) - + console.log('API 返回结果:', result) - + if (result && result.code === 200 && result.rows) { setInventory(result.rows) setTotal(result.total || 0) @@ -166,7 +166,7 @@ export default function InventoryPage() {

库存管理

-

管理设备配件和耗材库存,总公司发货给经销商

+

管理设备配件和耗材库存,总公司发货给区域负责人

@@ -181,7 +181,7 @@ export default function InventoryPage() { 添加库存物品 录入新的库存物品信息 - setIsAddDialogOpen(false)} onSuccess={() => { @@ -282,7 +282,7 @@ export default function InventoryPage() { 库存列表 - 查看和管理所有库存物品,支持向经销商发货 + 查看和管理所有库存物品,支持向区域负责人发货
@@ -441,7 +441,7 @@ export default function InventoryPage() { 出库操作 - 向经销商发货 + 向区域负责人发货 出库操作 - 向经销商发货 + 向区域负责人发货 { e.preventDefault() setIsSubmitting(true) - + try { const requestData = { itemName: formData.name, @@ -868,7 +868,7 @@ function InboundForm({ item, onClose, onSuccess }: { item: any; onClose: () => v const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsSubmitting(true) - + try { const inboundData = { id: item.id || "", @@ -977,7 +977,7 @@ function OutboundForm({ item, dealers, onRefreshDealers, onClose, onSuccess }: { const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsSubmitting(true) - + try { const outboundData = { inventoryId: item.inventoryId, @@ -1036,15 +1036,15 @@ function OutboundForm({ item, dealers, onRefreshDealers, onClose, onSuccess }: { />
- - { - const selectedDealer = dealers.find(dealer => + const selectedDealer = dealers.find(dealer => (dealer.userName || dealer.nickName) === value ) - setFormData({ - ...formData, + setFormData({ + ...formData, dealer: value, dealerId: selectedDealer?.userId || "" }) @@ -1056,7 +1056,7 @@ function OutboundForm({ item, dealers, onRefreshDealers, onClose, onSuccess }: { }} > - + {dealers.length === 0 ? ( @@ -1065,11 +1065,11 @@ function OutboundForm({ item, dealers, onRefreshDealers, onClose, onSuccess }: { ) : ( dealers.map((dealer, index) => ( - - {dealer.userName || dealer.nickName || '未知经销商'} + {dealer.userName || dealer.nickName || '未知区域负责人'} {dealer.nickName && dealer.userName !== dealer.nickName ? ` (${dealer.nickName})` : ''} )) @@ -1121,7 +1121,7 @@ function LogisticsTracking() { setIsLoading(true) const result = await apiGet(`/back/logistics/list?pageNum=${pageNum}&pageSize=${pageSizeParam}`) console.log('物流数据:', result) - + if (result && result.code === 200 && result.rows) { setLogisticsData(result.rows) setTotal(result.total || 0) @@ -1437,4 +1437,4 @@ function LogisticsTracking() {
) -} \ No newline at end of file +} diff --git a/src/components/pages/MallsPage.tsx b/src/components/pages/MallsPage.tsx index f838b5a..a30ef16 100644 --- a/src/components/pages/MallsPage.tsx +++ b/src/components/pages/MallsPage.tsx @@ -195,13 +195,13 @@ export default function MallsPage() { // 获取商场下的商户列表 const fetchMallMerchants = async (mallId: string) => { if (!mallId) return [] - + setLoadingMallMerchants(prev => ({ ...prev, [mallId]: true })) try { const response = await apiGet(`/back/merchants/list?mallId=${mallId}`) if (response.code === 200) { const merchantsData = response.rows || [] - + // 为每个商户获取设备数量 const merchantsWithCounts = await Promise.all( merchantsData.map(async (merchant: any) => { @@ -215,7 +215,7 @@ export default function MallsPage() { } }) ) - + setMallMerchants(prev => ({ ...prev, [mallId]: merchantsWithCounts })) return merchantsWithCounts } @@ -384,13 +384,13 @@ export default function MallsPage() { const toggleMallExpansion = (mall: Mall) => { const isExpanding = !expandedMalls.includes(mall.id) - - setExpandedMalls((prev) => - prev.includes(mall.id) - ? prev.filter((id) => id !== mall.id) + + setExpandedMalls((prev) => + prev.includes(mall.id) + ? prev.filter((id) => id !== mall.id) : [...prev, mall.id] ) - + // 如果是展开操作,获取该商场的商户列表 if (isExpanding && mall.mallId) { fetchMallMerchants(mall.mallId) @@ -416,7 +416,7 @@ export default function MallsPage() { const handleEditMall = (mall: Mall) => { // 解析 mallUser 字符串为数组(格式:userId1,userId2,) const mallUserIds = mall.mallUser ? mall.mallUser.split(',').filter(id => id.trim() !== '') : [] - + setEditMall({ id: mall.id, mallId: mall.mallId || "", @@ -427,12 +427,12 @@ export default function MallsPage() { description: mall.remark || "", status: mall.status, }) - + // 如果省份已存在,获取对应的商场用户 if (mall.province) { fetchMallUsersForEdit(mall.province) } - + setIsEditDialogOpen(true) } @@ -864,7 +864,7 @@ export default function MallsPage() {
setSearchTerm(e.target.value)} className="pl-8 w-full sm:w-80" @@ -1001,9 +1001,9 @@ export default function MallsPage() { -
编号: {merchant.id}
- - +
联系人
{merchant.contactPerson || '无'}
{merchant.contactPhone || '无'}
- +
地址
@@ -1060,7 +1060,7 @@ export default function MallsPage() {
- +
设备数量
@@ -1202,7 +1202,7 @@ export default function MallsPage() {
{getEquipmentStatusBadge(equipment.status)}
- + {/* 详细信息 - 竖着显示 */}
diff --git a/src/components/pages/MerchantsPage.tsx b/src/components/pages/MerchantsPage.tsx index 1c04aff..ef29c7a 100644 --- a/src/components/pages/MerchantsPage.tsx +++ b/src/components/pages/MerchantsPage.tsx @@ -57,7 +57,9 @@ interface TotalMerchant { } export default function MerchantsPage() { - const [searchTerm, setSearchTerm] = useState("") + const [merchantNameSearch, setMerchantNameSearch] = useState("") + const [contactPersonSearch, setContactPersonSearch] = useState("") + const [contactPhoneSearch, setContactPhoneSearch] = useState("") const [statusFilter, setStatusFilter] = useState("all") const [isAddMerchantOpen, setIsAddMerchantOpen] = useState(false) const [isEditMerchantOpen, setIsEditMerchantOpen] = useState(false) @@ -241,10 +243,38 @@ export default function MerchantsPage() { } // 获取商户列表 - const fetchMerchants = async (page = currentPage, size = pageSize) => { + const fetchMerchants = async ( + page = currentPage, + size = pageSize, + merchantName = merchantNameSearch, + contactPerson = contactPersonSearch, + contactPhone = contactPhoneSearch, + equipmentStatus = statusFilter + ) => { setLoadingMerchants(true) try { - const response = await apiGet(`/back/merchants/list?pageNum=${page}&pageSize=${size}`) + // 构建查询参数 + const params = new URLSearchParams({ + pageNum: page.toString(), + pageSize: size.toString(), + }) + + // 添加搜索参数(如果有值) + if (merchantName.trim()) { + params.append('merchantName', merchantName.trim()) + } + if (contactPerson.trim()) { + params.append('contactPerson', contactPerson.trim()) + } + if (contactPhone.trim()) { + params.append('contactPhone', contactPhone.trim()) + } + // 添加状态筛选参数(如果不是全部) + if (equipmentStatus && equipmentStatus !== "all") { + params.append('equipmentStatus', equipmentStatus) + } + + const response = await apiGet(`/back/merchants/list?${params.toString()}`) if (response.code === 200) { const merchantsData = response.rows || [] setTotal(parseInt(response.total) || 0) @@ -276,14 +306,14 @@ export default function MerchantsPage() { // 页码变化处理 const handlePageChange = (page: number) => { setCurrentPage(page) - fetchMerchants(page, pageSize) + fetchMerchants(page, pageSize, merchantNameSearch, contactPersonSearch, contactPhoneSearch, statusFilter) } // 每页大小变化处理 const handlePageSizeChange = (size: number) => { setPageSize(size) setCurrentPage(1) - fetchMerchants(1, size) + fetchMerchants(1, size, merchantNameSearch, contactPersonSearch, contactPhoneSearch, statusFilter) } // 组件加载时获取数据 @@ -293,6 +323,18 @@ export default function MerchantsPage() { fetchUserEquipmentCount() }, []) + // 搜索条件变化时调用API(使用防抖) + useEffect(() => { + const timer = setTimeout(() => { + // 重置到第一页 + setCurrentPage(1) + fetchMerchants(1, pageSize, merchantNameSearch, contactPersonSearch, contactPhoneSearch, statusFilter) + }, 500) // 500ms 防抖 + + return () => clearTimeout(timer) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [merchantNameSearch, contactPersonSearch, contactPhoneSearch, statusFilter]) + const [newEquipment, setNewEquipment] = useState({ name: "", type: "", @@ -365,7 +407,7 @@ export default function MerchantsPage() { setIsAddMerchantOpen(false) // 刷新商户列表 - fetchMerchants(currentPage, pageSize) + fetchMerchants(currentPage, pageSize, merchantNameSearch, contactPersonSearch, contactPhoneSearch, statusFilter) } else { console.error('添加商户失败:', result) alert('添加商户失败:' + (result.msg || '未知错误')) @@ -504,7 +546,7 @@ export default function MerchantsPage() { console.log('编辑商户成功:', result) alert('编辑商户成功!') setIsEditMerchantOpen(false) - fetchMerchants(currentPage, pageSize) + fetchMerchants(currentPage, pageSize, merchantNameSearch, contactPersonSearch, contactPhoneSearch) } else { console.error('编辑商户失败:', result) alert('编辑商户失败:' + (result.msg || '未知错误')) @@ -525,23 +567,8 @@ export default function MerchantsPage() { fetchMerchantEquipments(merchantId) } - const filteredMerchants = merchants.filter((merchant) => { - const matchesSearch = - merchant.merchantName?.toLowerCase().includes(searchTerm.toLowerCase()) || - merchant.contactPerson?.toLowerCase().includes(searchTerm.toLowerCase()) || - merchant.mallLocation?.toLowerCase().includes(searchTerm.toLowerCase()) - - let matchesStatus = true - if (statusFilter === "expired") { - matchesStatus = merchant.expiredCount > 0 - } else if (statusFilter === "expiring") { - matchesStatus = merchant.expiringCount > 0 - } else if (statusFilter === "normal") { - matchesStatus = merchant.expiredCount === 0 && merchant.expiringCount === 0 - } - - return matchesSearch && matchesStatus - }) + // 直接使用从后端返回的商户列表(搜索和状态筛选已由后端处理) + const filteredMerchants = merchants return (
@@ -565,44 +592,64 @@ export default function MerchantsPage() { 查看和管理所有商户信息及设备状态 - 共 {total} 条记录,当前第 {currentPage} 页 -
-
+
+
setSearchTerm(e.target.value)} + placeholder="搜索商户名称..." + value={merchantNameSearch} + onChange={(e) => setMerchantNameSearch(e.target.value)} + className="pl-10" + /> +
+
+ + setContactPersonSearch(e.target.value)} + className="pl-10" + /> +
+
+ + setContactPhoneSearch(e.target.value)} className="pl-10" />
+
- + - + +
{/* Desktop Table View */} @@ -614,7 +661,7 @@ export default function MerchantsPage() { 商户名称 联系人 所属商场 - 经销商 + 区域负责人 地址 设备数量 状态 @@ -730,14 +777,14 @@ export default function MerchantsPage() {
- +
联系人
{merchant.contactPerson}
{merchant.contactPhone}
- +
所属商场
@@ -745,12 +792,12 @@ export default function MerchantsPage() { {merchant.mallLocation || "无"}
- +
-
经销商
+
区域负责人
{merchant.dealerName || "无"}
- +
地址
@@ -761,7 +808,7 @@ export default function MerchantsPage() {
- +
设备数量
@@ -1357,7 +1404,7 @@ export default function MerchantsPage() {
{getStatusBadge(equipment.status)}
- + {/* 详细信息 - 竖着显示 */}
diff --git a/src/components/pages/StatisticsPage.tsx b/src/components/pages/StatisticsPage.tsx index 5e38621..83ae789 100644 --- a/src/components/pages/StatisticsPage.tsx +++ b/src/components/pages/StatisticsPage.tsx @@ -39,7 +39,7 @@ interface StatisticsData { totalMerchants: number } -// 定义经销商分布数据接口 +// 定义区域负责人分布数据接口 interface DealerDistribution { equipmentCount: number dealerName: string @@ -110,7 +110,7 @@ export default function StatisticsPage() { setDealerDistributionData(response.data.distributionList) } } catch (error) { - console.error('获取经销商分布数据失败:', error) + console.error('获取区域负责人分布数据失败:', error) } } @@ -379,9 +379,9 @@ export default function StatisticsPage() { - 全国经销商分布 + 全国区域负责人分布 - 各省份经销商及业务数据概览 + 各省份区域负责人及业务数据概览
diff --git a/src/components/pages/WorkOrdersPage.tsx b/src/components/pages/WorkOrdersPage.tsx index d4e51bb..c2a0d9c 100644 --- a/src/components/pages/WorkOrdersPage.tsx +++ b/src/components/pages/WorkOrdersPage.tsx @@ -313,14 +313,14 @@ export default function WorkOrdersPage() { 修改工单信息 {editingWorkOrder && ( - { setIsEditDialogOpen(false) setEditingWorkOrder(null) fetchWorkOrders(currentPage, pageSize) fetchStatusCounts() - }} + }} /> )} @@ -527,8 +527,8 @@ export default function WorkOrdersPage() {
-
-
- +
商户信息
@@ -587,18 +587,18 @@ export default function WorkOrdersPage() { {item.merchantAddress}
- +
负责人
{item.workerName}
{item.workerVirtualPhone}
- +
业务员
{item.saleName || "-"}
- +
创建时间
@@ -861,7 +861,7 @@ function CreateWorkOrderForm({ onClose }: { onClose: () => void }) { const workerNames = selectedWorkers.map(w => w.name).join(",") // 拼接工人电话(使用逗号分隔) const workerPhones = selectedWorkers.map(w => w.phone).join(",") - // 使用第一个工人的经销商ID + // 使用第一个工人的区域负责人ID const distributorUserId = selectedWorkers[0].distributorUserId || "" // 生成工单编号 @@ -1100,8 +1100,8 @@ function EditWorkOrderForm({ workOrder, onClose }: { workOrder: WorkOrder; onClo const merchantList = response.data || [] setMerchants(merchantList) // 根据商户名称或ID查找对应的商户 - const foundMerchant = merchantList.find((m: ProvinceMerchant) => - m.merchantName === workOrder.merchantName || + const foundMerchant = merchantList.find((m: ProvinceMerchant) => + m.merchantName === workOrder.merchantName || m.merchantsId === workOrder.merchantUserId || m.id === workOrder.merchantUserId ) @@ -1153,7 +1153,7 @@ function EditWorkOrderForm({ workOrder, onClose }: { workOrder: WorkOrder; onClo const equipmentList = response.rows || [] setAvailableEquipment(equipmentList) // 查找当前工单对应的设备 - const foundEquipment = equipmentList.find((e: Equipment) => + const foundEquipment = equipmentList.find((e: Equipment) => e.equipmentId === workOrder.equipmentId ) if (foundEquipment) { @@ -1259,7 +1259,7 @@ function EditWorkOrderForm({ workOrder, onClose }: { workOrder: WorkOrder; onClo const workerNames = selectedWorkers.map(w => w.name).join(",") // 拼接工人电话(使用逗号分隔) const workerPhones = selectedWorkers.map(w => w.phone).join(",") - // 使用第一个工人的经销商ID + // 使用第一个工人的区域负责人ID const distributorUserId = selectedWorkers[0].distributorUserId || "" // 构建API请求数据 diff --git a/src/components/pages/WorkersPage.tsx b/src/components/pages/WorkersPage.tsx index dfbdd32..d4244b3 100644 --- a/src/components/pages/WorkersPage.tsx +++ b/src/components/pages/WorkersPage.tsx @@ -115,7 +115,7 @@ export default function WorkersPage() { const fetchCompletedOrdersCount = async (workersId: string) => { try { const result = await apiGet(`/back/orders/list?pageNum=1&pageSize=999&workersId=${workersId}&status=7`) - + if (result && result.code === 200) { const count = parseInt(result.total) || 0 console.log(`工人 ${workersId} 完成工单数量:`, count) @@ -143,14 +143,14 @@ export default function WorkersPage() { const workersIdForQuery = worker.workersId || worker.jobNum || worker.id console.log(`正在获取工人 ${worker.name}(${workersIdForQuery}) 的完成工单数量`) const completedCount = await fetchCompletedOrdersCount(workersIdForQuery) - + return { id: worker.id, name: worker.name, workerId: worker.jobNum || worker.workersId || `W${worker.id}`, phone: worker.phone, dealerId: worker.distributorUserId, - dealerName: worker.distributorUser || '未知经销商', + dealerName: worker.distributorUser || '未知区域负责人', province: worker.province, skillLevel: mapAPISkillLevelToDisplay(worker.skillLevel), joinDate: worker.createdAt, @@ -217,7 +217,7 @@ export default function WorkersPage() { loadProvinces() }, []) - // 加载经销商数据 + // 加载区域负责人数据 useEffect(() => { const loadDealers = async () => { try { @@ -225,7 +225,7 @@ export default function WorkersPage() { if (response.code === 200) { setDealers(response.data) } else { - console.error('获取经销商数据失败:', response.msg) + console.error('获取区域负责人数据失败:', response.msg) } } catch (err) { console.error('Error loading dealers:', err) @@ -614,13 +614,13 @@ export default function WorkersPage() {
- +
- + setSearchTerm(e.target.value)} className="pl-8 w-full sm:w-80"