This commit is contained in:
menxipeng
2025-10-25 15:08:45 +08:00
parent 6432ce7b04
commit b7fd1eadbb

View File

@@ -1,4 +1,4 @@
import React, { useState, useEffect } from "react" import { useState, useEffect } from "react"
import { Button } from "../ui/button" import { Button } from "../ui/button"
import { Input } from "../ui/input" import { Input } from "../ui/input"
import { Card, CardContent, CardHeader, CardTitle } from "../ui/card" import { Card, CardContent, CardHeader, CardTitle } from "../ui/card"
@@ -14,7 +14,6 @@ import {
} from "../ui/dialog" } from "../ui/dialog"
import { Label } from "../ui/label" import { Label } from "../ui/label"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../ui/select"
import { Textarea } from "../ui/textarea"
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../ui/table" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "../ui/table"
import { import {
Users, Users,
@@ -28,7 +27,6 @@ import {
Edit, Edit,
Trash2, Trash2,
Phone, Phone,
Calendar,
Award, Award,
Wrench, Wrench,
CheckCircle, CheckCircle,
@@ -36,7 +34,6 @@ import {
import { apiPost, apiGet, apiPut, apiDelete } from "../../lib/services/api" import { apiPost, apiGet, apiPut, apiDelete } from "../../lib/services/api"
import { getProvinces } from '../../lib/services/region' import { getProvinces } from '../../lib/services/region'
import { getDealers } from '../../lib/services/dealer' import { getDealers } from '../../lib/services/dealer'
import { getSkillLevels } from '../../lib/services/skill'
import { Province } from '../../lib/types/region' import { Province } from '../../lib/types/region'
import { Dealer } from '../../lib/types/dealer' import { Dealer } from '../../lib/types/dealer'
import { SkillLevel, SKILL_LEVEL_MAP } from '../../lib/types/skill' import { SkillLevel, SKILL_LEVEL_MAP } from '../../lib/types/skill'
@@ -45,10 +42,8 @@ export default function WorkersPage() {
const [workers, setWorkers] = useState<any[]>([]) const [workers, setWorkers] = useState<any[]>([])
const [provinces, setProvinces] = useState<Province[]>([]) const [provinces, setProvinces] = useState<Province[]>([])
const [dealers, setDealers] = useState<Dealer[]>([]) const [dealers, setDealers] = useState<Dealer[]>([])
const [skillLevels, setSkillLevels] = useState<SkillLevel[]>([])
const [searchTerm, setSearchTerm] = useState("") const [searchTerm, setSearchTerm] = useState("")
const [provinceFilter, setProvinceFilter] = useState("all") const [provinceFilter, setProvinceFilter] = useState("all")
const [skillFilter, setSkillFilter] = useState("all")
const [isAddDialogOpen, setIsAddDialogOpen] = useState(false) const [isAddDialogOpen, setIsAddDialogOpen] = useState(false)
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false) const [isEditDialogOpen, setIsEditDialogOpen] = useState(false)
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false) const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false)
@@ -62,7 +57,6 @@ export default function WorkersPage() {
specialties: "", specialties: "",
jobNum: "", jobNum: "",
}) })
const [editingWorker, setEditingWorker] = useState<any>(null)
const [editWorker, setEditWorker] = useState({ const [editWorker, setEditWorker] = useState({
id: "", id: "",
name: "", name: "",
@@ -129,7 +123,7 @@ export default function WorkersPage() {
workerId: worker.jobNum || worker.workersId || `W${worker.id}`, workerId: worker.jobNum || worker.workersId || `W${worker.id}`,
phone: worker.phone, phone: worker.phone,
dealerId: worker.distributorUserId, dealerId: worker.distributorUserId,
dealerName: getDealerName(worker.distributorUserId), dealerName: worker.distributorUser || '未知经销商',
province: worker.province, province: worker.province,
skillLevel: mapAPISkillLevelToDisplay(worker.skillLevel), skillLevel: mapAPISkillLevelToDisplay(worker.skillLevel),
joinDate: worker.createdAt, joinDate: worker.createdAt,
@@ -157,12 +151,6 @@ export default function WorkersPage() {
} }
} }
// 根据经销商ID获取经销商名称
const getDealerName = (dealerId: string) => {
const dealer = dealers.find(d => d.userId === dealerId)
return dealer ? dealer.userName : '未知经销商'
}
// 将API技能等级映射到显示格式 // 将API技能等级映射到显示格式
const mapAPISkillLevelToDisplay = (apiSkillLevel: string) => { const mapAPISkillLevelToDisplay = (apiSkillLevel: string) => {
return SKILL_LEVEL_MAP[apiSkillLevel as SkillLevel] || apiSkillLevel return SKILL_LEVEL_MAP[apiSkillLevel as SkillLevel] || apiSkillLevel
@@ -218,24 +206,6 @@ export default function WorkersPage() {
loadDealers() loadDealers()
}, []) }, [])
// 加载技能等级数据
useEffect(() => {
const loadSkillLevels = async () => {
try {
const response = await getSkillLevels()
if (response.code === 200) {
setSkillLevels(response.data)
} else {
console.error('获取技能等级数据失败:', response.msg)
}
} catch (err) {
console.error('Error loading skill levels:', err)
}
}
loadSkillLevels()
}, [])
// 组件挂载时获取数据 // 组件挂载时获取数据
useEffect(() => { useEffect(() => {
fetchWorkersList() fetchWorkersList()
@@ -264,8 +234,7 @@ export default function WorkersPage() {
worker.dealerName.toLowerCase().includes(searchTerm.toLowerCase()) worker.dealerName.toLowerCase().includes(searchTerm.toLowerCase())
const matchesProvince = provinceFilter === "all" || worker.province === provinceFilter || const matchesProvince = provinceFilter === "all" || worker.province === provinceFilter ||
provinces.find(p => p.code === provinceFilter)?.name === worker.province provinces.find(p => p.code === provinceFilter)?.name === worker.province
const matchesSkill = skillFilter === "all" || worker.skillLevel === skillFilter return matchesSearch && matchesProvince
return matchesSearch && matchesProvince && matchesSkill
}) })
const handleAddWorker = async () => { const handleAddWorker = async () => {
@@ -315,8 +284,6 @@ export default function WorkersPage() {
// 处理编辑工人 // 处理编辑工人
const handleEditWorker = (worker: any) => { const handleEditWorker = (worker: any) => {
setEditingWorker(worker)
// 尝试根据省份名称查找省份代码 // 尝试根据省份名称查找省份代码
let provinceValue = worker.province let provinceValue = worker.province
const provinceByName = provinces.find(p => p.name === worker.province) const provinceByName = provinces.find(p => p.name === worker.province)
@@ -376,7 +343,6 @@ export default function WorkersPage() {
fetchWorkersList(currentPage, pageSize) fetchWorkersList(currentPage, pageSize)
setEditWorker({ id: "", name: "", phone: "", dealerId: "", province: "", skillLevel: "", specialties: "", jobNum: "", job: "1" }) setEditWorker({ id: "", name: "", phone: "", dealerId: "", province: "", skillLevel: "", specialties: "", jobNum: "", job: "1" })
setEditingWorker(null)
setIsEditDialogOpen(false) setIsEditDialogOpen(false)
} else { } else {
console.error('编辑工人失败:', result) console.error('编辑工人失败:', result)
@@ -527,32 +493,6 @@ export default function WorkersPage() {
} }
} }
const getStatusBadge = (status: string) => {
switch (status) {
case "active":
return <Badge className="bg-green-100 text-green-800"></Badge>
case "inactive":
return <Badge variant="secondary"></Badge>
case "suspended":
return <Badge variant="destructive"></Badge>
default:
return <Badge variant="outline"></Badge>
}
}
const getSkillBadge = (skill: string) => {
switch (skill) {
case "高级技师":
return <Badge className="bg-purple-100 text-purple-800"></Badge>
case "中级技师":
return <Badge className="bg-blue-100 text-blue-800"></Badge>
case "初级技师":
return <Badge className="bg-green-100 text-green-800"></Badge>
default:
return <Badge variant="outline">{skill}</Badge>
}
}
const getWorkOrderStatusBadge = (status: string) => { const getWorkOrderStatusBadge = (status: string) => {
switch (status) { switch (status) {
case "pending-accept": case "pending-accept":
@@ -898,23 +838,12 @@ export default function WorkersPage() {
))} ))}
</SelectContent> </SelectContent>
</Select> </Select>
<Select value={skillFilter} onValueChange={setSkillFilter}>
<SelectTrigger className="w-32">
<SelectValue placeholder="技能等级" />
</SelectTrigger>
<SelectContent className="max-h-[300px]">
<SelectItem value="all"></SelectItem>
<SelectItem value="高级技师"></SelectItem>
<SelectItem value="中级技师"></SelectItem>
<SelectItem value="初级技师"></SelectItem>
</SelectContent>
</Select>
<Select value={selectedWorkOrder} onValueChange={setSelectedWorkOrder}> <Select value={selectedWorkOrder} onValueChange={setSelectedWorkOrder}>
<SelectTrigger className="w-64"> <SelectTrigger className="w-64">
<SelectValue placeholder="选择工单" /> <SelectValue placeholder="筛选工人" />
</SelectTrigger> </SelectTrigger>
<SelectContent className="max-h-[300px]"> <SelectContent className="max-h-[300px]">
<SelectItem value="all"></SelectItem> <SelectItem value="all"></SelectItem>
{workOrders.map((order) => ( {workOrders.map((order) => (
<SelectItem key={order.value} value={order.value}> <SelectItem key={order.value} value={order.value}>
{order.label} {order.label}