Ver Fonte

中转视图跳转航班视图快捷筛选

zhongxiaoyu há 1 ano atrás
pai
commit
4ecd59f714
2 ficheiros alterados com 97 adições e 12 exclusões
  1. 85 7
      src/views/newFlightView/index.vue
  2. 12 5
      src/views/newQuery/components/table.vue

+ 85 - 7
src/views/newFlightView/index.vue

@@ -51,10 +51,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 +60,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="航班行李列表" @tableLoad="tableLoad" />
       </div>
     </div>
   </div>
@@ -93,7 +90,37 @@ export default {
       table2: {},
       showObj: {},
       deArrs: [],
-      deArrsNum: []
+      deArrsNum: [],
+      fastFilterOptions: [
+        {
+          label: '中转进航班',
+          value: 'inflightNo',
+          children: []
+        },
+        {
+          label: '中转出航班',
+          value: 'transferFlightNO',
+          children: []
+        }
+      ],
+      selectedFilter: [],
+    }
+  },
+  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] ?? '') !== ''
+          default:
+            return (row[key] ?? '') !== ''
+        }
+      }
     }
   },
   async created () {
@@ -118,6 +145,25 @@ export default {
       }
     ]
     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]
+      }
+    })
     const { carrierFlights, carrierFlightsDate } = nq
     this.flightObj = nq
     this.dataContent = nq
@@ -164,7 +210,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]
@@ -226,6 +272,38 @@ export default {
           this.infoObj = res[0]
         }
       }
+    },
+    // 获取行李列表后设置快捷筛选
+    tableLoad(tableData) {
+      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
+          }))
+        }
+      )
     }
   }
 }

+ 12 - 5
src/views/newQuery/components/table.vue

@@ -112,6 +112,10 @@ export default {
       type: Boolean,
       default: true
     },
+    fastFilter: {
+      type: Function,
+      default: () => () => true
+    },
   },
   data () {
     return {
@@ -144,8 +148,11 @@ export default {
   },
   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]))) {
@@ -564,7 +571,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') {
@@ -606,20 +613,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', 'Inbound_baggage_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'].includes(relation_data)) {
                 obj.outAirport = obj.current_airport
                 obj.landAirport = obj.departure_flights_destination_airport
                 delete obj.current_airport