Kaynağa Gözat

更新 多港口

wzh 3 yıl önce
ebeveyn
işleme
2fbeae6024
2 değiştirilmiş dosya ile 185 ekleme ve 105 silme
  1. 184 104
      src/views/voyage/voyageDetail.vue
  2. 1 1
      src/views/voyage/voyageList.vue

+ 184 - 104
src/views/voyage/voyageDetail.vue

@@ -134,11 +134,13 @@
             disabled
           ></el-input>
         </div>
-        <div class="info-line">
-          <div class="info-line-title">卸货港</div>
+      </div>
+      <div class="line">
+        <div class="info-line" v-for="(item, index) in voyage.voyageDetails">
+          <div class="info-line-title">卸货港{{ " # " + (index + 1) }}</div>
           <el-input
             class="info-line-text"
-            v-model="voyage.dischargeProt"
+            v-model="item.portName"
             disabled
           ></el-input>
         </div>
@@ -166,7 +168,7 @@
           <el-input
             style="width: 80px !important"
             class="info-line-text"
-            v-model="voyage.Pieces"
+            v-model="voyage.pieces"
             disabled
           ></el-input>
           <span class="unit">件</span>
@@ -243,46 +245,57 @@
             ></el-date-picker>
           </div>
         </div>
-        <div class="line">
-          <div class="info-line">
-            <div class="info-line-title">开航时间</div>
-            <el-date-picker
-              class="info-line-text"
-              v-model="voyage.setSailTime"
-              type="datetime"
-              format="YYYY/MM/DD HH:mm:ss"
-              value-format="YYYY/MM/DD HH:mm:ss"
-              placeholder="开航时间"
-              :disabled="disabledStatus"
-            ></el-date-picker>
-          </div>
-          <div class="info-line">
-            <div class="info-line-title">预计到港时间</div>
-            <el-date-picker
-              class="info-line-text"
-              v-model="voyage.expectedArrivalTime"
-              type="datetime"
-              format="YYYY/MM/DD"
-              value-format="YYYY/MM/DD HH:mm:ss"
-              placeholder="预计到港时间"
-              :disabled="disabledStatus"
-            ></el-date-picker>
-          </div>
-        </div>
-        <div class="line">
-          <div class="info-line">
-            <div class="info-line-title">实际到港时间</div>
-            <el-date-picker
-              class="info-line-text"
-              v-model="voyage.actualArrivalTime"
-              type="datetime"
-              format="YYYY/MM/DD HH:mm:ss"
-              value-format="YYYY/MM/DD HH:mm:ss"
-              placeholder="实际到港时间"
-              :disabled="disabledStatus"
-            ></el-date-picker>
-          </div>
-          <!-- <div class="info-line">
+        <el-tabs
+          v-model="currentPortId"
+          type="border-card"
+          class="demo-tabs mb20"
+        >
+          <el-tab-pane
+            v-for="(item, index) in voyage.voyageDetails"
+            :label="item.portName + ' # ' + (index + 1)"
+            :name="item.portId + ''"
+          >
+            <div class="line">
+              <div class="info-line">
+                <div class="info-line-title">开航时间</div>
+                <el-date-picker
+                  class="info-line-text"
+                  v-model="item.setSailTime"
+                  type="datetime"
+                  @change="calExpectedArrivalTime"
+                  format="YYYY/MM/DD HH:mm:ss"
+                  value-format="YYYY/MM/DD HH:mm:ss"
+                  placeholder="开航时间"
+                  :disabled="disabledStatus"
+                ></el-date-picker>
+              </div>
+              <div class="info-line">
+                <div class="info-line-title">预计到港时间</div>
+                <el-date-picker
+                  class="info-line-text"
+                  v-model="item.expectedArrivalTime"
+                  type="datetime"
+                  format="YYYY/MM/DD"
+                  value-format="YYYY/MM/DD HH:mm:ss"
+                  placeholder="预计到港时间"
+                  :disabled="disabledStatus"
+                ></el-date-picker>
+              </div>
+            </div>
+            <div class="line">
+              <div class="info-line">
+                <div class="info-line-title">实际到港时间</div>
+                <el-date-picker
+                  class="info-line-text"
+                  v-model="item.actualArrivalTime"
+                  type="datetime"
+                  format="YYYY/MM/DD HH:mm:ss"
+                  value-format="YYYY/MM/DD HH:mm:ss"
+                  placeholder="实际到港时间"
+                  :disabled="disabledStatus"
+                ></el-date-picker>
+              </div>
+              <!-- <div class="info-line">
         <div class="info-line-title">抵达目的地港时间</div>
         <el-date-picker
           class="info-line-text"
@@ -294,54 +307,65 @@
           :disabled="disabledStatus"
         ></el-date-picker>
       </div> -->
-        </div>
-        <div class="line">
-          <div class="info-line">
-            <div class="info-line-title">卸货开始时间</div>
-            <el-date-picker
-              class="info-line-text"
-              v-model="voyage.dischargeStartTime"
-              type="datetime"
-              format="YYYY/MM/DD HH:mm:ss"
-              value-format="YYYY/MM/DD HH:mm:ss"
-              placeholder="卸货开始时间"
-              :disabled="disabledStatus"
-            ></el-date-picker>
-          </div>
-          <div class="info-line">
-            <div class="info-line-title">卸货结束时间</div>
-            <el-date-picker
-              class="info-line-text"
-              v-model="voyage.dischargeEndTime"
-              type="datetime"
-              format="YYYY/MM/DD HH:mm:ss"
-              value-format="YYYY/MM/DD HH:mm:ss"
-              placeholder="卸货结束时间"
-              :disabled="disabledStatus"
-            ></el-date-picker>
-          </div>
-        </div>
-        <div class="line">
-          <div class="info-line">
-            <div class="info-line-title">实际卸货量</div>
-            <el-input
-              style="width: 100px !important"
-              class="info-line-text"
-              placeholder="实际卸货吨位"
-              v-model="voyage.actualDischargeTons"
-              :disabled="disabledStatus"
-            ></el-input>
-            <span class="unit">吨</span>
-            <el-input
-              style="width: 80px !important"
-              class="info-line-text"
-              placeholder="实际卸货件数"
-              v-model="voyage.actualDischargePieces"
-              :disabled="disabledStatus"
-            ></el-input>
-            <span class="unit">件</span>
-          </div>
-        </div>
+            </div>
+            <div class="line">
+              <div class="info-line">
+                <div class="info-line-title">卸货开始时间</div>
+                <el-date-picker
+                  class="info-line-text"
+                  v-model="item.dischargeStartTime"
+                  type="datetime"
+                  format="YYYY/MM/DD HH:mm:ss"
+                  value-format="YYYY/MM/DD HH:mm:ss"
+                  placeholder="卸货开始时间"
+                  :disabled="disabledStatus"
+                ></el-date-picker>
+              </div>
+              <div class="info-line">
+                <div class="info-line-title">卸货结束时间</div>
+                <el-date-picker
+                  class="info-line-text"
+                  v-model="item.dischargeEndTime"
+                  type="datetime"
+                  format="YYYY/MM/DD HH:mm:ss"
+                  value-format="YYYY/MM/DD HH:mm:ss"
+                  placeholder="卸货结束时间"
+                  :disabled="disabledStatus"
+                ></el-date-picker>
+              </div>
+            </div>
+            <div class="line">
+              <div class="info-line">
+                <div class="info-line-title">实际卸货量</div>
+                <el-input
+                  style="width: 100px !important"
+                  class="info-line-text"
+                  placeholder="实际卸货吨位"
+                  v-model="item.actualDischargeTons"
+                  :disabled="disabledStatus"
+                ></el-input>
+                <span class="unit">吨</span>
+                <el-input
+                  style="width: 80px !important"
+                  class="info-line-text"
+                  placeholder="实际卸货件数"
+                  v-model="item.actualDischargePieces"
+                  :disabled="disabledStatus"
+                ></el-input>
+                <span class="unit">件</span>
+              </div>
+              <!-- <div class="info-line">
+        <div class="info-line-title">是否购买保险</div>
+        <el-checkbox
+          v-model="voyage.hasInsurance"
+          :checked="voyage.hasInsurance == 1"
+          :disabled="disabledStatus"
+          label="购买保险"
+        ></el-checkbox>
+      </div> -->
+            </div>
+          </el-tab-pane>
+        </el-tabs>
         <div class="line">
           <div class="info-line">
             <div class="info-line-title">备注</div>
@@ -359,9 +383,21 @@
   </div>
   <div class="container-title">卸货信息</div>
   <div class="line-container-p24">
+    <el-tabs
+      v-model="currentDiscPortId"
+      type="card"
+      class="demo-tabs"
+      @tab-click="changeDiscPortTab"
+    >
+      <el-tab-pane
+        v-for="(item, index) in voyage.voyageDetails"
+        :label="item.portName + ' # ' + (index + 1)"
+        :name="item.portId + ''"
+      ></el-tab-pane>
+    </el-tabs>
     <div>
       <div class="container-second-title df aic jcsb">
-        <div>卸货港 - {{ voyage.dischargeProt }} - 天气信息</div>
+        <div>天气信息</div>
       </div>
       <el-table style="width: 1200px" :data="weatherTableData" stripe>
         <el-table-column
@@ -975,7 +1011,7 @@ function showCerts() {
   });
 }
 
-async function getVoyageDetail(type) {
+async function getVoyageDetail(isInit) {
   policyList.value = [];
   voyageBill.value = [];
   previewSrcList.value = [];
@@ -984,15 +1020,15 @@ async function getVoyageDetail(type) {
     voyageId: route.query.id,
   });
   if (res.data.status == 0) {
-    if (type) {
-      ElNotification({
-        type: "success",
-        title: res.data.msg,
-      });
-    }
+    ElNotification({
+      type: "success",
+      title: res.data.msg,
+    });
     blockchainInfo.value = res.data.result.blockChain;
     coordinates.value = res.data.result.coordinates;
     voyage.value = res.data.result.voyage;
+    currentPortId.value = voyage.value.voyageDetails[0].portId + "";
+    currentDiscPortId.value = voyage.value.voyageDetails[0].portId + "";
     medias.value = res.data.result.medias;
     shipAudits.value = res.data.result.shipAudits;
 
@@ -1011,7 +1047,13 @@ async function getVoyageDetail(type) {
     for (let i of medias.value) {
       previewSrcList.value.push(i.downloadUrl);
     }
-    initMap();
+    if (isInit) {
+      getDischargeList();
+      getTruckLoadRecord();
+      getLabList();
+      getPortWeatherList();
+      initMap();
+    }
   } else {
     console.log(res);
     ElNotification({
@@ -1064,6 +1106,7 @@ let formInline = ref({});
 async function getDischargeList(type) {
   let res = await api.getDischargeList({
     voyageId: route.query.id,
+    portId: currentDiscPortId.value,
     currentPage: dischargeCurrentPage.value,
     size: 10,
   });
@@ -1402,6 +1445,7 @@ let truckTotal = ref(0);
 async function getTruckLoadRecord() {
   let res = await api.getTruckLoadRecord({
     voyageId: route.query.id,
+    portId: currentDiscPortId.value,
     currentPage: truckCurrentPage.value,
     size: 10,
   });
@@ -1451,6 +1495,7 @@ let weatherTotal = ref(0);
 async function getPortWeatherList() {
   let res = await api.getPortWeatherList({
     voyageId: route.query.id,
+    portId: currentDiscPortId.value,
     size: 10,
     currentPage: weatherCurrentPage.value,
   });
@@ -1470,6 +1515,7 @@ let labCurrentPage = ref(1);
 async function getLabList() {
   let res = await api.getLabList({
     voyageId: route.query.id,
+    portId: currentDiscPortId.value,
     currentPage: labCurrentPage.value,
     size: 10,
   });
@@ -1495,12 +1541,33 @@ function showLab(item) {
   labForm.value = { ...item };
 }
 
-onMounted(() => {
-  getVoyageDetail(1);
-  getDischargeList(1);
+let currentPortId = ref("");
+let currentDiscPortId = ref("");
+let currentDiscPortIndex = ref(0);
+function changeDiscPortTab(e) {
+  currentDiscPortIndex.value = e.index;
+  currentDiscPortId.value =
+    voyage.value.voyageDetails[currentDiscPortIndex.value].portId + "";
+  weatherTableData.value = [];
+  weatherTotal.value = 0;
+  labTableData.value = [];
+  labTotal.value = 0;
+  dischargeList.value = [];
+  total.value = 0;
+  truckTableData.value = [];
+  truckTotal.value = 0;
+  labCurrentPage.value = 1;
+  dischargeCurrentPage.value = 1;
+  weatherCurrentPage.value = 1;
+  truckCurrentPage.value = 1;
+  getDischargeList();
   getTruckLoadRecord();
   getLabList();
   getPortWeatherList();
+}
+
+onMounted(() => {
+  getVoyageDetail(true);
 });
 </script>
 <style scoped>
@@ -1682,4 +1749,17 @@ onMounted(() => {
   line-height: 100%;
   margin: 0 10px;
 }
+
+.line {
+  flex-wrap: wrap;
+  margin: 0 20px;
+}
+
+.info-line {
+  margin-bottom: 20px;
+}
+
+.ml50 {
+  margin-left: 140px;
+}
 </style>

+ 1 - 1
src/views/voyage/voyageList.vue

@@ -461,7 +461,7 @@
         </template>
       </el-table-column>
       <el-table-column
-        prop="daysInPort"
+        prop="daysInPortStr"
         label="在港天数"
         v-if="daysInPortVisable"
         sortable