diff --git a/frontend/src/views/CreateTask.vue b/frontend/src/views/CreateTask.vue index 091fa9a..1b41bee 100644 --- a/frontend/src/views/CreateTask.vue +++ b/frontend/src/views/CreateTask.vue @@ -645,6 +645,7 @@ import { useConfigStore } from '@/stores/config' const router = useRouter() const route = useRoute() const authStore = useAuthStore() +const TASK_CREATE_PUBLISHER_DEPT_KEY = 'task_create_publisher_dept_id' // 编辑模式 const editMode = ref(false) @@ -869,6 +870,17 @@ const initializePublishingDept = (preferredDeptId?: number) => { selectedPublishingDeptId.value = primaryPublishingDept?.deptId || departments[0].deptId } +const getPreferredPublishingDeptId = () => { + const routeDeptId = route.query.publisherDeptId ? Number(route.query.publisherDeptId) : undefined + if (routeDeptId) return routeDeptId + + const storedDeptId = sessionStorage.getItem(TASK_CREATE_PUBLISHER_DEPT_KEY) + if (!storedDeptId) return undefined + + const parsedDeptId = Number(storedDeptId) + return Number.isNaN(parsedDeptId) ? undefined : parsedDeptId +} + // 新条码输入框 const newBarcodeInput = ref('') @@ -2847,8 +2859,7 @@ onMounted(async () => { try { await authStore.fetchUserInfo() console.log('用户信息已刷新:', authStore.userInfo) - const preferredDeptId = route.query.publisherDeptId ? Number(route.query.publisherDeptId) : undefined - initializePublishingDept(preferredDeptId) + initializePublishingDept(getPreferredPublishingDeptId()) } catch (error) { console.error('刷新用户信息失败:', error) } @@ -2888,12 +2899,17 @@ watch(availablePublishingDepartments, (departments) => { } if (!selectedPublishingDeptId.value || !departments.some(dept => dept.deptId === selectedPublishingDeptId.value)) { - initializePublishingDept() + initializePublishingDept(getPreferredPublishingDeptId()) } }, { immediate: true }) watch(selectedPublishingDeptId, async (deptId, oldDeptId) => { if (deptId === oldDeptId) return + if (deptId) { + sessionStorage.setItem(TASK_CREATE_PUBLISHER_DEPT_KEY, String(deptId)) + } else { + sessionStorage.removeItem(TASK_CREATE_PUBLISHER_DEPT_KEY) + } await loadTeamScore() }) diff --git a/frontend/src/views/TaskHall.vue b/frontend/src/views/TaskHall.vue index be5ddb2..47ee132 100644 --- a/frontend/src/views/TaskHall.vue +++ b/frontend/src/views/TaskHall.vue @@ -2608,6 +2608,7 @@ const userDeptName = ref('') const userDeptType = ref('') const exportLoading = ref(false) // 导出加载状态 const withdrawingTaskId = ref(null) // 正在撤回的任务ID +const TASK_CREATE_PUBLISHER_DEPT_KEY = 'task_create_publisher_dept_id' // 获取当前有效的部门类型(根据选择的视角) const effectiveDeptType = computed(() => { @@ -4827,13 +4828,28 @@ const handleMonthChange = () => { // 发起任务 const handleCreateTask = () => { + const persistPublisherDeptId = (deptId?: number | null) => { + if (deptId) { + sessionStorage.setItem(TASK_CREATE_PUBLISHER_DEPT_KEY, String(deptId)) + } else { + sessionStorage.removeItem(TASK_CREATE_PUBLISHER_DEPT_KEY) + } + } + if (currentDeptView.value !== undefined && (effectiveDeptType.value === 'demand' || effectiveDeptType.value === 'primary_demand')) { + persistPublisherDeptId(currentDeptView.value) router.push({ path: '/tasks/create', query: { publisherDeptId: String(currentDeptView.value) } }) return } + + if (currentDeptView.value === undefined && (userDeptType.value === 'demand' || userDeptType.value === 'primary_demand')) { + persistPublisherDeptId(userDeptId.value) + } else { + persistPublisherDeptId(undefined) + } router.push('/tasks/create') }