wo 1
This commit is contained in:
@@ -316,12 +316,25 @@ export default function WorkersPage() {
|
||||
// 处理编辑工人
|
||||
const handleEditWorker = (worker: any) => {
|
||||
setEditingWorker(worker)
|
||||
|
||||
// 尝试根据省份名称查找省份代码
|
||||
let provinceValue = worker.province
|
||||
const provinceByName = provinces.find(p => p.name === worker.province)
|
||||
const provinceByCode = provinces.find(p => p.code === worker.province)
|
||||
|
||||
// 如果找到匹配的省份,使用其代码
|
||||
if (provinceByName) {
|
||||
provinceValue = provinceByName.code
|
||||
} else if (provinceByCode) {
|
||||
provinceValue = provinceByCode.code
|
||||
}
|
||||
|
||||
setEditWorker({
|
||||
id: worker.id,
|
||||
name: worker.name,
|
||||
phone: worker.phone,
|
||||
dealerId: worker.dealerId,
|
||||
province: worker.province,
|
||||
province: provinceValue,
|
||||
skillLevel: worker.skillLevel,
|
||||
specialties: worker.specialties.join(','),
|
||||
jobNum: worker.workerId,
|
||||
@@ -445,15 +458,21 @@ export default function WorkersPage() {
|
||||
const mapWorkOrderStatus = (status: string | null) => {
|
||||
switch (status) {
|
||||
case "1":
|
||||
return "assigned"
|
||||
return "pending-accept"
|
||||
case "2":
|
||||
return "in-progress"
|
||||
return "accepted"
|
||||
case "3":
|
||||
return "completed"
|
||||
return "in-progress"
|
||||
case "4":
|
||||
return "cancelled"
|
||||
return "repairing"
|
||||
case "5":
|
||||
return "checking-info"
|
||||
case "6":
|
||||
return "waiting-signature"
|
||||
case "7":
|
||||
return "completed"
|
||||
default:
|
||||
return "assigned"
|
||||
return "pending-accept"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -535,14 +554,20 @@ export default function WorkersPage() {
|
||||
|
||||
const getWorkOrderStatusBadge = (status: string) => {
|
||||
switch (status) {
|
||||
case "completed":
|
||||
return <Badge className="bg-green-100 text-green-800">已完成</Badge>
|
||||
case "pending-accept":
|
||||
return <Badge className="bg-orange-100 text-orange-800">待接单</Badge>
|
||||
case "accepted":
|
||||
return <Badge className="bg-blue-100 text-blue-800">已接单</Badge>
|
||||
case "in-progress":
|
||||
return <Badge className="bg-blue-100 text-blue-800">处理中</Badge>
|
||||
case "assigned":
|
||||
return <Badge className="bg-yellow-100 text-yellow-800">待处理</Badge>
|
||||
case "cancelled":
|
||||
return <Badge className="bg-red-100 text-red-800">已取消</Badge>
|
||||
return <Badge className="bg-cyan-100 text-cyan-800">订单进行中</Badge>
|
||||
case "repairing":
|
||||
return <Badge className="bg-purple-100 text-purple-800">订单维修中</Badge>
|
||||
case "checking-info":
|
||||
return <Badge className="bg-yellow-100 text-yellow-800">核对检测信息</Badge>
|
||||
case "waiting-signature":
|
||||
return <Badge className="bg-pink-100 text-pink-800">待商户签字</Badge>
|
||||
case "completed":
|
||||
return <Badge className="bg-green-100 text-green-800">订单已完成</Badge>
|
||||
default:
|
||||
return <Badge variant="outline">{status}</Badge>
|
||||
}
|
||||
@@ -623,24 +648,6 @@ export default function WorkersPage() {
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="skillLevel">技能等级</Label>
|
||||
<Select
|
||||
value={newWorker.skillLevel}
|
||||
onValueChange={(value) => setNewWorker({ ...newWorker, skillLevel: value })}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="选择技能等级" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{skillLevels.map((level) => (
|
||||
<SelectItem key={level} value={level}>
|
||||
{SKILL_LEVEL_MAP[level]}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="jobNum">工号</Label>
|
||||
<Input
|
||||
@@ -650,16 +657,6 @@ export default function WorkersPage() {
|
||||
placeholder="请输入工号(可选,系统自动生成)"
|
||||
/>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="specialties">专业技能</Label>
|
||||
<Textarea
|
||||
id="specialties"
|
||||
value={newWorker.specialties}
|
||||
onChange={(e) => setNewWorker({ ...newWorker, specialties: e.target.value })}
|
||||
placeholder="请输入专业技能,用逗号分隔(如:焊接,电工,管道安装)"
|
||||
rows={3}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
<Button variant="outline" onClick={() => setIsAddDialogOpen(false)} disabled={isSubmitting}>
|
||||
@@ -712,7 +709,7 @@ export default function WorkersPage() {
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{provinces.map((province) => (
|
||||
<SelectItem key={province.code} value={province.name}>
|
||||
<SelectItem key={province.code} value={province.code}>
|
||||
{province.name}
|
||||
</SelectItem>
|
||||
))}
|
||||
@@ -737,57 +734,14 @@ export default function WorkersPage() {
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="edit-skillLevel">技能等级</Label>
|
||||
<Select
|
||||
value={editWorker.skillLevel}
|
||||
onValueChange={(value) => setEditWorker({ ...editWorker, skillLevel: value })}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="选择技能等级" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{skillLevels.map((level) => (
|
||||
<SelectItem key={level} value={level}>
|
||||
{SKILL_LEVEL_MAP[level]}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="edit-jobNum">工号</Label>
|
||||
<Input
|
||||
id="edit-jobNum"
|
||||
value={editWorker.jobNum}
|
||||
onChange={(e) => setEditWorker({ ...editWorker, jobNum: e.target.value })}
|
||||
placeholder="请输入工号"
|
||||
/>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="edit-job">工作状态</Label>
|
||||
<Select
|
||||
value={editWorker.job}
|
||||
onValueChange={(value) => setEditWorker({ ...editWorker, job: value })}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="选择工作状态" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="1">在职</SelectItem>
|
||||
<SelectItem value="2">离职</SelectItem>
|
||||
<SelectItem value="3">请假</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="grid gap-2">
|
||||
<Label htmlFor="edit-specialties">专业技能</Label>
|
||||
<Textarea
|
||||
id="edit-specialties"
|
||||
value={editWorker.specialties}
|
||||
onChange={(e) => setEditWorker({ ...editWorker, specialties: e.target.value })}
|
||||
placeholder="请输入专业技能,用逗号分隔(如:焊接,电工,管道安装)"
|
||||
rows={3}
|
||||
disabled
|
||||
placeholder="工号不可更改"
|
||||
className="bg-gray-100 cursor-not-allowed"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1007,10 +961,6 @@ export default function WorkersPage() {
|
||||
{worker.province} | 完成: {worker.completedOrders} 单
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col space-y-1">
|
||||
{getSkillBadge(worker.skillLevel)}
|
||||
{getStatusBadge(worker.status)}
|
||||
</div>
|
||||
<div className="flex space-x-1">
|
||||
<div
|
||||
className="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground h-9 px-3 cursor-pointer"
|
||||
@@ -1041,20 +991,10 @@ export default function WorkersPage() {
|
||||
<h5 className="font-medium text-sm text-gray-700 mb-2">基本信息</h5>
|
||||
<div className="space-y-1 text-sm">
|
||||
<p>入职时间: {worker.joinDate}</p>
|
||||
<p>服务评分: {worker.rating > 0 ? `${worker.rating}/5.0` : "暂无评分"}</p>
|
||||
<p>完成工单: {worker.completedOrders} 单</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="md:col-span-2">
|
||||
<h5 className="font-medium text-sm text-gray-700 mb-2">专业技能</h5>
|
||||
<div className="flex flex-wrap gap-1">
|
||||
{worker.specialties.map((specialty: string, index: number) => (
|
||||
<Badge key={index} variant="outline" className="text-xs">
|
||||
{specialty}
|
||||
</Badge>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<h4 className="font-medium mb-3">工作记录</h4>
|
||||
@@ -1067,8 +1007,6 @@ export default function WorkersPage() {
|
||||
<TableHead>商户信息</TableHead>
|
||||
<TableHead>设备</TableHead>
|
||||
<TableHead>状态</TableHead>
|
||||
<TableHead>时间信息</TableHead>
|
||||
<TableHead>评分</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
@@ -1091,41 +1029,6 @@ export default function WorkersPage() {
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>{getWorkOrderStatusBadge(order.status)}</TableCell>
|
||||
<TableCell>
|
||||
<div className="text-sm">
|
||||
{order.status === "completed" ? (
|
||||
<p className="flex items-center">
|
||||
<Calendar className="h-3 w-3 mr-1 text-green-500" />
|
||||
完成: {order.completedDate || '未知'}
|
||||
</p>
|
||||
) : order.status === "in-progress" ? (
|
||||
<p className="flex items-center">
|
||||
<Calendar className="h-3 w-3 mr-1 text-blue-500" />
|
||||
开始: {order.startDate || '未知'}
|
||||
</p>
|
||||
) : order.status === "cancelled" ? (
|
||||
<p className="flex items-center">
|
||||
<Calendar className="h-3 w-3 mr-1 text-red-500" />
|
||||
已取消
|
||||
</p>
|
||||
) : (
|
||||
<p className="flex items-center">
|
||||
<Calendar className="h-3 w-3 mr-1 text-yellow-500" />
|
||||
创建: {order.assignedDate || '未知'}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>
|
||||
{order.status === "completed" && order.rating ? (
|
||||
<div className="flex items-center">
|
||||
<span className="text-yellow-500 mr-1">★</span>
|
||||
<span className="text-sm font-medium">{order.rating}/5</span>
|
||||
</div>
|
||||
) : (
|
||||
<span className="text-xs text-gray-400">-</span>
|
||||
)}
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
|
Reference in New Issue
Block a user