优化
This commit is contained in:
@@ -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}
|
||||||
|
|||||||
Reference in New Issue
Block a user