| | |
| | | // å建çç» |
| | | export function createTeam(data) { |
| | | return request({ |
| | | url: "/production_team", |
| | | url: "/productionTeam", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | |
| | | // æ´æ°çç» |
| | | export function updateTeam(data) { |
| | | return request({ |
| | | url: "/production_team", |
| | | url: "/productionTeam", |
| | | method: "put", |
| | | data: data, |
| | | }); |
| | |
| | | // å é¤çç» |
| | | export function deleteTeam(id) { |
| | | return request({ |
| | | url: "/production_team/" + id, |
| | | url: "/productionTeam/" + id, |
| | | method: "delete", |
| | | }); |
| | | } |
| | |
| | | // æ¥è¯¢çç»è¯¦æ
|
| | | export function getTeamDetail(id) { |
| | | return request({ |
| | | url: "/production_team/" + id, |
| | | url: "/productionTeam/" + id, |
| | | method: "get", |
| | | }); |
| | | } |
| | |
| | | // æ¥è¯¢çç»å表 |
| | | export function getTeamList(query) { |
| | | return request({ |
| | | url: "/production_team/list", |
| | | url: "/productionTeam/list", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | |
| | | // å页æ¥è¯¢çç»å表 |
| | | export function getTeamListPage(query) { |
| | | return request({ |
| | | url: "/production_team/listPage", |
| | | url: "/productionTeam/listPage", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | // æ¥è¯¢çç»é¿å表 |
| | | export function getTeamLeaderList(query) { |
| | | return request({ |
| | | url: "/productionTeamUserRel/leaderList", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | export function getTeamMemberListByTeamLeader(query) { |
| | | return request({ |
| | | url: "/productionTeamUserRel/memberListByLeader", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | |
| | |
| | | }); |
| | | } |
| | | |
| | | // å·¥å-æå®çç»å¢éæå |
| | | export function assignTeamUser(data) { |
| | | return request({ |
| | | url: "/productionOperationTask/assignTeamUser", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | // ä¸è½½å·¥åæµè½¬å¡ï¼è¿åæä»¶æµï¼ |
| | | export function downProductWorkOrder(id) { |
| | | return request({ |
| | |
| | | import { ElMessageBox } from "element-plus"; |
| | | import dayjs from "dayjs"; |
| | | import { useRouter } from "vue-router"; |
| | | import useUserStore from '@/store/modules/user' |
| | | import { |
| | | productOrderListPage, |
| | | listProcessRoute, |
| | |
| | | |
| | | const { proxy } = getCurrentInstance(); |
| | | |
| | | const userStore = useUserStore(); |
| | | const router = useRouter(); |
| | | const isShowNewModal = ref(false); |
| | | const sourceDataDialogVisible = ref(false); |
| | |
| | | width: 120, |
| | | }, |
| | | { |
| | | label: "çç»é¿", |
| | | prop: "teamLeaderUserName", |
| | | width: "120px", |
| | | }, |
| | | { |
| | | dataType: "action", |
| | | label: "æä½", |
| | | align: "center", |
| | |
| | | name: "颿", |
| | | type: "text", |
| | | color: "#5EC7AB", |
| | | showHide: row => !row.endOrder && !row.returned, |
| | | showHide: row => !row.endOrder && !row.returned && userStore.id === row.teamLeaderUserId, |
| | | clickFun: row => { |
| | | openMaterialDialog(row); |
| | | }, |
| | |
| | | </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> |
| | |
| | | title="åå¹¶ä¸å" |
| | | width="600px"> |
| | | <el-form :model="mergeForm" |
| | | ref="mergeFormRef" |
| | | label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="10"> |
| | |
| | | :max="sumAssignedQuantity" |
| | | @change="onBlur" |
| | | style="width: 100%" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item |
| | | prop="leaderId" |
| | | label="çç»é¿" |
| | | :rules="[ |
| | | { |
| | | required: true, |
| | | message: 'è¯·éæ©çç»é¿', |
| | | trigger: 'change', |
| | | } |
| | | ]" |
| | | > |
| | | <el-select v-model="mergeForm.leaderId" |
| | | placeholder="è¯·éæ©" |
| | | filterable |
| | | @focus="fetchTeamLeaderOptions" |
| | | style="width: 100%"> |
| | | <el-option v-for="item in teamLeaderOptions" |
| | | :key="item.userId" |
| | | :label="item.nickName" |
| | | :value="item.userId" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | |
| | | exportProductionPlan, |
| | | } from "@/api/productionPlan/productionPlan.js"; |
| | | import { productTreeList, modelListPage } from "@/api/basicData/product.js"; |
| | | import { getTeamLeaderList } from "@/api/productionManagement/productionTeamUserRel.js"; |
| | | import PIMTable from "./components/PIMTable.vue"; |
| | | import ImportDialog from "@/components/Dialog/ImportDialog.vue"; |
| | | import {afterSalesServiceDispose} from "@/api/customerService/index.js"; |
| | | |
| | | const { proxy } = getCurrentInstance(); |
| | | const router = useRouter(); |
| | |
| | | totalAssignedQuantity: 0, |
| | | planCompleteTime: "", |
| | | productId: "", |
| | | leaderId: "", |
| | | }); |
| | | |
| | | // çç»é¿å表 |
| | | const teamLeaderOptions = ref([]); |
| | | |
| | | // æ¥è¯¢çç»é¿å表 |
| | | const fetchTeamLeaderOptions = () => { |
| | | return getTeamLeaderList().then(res => { |
| | | teamLeaderOptions.value = res.data || []; |
| | | }); |
| | | }; |
| | | |
| | | // 导å
¥ç¸å
³ |
| | | const importDialogRef = ref(null); |
| | |
| | | const payload = { |
| | | ...mergeForm, |
| | | }; |
| | | productionPlanCombine(payload) |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | | ElMessage.success("ä¸åæå"); |
| | | getList(); |
| | | isShowNewModal.value = false; |
| | | // å¯ä»¥éæ©å·æ°å表æå
¶ä»æä½ |
| | | getList(); |
| | | } else { |
| | | ElMessage.error(res.message || "ä¸å失败"); |
| | | } |
| | | }) |
| | | .catch(err => { |
| | | console.error("åå¹¶ä¸åå¼å¸¸ï¼", err); |
| | | ElMessage.error("ç³»ç»å¼å¸¸ï¼åå¹¶ä¸å失败"); |
| | | }); |
| | | proxy.$refs["mergeFormRef"].validate(valid => { |
| | | if (!valid) return; |
| | | productionPlanCombine(payload) |
| | | .then(res => { |
| | | if (res.code === 200) { |
| | | ElMessage.success("ä¸åæå"); |
| | | getList(); |
| | | isShowNewModal.value = false; |
| | | // å¯ä»¥éæ©å·æ°å表æå
¶ä»æä½ |
| | | getList(); |
| | | } else { |
| | | ElMessage.error(res.message || "ä¸å失败"); |
| | | } |
| | | }) |
| | | .catch(err => { |
| | | console.error("åå¹¶ä¸åå¼å¸¸ï¼", err); |
| | | ElMessage.error("ç³»ç»å¼å¸¸ï¼åå¹¶ä¸å失败"); |
| | | }); |
| | | }) |
| | | |
| | | // å¯ä»¥éæ©å·æ°å表æå
¶ä»æä½ |
| | | }; |
| | | |