فهرست منبع

视图跳转数据筛选

zhaoke 1 سال پیش
والد
کامیت
8ace193c1b
3فایلهای تغییر یافته به همراه264 افزوده شده و 40 حذف شده
  1. 196 14
      src/views/newFlightView/index.vue
  2. 64 22
      src/views/newQuery/components/table.vue
  3. 4 4
      src/views/newTransfer/index.vue

+ 196 - 14
src/views/newFlightView/index.vue

@@ -19,18 +19,20 @@
           <el-descriptions :column="2">
             <el-descriptions-item label="起飞机场简称">{{ infoObj.takeoff_airport_name }}</el-descriptions-item>
             <el-descriptions-item label="起飞机场三字码">{{ infoObj.outAirport }}</el-descriptions-item>
-            <el-descriptions-item :span="2" label="日期">{{ formatTime(infoObj.actualTakeOffTime,infoObj.estimateTakeOffTime,infoObj.scheduleTakeOffTime) }}</el-descriptions-item>
             <el-descriptions-item label="登机口">{{ infoObj.gateCd }}</el-descriptions-item>
             <el-descriptions-item label="停机位"> {{ infoObj.depstandCd }}</el-descriptions-item>
+            <el-descriptions-item :span="2" label="计划起飞时间">{{ formatTime(infoObj.scheduleTakeOffTime) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" label="实际起飞时间">{{ formatTime(infoObj.actualTakeOffTime) }}</el-descriptions-item>
           </el-descriptions>
         </div>
         <div class="newFlightView-left-top-list">
           <el-descriptions :column="2">
             <el-descriptions-item label="降落机场简称">{{ infoObj.target_airport_name }}</el-descriptions-item>
             <el-descriptions-item label="降落机场三字码">{{ infoObj.landAirport }}</el-descriptions-item>
-            <el-descriptions-item :span="2" label="日期">{{ formatTime(infoObj.actualLandInTime,infoObj.estimateLandInTime,infoObj.scheduleLandInTime) }}</el-descriptions-item>
             <el-descriptions-item label="提取转盘">{{infoObj.arrcarouselCd}}</el-descriptions-item>
             <el-descriptions-item label="停机位"> {{ infoObj.arrstandCd }}</el-descriptions-item>
+            <el-descriptions-item :span="2" label="计划降落时间">{{ formatTime(infoObj.scheduleLandInTime) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" label="实际降落时间">{{ formatTime(infoObj.actualLandInTime) }}</el-descriptions-item>
           </el-descriptions>
         </div>
         <div class="newFlightView-left-top-list">
@@ -51,10 +53,7 @@
         <div class="newFlightView-right-top-left flex-wrap">
           <div class="manageTitle">航班行李列表</div>
           <div class="newFlightView-right-top-left-select">快捷筛选
-            <el-select style="margin-left: 8px;border-radius: 4px;" size="small" v-model="value" filterable placeholder="请选择">
-              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
-              </el-option>
-            </el-select>
+            <el-cascader v-model="selectedFilter" :options="fastFilterOptions" :props="{ expandTrigger: 'hover', checkStrictly: true }" size="small" placeholder="无" clearable />
           </div>
         </div>
         <div class="newFlightView-right-top-right">
@@ -63,7 +62,7 @@
         </div>
       </div>
       <div class="newFlightView-right-bottom">
-        <Table :tableTag="table2" ref="table" :btnStyle="{top:'-52px'}" :istableCol="true" tableName="航班行李列表" />
+        <Table :tableTag="table2" ref="table" :fast-filter="fastFilter" :btnStyle="{top:'-52px'}" :istableCol="true" tableName="航班行李列表" :pageSize="999" @tableLoad="tableLoad" />
       </div>
     </div>
   </div>
@@ -93,7 +92,111 @@ export default {
       table2: {},
       showObj: {},
       deArrs: [],
-      deArrsNum: []
+      deArrsNum: [],
+      fastFilterOptions: [
+        {
+          label: '中转进航班',
+          value: 'inflightNo',
+          children: []
+        },
+        {
+          label: '中转出航班',
+          value: 'transferFlightNO',
+          children: []
+        }
+      ],
+      selectedFilter: [],
+      viewClassName: [
+        {
+          label: '值机',
+          value: 'check_in_baggage_number'
+        },
+        {
+          label: '未激活',
+          value: 'NO_activate_number'
+        },
+        {
+          label: '预计装载',
+          value: 'estimated_load_number'
+        },
+        {
+          label: '安检',
+          value: 'screened_number'
+        },
+        {
+          label: '分拣',
+          value: 'sorted_number'
+        },
+        {
+          label: '装车',
+          value: 'loaded_number'
+        },
+        {
+          label: '装机',
+          value: 'onaiecraft_number'
+        },
+        {
+          label: '待翻检',
+          value: 'NO_check_number'
+        },
+        {
+          label: '已翻减',
+          value: 'checked_number'
+        },
+        {
+          label: '取消托运',
+          value: 'cancel_consignment_number'
+        },
+        {
+          label: '无bsm',
+          value: 'NO_BSM_number'
+        },
+        {
+          label: '中转行李',
+          value: 'transfer_baggage_number'
+        }
+      ]
+    }
+  },
+  computed: {
+    fastFilter () {
+      const [key, value] = this.selectedFilter
+      if (!key) {
+        return () => true
+      }
+      return row => {
+        switch (key) {
+          case 'inflightNo':
+          case 'transferFlightNO':
+            return value ? row[key] === value : (row[key] ?? '') !== ''
+          case 'check_in_baggage_number':
+            return row['No_BSM'] == 0
+          case 'NO_activate_number':
+            return row['activeState'] == 1
+          case 'estimated_load_number':
+            return row['dataState'] != 'DEL' && row['activeState'] != 1
+          case 'screened_number':
+            return row['securityInspectionResults']
+          case 'sorted_number':
+            return row['sorting_time']
+          case 'loaded_number':
+            return row['loading_time'] && (row['abnormalType'] == 'OFF' || !row['abnormalType'])
+          case 'onaiecraft_number':
+            return row['installation_time']
+          case 'NO_check_number':
+            return row['dataState'] == 'DEL' && row['loading_time'] && (row['abnormalType'] != 'OFF' || !row['abnormalType'])
+          case 'checked_number':
+            return row['dataState'] == 'DEL' && row['abnormalType'] == 'OFF'
+          case 'cancel_consignment_number':
+            return row['dataState'] == 'DEL'
+          case 'NO_BSM_number':
+            return row['No_BSM'] == 1
+          case 'transfer_baggage_number':
+            return row['inflightNo'] && row['dataState'] != 'DEL'
+          default:
+            return (row[key] ?? '') !== ''
+        }
+      }
     }
   },
   async created () {
@@ -117,7 +220,37 @@ export default {
         k2: 'departure_flights_date'
       }
     ]
-    const nq = this.formatParams(np, query)
+    const nq = this.formatParams(np, { ...query })
+    const filterMap = {
+      Inbound_flight_number: 'inflightNo',
+      departure_flights_number: 'transferFlightNO'
+    }
+    Object.entries(nq).forEach(([key, value]) => {
+      if (
+        ![
+          'carrierFlights',
+          'carrierFlightsDate',
+          'outAirport',
+          'landAirport',
+        ].includes(key)
+      ) {
+        if (filterMap[key]) {
+          this.selectedFilter = [filterMap[key], value]
+        }
+        delete nq[key]
+      }
+    })
+    let tableKey = null
+    Object.keys({ ...query }).forEach((key) => {
+      const findKey = this.viewClassName.filter(item => item.value === key)
+      if (findKey?.length) {
+        tableKey = [...findKey]
+      }
+    })
+    if (tableKey?.length) {
+      const { value } = tableKey[0]
+      this.selectedFilter = [value]
+    }
     const { carrierFlights, carrierFlightsDate } = nq
     this.flightObj = nq
     this.dataContent = nq
@@ -164,7 +297,7 @@ export default {
       if (arr && arr.length) {
         for (let index = 0; index < arr.length; index++) {
           const { k1, k2 } = arr[index];
-          if (query[k1] || query[k2]) {
+          if (query[k2]) {
             query.carrierFlights = query[k1]
             query.carrierFlightsDate = query[k2]
             delete query[k1]
@@ -184,8 +317,8 @@ export default {
       }
     },
     // 显示日期
-    formatTime (t1, t2, t3) {
-      return t1 ? t1 : t2 ? t2 : t3 ? t3 : ''
+    formatTime (datetime) {
+      return datetime?.replace('T', ' ') ?? ''
     },
     // 导出
     exportHandler (refName, tableName) {
@@ -226,6 +359,55 @@ export default {
           this.infoObj = res[0]
         }
       }
+    },
+    // 获取行李列表后设置快捷筛选
+    tableLoad (tableData) {
+      const query = this.$route.query
+      let tableKey = null
+      Object.keys(query).forEach((key) => {
+        const findKey = this.viewClassName.filter(item => item.value === key)
+        if (findKey?.length) {
+          tableKey = [...findKey]
+        }
+      })
+      if (tableKey?.length) {
+        this.fastFilterOptions = []
+        this.fastFilterOptions = [...this.viewClassName].map(item => ({
+          label: item.label,
+          value: item.value
+        }))
+      }
+      else {
+        this.setFastFilterOptions(tableData)
+      }
+    },
+    setFastFilterOptions (tableData) {
+      const inFlightNOList = new Set()
+      const transferFlightNOList = new Set()
+      tableData.forEach(item => {
+        item['inflightNo'] && inFlightNOList.add(item['inflightNo'])
+        item['transferFlightNO'] && transferFlightNOList.add(item['transferFlightNO'])
+      })
+      this.fastFilterOptions.splice(
+        this.fastFilterOptions.length - 2,
+        2,
+        {
+          label: '中转进航班',
+          value: 'inflightNo',
+          children: [...inFlightNOList].map(value => ({
+            label: value,
+            value
+          }))
+        },
+        {
+          label: '中转出航班',
+          value: 'transferFlightNO',
+          children: [...transferFlightNOList].map(value => ({
+            label: value,
+            value
+          }))
+        }
+      )
     }
   }
 }
@@ -241,7 +423,7 @@ export default {
     width: 408px;
     margin-right: 8px;
     &-top {
-      height: 505px;
+      height: 575px;
       background-color: #fff;
       &-top {
         padding: 25px 16px;
@@ -282,7 +464,7 @@ export default {
       }
     }
     &-bottom {
-      height: calc(100% - 515px);
+      height: calc(100% - 575px - 10px);
       margin-top: 8px;
     }
   }

+ 64 - 22
src/views/newQuery/components/table.vue

@@ -112,6 +112,10 @@ export default {
       type: Boolean,
       default: true
     },
+    fastFilter: {
+      type: Function,
+      default: () => () => true
+    },
   },
   data () {
     return {
@@ -139,13 +143,17 @@ export default {
       tableDataSortRules: {},
       tableCath: [],
       leaveCount: 0,
+      arriveCount: 0,
       checkPath: ['/newDeparture', '/newTransfer/in', '/newTransfer/out', '/newArrival']
     }
   },
   computed: {
     // 设置表头-下拉-选中数据
+    fastFilteredTableData () {
+      return this.tableData.filter(this.fastFilter)
+    },
     dealedTableData () {
-      const filtered = this.tableData.filter(item => {
+      const filtered = this.fastFilteredTableData.filter(item => {
         let flag = true
         Object.entries(this.filterValues).forEach(([key, arr]) => {
           if (arr.length && !arr.includes(String(item[key]))) {
@@ -191,7 +199,7 @@ export default {
         this.load()
       },
       deep: true,
-    },
+    }
   },
   created () {
     if (this.AauthTable && this.AauthTable.length) {
@@ -316,20 +324,24 @@ export default {
           pageSize
         )
         if (code == 0) {
-          if (returnData.length === 0) {
-            this.page--
+          let tableData = []
+          if (returnData.length < pageSize) {
             this.noMore = true
-            this.loading = false
+            if (returnData.length === 0) {
+              this.page--
+              this.loading = false
+            }
           }
           if (this.shouldReset) {
+            tableData = [...this.tableData, ...returnData]
             this.tableData.push(...returnData)
           } else {
-            this.tableData = [...returnData]
+            tableData = [...returnData]
             this.noMore = true
           }
-          this.$emit('tableLoad', [...this.tableData])
+          this.$emit('tableLoad', [...tableData])
           setTimeout(() => {
-            this.initTableData()
+            this.initTableData(tableData)
             this.loading = false
           }, 100)
         } else {
@@ -409,8 +421,8 @@ export default {
       }
     },
     // 初始化表格
-    initTableData () {
-      this.tableDataCopy = _.cloneDeep(this.tableData)
+    initTableData (tableData) {
+      this.tableDataCopy = _.cloneDeep(tableData)
       const datas = _.cloneDeep(this.tableColsCopy)
       // const reqUts = [];
       datas.forEach(async item => {
@@ -424,17 +436,43 @@ export default {
         //   }
         // }
       })
+      const now = new Date()
       if (this.$route.path == '/newDeparture') {
         this.leaveCount = 0
-        const nTableData = [...this.tableData]
+        const nTableData = [...tableData]
         const cData = nTableData.filter(item => Number(item['NO_BSM_number']) + Number(item['check_in_baggage_number']) > 0)
         cData.forEach(item => {
-          if (item.normalState == 'DEP' || item.normalState == 'ARR') {
+          const takeOffTime = item.actualTakeOffTime || item.scheduleTakeOffTime
+          if (takeOffTime && new Date(takeOffTime) < now) {
+            item.hasTakenOff = 'Y'
             this.leaveCount++
           }
         })
         this.tableData = _.orderBy([...cData], ["scheduleTakeOffTime", "normalState"], ["asc", "desc"]);
       }
+      if (this.$route.path == '/newArrival') {
+        this.arriveCount = 0
+        const nTableData = [...tableData]
+        nTableData.forEach(item => {
+          const landingTime = item.actualLandInTime
+          if (landingTime && new Date(landingTime) < now) {
+            item.hasLanded = 'Y'
+            this.arriveCount++
+          }
+        })
+        this.tableData = _.orderBy(nTableData, ['actualLandInTime', 'normalState'], ['asc', 'desc'])
+      }
+      if (this.$route.path.startsWith('/newTransfer')) {
+        this.leaveCount = 0
+        const nTableData = [...tableData]
+        nTableData.forEach(item => {
+          if (item.departure_flights_leave_date && new Date(item.departure_flights_leave_date) < now) {
+            item.hasTakenOff = 'Y'
+            this.leaveCount++
+          }
+        })
+        this.tableData = _.orderBy(nTableData, ['departure_flights_leave_date', 'normalState'], ['asc', 'desc'])
+      }
       const dats = this.setTableFilters(this.tableData, this.tableDataFilters)
       this.tableDataFilters = _.cloneDeep(dats)
       this.tableGroup(this.tableData)
@@ -520,7 +558,8 @@ export default {
       const sums = []
       columns.forEach((column, index) => {
         if (index === 0) {
-          sums[index] = '合计:' + this.tableData.length
+          sums[index] = '合计:' + data.length
+          return
         }
         this.tableCath.forEach(p => {
           if (column.property == p.columnName && p.needCount) {
@@ -563,7 +602,7 @@ export default {
     },
     // 表格-设置单元格样式
     cellClass ({ row, column, rowIndex, columnIndex }) {
-      if (this.authBtnColName.includes(column.property)) {
+      if (this.authBtnColName.includes(column.property) && Number(row[column.property]) !== 0) {
         return 'is-click-btn'
       }
       if (this.$route.path == '/newDeparture') {
@@ -585,12 +624,15 @@ export default {
             classes.push('bgl-canceled')
           }
         }
-        if (normalState) {
-          if (normalState == 'DEP' || normalState == 'ARR') {
-            classes.push('bgl-hui')
-          }
+        // if (normalState) {
+        //   if (normalState == 'DEP' || normalState == 'ARR') {
+        //     classes.push('bgl-hui')
+        //   }
+        // }
+        if (row.hasTakenOff === 'Y' || row.hasLanded === 'Y') {
+          classes.push('bgl-hui')
         }
-        if (rowIndex === this.leaveCount - 1) {
+        if (rowIndex === this.leaveCount - 1 || rowIndex === this.arriveCount - 1) {
           classes.push("redBorder");
         }
       }
@@ -605,20 +647,20 @@ export default {
         )[0]
         if (clickBtn) {
           const { open_method, route_info, pass_parameters, relation_data } = clickBtn
-          if (open_method == 2) {
+          if (Number(open_method) === 2 && Number(row[relation_data]) !== 0) {
             if (pass_parameters) {
               const query = pass_parameters.split(',')
               const obj = {}
               query.forEach(key => {
                 obj[key] = row[key]
               })
-              if (relation_data === 'Inbound_flight_number') {
+              if (['Inbound_flight_number'].includes(relation_data)) {
                 obj.outAirport = obj.inbound_flights_departure_airport
                 obj.landAirport = obj.current_airport
                 delete obj.current_airport
                 delete obj.inbound_flights_departure_airport
               }
-              if (relation_data === 'departure_flights_number') {
+              if (['departure_flights_number', 'departure_flights_transferred_bags_number', 'Inbound_baggage_number'].includes(relation_data)) {
                 obj.outAirport = obj.current_airport
                 obj.landAirport = obj.departure_flights_destination_airport
                 delete obj.current_airport

+ 4 - 4
src/views/newTransfer/index.vue

@@ -55,7 +55,7 @@
     </div>
     <!--表格-->
     <div class="terminal-table">
-      <Table :istableChild="true" style="height:100%" :btnStyle="{ 'top':'-43px','right':'8px' }" :istableCol="true" :tableTag="tableTag" ref="table" :should-reset.sync="loading" />
+      <Table :istableChild="true" :pageSize="999" style="height:100%" :btnStyle="{ 'top':'-43px','right':'8px' }" :istableCol="true" :tableTag="tableTag" ref="table" :should-reset.sync="loading" />
     </div>
   </div>
 </template>
@@ -149,9 +149,9 @@ export default {
         res = this.TauthId ? await this.getQueryListAuth(this.TqueryId || SERVICE_ID.getAirpotId, {}, 1, 999, this.TauthId) : await this.getQueryList(SERVICE_ID.getAirpotId)
         if (Number(res.code) === 0) {
           this.AirportList = res.returnData;
-          if (type) {
-            const flag = res.returnData.filter(item => item.IATACode == 'PEK');
-            this.formData.currentAirport = this.TauthId && flag.length ? 'PEK' : res.returnData[0].IATACode;
+          if (type && !this.formData.currentAirport) {
+            const flag = res.returnData.filter(item => item.IATACode == 'CAN');
+            this.formData.currentAirport = this.TauthId && flag.length ? 'CAN' : res.returnData[0].IATACode;
           }
           this.tableTag = {
             filter: this.formatParams(),