Kaynağa Gözat

fix(daily-report): 修复组织树默认选中及缓存页面重复请求

- 统一瑞恒、瑞都、荣豫日报页面的默认组织逻辑
- 上级组织 156 登录时使用对应业务顶级组织
- 下级组织登录时默认使用并选中用户所属组织
- 修复 KeepAlive 缓存页面监听路由导致后台重复请求
- 同步组织树当前节点高亮状态
Zimo 2 gün önce
ebeveyn
işleme
b26f87da33

+ 2 - 1
src/components/DeptTreeSelect/index.vue

@@ -63,7 +63,7 @@ const loadDeptData = async () => {
   let id = props.deptId
   if (id !== props.topId) {
     const depts = await DeptApi.specifiedSimpleDepts(props.topId)
-    if (depts.length && !depts.find((item) => item.id === props.deptId)) id = props.topId
+    if (!depts.some((item) => Number(item.id) === Number(props.deptId))) id = props.topId
   }
   const depts = (await DeptApi.specifiedSimpleDepts(id)) as Tree[]
   return {
@@ -146,6 +146,7 @@ onMounted(loadTree)
                 :filter-node-method="filterNode"
                 node-key="id"
                 highlight-current
+                :current-node-key="modelValue"
                 :default-expanded-keys="expandedKeys"
                 @node-click="handleNodeClick" />
             </el-scrollbar>

+ 16 - 0
src/utils/dailyReportDept.ts

@@ -0,0 +1,16 @@
+const DAILY_REPORT_PARENT_DEPT_ID = 156
+
+/**
+ * 日报页面仅允许查询各自业务组织树内的数据。
+ * 登录用户属于共同上级组织时,默认落到当前页面的业务顶级组织;
+ * 其他用户默认使用自己的所属组织。
+ */
+export const resolveDailyReportDeptId = (userDeptId: number, topDeptId: number) => {
+  const normalizedUserDeptId = Number(userDeptId)
+
+  if (!normalizedUserDeptId || normalizedUserDeptId === DAILY_REPORT_PARENT_DEPT_ID) {
+    return topDeptId
+  }
+
+  return normalizedUserDeptId
+}

+ 6 - 3
src/views/pms/iotrddailyreport/fillDailyReport.vue

@@ -2,6 +2,7 @@
 import { IotRdDailyReportApi } from '@/api/pms/iotrddailyreport'
 import { useTableComponents } from '@/components/ZmTable/useTableComponents'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { DICT_TYPE, getDictOptions } from '@/utils/dict'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
@@ -12,7 +13,8 @@ defineOptions({ name: 'FillDailyReport' })
 
 const router = useRouter()
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 163
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -192,9 +194,10 @@ function realValue(type: any, value: string) {
   <div
     class="grid grid-cols-[auto_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :top-id="163"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2" />
 

+ 9 - 3
src/views/pms/iotrddailyreport/index.vue

@@ -2,6 +2,7 @@
 import { IotRdDailyReportApi } from '@/api/pms/iotrddailyreport'
 import { useTableComponents } from '@/components/ZmTable/useTableComponents'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { DICT_TYPE, getDictOptions, getStrDictOptions } from '@/utils/dict'
 import { formatT, rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
@@ -15,10 +16,12 @@ const { t } = useI18n()
 
 const router = useRouter()
 const route = useRoute()
+const pageRouteName = route.name
 
 const message = useMessage()
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 163
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -196,6 +199,8 @@ watch(
 watch(
   () => [route.query.deptId, route.query.createTime, route.query.taskName, route.query.nptName],
   () => {
+    if (route.name !== pageRouteName) return
+
     query.value.deptId = route.query.deptId ? Number(route.query.deptId) : id
     query.value.createTime = getRouteCreateTime()
     query.value.taskName = getRouteTaskName()
@@ -305,9 +310,10 @@ onMounted(() => {
   <div
     class="grid grid-cols-[auto_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :top-id="163"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2" />
 

+ 6 - 3
src/views/pms/iotrddailyreport/statistics.vue

@@ -2,6 +2,7 @@
 import { IotRdDailyReportApi } from '@/api/pms/iotrddailyreport'
 import { useTableComponents } from '@/components/ZmTable/useTableComponents'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { DICT_TYPE, getDictOptions } from '@/utils/dict'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
@@ -14,7 +15,8 @@ const { t } = useI18n()
 const router = useRouter()
 const message = useMessage()
 const userStore = useUserStore()
-const id = userStore.getUser.deptId
+const TOP_DEPT_ID = 163
+const id = resolveDailyReportDeptId(userStore.getUser.deptId, TOP_DEPT_ID)
 const deptId = id
 
 interface Query {
@@ -169,9 +171,10 @@ function handleWellNameClick(taskId: number) {
   <div
     class="grid grid-cols-[auto_minmax(0,1fr)] grid-rows-[auto_minmax(0,1fr)] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :top-id="163"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2" />
 

+ 10 - 4
src/views/pms/iotrddailyreport/summary.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
 import dayjs from 'dayjs'
 import { rangeShortcuts } from '@/utils/formatTime'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { useUserStore } from '@/store/modules/user'
 import DailyStatistics from './components/DailyStatistics.vue'
 import NonProductionEfficiency from './components/NonProductionEfficiency.vue'
@@ -10,7 +11,9 @@ defineOptions({
 })
 
 const route = useRoute()
-const deptId = useUserStore().getUser.deptId
+const pageRouteName = route.name
+const TOP_DEPT_ID = 163
+const deptId = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 interface Query {
   pageNo: number
@@ -26,7 +29,7 @@ const id = deptId
 const createDefaultQuery = (): Query => ({
   pageNo: 1,
   pageSize: 10,
-  deptId: 163,
+  deptId,
   contractName: '',
   taskName: '',
   createTime: [
@@ -65,6 +68,8 @@ const getRouteDefaultView = () => {
 }
 
 const syncQueryFromRoute = () => {
+  if (route.name !== pageRouteName) return
+
   const createTime = getRouteCreateTime()
 
   if (createTime) {
@@ -108,9 +113,10 @@ watch(
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_44px_1fr] gap-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :deptId="id"
-      :top-id="163"
+      :dept-id="id"
+      :top-id="TOP_DEPT_ID"
       v-model="query.deptId"
+      :init-select="false"
       @node-click="handleDeptNodeClick"
       class="row-span-3" />
     <el-form

+ 6 - 3
src/views/pms/iotrhdailyreport/approval.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRhDailyReportApi } from '@/api/pms/iotrhdailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
 import dayjs from 'dayjs'
@@ -9,7 +10,8 @@ import RhTable from './rh-table.vue'
 
 defineOptions({ name: 'IotRhDailyReportApproval' })
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 157
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -109,9 +111,10 @@ onMounted(() => {
     class="grid grid-cols-[auto_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
   >
     <DeptTreeSelect
-      :top-id="157"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2"
     />

+ 8 - 6
src/views/pms/iotrhdailyreport/fill.vue

@@ -2,6 +2,7 @@
 import { IotRhDailyReportApi } from '@/api/pms/iotrhdailyreport'
 import { useUserStore } from '@/store/modules/user'
 import { rangeShortcuts } from '@/utils/formatTime'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { useDebounceFn } from '@vueuse/core'
 import dayjs from 'dayjs'
 import rhForm from './rh-form.vue'
@@ -9,9 +10,9 @@ import RhTable from './rh-table.vue'
 
 defineOptions({ name: 'IotRhDailyReportFill' })
 
-const id = useUserStore().getUser.deptId
-
-const deptId = id
+const TOP_DEPT_ID = 157
+const userDeptId = Number(useUserStore().getUser.deptId)
+const defaultDeptId = resolveDailyReportDeptId(userDeptId, TOP_DEPT_ID)
 
 interface Query {
   pageNo: number
@@ -25,7 +26,7 @@ interface Query {
 const initQuery: Query = {
   pageNo: 1,
   pageSize: 10,
-  deptId: id,
+  deptId: defaultDeptId,
   createTime: [
     ...rangeShortcuts[2].value().map((item) => dayjs(item).format('YYYY-MM-DD HH:mm:ss'))
   ]
@@ -109,9 +110,10 @@ onMounted(() => {
     class="grid grid-cols-[auto_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
   >
     <DeptTreeSelect
-      :top-id="157"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="defaultDeptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2"
     />

+ 15 - 4
src/views/pms/iotrhdailyreport/index.vue

@@ -4,6 +4,7 @@ import {
   type IotRhDailyReportTotalWorkloadVO
 } from '@/api/pms/iotrhdailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import download from '@/utils/download'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
@@ -15,10 +16,12 @@ import RhTable from './rh-table.vue'
 defineOptions({ name: 'IotRhDailyReport' })
 
 const route = useRoute()
+const pageRouteName = route.name
 
 const message = useMessage()
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 157
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -57,6 +60,8 @@ const getRouteCreateTime = () => {
 }
 
 const syncQueryFromRoute = () => {
+  if (route.name !== pageRouteName) return
+
   query.value.deptId = route.query.deptId ? Number(route.query.deptId) : id
   query.value.createTime = getRouteCreateTime()
 }
@@ -276,12 +281,18 @@ const openUnfilledDialog = () => {
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_auto_1fr_auto] gap-x-4 gap-y-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <!-- <div class="p-4 bg-white dark:bg-[#1d1e1f] shadow rounded-lg row-span-4">
-      <DeptTreeSelect :top-id="157" :deptId="deptId" v-model="query.deptId" :show-title="false" />
+      <DeptTreeSelect
+        :top-id="TOP_DEPT_ID"
+        :dept-id="deptId"
+        v-model="query.deptId"
+        :init-select="false"
+        :show-title="false" />
     </div> -->
     <DeptTreeSelect
-      :top-id="157"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-4" />
     <el-form

+ 9 - 3
src/views/pms/iotrhdailyreport/summary.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
 import dayjs from 'dayjs'
 import { rangeShortcuts } from '@/utils/formatTime'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { useUserStore } from '@/store/modules/user'
 import DailyStatistics from './components/DailyStatistics.vue'
 import NonProductionEfficiency from './components/NonProductionEfficiency.vue'
@@ -10,7 +11,9 @@ defineOptions({
 })
 
 const route = useRoute()
-const deptId = useUserStore().getUser.deptId
+const pageRouteName = route.name
+const TOP_DEPT_ID = 157
+const deptId = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 interface Query {
   pageNo: number
@@ -65,6 +68,8 @@ const getRouteDefaultView = () => {
 }
 
 const syncQueryFromRoute = () => {
+  if (route.name !== pageRouteName) return
+
   const createTime = getRouteCreateTime()
 
   if (createTime) {
@@ -108,9 +113,10 @@ watch(
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_44px_1fr] gap-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :deptId="id"
-      :top-id="157"
+      :dept-id="id"
+      :top-id="TOP_DEPT_ID"
       v-model="query.deptId"
+      :init-select="false"
       @node-click="handleDeptNodeClick"
       class="row-span-3" />
     <el-form

+ 6 - 3
src/views/pms/iotrydailyreport/approval.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRyDailyReportApi } from '@/api/pms/iotrydailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
 import dayjs from 'dayjs'
@@ -9,7 +10,8 @@ import RyTable from './ry-table.vue'
 
 defineOptions({ name: 'IotRyDailyReportApproval' })
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -111,9 +113,10 @@ onMounted(() => {
     class="grid grid-cols-[auto_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
   >
     <DeptTreeSelect
-      :top-id="158"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2"
     />

+ 8 - 4
src/views/pms/iotrydailyreport/equipment.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRyImproveDailyReportApi } from '@/api/pms/iotryimprovedailyreport'
 import { useTableComponents } from '@/components/ZmTable/useTableComponents'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import dayjs from 'dayjs'
 import EquipmentForm from './components/equipment-form.vue'
 import { useUserStore } from '../../../store/modules/user.js'
@@ -27,7 +28,8 @@ interface Query {
   createTime?: string[]
 }
 
-const deptId = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const deptId = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 const loading = ref(false)
 const { ZmTable, ZmTableColumn } = useTableComponents<ReportRow>()
 const formRef = ref()
@@ -35,7 +37,7 @@ const formVisible = ref(false)
 const total = ref(0)
 
 const query = ref<Query>({
-  deptId: undefined,
+  deptId,
   pageNo: 1,
   pageSize: 10,
   createTime: undefined
@@ -61,6 +63,7 @@ function handleQuery() {
 
 function resetQuery() {
   query.value = {
+    deptId,
     pageNo: 1,
     pageSize: 10,
     createTime: undefined
@@ -113,9 +116,10 @@ onMounted(() => {
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_1fr] gap-x-4 gap-y-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :top-id="158"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2" />
 

+ 6 - 3
src/views/pms/iotrydailyreport/fill.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRyDailyReportApi } from '@/api/pms/iotrydailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
 import dayjs from 'dayjs'
@@ -9,7 +10,8 @@ import RyTable from './ry-table.vue'
 
 defineOptions({ name: 'IotRyDailyReportFill' })
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -111,9 +113,10 @@ onMounted(() => {
     class="grid grid-cols-[auto_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
   >
     <DeptTreeSelect
-      :top-id="158"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2"
     />

+ 9 - 3
src/views/pms/iotrydailyreport/index.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRyDailyReportApi } from '@/api/pms/iotrydailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import download from '@/utils/download'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
@@ -13,10 +14,12 @@ defineOptions({ name: 'IotRyDailyReport' })
 const { t } = useI18n()
 
 const route = useRoute()
+const pageRouteName = route.name
 
 const message = useMessage()
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -57,6 +60,8 @@ const getRouteCreateTime = () => {
 }
 
 const syncQueryFromRoute = () => {
+  if (route.name !== pageRouteName) return
+
   query.value.deptId = route.query.deptId ? Number(route.query.deptId) : id
   query.value.createTime = getRouteCreateTime()
   query.value.projectClassification = route.query.projectClassification
@@ -165,9 +170,10 @@ function handleOpenForm(id: number, type: 'edit' | 'readonly') {
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_1fr_auto] gap-x-4 gap-y-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :top-id="158"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-3" />
     <!-- <div class="p-4 bg-white dark:bg-[#1d1e1f] shadow rounded-lg row-span-3"> </div> -->

+ 7 - 4
src/views/pms/iotrydailyreport/summary.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
 import dayjs from 'dayjs'
 import { rangeShortcuts } from '@/utils/formatTime'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { useUserStore } from '@/store/modules/user'
 import DailyStatistics from './components/DailyStatistics.vue'
 import NonProductionEfficiency from './components/NonProductionEfficiency.vue'
@@ -9,7 +10,8 @@ defineOptions({
   name: 'IotRyDailyReportSummary'
 })
 
-const deptId = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const deptId = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 interface Query {
   pageNo: number
@@ -26,7 +28,7 @@ const id = deptId
 const createDefaultQuery = (): Query => ({
   pageNo: 1,
   pageSize: 10,
-  deptId: 158,
+  deptId,
   contractName: '',
   taskName: '',
   createTime: [
@@ -61,9 +63,10 @@ const resetQuery = () => {
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_44px_1fr] gap-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :deptId="id"
-      :top-id="158"
+      :dept-id="id"
+      :top-id="TOP_DEPT_ID"
       v-model="query.deptId"
+      :init-select="false"
       @node-click="handleDeptNodeClick"
       class="row-span-3" />
     <el-form

+ 6 - 3
src/views/pms/iotrydailyreport/xapproval.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRyDailyReportApi } from '@/api/pms/iotrydailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
 import dayjs from 'dayjs'
@@ -9,7 +10,8 @@ import RyXjTable from './ry-xj-table.vue'
 
 defineOptions({ name: 'IotRyDailyReportApproval' })
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -111,9 +113,10 @@ onMounted(() => {
     class="grid grid-cols-[auto_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
   >
     <DeptTreeSelect
-      :top-id="158"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2"
     />

+ 6 - 3
src/views/pms/iotrydailyreport/xfill.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRyDailyReportApi } from '@/api/pms/iotrydailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
 import dayjs from 'dayjs'
@@ -9,7 +10,8 @@ import RyXjTable from './ry-xj-table.vue'
 
 defineOptions({ name: 'IotRyDailyReportFill' })
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -111,9 +113,10 @@ onMounted(() => {
     class="grid grid-cols-[auto_1fr] grid-rows-[62px_1fr] gap-4 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]"
   >
     <DeptTreeSelect
-      :top-id="158"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-2"
     />

+ 9 - 3
src/views/pms/iotrydailyreport/xjindex.vue

@@ -1,6 +1,7 @@
 <script lang="ts" setup>
 import { IotRyDailyReportApi } from '@/api/pms/iotrydailyreport'
 import { useUserStore } from '@/store/modules/user'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import download from '@/utils/download'
 import { rangeShortcuts } from '@/utils/formatTime'
 import { useDebounceFn } from '@vueuse/core'
@@ -13,10 +14,12 @@ defineOptions({ name: 'IotRyXjDailyReport' })
 const { t } = useI18n()
 
 const route = useRoute()
+const pageRouteName = route.name
 
 const message = useMessage()
 
-const id = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const id = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 const deptId = id
 
@@ -57,6 +60,8 @@ const getRouteCreateTime = () => {
 }
 
 const syncQueryFromRoute = () => {
+  if (route.name !== pageRouteName) return
+
   query.value.deptId = route.query.deptId ? Number(route.query.deptId) : id
   query.value.createTime = getRouteCreateTime()
   query.value.projectClassification = route.query.projectClassification
@@ -164,9 +169,10 @@ function handleOpenForm(id: number, type: 'edit' | 'readonly') {
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_1fr_auto] gap-x-4 gap-y-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :top-id="158"
-      :deptId="deptId"
+      :top-id="TOP_DEPT_ID"
+      :dept-id="deptId"
       v-model="query.deptId"
+      :init-select="false"
       :show-title="false"
       class="row-span-3" />
 

+ 7 - 4
src/views/pms/iotrydailyreport/xsummary.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
 import dayjs from 'dayjs'
 import { rangeShortcuts } from '@/utils/formatTime'
+import { resolveDailyReportDeptId } from '@/utils/dailyReportDept'
 import { useUserStore } from '@/store/modules/user'
 import XjDailyStatistics from './components/XjDailyStatistics.vue'
 import XjNonProductionEfficiency from './components/XjNonProductionEfficiency.vue'
@@ -9,7 +10,8 @@ defineOptions({
   name: 'IotRyXjDailyReportSummary'
 })
 
-const deptId = useUserStore().getUser.deptId
+const TOP_DEPT_ID = 158
+const deptId = resolveDailyReportDeptId(useUserStore().getUser.deptId, TOP_DEPT_ID)
 
 interface Query {
   pageNo: number
@@ -26,7 +28,7 @@ const id = deptId
 const createDefaultQuery = (): Query => ({
   pageNo: 1,
   pageSize: 10,
-  deptId: 158,
+  deptId,
   contractName: '',
   taskName: '',
   createTime: [
@@ -61,9 +63,10 @@ const resetQuery = () => {
   <div
     class="grid grid-cols-[auto_1fr] grid-rows-[48px_44px_1fr] gap-3 h-[calc(100vh-20px-var(--top-tool-height)-var(--tags-view-height)-var(--app-footer-height))]">
     <DeptTreeSelect
-      :deptId="id"
-      :top-id="158"
+      :dept-id="id"
+      :top-id="TOP_DEPT_ID"
       v-model="query.deptId"
+      :init-select="false"
       @node-click="handleDeptNodeClick"
       class="row-span-3" />
     <el-form