Browse Source

qhse看板调整

yanghao 5 days ago
parent
commit
8ce3972561

+ 2 - 0
src/views/pms/constructionDailyReport/components/report-config.ts

@@ -42,6 +42,8 @@ export interface ConstructionDailyReportQuery {
   pageNo: number
   pageSize: number
   deptId?: number
+  projectDeptId?: number
+  teamId?: number
   projectName?: string
   wellName?: string
   createTime?: string[]

+ 53 - 6
src/views/pms/constructionDailyReport/index.vue

@@ -14,20 +14,58 @@ defineOptions({ name: 'ConstructionDailyReport' })
 
 const userStore = useUserStore()
 const deptId = userStore.getUser.deptId
+const route = useRoute()
+
+const parseQueryNumber = (value: unknown) => {
+  if (Array.isArray(value)) {
+    return parseQueryNumber(value[0])
+  }
+  if (value === undefined || value === null || value === '') {
+    return undefined
+  }
+  const parsedValue = Number(value)
+  return Number.isNaN(parsedValue) ? undefined : parsedValue
+}
 
-const initQuery: ConstructionDailyReportQuery = {
+const resolveCreateTimeFromRoute = () => {
+  const createTime = route.query.createTime
+  if (Array.isArray(createTime)) {
+    const values = createTime.filter((item): item is string => typeof item === 'string')
+    return values.length === 2 ? values : undefined
+  }
+  if (typeof createTime === 'string') {
+    const values = createTime.split(',').filter(Boolean)
+    return values.length === 2 ? values : undefined
+  }
+  return undefined
+}
+
+const createDefaultQuery = (): ConstructionDailyReportQuery => ({
   pageNo: 1,
   pageSize: 10,
-  deptId
-}
+  deptId: parseQueryNumber(route.query.deptId) ?? deptId,
+  projectDeptId: parseQueryNumber(route.query.projectDeptId),
+  teamId: parseQueryNumber(route.query.teamId),
+  createTime: resolveCreateTimeFromRoute()
+})
 
-const query = ref<ConstructionDailyReportQuery>({ ...initQuery })
+const query = ref<ConstructionDailyReportQuery>(createDefaultQuery())
 const list = ref<ConstructionDailyReportRow[]>([])
 const total = ref(0)
 const loading = ref(false)
 const visible = ref(false)
 const formRef = ref<InstanceType<typeof ConstructionDailyReportDrawer>>()
-const route = useRoute()
+
+function syncQueryFromRoute() {
+  const nextQuery = createDefaultQuery()
+  query.value = {
+    ...query.value,
+    deptId: nextQuery.deptId,
+    projectDeptId: nextQuery.projectDeptId,
+    teamId: nextQuery.teamId,
+    createTime: nextQuery.createTime
+  }
+}
 
 const loadList = useDebounceFn(async () => {
   loading.value = true
@@ -48,7 +86,7 @@ function handleQuery(setPage = true) {
 }
 
 function resetQuery() {
-  query.value = { ...initQuery }
+  query.value = createDefaultQuery()
   handleQuery()
 }
 
@@ -69,6 +107,8 @@ function handleOpenForm(id: number, type: 'edit' | 'readonly') {
 watch(
   [
     () => query.value.deptId,
+    () => query.value.projectDeptId,
+    () => query.value.teamId,
     () => query.value.projectName,
     () => query.value.wellName,
     () => query.value.createTime
@@ -77,6 +117,13 @@ watch(
   { immediate: true }
 )
 
+watch(
+  () => [route.query.deptId, route.query.projectDeptId, route.query.teamId, route.query.createTime],
+  () => {
+    syncQueryFromRoute()
+  }
+)
+
 onMounted(() => {
   if (route.query.id) {
     handleOpenForm(Number(route.query.id), 'edit')

+ 42 - 1
src/views/pms/fiveDailyReportSummary/index.vue

@@ -9,6 +9,7 @@ import { useTableComponents } from '@/components/ZmTable/useTableComponents'
 defineOptions({ name: 'FiveDailyReportSummary' })
 
 const route = useRoute()
+const router = useRouter()
 const defaultDeptId = 388
 const { ZmTable, ZmTableColumn } = useTableComponents()
 
@@ -183,6 +184,31 @@ function formatCellValue(row, prop) {
   return value === null || value === undefined || value === '' ? '-' : value
 }
 
+function handleDeptCellClick(row) {
+  const rowType = String(row?.type || selectedDeptType.value || '1')
+  const targetQuery = {
+    deptId: String(query.value.deptId || defaultDeptId),
+    createTime: Array.isArray(query.value.createTime) ? query.value.createTime : undefined,
+    projectDeptId: undefined,
+    teamId: undefined
+  }
+
+  if (rowType === '2' && row?.projectDeptId) {
+    targetQuery.projectDeptId = String(row.projectDeptId)
+  } else if (row?.teamId) {
+    targetQuery.teamId = String(row.teamId)
+  } else if (row?.projectDeptId) {
+    targetQuery.projectDeptId = String(row.projectDeptId)
+  } else {
+    return
+  }
+
+  router.push({
+    name: 'ConstructionDailyReport',
+    query: targetQuery
+  })
+}
+
 syncQueryFromRoute()
 
 watch(
@@ -291,7 +317,17 @@ watch(
                 :min-width="180"
                 show-overflow-tooltip
                 cover-formatter
-                :real-value="(row) => formatCellValue(row, 'deptDisplayName')" />
+                :real-value="(row) => formatCellValue(row, 'deptDisplayName')">
+                <template #default="{ row }">
+                  <el-button
+                    link
+                    type="primary"
+                    class="summary-table-link"
+                    @click.stop="handleDeptCellClick(row)">
+                    {{ formatCellValue(row, 'deptDisplayName') }}
+                  </el-button>
+                </template>
+              </ZmTableColumn>
               <ZmTableColumn
                 v-for="column in tableColumns.slice(1)"
                 :key="column.prop"
@@ -421,6 +457,11 @@ watch(
   min-height: 0;
 }
 
+.summary-table-link {
+  padding: 0;
+  font-weight: 500;
+}
+
 @media (max-width: 1600px) {
   .summary-card__value {
     font-size: 24px;