瀏覽代碼

Merge branch 'master' of http://120.26.64.82:10880/BFFE/SMAirports

zhaoke 1 年之前
父節點
當前提交
46fb2045f3

+ 2 - 1
public/config.js

@@ -139,7 +139,8 @@ window.SERVICE_ID = {
   /***-----速运行李------***/
   expressTransportationUpload: 20034, // 速运行李数据上传
   expressTransportation: 1803435, // 速运行李数据查询
-  expressTransportationNum: 1803434, // 速运行李次数查询
+  expressTransportationNum: 1803436, // 速运行李次数查询
+  expressTransportationFail: 1803437 // 速运行李数据查询-失败
 }
 
 window.AIRPORT_ID = {

+ 115 - 69
src/views/advancedQuery/views/advancedHome.vue

@@ -922,6 +922,103 @@ export default {
     },
     // 高级查询-确定
     advancedSubmitHandler (singleJump) {
+      this.resetTable()
+      /* 参数顺序
+      【航班开始日期,航班结束日期,航班号,航班号,行李牌号,行李牌号,起飞站,起飞站,目的站,目的站,特殊行李类型,特殊行李类型,旅客姓名大写拼音,旅客姓名大写拼音,
+      PNR,PNR,值机号,值机号,中转进航班,中转进航班,中转出航班,中转出航班,容器编号,容器编号,
+      是否已翻减(null/OFF/其他),是否已翻减(null/OFF/其他),是否值机(null/0/1),是否值机(null/0/1),
+      是否激活(null/0/1),是否激活(null/0/1),是否中转(null/0/1),是否中转(null/0/1),是否取消行李(null/0/1),是否取消行李(null/0/1)】 */
+      this.dataContent = [{}]
+      if (!this.flightDate?.length) {
+        this.$message.error('请先选择要查询的时间')
+        return
+      }
+      if (Object.values(this.form).every(value => value === '')) {
+        this.$message.error('请先输入查询信息')
+        return
+      }
+      // this.dataContent.push(...this.flightDate)
+      this.dataContent[0] = {
+        startTime: this.flightDate[0],
+        endTime: this.flightDate[1],
+      }
+      // const {
+      //   flightNO,
+      //   baggageNO,
+      //   departureStation,
+      //   destination,
+      //   specialType,
+      //   passengerName,
+      //   PNR,
+      //   checkInSequence,
+      //   transferArrival,
+      //   transferDeparture,
+      //   loadType,
+      //   U_Device_ID,
+      //   unLoad,
+      //   checkIn,
+      //   active,
+      //   transferIn,
+      //   canceled,
+      //   status,
+      //   noBSM,
+      // } = this.form
+      // this.setDataContent(
+      //   flightNO,
+      //   baggageFormat(baggageNO),
+      //   departureStation,
+      //   destination,
+      //   specialType.map(v => v.replaceAll(',', '/')).join(),
+      //   passengerName,
+      //   PNR,
+      //   digitFormat(checkInSequence),
+      //   transferArrival,
+      //   transferDeparture,
+      //   U_Device_ID,
+      //   unLoad,
+      //   checkIn,
+      //   active,
+      //   transferIn,
+      //   canceled,
+      //   status,
+      //   noBSM,
+      //   loadType
+      // )
+      this.setDataContent(
+        'flightNO',
+        'baggageNO',
+        'departureStation',
+        'destination',
+        'specialType',
+        'passengerName',
+        'PNR',
+        'checkInSequence',
+        'transferArrival',
+        'transferDeparture',
+        'U_Device_ID',
+        'unLoad',
+        'checkIn',
+        'active',
+        'transferIn',
+        'canceled',
+        'status',
+        'noBSM',
+        'loadType'
+      )
+      this.advancedQuery(this.dataContent, singleJump)
+      this.gjFlag = false
+    },
+    // setDataContent (...dataContent) {
+    //   dataContent.forEach(target => {
+    //     target = typeof target === 'string' ? target.trim() : target
+    //     if ((target ?? '') !== '') {
+    //       this.dataContent.push(target, target)
+    //     } else {
+    //       this.dataContent.push(null, null)
+    //     }
+    //   })
+    // },
+    setDataContent(...keys) {
       function digitFormat (num) {
         if (num) {
           num = '000' + num
@@ -946,76 +1043,22 @@ export default {
         }
         return baggageNO || null
       }
-      this.resetTable()
-      /* 参数顺序
-      【航班开始日期,航班结束日期,航班号,航班号,行李牌号,行李牌号,起飞站,起飞站,目的站,目的站,特殊行李类型,特殊行李类型,旅客姓名大写拼音,旅客姓名大写拼音,
-      PNR,PNR,值机号,值机号,中转进航班,中转进航班,中转出航班,中转出航班,容器编号,容器编号,
-      是否已翻减(null/OFF/其他),是否已翻减(null/OFF/其他),是否值机(null/0/1),是否值机(null/0/1),
-      是否激活(null/0/1),是否激活(null/0/1),是否中转(null/0/1),是否中转(null/0/1),是否取消行李(null/0/1),是否取消行李(null/0/1)】 */
-      this.dataContent = []
-      if (!this.flightDate?.length) {
-        this.$message.error('请先选择要查询的时间')
-        return
-      }
-      if (Object.values(this.form).every(value => value === '')) {
-        this.$message.error('请先输入查询信息')
-        return
-      }
-      this.dataContent.push(...this.flightDate)
-      const {
-        flightNO,
-        baggageNO,
-        departureStation,
-        destination,
-        specialType,
-        passengerName,
-        PNR,
-        checkInSequence,
-        transferArrival,
-        transferDeparture,
-        loadType,
-        U_Device_ID,
-        unLoad,
-        checkIn,
-        active,
-        transferIn,
-        canceled,
-        status,
-        noBSM,
-      } = this.form
-      this.setDataContent(
-        flightNO,
-        baggageFormat(baggageNO),
-        departureStation,
-        destination,
-        specialType.map(v => v.replaceAll(',', '/')).join(),
-        passengerName,
-        PNR,
-        digitFormat(checkInSequence),
-        transferArrival,
-        transferDeparture,
-        U_Device_ID,
-        unLoad,
-        checkIn,
-        active,
-        transferIn,
-        canceled,
-        status,
-        noBSM,
-        loadType
-      )
-      this.advancedQuery(this.dataContent, singleJump)
-      this.gjFlag = false
-    },
-    setDataContent (...dataContent) {
-      dataContent.forEach(target => {
-        target = typeof target === 'string' ? target.trim() : target
-        if ((target ?? '') !== '') {
-          this.dataContent.push(target, target)
+      const dataContent = {}
+      keys.forEach(key => {
+        if (key === 'baggageNO') {
+          dataContent[key] = baggageFormat(this.form[key]) || null
+        } else if (key === 'specialType') {
+          dataContent[key] = this.form[key].join() || null
+        } else if (key === 'checkInSequence') {
+          dataContent[key] = digitFormat(this.form[key]) || null
         } else {
-          this.dataContent.push(null, null)
+          dataContent[key] = this.form[key] || null
         }
       })
+      this.dataContent[0] = {
+        ...this.dataContent[0],
+        ...dataContent
+      }
     },
     // 数据查询
     async advancedQuery (dataContent, singleJump) {
@@ -1025,8 +1068,11 @@ export default {
           code,
           returnData: { listValues: result, needPage },
         } = await TempQuery({
-          id: SERVICE_ID.advancedQueryId,
-          needPage: ++this.page,
+          // id: SERVICE_ID.advancedQueryId,
+          // needPage: ++this.page,
+          serviceId: SERVICE_ID.advancedQueryId,
+          page: ++this.page,
+          size: 50,
           dataContent,
         })
         if (Number(code) !== 0) {

+ 7 - 3
src/views/baggageManagementTemp/components/arrival/index.vue

@@ -393,9 +393,13 @@ export default {
         // })
         const res = await this.getQueryListAuth(SERVICE_ID.arrivalAirId, {}, 1, 9999, 278)
         if (Number(res.code) === 0) {
-          this.AirportList = this._.orderBy(res.returnData.listValues, o => o.planLandingApt)
-          this.formData.currentAirport = 'PEK'
-          this.resetLoopEvent()
+          if (res.returnData?.listValues?.length) {
+            this.AirportList = this._.orderBy(res.returnData.listValues, o => o.planLandingApt)
+            this.formData.currentAirport = res.returnData.listValues[0].planLandingApt
+            this.resetLoopEvent()
+          } else {
+            this.$message.warning('无航站数据权限')
+          }
         } else {
           this.$message.error(res.message)
         }

+ 7 - 3
src/views/baggageManagementTemp/components/departure/index.vue

@@ -351,9 +351,13 @@ export default {
         // })
         const res = await this.getQueryListAuth(SERVICE_ID.departureAirMainId, {}, 1, 9999, 276)
         if (Number(res.code) == 0) {
-          this.AirportList = this._.orderBy(res.returnData.listValues, o => o.planDepartureApt)
-          this.formData.currentAirport = 'PEK'
-          this.resetLoopEvent()
+          if (res.returnData?.listValues?.length) {
+            this.AirportList = this._.orderBy(res.returnData.listValues, o => o.planDepartureApt)
+            this.formData.currentAirport = res.returnData.listValues[0].planDepartureApt
+            this.resetLoopEvent()
+          } else {
+            this.$message.warning('无航站数据权限')
+          }
         } else {
           this.$message.error(res.message)
         }

+ 25 - 4
src/views/baggageManagementTemp/components/flight/index.vue

@@ -304,7 +304,7 @@
 // import BackButton from '@/components/BackButton'
 import Dialog from '@/layout/components/Dialog/index.vue'
 import TimeZoneSelector from '@/components/TimeZoneSelector'
-import { myQuery } from '@/api/temp'
+import { TempQuery, myQuery } from '@/api/temp'
 import tableColsMixin from '../../mixins/tableCols'
 import timeZoneMixin from '../../mixins/timeZone'
 import TableHeaderCell from '@/components/TableHeaderCell'
@@ -1036,8 +1036,28 @@ export default {
     queryContainer (dataContent) {
       return myQuery(SERVICE_ID.flightContainer, ...dataContent)
     },
-    queryBaggageByFlightNO (dataContent) {
-      return myQuery(SERVICE_ID.flightBaggage, ...dataContent)
+    // queryBaggageByFlightNO (dataContent) {
+    //   return myQuery(SERVICE_ID.flightBaggage, ...dataContent)
+    // },
+    async queryBaggageTable(dataContent) {
+      try {
+        const res = await TempQuery({
+          serviceId: 1144,
+          dataContent: {
+            flightNO: dataContent[0],
+            flightDate: dataContent[1],
+            departureAirport: dataContent[2],
+            arriveAirport: dataContent[3],
+          }
+        })
+        if (Number(res.code) === 0) {
+          return res.returnData.listValues
+        } else {
+          return Promise.reject(res.message)
+        }
+      } catch (error) {
+        return Promise.reject(error)
+      }
     },
     async queryAirline (dataContent) {
       try {
@@ -1071,7 +1091,8 @@ export default {
         const [flightInfo, containerTableDataData, flightBaggageTableData] = await Promise.all([
           this.queryflightInfo(dataContent),
           this.queryContainer(dataContent),
-          this.queryBaggageByFlightNO(dataContent)
+          // this.queryBaggageByFlightNO(dataContent)
+          this.queryBaggageTable(dataContent)
         ])
         if (flightInfo.length) {
           this.flightInfo = flightInfo[0]

+ 9 - 5
src/views/baggageManagementTemp/components/transferArrival/index.vue

@@ -659,11 +659,15 @@ export default {
         // })
         const res = await this.getQueryListAuth(SERVICE_ID.departureAirId, {}, 1, 9999, 280)
         if (Number(res.code) === 0) {
-          this.AirportList = res.returnData.listValues
-          this.formData.currentAirport = 'PEK'
-          this.getAviationData()
-          this.upAviationData()
-          this.resetLoopEvent()
+          if (res.returnData?.listValues?.length) {
+            this.AirportList = this._.orderBy(res.returnData.listValues, o => o.planDepartureApt)
+            this.formData.currentAirport = res.returnData.listValues[0].planDepartureApt
+            this.getAviationData()
+            this.upAviationData()
+            this.resetLoopEvent()
+          } else {
+            this.$message.warning('无航站数据权限')
+          }
         } else {
           this.$message.error(res.message)
         }

+ 9 - 5
src/views/baggageManagementTemp/components/transferDeparture/index.vue

@@ -456,11 +456,15 @@ export default {
         // })
         const res = await this.getQueryListAuth(SERVICE_ID.departureAirLtId, {}, 1, 9999, 280)
         if (Number(res.code) === 0) {
-          this.AirportList = res.returnData.listValues
-          this.formData.currentAirport = 'PEK'
-          this.getAviationData()
-          this.upAviationData()
-          this.resetLoopEvent()
+          if (res.returnData?.listValues?.length) {
+            this.AirportList = this._.orderBy(res.returnData.listValues, o => o.planDepartureApt)
+            this.formData.currentAirport = res.returnData.listValues[0].planDepartureApt
+            this.getAviationData()
+            this.upAviationData()
+            this.resetLoopEvent()
+          } else {
+            this.$message.warning('无航站数据权限')
+          }
         } else {
           this.$message.error(res.message)
         }

+ 4 - 2
src/views/baggageManagementTemp/mixins/terminal.js

@@ -246,7 +246,8 @@ export default {
           'numberOfBulk',
           'noBSM'
         ].includes(column.property) &&
-        row[column.property]
+        row[column.property] &&
+        row[column.property] !== '0'
       ) {
         classes.push('cell-click')
         if (
@@ -320,7 +321,8 @@ export default {
           'numberOfBulk',
           'noBSM'
         ].includes(column.property) &&
-        row[column.property]
+        row[column.property] &&
+        row[column.property] !== '0'
       ) {
         this.$store.dispatch('keepAlive/addClickedCell', {
           row,

+ 1 - 1
src/views/baggageManagementTemp/mixins/timeZone.js

@@ -28,7 +28,7 @@ export default {
         case 'sortTime':
         case 'loadTime':
         case 'inflTime':
-          return cellValue ? `${timeInZone(cellValue.split(',')[0], this.timeZone)}\n${cellValue.split(',')[1]}` : ''
+          return cellValue ? `${timeInZone(cellValue.split('_')[0], this.timeZone)}\n${cellValue.split('_')[1]}` : ''
         // return `${cellValue ?? ''}\n${getTimeInZone(row['checkInTime'], this.timeZone)}`
         // case 'DealInfo':
         //   return `${cellValue ?? ''}\n${getTimeInZone(row['DealTime'], this.timeZone)}`

+ 186 - 73
src/views/upload/index.vue

@@ -38,16 +38,39 @@
         <div class="flex">
           <div class="manageTitle">{{ title2 }}</div>
           <div>
-            <el-date-picker v-model="input" size="small" value-format="yyyy-MM-dd" type="date" placeholder="选择日期">
-            </el-date-picker>
-            <el-button class="btn-refresh" type="primary" icon="el-icon-refresh" @click="getStateData" />
+            <el-date-picker
+              v-model="input"
+              size="small"
+              value-format="yyyy-MM-dd"
+              type="date"
+              placeholder="选择日期"
+            />
+            <el-button
+              class="btn-refresh"
+              type="primary"
+              icon="el-icon-refresh"
+              @click="getStateData"
+            />
           </div>
         </div>
         <div class="upload-header-right">
           <!-- <el-date-picker v-model="flightDate" size="small" type="daterange" value-format="yyyy-MM-dd" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="dateRangePickerOptions" :clearable="false" />
           <el-button class="btn-refresh" type="primary" icon="el-icon-refresh" @click="getStateData" /> -->
-          <el-upload ref="upload" action="#" multiple :loading="exceed" :accept="acceptTypesStr" :show-file-list="false" :http-request="uploadHandler" :before-upload="beforeUpload">
-            <el-button slot="trigger" type="primary" size="small">
+          <el-upload
+            ref="upload"
+            action="#"
+            multiple
+            :loading="exceed"
+            :accept="acceptTypesStr"
+            :show-file-list="false"
+            :http-request="uploadHandler"
+            :before-upload="beforeUpload"
+          >
+            <el-button
+              slot="trigger"
+              type="primary"
+              size="small"
+            >
               上传文件
             </el-button>
           </el-upload>
@@ -55,53 +78,107 @@
       </header>
       <main class="upload-main">
         <div class="upload-main-content flex-wrap">
-          <div v-loading="loading1" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="upload-main-content-left">
-            <el-table :data="capData" :highlight-current-row="true" @cell-click="stateClick" border stripe fit height="100%" class="state-table">
+          <div
+            v-loading="loading1"
+            element-loading-text="拼命加载中"
+            element-loading-spinner="el-icon-loading"
+            element-loading-background="rgba(0, 0, 0, 0.8)"
+            class="upload-main-content-left"
+          >
+            <el-table
+              :data="capData"
+              border
+              stripe
+              fit
+              height="100%"
+              class="state-table"
+              :cell-class-name="cellClass"
+              @cell-click="stateClick"
+            >
               <el-table-column label="日期">
                 <template slot-scope="scope">
                   <div>{{ currDate(scope.row.thedate) }}</div>
                 </template>
               </el-table-column>
-              <el-table-column width="100" prop="total" label="条数"></el-table-column>
+              <el-table-column
+                width="75"
+                prop="total"
+                label="总数"
+              />
+              <el-table-column
+                width="75"
+                prop="fail"
+                label="失败"
+              />
             </el-table>
           </div>
-          <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="tableData" border stripe fit height="100%" class="upload-table" :cell-class-name="cellClass">
-              <el-table-column v-for="column in tableColumns" :key="column.key" :prop="column.prop" :label="column.prop">
+          <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="tableData"
+              border
+              stripe
+              fit
+              height="100%"
+              class="upload-table"
+              :cell-class-name="cellClass"
+            >
+              <el-table-column
+                v-for="column in tableColumns"
+                :key="column.key"
+                :prop="column.prop"
+                :label="column.prop"
+              >
                 <template slot-scope="scope">
-                  <el-tooltip v-if="column.showTooltip" class="item" effect="dark" placement="top-start">
-                    <div slot="content" class="tooltip-content">
+                  <el-tooltip
+                    v-if="column.showTooltip"
+                    class="item"
+                    effect="dark"
+                    placement="top-start"
+                  >
+                    <div
+                      slot="content"
+                      class="tooltip-content"
+                    >
                       {{
-                    formatter(
-                      scope.row,
-                      scope.column,
-                      scope.row[scope.column.property]
-                    )
-                  }}
+                        formatter(
+                          scope.row,
+                          scope.column,
+                          scope.row[scope.column.property]
+                        )
+                      }}
                     </div>
                     <div class="tooltip-trigger">
                       {{
-                    formatter(
-                      scope.row,
-                      scope.column,
-                      scope.row[scope.column.property]
-                    )
-                  }}
+                        formatter(
+                          scope.row,
+                          scope.column,
+                          scope.row[scope.column.property]
+                        )
+                      }}
                     </div>
                   </el-tooltip>
                   <span v-else>
                     {{
-                  formatter(
-                    scope.row,
-                    scope.column,
-                    scope.row[scope.column.property]
-                  )
-                }}
+                      formatter(
+                        scope.row,
+                        scope.column,
+                        scope.row[scope.column.property]
+                      )
+                    }}
                   </span>
                 </template>
               </el-table-column>
               <template #empty>
-                <NoData :image-width="230" :image-height="160" />
+                <NoData
+                  :image-width="230"
+                  :image-height="160"
+                />
               </template>
             </el-table>
           </div>
@@ -134,12 +211,12 @@ const short = getUnit(maxSize)
 export default {
   name: 'Upload',
   components: { NoData },
-  data () {
+  data() {
     return {
       title: '速运行李上传',
       acceptTypesStr: acceptTypesStr,
       totalProgressList: [],
-      limit: 3,
+      limit: 10,
       title2: '速运行李数据',
       flightDate: new Array(2).fill(parseTime(new Date(), '{y}-{m}-{d}')),
       dateRangePickerOptions: {
@@ -183,7 +260,6 @@ export default {
         },
         {
           prop: 'message',
-          showTooltip: true,
         },
         {
           prop: 'sendResult',
@@ -193,19 +269,20 @@ export default {
       tableData: [],
       stateData: [],
       loading: false,
-      loading1: false
+      loading1: false,
+      currentCell: null,
     }
   },
   computed: {
-    currentProgressNum () {
+    currentProgressNum() {
       return this.totalProgressList.reduce((prevCount, currentProgress) => {
         return currentProgress.state > 0 ? prevCount : prevCount + 1
       }, 0)
     },
-    exceed () {
+    exceed() {
       return this.currentProgressNum >= this.limit
     },
-    currDate () {
+    currDate() {
       return function (time) {
         if (time) {
           return parseTime(new Date(time), '{y}-{m}-{d} {h}:{i}:{s}')
@@ -214,10 +291,12 @@ export default {
         }
       }
     },
-    capData () {
+    capData() {
       const val = this.input
-      return this.stateData.filter(data => !val || data.thedate && data.thedate.includes(val))
-    }
+      return this.stateData.filter(
+        data => !val || (data.thedate && data.thedate.includes(val))
+      )
+    },
   },
   // watch: {
   //   flightDate: {
@@ -228,11 +307,11 @@ export default {
   //     immediate: true,
   //   },
   // },
-  created () {
+  created() {
     this.getStateData()
   },
   methods: {
-    beforeUpload (file) {
+    beforeUpload(file) {
       const progress = this.getProgress(file)
       if (progress && progress.state === 0) {
         this.$message.warning(`${file.name} 上传中,请勿重复上传`)
@@ -258,7 +337,7 @@ export default {
         return false
       }
     },
-    uploadHandler ({ file }) {
+    uploadHandler({ file }) {
       if (!this.exceed) {
         this.uploadFile(file)
       }
@@ -276,25 +355,25 @@ export default {
       }
       this.totalProgressList.push(newProgress)
     },
-    stateClass (state) {
+    stateClass(state) {
       const classMap = ['pending', 'success', 'failure']
       return `upload-list-item-state-${classMap[state]}`
     },
-    stateFormat (state) {
+    stateFormat(state) {
       const textMap = ['上传中···', '上传成功', '上传失败']
       return textMap[state]
     },
-    setState (file, state) {
+    setState(file, state) {
       const progress = this.getProgress(file)
       if (progress) {
         progress.state = state
       }
     },
-    getProgress (file) {
+    getProgress(file) {
       const key = `${file.name}${file.lastModified}`
       return this.totalProgressList.find(progress => progress.key === key)
     },
-    retry (progress) {
+    retry(progress) {
       if (this.exceed) {
         this.$message.warning('已达到最大同时上传数量,请稍后再试')
         return
@@ -302,7 +381,7 @@ export default {
       this.uploadFile(progress.file)
       progress.state = 0
     },
-    async uploadFile (file) {
+    async uploadFile(file) {
       try {
         const formData = new FormData()
         formData.append('file', file)
@@ -320,26 +399,32 @@ export default {
         this.setState(file, 2)
       }
     },
-    dateRangePickHandler ({ maxDate, minDate }) {
+    dateRangePickHandler({ maxDate, minDate }) {
       if (!maxDate) {
         this.pickedDate = minDate
       } else {
         this.pickedDate = null
       }
     },
-    dateRangeDisabled (date) {
+    dateRangeDisabled(date) {
       return this.pickedDate
         ? Math.abs(date - this.pickedDate) > 2 * 24 * 60 * 60 * 1000
         : false
     },
-    cellClass ({ row, column, rowIndex, columnIndex }) {
+    cellClass({ row, column, rowIndex, columnIndex }) {
       const classes = []
       if (column.property === 'createtime') {
         classes.push('pre-line')
       }
+      if (['total', 'fail'].includes(column.property) && row[column.property]) {
+        classes.push('cell-click')
+        if (this.currentCell === `${row.dataObjectId}-${column.property}`) {
+          classes.push('cell-current')
+        }
+      }
       return classes.join(' ')
     },
-    formatter (row, column, cellValue) {
+    formatter(row, column, cellValue) {
       const value = String(cellValue ?? '').trim()
       switch (column.property) {
         case 'createtime':
@@ -348,20 +433,31 @@ export default {
           return cellValue
       }
     },
-    async getTableData (cid = null) {
+    async getTableData(cid = null, type = null) {
       this.loading = true
       try {
-        // const dataContent = [this.flightDate[0], this.flightDate[1]]
-        const dataContent = [
-          `${this.flightDate[0]} 00:00:00`,
-          `${this.flightDate[1]} 23:59:59`,
-        ]
+        const dataContent = []
+        if (cid) {
+          dataContent.push(cid)
+        } else {
+          dataContent.push(
+            `${this.flightDate[0]} 00:00:00`,
+            `${this.flightDate[1]} 23:59:59`
+          )
+        }
+        if (type === 'fail') {
+          dataContent.push('失败null')
+        }
         const {
           code,
           returnData: { listValues },
         } = await WhatQuery({
-          id: SERVICE_ID.expressTransportation,
-          dataContent: cid ? [cid] : dataContent,
+          id: SERVICE_ID[
+            type === 'fail'
+              ? 'expressTransportationFail'
+              : 'expressTransportation'
+          ],
+          dataContent,
         })
         if (Number(code) !== 0) {
           throw new Error('失败')
@@ -372,7 +468,7 @@ export default {
       }
       this.loading = false
     },
-    async getStateData () {
+    async getStateData() {
       this.loading1 = true
       try {
         const {
@@ -391,10 +487,12 @@ export default {
       }
       this.loading1 = false
     },
-    stateClick (row) {
+    stateClick(row, column, cell, event) {
       const { dataObjectId } = row
-      if (dataObjectId) {
-        this.getTableData(dataObjectId)
+      const type = column.property
+      if (dataObjectId && ['total', 'fail'].includes(type) && row[type]) {
+        this.currentCell = `${row.dataObjectId}-${column.property}`
+        this.getTableData(dataObjectId, type)
       }
     },
   },
@@ -462,7 +560,7 @@ export default {
       }
       &-details {
         font-size: 14px;
-        font-family: Helvetica, "Microsoft YaHei";
+        font-family: Helvetica, 'Microsoft YaHei';
         > div {
           height: 16px;
           line-height: 16px;
@@ -503,18 +601,15 @@ export default {
       }
     }
   }
-  ::v-deep &-table {
+  ::v-deep .el-table {
     width: 100%;
     .cell {
       padding: 0;
       text-align: center;
       font-size: 14px;
-      font-family: Helvetica, "Microsoft YaHei";
+      font-family: Helvetica, 'Microsoft YaHei';
       letter-spacing: 0;
     }
-    .pre-line .cell {
-      white-space: pre-line;
-    }
     .el-table__header-wrapper,
     .el-table__fixed-header-wrapper {
       .cell {
@@ -523,6 +618,24 @@ export default {
         white-space: nowrap;
       }
     }
+    .pre-line .cell {
+      white-space: pre-line;
+    }
+
+    &.state-table {
+      .el-table__cell {
+        background-color: transparent !important;
+        &.cell-click .cell {
+          color: #2d67e3;
+          cursor: pointer;
+        }
+
+        &.cell-current,
+        &:hover {
+          background-color: #d5e4f7 !important;
+        }
+      }
+    }
   }
 }