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} 页
-
-
+
+
+
-
+
-
+
+
{/* 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() {
-
+
-
+
- 经销商:
+ 区域负责人:
{deletingWorker.dealerName}
@@ -811,7 +811,7 @@ export default function WorkersPage() {
setSearchTerm(e.target.value)}
className="pl-8 w-full sm:w-80"