刘洋 1 year ago
parent
commit
ea36f37b4e

+ 23 - 15
src/components/shared/message/MessageList.vue

@@ -47,22 +47,23 @@
             v-html="currentMessage?.content"
           ></pre> -->
           <div ref="historyMsgWrap" class="history-box scroll-auto">
-            <div
-              v-for="(message, index) in historyReverse"
-              :key="index"
-              class="m-b-base one-message"
-              :class="{
-                'other-person': message.sendUserId != mainStore?.myUserInfo?.id,
-                'self-person': message.sendUserId == mainStore?.myUserInfo?.id,
-              }"
-            >
-              <div class="m-b-mini message-header">
-                <span class="m-r-base user-name"
-                  >{{ message.sendUserName }}{{ message.sendUserId == mainStore?.myUserInfo?.id ? '(我)' : '' }}</span
-                >
-                <span class="message-time">{{ message.sendTime }}</span>
+            <div v-for="(message, index) in historyReverse" :key="index" class="message-item-box m-b-base">
+              <div
+                class="one-message"
+                :class="{
+                  'other-person': message.sendUserId != mainStore?.myUserInfo?.id,
+                  'self-person': message.sendUserId == mainStore?.myUserInfo?.id,
+                }"
+              >
+                <div class="m-b-mini message-header">
+                  <span class="m-r-base user-name"
+                    >{{ message.sendUserName
+                    }}{{ message.sendUserId == mainStore?.myUserInfo?.id ? '(我)' : '' }}</span
+                  >
+                  <span class="message-time">{{ message.sendTime }}</span>
+                </div>
+                <div class="history-message-info-content" @click="onContentClick" v-html="message.content"></div>
               </div>
-              <div class="history-message-info-content" @click="onContentClick" v-html="message.content"></div>
             </div>
           </div>
         </div>
@@ -378,6 +379,13 @@ onUnmounted(() => {
         display: block;
         clear: both;
       }
+      .message-item-box {
+        &:after {
+          content: '';
+          display: block;
+          clear: both;
+        }
+      }
       .one-message {
         max-width: 75%;
         .history-message-info-content {

+ 5 - 5
src/hooks/useTableCheck.ts

@@ -150,12 +150,12 @@ const useTableCheck = <T extends TableDataType<InputDataType>>(
     console.log('pageNumber.value', pageNumber.value)
     if (totalCount.value !== null && pageSize.value !== null) {
       if (pageNumber.value * pageSize.value + 1 > totalCount.value) {
-        console.log('当前页已是最后一页: from useTableCheck')
-        ElMessage.warning('当前页已是最后一页')
+        // console.log('当前页已是最后一页: from useTableCheck')
+        // ElMessage.warning('当前页已是最后一页')
       }
     } else {
       if (apiNotByPage) {
-        ElMessage.warning('当前页已是最后一页')
+        // ElMessage.warning('当前页已是最后一页')
       } else {
         bus.emit('needToNextPageFromUseTableCheck')
       }
@@ -167,10 +167,10 @@ const useTableCheck = <T extends TableDataType<InputDataType>>(
     console.log('pageSize.value:', pageSize.value)
     console.log('pageNumber.value', pageNumber.value)
     if (totalCount.value !== null && pageSize.value !== null) {
-      ElMessage.warning('当前页已是第一页')
+      // ElMessage.warning('当前页已是第一页')
     } else {
       if (apiNotByPage) {
-        ElMessage.warning('当前页已是第一页')
+        // ElMessage.warning('当前页已是第一页')
       } else {
         bus.emit('needToPrevPageFromUseTableCheck')
       }

+ 72 - 31
src/modules/analysis/personnel-statistics/components/StatisticsPersonnel.vue

@@ -96,6 +96,7 @@ import useFetch from '@/hooks/useFetch'
 import useTableCheck from '@/hooks/useTableCheck'
 import RightKeyMenu from './RightKeyMenu.vue'
 import useMainStore from '@/store/main'
+import { cloneDeep } from 'lodash-es'
 import type { EChartsOption } from 'echarts'
 import type { ExtractApiResponse, ExtractApiParams } from '@/api/api'
 import type { EpTableColumn } from 'global-type'
@@ -324,42 +325,83 @@ const myDbClick = (row: any) => {
   }
 }
 const sortTableData = ref<any[]>([])
-const originalTableData = ref<any[]>([])
-const sortChange = (params: any) => {
-  console.log('params:', params)
-  const { column, prop, order } = params
-  if (order === 'ascending') {
-    sortTableData.value.sort((a: any, b: any) => {
-      if (a.markingGroupNumber == 0) {
-        return -1
-      } else if (b.markingGroupNumber == 0) {
-        return 1
+const sortByCutGroup = (prop: string, order: string) => {
+  let arr = cloneDeep(originalTableData.value)
+  let groupNodeIndexes: any = arr
+    .map((item: any, index: number) => {
+      if (!item.markerId) {
+        return index
       } else {
-        if (typeof a[prop] === 'string') {
-          let aa = a[prop] || '',
-            bb = b[prop] || ''
-          return aa.localeCompare(bb)
-        } else {
-          return a[prop] - b[prop]
-        }
+        return null
       }
     })
-  } else if (order === 'descending') {
-    sortTableData.value.sort((a: any, b: any) => {
-      if (a.markingGroupNumber == 0) {
-        return -1
-      } else if (b.markingGroupNumber == 0) {
-        return 1
-      } else {
+    .filter((item: any) => item !== null)
+  console.log('groupNodeIndexes', groupNodeIndexes)
+  let newArr = []
+  let targetIndex = 0
+  for (let i = 0; i < groupNodeIndexes.length; i++) {
+    if (i == 0) {
+      newArr.push(arr[groupNodeIndexes[i]])
+    } else {
+      let subArr = arr.slice(targetIndex + 1, groupNodeIndexes[i])
+      subArr.sort((a: any, b: any) => {
         if (typeof a[prop] === 'string') {
           let aa = a[prop] || '',
             bb = b[prop] || ''
-          return bb.localeCompare(aa)
+          return order === 'ascending' ? aa.localeCompare(bb) : bb.localeCompare(aa)
         } else {
-          return b[prop] - a[prop]
+          return order === 'ascending' ? a[prop] - b[prop] : b[prop] - a[prop]
         }
+      })
+      newArr.push(...subArr)
+      newArr.push(arr[groupNodeIndexes[i]])
+      targetIndex = groupNodeIndexes[i]
+      if (i == groupNodeIndexes.length - 1) {
+        newArr.push(...arr.slice(targetIndex + 1))
       }
-    })
+    }
+  }
+  sortTableData.value = newArr
+}
+const originalTableData = ref<any[]>([])
+const sortChange = (params: any) => {
+  console.log('params:', params)
+  const { column, prop, order } = params
+  if (order === 'ascending') {
+    sortByCutGroup(prop, order)
+    // sortTableData.value.sort((a: any, b: any) => {
+    //   if (a.markingGroupNumber == 0) {
+    //     return -1
+    //   } else if (b.markingGroupNumber == 0) {
+    //     return 1
+    //   } else {
+    //     if (typeof a[prop] === 'string') {
+    //       let aa = a[prop] || '',
+    //         bb = b[prop] || ''
+    //       return aa.localeCompare(bb)
+    //     } else {
+    //       return a[prop] - b[prop]
+    //     }
+    //   }
+    // })
+  } else if (order === 'descending') {
+    sortByCutGroup(prop, order)
+
+    // sortTableData.value.sort((a: any, b: any) => {
+    //   if (a.markingGroupNumber == 0) {
+    //     return -1
+    //   } else if (b.markingGroupNumber == 0) {
+    //     return 1
+    //   } else {
+    // if (typeof a[prop] === 'string') {
+    //   let aa = a[prop] || '',
+    //     bb = b[prop] || ''
+    //   return bb.localeCompare(aa)
+    // } else {
+    //   return b[prop] - a[prop]
+    // }
+    //   }
+    // })
   } else if (order == null) {
     sortTableData.value = JSON.parse(JSON.stringify(originalTableData.value))
   }
@@ -372,12 +414,11 @@ function initSortTableData(sortKey?: any) {
       data.unshift(last)
     }
     sortTableData.value = JSON.parse(JSON.stringify(data))
+
+    originalTableData.value = JSON.parse(JSON.stringify(data))
     if (sortKey) {
-      sortTableData.value.sort((a: any, b: any) => {
-        return b[sortKey] - a[sortKey]
-      })
+      sortByCutGroup(sortKey, 'descending')
     }
-    originalTableData.value = JSON.parse(JSON.stringify(data))
   }
 }
 initSortTableData()