feat(timesheetPreAlloc): 添加当月可用预投项目查询功能

- 新增 listAvailableSourceProjects API 接口用于查询指定月份已填报工时的来源预投项目
- 修改月份选择时清空项目选择并重新加载对应的预投项目选项
- 添加 loadSourceProjectOptions 方法用于根据月份代码加载可用的源项目选项
- 更新新增表单时同步加载当前月份的预投项目选项
- 优化项目选项加载逻辑以支持按月份过滤的预投项目显示
dev
yangk 3 weeks ago
parent 71478a4818
commit 43b37e303b

@ -38,6 +38,17 @@ export const getStaffAllocDetails = (query: { monthCode: string; projectId: stri
});
};
/**
*
*/
export const listAvailableSourceProjects = (query: { monthCode: string }): AxiosPromise<any[]> => {
return request({
url: '/oa/erp/timesheetPreAlloc/listAvailableSourceProjects',
method: 'get',
params: query
});
};
/**
*
* @param data

@ -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 = '预投工时分配';
};

Loading…
Cancel
Save