|
|
|
|
@ -25,7 +25,7 @@
|
|
|
|
|
<el-form-item label="预投项目" prop="projectId">
|
|
|
|
|
<el-select v-model="queryParams.projectId" filterable clearable placeholder="请选择预投项目" class="project-select">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="project in sourceProjectOptions"
|
|
|
|
|
v-for="project in querySourceProjectOptions"
|
|
|
|
|
:key="project.projectId"
|
|
|
|
|
:label="projectLabel(project)"
|
|
|
|
|
:value="project.projectId"
|
|
|
|
|
@ -143,7 +143,7 @@
|
|
|
|
|
clearable
|
|
|
|
|
:disabled="Boolean(form.allocId)"
|
|
|
|
|
placeholder="请选择月份"
|
|
|
|
|
@change="loadStaffAllocDetails"
|
|
|
|
|
@change="handleMonthChange"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
@ -248,7 +248,8 @@ import {
|
|
|
|
|
delTimesheetPreAlloc,
|
|
|
|
|
addTimesheetPreAlloc,
|
|
|
|
|
updateTimesheetPreAlloc,
|
|
|
|
|
getStaffAllocDetails
|
|
|
|
|
getStaffAllocDetails,
|
|
|
|
|
listAvailableSourceProjects
|
|
|
|
|
} from '@/api/oa/erp/timesheetPreAlloc';
|
|
|
|
|
import {
|
|
|
|
|
TimesheetPreAllocVO,
|
|
|
|
|
@ -272,6 +273,7 @@ const { alloc_status } = toRefs<any>(proxy?.useDict('alloc_status'));
|
|
|
|
|
|
|
|
|
|
const timesheetPreAllocList = ref<TimesheetPreAllocVO[]>([]);
|
|
|
|
|
const selectedRows = ref<TimesheetPreAllocVO[]>([]);
|
|
|
|
|
const querySourceProjectOptions = ref<ProjectOption[]>([]);
|
|
|
|
|
const sourceProjectOptions = ref<ProjectOption[]>([]);
|
|
|
|
|
const targetProjectOptions = ref<ProjectOption[]>([]);
|
|
|
|
|
const buttonLoading = ref(false);
|
|
|
|
|
@ -377,9 +379,9 @@ const currentAllocStatus = computed(() => {
|
|
|
|
|
const hasAppliedSelected = computed(() => selectedRows.value.some((row) => row.appliedFlag === '1'));
|
|
|
|
|
|
|
|
|
|
const loadProjectOptions = async () => {
|
|
|
|
|
if (sourceProjectOptions.value.length === 0) {
|
|
|
|
|
if (querySourceProjectOptions.value.length === 0) {
|
|
|
|
|
const sourceRes: any = await getErpProjectInfoList({ projectCategory: '4' });
|
|
|
|
|
sourceProjectOptions.value = (sourceRes.data || []).map(normalizeProject);
|
|
|
|
|
querySourceProjectOptions.value = (sourceRes.data || []).map(normalizeProject);
|
|
|
|
|
}
|
|
|
|
|
if (targetProjectOptions.value.length === 0) {
|
|
|
|
|
const [logisticsRes, spareRes]: any[] = await Promise.all([
|
|
|
|
|
@ -393,6 +395,15 @@ const loadProjectOptions = async () => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const loadSourceProjectOptions = async (monthCode?: string) => {
|
|
|
|
|
if (!monthCode) {
|
|
|
|
|
sourceProjectOptions.value = [];
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const res: any = await listAvailableSourceProjects({ monthCode });
|
|
|
|
|
sourceProjectOptions.value = (res.data || []).map(normalizeProject);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const normalizeStaffAlloc = (staff: PreAllocStaffAlloc): PreAllocStaffAlloc => ({
|
|
|
|
|
staffUserId: staff.staffUserId,
|
|
|
|
|
staffName: staff.staffName,
|
|
|
|
|
@ -464,6 +475,14 @@ const loadStaffAllocDetails = async () => {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleMonthChange = async () => {
|
|
|
|
|
form.value.projectId = undefined;
|
|
|
|
|
form.value.projectCode = undefined;
|
|
|
|
|
form.value.projectName = undefined;
|
|
|
|
|
form.value.staffAllocList = [];
|
|
|
|
|
await loadSourceProjectOptions(form.value.monthCode);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getList = async () => {
|
|
|
|
|
loading.value = true;
|
|
|
|
|
const params = {
|
|
|
|
|
@ -506,6 +525,7 @@ const handleSelectionChange = (selection: TimesheetPreAllocVO[]) => {
|
|
|
|
|
const handleAdd = async () => {
|
|
|
|
|
reset();
|
|
|
|
|
await loadProjectOptions();
|
|
|
|
|
await loadSourceProjectOptions(form.value.monthCode);
|
|
|
|
|
dialog.visible = true;
|
|
|
|
|
dialog.title = '预投工时分配';
|
|
|
|
|
};
|
|
|
|
|
|