chenjun 7 сар өмнө
parent
commit
f333c6c550
32 өөрчлөгдсөн 4812 нэмэгдсэн , 919 устгасан
  1. 1 0
      package.json
  2. 12 10
      public/config.js
  3. 1 0
      public/staticConfig.js
  4. 6 7
      src/components/TableAirport/index.vue
  5. 34 27
      src/views/lessRegistrationBagtag/index.vue
  6. 1 1
      src/views/login/index.vue
  7. 31 0
      src/views/newAbnormalBagDetails/components/baggageAbnormal.vue
  8. 188 0
      src/views/newAbnormalBagDetails/components/baggageList.vue
  9. 367 0
      src/views/newAbnormalBagDetails/components/baggageMessage.vue
  10. 112 0
      src/views/newAbnormalBagDetails/components/baggageStory.vue
  11. 494 0
      src/views/newAbnormalBagDetails/components/baggageView.vue
  12. 478 0
      src/views/newAbnormalBagDetails/index.vue
  13. 391 0
      src/views/newAbnormalBagDetails/mix/showCols.js
  14. 104 0
      src/views/newAbnormalBagDetails/mix/tableCols.js
  15. 30 3
      src/views/newArrival/index.vue
  16. 1 1
      src/views/newBagDetails/components/baggageList.vue
  17. 1 1
      src/views/newBagDetails/components/baggageMessage.vue
  18. 47 9
      src/views/newBagDetails/components/baggageView.vue
  19. 2 0
      src/views/newBagDetails/index.vue
  20. 27 5
      src/views/newDeparture/index.vue
  21. 35 11
      src/views/newFlightView/index.vue
  22. 93 8
      src/views/newQuery/components/table.vue
  23. 10 2
      src/views/newQueryAdvance/index.vue
  24. 366 0
      src/views/statisticsCharts/components/statisticsHeaderNew.vue
  25. 1003 0
      src/views/statisticsCharts/components/tableformbrsNew.vue
  26. 1 1
      src/views/statisticsCharts/index.vue
  27. 12 1
      src/views/statisticsCharts/views/nodeStatisticsCharts.vue
  28. 85 0
      src/views/statisticsCharts/views/report/scanningStatisticsNew.vue
  29. 149 0
      src/views/systemSettings/views/newAuth/components/select.vue
  30. 7 2
      src/views/systemSettings/views/newAuth/index.vue
  31. 4 2
      src/views/table/css/index.scss
  32. 719 828
      yarn.lock

+ 1 - 0
package.json

@@ -27,6 +27,7 @@
     "lodash": "^4.17.21",
     "normalize.css": "7.0.0",
     "nprogress": "0.2.0",
+    "nvm": "^0.0.4",
     "path-to-regexp": "2.4.0",
     "pnpm": "^9.10.0",
     "svg-baker-runtime": "^1.4.7",

+ 12 - 10
public/config.js

@@ -17,7 +17,9 @@ window.SERVICE_ID = {
   depTableId: 185, //机器维护-表头
   serTableId: 203, //服务设置-表头
   bagTableId: 20030, //行李详情-表头
+  abBagTableId: 2006028, //异常行李详情-表头
   bagTableDqId: 20330, //行李详情-流程图
+  abBagTableDqId: 203301, //异常行李详情-流程图
   bagDetailId: 20027, //行李详情-表格
   bagViewId: 20036, //航班视图-基础信息
   changePwd: 20045, // 修改密码
@@ -81,16 +83,16 @@ window.SERVICE_ID = {
   containerBaggage: 18027,
 
   /***-----统计分析------***/
-  stOrderId: 18012,
-  stOrderChartId: 18013,
-  stCalId: 18014,
-  stFigntsId: 18015,
-  stSpeedId: 18016,
-  stBaggageId: 18017,
-  stMapId: 18018,
-  stCountryId: 18019,
-  stTerminalId: 18020,
-  stBrsId: 1803429,
+  stOrderId: 218012,
+  stOrderChartId: 218013,
+  stCalId: 218014,
+  stFigntsId: 218015,
+  stSpeedId: 218016,
+  stBaggageId: 218017,
+  stMapId: 218018,
+  stCountryId: 218019,
+  stTerminalId: 218020,
+  stBrsId: 21803429,
 
   /***-----统计图表------***/
   airlineOptions: 1806, // 航线下拉

+ 1 - 0
public/staticConfig.js

@@ -45,6 +45,7 @@ switch (baseNewUrl) {
       ...PLATFROM_CONFIG,
       baseNewUrl: 'http://10.211.67.163:8883',
       baseURLCA: 'http://10.211.67.163:8883',
+      expressUrl: 'http://10.211.67.163:8883',
       hasStaticRoutes: true,
     }
     break

+ 6 - 7
src/components/TableAirport/index.vue

@@ -364,7 +364,7 @@ export default {
     //监听机场变更的id  不可删除
     // dataId: {
     //   if(val) {
-    //     
+    //
     //     if (val.companyID) {
     //       this.resetTable();
     //       this.getQuery();
@@ -380,7 +380,7 @@ export default {
   },
   methods: {
     load () {
-      // 
+      //
       if (!this.isTree) {
         if (this.noMore || this.loading) {
           return;
@@ -491,7 +491,7 @@ export default {
     //初始化表格
     initTableData () {
       this.tableColsCopy = this.tableCols.filter((item) => item.needShow);
-      // 
+      //
       // debugger;
       this.tableDataCopy = _.cloneDeep(this.tableData);
       const datas = _.cloneDeep(this.tableColsCopy);
@@ -510,7 +510,7 @@ export default {
               item.listqueryTemplateID
             );
           }
-          // 
+          //
         }
         // this.filterValues[item.columnName] = ''
       });
@@ -646,13 +646,13 @@ export default {
           companyName: this.dataContent.companyName,
           fullName: "",
         };
-        // 
+        //
         // this.tableForm.companyID = this.dataContent.companyID;
       } else {
         this.$emit("handleAdd");
       }
 
-      // 
+      //
     },
     //表格-编辑
     async handleEdit (row) {
@@ -695,7 +695,6 @@ export default {
     },
     //表格-跳转
     handleHerf (row) {
-      alert("跳转");
     },
     // 新增/编辑-确认
     submitClickHandler () {

+ 34 - 27
src/views/lessRegistrationBagtag/index.vue

@@ -92,8 +92,8 @@
               </el-option>
             </el-select>
             <el-select style="width: 140px;" clearable filterable v-model="baggageValue" size="small"
-              @clear="baggageClear()" v-if="typeValue=='1'" placeholder="行李牌号" @change="baggageChange()">
-              <el-option v-for="item in baggageOptions" :key="item.luggageNum" :label="item.luggageNum"
+              @clear="baggageClear()" v-if="typeValue=='1'" placeholder="行李牌号/旅客姓名" @change="baggageChange()">
+              <el-option v-for="item in baggageOptions" :key="item.luggageNum" :label="item.luggageNum+'/'+item.passengerName"
                 :value="item.luggageNum">
               </el-option>
             </el-select>
@@ -105,8 +105,7 @@
         <div class="upload-main-content flex-wrap">
           <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading"
             element-loading-background="rgba(0, 0, 0, 0.8)" class="upload-main-content-right">
-            <el-table
-              :data="tableData2" border stripe fit height="100%" class="upload-table">
+            <el-table :data="tableData2" border stripe fit height="100%" class="upload-table">
               </el-table-column>
               <el-table-column v-for="column in tableColumns2" :key="column.key" :prop="column.prop"
                 :label="column.label">
@@ -231,6 +230,10 @@
           {
             prop: 'luggageNum',
             label: '行李牌号',
+          },
+          {
+            prop: 'passengerName',
+            label: '旅客姓名',
           }
         ],
         tableColumns2: [{
@@ -288,17 +291,17 @@
       this.getFlight()
     },
     methods: {
-      remove(row){
+      remove(row) {
         this.$confirm("是否移除当条可申报数据?", "提示", {
-            confirmButtonText: "确定",         // 确认按钮文本
-            cancelButtonText: "取消",          // 取消按钮文本
-            type: "warning",                   // 提示类型(警告)
+            confirmButtonText: "确定", // 确认按钮文本
+            cancelButtonText: "取消", // 取消按钮文本
+            type: "warning", // 提示类型(警告)
           })
           .then(() => {
             this.removeData(row)
           })
       },
-      async removeData(row){
+      async removeData(row) {
         const {
           code,
           returnData
@@ -309,18 +312,18 @@
         })
         this.getTableData()
       },
-      add(row){
+      add(row) {
         this.$confirm("是否添加为可申报数据?", "提示", {
-            confirmButtonText: "确定",         // 确认按钮文本
-            cancelButtonText: "取消",          // 取消按钮文本
-            type: "warning",                   // 提示类型(警告)
+            confirmButtonText: "确定", // 确认按钮文本
+            cancelButtonText: "取消", // 取消按钮文本
+            type: "warning", // 提示类型(警告)
           })
           .then(() => {
             this.sendData(row)
           })
       },
-      async sendData(row){
-        if(this.typeValue == "0"){
+      async sendData(row) {
+        if (this.typeValue == "0") {
           const {
             code,
             returnData
@@ -328,14 +331,13 @@
             serviceId: "8200227",
             dataContent: [{
               "Value": {
-                    "carrierFlights": row.carrierFlights,
-                    "carrierFlightsDate": row.carrierFlightsDate
-                }
+                "carrierFlights": row.carrierFlights,
+                "carrierFlightsDate": row.carrierFlightsDate
+              }
             }],
             "event": "1"
           })
-        }
-        else{
+        } else {
           const {
             code,
             returnData
@@ -343,10 +345,11 @@
             serviceId: "8200227",
             dataContent: [{
               "Value": {
-                    "carrierFlights": row.carrierFlights,
-                    "carrierFlightsDate": row.carrierFlightsDate,
-                    "luggageNum": row.luggageNum
-                }
+                "carrierFlights": row.carrierFlights,
+                "carrierFlightsDate": row.carrierFlightsDate,
+                "luggageNum": row.luggageNum,
+                "passengerName": row.passengerName
+              }
             }],
             "event": "1"
           })
@@ -433,6 +436,10 @@
             {
               prop: 'luggageNum',
               label: '行李牌号',
+            },
+            {
+              prop: 'passengerName',
+              label: '旅客姓名',
             }
           ]
         }
@@ -525,10 +532,10 @@
             return cellValue
         }
       },
-      async getTableData2(){
-        if(this.typeValue=="0"){
+      async getTableData2() {
+        if (this.typeValue == "0") {
           this.getFlight()
-        }else{
+        } else {
           this.flightChange()
         }
       },

+ 1 - 1
src/views/login/index.vue

@@ -38,7 +38,7 @@
     </el-form>
     <Dialog width="496px" customClass="dataStoreInfoDialog" :flag="pwdflag">
       <div class="dialog-public-background">
-        <div class="title">修改密码</div>
+        <div class="title">找回密码</div>
         <div class="content">
           <el-form :model="dataForm" :rules="dataRules" ref="dataForm" class="demo-dataForm">
             <el-form-item label="账号" prop="username">

+ 31 - 0
src/views/newAbnormalBagDetails/components/baggageAbnormal.vue

@@ -0,0 +1,31 @@
+<template>
+  <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="baggageAbnormal">
+    <Table style="height:100%" tableName="异常行李表" :tableTag="tableTag" ref="table" />
+  </div>
+</template>
+
+<script>
+import Table from '../../newQuery/components/table.vue'
+export default {
+  name: 'BaggageAbnormal',
+  components: { Table },
+  data () {
+    return {
+      loading: false,
+      tableTag: {}
+    }
+  },
+  mounted () {
+    const { query } = this.$route
+    const newQuery = _.cloneDeep(query)
+    if (newQuery.ID) delete newQuery.ID
+    this.tableTag = newQuery
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.baggageAbnormal {
+  height: 100%;
+}
+</style>

+ 188 - 0
src/views/newAbnormalBagDetails/components/baggageList.vue

@@ -0,0 +1,188 @@
+<template>
+  <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="baggageList">
+    <Table style="height:100%" tableName="非正常行李跟踪信息表" :istableCol="true" :tableTag="tableTag" ref="table" />
+    <div class="btns">
+      <img class="btn-square btn-shadow r16" src="@/assets/baggage/ic_export.png" title="导出" @click="exportHandler('table', '行李节点列表')">
+    </div>
+  </div>
+</template>
+
+<script>
+import Table from '../../newQuery/components/table.vue'
+import Dialog from '@/layout/components/Dialog/index.vue'
+import pf from '@/layout/mixin/publicFunc'
+import { exportToExcel } from '@/utils/table'
+export default {
+  name: 'BaggageList',
+  mixins: [pf],
+  components: { Dialog, Table },
+  props: {
+    query: {
+      type: Object,
+      default: () => { }
+    },
+    tagObj: {
+      type: Object,
+      default: () => { }
+    },
+    tableDatas: {
+      type: Array,
+      default: []
+    },
+  },
+  data () {
+    return {
+      tableCols: [],
+      baggageTableData: [],
+      spanArr: [],
+      pos: 0,
+      loading: false,
+      dataContent: {},
+      tableTag: {}
+    }
+  },
+  watch: {
+    tagObj: {
+      handler (obj) {
+        this.tableTag = obj
+      },
+      deep: true,
+    }
+  },
+  mounted () {
+    this.tableTag = this.tagObj
+  },
+  methods: {
+    async queryDetails (auth_id) {
+      try {
+        this.loading = true
+        const { code, returnData } = await this.getQueryListAuth(SERVICE_ID.bagDetailId, this.dataContent, 1, 20, auth_id)
+        if (code == 0 && returnData && returnData.length) {
+          this.baggageTableData = returnData.map((item, index) => {
+            if (item['dealTime']) {
+              item['dealTime'] = item['dealTime'].replace('T', ' ')
+            }
+            item['departureInfo'] = `${item['departureAirport']}\n${item['departureTime'] ? item['departureTime'].replace('T', '\n') : ''
+              }`
+            item['landingInfo'] = `${item['landingAirport']}\n${item['landingTime'] ? item['landingTime'].replace('T', '\n') : ''
+              }`
+            return item
+          })
+          this.initTableData(this.baggageTableData)
+          this.loading = false
+        } else {
+          this.loading = false
+        }
+      } catch (error) {
+        this.loading = false
+        console.log(error)
+        this.$message.error('失败')
+      }
+    },
+    initTableData (tableData) {
+      const spanArr = []
+      let pos = 0
+      for (let i = 0; i < tableData.length; i++) {
+        if (i === 0) {
+          spanArr.push(1)
+        } else {
+          if (
+            tableData[i]['F1'] === tableData[i - 1]['F1'] &&
+            tableData[i]['F2'] === tableData[i - 1]['F2'] &&
+            tableData[i]['departureAirport'] === tableData[i - 1]['departureAirport'] &&
+            tableData[i]['landingAirport'] === tableData[i - 1]['landingAirport']
+          ) {
+            spanArr[pos] += 1
+            spanArr.push(0)
+          } else {
+            spanArr.push(1)
+            pos = i
+          }
+        }
+      }
+      this.spanArr = spanArr
+      this.pos = pos
+    },
+    headerCellClass ({ row, column, rowIndex, columnIndex }) {
+      if (['departureInfo', 'landingInfo'].includes(column.property)) {
+        return 'pre-line'
+      }
+    },
+    cellClass ({ row, column, rowIndex, columnIndex }) {
+      const classes = []
+      if (
+        ['flightNO', 'U_Device_ID'].includes(column.property) &&
+        row[column.property] &&
+        row[column.property] !== 'FBULK'
+      ) {
+        classes.push('cell-click')
+      }
+      if (['departureInfo', 'landingInfo'].includes(column.property)) {
+        classes.push('pre-line')
+      }
+      return classes.join(' ')
+    },
+    cellClickHandler (row, column, cell, event) {
+      if (row[column.property] && row[column.property] !== 'FBULK') {
+        switch (column.property) {
+          case 'flightNO':
+            this.$router.push({
+              path: `${this.$route.path.split('/').slice(0, -1).join('/')}/flightView`,
+              query: {
+                flightNO: row.flightNO,
+                flightDate: row.flightDate
+              }
+            })
+            break
+          case 'U_Device_ID':
+            this.$router.push({
+              path: `${this.$route.path.split('/').slice(0, -1).join('/')}/containerView`,
+              query: {
+                flightNO: row.flightNO,
+                flightDate: row.flightDate,
+                departureAirport: row.departureAirport,
+                landingAirport: row.landingAirport,
+                containerID: row.U_Device_ID
+              }
+            })
+            break
+          default:
+            break
+        }
+      }
+    },
+    tableSpanMethod ({ row, column, rowIndex, columnIndex }) {
+      if (['flightNO', 'flightDate', 'departureInfo', 'landingInfo'].includes(column['property'])) {
+        const _row = this.spanArr[rowIndex]
+        const _col = _row > 0 ? 1 : 0
+        return {
+          rowspan: _row,
+          colspan: _col
+        }
+      }
+    },
+    exportHandler (refName, tableName) {
+      const table = this.$refs[refName].$el.cloneNode(true)
+      const { luggageNum, carrierFlights, carrierFlightsDate } = this.query
+      const fileName = `${tableName}-${luggageNum}-${carrierFlights}-${carrierFlightsDate}.xlsx`
+      exportToExcel(table, tableName, fileName)
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.baggageList {
+  height: 100%;
+  position: relative;
+  .btns {
+    position: absolute;
+    top: -50px;
+    right: 66px;
+    z-index: 10;
+    .r16 {
+      margin-right: 16px;
+    }
+  }
+}
+</style>

+ 367 - 0
src/views/newAbnormalBagDetails/components/baggageMessage.vue

@@ -0,0 +1,367 @@
+<template>
+  <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="baggageMessage">
+    <div class="baggageMessage-content">
+      <template v-if="messageList.length">
+        <el-scrollbar style="height: 100%">
+          <el-row style="margin:0" :gutter="15">
+            <el-col v-for="(message, index) in messageList" :key="index" :span="6">
+              <div class="card">
+                <div class="message-date">{{ message.readTime }}</div>
+                <div class="message-content">
+                  <el-scrollbar style="height: 100%">
+                    <div>{{ message.sourceData.replaceAll('n', '\n').replaceAll('r', '').replaceAll('\\', '').replaceAll('"', '') }}</div>
+                  </el-scrollbar>
+                </div>
+              </div>
+            </el-col>
+          </el-row>
+        </el-scrollbar>
+      </template>
+      <template v-else>
+        <el-empty :image-size="1" description="暂无数据" />
+      </template>
+    </div>
+    <div class="checkBtns">
+      <el-switch v-model="switchs" @change="switchsChange" active-color="#409EFF" :active-text="switchsTxt">
+      </el-switch>
+    </div>
+    <div class="btns">
+      <img class="btn-square btn-shadow" src="@/assets/baggage/ic_export.png" title="导出" @click="exportMessageToExcel">
+    </div>
+  </div>
+</template>
+
+<script>
+import pf from '@/layout/mixin/publicFunc'
+import * as XLSX from 'xlsx'
+import XLSX_STYLE from 'xlsx-style'
+import FileSaver from 'file-saver'
+export default {
+  name: 'BaggageMessage',
+  mixins: [pf],
+  props: {
+    query: {
+      type: Object,
+      default: () => { }
+    },
+    tagObj: {
+      type: Object,
+      default: () => { }
+    }
+  },
+  data () {
+    return {
+      messageList: [],
+      loading: false,
+      switchs: false,
+      switchsTxt: '未过滤',
+      dataContent: [],
+      messageListCopy: []
+    }
+  },
+  watch: {
+    tagObj: {
+      handler (obj) {
+        this.dataContent = obj
+        this.queryDetails()
+      },
+      deep: true
+    }
+  },
+  created () {
+    this.dataContent = this.tagObj
+  },
+  mounted () {
+    this.queryDetails()
+  },
+  methods: {
+    async queryDetails () {
+      try {
+        this.loading = true
+        const { code, returnData } = await this.getQueryList(SERVICE_ID.bagDetailId, this.dataContent)
+        if (code == 0 && returnData && returnData.length) {
+          // this.messageList = [...returnData]
+          const messageDatas = [...returnData]
+          messageDatas.map(item => {
+            const { dataObjectId, dataType } = item
+            if (dataObjectId && dataObjectId.length) {
+              const len = dataObjectId.length
+              let place = null
+              function popNums (num) {
+                return dataObjectId.substring(len - num, len)
+              }
+              // const popNums = [100, 101, 102].map(item => item.toString())
+              // const target = dataObjectId.substring(len - 3, len)
+              // const place = popNums.includes(target) ? '(国航)' : dataObjectId.substring(len - 5, len) == '10000' ? '(国航)' : dataObjectId.substring(len - 5, len) == '20021' ? other : other
+              const [target3, target5, target6] = [popNums(3), popNums(5), popNums(6)]
+              if (target3 == '100' || target5 == '10000') {
+                place = '(星盟)'
+              }
+              if (target3 == '101') {
+                place = '(航易行)'
+              }
+              if (target3 == '102') {
+                place = '(首都机场)'
+              }
+              if (target5 == '20021') {
+                place = dataType == ('BSM' || 'bsm') ? '(航信)' : '(BRS)'
+              }
+              if (target6 == '218602') {
+                place = '(山航)'
+              }
+              if (target6 == '218604') {
+                place = '(深航)'
+              }
+              item.readTime = item.readTime ? item.readTime.replace('T', ' ') + place : item.createAt.replace('T', ' ') + place
+            } else {
+              item.readTime = item.readTime.replace('T', ' ') || item.createAt.replace('T', ' ')
+            }
+          })
+          this.messageList = _.cloneDeep(messageDatas)
+          this.messageListCopy = _.cloneDeep(messageDatas)
+          // this.messageList = returnData.map(message => ({
+          //   ...message,
+          //   readTime: message.readTime ? `${message.readTime.replace('T', ' ')}(广州)` : '(北京)'
+          // }))
+          this.loading = false
+        } else {
+          this.loading = false
+        }
+      } catch (error) {
+        this.loading = false
+        console.log(error)
+        this.$message.error('失败')
+      }
+    },
+    //初始化数据地址
+    formatTableData (returnData) {
+      const messageDatas = [...returnData]
+      messageDatas.forEach(item => {
+        const { dataObjectId, dataType } = item
+        if (dataObjectId) {
+          const len = dataObjectId.length
+          const place = dataObjectId.substring(len - 5, len) == '20021'
+          if (place) {
+            const bsm = dataType ? `${dataType} `.toLocaleUpperCase() == 'BSM' : false
+            const bpm = dataType ? `${dataType} `.toLocaleUpperCase() == 'BPM' : false
+            if (place && bsm) {
+              item.readTime = item.readTime ? item.readTime.replace('T', ' ') + '航信' : item.readTime
+            }
+            if (place && bpm) {
+              item.readTime = item.readTime ? item.readTime.replace('T', ' ') + 'BRS' : item.readTime
+            }
+          } else {
+            item.readTime = item.readTime ? item.readTime.replace('T', ' ') : item.createAt.replace('T', ' ')
+          }
+        } else {
+          item.readTime = item.readTime ? item.readTime.replace('T', ' ') : item.createAt.replace('T', ' ')
+        }
+      })
+      return messageDatas
+    },
+    exportMessageToExcel () {
+      const xlsxDatas = [['Date & Time', 'Message']]
+      xlsxDatas.push(
+        ...this.messageList.map(message => [
+          message.readTime || message.createAt.replace('T', ' '),
+          message.sourceData.replaceAll('n', '\n').replaceAll('r', '').replaceAll('\\', '').replaceAll('"', '')
+          // message.sourceData.replaceAll(/[\\r\\n]{2,}/g, '\n').replaceAll('\\', '')
+        ])
+      )
+      const columnWidths = []
+      xlsxDatas.forEach(row => {
+        // 计算每一列宽度,考虑换行
+        row.forEach((cell, columnIndex) => {
+          const cellWidth = Math.max(
+            ...cell
+              .toString()
+              .split('\n')
+              .map(cellRow =>
+                cellRow.split('').reduce((pre, curr) => {
+                  const letterSize = curr.charCodeAt(0) > 255 ? 2 : 1
+                  return pre + letterSize
+                }, 0)
+              )
+          )
+          if ((!columnWidths[columnIndex] && cellWidth > 0) || cellWidth > columnWidths[columnIndex]) {
+            columnWidths[columnIndex] = cellWidth
+          }
+        })
+      })
+      // 生成表格数据
+      const sheet = XLSX.utils.aoa_to_sheet(xlsxDatas)
+      // 添加列宽度
+      sheet['!cols'] = columnWidths.map(width => ({
+        wch: width + 2
+      }))
+      // 表格对齐、添加边框
+      const borderStyle = {
+        style: 'medium',
+        color: {
+          rgb: 'FFFFFF'
+        }
+      }
+      const reg = /^[A-Z]+([\d]+$)/
+      for (const key in sheet) {
+        const match = reg.test(key)
+        if (match) {
+          const rowIndex = reg.exec(key)[1]
+          let cellStyle = {
+            alignment: {
+              horizontal: 'center',
+              vertical: 'center',
+              wrapText: true
+            }
+          }
+          if (Number(rowIndex) === 1) {
+            cellStyle = {
+              ...cellStyle,
+              border: {
+                top: borderStyle,
+                right: borderStyle,
+                bottom: borderStyle,
+                left: borderStyle
+              },
+              font: {
+                color: {
+                  rgb: 'FFFFFF'
+                }
+              },
+              fill: {
+                fgColor: {
+                  rgb: '3366FF'
+                }
+              }
+            }
+          } else {
+            cellStyle.alignment.horizontal = 'left'
+          }
+          sheet[key].s = cellStyle
+        }
+      }
+      // 表格数据转换
+      const workBook = XLSX.utils.book_new()
+      XLSX.utils.book_append_sheet(workBook, sheet, '行李原始报文')
+      const tableWrite = XLSX_STYLE.write(workBook, {
+        bookType: 'xlsx',
+        bookSST: true,
+        type: 'buffer',
+        cellStyles: true
+      })
+      // 下载表格
+      const { luggageNum, flightNo, flightDate, carrierFlights, carrierFlightsDate } = this.query
+      let fileName
+      if (flightNo || flightDate) {
+        fileName = `行李原始报文-${luggageNum}-${flightNo}-${flightDate}.xlsx`
+      } else {
+        fileName = `行李原始报文-${luggageNum}-${carrierFlights}-${carrierFlightsDate}.xlsx`
+      }
+      FileSaver.saveAs(new Blob([tableWrite], { type: 'application/octet-stream' }), fileName)
+    },
+    switchsChange (val) {
+      if (!val) {
+        this.switchsTxt = '未过滤'
+        this.messageList = [...this.messageListCopy]
+      } else {
+        const ndata = _.cloneDeep(this.messageListCopy)
+        const nmap = []
+        const pattern = /[`~!@#$^\-&*()=|{}':;',\\\[\]\.<>\/?~!@#¥……&*()——|{}【】';:""'。,、?\s]/g
+        ndata.map((item, index) => {
+          const nitem = item['sourceData'].replace(pattern, "")
+          const ntime = item['readTime'].replace(pattern, "")
+          item['sourceDataNew'] = nitem
+          item['readTimeNew'] = ntime + nitem
+          item['sourceDataIndex'] = index + 1
+          nmap.push(item)
+        })
+        const narr1 = this.uniqByMessage(nmap)
+        if (!narr1.length) {
+          this.switchs = false
+          this.$message.warning('当前报文无数据可过滤')
+          return
+        } else {
+          this.switchsTxt = '已过滤'
+          this.messageList = [...narr1]
+        }
+      }
+    },
+    uniqByMessage (arr) {
+      const narr = [...arr]
+      if (!narr.length) return narr
+      const nmap = {}
+      const [nmap1, nmap2] = [[], []]
+      const key = 'readTimeNew'
+      narr.map(item => {
+        if (!nmap[item['sourceDataNew']]) {
+          nmap[item['sourceDataNew']] = item.sourceDataNew
+          nmap1.push(item)
+        } else {
+          nmap2.push(item)
+        }
+      })
+      const res = [...nmap1, ...nmap2].filter(
+        (item) =>
+        (
+          nmap1.some((p) => item[key] == p[key]) &&
+          nmap2.some((c) => item[key] == c[key])
+        )
+      )
+      return _.orderBy([...nmap1, ...res], ['sourceDataIndex'], ['asc']) || []
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.baggageMessage {
+  height: 100%;
+  position: relative;
+  &-content {
+    padding: 24px;
+    height: 100%;
+  }
+  .card {
+    width: 100%;
+    height: 440px;
+    padding: 20px;
+    background: #ffffff;
+    border: 1px solid #dfe3ea;
+    box-shadow: 0px 3px 2px 0px rgba(0, 0, 0, 0.29);
+    margin-bottom: 12px;
+    > .message-date {
+      // width: 180px;
+      width: 220px;
+      height: 26px;
+      line-height: 14px;
+      font-size: 14px;
+      font-family: Helvetica;
+      color: #afb4bf;
+      border-bottom: 1px solid #afb4bf;
+      margin-bottom: 18px;
+    }
+    > .message-content {
+      white-space: pre-line;
+      line-height: 24px;
+      font-size: 14px;
+      color: #303133;
+      word-break: break-all;
+      height: calc(100% - 44px);
+    }
+  }
+  .btns {
+    position: absolute;
+    top: -50px;
+    right: 24px;
+    z-index: 10;
+    .r16 {
+      margin-right: 16px;
+    }
+  }
+  .checkBtns {
+    position: absolute;
+    top: -45px;
+    right: 84px;
+    z-index: 10;
+  }
+}
+</style>

+ 112 - 0
src/views/newAbnormalBagDetails/components/baggageStory.vue

@@ -0,0 +1,112 @@
+<template>
+  <div class="baggageStory">
+    <div class="table">
+      <el-table height="400" :data="storyTable" border style="width: 100%">
+        <el-table-column prop="luggageDescribe" label="行李服务记录">
+        </el-table-column>
+        <el-table-column prop="createtime" label="创建时间">
+        </el-table-column>
+      </el-table>
+    </div>
+    <div class="content t30">
+      <el-form ref="form" :model="form" label-width="70px">
+        <el-form-item label="输入备注">
+          <el-input type="textarea" clearable v-model="form.desc"></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="right t30">
+      <el-button size="medium" class="r24" type="primary" @click="onStoryCheck">确定</el-button>
+      <el-button size="medium" @click="storyFlag = false">取消</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { parseTime } from '@/utils'
+import { getToken } from '@/utils/auth'
+import { Query, newData, modifyData } from '@/api/webApi'
+export default {
+  name: 'BaggageStory',
+  props: {
+    bagID: {
+      type: Number || String,
+      default: 0
+    }
+  },
+  data () {
+    return {
+      storyFlag: false,
+      storyTable: [],
+      form: {
+        desc: ''
+      },
+      storyId: ''
+    }
+  },
+  mounted () {
+    this.storyId = this.bagID || ''
+    if (this.storyId) {
+      this.queryStoryCheck()
+    }
+  },
+  methods: {
+    async onStoryCheck () {
+      if (!this.storyId) return
+      const params = {
+        serviceId: SERVICE_ID.advancedStoryId,
+        dataContent: {
+          luggageID: this.storyId,
+          luggageDescribe: this.form.desc,
+          user_id: getToken('userid')
+        },
+        event: '1'
+      }
+      const parmasts = {
+        "serviceId": SERVICE_ID.advancedRemakesId,
+        "page": 1,
+        "pageSize": 10,
+        "dataContent": {
+          "ID": this.storyId,
+          "luggage_describe": "..."
+        },
+        "event": "2"
+      }
+      await modifyData(parmasts)
+      const { code } = await newData(params)
+      if (code == 0) {
+        const item = {
+          luggageDescribe: this.form.desc,
+          createtime: parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}')
+        }
+        this.storyTable.push(item)
+        this.$message.success('操作成功')
+        this.form.desc = ''
+      }
+      else this.$message.success('操作失败')
+    },
+    async queryStoryCheck () {
+      this.storyTable = []
+      const params = {
+        serviceId: SERVICE_ID.advancedStoryId,
+        dataContent: {
+          luggageID: this.storyId,
+        },
+        event: '0'
+      }
+      const { code, returnData } = await Query(params)
+      if (code == 0 && returnData?.length) {
+        const ndatas = [...returnData]
+        ndatas.forEach(item => item.createtime = parseTime(item.createtime.replace('T', ' '), '{y}-{m}-{d} {h}:{i}:{s}'))
+        this.storyTable = ndatas
+      }
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.baggageStory {
+  padding: 20px;
+}
+</style>

+ 494 - 0
src/views/newAbnormalBagDetails/components/baggageView.vue

@@ -0,0 +1,494 @@
+<template>
+  <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="baggageView">
+    <el-scrollbar style="height: 100%">
+      <div v-infinite-scroll="load" class="baggageView-content">
+        <div v-for="(item,index) in tableData" :key="index" class="baggageView-list">
+          <div class="part2">
+            <div class="part2_info">
+              <div class="title">
+                <div class="fightNo">{{ item.carrierFlights || item.inflightNo }}</div>
+                <div class="fightDate">{{ item.carrierFlightsDate || item.inflightDate }}</div>
+                <div class="fightLine">{{ item.outAirport }}{{ item.takeoff_terminal }} -- {{item.landAirport}}{{ item.target_terminal }}</div>
+                <div class="fightTime">{{ item.takeTime }} -- {{ item.landTime }}</div>
+              </div>
+              <div class="baggage-track-chart">
+                <div class="step-line">
+                  <div v-for="(line, index) in 6" :key="index" :class="['step-line-segment', { 'step-line-active': activeStepLine(index,item.bagStatus) }]"></div>
+                </div>
+                <div v-for="(p, cindex) in item.bagStatus" :key="cindex" :class="{ 'step-item': true, 'active-item': p.timeValue }">
+                  <div :class="activeStepLineDanger(cindex,item)" class="step-circle">
+                    <span class="step-name">{{ p.nodeName }}</span>
+                  </div>
+                  <div v-if="p.timeValue || p.stateValue || p.loclValue || p.fourSecurity || p.currentResult" class="step-info">
+                    <div :class="statusClasses(p.dataState)">{{ p.dataState }}</div>
+                    <div :class="statusClasses(p.stateValue)">{{ p.stateValue }}</div>
+                    <span class="step-time">{{ p.timeValue }}</span>
+                    <div class="step-location">{{ p.loclValue }}</div>
+                    <div :class="statusClasses(p.fourSecurity)">{{ p.fourSecurity }}</div>
+                  </div>
+                  <div v-else class="step-info">无</div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-scrollbar>
+  </div>
+</template>
+
+<script>
+import pf from '@/layout/mixin/publicFunc'
+export default {
+  name: 'BaggageView',
+  mixins: [pf],
+  props: {
+    queryObj: {
+      type: Object,
+      default: () => { }
+    },
+    tagObj: {
+      type: Object,
+      default: () => { }
+    }
+  },
+  data () {
+    return {
+      stepNodes: [
+        {
+          nodeCode: 'CHECKIN',
+          nodeName: '值机',
+          timeProp: 'checkInDate',
+          timeValue: '',
+          loclProp: 'checkInLocation',
+          loclValue: '',
+          stateProp: 'checkState',
+          stateValue: '',
+        },
+        {
+          nodeCode: 'B_SECURITY',
+          nodeName: '预检',
+          timeProp: 'B_security_check_time',
+          timeValue: '',
+          loclProp: 'B_security_location',
+          loclValue: '',
+          stateProp: 'B_SECURITYState',
+          stateValue: '',
+        },
+        {
+          nodeCode: 'SECURITY',
+          nodeName: '安检',
+          timeProp: 'security_check_time',
+          timeValue: '',
+          loclProp: 'security_location',
+          loclValue: '',
+          stateProp: 'securityInspectionResults',
+          stateValue: '',
+        },
+        {
+          nodeCode: 'SORT',
+          nodeName: '分拣',
+          timeProp: 'sorting_time',
+          timeValue: '',
+          loclProp: 'sorting_location',
+          loclValue: '',
+          stateProp: 'sortState',
+          stateValue: '',
+        },
+        {
+          nodeCode: 'LOAD',
+          nodeName: '装车',
+          timeProp: 'loading_time',
+          timeValue: '',
+          loclProp: 'installationAddress',
+          loclValue: '',
+          stateProp: 'abnormalType',
+          stateValue: '',
+        },
+        {
+          nodeCode: 'INFL',
+          nodeName: '装机',
+          timeProp: 'installation_time',
+          timeValue: '',
+          loclProp: 'installation_location',
+          loclValue: '',
+          stateProp: 'normal',
+          stateValue: '',
+        },
+        {
+          nodeCode: 'UNLOAD',
+          nodeName: '卸机',
+          timeProp: 'unloadtime',
+          timeValue: '',
+          loclProp: 'unloadLocation',
+          loclValue: '',
+          stateProp: 'normal',
+          stateValue: '',
+        },
+        {
+          nodeCode: 'ARRIVED',
+          nodeName: '到达',
+          timeProp: 'arrivedtime',
+          timeValue: '',
+          loclProp: 'arrviedLocation',
+          loclValue: '',
+          stateProp: 'normal',
+          stateValue: '',
+        }
+      ],
+      tableData: [],
+      tableDataCopy: [],
+      page: 0,
+      pageSize: 20,
+      dataContent: {},
+      loading: false,
+      noMore: false
+    }
+  },
+  computed: {
+    activeStepLine () {
+      return function (index, arrs) {
+        return (arrs[index].stateValue || arrs[index].loclValue || arrs[index].timeValue) && (arrs[index + 1].stateValue || arrs[index + 1].loclValue || arrs[index + 1].timeValue)
+      }
+    },
+    activeStepLineDanger () {
+      return function (index, item) {
+        function diffMinutes () {
+          const { takeTime } = item
+          const [hour, minutes] = takeTime?.split(':')
+          if (minutes - 15 >= 0) {
+            return `${hour}: ${minutes - 15 >= 10 ? minutes - 15 : '0' + (minutes - 15)}`
+          } else {
+            if (hour - 1 > 0) {
+              return `${hour - 1}:${minutes - 15 + 60 >= 10 ? minutes - 15 + 60 : '0' + (minutes - 15 + 60)}`
+            } else {
+              return `23:${minutes - 15 + 60 >= 10 ? minutes - 15 + 60 : '0' + (minutes - 15 + 60)}`
+            }
+          }
+        }
+        const arrs = item.bagStatus
+        const { stateProp, stateValue,dataState } = arrs[index]
+        if (stateProp == 'securityInspectionResults' && stateValue == 'UCL') {
+          if (arrs[index + 1].stateValue || arrs[index + 1].loclValue || arrs[index + 1].timeValue || arrs[index + 2].stateValue || arrs[index + 2].loclValue || arrs[index + 2].timeValue) {
+            return 'step-circle-waring'
+          } else {
+            return 'step-circle-danger'
+          }
+        }
+        if(stateProp == 'checkState'&& dataState =="DEL"){
+          return 'step-circle-danger'
+        }
+        if(stateProp == 'abnormalType'&& stateValue !="" && stateValue !=null){
+          return 'step-circle-danger'
+        }
+        // if (stateProp == 'securityInspectionResults' && !stateValue) {
+        //   if (this.tableData.length >= 2 || arrs[index + 1].stateValue || arrs[index + 1].loclValue || arrs[index + 1].timeValue || arrs[index + 2].stateValue || arrs[index + 2].loclValue || arrs[index + 2].timeValue) {
+        //     return 'step-circle-waring'
+        //   }
+        // }
+      }
+    },
+    statusClasses () {
+      return function (status) {
+        const classes = ['step-status']
+        if (typeof status === 'string') {
+          if (status.includes('不正常') || status.includes('不通过') || status.includes('取消') || status.includes('DEL') || status.includes('OFF')|| status.includes('ONA')|| status.includes('OND')|| status.includes('LBA')|| status.includes('UNS')|| status.includes('NAL')) {
+            classes.push('step-status-abnormal')
+          }
+          else if (status.includes('正常') || status.includes('通过')) {
+            classes.push('step-status-normal')
+          }
+          else {
+            classes.push('step-status-abnormal')
+          }
+        }
+        return classes
+      }
+    }
+  },
+  watch: {
+    tagObj: {
+      handler (obj) {
+        this.dataContent = obj
+        this.restTable()
+        this.load()
+      },
+      deep: true
+    },
+    queryObj: {
+      handler (obj) {
+        this.tableDataCopy = []
+        this.tableData = []
+        this.dataContent = obj
+        this.restTable()
+        this.load()
+      },
+      deep: true
+    },
+  },
+  created () {
+    this.dataContent = this.queryObj
+  },
+  methods: {
+    //获取行李信息
+    async getLuggageList (id, dataContent = this.dataContent, page, pageSize) {
+      try {
+        this.loading = true
+        const { code, returnData } = await this.getQueryList(id, dataContent, page, pageSize)
+        if (code == 0) {
+          if (returnData.length === 0) {
+            this.page--;
+            this.noMore = true;
+            this.loading = false;
+          }
+          returnData.forEach(item => {
+            item.bagStatus = _.cloneDeep(this.stepNodes)
+          })
+          this.tableDataCopy.push(...returnData)
+          // this.tableDataCopy = _.uniqBy(this.tableDataCopy, 'ID')
+          // this.tableDataCopy = this.tableDataCopy.sort((a, b) => Date.parse(a.carrierFlightsDate) - Date.parse(b.carrierFlightsDate))
+          this.tableDataCopy.forEach(item => {
+            item.bagStatus.map(p => {
+              const { timeProp, loclProp, stateProp } = p
+              if (item.hasOwnProperty(timeProp) || item.hasOwnProperty(loclProp) || item.hasOwnProperty(stateProp)) {
+                p.timeValue = item[timeProp]
+                p.loclValue = item[loclProp]
+                p.stateValue = item[stateProp]
+              }
+            })
+          })
+          this.getBagTime(this.tableDataCopy)
+          this.loading = false
+        } else {
+          this.page--
+          this.loading = false
+          this.$message.error("获取表格数据失败")
+        }
+      } catch (error) {
+        this.loading = false;
+        console.log(error)
+      }
+    },
+    statusSecurity (item) {
+      const { securityInspectionResults, security_location } = item
+      const securityNums = ['XSA001', 'XSA003', 'XSB001', 'XSB004']
+      // if (securityInspectionResults == 'CLR') return securityInspectionResults
+      // if (securityInspectionResults == 'UCLR') return securityInspectionResults
+      if (securityNums.includes(security_location)) return 'ULR'
+      else return securityInspectionResults
+    },
+    restTable () {
+      this.loading = false
+      this.noMore = false
+      this.page = 0
+      this.tableData = []
+    },
+    load () {
+      if (Object.keys(this.queryObj).length || Object.keys(this.tagObj).length) {
+        if (this.noMore || this.loading) {
+          return;
+        }
+        this.getLuggageList(SERVICE_ID.abBagTableDqId, this.dataContent, ++this.page, this.pageSize);
+      }
+    },
+    async getBagTime (arr) {
+      const newArr = [...arr]
+      const reqUrls = []
+      newArr.forEach(item => {
+        const { carrierFlights, carrierFlightsDate, outAirport, landAirport, bagStatus } = item
+        const index = bagStatus.findIndex(citem => citem.stateProp == 'securityInspectionResults')
+        const index2 = bagStatus.findIndex(citem => citem.stateProp == 'checkState')
+        const index3 = bagStatus.findIndex(citem => citem.stateProp == 'abnormalType')
+        if (index > -1) {
+          bagStatus[index]['stateValue'] = this.statusSecurity(item)
+          bagStatus[index]['fourSecurity'] = item.fourSecurity
+        }
+        if(index2>-1){
+          bagStatus[index2]['dataState'] = item.dataState
+        }
+        if(index3>-1){
+          console.log(item)
+          console.log(123)
+          bagStatus[index3]['stateValue'] = item.abnormalType
+        }
+        const reqItem = this.getQueryList(SERVICE_ID.baggageTime, {
+          carrierFlights,
+          carrierFlightsDate,
+          outAirport,
+          landAirport
+        })
+        reqUrls.push(reqItem)
+      })
+      const allReqs = await Promise.allSettled(reqUrls)
+      allReqs.forEach((item, index) => {
+        const { status, value } = item
+        if (status == 'fulfilled') {
+          const { returnData } = value
+          const newArray = [...returnData]
+          if (newArray && newArray.length) {
+            const itemObj = newArray[0]
+            const newObj = {}
+            const { actualTakeOffTime, estimateTakeOffTime, scheduleTakeOffTime, actualLandInTime, estimateLandInTime, scheduleLandInTime } = itemObj
+            newObj.newTakeoff_time = actualTakeOffTime ? actualTakeOffTime : estimateTakeOffTime ? estimateTakeOffTime : scheduleTakeOffTime
+            newObj.newLand_time = actualLandInTime ? actualLandInTime : estimateLandInTime ? estimateLandInTime : scheduleLandInTime
+            newObj.takeTime = newObj.newTakeoff_time?.split('T').at(-1)
+            newObj.landTime = newObj.newLand_time?.split('T').at(-1)
+            newArr[index] = Object.assign(newArr[index], newObj)
+          }
+        }
+      })
+      this.tableData = _.orderBy([...newArr], ["carrierFlightsDate", "takeTime"], ["asc"]);
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.baggageView {
+  height: 100%;
+  &-list {
+    height: 183px;
+    border-bottom: 1px solid #dfe3ea;
+    padding: 30px 32px 47px 32px;
+    &:last-child {
+      border-bottom: none;
+    }
+    .part2 {
+      width: 100%;
+      background: #ffffff;
+      display: flex;
+      flex-direction: row;
+      justify-content: space-between;
+      align-items: flex-start;
+      .part2_info {
+        flex: 1;
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-start;
+        align-items: flex-start;
+        line-height: 42px;
+
+        .title {
+          width: 160px;
+          margin-right: 30px;
+          font-size: 14px;
+          font-family: Helvetica;
+          font-weight: 400;
+          color: #101116;
+          line-height: 1;
+          .fightNo {
+            font-size: 24px;
+            font-family: Helvetica;
+            font-weight: bold;
+            margin-bottom: 8px;
+          }
+          .fightDate {
+            margin-bottom: 15px;
+          }
+          .fightLine {
+            margin-bottom: 8px;
+          }
+          .fightTime {
+            margin-top: 13px;
+          }
+        }
+        .type {
+          font-size: 18px;
+          font-weight: bold;
+          margin-right: 20px;
+          .warn {
+            color: #df3559;
+          }
+          .normal {
+            color: #519f6b;
+          }
+        }
+        .airline {
+          width: 120px;
+          margin-right: 20px;
+        }
+        .baggage-track-chart {
+          flex: 1;
+          height: 124px;
+          position: relative;
+          display: flex;
+          flex-direction: row;
+          justify-content: space-between;
+          width: 100%;
+        }
+        .step-line {
+          width: calc(100% - 80px);
+          height: 10px;
+          position: absolute;
+          top: 16px;
+          right: 0;
+          left: 0;
+          margin: auto;
+          display: flex;
+          .step-line-segment {
+            width: calc(100% / 6);
+            height: 100%;
+            background: #afb4bf;
+            &.step-line-active {
+              background: #2d67e3;
+            }
+          }
+        }
+        .step-item {
+          width: 80px;
+          height: 100%;
+          text-align: center;
+          font-size: 14px;
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: flex-start;
+          z-index: 1;
+          font-family: Helvetica, "Microsoft Yahei";
+          .step-circle {
+            width: 42px;
+            height: 42px;
+            border-radius: 50%;
+            background: #aaacb2;
+            .step-name {
+              color: #ffffff;
+              font-size: 14px;
+              font-weight: bold;
+            }
+          }
+          .step-info {
+            margin-top: 8px;
+            color: #101116;
+            line-height: 22px;
+            .step-status {
+              &-normal {
+                color: #4ab36f;
+              }
+              &-abnormal {
+                color: #e9af4b;
+              }
+            }
+            .step-time {
+              white-space: pre-line;
+              font-size: 12px;
+              line-height: 20px;
+            }
+          }
+          &.active-item .step-circle {
+            background: #2d67e3;
+          }
+          .step-circle-danger {
+            background: #ff3303 !important;
+          }
+          .step-circle-waring {
+            background: #2d67e3;
+          }
+        }
+      }
+      .btns {
+        margin-top: 6px;
+      }
+    }
+  }
+}
+</style>

+ 478 - 0
src/views/newAbnormalBagDetails/index.vue

@@ -0,0 +1,478 @@
+<template>
+  <div class="newBagDetails">
+    <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="newBagDetails-info">
+      <div class="newBagDetails-info-look">
+        <el-row :gutter="20">
+          <el-col :span="4">
+            <div class="flex-wrap">
+              <el-tooltip class="item" effect="dark" :content="passengerName" placement="top">
+                <span class="newBagDetails-info-look-name">{{ passengerName }}</span>
+              </el-tooltip>
+              <el-button type="text">查看</el-button>
+            </div>
+          </el-col>
+          <el-col :span="18">
+            <el-scrollbar>
+              <div class="tags-view-wrapper">
+                <div v-for="(item,index) in detailsArr" class="tags-view-item" @click="tagClick(item,index)" :class="activeIndex == index ? 'active' : ''" :key="index">{{ item.luggageNum }}</div>
+              </div>
+            </el-scrollbar>
+          </el-col>
+          <el-col :span="2">
+            <el-button @click="dialogFlag = true" type="text">行李信息设置</el-button>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="newBagDetails-info-details">
+        <div class="newBagDetails-info-details-msgs">
+          <el-scrollbar style="height: 100%;">
+            <el-row class="newBagDetails-info-details-msgs-l1" :gutter="20">
+              <el-col :span="6" class="msgs-list" v-for="(item,index) in tableColsCopy" :key="index">{{ item.columnLabel }}:
+                <el-tooltip class="item" effect="dark" :content="item.value" placement="top">
+                  <span>{{ item.value }}</span>
+                </el-tooltip>
+              </el-col>
+            </el-row>
+          </el-scrollbar>
+        </div>
+      </div>
+    </div>
+    <div class="newBagDetails-contents">
+      <div class="newBagDetails-contents-tabs flex-wrap">
+        <div class="newBagDetails-contents-tabs-title">行李跟踪信息</div>
+        <div class="newBagDetails-contents-tabs-btns flex-wrap">
+          <div v-for="(item,index) in tabMenu" @click="tabClick(item,index)" :key="index" :class="index == tabIndex ? 'is-active' : ''" class="newBagDetails-contents-tabs-btns-bt">{{ item.name }}</div>
+        </div>
+      </div>
+      <div class="newBagDetails-contents-page">
+        <component ref="dataChild" :query="query" :queryObj="queryObj" :tableDatas="tableDatas" :tagObj="tagObj" :bagID="bagID" :is="componentName"></component>
+      </div>
+    </div>
+    <Dialog :flag="dialogFlag" width="600px" class="dialog-check-group">
+      <div class="dialog-wrapper">
+        <div class="title">列设置</div>
+        <div style="height: 600px" class="content">
+          <el-scrollbar style="height: 100%">
+            <el-tree ref="columnSetTree" :data="tableCols" :class="colsCheckClass" show-checkbox node-key="queryTemplateColumnSetID" :default-expand-all="true" :props="{
+                  label: 'columnLabel',
+                  children: 'children',
+                }" :default-checked-keys="checkedKeysTemp" @check="handleCheck" />
+          </el-scrollbar>
+        </div>
+        <div class="foot right t30">
+          <el-button size="medium" class="r24" type="primary" @click="onCheck('baggageTableData')">确定</el-button>
+          <el-button size="medium" @click="hide">取消</el-button>
+        </div>
+      </div>
+    </Dialog>
+  </div>
+</template>
+
+<script>
+import ScrollPane from "@/layout/components/TagsView/ScrollPane.vue"
+import baggageView from './components/baggageView.vue'
+import baggageList from './components/baggageList.vue'
+import baggageMessage from './components/baggageMessage.vue'
+import baggageAbnormal from './components/baggageAbnormal.vue'
+import baggageStory from './components/baggageStory.vue'
+import Dialog from '@/layout/components/Dialog/index.vue'
+import pf from '@/layout/mixin/publicFunc'
+import tableColsMixin from './mix/tableCols'
+import { getAuthData, formatOrder } from '@/utils/validate'
+import { getToken } from '@/utils/auth'
+import { showCols } from './mix/showCols'
+export default {
+  name: 'NewBagDetails',
+  mixins: [pf, tableColsMixin],
+  components: { ScrollPane, baggageView, baggageList, baggageMessage, baggageAbnormal, baggageStory, Dialog },
+  data () {
+    return {
+      infoArrs: [],
+      passenger_name: '',
+      detailsArr: [],
+      tableCols: [],
+      activeIndex: null,
+      msgs1: [],
+      dialogFlag: false,
+      tabMenu: [
+        {
+          key: 'baggageView',
+          name: '行李流程图'
+        },
+        {
+          key: 'baggageList',
+          name: '行李流程列表信息'
+        },
+        {
+          key: 'baggageMessage',
+          name: '行李报文'
+        },
+        // {
+        //   key: 'baggageAbnormal',
+        //   name: '异常行李'
+        // },
+        {
+          key: 'baggageStory',
+          name: '服务记录'
+        },
+      ],
+      tabIndex: 0,
+      componentName: 'baggageView',
+      query: '',
+      passengerName: '',
+      PNRNO: '',
+      tagObj: {},
+      tableDatas: [],
+      tableDatas5Id: '',
+      loading: false,
+      queryObj: {},
+      checkObj: {},
+      tabClickObj: {},
+      tabClickKey: '',
+      bagID: null
+    }
+  },
+  created () {
+    const { query } = this.$route
+    const { auth_id } = this.$route.meta
+    const { arrs } = getAuthData(auth_id)
+    const table = arrs.filter(item => item.auth_type == 4 || item.auth_type == 5)
+    if (table && table.length) {
+      this.tableDatas = table
+      const tableDatas5 = table.filter(item => item.auth_type == 5)
+      if (tableDatas5 && tableDatas5.length) {
+        const { auth_id } = tableDatas5[0]
+        this.tableDatas5Id = auth_id
+        this.getColumnData(auth_id)
+      }
+    }
+    // if (arrs.every(item => item.auth_ident !== 'baggage_message')) {
+    //   this.tabMenu = this.tabMenu.filter(tab => tab.key !== 'baggageMessage')
+    // }
+    const newQuery = _.cloneDeep(query)
+    if (newQuery.ID) delete newQuery.ID
+    this.query = _.cloneDeep(newQuery)
+    this.tabClickObj = _.cloneDeep(newQuery)
+  },
+  methods: {
+    //获取表头数据
+    async getColumnData (auth_id) {
+      try {
+        const { code, returnData } = await this.getQueryList(SERVICE_ID.sysUserAuthId, [{
+          user_id: getToken('userid'),
+          auth_id
+        }]);
+        if (code == 0) {
+          if (returnData && returnData.length) {
+            const nodeDatas = returnData.filter(item => item.needShow)
+            this.msgs1 = [...nodeDatas]
+            this.getLuggageInfo(auth_id)
+          }
+        } else {
+          this.$message.error("获取表头数据失败");
+        }
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    //设置行李信息弹框
+    setBagInfo () {
+      const bagColsMap = JSON.parse(localStorage.getItem('bagColsMap')) || {}
+      this.tableCols = [...this.orderColData([...this.msgs1]), ...this.hideData([...this.msgs1])]
+      if (!Object.keys(bagColsMap).length) {
+        this.tableColsCopy = this.orderColData([...this.msgs1])
+        this.checkedKeysTemp = this.orderColData([...this.msgs1]).map(item => item.queryTemplateColumnSetID)
+      } else {
+        this.tableColsCopy = [...bagColsMap.bagColsLists]
+        this.checkedKeysTemp = [...bagColsMap.bagColsKeys]
+      }
+    },
+    //获取行李信息
+    async getLuggageInfo (auth_id, checkParams) {
+      try {
+        this.loading = true
+        const { code, returnData } = await this.getQueryListAuth(SERVICE_ID.abBagTableId, checkParams ? this.checkObj : this.query, 1, 20, auth_id)
+        if (code == 0 && returnData && returnData.length) {
+          const datasObj = [...returnData][0]
+          this.passengerName = datasObj['passengerName']
+          this.PNRNO = datasObj['PNRNO']
+          const { luggageNum, PNRNO, carrierFlightsDate, ID } = datasObj
+          this.bagID = ID
+          let bagColsMapOld = JSON.parse(localStorage.getItem('bagColsMap')) || {}
+          let bagColsMapNew = {}
+          for (const key in datasObj) {
+            this.msgs1.map(item => {
+              if (item.columnName == key) {
+                item.value = datasObj[key] != 0 && datasObj[key] != 1 ? datasObj[key] : datasObj[key] == 0 ? 'N' : 'Y'
+              }
+              if (item.columnName == 'activeState' && key == 'activeState') {
+                item.value = datasObj[key] == 0 ? 'Y' : 'N'
+              }
+            })
+            if(bagColsMapOld.bagColsLists && bagColsMapOld.bagColsLists.length){
+              bagColsMapOld.bagColsLists.map(item => {
+                if (item.columnName == key) {
+                  item.value = datasObj[key] != 0 && datasObj[key] != 1 ? datasObj[key] : datasObj[key] == 0 ? 'N' : 'Y'
+                }
+                if (item.columnName == 'activeState' && key == 'activeState') {
+                  item.value = datasObj[key] == 0 ? 'Y' : 'N'
+                }
+                localStorage.setItem('bagColsMap', JSON.stringify(bagColsMapOld))
+              })
+            }
+          }
+
+          this.setBagInfo()
+          if (!checkParams) {
+            this.getLuggageNums()
+          }
+          this.queryObj = this.PNRNO ? {
+            luggageNum,
+            carrierFlightsDate,
+            PNRNO
+          } : this.query
+          this.loading = false
+        } else {
+          this.loading = false
+        }
+      } catch (error) {
+        this.loading = false
+        console.log(error)
+      }
+    },
+    orderColData (datas) {
+      const ndata = [...datas]
+      const needShowData = showCols.filter(item => item.index)
+      if (!ndata.length) return []
+      ndata.forEach(item => {
+        needShowData.map(citem => {
+          if (item.columnName == citem.columnName) {
+            item.index = citem.index
+          }
+        })
+      })
+      const dialogShowList = ndata.filter(item => item.index)
+      const dialogShowCols = _.orderBy(dialogShowList, ['index'], ['asc']) || []
+      return dialogShowCols
+    },
+    hideData (datas) {
+      const hdata = []
+      const ndata = [...datas]
+      const needHideData = [...showCols].filter(item => !item.index)
+      if (!ndata.length) return hdata
+      ndata.forEach(item => {
+        needHideData.map(citem => {
+          if (item.columnName == citem.columnName) {
+            hdata.push(item)
+          }
+        })
+      })
+      return hdata
+    },
+    //获取行李号
+    async getLuggageNums () {
+      try {
+        const { carrierFlights, carrierFlightsDate } = this.query
+        const parmObj = this.PNRNO ? {
+          PNRNO: this.PNRNO,
+          passengerName: this.passengerName,
+          carrierFlights,
+          carrierFlightsDate
+        } : this.query
+        const { code, returnData } = await this.getQueryList(SERVICE_ID.bagTableId, parmObj)
+        if (code == 0 && returnData && returnData.length) {
+          this.detailsArr = _.uniqBy([...returnData], 'luggageNum')
+        }
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    tagClick (item, index) {
+      const { luggageNum, carrierFlights, carrierFlightsDate, PNRNO, passengerName } = item
+      this.PNRNO = PNRNO
+      this.checkObj = PNRNO ? {
+        PNRNO,
+        passengerName,
+        luggageNum,
+        carrierFlightsDate
+      } : {
+        luggageNum,
+        carrierFlights,
+        carrierFlightsDate
+      }
+      this.tabClickObj = {
+        luggageNum,
+        carrierFlights,
+        carrierFlightsDate
+      }
+      this.activeIndex = index
+      this.getLuggageInfo(this.tableDatas5Id, true)
+      if (this.tabClickKey && this.tabClickKey != 'baggageView') {
+        if (this.PNRNO) {
+          if (this.tabClickObj.carrierFlights) {
+            delete this.tabClickObj.carrierFlights
+          }
+        }
+        this.tagObj = Object.assign(this.tabClickObj, { PNRNO: this.PNRNO ? this.PNRNO : null })
+      }
+    },
+    tabClick (item, index) {
+      this.tabClickKey = item.key
+      if (item.key == 'baggageList' || item.key == 'baggageMessage') {
+        if (this.PNRNO) {
+          if (this.tabClickObj.carrierFlights) {
+            delete this.tabClickObj.carrierFlights
+          }
+        }
+        this.tagObj = Object.assign(this.tabClickObj, { PNRNO: this.PNRNO ? this.PNRNO : null })
+      }
+      setTimeout(() => {
+        this.tabIndex = index
+        this.componentName = item.key
+      }, 10);
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.newBagDetails {
+  height: calc(100vh - 80px);
+  padding: 12px;
+  &-info {
+    height: 200px;
+    background: #051436;
+    color: #fff;
+    font-size: 14px;
+    &-look {
+      padding: 0 32px;
+      height: 64px;
+      line-height: 64px;
+      background: #041741;
+      &-name {
+        font-size: 18px;
+        font-family: Microsoft YaHei;
+        font-weight: bold;
+        color: #ffffff;
+        margin-right: 7px;
+        max-width: 101px;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        overflow: hidden;
+        display: inline-block;
+      }
+      .el-scrollbar {
+        height: 64px;
+        ::-webkit-scrollbar {
+          height: 0;
+        }
+        .tags-view-wrapper {
+          display: flex;
+          .tags-view-item {
+            position: relative;
+            cursor: pointer;
+            height: 64px;
+            line-height: 64px;
+            // border: 1px solid #767eba;
+            // border-radius: 4px;
+            font-size: 14px;
+            font-family: Microsoft YaHei;
+            font-weight: 400;
+            color: #aaacb2;
+            margin-right: 100px;
+            &:last-child {
+              margin-right: 0;
+            }
+            &.active {
+              color: #fff;
+              position: relative;
+              &::after {
+                position: absolute;
+                content: "";
+                width: 100%;
+                left: 0;
+                bottom: 0;
+                height: 3px;
+                background: #2d67e3;
+              }
+            }
+          }
+        }
+      }
+    }
+    &-details {
+      position: relative;
+      padding: 0 32px;
+      height: 136px;
+      &-tags {
+        height: 32px;
+        line-height: 32px;
+      }
+      &-msgs {
+        padding: 12px 0;
+        height: 135px;
+        ::v-deep .el-scrollbar__wrap {
+          overflow-x: hidden;
+        }
+        ::v-deep .el-scrollbar__bar.is-horizontal {
+          height: 0 !important;
+        }
+        &-l1 {
+          .msgs-list {
+            margin-bottom: 22px;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            overflow: hidden;
+          }
+        }
+      }
+    }
+  }
+  &-contents {
+    margin-top: 8px;
+    background-color: #fff;
+    height: calc(100% - 208px);
+    &-tabs {
+      line-height: 65px;
+      padding: 0 32px;
+      border-bottom: 1px solid #dfe3ea;
+      &-title {
+        font-size: 18px;
+        font-family: Microsoft YaHei;
+        font-weight: bold;
+        color: #303133;
+        margin-right: 92px;
+      }
+      &-btns {
+        font-size: 14px;
+        font-family: Microsoft YaHei;
+        font-weight: 400;
+        color: #afb4bf;
+        &-bt {
+          margin-right: 55px;
+          cursor: pointer;
+          position: relative;
+          &:last-child {
+            margin-right: 0;
+          }
+          &.is-active {
+            color: #303133;
+            &::after {
+              position: absolute;
+              content: "";
+              width: 100%;
+              left: 0;
+              bottom: 0;
+              height: 3px;
+              background: #2d67e3;
+            }
+          }
+        }
+      }
+    }
+    &-page {
+      height: calc(100% - 66px);
+    }
+  }
+}
+</style>

+ 391 - 0
src/views/newAbnormalBagDetails/mix/showCols.js

@@ -0,0 +1,391 @@
+export const showCols = [
+  {
+    "queryTemplateColumnSetID": 1669,
+    "serviceOutPutId": 216,
+    "columnName": "specialType",
+    "columnLabel": "特殊行李类型",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": null,
+    index: 10
+  },
+  {
+    "queryTemplateColumnSetID": 1670,
+    "serviceOutPutId": 216,
+    "columnName": "PNRNO",
+    "columnLabel": "PNR编号",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "NX7GZT"
+  },
+  {
+    "queryTemplateColumnSetID": 1671,
+    "serviceOutPutId": 216,
+    "columnName": "passengerName",
+    "columnLabel": "旅客姓名",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "LIJIAN"
+  },
+  {
+    "queryTemplateColumnSetID": 1672,
+    "serviceOutPutId": 216,
+    "columnName": "loadNumber",
+    "columnLabel": "装载序列号",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "001",
+    index: 5
+  },
+  {
+    "queryTemplateColumnSetID": 1673,
+    "serviceOutPutId": 216,
+    "columnName": "luggageCount",
+    "columnLabel": "总件数",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "1"
+  },
+  {
+    "queryTemplateColumnSetID": 1674,
+    "serviceOutPutId": 216,
+    "columnName": "luggageWeight",
+    "columnLabel": "总重量",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "8"
+  },
+  {
+    "queryTemplateColumnSetID": 1676,
+    "serviceOutPutId": 216,
+    "columnName": "frequentflyerNO",
+    "columnLabel": "常旅客号",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "CA313001031337",
+    index: 6
+  },
+  {
+    "queryTemplateColumnSetID": 1677,
+    "serviceOutPutId": 216,
+    "columnName": "frequentflyerGrade",
+    "columnLabel": "常旅客级别",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": null,
+    index: 7
+  },
+  {
+    "queryTemplateColumnSetID": 1678,
+    "serviceOutPutId": 216,
+    "columnName": "dataState",
+    "columnLabel": "取消值机",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": null
+  },
+  {
+    "queryTemplateColumnSetID": 1681,
+    "serviceOutPutId": 216,
+    "columnName": "activeState",
+    "columnLabel": "行李激活状态",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "0",
+    index: 4
+  },
+  {
+    "queryTemplateColumnSetID": 1682,
+    "serviceOutPutId": 216,
+    "columnName": "No_BSM",
+    "columnLabel": "无BSM状态",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "0",
+    index: 9
+  },
+  {
+    "queryTemplateColumnSetID": 1683,
+    "serviceOutPutId": 216,
+    "columnName": "inflightNo",
+    "columnLabel": "中转进航班",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": 15,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": null,
+    index: 1
+  },
+  {
+    "queryTemplateColumnSetID": 1685,
+    "serviceOutPutId": 216,
+    "columnName": "transferFlightNO",
+    "columnLabel": "中转出航班",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": 16,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": null,
+    index: 2
+  },
+  {
+    "queryTemplateColumnSetID": 1711,
+    "serviceOutPutId": 216,
+    "columnName": "passenger_cabin",
+    "columnLabel": "旅客舱位",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "Y",
+    index: 8
+  },
+  {
+    "queryTemplateColumnSetID": 1712,
+    "serviceOutPutId": 216,
+    "columnName": "loadAddress",
+    "columnLabel": "腹舱位置",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": null
+  },
+  {
+    "queryTemplateColumnSetID": 1716,
+    "serviceOutPutId": 216,
+    "columnName": "weightUnit",
+    "columnLabel": "重量单位",
+    "columnDescribe": null,
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "K"
+  },
+  {
+    "queryTemplateColumnSetID": 2674,
+    "serviceOutPutId": 216,
+    "columnName": "outflightDate",
+    "columnLabel": "中转出航班日期",
+    "columnDescribe": "中转出航班日期",
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": null,
+    index: 3
+  },
+  {
+    "queryTemplateColumnSetID": 2878,
+    "serviceOutPutId": 216,
+    "columnName": "createAt",
+    "columnLabel": "创建时间",
+    "columnDescribe": "创建时间",
+    "needSort": null,
+    "needFilters": null,
+    "needShow": 1,
+    "needGroup": null,
+    "dataType": null,
+    "listqueryTemplateID": null,
+    "needCount": null,
+    "orderNumber": null,
+    "columnKey": null,
+    "is_search": null,
+    "default_query_parameters": null,
+    "groupName": null,
+    "nameLength": null,
+    "value": "2024-06-10T06:51:17",
+    index: 11
+  }
+]

+ 104 - 0
src/views/newAbnormalBagDetails/mix/tableCols.js

@@ -0,0 +1,104 @@
+/*
+ * @Author: Badguy
+ * @Date: 2022-03-04 11:50:22
+ * @LastEditTime: 2022-03-15 17:56:34
+ * @LastEditors: your name
+ * @Description: 航站视图表格通用部分
+ * have a nice day!
+ */
+
+export default {
+  data () {
+    return {
+      // 筛选后表头
+      tableColsCopy: [],
+      // 列设置弹框选中
+      checkedKeys: [],
+      checkedKeysTemp: [],
+      halfCheckedKeys: [],
+      // 列设置弹框开关
+      dialogFlag: false
+    }
+  },
+  // created () {
+  //   this.initTableCols()
+  // },
+  updated () {
+    // table数据更新
+    this.$nextTick(() => {
+      this.$refs.table?.doLayout()
+    })
+  },
+  computed: {
+    colsCheckClass () {
+      return this.tableCols.some(col => col.children?.length) ? 'has-children' : 'no-children'
+    }
+  },
+  methods: {
+    // 列设置-初始化
+    initTableCols () {
+      const that = this
+      function setTableCols (cols) {
+        for (const col of cols) {
+          col.index = that.checkedKeys.length
+          that.checkedKeys.push(that.checkedKeys.length)
+          if (col.children?.length) {
+            setTableCols(col.children)
+          }
+        }
+      }
+      setTableCols(this.tableCols)
+      // this.tableColsCopy = this._.cloneDeep(this.tableCols)
+      this.checkedKeysTemp = [...this.checkedKeys]
+    },
+    // 列设置-确定
+    handleCheck (data, checked) {
+      this.checkedKeysTemp = [...checked.checkedKeys]
+      this.halfCheckedKeys = [...checked.halfCheckedKeys]
+    },
+    onCheck (tableDataName = 'tableData') {
+      if (this.dialogFlag === false) {
+        return
+      }
+      this.loading = true
+      const tableDataTemp = this._.cloneDeep(this[tableDataName])
+      this[tableDataName] = []
+      this.dialogFlag = false
+      this.checkedKeys = [...this.checkedKeysTemp]
+      const datas = this.colsFilter(this._.cloneDeep(this.tableCols))
+      const newTableColsCopy = datas.filter((item) => item.needShow)
+      this.tableColsCopy = _.cloneDeep(newTableColsCopy)
+      const bagColsMap = {}
+      bagColsMap.bagColsLists = _.cloneDeep(newTableColsCopy)
+      bagColsMap.bagColsKeys = [...this.checkedKeysTemp]
+      localStorage.setItem('bagColsMap', JSON.stringify(bagColsMap))
+      setTimeout(() => {
+        if (!this[tableDataName].length) {
+          this[tableDataName] = tableDataTemp
+        }
+        this.loading = false
+      }, 50)
+    },
+    colsFilter (cols) {
+      const temp = cols.filter(col => {
+        if (this.halfCheckedKeys.includes(col.queryTemplateColumnSetID)) {
+          col.children = this.colsFilter(col.children)
+          return true
+        } else if (this.checkedKeys.includes(col.queryTemplateColumnSetID)) {
+          return true
+        }
+        return false
+      })
+      return temp
+    },
+    // 弹框展开
+    show () {
+      this.dialogFlag = true
+    },
+    // 弹框关闭
+    hide () {
+      this.dialogFlag = false
+      this.checkedKeysTemp = [...this.checkedKeys]
+    }
+  }
+}

+ 30 - 3
src/views/newArrival/index.vue

@@ -44,6 +44,13 @@
           <!-- <el-form-item>
             <TimeZoneSelector />
           </el-form-item> -->
+          <el-form-item>
+            <el-switch
+              v-model="UTCvalue"
+              inactive-text="UTC"
+              @change="UTCchange">
+            </el-switch>
+          </el-form-item>
           <el-form-item>
             <el-switch
               v-model="Totalvalue"
@@ -78,7 +85,8 @@ export default {
   mixins: [formMixin, pf],
   data () {
     return {
-      Totalvalue:true,
+      Totalvalue:false,
+      UTCvalue:false,
       orderNum: ["0", "0", "0", "0", "0", "0"], // 默认总数
       popoverVisible: false,
       // 初始表头
@@ -99,9 +107,24 @@ export default {
     ...mapGetters(["timeZone"]),
   },
   created () {
+    let UTCvalueLocal = sessionStorage.getItem("UTCvalue");
+    if(UTCvalueLocal && UTCvalueLocal !=""){
+      if(UTCvalueLocal == "true"){
+        this.UTCvalue = true
+      }
+      else{
+        this.UTCvalue = false
+      }
+
+    }
     let TotalvalueLocal = sessionStorage.getItem("Totalvalue");
-    if(TotalvalueLocal && TotalvalueLocal !=""){
-      this.Totalvalue = TotalvalueLocal
+    if(TotalvalueLocal == "true" && TotalvalueLocal !=""){
+      if(TotalvalueLocal == "true"){
+        this.Totalvalue = true
+      }
+      else{
+        this.Totalvalue = false
+      }
     }
     this.getAirPortData()
   },
@@ -119,6 +142,10 @@ export default {
       this.$refs["table"].setTableColsXT(this.Totalvalue)
       sessionStorage.setItem("Totalvalue",this.Totalvalue)
     },
+    UTCchange(){
+      sessionStorage.setItem("UTCvalue",this.UTCvalue)
+      this.$refs["table"].initTableData()
+    },
     airPortChange (val) {
       this.formData.currentAirport = val
       this.getAirPortData(0)

+ 1 - 1
src/views/newBagDetails/components/baggageList.vue

@@ -185,4 +185,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 1 - 1
src/views/newBagDetails/components/baggageMessage.vue

@@ -364,4 +364,4 @@ export default {
     z-index: 10;
   }
 }
-</style>
+</style>

+ 47 - 9
src/views/newBagDetails/components/baggageView.vue

@@ -1,7 +1,7 @@
 <template>
   <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="baggageView">
     <el-scrollbar style="height: 100%">
-      <div v-infinite-scroll="load" class="baggageView-content">
+      <div v-infinite-scroll="" class="baggageView-content">
         <div v-for="(item,index) in tableData" :key="index" class="baggageView-list">
           <div class="part2">
             <div class="part2_info">
@@ -178,7 +178,7 @@ export default {
         if(stateProp == 'checkState'&& dataState =="DEL"){
           return 'step-circle-danger'
         }
-        if(stateProp == 'abnormalType'&& stateValue =="OFF"){
+        if(stateProp == 'abnormalType'&& stateValue !="" && stateValue !=null){
           return 'step-circle-danger'
         }
         // if (stateProp == 'securityInspectionResults' && !stateValue) {
@@ -192,7 +192,7 @@ export default {
       return function (status) {
         const classes = ['step-status']
         if (typeof status === 'string') {
-          if (status.includes('不正常') || status.includes('不通过') || status.includes('取消') || status.includes('DEL') || status.includes('OFF')) {
+          if (status.includes('不正常') || status.includes('不通过') || status.includes('取消') || status.includes('DEL') || status.includes('OFF')|| status.includes('ONA')|| status.includes('OND')|| status.includes('LBA')|| status.includes('UNS')|| status.includes('NAL')) {
             classes.push('step-status-abnormal')
           }
           else if (status.includes('正常') || status.includes('通过')) {
@@ -209,7 +209,7 @@ export default {
   watch: {
     tagObj: {
       handler (obj) {
-        this.dataContent = obj
+        this.dataContent =  _.cloneDeep(obj)
         this.restTable()
         this.load()
       },
@@ -219,7 +219,7 @@ export default {
       handler (obj) {
         this.tableDataCopy = []
         this.tableData = []
-        this.dataContent = obj
+        this.dataContent =  _.cloneDeep(obj)
         this.restTable()
         this.load()
       },
@@ -227,7 +227,11 @@ export default {
     },
   },
   created () {
-    this.dataContent = this.queryObj
+    this.dataContent = _.cloneDeep(this.queryObj)
+  },
+  mounted () {
+    this.restTable()
+    this.load()
   },
   methods: {
     //获取行李信息
@@ -288,7 +292,43 @@ export default {
         if (this.noMore || this.loading) {
           return;
         }
-        this.getLuggageList(SERVICE_ID.bagTableDqId, this.dataContent, ++this.page, this.pageSize);
+        this.getPNR()
+        // this.getLuggageList(SERVICE_ID.bagTableDqId, this.dataContent, ++this.page, this.pageSize);
+      }
+    },
+    //获取PNR
+    async getPNR(){
+      try {
+         const { carrierFlightsDate,luggageNum } = this.queryObj
+        const { code, returnData } = await this.getQueryList('21803430', [{
+          'carrierFlightsDate': carrierFlightsDate,
+          'luggageNum':luggageNum
+        }]);
+        if (code == 0) {
+          if (returnData && returnData.length) {
+            returnData.map(item => {
+              this.page = 0
+              if(item.PNRNO && item.PNRNO!=null){
+                let data = {
+                  'PNRNO':item.PNRNO,
+                  'carrierFlightsDate':this.dataContent.carrierFlightsDate,
+                  'luggageNum':item.luggageNum
+                }
+                this.getLuggageList(SERVICE_ID.bagTableDqId, data, ++this.page, this.pageSize);
+              }
+              else{
+                this.getLuggageList(SERVICE_ID.bagTableDqId, this.dataContent, ++this.page, this.pageSize);
+              }
+            })
+          }
+          else{
+            this.getLuggageList(SERVICE_ID.bagTableDqId, this.dataContent, ++this.page, this.pageSize);
+          }
+        } else {
+          this.$message.error("获取表头数据失败");
+        }
+      } catch (error) {
+        console.log(error)
       }
     },
     async getBagTime (arr) {
@@ -307,8 +347,6 @@ export default {
           bagStatus[index2]['dataState'] = item.dataState
         }
         if(index3>-1){
-          console.log(item)
-          console.log(123)
           bagStatus[index3]['stateValue'] = item.abnormalType
         }
         const reqItem = this.getQueryList(SERVICE_ID.baggageTime, {

+ 2 - 0
src/views/newBagDetails/index.vue

@@ -167,6 +167,7 @@ export default {
             const nodeDatas = returnData.filter(item => item.needShow)
             this.msgs1 = [...nodeDatas]
             this.getLuggageInfo(auth_id)
+            // this.getLuggageInfo(auth_id)
           }
         } else {
           this.$message.error("获取表头数据失败");
@@ -318,6 +319,7 @@ export default {
     },
     tabClick (item, index) {
       this.tabClickKey = item.key
+      console.log(this.tabClickKey)
       if (item.key == 'baggageList' || item.key == 'baggageMessage') {
         if (this.PNRNO) {
           if (this.tabClickObj.carrierFlights) {

+ 27 - 5
src/views/newDeparture/index.vue

@@ -49,6 +49,13 @@
           <!-- <el-form-item>
             <TimeZoneSelector />
           </el-form-item> -->
+          <el-form-item>
+            <el-switch
+              v-model="UTCvalue"
+              inactive-text="UTC"
+              @change="UTCchange">
+            </el-switch>
+          </el-form-item>
           <el-form-item>
             <el-switch
               v-model="Totalvalue"
@@ -83,7 +90,8 @@ export default {
   mixins: [formMixin, pf],
   data () {
     return {
-      Totalvalue:true,
+      Totalvalue:false,
+      UTCvalue:false,
       orderNum: ["0", "0", "0", "0", "0", "0"], // 默认总数
       popoverVisible: false,
       // 初始表头
@@ -104,10 +112,20 @@ export default {
     ...mapGetters(["timeZone"]),
   },
   created () {
-    let TotalvalueLocal = sessionStorage.getItem("Totalvalue");
-    if(TotalvalueLocal && TotalvalueLocal !=""){
-      this.Totalvalue = TotalvalueLocal
+    let UTCvalueLocal = sessionStorage.getItem("UTCvalue");
+    if(UTCvalueLocal && UTCvalueLocal == "true"){
+      this.UTCvalue = true
+    }
+    else{
+      this.UTCvalue = false
     }
+    let TotalvalueLocal = sessionStorage.getItem("Totalvalue");
+    if(TotalvalueLocal && TotalvalueLocal == "true"){
+      this.Totalvalue = true
+
+    }else{
+        this.Totalvalue = false
+      }
     this.getAirPortData()
   },
   mounted () {
@@ -121,8 +139,12 @@ export default {
   },
   methods: {
     Totalchange(){
-      this.$refs["table"].setTableColsXT(this.Totalvalue)
       sessionStorage.setItem("Totalvalue",this.Totalvalue)
+      this.$refs["table"].setTableColsXT(this.Totalvalue)
+    },
+    UTCchange(){
+      sessionStorage.setItem("UTCvalue",this.UTCvalue)
+      this.$refs["table"].initTableData()
     },
     airPortChange (val) {
       this.formData.currentAirport = val

+ 35 - 11
src/views/newFlightView/index.vue

@@ -21,8 +21,10 @@
             <el-descriptions-item label="起飞机场三字码">{{ infoObj.outAirport }}</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-item :span="2" v-if="!UTCvalue" label="计划起飞时间">{{ formatTime(infoObj.scheduleTakeOffTimeLocalOut) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" v-if="!UTCvalue" label="实际起飞时间">{{ formatTime(infoObj.actualTakeOffTimeLocalOut) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" v-if="UTCvalue" label="计划起飞UTC时间">{{ formatTime(infoObj.scheduleTakeOffTimeUTC) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" v-if="UTCvalue" label="实际起飞UTC时间">{{ formatTime(infoObj.actualTakeOffTimeUTC) }}</el-descriptions-item>
           </el-descriptions>
         </div>
         <div class="newFlightView-left-top-list">
@@ -31,8 +33,10 @@
             <el-descriptions-item label="降落机场三字码">{{ infoObj.landAirport }}</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-item :span="2" v-if="!UTCvalue" label="计划降落时间">{{ formatTime(infoObj.scheduleLandInTimeLocalIn) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" v-if="!UTCvalue" label="实际降落时间">{{ formatTime(infoObj.actualLandInTimeLocalIn) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" v-if="UTCvalue" label="计划降落UTC时间">{{ formatTime(infoObj.scheduleLandInTimeUTC) }}</el-descriptions-item>
+            <el-descriptions-item :span="2" v-if="UTCvalue" label="实际降落UTC时间">{{ formatTime(infoObj.actualLandInTimeUTC) }}</el-descriptions-item>
           </el-descriptions>
         </div>
         <div class="newFlightView-left-top-list">
@@ -56,8 +60,13 @@
             <el-cascader v-model="selectedFilter" :options="fastFilterOptions" :props="{ expandTrigger: 'hover', checkStrictly: true }" size="small" placeholder="无" clearable />
           </div>
         </div>
-        <div class="newFlightView-right-top-right">
+        <div class="newFlightView-right-top-right flex-wrap">
           <!-- <TimeZoneSelector /> -->
+          <el-switch
+            v-model="UTCvalue"
+            inactive-text="UTC"
+            @change="UTCchange">
+          </el-switch>
           <img class="btn-img btn-shadow" src="@/assets/baggage/ic_export.png" title="导出" @click="exportHandler('table', '航班行李列表')" />
         </div>
       </div>
@@ -80,6 +89,7 @@ export default {
   mixins: [pf],
   data () {
     return {
+      UTCvalue:false,
       radio: '1',
       options: [],
       value: '',
@@ -112,7 +122,7 @@ export default {
           value: 'check_in_baggage_number',
         },
         {
-          label: '值机X',
+          label: '值机L',
           value: 'check_in_L',
         },
         {
@@ -132,7 +142,7 @@ export default {
           value: 'B_security_check_number'
         },
         {
-          label: '预检X',
+          label: '预检L',
           value: 'B_security_check_number_L',
         },
         {
@@ -144,7 +154,7 @@ export default {
           value: 'screened_number'
         },
         {
-          label: '安检X',
+          label: '安检L',
           value: 'security_L',
         },
         {
@@ -156,7 +166,7 @@ export default {
           value: 'sorted_number'
         },
         {
-          label: '分拣X',
+          label: '分拣L',
           value: 'sort_L',
         },
         {
@@ -168,7 +178,7 @@ export default {
           value: 'loaded_number'
         },
         {
-          label: '装车X',
+          label: '装车L',
           value: 'load_L',
         },
         {
@@ -180,7 +190,7 @@ export default {
           value: 'onaiecraft_number'
         },
         {
-          label: '装机X',
+          label: '装机L',
           value: 'onaiecraft_L',
         },
         {
@@ -350,6 +360,13 @@ export default {
     }
   },
   async created () {
+    let UTClocal = sessionStorage.getItem('UTCvalue');
+    if(UTClocal && UTClocal =="true"){
+      this.UTCvalue = true
+    }
+    else{
+      this.UTCvalue = false
+    }
     const checkDatas = []
     const query = this.$route.query
     const np = [
@@ -468,6 +485,10 @@ export default {
     this.getAirPortData()
   },
   methods: {
+    UTCchange(){
+      sessionStorage.setItem("UTCvalue",this.UTCvalue)
+      this.$refs["table"].setTableColsXT(sessionStorage.getItem("Totalvalue"))
+    },
     async getAirPortData () {
       try {
         const res = await this.getQueryList(SERVICE_ID.getAirpotId, {}, 1, 9999)
@@ -680,6 +701,9 @@ export default {
         line-height: 30px;
       }
       &-right {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
         padding-right: 70px;
         .btn-img {
           margin-left: 10px;

+ 93 - 8
src/views/newQuery/components/table.vue

@@ -68,7 +68,7 @@
     </template>
     <template v-else>
       <el-table ref="table" v-el-table-infinite-scroll="load" :data="dealedTableData" :summary-method="getSummaries" :span-method="tableSpanMethod" :show-summary="showSummary" :header-cell-class-name="headerCellClass" :row-class-name="rowClass" :cell-class-name="cellClass" height="100%" class="table infinite-list" border stripe @cell-click="cellClick">
-        <el-table-column v-for="(item, index) in tableColsCopy" :key="index" :width="item.nameLength ? Number(item.nameLength) : ''" :prop="item.columnName" :label="item.columnLabel" :show-overflow-tooltip="showOverflowTooltip" :formatter="formatter">
+        <el-table-column v-for="(item, index) in tableColsCopy" :key="item.columnName" :width="item.nameLength ? Number(item.nameLength) : ''" :prop="item.columnName" :label="item.columnLabel" :show-overflow-tooltip="showOverflowTooltip" :formatter="formatter">
           <template #header>
             <el-tooltip :content="item.columnDescribe || item.columnLabel" placement="top">
               <TableHeaderCell :label="item.columnLabel" :filter-options="tableDataFilters[item.columnName]" :filter-values.sync="filterValues[item.columnName]" :sortable="item.needSort" :sort-rule.sync="tableDataSortRules[item.columnName]" />
@@ -409,8 +409,8 @@ export default {
         console.log(error)
       }
     },
-    setTableColsXT(val = sessionStorage.getItem("Totalvalue")){
-      let returnData = this.allColReturnData;
+    setTableColsXT(val = sessionStorage.getItem("Totalvalue") == 'true'?true:false){
+      let returnData = _.cloneDeep(this.allColReturnData);
       if(val == true){
         returnData.map(item =>{
           if(item.columnName == "check_in_baggage_number"||item.columnName == "screened_number"||item.columnName == "sorted_number"||item.columnName == "loaded_number"||item.columnName == "onaiecraft_number"||item.columnName == "unloading_number"||item.columnName == "arrive_number"||item.columnName == "B_security_check_number"){
@@ -431,6 +431,34 @@ export default {
           }
         })
       }
+      this.setTableColsUTC(returnData)
+    },
+    setTableColsUTC(returnData){
+      let val = sessionStorage.getItem("UTCvalue") === 'true'?true:false
+      if(val == true){
+        returnData.map(item =>{
+          if(item.columnName == "checkInDateUTC"||item.columnName == "security_check_timeUTC"||item.columnName == "B_security_check_timeUTC"||item.columnName == "sorting_timeUTC"||item.columnName == "loading_timeUTC"||item.columnName == "installation_timeUTC"||item.columnName == "unloadtimeUTC"||item.columnName == "arrivedtimeUTC"){
+              item.needShow = 1
+          }
+          if(item.columnName == "checkInDate"||item.columnName == "security_check_time"||item.columnName == "B_security_check_time"||item.columnName == "sorting_time"||item.columnName == "loading_time"||item.columnName == "installation_time"||item.columnName == "unloadtime"||item.columnName == "arrivedtime"){
+              item.needShow = 0
+          }
+        })
+      }
+      else{
+        returnData.map(item =>{
+          if(item.columnName == "checkInDateUTC"||item.columnName == "security_check_timeUTC"||item.columnName == "B_security_check_timeUTC"||item.columnName == "sorting_timeUTC"||item.columnName == "loading_timeUTC"||item.columnName == "installation_timeUTC"||item.columnName == "unloadtimeUTC"||item.columnName == "arrivedtimeUTC"){
+              item.needShow = 0
+          }
+          if(item.columnName == "checkInDate"||item.columnName == "security_check_time"||item.columnName == "B_security_check_time"||item.columnName == "sorting_time"||item.columnName == "loading_time"||item.columnName == "installation_time"||item.columnName == "unloadtime"||item.columnName == "arrivedtime"){
+              item.needShow = 1
+          }
+        })
+      }
+      this.setTableCols(returnData)
+    },
+    setTableCols (returnData) {
+      this.tableColsCopy = []
       const msgDatas = returnData.filter(item => item.needShow)
       const msgCounts = msgDatas.filter(item => item.needCount)
       if (msgCounts.length) {
@@ -474,9 +502,6 @@ export default {
       }
       this.tableColsCopy = _.cloneDeep(this.tableCols)
       this.initTableCols()
-      this.setTableCols()
-    },
-    setTableCols () {
       this.tableCath.forEach(({ columnName, needFilters, needSort }) => {
         if (needFilters) {
           this.$set(this.tableDataFilters, columnName, [])
@@ -541,7 +566,7 @@ export default {
         )
         if (code == 0) {
           let tableData = []
-          if (returnData.length < pageSize) {
+          if (pageSize && returnData.length < pageSize) {
             this.noMore = true
             if (returnData.length === 0) {
               this.page--
@@ -638,6 +663,7 @@ export default {
     },
     // 初始化表格
     async initTableData (tableData) {
+      tableData = tableData?tableData:this.tableData
       tableData.forEach(async row => {
         if (row.needGroup) {
           this.tableGroups.push(row.columnName)
@@ -673,7 +699,37 @@ export default {
             row.hasTakenOff = 'Y'
             this.leaveCount++
           }
+          let isUTC = sessionStorage.getItem("UTCvalue")?sessionStorage.getItem("UTCvalue"):false;
+          if(isUTC == "false"){
+            row.scheduleTakeOffTime = ""
+            if(row.actualTakeOffTimeLocalOut!=null && row.actualTakeOffTimeLocalOut!=""){
+              row.scheduleTakeOffTime = row.actualTakeOffTimeLocalOut
+            }
+            else{
+              if(row.estimateTakeOffTimeLocalOut!=null && row.estimateTakeOffTimeLocalOut!=""){
+                row.scheduleTakeOffTime = row.estimateTakeOffTimeLocalOut
+              }
+              else{
+                row.scheduleTakeOffTime = row.scheduleTakeOffTimeLocalOut
+              }
+            }
+          }
+          else{
+            row.scheduleTakeOffTime = ""
+            if(row.actualTakeOffTimeUTC!=null && row.actualTakeOffTimeUTC!=""){
+              row.scheduleTakeOffTime = row.actualTakeOffTimeUTC
+            }
+            else{
+              if(row.estimateTakeOffTimeUTC!=null && row.estimateTakeOffTimeUTC!=""){
+                row.scheduleTakeOffTime = row.estimateTakeOffTimeUTC
+              }
+              else{
+                row.scheduleTakeOffTime = row.scheduleTakeOffTimeUTC
+              }
+            }
+          }
         })
+        this.tableData = []
         this.tableData = _.orderBy(cData, ['canceled', 'hasTakenOff', 'scheduleTakeOffTime'], ['desc', 'asc', 'asc']);
       }
       if (this.$route.path == '/newArrival') {
@@ -705,7 +761,37 @@ export default {
             row.hasLanded = 'Y'
             this.arriveCount++
           }
+          let isUTC = sessionStorage.getItem("UTCvalue")?sessionStorage.getItem("UTCvalue"):false;
+          if(isUTC == "false"){
+            row.actualLandInTime = ""
+            if(row.actualLandinTimeLocalIn!=null && row.actualLandinTimeLocalIn!=""){
+              row.actualLandInTime = row.actualLandinTimeLocalIn
+            }
+            else{
+              if(row.estimateLandinTimeLocalIn!=null && row.estimateLandinTimeLocalIn!=""){
+                row.actualLandInTime = row.estimateLandinTimeLocalIn
+              }
+              else{
+                row.actualLandInTime = row.scheduleLandInTimeLocalIn
+              }
+            }
+          }
+          else{
+            row.actualLandInTime = ""
+            if(row.actualLandInTimeUTC!=null && row.actualLandInTimeUTC!=""){
+              row.actualLandInTime = row.actualLandInTimeUTC
+            }
+            else{
+              if(row.estimatelandInTimeUTC!=null && row.estimatelandInTimeUTC!=""){
+                row.actualLandInTime = row.estimatelandInTimeUTC
+              }
+              else{
+                row.actualLandInTime = row.scheduleLandinTimeUTC
+              }
+            }
+          }
         })
+        this.tableData = []
         this.tableData = _.orderBy(cData, ['canceled', 'hasLanded', 'actualLandInTime'], ['desc', 'asc', 'asc'])
       }
       if (this.$route.path.startsWith('/newTransfer')) {
@@ -1006,7 +1092,6 @@ export default {
               query.forEach(key => {
                 obj[key] = row[key]
               })
-              http://localhost:9528/#/newFlightView?carrierFlights=TK89&carrierFlightsDate=2024-11-12&outAirport=PEK&landAirport=IST&NO_BSM_number=363
               if (['Inbound_flight_number'].includes(relation_data)) {
                 obj.outAirport = obj.inbound_flights_departure_airport
                 obj.landAirport = obj.current_airport

+ 10 - 2
src/views/newQueryAdvance/index.vue

@@ -62,6 +62,16 @@
                       <el-option label="已激活" value="1" />
                     </el-select>
                   </template>
+                  <template v-else-if="item.prop === 'checkInLocation'">
+                    <el-select v-model="form.checkInLocation" size="small" clearable @keyup.esc.native="dialogFocus">
+                      <el-option label="CKIN" value="CKIN" />
+                      <el-option label="OFFC" value="OFFC" />
+                      <el-option label="SELF" value="SELF" />
+                      <el-option label="CUSS" value="CUSS" />
+                      <el-option label="HOME" value="HOME" />
+                      <el-option label="GATE" value="GATE" />
+                    </el-select>
+                  </template>
                   <template v-else>
                     <el-popover v-model="item.hintVisible" placement="right" trigger="manual">
                       <span>{{ item.hintText }}</span>
@@ -216,8 +226,6 @@ export default {
         {
           prop: 'checkInLocation',
           label: '值机方式',
-          hintText: 'CKIN',
-          hintVisible: false,
         },
       ],
       baggageTypeList: [

+ 366 - 0
src/views/statisticsCharts/components/statisticsHeaderNew.vue

@@ -0,0 +1,366 @@
+<template>
+  <div class="flight-statistics-header">
+    <template v-if="title">
+      <div class="title">{{ title }}</div>
+    </template>
+    <el-form ref="form" class="form" :model="formData">
+      <el-form-item v-for="item in formItems" :key="item.prop" :prop="item.prop" :label="item.label" :style="{
+          width: item.width || '120px'
+        }">
+        <template v-if="item.inputType === 'input'">
+          <el-input v-model="formData[item.prop]" :size="item.size || 'small'" :placeholder="item.placeholder || '请输入'" :clearable="item.clearable" />
+        </template>
+        <template v-if="item.inputType === 'select'">
+          <el-select v-model="formData[item.prop]" :filterable="item.filterable" :default-first-option="item.filterable" :size="item.size || 'small'" :placeholder="item.placeholder || '请选择'" :multiple="item.multiple" :collapse-tags="item.multiple" :clearable="item.clearable" :disabled="item.disabled">
+            <el-option v-for="option in item.options" :key="option.value" :value="option.value" :label="option.label" />
+          </el-select>
+        </template>
+        <template v-if="item.inputType === 'datePicker'">
+          <el-date-picker v-model="formData[item.prop]" :size="item.size || 'small'" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" />
+        </template>
+        <template v-if="item.inputType === 'cascader'">
+          <el-cascader v-model="formData[item.prop]" :size="item.size || 'small'" :placeholder="item.placeholder || '请选择'" :options="item.options" :props="item.props" :clearable="item.clearable" :disabled="item.disabled" />
+        </template>
+      </el-form-item>
+      <el-form-item v-if="formItems.length">
+        <el-button type="primary" size="small" @click="getData">{{ buttonText }}</el-button>
+      </el-form-item>
+      <el-form-item v-if="withExport">
+        <img src="../../../assets/nav/ic_export.png" title="导出" class="btn-icon-only" @click="exportClickHandler" />
+      </el-form-item>
+      <el-form-item v-if="withSetting">
+        <img src="../../../assets/nav/ic_setting.png" title="节点设置" class="btn-icon-only" @click="settingClickHandler" />
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import { TempQuery } from '@/api/temp'
+import { mapGetters } from 'vuex'
+export default {
+  name: 'StatisticsHeader',
+  props: {
+    title: {
+      type: String,
+      default: ''
+    },
+    items: {
+      type: Array,
+      default: undefined
+    },
+    customItems: {
+      type: Array,
+      default: () => []
+    },
+    data: {
+      type: Object,
+      default: undefined
+    },
+    buttonText: {
+      type: String,
+      default: '查询'
+    },
+    withExport: {
+      type: Boolean,
+      default: true
+    },
+    withSetting: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data () {
+    return {
+      formData: {
+      },
+      formItems: []
+    }
+  },
+  computed: {
+    ...mapGetters(['savedFormDataMap']),
+    formDataObj () {
+      return JSON.parse(JSON.stringify(this.formData))
+    }
+  },
+  watch: {
+    items: {
+      handler (val) {
+        val && (this.formItems = val)
+      },
+      deep: true,
+      immediate: true
+    },
+    data: {
+      handler (val) {
+        val && (this.formData = val)
+      },
+      deep: true,
+      immediate: true
+    },
+    formDataObj: {
+      handler (val, oldVal) {
+        this.formItems.forEach(item => {
+          if (item.changeHandler && String(val[item.prop]) !== String(oldVal[item.prop])) {
+            item.changeHandler.call(this, val[item.prop])
+          }
+        })
+      },
+      deep: true
+    }
+  },
+  created () {
+    this.customItems.forEach(item => {
+      if (typeof item.itemIndex === 'number') {
+        if (item.prop) {
+          this.formItems.splice(item.itemIndex, item.replaceNum, item)
+        } else {
+          this.formItems.splice(item.itemIndex, item.replaceNum)
+        }
+      } else {
+        this.formItems.push(item)
+      }
+    })
+    const savedFormData = this.savedFormDataMap[this.$route.name]
+    this.formItems.forEach(item => {
+      if (item.queryId && item.setKey) {
+        this.getOptions(item.queryId, item.setKey, item.prop,item.authId)
+      }
+
+      if (savedFormData?.[item.prop]) {
+        this.formData[item.prop] = savedFormData[item.prop]
+        this.getData()
+      } else if (item.defaultOption) {
+        this.formData[item.prop] = item.defaultOption
+      }
+      if(savedFormData?.['fd1']&&savedFormData?.['fd2']){
+        this.formData['fd1,fd2'] = [savedFormData['fd1'],savedFormData['fd2']]
+      }
+    })
+    // this.$emit('update:data', this.formData)
+  },
+  methods: {
+    getData () {
+      try {
+        this.formItems.forEach(item => {
+          if (item.requiredWarning && (!this.formData[item.prop] || this.formData[item.prop].length === 0)) {
+            throw new Error(item.requiredWarning)
+          }
+        })
+      } catch (error) {
+        this.$message.warning(error.message)
+        return
+      }
+      if (this.formData.range === '航线' && !this.formData.airline) {
+        this.$message.warning('请先选择航线')
+        return
+      } else if (this.formData.range === '航站' && !this.formData.airport) {
+        this.$message.warning('请先选择航站')
+        return
+      } else if (this.formData.range === '基地分公司' && !this.formData.area) {
+        this.$message.warning('请先选择基地分公司')
+        return
+      }
+
+      this.$emit('getFormData', this.formData)
+      this.$store.dispatch('savedSettings/saveFormData', {
+        formData: this.formData
+      })
+    },
+    exportClickHandler () {
+      this.$emit('export')
+    },
+    settingClickHandler () {
+      this.$emit('setting')
+    },
+    setInOrOutOptions (range) {
+      const theInOrOutItem = this.formItems.find(item => item.prop === 'inOrOut')
+      switch (range) {
+        case '全部':
+        case '航线':
+          if (theInOrOutItem) {
+            theInOrOutItem.options = [
+              {
+                label: '全部',
+                value: '全部'
+              }
+            ]
+            theInOrOutItem.disabled = true
+          }
+          this.formData.inOrOut = '全部'
+          break
+        case '基地分公司':
+        case '航站':
+        case '航站楼':
+          if (theInOrOutItem) {
+            theInOrOutItem.options = [
+              {
+                value: '全部',
+                label: '全部'
+              },
+              {
+                value: '进港',
+                label: '进港'
+              },
+              {
+                value: '离港',
+                label: '离港'
+              }
+            ]
+            theInOrOutItem.disabled = false
+          }
+          break
+        default:
+          if (theInOrOutItem) {
+            theInOrOutItem.options = []
+            theInOrOutItem.disabled = false
+          }
+          break
+      }
+    },
+    async getOptions (queryId, setKey, prop,authId) {
+      try {
+        const { code, returnData, message } = await TempQuery({
+          serviceId: queryId,
+          dataContent: [],
+          event:"0",
+          pageSize:"9999",
+          authId:authId
+        })
+        if (Number(code) === 0) {
+          const arr = returnData.map(element => ({
+            label: element[setKey],
+            value: element[setKey]
+          }))
+          const theItem = this.formItems.find(item => item.prop === prop)
+          theItem.options = arr
+        } else {
+          this.$message.error(message)
+        }
+      } catch (error) {
+        this.$message.error('失败')
+      }
+    }
+  }
+}
+</script>
+
+<style
+  lang="scss"
+  scoped
+>
+.flight-statistics-header {
+  padding-top: 24px;
+  min-height: 80px;
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+  .title {
+    margin-right: 24px;
+    padding-left: 16px;
+    // min-width: 190px;
+    height: 32px;
+    line-height: 32px;
+    font-size: 18px;
+    font-family: Helvetica, "Microsoft YaHei";
+    font-weight: bold;
+    white-space: nowrap;
+    position: relative;
+    &::before {
+      content: "";
+      width: 4px;
+      height: 20px;
+      background: #2d67e3;
+      position: absolute;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      margin: auto;
+    }
+  }
+  ::v-deep .form {
+    display: flex;
+    flex-wrap: wrap;
+    > .el-form-item {
+      margin-bottom: 24px;
+      // width: 185px;
+      &:not(:last-child) {
+        margin-right: 8px;
+      }
+      &:nth-last-child(2),
+      &:nth-last-child(3) {
+        margin-right: 16px;
+      }
+      .el-form-item__content {
+        height: 32px;
+        line-height: 30px;
+        .el-input {
+          &.is-disabled .el-input__inner {
+            border: none;
+          }
+          .el-input__inner {
+            border-radius: 4px;
+            font-family: Helvetica, "Microsoft YaHei";
+            color: #303133;
+            border-color: #ffffff;
+            &:hover {
+              border-color: #c0c4cc;
+            }
+            &:focus {
+              border-color: #409eff;
+            }
+          }
+        }
+        .el-date-editor--daterange.el-input,
+        .el-date-editor--daterange.el-input__inner,
+        .el-date-editor--timerange.el-input,
+        .el-date-editor--timerange.el-input__inner {
+          width: 100%;
+          border-radius: 4px;
+          border-color: #ffffff;
+          color: #303133;
+          font-family: Helvetica, "Microsoft YaHei";
+          &:hover {
+            border-color: #c0c4cc;
+          }
+          &.is-active {
+            border-color: #409eff;
+          }
+          .el-input__icon {
+            color: #303133;
+          }
+          .el-range-separator {
+            line-height: 28px;
+          }
+        }
+        .el-select,
+        .el-cascader {
+          .el-input {
+            .el-icon-arrow-up::before {
+              content: "\e78f";
+            }
+            .el-icon-arrow-down::before {
+              content: "\e790";
+            }
+            &:not(.is-disabled) {
+              .el-input__icon,
+              .el-input__inner::-webkit-input-placeholder {
+                color: #303133;
+              }
+            }
+          }
+        }
+        .el-button {
+          border-radius: 4px;
+          font-family: Helvetica, "Microsoft YaHei";
+        }
+        .btn-icon-only {
+          width: 32px;
+          height: 32px;
+          cursor: pointer;
+        }
+      }
+    }
+  }
+}
+</style>

+ 1003 - 0
src/views/statisticsCharts/components/tableformbrsNew.vue

@@ -0,0 +1,1003 @@
+<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 && upid == 1">
+        <el-table :data="tableData" style="width: 100%" height="calc(100vh - 180px)" ref="userTableData">
+          <el-table-column :label="dataContent['airlineIataCd'] + '航司' + dataContent['outAirport'] + '航站国航行李BRS扫描数据统计表'">
+            <el-table-column prop="timetype" label="日期">
+            </el-table-column>
+            <el-table-column label="离港数">
+              <el-table-column prop="flights_out" label="航班(架次)" width="240">
+              </el-table-column>
+              <el-table-column prop="bags" label="行李(件数)" width="240">
+              </el-table-column>
+              <el-table-column prop="bags_rush" label="速运行李(件数)" width="240">
+              </el-table-column>
+              <el-table-column prop="shortage_number" label="短缺行李(件数)" width="240">
+                <!-- <template  slot-scope="scope">
+                    <span v-if="scope.row.shortage_number>0" class="BtnCol" @click="baggageClick(scope.row)">{{scope.row.shortage_number}}</span>
+                    <span v-else>{{scope.row.shortage_number}}</span>
+                </template> -->
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描数">
+              <el-table-column prop="flights_out_brs" label="航班(架次)">
+                <template  slot-scope="scope">
+                    <span v-if="scope.row.flights_out_brs>0" class="BtnCol" @click="flightsClick(scope.row)">{{scope.row.flights_out_brs}}</span>
+                    <span v-else>{{scope.row.flights_out_brs}}</span>
+                </template>
+              </el-table-column>
+              <el-table-column prop="bags_brs" label="行李(件数)">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描率">
+              <el-table-column prop="ra_brsfly" label="航班">
+              </el-table-column>
+              <el-table-column prop="ra_brsbag" label="行李">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 2">
+        <el-table :data="tableData" style="width: 100%" height="calc(100vh - 260px)" ref="userTableDatard">
+          <el-table-column label="Manual Load扫描数据统计表">
+            <el-table-column prop="A" label="日期">
+            </el-table-column>
+            <el-table-column label="离港数">
+              <el-table-column prop="totalfly" label="航班(架次)" width="240">
+              </el-table-column>
+              <el-table-column prop="totalbag" label="行李(件数)" width="240">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描数">
+              <el-table-column prop="starfly" label="航班(架次)">
+              </el-table-column>
+              <el-table-column prop="starbag" label="行李(件数)">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描率">
+              <el-table-column prop="ra_starfly" label="航班">
+              </el-table-column>
+              <el-table-column prop="ra_starbag" label="行李">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 3">
+        <el-table :data="tableData" style="width: 100%" height="calc(100vh - 260px)" ref="TableDatardrfid">
+          <el-table-column label="航易行RFID扫描数据统计表">
+            <el-table-column prop="A" label="日期">
+            </el-table-column>
+            <el-table-column label="离港数">
+              <el-table-column prop="totalfly" label="航班(架次)" width="240">
+              </el-table-column>
+              <el-table-column prop="totalbag" label="行李(件数)" width="240">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描数">
+              <el-table-column prop="hyxfly" label="航班(架次)">
+              </el-table-column>
+              <el-table-column prop="hyxbag" label="行李(件数)">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="扫描率">
+              <el-table-column prop="ra_hyxfly" label="航班">
+              </el-table-column>
+              <el-table-column prop="ra_hyxbag" label="行李">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 4">
+        <el-table ref="userTableDatas" :data="tableData" height="calc(100vh - 260px)" style="width: 100%" :show-summary="true" :summary-method="totalOutPrice" :cell-class-name="cellClass" @cell-click="cellClickHandler">
+          <el-table-column prop="fd" label="日期">
+          </el-table-column>
+          <el-table-column label="中转行李流向">
+            <el-table-column label="D-D" v-if="DD">
+              <el-table-column prop="in_trans_fly_dd" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_dd" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_dd" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_dd" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_dd" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_dd" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="D-I" v-if="DI">
+              <el-table-column prop="in_trans_fly_di" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_di" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_di" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_di" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_di" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_di" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="I-I" v-if="II">
+              <el-table-column prop="in_trans_fly_ii" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_ii" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_ii" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_ii" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_ii" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_ii" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="I-D" v-if="ID">
+              <el-table-column prop="in_trans_fly_id" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_id" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_id" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_id" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_id" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_id" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column prop="a14" label="进港中转航班总数">
+          </el-table-column>
+          <el-table-column prop="a15" label="中转出航班数总数">
+          </el-table-column>
+          <el-table-column prop="a16" label="须中转行李数总数">
+          </el-table-column>
+          <el-table-column prop="a17" label="完成中转行李数总数">
+          </el-table-column>
+          <el-table-column prop="a19" label="未中转行李数总数">
+          </el-table-column>
+          <el-table-column prop="a18" label="转出成功率">
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 5">
+        <el-table ref="transferTableData" :data="tableData" style="width: 100%" height="calc(100vh - 260px)" :show-summary="true" :summary-method="totalOutPrice" :cell-class-name="cellClass" @cell-click="cellClickHandler">
+          <el-table-column prop="fd" label="日期">
+          </el-table-column>
+          <el-table-column label="D-D" v-if="DD">
+            <el-table-column label="T2-T2" v-if="t1">
+              <el-table-column prop="in_trans_fly_dd_22" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_dd_22" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_dd_22" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_dd_22" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_dd_22" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_dd_22" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T2-T3" v-if="t2">
+              <el-table-column prop="in_trans_fly_dd_23" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_dd_23" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_dd_23" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_dd_23" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_dd_23" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_dd_23" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T3" v-if="t3">
+              <el-table-column prop="in_trans_fly_dd_33" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_dd_33" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_dd_33" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_dd_33" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_dd_33" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_dd_33" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T2" v-if="t4">
+              <el-table-column prop="in_trans_fly_dd_32" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_dd_32" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_dd_32" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_dd_32" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_dd_32" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_dd_32" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column label="D-I" v-if="DI">
+            <el-table-column label="T2-T2" v-if="t1">
+              <el-table-column prop="in_trans_fly_di_22" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_di_22" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_di_22" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_di_22" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_di_22" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_di_22" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T2-T3" v-if="t2">
+              <el-table-column prop="in_trans_fly_di_23" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_di_23" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_di_23" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_di_23" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_di_23" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_di_23" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T3" v-if="t3">
+              <el-table-column prop="in_trans_fly_di_33" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_di_33" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_di_33" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_di_33" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_di_33" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_di_33" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T2" v-if="t4">
+              <el-table-column prop="in_trans_fly_di_32" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_di_32" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_di_32" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_di_32" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_di_32" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_di_32" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column label="I-I" v-if="II">
+            <el-table-column label="T2-T2" v-if="t1">
+              <el-table-column prop="in_trans_fly_ii_22" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_ii_22" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_ii_22" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_ii_22" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_ii_22" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_ii_22" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T2-T3" v-if="t2">
+              <el-table-column prop="in_trans_fly_ii_23" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_ii_23" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_ii_23" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_ii_23" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_ii_23" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_ii_23" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T3" v-if="t3">
+              <el-table-column prop="in_trans_fly_ii_33" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_ii_33" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_ii_33" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_ii_33" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_ii_33" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_ii_33" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T2" v-if="t4">
+              <el-table-column prop="in_trans_fly_ii_32" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_ii_32" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_ii_32" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_ii_32" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_ii_32" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_ii_32" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column label="I-D" v-if="ID">
+            <el-table-column label="T2-T2" v-if="t1">
+              <el-table-column prop="in_trans_fly_id_22" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_id_22" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_id_22" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_id_22" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_id_22" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_id_22" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T2-T3" v-if="t2">
+              <el-table-column prop="in_trans_fly_id_23" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_id_23" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_id_23" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_id_23" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_id_23" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_id_23" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T3" v-if="t3">
+              <el-table-column prop="in_trans_fly_id_33" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_id_33" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_id_33" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_id_33" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_id_33" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_id_33" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+            <el-table-column label="T3-T2" v-if="t4">
+              <el-table-column prop="in_trans_fly_id_32" label="进港中转航班数">
+              </el-table-column>
+              <el-table-column prop="out_trans_fly_id_32" label="中转出航班数">
+              </el-table-column>
+              <el-table-column prop="need_trans_bag_id_32" label="须中转行李数">
+              </el-table-column>
+              <el-table-column prop="finish_trans_bag_id_32" label="完成中转行李数">
+              </el-table-column>
+              <el-table-column prop="notfinish_trans_bag_id_32" label="未中转行李数">
+              </el-table-column>
+              <el-table-column prop="successlv_id_32" label="转出成功率">
+              </el-table-column>
+            </el-table-column>
+          </el-table-column>
+          <el-table-column prop="a14" label="进港中转航班总数">
+          </el-table-column>
+          <el-table-column prop="a15" label="中转出航班数总数">
+          </el-table-column>
+          <el-table-column prop="a16" label="须中转行李数总数">
+          </el-table-column>
+          <el-table-column prop="a17" label="完成中转行李数总数">
+          </el-table-column>
+          <el-table-column prop="a19" label="未中转行李数总数">
+          </el-table-column>
+          <el-table-column prop="a18" label="转出成功率">
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 6">
+        <el-table ref="transferBaggageTableData" :data="tableData" height="calc(100vh - 260px)" style="width: 100%" :show-summary="true">
+          <el-table-column prop="a1" label="日期">
+          </el-table-column>
+          <el-table-column prop="a2" label="进港中转航班量">
+          </el-table-column>
+          <el-table-column prop="a3" label="中转行李件数">
+          </el-table-column>
+          <el-table-column prop="a4" label="未转出件数">
+          </el-table-column>
+          <el-table-column label="未转出件数分项">
+            <el-table-column prop="a5" label="MCT时间紧">
+            </el-table-column>
+            <el-table-column prop="a6" label="过检设备原因">
+            </el-table-column>
+            <el-table-column prop="a7" label="混装">
+            </el-table-column>
+            <el-table-column prop="a8" label="布控">
+            </el-table-column>
+            <el-table-column prop="a9" label="等锥桶">
+            </el-table-column>
+            <el-table-column prop="a10" label="车辆故障">
+            </el-table-column>
+            <el-table-column prop="a11" label="货舱门/卡锁故障">
+            </el-table-column>
+            <el-table-column prop="a12" label="机位远">
+            </el-table-column>
+            <el-table-column prop="a13" label="未通过扫描">
+            </el-table-column>
+            <el-table-column prop="a14" label="BHS无记录">
+            </el-table-column>
+            <el-table-column prop="a15" label="分拣设备故障">
+            </el-table-column>
+            <el-table-column prop="a16" label="进港晚卸">
+            </el-table-column>
+            <el-table-column prop="a17" label="设备紧张">
+            </el-table-column>
+            <el-table-column prop="a18" label="导入晚">
+            </el-table-column>
+            <el-table-column prop="a19" label="正常传出未装机">
+            </el-table-column>
+            <el-table-column prop="a20" label="错传">
+            </el-table-column>
+            <el-table-column prop="a21" label="原因待定">
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 7">
+        <el-table ref="baggageProportionTableData" :data="tableData" height="calc(100vh - 260px)" style="width: 100%" :show-summary="true">
+          <el-table-column prop="fd" label="日期">
+          </el-table-column>
+          <el-table-column label="总">
+            <el-table-column prop="transferlv_all" label="中转行李百分比">
+            </el-table-column>
+            <el-table-column prop="total_bag_all" label="行李总件数">
+            </el-table-column>
+            <el-table-column prop="trans_bag_all" label="中转行李件数">
+            </el-table-column>
+          </el-table-column>
+          <el-table-column label="国内">
+            <el-table-column prop="transferlv_dom" label="中转行李百分比">
+            </el-table-column>
+            <el-table-column prop="total_bag_dom" label="行李总件数">
+            </el-table-column>
+            <el-table-column prop="trans_bag_dom" label="中转行李件数">
+            </el-table-column>
+          </el-table-column>
+          <el-table-column label="国际">
+            <el-table-column prop="transferlv_int" label="中转行李百分比">
+            </el-table-column>
+            <el-table-column prop="total_bag_int" label="行李总件数">
+            </el-table-column>
+            <el-table-column prop="trans_bag_int" label="中转行李件数">
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 8">
+        <el-table :data="tableData" style="width: 100%" height="calc(100vh - 260px)" :show-summary="true" ref="userTableDataelt">
+          <el-table-column prop="time" label="日期">
+          </el-table-column>
+          <el-table-column prop="bpm" label="有BPM行李数量">
+          </el-table-column>
+          <el-table-column prop="bsm" label="总数量">
+          </el-table-column>
+          <el-table-column prop="lv" label="行李全流程跟踪服务水平(%)">
+          </el-table-column>
+        </el-table>
+      </template>
+      <template v-else-if="tableData.length && upid == 9">
+        <el-table :data="tableData" style="width: 100%" :show-summary="true" height="calc(100vh - 260px)" :summary-method="totalOutPrice" ref="userTableDataelt1">
+          <el-table-column prop="carrierFlightsDate" label="日期">
+          </el-table-column>
+          <el-table-column prop="carrierFlights" label="航班号">
+          </el-table-column>
+          <el-table-column prop="craftNo" label="机号">
+          </el-table-column>
+          <el-table-column prop="depstandCd" label="机位">
+          </el-table-column>
+          <el-table-column prop="agentNumber" label="确认账号">
+          </el-table-column>
+          <el-table-column prop="employeeID" label="员工号">
+          </el-table-column>
+          <el-table-column prop="luggages" label="行李件类">
+          </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 { TempQuery } from '@/api/temp'
+import { exportToExcel } from '@/utils/table'
+export default {
+  props: {
+    // 接口ID
+    dataId: {
+      type: [String, Number],
+      default: '',
+    },
+    isloadings: {
+      type: Number,
+    },
+    upid: {
+      type: [String, Number],
+    },
+    dataContent: {
+      default: () => [],
+    },
+    textShow: {
+      type: Array,
+      default: () => [],
+    },
+    textShowtp: {
+      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%",
+        // },
+      ],
+      DD: true,
+      DI: true,
+      II: true,
+      ID: true,
+      t1: true,
+      t2: true,
+      t3: true,
+      t4: true,
+    }
+  },
+  components: {
+    NoData,
+  },
+  watch: {
+    dataContent: {
+      handler (val) {
+        if (val && val!=null) {
+          this.getQuery()
+        }
+      },
+      deep: true,
+    },
+    isloadings: {
+      handler (val) {
+        this.downFile()
+      },
+    },
+    textShow: {
+      handler (val) {
+        if (val.length === 0) {
+          this.DD = true
+          this.DI = true
+          this.II = true
+          this.ID = true
+        } else {
+          this.DD = false
+          this.DI = false
+          this.II = false
+          this.ID = false
+          val.forEach(element => {
+            if (element === 'D-D') {
+              this.DD = true
+            } else if (element === 'D-I') {
+              this.DI = true
+            } else if (element === 'I-I') {
+              this.II = true
+            } else if (element === 'I-D') {
+              this.ID = true
+            }
+          });
+        }
+      },
+    },
+    textShowtp: {
+      handler (val) {
+        if (val.length === 0) {
+          this.t1 = true
+          this.t2 = true
+          this.t3 = true
+          this.t4 = true
+        } else {
+          this.t1 = false
+          this.t2 = false
+          this.t3 = false
+          this.t4 = false
+          val.forEach(element => {
+            if (element === 'T2-T2') {
+              this.t1 = true
+            } else if (element === 'T2-T3') {
+              this.t2 = true
+            } else if (element === 'T3-T3') {
+              this.t3 = true
+            } else if (element === 'T3-T2') {
+              this.t4 = 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: {
+    totalOutPrice (param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = "合计";
+          return;
+        }
+        const values = data.map((item) => Number(item[column.property]));
+        if (
+          column.property != "stand" &&
+          column.property != "flightdate" &&
+          column.property != "indexs" &&
+          column.property != "flightNo" &&
+          column.property != "line" &&
+          column.property != "cargoCompany"
+        ) {
+          sums[index] = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return "";
+            }
+          }, 0);
+          sums[index];
+        }
+        if (this.upid == 4) {
+          sums[6] = (sums[4] * 100 / (sums[3] > 0 ? sums[3] : 1)).toFixed(2) + '%'
+          sums[12] = (sums[10] * 100 / (sums[9] > 0 ? sums[9] : 1)).toFixed(2) + '%'
+          sums[18] = (sums[16] * 100 / (sums[15] > 0 ? sums[15] : 1)).toFixed(2) + '%'
+          sums[24] = (sums[22] * 100 / (sums[21] > 0 ? sums[21] : 1)).toFixed(2) + '%'
+          sums[30] = (sums[28] * 100 / (sums[27] > 0 ? sums[27] : 1)).toFixed(2) + '%'
+        }
+        if (this.upid == 5) {
+          // sums[6] = (sums[4] * 100 / sums[3]).toFixed(2) + '%'
+          // sums[12] = (sums[10] * 100 / sums[9]).toFixed(2) + '%'
+          // sums[18] = (sums[16] * 100 / sums[15]).toFixed(2) + '%'
+          // sums[24] = (sums[22] * 100 / sums[21]).toFixed(2) + '%'
+          // sums[30] = (sums[28] * 100 / sums[27]).toFixed(2) + '%'
+          // sums[36] = (sums[34] * 100 / sums[33]).toFixed(2) + '%'
+          // sums[42] = (sums[40] * 100 / sums[39]).toFixed(2) + '%'
+          for (var i = 6; i < sums.length; i += 6) {
+            sums[i] = (sums[i - 2] * 100 / (sums[i - 3] > 0 ? sums[i - 3] : 1)).toFixed(2) + '%'
+          }
+          // sums[6] = (sums[4] * 100 / (sums[3] > 0 ? sums[3] : 1)).toFixed(2) + '%'
+          // sums[12] = (sums[10] * 100 / (sums[9] > 0 ? sums[9] : 1)).toFixed(2) + '%'
+          // sums[18] = (sums[16] * 100 / (sums[15] > 0 ? sums[15] : 1)).toFixed(2) + '%'
+          // sums[24] = (sums[22] * 100 / (sums[21] > 0 ? sums[21] : 1)).toFixed(2) + '%'
+          // sums[30] = (sums[28] * 100 / (sums[27] > 0 ? sums[27] : 1)).toFixed(2) + '%'
+          // sums[36] = (sums[34] * 100 / (sums[33] > 0 ? sums[33] : 1)).toFixed(2) + '%'
+          // sums[42] = (sums[40] * 100 / (sums[39] > 0 ? sums[39] : 1)).toFixed(2) + '%'
+        }
+        if (this.upid == 9) {
+          sums[0] = '合计:' + this.tableData.length
+          sums[1] = '-'
+          sums[2] = '-'
+          sums[3] = '-'
+          sums[4] = '-'
+          sums[5] = '-'
+        }
+      });
+      return sums;
+    },
+    //获取表格数据
+    async getQuery () {
+      try {
+        this.loading = true
+        if (this.upid === '9' || this.upid === '8' || this.upid === '7' || this.upid === '4' || this.upid === '5') {
+          const { code, returnData } = await TempQuery({
+            serviceId: Number(this.dataId),
+            dataContent: this.dataContent,
+          })
+          if (code == 0) {
+            this.tableData = returnData
+            this.tableCols = returnData.columnSet
+            this.serviceId = returnData.submitID
+            this.loading = false
+            if (this.upid == 4) {
+              this.tableData.forEach(element => {
+                element.successlv_dd = (element.finish_trans_bag_dd * 100 / (element.need_trans_bag_dd > 0 ? element.need_trans_bag_dd : 1)).toFixed(2) + '%'
+                element.successlv_di = (element.finish_trans_bag_di * 100 / (element.need_trans_bag_di > 0 ? element.need_trans_bag_di : 1)).toFixed(2) + '%'
+                element.successlv_ii = (element.finish_trans_bag_ii * 100 / (element.need_trans_bag_ii > 0 ? element.need_trans_bag_ii : 1)).toFixed(2) + '%'
+                element.successlv_id = (element.finish_trans_bag_id * 100 / (element.need_trans_bag_id > 0 ? element.need_trans_bag_id : 1)).toFixed(2) + '%'
+                element.a14 = (this.DD ? element.in_trans_fly_dd : 0) + (this.DI ? element.in_trans_fly_di : 0) + (this.II ? element.in_trans_fly_ii : 0) + (this.ID ? element.in_trans_fly_id : 0)
+                element.a15 = (this.DD ? element.out_trans_fly_dd : 0) + (this.DI ? element.out_trans_fly_di : 0) + (this.II ? element.out_trans_fly_ii : 0) + (this.ID ? element.out_trans_fly_id : 0)
+                element.a16 = (this.DD ? element.need_trans_bag_dd : 0) + (this.DI ? element.need_trans_bag_di : 0) + (this.II ? element.need_trans_bag_ii : 0) + (this.ID ? element.need_trans_bag_id : 0)
+                element.a17 = (this.DD ? element.finish_trans_bag_dd : 0) + (this.DI ? element.finish_trans_bag_di : 0) + (this.II ? element.finish_trans_bag_ii : 0) + (this.ID ? element.finish_trans_bag_id : 0)
+                element.a19 = (this.DD ? element.notfinish_trans_bag_dd : 0) + (this.DI ? element.notfinish_trans_bag_di : 0) + (this.II ? element.notfinish_trans_bag_ii : 0) + (this.ID ? element.notfinish_trans_bag_id : 0)
+                element.a18 = (element.a17 * 100 / (element.a16 > 0 ? element.a16 : 0)).toFixed(2) + '%'
+              });
+            }
+            else if (this.upid == 5) {
+              this.tableData.forEach(element => {
+                element.successlv_dd_22 = (element.finish_trans_bag_dd_22 * 100 / (element.need_trans_bag_dd_22 > 0 ? element.need_trans_bag_dd_22 : 1)).toFixed(2) + '%'
+                element.successlv_dd_23 = (element.finish_trans_bag_dd_23 * 100 / (element.need_trans_bag_dd_23 > 0 ? element.need_trans_bag_dd_23 : 1)).toFixed(2) + '%'
+                element.successlv_dd_33 = (element.finish_trans_bag_dd_33 * 100 / (element.need_trans_bag_dd_33 > 0 ? element.need_trans_bag_dd_33 : 1)).toFixed(2) + '%'
+                element.successlv_dd_32 = (element.finish_trans_bag_dd_32 * 100 / (element.need_trans_bag_dd_32 > 0 ? element.need_trans_bag_dd_32 : 1)).toFixed(2) + '%'
+
+                element.successlv_di_22 = (element.finish_trans_bag_di_22 * 100 / (element.need_trans_bag_di_22 > 0 ? element.need_trans_bag_di_22 : 1)).toFixed(2) + '%'
+                element.successlv_di_23 = (element.finish_trans_bag_di_23 * 100 / (element.need_trans_bag_di_23 > 0 ? element.need_trans_bag_di_23 : 1)).toFixed(2) + '%'
+                element.successlv_di_33 = (element.finish_trans_bag_di_33 * 100 / (element.need_trans_bag_di_33 > 0 ? element.need_trans_bag_di_33 : 1)).toFixed(2) + '%'
+                element.successlv_di_32 = (element.finish_trans_bag_di_32 * 100 / (element.need_trans_bag_di_32 > 0 ? element.need_trans_bag_di_32 : 1)).toFixed(2) + '%'
+
+                element.successlv_ii_22 = (element.finish_trans_bag_ii_22 * 100 / (element.need_trans_bag_ii_22 > 0 ? element.need_trans_bag_ii_22 : 1)).toFixed(2) + '%'
+                element.successlv_ii_23 = (element.finish_trans_bag_ii_23 * 100 / (element.need_trans_bag_ii_23 > 0 ? element.need_trans_bag_ii_23 : 1)).toFixed(2) + '%'
+                element.successlv_ii_33 = (element.finish_trans_bag_ii_33 * 100 / (element.need_trans_bag_ii_33 > 0 ? element.need_trans_bag_ii_33 : 1)).toFixed(2) + '%'
+                element.successlv_ii_32 = (element.finish_trans_bag_ii_32 * 100 / (element.need_trans_bag_ii_32 > 0 ? element.need_trans_bag_ii_32 : 1)).toFixed(2) + '%'
+
+                element.successlv_id_22 = (element.finish_trans_bag_id_22 * 100 / (element.need_trans_bag_id_22 > 0 ? element.need_trans_bag_id_22 : 1)).toFixed(2) + '%'
+                element.successlv_id_23 = (element.finish_trans_bag_id_23 * 100 / (element.need_trans_bag_id_23 > 0 ? element.need_trans_bag_id_23 : 1)).toFixed(2) + '%'
+                element.successlv_id_33 = (element.finish_trans_bag_id_33 * 100 / (element.need_trans_bag_id_33 > 0 ? element.need_trans_bag_id_33 : 1)).toFixed(2) + '%'
+                element.successlv_id_32 = (element.finish_trans_bag_id_32 * 100 / (element.need_trans_bag_id_32 > 0 ? element.need_trans_bag_id_32 : 1)).toFixed(2) + '%'
+
+                let t1DD = (this.t1 ? element.in_trans_fly_dd_22 : 0) + (this.t2 ? element.in_trans_fly_dd_23 : 0) + (this.t3 ? element.in_trans_fly_dd_33 : 0) + (this.t4 ? element.in_trans_fly_dd_32 : 0)
+                let t1DI = (this.t1 ? element.in_trans_fly_di_22 : 0) + (this.t2 ? element.in_trans_fly_di_23 : 0) + (this.t3 ? element.in_trans_fly_di_23 : 0) + (this.t4 ? element.in_trans_fly_di_32 : 0)
+                let t1II = (this.t1 ? element.in_trans_fly_ii_22 : 0) + (this.t2 ? element.in_trans_fly_ii_23 : 0) + (this.t3 ? element.in_trans_fly_ii_33 : 0) + (this.t4 ? element.in_trans_fly_ii_32 : 0)
+                let t1ID = (this.t1 ? element.in_trans_fly_id_22 : 0) + (this.t2 ? element.in_trans_fly_id_23 : 0) + (this.t3 ? element.in_trans_fly_id_33 : 0) + (this.t4 ? element.in_trans_fly_id_32 : 0)
+                element.a14 = (this.DD ? t1DD : 0) + (this.DI ? t1DI : 0) + (this.II ? t1II : 0) + (this.II ? t1ID : 0)
+
+                let t2DD = (this.t1 ? element.out_trans_fly_dd_22 : 0) + (this.t2 ? element.out_trans_fly_dd_23 : 0) + (this.t3 ? element.out_trans_fly_dd_33 : 0) + (this.t4 ? element.out_trans_fly_dd_32 : 0)
+                let t2DI = (this.t1 ? element.out_trans_fly_di_22 : 0) + (this.t2 ? element.out_trans_fly_di_23 : 0) + (this.t3 ? element.out_trans_fly_di_33 : 0) + (this.t4 ? element.out_trans_fly_di_32 : 0)
+                let t2II = (this.t1 ? element.out_trans_fly_ii_22 : 0) + (this.t2 ? element.out_trans_fly_ii_23 : 0) + (this.t3 ? element.out_trans_fly_ii_33 : 0) + (this.t4 ? element.out_trans_fly_ii_32 : 0)
+                let t2ID = (this.t1 ? element.out_trans_fly_id_22 : 0) + (this.t2 ? element.out_trans_fly_id_23 : 0) + (this.t3 ? element.out_trans_fly_id_33 : 0) + (this.t4 ? element.out_trans_fly_id_32 : 0)
+                element.a15 = (this.DD ? t2DD : 0) + (this.DI ? t2DI : 0) + (this.II ? t2II : 0) + (this.II ? t2ID : 0)
+
+                let t3DD = (this.t1 ? element.need_trans_bag_dd_22 : 0) + (this.t2 ? element.need_trans_bag_dd_23 : 0) + (this.t3 ? element.need_trans_bag_dd_33 : 0) + (this.t4 ? element.need_trans_bag_dd_32 : 0)
+                let t3DI = (this.t1 ? element.need_trans_bag_di_22 : 0) + (this.t2 ? element.need_trans_bag_di_23 : 0) + (this.t3 ? element.need_trans_bag_di_33 : 0) + (this.t4 ? element.need_trans_bag_di_32 : 0)
+                let t3II = (this.t1 ? element.need_trans_bag_ii_22 : 0) + (this.t2 ? element.need_trans_bag_ii_23 : 0) + (this.t3 ? element.need_trans_bag_ii_33 : 0) + (this.t4 ? element.need_trans_bag_ii_32 : 0)
+                let t3ID = (this.t1 ? element.need_trans_bag_id_22 : 0) + (this.t2 ? element.need_trans_bag_id_23 : 0) + (this.t3 ? element.need_trans_bag_id_33 : 0) + (this.t4 ? element.need_trans_bag_id_32 : 0)
+                element.a16 = (this.DD ? t3DD : 0) + (this.DI ? t3DI : 0) + (this.II ? t3II : 0) + (this.II ? t3ID : 0)
+
+                let t4DD = (this.t1 ? element.finish_trans_bag_dd_22 : 0) + (this.t2 ? element.finish_trans_bag_dd_23 : 0) + (this.t3 ? element.finish_trans_bag_dd_33 : 0) + (this.t4 ? element.finish_trans_bag_dd_32 : 0)
+                let t4DI = (this.t1 ? element.finish_trans_bag_di_22 : 0) + (this.t2 ? element.finish_trans_bag_di_23 : 0) + (this.t3 ? element.finish_trans_bag_di_33 : 0) + (this.t4 ? element.finish_trans_bag_di_32 : 0)
+                let t4II = (this.t1 ? element.finish_trans_bag_ii_22 : 0) + (this.t2 ? element.finish_trans_bag_ii_23 : 0) + (this.t3 ? element.finish_trans_bag_ii_33 : 0) + (this.t4 ? element.finish_trans_bag_ii_32 : 0)
+                let t4ID = (this.t1 ? element.finish_trans_bag_id_22 : 0) + (this.t2 ? element.finish_trans_bag_id_23 : 0) + (this.t3 ? element.finish_trans_bag_id_33 : 0) + (this.t4 ? element.finish_trans_bag_id_32 : 0)
+                element.a17 = (this.DD ? t4DD : 0) + (this.DI ? t4DI : 0) + (this.II ? t4II : 0) + (this.II ? t4ID : 0)
+
+                let t5DD = (this.t1 ? element.notfinish_trans_bag_dd_22 : 0) + (this.t2 ? element.notfinish_trans_bag_dd_23 : 0) + (this.t3 ? element.notfinish_trans_bag_dd_33 : 0) + (this.t4 ? element.notfinish_trans_bag_dd_32 : 0)
+                let t5DI = (this.t1 ? element.notfinish_trans_bag_di_22 : 0) + (this.t2 ? element.notfinish_trans_bag_di_23 : 0) + (this.t3 ? element.notfinish_trans_bag_di_33 : 0) + (this.t4 ? element.notfinish_trans_bag_di_32 : 0)
+                let t5II = (this.t1 ? element.notfinish_trans_bag_ii_22 : 0) + (this.t2 ? element.notfinish_trans_bag_ii_23 : 0) + (this.t3 ? element.notfinish_trans_bag_ii_33 : 0) + (this.t4 ? element.notfinish_trans_bag_ii_32 : 0)
+                let t5ID = (this.t1 ? element.notfinish_trans_bag_id_22 : 0) + (this.t2 ? element.notfinish_trans_bag_id_23 : 0) + (this.t3 ? element.notfinish_trans_bag_id_33 : 0) + (this.t4 ? element.notfinish_trans_bag_id_32 : 0)
+                element.a19 = (this.DD ? t5DD : 0) + (this.DI ? t5DI : 0) + (this.II ? t5II : 0) + (this.II ? t5ID : 0)
+
+                element.a18 = (element.a17 * 100 / (element.a16 > 0 ? element.a16 : 0)).toFixed(2) + '%'
+
+
+
+              });
+            }
+            else if (this.upid == 8) {
+              this.tableData.forEach(element => {
+                element.lv = element.lv.toFixed(2)
+                element.time = this.dataContent['fd1,fd2'][0] + '至' + this.dataContent['fd1,fd2'][1]
+              })
+            }
+          }
+        } else {
+          if(!this.dataContent.airlineIataCd && !this.dataContent.outAirport && !this.dataContent.takeoff_terminal || !this.dataContent.timetype){
+            this.loading = false
+            this.$message.error('查询条件不能为空')
+            return
+          }
+          if(!this.dataContent.timetype){
+            this.loading = false
+            this.$message.error('查询时间维度不能为空')
+            return
+          }
+          if(!this.dataContent['fd1,fd2']){
+            this.loading = false
+            this.$message.error('查询时间段不能为空')
+            return
+          }
+          if(this.dataContent['fd1,fd2']){
+            this.dataContent['fd1'] = this.dataContent['fd1,fd2'][0]
+            this.dataContent['fd2'] = this.dataContent['fd1,fd2'][1]
+            delete this.dataContent['fd1,fd2']
+          }
+          const { code, returnData } = await TempQuery({
+            serviceId: Number(this.dataId),
+            dataContent: this.dataContent,
+            event:'0'
+          })
+          if (code == 0) {
+            returnData.map(item => {
+              let  ra_brsfly = Number(item.flights_out_brs)/Number(item.flights_out)
+              ra_brsfly = ra_brsfly * 100
+              ra_brsfly =parseFloat(ra_brsfly.toFixed(2))
+              item['ra_brsfly'] = ra_brsfly + '%'
+              let ra_brsbag =  Number(item.bags_brs)/Number(item.bags)
+              ra_brsbag = ra_brsbag * 100
+              ra_brsbag =parseFloat(ra_brsbag.toFixed(2))
+              item['ra_brsbag'] = ra_brsbag + '%'
+            })
+            this.tableData = returnData
+            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
+      }
+    },
+    downFile () {
+      if (this.upid == 1) {
+        let tableName = this.dataContent['fd1'] +'至' + this.dataContent['fd2'] + this.dataContent['airlineIataCd'] + '航司' + this.dataContent['outAirport'] + '航站国航行李BRS扫描数据统计表'
+        const table = this.$refs['userTableData'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else if (this.upid == 2) {
+        let tableName = 'Manual Load扫描数据统计表'
+        const table = this.$refs['userTableDatard'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else if (this.upid == 3) {
+        let tableName = '航易行RFID扫描数据统计表'
+        const table = this.$refs['TableDatardrfid'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else if (this.upid == 4) {
+        let tableName = '中转四个流向统计表'
+        const table = this.$refs['userTableDatas'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else if (this.upid == 5) {
+        let tableName = '中转流向明细统计表'
+        const table = this.$refs['transferTableData'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else if (this.upid == 6) {
+        let tableName = '中转行李因素分析统计表'
+        const table = this.$refs['transferBaggageTableData'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else if (this.upid == 7) {
+        let tableName = '中转行李比例明细统计表'
+        const table =
+          this.$refs['baggageProportionTableData'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else if (this.upid == 8) {
+        let tableName = '行李全流程服务水平百分比表'
+        const table =
+          this.$refs['userTableDataelt'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      } else {
+        let tableName = '工作量统计'
+        const table =
+          this.$refs['userTableDataelt1'].$el.cloneNode(true)
+        const fileName = `${tableName}.xlsx`
+        exportToExcel(table, tableName, fileName, '', true)
+      }
+    },
+    cellClass ({ row, column, rowIndex, columnIndex }) {
+      const classes = []
+      if (
+        column.property.includes('trans_bag') &&
+        row[column.property] &&
+        Number(row[column.property])
+      ) {
+        classes.push('cell-click')
+      }
+      return classes.join(' ')
+    },
+    cellClickHandler (...payload) {
+      this.$emit('cell-click', ...payload)
+    },
+    flightsClick(row){
+      let data = {
+          airlineIataCd:this.dataContent.airlineIataCd,
+          fd1:this.dataContent.fd1,
+          fd2:this.dataContent.fd2,
+          outAirport:this.dataContent.outAirport,
+          takeoff_terminal:this.dataContent.takeoff_terminal
+        }
+      if(this.dataContent.timetype == "day"){
+        data.fd1 = row.timetype
+        data.fd2 = row.timetype
+      }
+      this.$router.push({
+        path: "/brsflightStatistics",
+        query: data,
+      });
+    },
+    baggageClick(row){
+      let data = {
+          airlineIataCd:this.dataContent.airlineIataCd,
+          fd1:this.dataContent.fd1,
+          fd2:this.dataContent.fd2,
+          outAirport:this.dataContent.outAirport,
+          takeoff_terminal:this.dataContent.takeoff_terminal
+        }
+      if(this.dataContent.timetype == "day"){
+        data.fd1 = row.timetype
+        data.fd2 = row.timetype
+      }
+      this.$router.push({
+        path: "/brsbagsStatistics",
+        query: data,
+      });
+    }
+  },
+}
+</script>
+<style lang="scss" scoped>
+::v-deep .el-table {
+  .cell-click {
+    cursor: pointer;
+    color: #2d7cff;
+  }
+  .BtnCol{
+    cursor: pointer;
+    color: #2d7cff;
+  }
+}
+</style>

+ 1 - 1
src/views/statisticsCharts/index.vue

@@ -11,7 +11,7 @@ import StatisticsTabs from './components/statisticsTabs.vue'
 
 export default {
   name: 'Dashboard',
-  components: { StatisticsTabs }
+  components: { StatisticsTabs },
 }
 </script>
 

+ 12 - 1
src/views/statisticsCharts/views/nodeStatisticsCharts.vue

@@ -577,7 +577,16 @@ export default {
             if (item.key) {
               delete item.key
             }
-            listArray[0].push(Object.values(item))
+            if(this.msgObj.dim=="航站进港"){
+              if(item.name =="行李总件数" || item.name =="中转件数" || item.name =="到达件数" || item.name =="卸机件数" ){
+                listArray[0].push(Object.values(item))
+              }
+            }
+            else{
+              if(item.name !="中转件数" && item.name !="到达件数" || item.name !="卸机件数" ){
+                listArray[0].push(Object.values(item))
+              }
+            }
           })
           listArray[0].unshift(['a4', this.msgObj.fd1])
           xlsxDatas[0].push(...listArray[0].map(([key, value]) => key))
@@ -587,6 +596,7 @@ export default {
             )
           )
           xlsxDatas[0][0] = '日期'
+          xlsxDatas[1][0] = this.msgObj.fd1 +'至' + this.msgObj.fd2
           // 添加合计行
           if (xlsxDatas.length > 2) {
             const summaryRow = ['合计']
@@ -614,6 +624,7 @@ export default {
               columnIndex < row.length;
               columnIndex += 2
             ) {
+
               const totalcell = row[1]
               const cell = row[columnIndex]
               const newCell =

+ 85 - 0
src/views/statisticsCharts/views/report/scanningStatisticsNew.vue

@@ -0,0 +1,85 @@
+<template>
+  <!-- 航站BRS扫描统计 -->
+  <div class="statstics-wrapper">
+    <StatisticsHeader
+      title="航站BRS扫描统计"
+      :items="formItems"
+      :data="formData"
+      with-setting
+      :withSetting="false"
+      @getFormData="getFormData"
+      @export="exportup"
+    />
+    <Tableformbrs
+      upid="1"
+      :data-id="dataId"
+      :isloadings="isloadings"
+      :data-content="dataContent"
+      :rows="12"
+      label-width="140px"
+      :min-height="70"
+      width="800px"
+      tableHeight="780"
+    />
+  </div>
+</template>
+<script>
+import StatisticsHeader from '../../components/statisticsHeaderNew.vue'
+import Tableformbrs from '../../components/tableformbrsNew'
+import { Format,getAuthData } from '@/utils/validate'
+export default {
+  name: 'ReportStatistics',
+  data() {
+    return {
+      formData: {},
+      formItems: [],
+      dataId: SERVICE_ID.stBrsId,
+      dataContent: [],
+      isloadings: 1,
+    }
+  },
+  components: {
+    StatisticsHeader,
+    Tableformbrs,
+  },
+  created () {
+      const {auth_id } = this.$route.meta
+      const { arrs } = getAuthData(auth_id)
+      const items = arrs.filter(item => item.auth_type == 6)
+      this.formItems = []
+      items.map(v => {
+        let item = {
+          prop: v.auth_ident,
+          inputType: v.show_type,
+          placeholder: v.auth_name,
+          filterable: true,
+          clearable: true,
+          // multiple: true,
+          // disabled: true,
+          queryId: v.serviceID,
+          width: '200px',
+          setKey: v.auth_comment,
+          options: [],
+          authId:v.auth_id
+        }
+        this.formItems.push(item)
+      })
+
+  },
+  mounted() {
+  },
+  methods: {
+    getFormData(data) {
+      this.dataContent = data
+    },
+    exportup() {
+      this.isloadings = this.isloadings += 1
+    },
+  },
+}
+</script>
+<style lang="scss" scoped>
+.statstics-wrapper{
+  padding: 0 20px;
+}
+</style>

+ 149 - 0
src/views/systemSettings/views/newAuth/components/select.vue

@@ -0,0 +1,149 @@
+<template>
+  <div class="button">
+    <el-form ref="form" :model="form" label-width="100px">
+      <div class="flex-wrap fr-list">
+        <el-form-item class="flex1" label="权限编码">
+          <el-input size="small" clearable placeholder="请输入权限编码" v-model="form.auth_ident"></el-input>
+        </el-form-item>
+        <el-form-item class="flex1" label="显示方式">
+          <el-select size="small" clearable v-model="form.show_type" placeholder="请选择显示方式">
+            <el-option label="时间" value="datePicker"></el-option>
+            <el-option label="下拉" value="select"></el-option>
+          </el-select>
+        </el-form-item>
+      </div>
+      <div class="flex-wrap fr-list">
+        <el-form-item label="服务ID">
+          <el-select @change="serviceChange" filterable style="width: 264px;" size="small" clearable v-model="form.serviceID" placeholder="请选择服务ID">
+            <el-option v-for="(item,index) in authArrs" :key="index" :label="item.serviceName" :value="item.serviceID"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="绑定KEY">
+          <el-input size="small" type="text" :rows="5" placeholder="请输入绑定KEY" v-model="form.auth_comment"></el-input>
+        </el-form-item>
+      </div>
+
+    </el-form>
+  </div>
+</template>
+
+<script>
+import pb from '@/layout/mixin/publicFunc'
+export default {
+  name: 'Button',
+  mixins: [pb],
+  props: {
+    icons: {
+      type: Array,
+      default: () => []
+    },
+    authObj: {
+      type: Object,
+      default: () => { }
+    },
+    authType: {
+      type: String,
+      default: ''
+    },
+    authNum: {
+      type: Number,
+      default: 0
+    }
+  },
+  data () {
+    return {
+      authArrs: [],
+      form: {
+        show_type: '',
+        auth_ident: '',
+        show_icon: '',
+        service_type: '',
+        relation_data: '',
+        open_method: '',
+        pass_parameters: '',
+        route_info: '',
+        window_ident: '',
+        auth_comment: ''
+      },
+      relationData: [],
+      passData: [],
+      formObj: {}
+    }
+  },
+  watch: {
+    authType: {
+      handler (val) {
+        if (val == 'add') {
+          this.clearForm()
+        }
+      },
+      immediate: true
+    },
+    authObj: {
+      handler (obj) {
+        // console.log('dddd', obj)
+        // this.relationData = []
+        // this.passData = []
+        this.formObj = _.cloneDeep(obj)
+        if (!Array.isArray(obj.pass_parameters) && obj.pass_parameters) {
+          obj.pass_parameters = obj.pass_parameters.split(',')
+        }
+        if (obj.up_auth_id) {
+          this.getRelationData(obj.up_auth_id)
+        }
+        this.form = obj
+      },
+      immediate: true
+    },
+    authNum: {
+      handler (val) {
+        if (val) {
+          this.getRelationData(val)
+        }
+      },
+      immediate: true
+    }
+  },
+  async mounted () {
+    const { code, returnData } = await this.getQueryList(SERVICE_ID.sysAllMenuId, { serviceType: 1 })
+    if (code == 0) {
+      this.authArrs = returnData
+    }
+    this.getRelationData(this.authNum ?? this.form.up_auth_id)
+  },
+  methods: {
+    //清空表单
+    clearForm () {
+      const data = this.form
+      for (const key in data) {
+        if (Object.hasOwnProperty.call(data, key)) {
+          data[key] = null
+        }
+      }
+    },
+    async getRelationData (id = this.form.up_auth_id) {
+      // this.form.pass_parameters = ''
+      // this.form.relation_data = ''
+      const { returnData } = await this.getQueryList(SERVICE_ID.getTableColumnId, { serviceOutPutId: id })
+      this.relationData = _.cloneDeep(returnData)
+      this.passData = _.cloneDeep(returnData)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.button {
+  .fr-list {
+    .el-form-item {
+      margin-right: 105px;
+      &:last-child {
+        margin-right: 0;
+      }
+    }
+  }
+  .el-select {
+    width: 100%;
+  }
+}
+</style>

+ 7 - 2
src/views/systemSettings/views/newAuth/index.vue

@@ -52,6 +52,7 @@
                   <el-option label="按钮" :value="3"></el-option>
                   <el-option label="表格" :value="4"></el-option>
                   <el-option label="表格(文字)" :value="5"></el-option>
+                  <el-option label="下拉框" :value="6"></el-option>
                 </el-select>
               </el-form-item>
             </div>
@@ -95,11 +96,12 @@ import Menu from './components/menu.vue'
 import Catalogue from './components/catalogue.vue'
 import Button from './components/button.vue'
 import Table from './components/table.vue'
+import Selects from './components/select.vue'
 import { getToken } from '@/utils/auth'
 export default {
   name: 'NewAuth',
   mixins: [pb, pf],
-  components: { Dialog, Menu, Catalogue, Button, Table },
+  components: { Dialog, Menu, Catalogue, Button, Table,Selects },
   data () {
     return {
       filterText: '',
@@ -468,6 +470,9 @@ export default {
         case 5:
           this.componentName = 'Table'
           break;
+        case 6:
+          this.componentName = 'Selects'
+          break;
         default:
           break;
       }
@@ -534,4 +539,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 4 - 2
src/views/table/css/index.scss

@@ -73,6 +73,7 @@
     }
     .is-click-btn{
        & > div{
+        color: #2d7cff;
         cursor: pointer;
         &::after{
           content: "";
@@ -82,7 +83,8 @@
           bottom: 10px;
           left: 50%;
           margin-left: -50px;
-          border-bottom: 1px solid #101116;
+          // border-bottom: 1px solid #101116;]
+          color: #2d7cff;
         }
        }
     }
@@ -131,4 +133,4 @@
       line-height: 41px;
     }
   }
-}
+}

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 719 - 828
yarn.lock


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно