Browse Source

局方报文

zhongxiaoyu 2 years ago
parent
commit
21349c4bd0

+ 1 - 0
public/config.js

@@ -69,6 +69,7 @@ var DATACONTENT_ID = {
   flightDataQuery: 1803439, //数据查询-航班-表格
   waybillDataQuery: 1803441, //数据查询-运单-表格
   freightDataQuery: 1803440, //数据查询-货物-表格
+  messageDataQuery: null, //数据查询-报文-表格
 
   /***-----高级查询------***/
   baggageTypeId: 86, //高级查询-特殊行李类型下拉选项查询-id

+ 6 - 0
src/router/routes/routes-file-five.ts

@@ -73,6 +73,12 @@ const HomeRoutes = {
       meta: { title: '货物查询', roles: ['freight_inquiry_page'] },
       component: () => import('@/views/dataQuery/freight/index.vue'),
     },
+    // {
+    //   path: '/dataQuery/messageQuery',
+    //   name: 'MessageQuery',
+    //   meta: { title: '局方报文' },
+    //   component: () => import('@/views/dataQuery/message/index.vue'),
+    // },
   ],
 }
 

+ 1 - 2
src/views/dataQuery/components/DataQueryView/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="data-query scroll-y">
+  <div class="data-query">
     <div class="data-query-header">
       <div class="manageTitle">{{ title }}</div>
       <el-form
@@ -329,7 +329,6 @@ const dataQuery = () => {
     }
   })
 }
-
 const resetForm = () => {
   formRef.value?.resetFields()
 }

+ 354 - 0
src/views/dataQuery/message/index.vue

@@ -0,0 +1,354 @@
+<template>
+  <div class="data-query">
+    <div class="data-query-header">
+      <div class="manageTitle">局方报文</div>
+      <el-form
+        ref="formRef"
+        :model="formData"
+        class="data-query-form"
+        :rules="rules"
+        @submit.native.prevent
+      >
+        <div class="form-left">
+          <el-form-item prop="startDate">
+            <el-date-picker
+              v-model="formData.startDate"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              size="default"
+              type="date"
+              placeholder="开始日期"
+              :prefix-icon="datePreTitle('开始')"
+              :clearable="false"
+              class="pre-text"
+            />
+          </el-form-item>
+          <el-form-item prop="endDate">
+            <el-date-picker
+              v-model="formData.endDate"
+              format="YYYY-MM-DD"
+              value-format="YYYY-MM-DD"
+              :disabled-date="disabledEndDate"
+              size="default"
+              type="date"
+              placeholder="结束日期"
+              :prefix-icon="datePreTitle('结束')"
+              :clearable="false"
+              class="pre-text"
+            />
+          </el-form-item>
+        </div>
+        <div class="form-right">
+          <el-form-item prop="messageType" style="width: 108px">
+            <el-select
+              v-model="formData.messageType"
+              size="default"
+              placeholder="报文类型"
+              clearable
+            >
+              <el-option
+                v-for="{ value, label } in messageTypeOptions"
+                :key="value"
+                :value="value"
+                :label="label"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="keyWords">
+            <el-input
+              v-model.trim="formData.waybillNO"
+              size="default"
+              placeholder="请输入运单号进行搜索"
+              :prefix-icon="Search"
+              clearable
+              @keyup.enter.prevent="dataQuery"
+            />
+          </el-form-item>
+        </div>
+      </el-form>
+      <el-button size="default" color="#ac014d" @click="dataQuery"
+        >搜索</el-button
+      >
+      <el-button size="default" plain @click="resetForm">重置</el-button>
+      <ColumnSet
+        :table-columns="tableColumns"
+        @checked-submit="columnChecked"
+      />
+    </div>
+    <div
+      v-loading="loading"
+      element-loading-text="拼命加载中"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+      class="data-query-table"
+    >
+      <SimpleTable
+        ref="tableRef"
+        :data="tableData"
+        :columns="tableColumns"
+        sequence
+        @scroll-over="load"
+      />
+    </div>
+  </div>
+</template>
+
+<script lang="tsx">
+export default {
+  name: 'MessageQuery',
+}
+</script>
+
+<script setup lang="tsx">
+import { Search } from '@element-plus/icons-vue'
+import ColumnSet from '@/components/ColumnSet/index.vue'
+import SimpleTable from '@/components/SimpleTable/index.vue'
+import { ElMessage, FormInstance } from 'element-plus'
+import { parseTime } from '@/utils/validate'
+import { useTableColumnSet } from '@/hooks/useTableColumnSet'
+import { CommonData, CommonTableColumn, CommonValue } from '~/common'
+import { Query } from '@/api/webApi'
+
+const today = parseTime(new Date(), '{y}-{m}-{d}') as string
+const formData = reactive({
+  startDate: today,
+  endDate: today,
+  messageType: '',
+  waybillNO: '',
+})
+
+watchEffect(() => {
+  if (!formData.startDate || !formData.endDate) {
+    return
+  }
+  const start = new Date(formData.startDate).getTime()
+  const end = new Date(formData.endDate).getTime()
+  if (start > end) {
+    ElMessage.warning('开始时间不能晚于结束时间')
+    formData.endDate = ''
+  }
+  if (start <= end - 2 * 24 * 60 * 60 * 1000) {
+    ElMessage.warning('间隔不能超过2天')
+    formData.endDate = ''
+  }
+})
+
+const disabledEndDate = (endDate: Date) => {
+  const start = new Date(formData.startDate + ' 00:00:00').getTime()
+  const end = endDate.getTime()
+  return start > end || start <= end - 2 * 24 * 60 * 60 * 1000
+}
+const datePreTitle = (title: string) => {
+  return <div class="date-pre-title">{title}:</div>
+}
+
+const messageTypeOptions = ref([
+  {
+    value: '1',
+    label: '1',
+  },
+])
+
+const waybillValidator = (rule: any, value: any, callback: any) => {
+  const notMatched = [
+    /^[0-9]{8}$/,
+    /^[0-9]{11}$/,
+    /^[0-9]{3}\-[0-9]{8}$/,
+  ].every(reg => !reg.test(value))
+  if (notMatched) {
+    return callback(new Error('请输入正确的运单号'))
+  }
+  return callback()
+}
+const rules = {
+  waybillNO: [{ validator: waybillValidator, trigger: 'blur' }],
+}
+
+const formRef = ref<FormInstance | null>()
+const dataQuery = () => {
+  formRef.value?.validate(valid => {
+    if (valid) {
+      tableInit()
+      load()
+    }
+  })
+}
+const resetForm = () => {
+  formRef.value?.resetFields()
+}
+
+const loading = ref(false)
+const page = ref(1)
+const noMore = ref(true)
+const tableColumns = ref<CommonTableColumn[]>([])
+const tableData = ref<CommonData[]>([])
+const getTableData = async (defaultDataContent?: CommonValue[]) => {
+  if (loading) {
+    loading.value = true
+  }
+  try {
+    let { startDate, endDate, messageType, waybillNO } = formData
+    const dataContent = [startDate, endDate, messageType, waybillNO].map(
+      v => v || null
+    )
+    const {
+      code,
+      returnData: { listValues },
+      message,
+    } = await Query<CommonData>({
+      id: DATACONTENT_ID.messageDataQuery,
+      dataContent: defaultDataContent ?? dataContent,
+      needPage: page.value,
+    })
+    if (Number(code) !== 0) {
+      throw new Error(message || '失败')
+    }
+    if (listValues.length) {
+      tableData.value.push(
+        ...listValues.filter(
+          row =>
+            !Object.values(row).some(
+              cellValue =>
+                typeof cellValue === 'string' && cellValue.includes('undefined')
+            )
+        )
+      )
+    } else {
+      page.value--
+      noMore.value = true
+    }
+  } catch (error) {
+    console.error(error)
+    page.value--
+    noMore.value = true
+  }
+  if (loading) {
+    loading.value = false
+  }
+}
+const load = () => {
+  if (loading.value || noMore.value) {
+    return
+  }
+  page.value++
+  getTableData()
+}
+const tableInit = () => {
+  page.value = 0
+  noMore.value = false
+  tableData.value = []
+}
+
+const { columnChecked } = useTableColumnSet(tableColumns)
+
+const columns = [
+  {
+    columnName: 'fileName',
+    columnLabel: '文件名称',
+  },
+  {
+    columnName: 'messageName',
+    columnLabel: '报文名称',
+  },
+  {
+    columnName: 'messageState',
+    columnLabel: '收发状态',
+  },
+  {
+    columnName: 'execTime',
+    columnLabel: '执行时间',
+  },
+  {
+    columnName: 'airportState',
+    columnLabel: '报文收发方状态',
+  },
+  {
+    columnName: 'messageDetails',
+    columnLabel: '报文明细',
+  },
+]
+onMounted(() => {
+  tableColumns.value = columns.map(column => ({
+    columnDescribe: '',
+    dataType: '',
+    needCount: 0,
+    needFilters: null,
+    needGroup: null,
+    needSearch: null,
+    needShow: 1,
+    needSort: 0,
+    listqueryTemplateID: null,
+    queryTemplateColumnSetID: null,
+    queryTemplateID: null,
+    orderNumber: null,
+    ...column,
+  }))
+})
+</script>
+
+<style lang="scss" scoped>
+.data-query {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  &-header {
+    width: 100%;
+    height: 32px;
+    margin: 12px 0;
+    display: flex;
+  }
+  &-form :deep {
+    margin-right: 12px;
+    flex: 1;
+    display: flex;
+    justify-content: flex-end;
+    .form-left {
+      flex: 1;
+      display: flex;
+      .el-form-item {
+        width: 168px;
+        margin-right: 8px;
+        .el-date-editor.pre-text {
+          .el-input__prefix {
+            flex-basis: 42px;
+            padding-left: 15px;
+            .date-pre-title {
+              font-style: normal;
+              font-size: 14px;
+              font-family: Microsoft YaHei;
+              color: #303133;
+            }
+          }
+        }
+      }
+    }
+    .form-right {
+      display: flex;
+      justify-content: flex-end;
+      .el-form-item {
+        width: 280px;
+        &:not(:last-of-type) {
+          margin-right: 10px;
+        }
+        .el-select,
+        .el-date-editor {
+          width: 100%;
+        }
+      }
+    }
+    .el-form-item {
+      margin: 0;
+
+      .el-input__inner {
+        font-size: 14px;
+        font-family: DIN, Microsoft YaHei;
+        color: #303133;
+      }
+    }
+  }
+  &-table {
+    height: 0;
+    flex: 1;
+  }
+}
+</style>