wzh 3 лет назад
Родитель
Сommit
c62d4e839f
1 измененных файлов с 284 добавлено и 270 удалено
  1. 284 270
      src/views/index/Index.vue

+ 284 - 270
src/views/index/Index.vue

@@ -1,275 +1,281 @@
 <template>
-  <div class="df">
-    <div
-      class="left-top"
-      :style="{
-        height:
-          store.state.firstTitle == '主页'
-            ? 'calc(100vh - 142px)'
-            : 'calc(100vh - 238px)',
-      }"
-    >
-      <div id="map-container" class="map-container"></div>
-      <div class="df aic tabs">
-        <div
-          @click="changeVoyageType(0)"
-          :class="
-            status == 0
-              ? 'currentbtn radio-btns left-radius'
-              : 'radio-btns left-radius'
-          "
-        >
-          全部航次
-        </div>
-        <div
-          style="border-left: none"
-          @click="changeVoyageType(1)"
-          :class="status == 1 ? 'currentbtn radio-btns' : 'radio-btns'"
-        >
-          装货中
-        </div>
+  <div v-loading="isLoading">
+    <div class="df">
+      <div
+        class="left-top"
+        :style="{
+          height:
+            store.state.firstTitle == '主页'
+              ? 'calc(100vh - 142px)'
+              : 'calc(100vh - 238px)',
+        }"
+      >
+        <div id="map-container" class="map-container"></div>
+        <div class="df aic tabs">
+          <div
+            @click="changeVoyageType(0)"
+            :class="
+              status == 0
+                ? 'currentbtn radio-btns left-radius'
+                : 'radio-btns left-radius'
+            "
+          >
+            全部航次
+          </div>
+          <div
+            style="border-left: none"
+            @click="changeVoyageType(1)"
+            :class="status == 1 ? 'currentbtn radio-btns' : 'radio-btns'"
+          >
+            装货中
+          </div>
 
-        <div
-          style="border-left: none"
-          @click="changeVoyageType(2)"
-          :class="status == 2 ? 'currentbtn radio-btns' : 'radio-btns'"
-        >
-          运输中
-        </div>
-        <div
-          style="border-left: none"
-          @click="changeVoyageType(3)"
-          :class="
-            status == 3
-              ? 'currentbtn radio-btns right-radius'
-              : 'radio-btns right-radius '
-          "
-        >
-          卸货中
+          <div
+            style="border-left: none"
+            @click="changeVoyageType(2)"
+            :class="status == 2 ? 'currentbtn radio-btns' : 'radio-btns'"
+          >
+            运输中
+          </div>
+          <div
+            style="border-left: none"
+            @click="changeVoyageType(3)"
+            :class="
+              status == 3
+                ? 'currentbtn radio-btns right-radius'
+                : 'radio-btns right-radius '
+            "
+          >
+            卸货中
+          </div>
         </div>
       </div>
-    </div>
-    <div
-      class="right-top"
-      :style="{
-        height:
-          store.state.firstTitle == '主页'
-            ? 'calc(100vh - 142px)'
-            : 'calc(100vh - 238px)',
-      }"
-    >
-      <div class="cards card-1">
-        <div>总航次数</div>
-        <div>{{ indexData.totalVoyageNum }}</div>
-      </div>
-      <div class="cards card-2">
-        <div>总实际装载吨位</div>
-        <div>{{ indexData.totalLoadTons }}</div>
-      </div>
-      <div class="cards card-3">
-        <div>总已完成卸货吨位</div>
-        <div>{{ indexData.finshDiscTons }}</div>
-      </div>
-      <div class="cards card-4">
-        <div>总剩余卸货吨位</div>
-        <div>{{ indexData.unfinshDiscTons }}</div>
-      </div>
-      <div id="pie" class="card-5">
-        <div>饼图</div>
-        <div>卸货</div>
-      </div>
-    </div>
-  </div>
-  <div class="df">
-    <div class="left-bottom">
       <div
-        class="df aic jcfs mt20"
-        style="
-          font-size: 14px;
-          color: #333;
-          width: calc(100vw - 300px);
-          flex-wrap: wrap;
-        "
+        class="right-top"
+        :style="{
+          height:
+            store.state.firstTitle == '主页'
+              ? 'calc(100vh - 142px)'
+              : 'calc(100vh - 238px)',
+        }"
       >
-        <div class="df jcsb aic mb10 mr20 ml20">
-          <div class="mr10">装货港:</div>
-          <el-select
-            style="width: 120px"
-            v-model="postData.loadPortId"
-            placeholder="装货港"
-            size="small"
-            @change="getIndexData(1)"
-            @focus="getPortSelect"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="item in portOptions"
-              :key="item"
-              :label="item.value"
-              :value="item.key"
-            />
-          </el-select>
+        <div class="cards card-1">
+          <div>总航次数</div>
+          <div>{{ indexData.totalVoyageNum }}</div>
         </div>
-        <div class="df jcsb aic mb10 mr20">
-          <div class="mr10">卸货港:</div>
-          <el-select
-            style="width: 120px"
-            v-model="postData.discPortId"
-            placeholder="卸货港"
-            size="small"
-            @change="getIndexData(1)"
-            @focus="getPortSelect"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="item in portOptions"
-              :key="item"
-              :label="item.value"
-              :value="item.key"
-            />
-          </el-select>
+        <div class="cards card-2">
+          <div>总实际装载吨位</div>
+          <div>{{ indexData.totalLoadTons }}</div>
         </div>
-        <div class="df jcsb aic mb10 mr20">
-          <div class="mr10">到港状态:</div>
-          <el-select
-            style="width: 120px"
-            v-model="postData.isArrived"
-            placeholder="到港状态"
-            size="small"
-            @change="getIndexData(1)"
-          >
-            <el-option label="已到港" :value="0" />
-            <el-option label="未到港" :value="1" />
-          </el-select>
+        <div class="cards card-3">
+          <div>总已完成卸货吨位</div>
+          <div>{{ indexData.finshDiscTons }}</div>
         </div>
-        <div class="df jcsb aic mb10 mr20">
-          <div class="mr10">航次状态:</div>
-          <el-select
-            style="width: 120px"
-            v-model="postData.abnormalStatus"
-            placeholder="航次状态"
-            size="small"
-            @change="getIndexData(1)"
-          >
-            <el-option label="正常" :value="0" />
-            <el-option label="异常" :value="1" />
-          </el-select>
+        <div class="cards card-4">
+          <div>总剩余卸货吨位</div>
+          <div>{{ indexData.unfinshDiscTons }}</div>
         </div>
-        <div class="df jcsb aic mb10 mr20">
-          <div class="mr10">货种:</div>
-          <el-select
-            style="width: 100px"
-            v-model="postData.cargoId"
-            placeholder="货种"
-            size="small"
-            @change="getIndexData(1)"
-            @focus="getCargoSelect"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="item in cargoOptions"
-              :key="item"
-              :label="item.value"
-              :value="item.key"
-            />
-          </el-select>
+        <div id="pie" class="card-5">
+          <div>饼图</div>
+          <div>卸货</div>
         </div>
-        <el-button
-          @click="resetFilter"
-          class="mb10"
-          size="small"
-          type="primary"
-        >
-          全部
-        </el-button>
       </div>
     </div>
-    <div class="right-bottom">
-      <el-popover placement="top" :width="100" trigger="hover">
-        <template #reference>
-          <el-button size="large" type="primary">导出报告</el-button>
-        </template>
+    <div class="df">
+      <div class="left-bottom">
         <div
+          class="df aic jcfs mt20"
           style="
-            display: flex;
-            flex-direction: column;
-            height: 180px;
-            justify-content: space-between;
-            align-items: center;
+            font-size: 14px;
+            color: #333;
+            width: calc(100vw - 300px);
+            flex-wrap: wrap;
           "
         >
-          <div>
-            <el-button
-              type="primary"
-              size="medium"
-              v-auth="'DOWNLOADVOYAGELIST'"
-              @click="showExportModal('航次列表')"
+          <div class="df jcsb aic mb10 mr20 ml20">
+            <div class="mr10">装货港:</div>
+            <el-select
+              style="width: 120px"
+              v-model="postData.loadPortId"
+              placeholder="装货港"
+              size="small"
+              @change="getIndexData(1)"
+              @focus="getPortSelect"
+              filterable
+              clearable
             >
-              导出航次列表
-            </el-button>
+              <el-option
+                v-for="item in portOptions"
+                :key="item"
+                :label="item.value"
+                :value="item.key"
+              />
+            </el-select>
           </div>
-          <div>
-            <el-button
-              type="primary"
-              size="medium"
-              v-auth="'MULTDOWNLOADSHIPTRACK'"
-              @click="showExportModal('航次跟踪')"
+          <div class="df jcsb aic mb10 mr20">
+            <div class="mr10">卸货港:</div>
+            <el-select
+              style="width: 120px"
+              v-model="postData.discPortId"
+              placeholder="卸货港"
+              size="small"
+              @change="getIndexData(1)"
+              @focus="getPortSelect"
+              filterable
+              clearable
             >
-              导出航次跟踪
-            </el-button>
+              <el-option
+                v-for="item in portOptions"
+                :key="item"
+                :label="item.value"
+                :value="item.key"
+              />
+            </el-select>
           </div>
-          <div>
-            <el-button
-              type="primary"
-              size="medium"
-              @click="showExportModal('卸货记录')"
-              v-auth="'MULTDOWNLOADDISCHARGE'"
+          <div class="df jcsb aic mb10 mr20">
+            <div class="mr10">到港状态:</div>
+            <el-select
+              style="width: 120px"
+              v-model="postData.isArrived"
+              placeholder="到港状态"
+              size="small"
+              @change="getIndexData(1)"
             >
-              导出卸货记录
-            </el-button>
+              <el-option label="已到港" :value="0" />
+              <el-option label="未到港" :value="1" />
+            </el-select>
           </div>
-          <div>
-            <el-button
-              v-auth="'DOWNLOADFYDI'"
-              type="primary"
-              size="medium"
-              @click="downloadFYDI"
+          <div class="df jcsb aic mb10 mr20">
+            <div class="mr10">航次状态:</div>
+            <el-select
+              style="width: 120px"
+              v-model="postData.abnormalStatus"
+              placeholder="航次状态"
+              size="small"
+              @change="getIndexData(1)"
             >
-              下载FYDI指数
-            </el-button>
+              <el-option label="正常" :value="0" />
+              <el-option label="异常" :value="1" />
+            </el-select>
+          </div>
+          <div class="df jcsb aic mb10 mr20">
+            <div class="mr10">货种:</div>
+            <el-select
+              style="width: 100px"
+              v-model="postData.cargoId"
+              placeholder="货种"
+              size="small"
+              @change="getIndexData(1)"
+              @focus="getCargoSelect"
+              filterable
+              clearable
+            >
+              <el-option
+                v-for="item in cargoOptions"
+                :key="item"
+                :label="item.value"
+                :value="item.key"
+              />
+            </el-select>
           </div>
+          <el-button
+            @click="resetFilter"
+            class="mb10"
+            size="small"
+            type="primary"
+          >
+            全部
+          </el-button>
         </div>
-      </el-popover>
-      <el-dialog
-        v-model="exportModalVisable"
-        :title="exportModalTitle"
-        :close-on-click-modal="false"
-        @close="isLoadingZip = false"
-        width="200px"
-      >
-        <div class="df aic jcsb">
+      </div>
+      <div class="right-bottom">
+        <el-popover placement="top" :width="100" trigger="hover">
+          <template #reference>
+            <el-button size="large" type="primary">导出报告</el-button>
+          </template>
           <div
-            v-if="exportModalTitle != '航次列表' || cargoOwnerId == 7"
-            class="df aic"
+            style="
+              display: flex;
+              flex-direction: column;
+              height: 180px;
+              justify-content: space-between;
+              align-items: center;
+            "
           >
-            <div class="mr20">请选择月份:</div>
-            <el-date-picker
-              v-model="currentMonth"
-              type="month"
-              placeholder="请选择年月"
-              value-format="YYYYMM"
-              :disabled="isLoadingZip"
-            />
+            <div>
+              <el-button
+                type="primary"
+                size="medium"
+                v-auth="'DOWNLOADVOYAGELIST'"
+                @click="showExportModal('航次列表')"
+              >
+                导出航次列表
+              </el-button>
+            </div>
+            <div>
+              <el-button
+                type="primary"
+                size="medium"
+                v-auth="'MULTDOWNLOADSHIPTRACK'"
+                @click="showExportModal('航次跟踪')"
+              >
+                导出航次跟踪
+              </el-button>
+            </div>
+            <div>
+              <el-button
+                type="primary"
+                size="medium"
+                @click="showExportModal('卸货记录')"
+                v-auth="'MULTDOWNLOADDISCHARGE'"
+              >
+                导出卸货记录
+              </el-button>
+            </div>
+            <div>
+              <el-button
+                v-auth="'DOWNLOADFYDI'"
+                type="primary"
+                size="medium"
+                @click="downloadFYDI"
+              >
+                下载FYDI指数
+              </el-button>
+            </div>
           </div>
-          <div></div>
-          <el-button type="primary" @click="exportZip" :loading="isLoadingZip">
-            导出{{ exportModalTitle }}
-          </el-button>
-        </div>
-      </el-dialog>
+        </el-popover>
+        <el-dialog
+          v-model="exportModalVisable"
+          :title="exportModalTitle"
+          :close-on-click-modal="false"
+          @close="isLoadingZip = false"
+          width="200px"
+        >
+          <div class="df aic jcsb">
+            <div
+              v-if="exportModalTitle != '航次列表' || cargoOwnerId == 7"
+              class="df aic"
+            >
+              <div class="mr20">请选择月份:</div>
+              <el-date-picker
+                v-model="currentMonth"
+                type="month"
+                placeholder="请选择年月"
+                value-format="YYYYMM"
+                :disabled="isLoadingZip"
+              />
+            </div>
+            <div></div>
+            <el-button
+              type="primary"
+              @click="exportZip"
+              :loading="isLoadingZip"
+            >
+              导出{{ exportModalTitle }}
+            </el-button>
+          </div>
+        </el-dialog>
+      </div>
     </div>
   </div>
 </template>
@@ -373,37 +379,45 @@ let indexData = ref({
   totalVoyageNum: "",
   unfinshDiscTons: "",
 });
+let isLoading = ref(false);
 async function getIndexData(type) {
+  isLoading.value = true;
   postData.value.status = status.value;
-  let res = await api.getIndexData({
-    ...postData.value,
-  });
-  if (res.data.status == 0) {
-    indexData.value = res.data.result;
-    if (type == "init") {
-      initMap();
-      drawPie("init");
-    } else {
-      map.value.clearMap();
-      drawMarkers();
-      drawPie();
-    }
-  } else {
-    indexData.value = {
-      finshDiscTons: 0,
-      mapPoints: [],
-      totalLoadTons: 0,
-      totalVoyageNum: 0,
-      unfinshDiscTons: 0,
-    };
-    if (type == "init") {
-      initMap();
-      drawPie("init");
+  try {
+    let res = await api.getIndexData({
+      ...postData.value,
+    });
+    isLoading.value = false;
+    if (res.data.status == 0) {
+      indexData.value = res.data.result;
+      if (type == "init") {
+        initMap();
+        drawPie("init");
+      } else {
+        map.value.clearMap();
+        drawMarkers();
+        drawPie();
+      }
     } else {
-      map.value.clearMap();
-      drawMarkers();
-      drawPie();
+      indexData.value = {
+        finshDiscTons: 0,
+        mapPoints: [],
+        totalLoadTons: 0,
+        totalVoyageNum: 0,
+        unfinshDiscTons: 0,
+      };
+      if (type == "init") {
+        initMap();
+        drawPie("init");
+      } else {
+        map.value.clearMap();
+        drawMarkers();
+        drawPie();
+      }
     }
+  } catch (error) {
+    console.log(error);
+    isLoading.value = false;
   }
 }
 let chartDom = ref({});