From 3166ee94a56505a5eed287fc921ea1ef55170650 Mon Sep 17 00:00:00 2001 From: haoliang <821644@qq.com> Date: Thu, 30 Apr 2026 00:05:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=B9=E7=AA=97=E5=8A=A0=E5=AE=BD900px?= =?UTF-8?q?=EF=BC=8C=E7=A9=BF=E6=A2=AD=E6=A1=86=E5=B7=A6=E4=BE=A7=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=B7=B2=E7=BB=91=E5=AE=9A=E5=85=B6=E4=BB=96=E5=B7=A5?= =?UTF-8?q?=E4=BA=BA=E7=9A=84=E6=9C=BA=E5=BA=8A=EF=BC=8C=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=8C=89=E9=9C=80=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/worker/WorkerListPage.vue | 49 +++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/frontend/src/views/worker/WorkerListPage.vue b/frontend/src/views/worker/WorkerListPage.vue index 173943f..aea5c78 100644 --- a/frontend/src/views/worker/WorkerListPage.vue +++ b/frontend/src/views/worker/WorkerListPage.vue @@ -36,7 +36,7 @@ @size-change="handleSizeChange" /> - + @@ -48,7 +48,7 @@ = await request.get('/admin/worker',{params:{...query,page:cp,pageSize:ps}});tableData.value=r.data?.items||[];pagination.value.total= r.data?.total ?? (r.data?.items?.length ?? 0)}finally{loading.value=false}} -function handleAdd(){editingId.value=null;Object.assign(form,{code:'',name:'',machineIds:[]});dialogVisible.value=true} +function handleAdd(){editingId.value=null;Object.assign(form,{code:'',name:'',machineIds:[]});loadTransferData();dialogVisible.value=true} async function handleEdit(row: Worker){ editingId.value=row.id - // 先打开弹窗(基础信息) Object.assign(form,{code:row.code,name:row.name,machineIds:[]}) + await loadTransferData(row.id) dialogVisible.value=true - // 异步加载已绑定机床ID +} +/** 加载穿梭框数据:未绑定的机床 + 当前编辑工人的已绑定机床 */ +async function loadTransferData(workerId?: number){ try{ - const r: ApiResponse<{ items: Array<{machineId:number}> }> = await request.get(`/admin/worker/${row.id}/machines`) - form.machineIds = (r.data?.items ?? []).map(m => m.machineId) - }catch{/* 获取失败时保持为空 */} + // 并行请求:全部机床 + 可绑定机床 + const [rAll, rAvail] = await Promise.all([ + request.get('/admin/machine',{params:{pageSize:999}}), + request.get('/admin/worker/available-machines') + ]) + const allMachines: any[] = (rAll as any).data?.items ?? [] + const availIds = new Set(((rAvail as any).data?.items ?? []).map((m: any) => m.id)) + // 编辑模式下获取当前工人已绑定的机床 + let ownIds = new Set() + if(workerId){ + try{ + const rOwn: ApiResponse<{ items: Array<{machineId:number}> }> = await request.get(`/admin/worker/${workerId}/machines`) + const items = rOwn.data?.items ?? [] + ownIds = new Set(items.map((m: any) => m.machineId)) + form.machineIds = items.map((m: any) => m.machineId) + }catch{} + } + // 只保留:未绑定其他工人 或 已绑定当前工人的机床 + availableMachines.value = allMachines + .filter((m: any) => availIds.has(m.id) || ownIds.has(m.id)) + .map(m => ({ id: m.id, name: m.name, label: m.name, deviceCode: m.deviceCode, workshopName: m.workshopName, isOnline: m.isOnline, isEnabled: m.isEnabled })) + }catch{/* 接口不可用时保持为空 */} } async function handleSubmit(){submitting.value=true;try{const ok = await (workerForm.value?.validate ? new Promise((resolve)=>workerForm.value!.validate((valid:boolean)=>resolve(valid))) : Promise.resolve(true)); if(!ok){return} await request[editingId.value?'put':'post'](editingId.value?`/admin/worker/${editingId.value}`:'/admin/worker',{...form});ElMessage.success('保存成功');dialogVisible.value=false;loadData()}finally{submitting.value=false}} async function handleDelete(row:any){await ElMessageBox.confirm('确定删除【'+row.name+'】?此操作不可恢复。','提示',{type:'warning'});await request.delete(`/admin/worker/${row.id}`);ElMessage.success('已删除');loadData()} async function batchStatus(isEnabled:number){await ElMessageBox.confirm('确定对选中的'+selectedRows.value.length+'项操作?','提示',{type:'warning'});for(const id of selectedRows.value.map((r:any)=>r.id)){await request.put(`/admin/worker/${id}/toggle`,{isEnabled})};ElMessage.success('操作成功');loadData()} -async function loadDrops(){try{const r: ApiResponse<{ items: MachineItem[] }> = await request.get('/admin/machine',{params:{pageSize:999}}); availableMachines.value = (r.data?.items ?? []).map(m => ({ id: m.id, name: m.name, label: m.name, deviceCode: m.deviceCode, workshopName: m.workshopName, isOnline: m.isOnline, isEnabled: m.isEnabled }))}catch{/* 接口不可用时保持为空,不影响其他功能 */}} +function handlePageChange(page:number){pagination.value.currentPage=page;loadData()} +function handleSizeChange(size:number){pagination.value.pageSize=size;pagination.value.currentPage=1;loadData()} /** 根据机床在线/启用状态返回色点内联样式 */ function dotStyle(m: MachineItem): Record { const color = !m.isEnabled ? '#f56c6c' : m.isOnline ? '#67c23a' : '#c0c4cc' return { display: 'inline-block', width: '8px', height: '8px', borderRadius: '50%', marginRight: '6px', verticalAlign: 'middle', backgroundColor: color } } -function getStatusClass(m: MachineItem): string { - if (!m.isEnabled) return 'status-disabled' - if (m.isOnline) return 'status-online' - return 'status-offline' -} -function handlePageChange(page:number){pagination.value.currentPage=page;loadData()} -function handleSizeChange(size:number){pagination.value.pageSize=size;pagination.value.currentPage=1;loadData()} -onMounted(()=>{loadData();loadDrops()}) +onMounted(()=>{loadData()})