| | |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | <!-- 指定班组成员弹窗(单选) --> |
| | | <el-dialog v-model="assignTeamUserDialogVisible" |
| | | title="指定班组成员" |
| | | width="800px"> |
| | | <div class="assign-team-user-content"> |
| | | <div class="selected-info-box" |
| | | v-if="selectedTeamUserId"> |
| | | <div class="info-label">已选择:</div> |
| | | <div class="info-value">{{ getTeamUserNameById(selectedTeamUserId) }}</div> |
| | | </div> |
| | | <div class="team-user-list-container" |
| | | v-loading="teamUserTableLoading"> |
| | | <el-radio-group v-model="selectedTeamUserId"> |
| | | <div class="team-user-grid"> |
| | | <div v-for="item in teamUserTableData" |
| | | :key="item.userId" |
| | | class="team-user-item"> |
| | | <el-radio :label="item.userId"> |
| | | <div class="team-user-info"> |
| | | <span class="name">{{ item.nickName }}</span> |
| | | </div> |
| | | </el-radio> |
| | | </div> |
| | | </div> |
| | | </el-radio-group> |
| | | <div v-if="teamUserTableData.length === 0" |
| | | class="empty-text"> |
| | | 暂无匹配人员 |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button type="primary" |
| | | @click="handleSaveTeamUser">确定</el-button> |
| | | <el-button @click="assignTeamUserDialogVisible = false">取消</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { |
| | | productWorkOrderPage, |
| | | updateProductWorkOrder, |
| | | assignProductWorkOrder, |
| | | assignProductWorkOrder, assignTeamUser, |
| | | } from "@/api/productionManagement/workOrder.js"; |
| | | import { listUser } from "@/api/system/user.js"; |
| | | import {getTeamMemberListByTeamLeader} from "@/api/productionManagement/productionTeamUserRel.js"; |
| | | |
| | | const { proxy } = getCurrentInstance(); |
| | | |
| | |
| | | width: "180", |
| | | }, |
| | | { |
| | | label: "指定班组成员", |
| | | prop: "teamUserName", |
| | | width: "180", |
| | | }, |
| | | { |
| | | label: "操作", |
| | | width: "200", |
| | | align: "center", |
| | |
| | | name: "指定报工人", |
| | | clickFun: row => { |
| | | handleAssignReporter(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: "指定班组成员", |
| | | clickFun: row => { |
| | | handleAssignTeamUser(row); |
| | | }, |
| | | }, |
| | | ], |
| | |
| | | getEmployeeList(); |
| | | }; |
| | | |
| | | // 指定班组成员相关 |
| | | const assignTeamUserDialogVisible = ref(false); |
| | | const teamUserTableLoading = ref(false); |
| | | const teamUserTableData = ref([]); |
| | | const teamUserPage = reactive({ |
| | | current: 1, |
| | | size: 100, |
| | | total: 0, |
| | | }); |
| | | |
| | | const currentTeamUser = ref(null); |
| | | const selectedTeamUserId = ref(null); |
| | | |
| | | const handleAssignTeamUser = row => { |
| | | currentTeamUser.value = row; |
| | | assignTeamUserDialogVisible.value = true; |
| | | // 回显已选择的人员(单选) |
| | | if (row.teamUserId) { |
| | | selectedTeamUserId.value = row.teamUserId; |
| | | } else { |
| | | selectedTeamUserId.value = null; |
| | | } |
| | | getTeamUserList(row.leaderUserId); |
| | | }; |
| | | |
| | | |
| | | const getEmployeeList = () => { |
| | | employeeTableLoading.value = true; |
| | | const params = { |
| | |
| | | .then(() => { |
| | | proxy.$modal.msgSuccess("指定成功"); |
| | | assignReporterDialogVisible.value = false; |
| | | getList(); |
| | | }) |
| | | .catch(() => { |
| | | proxy.$modal.msgError("指定失败"); |
| | | }); |
| | | }; |
| | | |
| | | const getTeamUserList = (leaderUserId) => { |
| | | teamUserTableLoading.value = true; |
| | | getTeamMemberListByTeamLeader({leaderUserId: leaderUserId}) |
| | | .then(res => { |
| | | teamUserTableLoading.value = false; |
| | | teamUserTableData.value = res.data; |
| | | }) |
| | | .catch(() => { |
| | | teamUserTableLoading.value = false; |
| | | }); |
| | | }; |
| | | |
| | | const getTeamUserNameById = id => { |
| | | const user = teamUserTableData.value.find(item => item.userId === id); |
| | | return user ? user.nickName : id; |
| | | }; |
| | | |
| | | const handleSaveTeamUser = () => { |
| | | if (!selectedTeamUserId.value) { |
| | | proxy.$modal.msgWarning("请选择班组成员"); |
| | | return; |
| | | } |
| | | |
| | | const updateData = { |
| | | id: currentTeamUser.value.id, |
| | | teamUserId: selectedTeamUserId.value, |
| | | }; |
| | | |
| | | assignTeamUser(updateData) |
| | | .then(() => { |
| | | proxy.$modal.msgSuccess("指定成功"); |
| | | assignTeamUserDialogVisible.value = false; |
| | | getList(); |
| | | }) |
| | | .catch(() => { |
| | |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | |
| | | .assign-team-user-content { |
| | | .selected-info-box { |
| | | margin-bottom: 16px; |
| | | padding: 12px; |
| | | background-color: #f5f7fa; |
| | | border-radius: 4px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .info-label { |
| | | font-size: 14px; |
| | | color: #606266; |
| | | margin-right: 8px; |
| | | } |
| | | |
| | | .info-value { |
| | | font-size: 14px; |
| | | color: #303133; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | |
| | | .team-user-list-container { |
| | | max-height: 400px; |
| | | overflow-y: auto; |
| | | padding: 10px; |
| | | border: 1px solid #f0f0f0; |
| | | border-radius: 4px; |
| | | |
| | | .team-user-grid { |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); |
| | | gap: 12px; |
| | | } |
| | | |
| | | .team-user-item { |
| | | :deep(.el-radio) { |
| | | width: 100%; |
| | | margin-right: 0; |
| | | height: auto; |
| | | padding: 8px; |
| | | |
| | | .el-radio__label { |
| | | width: 100%; |
| | | } |
| | | } |
| | | |
| | | .team-user-info { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 4px; |
| | | |
| | | .name { |
| | | font-weight: bold; |
| | | font-size: 14px; |
| | | color: #303133; |
| | | } |
| | | |
| | | .dept { |
| | | font-size: 12px; |
| | | color: #909399; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .empty-text { |
| | | text-align: center; |
| | | color: #909399; |
| | | padding: 20px; |
| | | } |
| | | } |
| | | } |
| | | </style> |