zhaoke 2 years ago
parent
commit
89029eaef3

+ 2 - 0
public/config.js

@@ -103,9 +103,11 @@ window.DATACONTENT_ID = {
   stMapId: 18018,
   stCountryId: 18019,
   stTerminalId: 18020,
+  stBrsId: 18028,
 
   // 数据统计
   airlineOptions: 1806, // 航线下拉
+  termSeleid: 1156, //航站选择下拉
   areaOptions: 1807, // 大区/基地分公司下拉
   AirportId: 1808, // 航站下拉
   TerminalId: 1809, // 航站楼下拉

+ 0 - 5
public/configLoader.js

@@ -1,9 +1,4 @@
 if (!window.configLoadLoop) {
-  const config = document.createElement('script')
-  config.id = 'configJS'
-  config.type = 'text/javascript'
-  config.src = './config.js?t=' + new Date().getTime()
-  document.head.appendChild(config)
   window.configLoadLoop = setInterval(function () {
     document.head.removeChild(document.getElementById('configJS'))
     const config = document.createElement('script')

+ 1 - 0
public/index.html

@@ -8,6 +8,7 @@
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <title><%= webpackConfig.name %></title>
     <script src="<%= BASE_URL %>configLoader.js" type="text/javascript"></script>
+    <script id="configJS" src="<%= BASE_URL %>config.js" type="text/javascript"></script>
   </head>
   <body>
     <div id="app"></div>

+ 31 - 1
src/router/routes/routes-file-five.js

@@ -56,6 +56,12 @@ const departureRoutes = {
                   name: 'DepartureBaggageView',
                   component: () => import('@/views/baggageManagement/components/departure/baggage'),
                   meta: { title: '行李视图', keepAlive: true }
+                },
+                {
+                  path: '/departure/containerView',
+                  name: 'DepartureContainerView',
+                  component: () => import('@/views/baggageManagement/components/departure/container'),
+                  meta: { title: '容器视图', keepAlive: true }
                 }
               ]
             }
@@ -110,6 +116,12 @@ const arrivalRoutes = {
                   name: 'ArrivalBaggageView',
                   component: () => import('@/views/baggageManagement/components/arrival/baggage'),
                   meta: { title: '行李视图', keepAlive: true }
+                },
+                {
+                  path: '/arrival/containerView',
+                  name: 'ArrivalContainerView',
+                  component: () => import('@/views/baggageManagement/components/arrival/container'),
+                  meta: { title: '容器视图', keepAlive: true }
                 }
               ]
             }
@@ -164,6 +176,12 @@ const transferRoutes = {
                   name: 'TransferArrivalBaggageView',
                   component: () => import('@/views/baggageManagement/components/transferArrival/baggage'),
                   meta: { title: '行李视图', keepAlive: true }
+                },
+                {
+                  path: '/transfer/arrival/containerView',
+                  name: 'TransferArrivalContainerView',
+                  component: () => import('@/views/baggageManagement/components/transferArrival/container'),
+                  meta: { title: '容器视图', keepAlive: true }
                 }
               ]
             }
@@ -198,6 +216,12 @@ const transferRoutes = {
                   name: 'TransferDepartureBaggageView',
                   component: () => import('@/views/baggageManagement/components/transferDeparture/baggage'),
                   meta: { title: '行李视图', keepAlive: true }
+                },
+                {
+                  path: '/transfer/departure/containerView',
+                  name: 'TransferDepartureContainerView',
+                  component: () => import('@/views/baggageManagement/components/transferDeparture/container'),
+                  meta: { title: '容器视图', keepAlive: true }
                 }
               ]
             }
@@ -246,7 +270,13 @@ const advanceRoutes = {
               name: 'AdvancedBag',
               component: () => import('@/views/advancedQuery/views/advancedBag.vue'),
               meta: { title: '行李视图', keepAlive: true }
-            }
+            },
+            {
+              path: 'containerView',
+              name: 'AdvancedContainer',
+              component: () => import('@/views/advancedQuery/views/advancedContainer.vue'),
+              meta: { title: '容器视图', keepAlive: true }
+            },
           ]
         }
       ]

+ 12 - 5
src/router/routes/routes-file-six.js

@@ -25,7 +25,7 @@ const statisticsChartsRoutes = {
           name: 'AirlineCompanyStatistics',
           hidden: true,
           component: {
-            render (h) {
+            render(h) {
               return h('router-view')
             }
           },
@@ -102,7 +102,7 @@ const statisticsChartsRoutes = {
           name: 'PassengerStatistics',
           hidden: true,
           component: {
-            render (h) {
+            render(h) {
               return h('router-view')
             }
           },
@@ -170,7 +170,7 @@ const statisticsChartsRoutes = {
           name: 'FlightClassificationStatistics',
           hidden: true,
           component: {
-            render (h) {
+            render(h) {
               return h('router-view')
             }
           },
@@ -214,7 +214,7 @@ const statisticsChartsRoutes = {
           name: 'Report',
           hidden: true,
           component: {
-            render (h) {
+            render(h) {
               return h('router-view')
             }
           },
@@ -232,6 +232,13 @@ const statisticsChartsRoutes = {
               hidden: true,
               component: () => import('@/views/statisticsCharts/views/report/transitTable'),
               meta: { title: '中转专项报表统计', roles: ['scanning_node_and_location_analysis'] }
+            },
+            {
+              path: 'scanningStatistics',
+              name: 'ScanningStatistics',
+              hidden: true,
+              component: () => import('@/views/statisticsCharts/views/report/scanningStatistics'),
+              meta: { title: '航站BRS扫描统计', roles: ['scanning_node_and_location_analysis'] }
             }
           ]
         },
@@ -241,7 +248,7 @@ const statisticsChartsRoutes = {
           name: 'SpecialStatistics',
           hidden: true,
           component: {
-            render (h) {
+            render(h) {
               return h('router-view')
             }
           },

+ 23 - 0
src/views/advancedQuery/views/advancedContainer.vue

@@ -0,0 +1,23 @@
+<!--
+ * @Author: Badguy
+ * @Date: 2022-03-09 11:51:26
+ * @LastEditTime: 2022-03-09 11:51:26
+ * @LastEditors: your name
+ * @Description: 容器视图
+ * have a nice day!
+-->
+
+<template>
+  <ContainerView />
+</template>
+
+<script>
+import ContainerView from '@/views/baggageManagement/components/container'
+
+export default {
+  name: 'AdvacedContainer',
+  components: {
+    ContainerView
+  }
+}
+</script>

+ 19 - 3
src/views/advancedQuery/views/advancedHome.vue

@@ -632,7 +632,7 @@ export default {
         {
           statusName: '卸机',
           statusCode: '卸机'
-        },
+        }
         // {
         //   statusName: '已中转',
         //   statusCode: '已中转'
@@ -890,7 +890,11 @@ export default {
     },
     cellClass({ row, column, rowIndex, columnIndex }) {
       const classes = []
-      if (['flightNO', 'bagSN', 'preFlightNO', 'transferFlightNO'].includes(column.property) && row[column.property]) {
+      if (
+        ['flightNO', 'bagSN', 'U_Device_ID', 'preFlightNO', 'transferFlightNO'].includes(column.property) &&
+        row[column.property] &&
+        row[column.property] !== 'FBULK'
+      ) {
         classes.push('cell-click')
         if (
           this.clickedCells.some(
@@ -906,7 +910,11 @@ export default {
       return classes.join(' ')
     },
     cellClickHandler(row, column, cell, event) {
-      if (['flightNO', 'bagSN', 'preFlightNO', 'transferFlightNO'].includes(column.property) && row[column.property]) {
+      if (
+        ['flightNO', 'bagSN', 'U_Device_ID', 'preFlightNO', 'transferFlightNO'].includes(column.property) &&
+        row[column.property] &&
+        row[column.property] !== 'FBULK'
+      ) {
         this.$store.dispatch('keepAlive/addClickedCell', {
           row,
           columnProp: column.property,
@@ -932,6 +940,14 @@ export default {
               }
             })
             break
+          case 'U_Device_ID':
+            this.$router.push({
+              path: '/advance/containerView',
+              query: {
+                containerID: row.U_Device_ID
+              }
+            })
+            break
           case 'transferFlightNO':
             this.$router.push({
               path: '/advance/flightView',

+ 23 - 0
src/views/baggageManagement/components/arrival/container.vue

@@ -0,0 +1,23 @@
+<!--
+ * @Author: Badguy
+ * @Date: 2022-03-09 11:51:26
+ * @LastEditTime: 2022-03-09 11:51:26
+ * @LastEditors: your name
+ * @Description: 进港容器视图
+ * have a nice day!
+-->
+
+<template>
+  <ContainerView />
+</template>
+
+<script>
+import ContainerView from '../container'
+
+export default {
+  name: 'ArrivalContainerView',
+  components: {
+    ContainerView
+  }
+}
+</script>

+ 27 - 13
src/views/baggageManagement/components/baggage/index.vue

@@ -589,7 +589,11 @@ export default {
     },
     cellClass({ row, column, rowIndex, columnIndex }) {
       const classes = []
-      if (column.property === 'flightNO') {
+      if (
+        ['flightNO', 'U_Device_ID'].includes(column.property) &&
+        row[column.property] &&
+        row[column.property] !== 'FBULK'
+      ) {
         classes.push('cell-click')
       }
       if (['departureAirport', 'landingAirport'].includes(column.property)) {
@@ -598,18 +602,28 @@ export default {
       return classes.join(' ')
     },
     cellClickHandler(row, column, cell, event) {
-      switch (column.property) {
-        case 'flightNO':
-          this.$router.push({
-            path: `/${this.$route.path.split('/').slice(1, -1).join('/')}/flightView`,
-            query: {
-              flightNO: row.flightNO,
-              flightDate: row.flightDate
-            }
-          })
-          break
-        default:
-          break
+      if (row[column.property] && row[column.property] !== 'FBULK') {
+        switch (column.property) {
+          case 'flightNO':
+            this.$router.push({
+              path: `/${this.$route.path.split('/').slice(1, -1).join('/')}/flightView`,
+              query: {
+                flightNO: row.flightNO,
+                flightDate: row.flightDate
+              }
+            })
+            break
+          case 'U_Device_ID':
+            this.$router.push({
+              path: `/${this.$route.path.split('/').slice(1, -1).join('/')}/containerView`,
+              query: {
+                containerID: row.U_Device_ID
+              }
+            })
+            break
+          default:
+            break
+        }
       }
     },
     tableSpanMethod({ row, column, rowIndex, columnIndex }) {

+ 469 - 0
src/views/baggageManagement/components/container/index.vue

@@ -0,0 +1,469 @@
+<template>
+  <div class="container-view">
+    <div
+      v-loading="treeLoading"
+      element-loading-text="拼命加载中"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+      class="container-left"
+    >
+      <el-tree
+        :data="containerHistoryTree"
+        :props="defaultTreeProps"
+        node-key="index"
+        default-expand-all
+        :expand-on-click-node="false"
+        @current-change="currentChangeHandler"
+      />
+    </div>
+    <div
+      v-loading="tableLoading"
+      element-loading-text="拼命加载中"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+      class="container-right"
+    >
+
+      <el-table
+        ref="table"
+        :data="dealedTableData"
+        border
+        stripe
+        fit
+        height="calc(100vh - 80px - 17px - 20px)"
+        :header-cell-class-name="headerCellClass"
+        :row-class-name="tableRowClassName"
+        :cell-class-name="cellClass"
+        @cell-click="cellClickHandler"
+      >
+        <el-table-column
+          v-for="col in tableCols"
+          :key="col.prop"
+          :prop="col.prop"
+          :label="col.label"
+          :width="col.width"
+          :fixed="col.fixed"
+          :formatter="tableFormat"
+        >
+          <template #header>
+            <el-tooltip
+              :content="col.desc || col.label"
+              placement="top"
+            >
+              <TableHeaderCell
+                :label="col.label"
+                :filter-options="tableDataFilters[col.prop]"
+                :filter-values.sync="filterValues[col.prop]"
+                :sortable="col.sortable"
+                :sort-rule.sync="tableDataSortRules[col.prop]"
+              />
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import TableHeaderCell from '@/components/TableHeaderCell'
+import { mapGetters } from 'vuex'
+import { myQuery } from '@/api/dataIntegration'
+import { setTableFilters } from '@/utils/table'
+
+export default {
+  name: 'ContainerView',
+  components: {
+    TableHeaderCell
+  },
+  data() {
+    return {
+      queryData: {},
+      containerHistory: [],
+      selectedHistoryData: {},
+      defaultTreeProps: {
+        children: 'children',
+        label: 'label'
+      },
+      treeLoading: false,
+      tableLoading: false,
+      tableCols: [
+        {
+          prop: 'passengerName',
+          label: '旅客姓名',
+          desc: '指旅客姓名的拼音大写',
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'luggageSN',
+          label: '行李牌号',
+          desc: '指行李的10位数字行李牌号码',
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'specialType',
+          label: '特殊行李类型',
+          desc: '指有别于普通托运行李的特殊行李分类,包括(装笼动物、机组行李、易碎行李、VIP行李等),参考BSM报文.E项说明',
+          width: 115,
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'isDEL',
+          label: '删除',
+          desc: '指旅客是否取消值机托运,根据BSM报文状态是否有DEL判断,已删除的行李记录为斜体灰色字体',
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'activeState',
+          label: '激活',
+          desc: '指托运行李是否被激活,参照BSM报文.S项说明',
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'luggageWeight',
+          label: '重量',
+          desc: '指托运行李的重量,参照BSM报文.W项说明'
+        },
+        {
+          prop: 'lastStatus',
+          label: '最新状态',
+          desc: '指托运行李的当前查询时间所在的节点状态',
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'lastLocation',
+          label: '最新位置',
+          desc: '指托运行李的当前查询时间所在的节点状态的识读位置代号',
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'inFlightNO',
+          label: '中转进航班',
+          desc: '指有中转行李转出的进港航班号',
+          width: 110,
+          filterable: true,
+          sortable: true
+        },
+        {
+          prop: 'transferFlightNO',
+          label: '中转出航班',
+          desc: '指有中转行李转入的离港航班号',
+          width: 110,
+          filterable: true,
+          sortable: true
+        }
+      ],
+      tableData: [],
+      tableDataFilters: {},
+      filterValues: {},
+      tableDataSortRules: {}
+    }
+  },
+  computed: {
+    ...mapGetters(['clickedCells']),
+    containerHistoryTree() {
+      return [
+        {
+          index: -1,
+          label: '容器历史',
+          children: this.containerHistory.map(({ flightNO, flightDate, departureAirport, arriveAirport }, index) => ({
+            index,
+            label: [flightNO, flightDate.replaceAll('-', '/'), departureAirport, arriveAirport].join('-')
+          }))
+        }
+      ]
+    },
+    dealedTableData() {
+      const filtered = this.tableData.filter(item => {
+        let flag = true
+        Object.entries(this.filterValues).forEach(([key, arr]) => {
+          if (arr.length && !arr.includes(item[key])) {
+            flag = false
+          }
+        })
+        return flag
+      })
+      const sortRules = Object.entries(this.tableDataSortRules).reduce(
+        (pre, [key, value]) => {
+          if (value) {
+            pre[0].push(key)
+            value = value === 'ascending' ? 'asc' : 'desc'
+            pre[1].push(value)
+          }
+          return pre
+        },
+        [[], []]
+      )
+      return this._.orderBy(filtered, sortRules[0], sortRules[1])
+    }
+  },
+  watch: {
+    $route: {
+      handler({ path, query }) {
+        if (path.includes('containerView')) {
+          const { containerID } = query
+          if (containerID) {
+            const { containerID: oldContainerID } = this.queryData
+            if (containerID !== oldContainerID) {
+              this.queryData = { containerID }
+              this.queryContainerHistory([containerID])
+            }
+          } else {
+            this.$router.push('/')
+          }
+        }
+      },
+      deep: true,
+      immediate: true
+    }
+  },
+  created() {
+    Object.values(this.tableCols).forEach(({ prop, filterable, sortable }) => {
+      if (filterable) {
+        this.$set(this.tableDataFilters, prop, [])
+        this.$set(this.filterValues, prop, [])
+      }
+      if (sortable) {
+        this.$set(this.tableDataSortRules, prop, '')
+      }
+    })
+  },
+  updated() {
+    // table数据更新
+    this.$nextTick(() => {
+      this.$refs.table.doLayout()
+    })
+  },
+  deactivated() {
+    this.treeLoading = false
+    this.tableLoading = false
+  },
+  beforeDestroy() {
+    this.treeLoading = false
+    this.tableLoading = false
+  },
+  methods: {
+    currentChangeHandler({ index }) {
+      if (index > -1) {
+        this.selectedHistoryData = this.containerHistory[index]
+        const { flightNO, flightDate, departureAirport, arriveAirport, containerID } = this.selectedHistoryData
+        const dataContent = [flightNO, flightDate, departureAirport, arriveAirport, containerID]
+        this.queryBaggageList(dataContent)
+      }
+    },
+    // 给表头单元格加上 ascending 或 descending 使用 element 自带的排序箭头变色
+    headerCellClass({ row, column, rowIndex, columnIndex }) {
+      const classes = []
+      const rule = this.tableDataSortRules[column.property]
+      if (rule) {
+        classes.push(rule)
+      }
+      return classes.join(' ')
+    },
+    tableRowClassName({ row, rowIndex }) {
+      const classes = []
+      if (row.isDEL === 'DEL') {
+        classes.push('bgl-deleted')
+      }
+      return classes.join(' ')
+    },
+    cellClass({ row, column, rowIndex, columnIndex }) {
+      const classes = []
+      if (
+        [
+          'flightNO',
+          'luggageSN'
+          // 'inFlightNO',
+          // 'transferFlightNO'
+        ].includes(column.property) &&
+        row[column.property]
+      ) {
+        classes.push('cell-click')
+        if (
+          this.clickedCells.some(
+            cell =>
+              cell.pageName === 'advance' &&
+              Object.entries(cell.row).every(([key, value]) => row[key] === value) &&
+              cell.columnProp === column.property
+          )
+        ) {
+          classes.push('cell-clicked')
+        }
+      }
+      return classes.join(' ')
+    },
+    cellClickHandler(row, column, cell, event) {
+      if (
+        [
+          // 'flightNO',
+          'luggageSN'
+          // 'inFlightNO',
+          // 'transferFlightNO'
+        ].includes(column.property) &&
+        row[column.property]
+      ) {
+        this.$store.dispatch('keepAlive/addClickedCell', {
+          row,
+          columnProp: column.property,
+          pageName: this.$route.name
+        })
+        switch (column.property) {
+          // case 'flightNO':
+          //   this.$router.push({
+          //     path: '/advance/flightView',
+          //     query: {
+          //       flightNO: this.selectedHistoryData.flightNO,
+          //       flightDate: this.selectedHistoryData.flightDate
+          //     }
+          //   })
+          //   break
+          case 'luggageSN':
+            this.$router.push({
+              path: `/${this.$route.path.split('/').slice(1, -1).join('/')}/baggageView`,
+              query: {
+                flightNO: this.selectedHistoryData.flightNO,
+                flightDate: this.selectedHistoryData.flightDate,
+                bagSN: row.luggageSN
+              }
+            })
+            break
+          // case 'inFlightNO':
+          //   this.$router.push({
+          //     path: '/advance/flightView',
+          //     query: {
+          //       flightNO: row.inFlightNO,
+          //       flightDate: row.preFlightDate
+          //     }
+          //   })
+          //   break
+          // case 'transferFlightNO':
+          //   this.$router.push({
+          //     path: '/advance/flightView',
+          //     query: {
+          //       flightNO: row.transferFlightNO,
+          //       flightDate: row.transferFlightDate
+          //     }
+          //   })
+          //   break
+          default:
+            break
+        }
+      }
+    },
+    tableFormat(row, column, cellValue) {
+      switch (column.property) {
+        case 'isDEL':
+          return cellValue === 'DEL' ? cellValue : ''
+        case 'activeState':
+          return cellValue === 1 ? '激活' : '未激活'
+        default:
+          return cellValue ?? ''
+      }
+    },
+    async queryContainerHistory(dataContent) {
+      this.treeLoading = true
+      this.tableData = []
+      try {
+        const result = await myQuery(DATACONTENT_ID.containerHistory, ...dataContent)
+        this.containerHistory = result
+      } catch (error) {
+        console.log('出错了', error.message || error)
+      }
+      this.treeLoading = false
+    },
+    async queryBaggageList(dataContent) {
+      this.tableLoading = true
+      this.tableData = []
+      try {
+        const result = await myQuery(DATACONTENT_ID.containerBaggage, ...dataContent)
+        this.tableData = result
+        setTableFilters(this.tableData, this.tableDataFilters)
+      } catch (error) {
+        console.log('出错了', error.message || error)
+      }
+      this.tableLoading = false
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.container-view {
+  padding: 17px 24px 20px;
+  display: flex;
+  .container-left {
+    flex: 0 1 352px;
+    margin-right: 16px;
+    background-color: #ffffff;
+    ::v-deep .el-tree > .el-tree-node {
+      > .el-tree-node__children {
+        display: block;
+      }
+      .el-tree-node__content {
+        height: 38px;
+        .el-tree-node__label {
+          letter-spacing: 1px;
+          line-height: 38px;
+          font-size: 14px;
+          font-family: Helvetica, 'Microsoft YaHei';
+          font-weight: bold;
+          color: #101116;
+        }
+      }
+      > .el-tree-node__content {
+        > .el-tree-node__expand-icon.el-icon-caret-right:not(.is-leaf):before {
+          font-size: 16px;
+          color: #101116;
+        }
+        > .el-tree-node__label {
+          font-size: 16px;
+        }
+      }
+    }
+  }
+  .container-right {
+    flex: 1;
+    ::v-deep .el-table {
+      width: 100%;
+      .cell {
+        padding: 0;
+        text-align: center;
+        font-size: 14px;
+        font-family: Helvetica, 'Microsoft YaHei';
+        letter-spacing: 0;
+      }
+      .cell-click {
+        cursor: pointer;
+        color: #2d7cff;
+        &.cell-clicked {
+          color: purple;
+        }
+      }
+      .el-table__header-wrapper,
+      .el-table__fixed-header-wrapper {
+        .cell {
+          font-weight: bold;
+          color: #101116;
+        }
+      }
+      .el-table__body-wrapper,
+      .el-table__fixed-body-wrapper {
+        tr.bgl-deleted {
+          background: #d2d6df;
+          td {
+            background: #d2d6df;
+            font-style: italic;
+          }
+        }
+      }
+    }
+  }
+}
+</style>

+ 23 - 0
src/views/baggageManagement/components/departure/container.vue

@@ -0,0 +1,23 @@
+<!--
+ * @Author: Badguy
+ * @Date: 2022-03-09 11:51:26
+ * @LastEditTime: 2022-03-09 11:51:26
+ * @LastEditors: your name
+ * @Description: 离港容器视图
+ * have a nice day!
+-->
+
+<template>
+  <ContainerView />
+</template>
+
+<script>
+import ContainerView from '../container'
+
+export default {
+  name: 'DepartureContainerView',
+  components: {
+    ContainerView
+  }
+}
+</script>

+ 23 - 0
src/views/baggageManagement/components/departureC/container.vue

@@ -0,0 +1,23 @@
+<!--
+ * @Author: Badguy
+ * @Date: 2022-03-09 11:51:26
+ * @LastEditTime: 2022-03-09 11:51:26
+ * @LastEditors: your name
+ * @Description: 离港容器视图
+ * have a nice day!
+-->
+
+<template>
+  <ContainerView />
+</template>
+
+<script>
+import ContainerView from '../container'
+
+export default {
+  name: 'DepartureContainerView',
+  components: {
+    ContainerView
+  }
+}
+</script>

+ 26 - 8
src/views/baggageManagement/components/flight/index.vue

@@ -240,7 +240,7 @@
                   :xl="12"
                 >
                   <span>
-                    日期:{{ flightInfo.ExpectLandingTime && flightInfo.ExpectLandingTime.split("T")[0] }}
+                    日期:{{ flightInfo.expectLandingTime && flightInfo.expectLandingTime.split("T")[0] }}
                   </span>
                 </el-col>
                 <el-col
@@ -249,7 +249,7 @@
                   :xl="12"
                 >
                   <span>
-                    时间:{{ flightInfo.ExpectLandingTime && flightInfo.ExpectLandingTime.split("T")[1] }}
+                    时间:{{ flightInfo.expectLandingTime && flightInfo.expectLandingTime.split("T")[1] }}
                   </span>
                 </el-col>
               </el-row>
@@ -761,8 +761,11 @@ export default {
           'transferFlightNO',
           'transferNumber',
           'PassengerNameUpcase',
-          'BagSN'
-        ].includes(column.property)
+          'BagSN',
+          'U_Device_ID'
+        ].includes(column.property) &&
+        row[column.property] &&
+        row[column.property] !== 'FBULK'
       ) {
         classes.push('cell-click')
         if (
@@ -780,10 +783,17 @@ export default {
     },
     cellClickHandler(row, column, cell, event) {
       if (
-        ['preFlightNO', 'totalNumber', 'transferFlightNO', 'transferNumber', 'PassengerNameUpcase', 'BagSN'].includes(
-          column.property
-        ) &&
-        row[column.property]
+        [
+          'preFlightNO',
+          'totalNumber',
+          'transferFlightNO',
+          'transferNumber',
+          'PassengerNameUpcase',
+          'BagSN',
+          'U_Device_ID'
+        ].includes(column.property) &&
+        row[column.property] &&
+        row[column.property] !== 'FBULK'
       ) {
         this.$store.dispatch('keepAlive/addClickedCell', {
           row,
@@ -853,6 +863,14 @@ export default {
               }
             })
             break
+          case 'U_Device_ID':
+            this.$router.push({
+              path: `/${this.$route.path.split('/').slice(1, -1).join('/')}/containerView`,
+              query: {
+                containerID: row.U_Device_ID
+              }
+            })
+            break
           default:
             break
         }

+ 23 - 0
src/views/baggageManagement/components/transferArrival/container.vue

@@ -0,0 +1,23 @@
+<!--
+ * @Author: Badguy
+ * @Date: 2022-03-09 11:51:26
+ * @LastEditTime: 2022-03-09 11:51:26
+ * @LastEditors: your name
+ * @Description: 中转进港容器视图
+ * have a nice day!
+-->
+
+<template>
+  <ContainerView />
+</template>
+
+<script>
+import ContainerView from '../container'
+
+export default {
+  name: 'TransferArrivalContainerView',
+  components: {
+    ContainerView
+  }
+}
+</script>

+ 23 - 0
src/views/baggageManagement/components/transferDeparture/container.vue

@@ -0,0 +1,23 @@
+<!--
+ * @Author: Badguy
+ * @Date: 2022-03-09 11:51:26
+ * @LastEditTime: 2022-03-09 11:51:26
+ * @LastEditors: your name
+ * @Description: 中转出港容器视图
+ * have a nice day!
+-->
+
+<template>
+  <ContainerView />
+</template>
+
+<script>
+import ContainerView from '../container'
+
+export default {
+  name: 'TransferDepartureContainerView',
+  components: {
+    ContainerView
+  }
+}
+</script>

+ 134 - 109
src/views/statisticsCharts/components/statisticsTabs.vue

@@ -2,23 +2,44 @@
   <div class="statistics-tabs">
     <el-row :gutter="16" type="flex">
       <el-col v-for="(tab, index) in tabList" :key="index" :span="4">
-        <el-dropdown v-if="tab.children && tab.children.length" placement="bottom" @command="commandHandler">
+        <el-dropdown
+          v-if="tab.children && tab.children.length"
+          placement="bottom"
+          @command="commandHandler"
+        >
           <div :class="['tab-bar', { 'tab-active': activeIndex === index }]">
-            <img class="tab-icon" :src="activeIndex === index ? activeIcon : defaultIcon" :alt="tab.title">
+            <img
+              class="tab-icon"
+              :src="activeIndex === index ? activeIcon : defaultIcon"
+              :alt="tab.title"
+            />
             <el-tooltip :content="tab.title" placement="top">
               <span class="tab-title">{{ tab.title }}</span>
             </el-tooltip>
             <i class="icon-arrow el-icon-caret-bottom" />
           </div>
           <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item v-for="(childTab, childIndex) in tab.children" :key="childIndex" :command="[tab.path, childTab.path]">{{ childTab.title }}</el-dropdown-item>
+            <el-dropdown-item
+              v-for="(childTab, childIndex) in tab.children"
+              :key="childIndex"
+              :command="[tab.path, childTab.path]"
+              >{{ childTab.title }}</el-dropdown-item
+            >
           </el-dropdown-menu>
         </el-dropdown>
-        <div v-else :class="[
+        <div
+          v-else
+          :class="[
             'tab-bar tab-bar-single',
             { 'tab-active': activeIndex === index },
-          ]" @click="clickHandler(tab.path)">
-          <img class="tab-icon" :src="activeIndex === index ? activeIcon : defaultIcon" :alt="tab.title">
+          ]"
+          @click="clickHandler(tab.path)"
+        >
+          <img
+            class="tab-icon"
+            :src="activeIndex === index ? activeIcon : defaultIcon"
+            :alt="tab.title"
+          />
           <el-tooltip :content="tab.title" placement="top">
             <span class="tab-title">{{ tab.title }}</span>
           </el-tooltip>
@@ -30,190 +51,194 @@
 
 <script>
 export default {
-  name: 'StatisticsTabs',
-  data () {
+  name: "StatisticsTabs",
+  data() {
     return {
-      defaultIcon: require('@/assets/nav/ic_statistical_top_default.png'),
-      activeIcon: require('@/assets/nav/ic_statistical_top_check.png'),
+      defaultIcon: require("@/assets/nav/ic_statistical_top_default.png"),
+      activeIcon: require("@/assets/nav/ic_statistical_top_check.png"),
       tabList: [
         {
-          title: '航司行李相关统计',
-          path: '/statisticsCharts/airlineCompany',
+          title: "航司行李相关统计",
+          path: "/statisticsCharts/airlineCompany",
           children: [
             {
-              path: 'flight',
-              title: '航班量统计'
+              path: "flight",
+              title: "航班量统计",
             },
             {
-              path: 'baggage',
-              title: '行李量统计'
+              path: "baggage",
+              title: "行李量统计",
             },
             {
-              path: 'baggagePassenger',
-              title: '行李旅客量统计'
+              path: "baggagePassenger",
+              title: "行李旅客量统计",
             },
             {
-              path: 'specialBaggage',
-              title: '特殊行李量统计'
+              path: "specialBaggage",
+              title: "特殊行李量统计",
             },
             {
-              path: 'baggageAverage',
-              title: '平均行李量统计'
+              path: "baggageAverage",
+              title: "平均行李量统计",
             },
             {
-              path: 'abnormalBaggage',
-              title: '异常行李量统计'
+              path: "abnormalBaggage",
+              title: "异常行李量统计",
             },
             {
-              path: 'complaintBaggage',
-              title: '投诉行李量统计'
+              path: "complaintBaggage",
+              title: "投诉行李量统计",
             },
             {
-              path: 'compensationBaggage',
-              title: '赔偿行李量统计'
+              path: "compensationBaggage",
+              title: "赔偿行李量统计",
             },
             {
-              path: 'compensation',
-              title: '赔偿金额统计'
-            }
-          ]
+              path: "compensation",
+              title: "赔偿金额统计",
+            },
+          ],
         },
         {
-          path: '/statisticsCharts/passengerClassification',
-          title: '旅客分类统计',
+          path: "/statisticsCharts/passengerClassification",
+          title: "旅客分类统计",
           children: [
             {
-              path: 'baggage',
-              title: '行李量统计'
+              path: "baggage",
+              title: "行李量统计",
             },
             {
-              path: 'baggagePassenger',
-              title: '行李旅客量统计'
+              path: "baggagePassenger",
+              title: "行李旅客量统计",
             },
             {
-              path: 'specialBaggage',
-              title: '特殊行李量统计'
+              path: "specialBaggage",
+              title: "特殊行李量统计",
             },
             {
-              path: 'abnormalBaggage',
-              title: '异常行李量统计'
+              path: "abnormalBaggage",
+              title: "异常行李量统计",
             },
             {
-              path: 'complaintBaggage',
-              title: '投诉行李量统计'
+              path: "complaintBaggage",
+              title: "投诉行李量统计",
             },
             {
-              path: 'compensationBaggage',
-              title: '赔偿行李量统计'
+              path: "compensationBaggage",
+              title: "赔偿行李量统计",
             },
             {
-              path: 'compensation',
-              title: '赔偿金额统计'
-            }
-          ]
+              path: "compensation",
+              title: "赔偿金额统计",
+            },
+          ],
         },
         {
-          path: '/statisticsCharts/flightClassification',
-          title: '航班分类相关统计',
+          path: "/statisticsCharts/flightClassification",
+          title: "航班分类相关统计",
           children: [
             {
-              path: 'flight',
-              title: '航班量统计'
+              path: "flight",
+              title: "航班量统计",
             },
             {
-              path: 'baggage',
-              title: '行李量统计'
+              path: "baggage",
+              title: "行李量统计",
             },
             {
-              path: 'passenger',
-              title: '行李旅客量统计'
-            }
-          ]
+              path: "passenger",
+              title: "行李旅客量统计",
+            },
+          ],
         },
         {
-          path: '/statisticsCharts/node',
-          title: '扫描节点与位置分析'
+          path: "/statisticsCharts/node",
+          title: "扫描节点与位置分析",
         },
         {
-          title: '报表统计',
-          path: '/statisticsCharts/report',
+          title: "报表统计",
+          path: "/statisticsCharts/report",
           children: [
             {
-              path: 'reportStatistics',
-              title: '运送效率报表统计'
+              path: "reportStatistics",
+              title: "运送效率报表统计",
+            },
+            {
+              path: "transitTable",
+              title: "中转专项报表统计",
             },
             {
-              path: 'transitTable',
-              title: '中转专项报表统计'
-            }
-          ]
+              path: "ScanningStatistics",
+              title: "航站BRS扫描统计",
+            },
+          ],
         },
         {
-          title: '特殊赔偿异常分类统计',
-          path: '/statisticsCharts/specialClassification',
+          title: "特殊赔偿异常分类统计",
+          path: "/statisticsCharts/specialClassification",
           children: [
             {
-              path: 'special',
-              title: '特殊行李分类统计'
+              path: "special",
+              title: "特殊行李分类统计",
             },
             {
-              path: 'abnormal',
-              title: '异常行李分类统计'
+              path: "abnormal",
+              title: "异常行李分类统计",
             },
             {
-              path: 'compensationBaggage',
-              title: '赔偿行李分类统计'
+              path: "compensationBaggage",
+              title: "赔偿行李分类统计",
             },
             {
-              path: 'compensation',
-              title: '赔偿金额分类统计'
-            }
-          ]
+              path: "compensation",
+              title: "赔偿金额分类统计",
+            },
+          ],
         },
         {
-          path: '/statisticsCharts/statisticalAnalysis',
-          title: '统计分析'
+          path: "/statisticsCharts/statisticalAnalysis",
+          title: "统计分析",
         },
       ],
-      activeIndex: null
-    }
+      activeIndex: null,
+    };
   },
   watch: {
-    '$route.path': {
-      handler (path) {
-        let activeIndex = null
+    "$route.path": {
+      handler(path) {
+        let activeIndex = null;
         this.tabList.some((tab, index) => {
           if (path.includes(tab.path)) {
-            activeIndex = index
-            return true
+            activeIndex = index;
+            return true;
           }
-        })
-        this.activeIndex = activeIndex
+        });
+        this.activeIndex = activeIndex;
       },
-      immediate: true
-    }
+      immediate: true,
+    },
   },
   methods: {
-    commandHandler (pathArray) {
-      if (pathArray.some(path => !path)) {
-        this.$message.info('开发中')
-        return
+    commandHandler(pathArray) {
+      if (pathArray.some((path) => !path)) {
+        this.$message.info("开发中");
+        return;
       }
       this.$router.push({
-        path: pathArray.join('/')
-      })
+        path: pathArray.join("/"),
+      });
     },
-    clickHandler (path) {
+    clickHandler(path) {
       if (!path) {
-        this.$message.info('开发中')
-        return
+        this.$message.info("开发中");
+        return;
       }
       this.$router.push({
-        path
-      })
-    }
-  }
-}
+        path,
+      });
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>

+ 9 - 1
src/views/statisticsCharts/components/tableform.vue

@@ -96,7 +96,14 @@
 </template>
 <script>
 import { setTableFilters } from "@/utils/table";
+import {
+  Query,
+  GeneralDataReception,
+  Start,
+  Stop,
+} from "@/api/dataIntegration";
 import NoData from "@/components/nodata";
+import { de } from "vis";
 export default {
   isDialog: {
     type: Boolean,
@@ -285,7 +292,8 @@ export default {
     },
   },
   mounted() {
-    this.initTableData();
+    // this.initTableData();
+    this.getQuery();
   },
   methods: {
     load() {

+ 149 - 0
src/views/statisticsCharts/components/tableformbrs.vue

@@ -0,0 +1,149 @@
+<template>
+  <div class="data-table">
+    <div
+      :style="dataTableContentStyle"
+      v-loading="loading"
+      element-loading-text="拼命加载中"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+      class="data-table-content"
+    >
+      <template v-if="tableData.length">
+        <el-table :data="tableData" style="width: 100%">
+          <el-table-column label="PEK国航行李BRS扫描数据统计表">
+            <el-table-column prop="A" label="航站"> </el-table-column>
+            <el-table-column label="出港航班量">
+              <el-table-column prop="flightno" label="航班(架次)" width="240">
+              </el-table-column>
+              <el-table-column prop="bagsno" label="行李(件数)" width="240">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描航班量">
+              <el-table-column prop="loadflightno" label="航班(架次)">
+              </el-table-column>
+              <el-table-column prop="loadbagsno" label="行李(件数)">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描率">
+              <el-table-column prop="flightscan" label="航班">
+              </el-table-column>
+              <el-table-column prop="bagsscan" label="行李"> </el-table-column>
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else>
+        <NoData image-width="auto" image-height="100%" />
+      </template>
+    </div>
+  </div>
+</template>
+<script>
+import NoData from "@/components/nodata";
+import { Query } from "@/api/dataIntegration";
+export default {
+  props: {
+    //接口ID
+    dataId: {
+      type: [String, Number],
+      default: "",
+    },
+    dataContent: {
+      type: Array,
+      default: () => [],
+    },
+  },
+  data() {
+    return {
+      loading: false,
+      page: 0,
+      serviceId: null,
+      rowTitle: "",
+      tableCols: [], //表头数据
+      tableData: [
+        // {
+        //   date: "wnz(7月)",
+        //   name: "409",
+        //   province: "18946",
+        //   city: "409",
+        //   address: "18294",
+        //   zip: "100%",
+        //   cp: "96.56%",
+        // },
+      ],
+    };
+  },
+  components: {
+    NoData,
+  },
+  watch: {
+    dataContent: {
+      handler(val) {
+        if (val) {
+          this.getQuery();
+        }
+      },
+      deep: true,
+    },
+  },
+  computed: {
+    dataTableContentStyle() {
+      const style = {};
+      if (this.minHeight) {
+        style["min-height"] = this.minHeight;
+      }
+      if (this.tableHeight) {
+        style["height"] = this.tableHeight;
+      }
+      return style;
+    },
+  },
+  mounted() {
+    // this.getQuery();
+  },
+  methods: {
+    //获取表格数据
+    async getQuery() {
+      try {
+        this.loading = true;
+        const { code, returnData } = await Query({
+          id: this.dataId,
+          needPage: ++this.page,
+          dataContent: this.dataContent,
+        });
+        if (code == 0) {
+          if (returnData.listValues.length === 0) {
+            this.page--;
+            this.noMore = true;
+            this.loading = false;
+          }
+          const titleColumn = returnData.columnSet.find(
+            (item) => item.needShow === 1
+          );
+          if (titleColumn) {
+            this.rowTitle = titleColumn.columnName;
+          }
+          this.tableData.push(...returnData.listValues);
+          this.tableCols = returnData.columnSet;
+          this.serviceId = returnData.submitID;
+          this.loading = false;
+          // setTimeout(() => {
+          //   this.initTableData();
+          //   this.loading = false;
+          // }, 100);
+        } else {
+          this.page--;
+          this.loading = false;
+          this.$message.error("获取表格数据失败");
+        }
+      } catch (error) {
+        this.page--;
+        this.loading = false;
+        console.log(error);
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 103 - 0
src/views/statisticsCharts/views/report/scanningStatistics.vue

@@ -0,0 +1,103 @@
+<template>
+  <!-- 航站BRS扫描统计 -->
+  <div class="statstics-wrapper">
+    <StatisticsHeader
+      title="航站BRS扫描统计"
+      :items="formItems"
+      :data="formData"
+      with-setting
+      :withSetting="false"
+      :withExport="false"
+      @getFormData="getFormData"
+    />
+    <Tableformbrs
+      :data-id="dataId"
+      :data-content="dataContent"
+      :rows="12"
+      label-width="140px"
+      :min-height="70"
+      width="800px"
+      tableHeight="750"
+    />
+  </div>
+</template>
+<script>
+import StatisticsHeader from "../../components/statisticsHeader.vue";
+import Tableformbrs from "../../components/tableformbrs";
+export default {
+  name: "ReportStatistics",
+  data() {
+    return {
+      formData: {
+        airport: "",
+        dateTime: "",
+      },
+      formItems: [
+        {
+          prop: "airport",
+          inputType: "select",
+          placeholder: "航站选择",
+          // filterable: true,
+          clearable: true,
+          // multiple: true,
+          // disabled: true,
+          queryId: DATACONTENT_ID.termSeleid,
+          setKey: "a2",
+          options: [],
+        },
+        {
+          prop: "interval",
+          inputType: "select",
+          placeholder: "时间维度",
+          requiredWarning: "请先选择统计时间维度",
+          clearable: true,
+          options: [
+            {
+              value: "日",
+              label: "按日统计",
+            },
+            {
+              value: "月",
+              label: "按月统计",
+            },
+            {
+              value: "季",
+              label: "按季统计",
+            },
+            {
+              value: "年",
+              label: "按年统计",
+            },
+          ],
+        },
+        {
+          prop: "dateTime",
+          inputType: "datePicker",
+          clearable: true,
+          width: "240px",
+          options: [],
+        },
+      ],
+      dataId: DATACONTENT_ID.stBrsId,
+      dataContent: [],
+    };
+  },
+  components: {
+    StatisticsHeader,
+    Tableformbrs,
+  },
+  methods: {
+    getFormData(data) {
+      this.dataContent = [];
+      this.dataContent.push(
+        data.interval,
+        data.airport,
+        data.dateTime[0] ? data.dateTime[0] : "",
+        data.dateTime[1] ? data.dateTime[1] : ""
+      );
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+</style>