|
|
@@ -10,7 +10,20 @@
|
|
|
</div>
|
|
|
|
|
|
<div class="container-title df aic jcsb">
|
|
|
- <div>航次信息</div>
|
|
|
+ <div class="df aic">
|
|
|
+ <div class="mr30">航次信息</div>
|
|
|
+ <el-tooltip
|
|
|
+ v-if="blockchainInfo"
|
|
|
+ class="box-item"
|
|
|
+ effect="light"
|
|
|
+ :content="blockchainInfo.hash"
|
|
|
+ placement="top"
|
|
|
+ >
|
|
|
+ <div class="pointer" style="font-size: 14px; font-weight: normal">
|
|
|
+ 汇很多科技区块链认证
|
|
|
+ </div>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
<el-button
|
|
|
v-auth="'DOWNLOADSHIPTRACK'"
|
|
|
style="width: 220px; margin-right: 20px"
|
|
|
@@ -121,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>
|
|
|
@@ -153,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>
|
|
|
@@ -178,7 +193,7 @@
|
|
|
class="info-line-text"
|
|
|
v-model="voyage.arrivalLoadPortTime"
|
|
|
type="datetime"
|
|
|
- format="YYYY/MM/DD HH:mm:ss"
|
|
|
+ format="YYYY/MM/DD HH:mm"
|
|
|
value-format="YYYY/MM/DD HH:mm:ss"
|
|
|
placeholder="到达装货港时间"
|
|
|
:disabled="disabledStatus"
|
|
|
@@ -211,7 +226,7 @@
|
|
|
class="info-line-text"
|
|
|
v-model="voyage.loadStartTime"
|
|
|
type="datetime"
|
|
|
- format="YYYY/MM/DD HH:mm:ss"
|
|
|
+ format="YYYY/MM/DD HH:mm"
|
|
|
value-format="YYYY/MM/DD HH:mm:ss"
|
|
|
placeholder="装货开始时间"
|
|
|
:disabled="disabledStatus"
|
|
|
@@ -223,112 +238,134 @@
|
|
|
class="info-line-text"
|
|
|
v-model="voyage.loadEndTime"
|
|
|
type="datetime"
|
|
|
- format="YYYY/MM/DD HH:mm:ss"
|
|
|
+ format="YYYY/MM/DD HH:mm"
|
|
|
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.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"
|
|
|
+ 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"
|
|
|
+ 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.arrivalPortTime"
|
|
|
type="datetime"
|
|
|
- format="YYYY/MM/DD HH:mm:ss"
|
|
|
+ format="YYYY/MM/DD HH:mm"
|
|
|
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.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"
|
|
|
+ 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"
|
|
|
+ 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>
|
|
|
@@ -342,7 +379,169 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <hr class="hr m30-0" />
|
|
|
+ </div>
|
|
|
+ </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>天气信息</div>
|
|
|
+ </div>
|
|
|
+ <el-table style="width: 1200px" :data="weatherTableData" stripe>
|
|
|
+ <el-table-column
|
|
|
+ type="index"
|
|
|
+ label="序号"
|
|
|
+ min-width="120"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="weather"
|
|
|
+ label="天气"
|
|
|
+ min-width="120"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="temperature"
|
|
|
+ label="温度"
|
|
|
+ min-width="100"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="winddirection"
|
|
|
+ label="风向"
|
|
|
+ min-width="100"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="windpower"
|
|
|
+ label="风力"
|
|
|
+ min-width="100"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="reporttime"
|
|
|
+ label="记录时间"
|
|
|
+ min-width="100"
|
|
|
+ align="center"
|
|
|
+ >
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ subTimeStr(scope.row.reporttime, 16) }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <div style="width: 1200px; text-align: right; margin-top: 43px">
|
|
|
+ <el-pagination
|
|
|
+ background
|
|
|
+ layout="prev, pager, next"
|
|
|
+ :total="weatherTotal"
|
|
|
+ @current-change="weatherPageChange"
|
|
|
+ ></el-pagination>
|
|
|
+ </div>
|
|
|
+ <div class="hr m30-0"></div>
|
|
|
+ </div>
|
|
|
+ <div v-auth="'LABDETAIL'">
|
|
|
+ <div class="container-second-title df aic jcsb">
|
|
|
+ <div>提单信息</div>
|
|
|
+ </div>
|
|
|
+ <el-table :data="labTableData" stripe style="width: 1200px">
|
|
|
+ <el-table-column
|
|
|
+ type="index"
|
|
|
+ label="序号"
|
|
|
+ min-width="120"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="billingDate"
|
|
|
+ label="开单日期"
|
|
|
+ min-width="120"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="billingNum"
|
|
|
+ label="开单数量"
|
|
|
+ min-width="100"
|
|
|
+ align="center"
|
|
|
+ ></el-table-column>
|
|
|
+
|
|
|
+ <el-table-column label="单据" min-width="150" align="center">
|
|
|
+ <template v-slot="scope">
|
|
|
+ <el-button
|
|
|
+ @click="showLab(scope.row, scope.$index, '查看提单')"
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ >
|
|
|
+ 查看
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <div style="text-align: right; margin-top: 43px; width: 1200px">
|
|
|
+ <el-pagination
|
|
|
+ background
|
|
|
+ layout="prev, pager, next"
|
|
|
+ :total="labTotal"
|
|
|
+ @current-change="labPageChange"
|
|
|
+ ></el-pagination>
|
|
|
+ </div>
|
|
|
+ <el-dialog
|
|
|
+ v-model="isAddLabVisable"
|
|
|
+ :title="labModalType"
|
|
|
+ width="780px"
|
|
|
+ center
|
|
|
+ @close="cancelUploadLab"
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ :model="labForm"
|
|
|
+ inline
|
|
|
+ style="margin-bottom: 20px"
|
|
|
+ label-width="100px"
|
|
|
+ >
|
|
|
+ <el-form-item label="开单日期">
|
|
|
+ <el-date-picker
|
|
|
+ class="info-line-text"
|
|
|
+ v-model="labForm.billingDate"
|
|
|
+ type="date"
|
|
|
+ format="YYYY/MM/DD"
|
|
|
+ value-format="YYYY/MM/DD"
|
|
|
+ placeholder="开单日期"
|
|
|
+ disabled
|
|
|
+ ></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="开单数量">
|
|
|
+ <el-input
|
|
|
+ style="width: 240px"
|
|
|
+ v-model="labForm.billingNum"
|
|
|
+ placeholder="开单数量"
|
|
|
+ disabled
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="提单">
|
|
|
+ <Uploader
|
|
|
+ disabled
|
|
|
+ :actionUrl="store.state.wayBillUrl"
|
|
|
+ :uploaderId="'labLoad'"
|
|
|
+ :params="labParams"
|
|
|
+ @onSendFileList="getLabBillList"
|
|
|
+ :fileList="labBillList"
|
|
|
+ uploadText="上传提单"
|
|
|
+ :limit="1"
|
|
|
+ ></Uploader>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </el-dialog>
|
|
|
+ <div class="hr m30-0"></div>
|
|
|
</div>
|
|
|
<div v-auth="'SHIPDISCHARGE'">
|
|
|
<div class="container-second-title df aic jcsb">
|
|
|
@@ -356,7 +555,7 @@
|
|
|
>下载卸货信息</el-button
|
|
|
>
|
|
|
</div>
|
|
|
- <el-table :data="dischargeList" stripe style="width: 800px">
|
|
|
+ <el-table :data="dischargeList" stripe style="width: 1200px">
|
|
|
<el-table-column
|
|
|
type="index"
|
|
|
label="序号"
|
|
|
@@ -368,7 +567,11 @@
|
|
|
label="卸货时间"
|
|
|
min-width="120"
|
|
|
align="center"
|
|
|
- ></el-table-column>
|
|
|
+ >
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ subTimeStr(scope.row.dischargeTime, 16) }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column
|
|
|
prop="dischargeTons"
|
|
|
label="卸货吨位"
|
|
|
@@ -394,7 +597,7 @@
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
- <div style="width: 100%; text-align: right; margin-top: 43px">
|
|
|
+ <div style="width: 1200px; text-align: right; margin-top: 43px">
|
|
|
<el-pagination
|
|
|
background
|
|
|
layout="prev, pager, next"
|
|
|
@@ -432,7 +635,11 @@
|
|
|
label="称重时间"
|
|
|
min-width="120"
|
|
|
align="center"
|
|
|
- ></el-table-column>
|
|
|
+ >
|
|
|
+ <template v-slot="scope">
|
|
|
+ {{ subTimeStr(scope.row.weighTime, 16) }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column
|
|
|
prop="carNum"
|
|
|
label="车号"
|
|
|
@@ -532,7 +739,7 @@
|
|
|
class="info-line-text"
|
|
|
v-model="truckRecordForm.weighTime"
|
|
|
type="datetime"
|
|
|
- format="YYYY/MM/DD HH:mm:ss"
|
|
|
+ format="YYYY/MM/DD HH:mm"
|
|
|
value-format="YYYY/MM/DD HH:mm:ss"
|
|
|
placeholder="称重时间"
|
|
|
></el-date-picker>
|
|
|
@@ -623,7 +830,18 @@
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
<div v-auth="'BILLINFO'">
|
|
|
- <div class="container-title">单据信息</div>
|
|
|
+ <div class="container-title df aic jcsb">
|
|
|
+ 单据信息
|
|
|
+ <el-button
|
|
|
+ style="margin-right: 30px"
|
|
|
+ size="medium"
|
|
|
+ type="primary"
|
|
|
+ v-auth="'BILLDOWNLOAD'"
|
|
|
+ @click="downloadBillZip"
|
|
|
+ :loading="billZipLoading"
|
|
|
+ >下载单据</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
<div class="line-container-p24" style="padding-left: 60px">
|
|
|
<div class="df aic">
|
|
|
<div class="info-line-title">保险单:</div>
|
|
|
@@ -666,8 +884,11 @@
|
|
|
{{ item.shipName }} 拍摄于
|
|
|
<br />
|
|
|
{{ item.createTime }}
|
|
|
+ <br />
|
|
|
+ 天气 : {{ item.weather.weather }} - 气温 :
|
|
|
+ {{ item.weather.temperature }}℃
|
|
|
</div>
|
|
|
- <div class="medias-box" style="position: relative">
|
|
|
+ <div class="medias-box mb10" style="position: relative">
|
|
|
<el-image
|
|
|
v-if="item.mediaType == 1"
|
|
|
style="width: 100%; height: 100%"
|
|
|
@@ -744,7 +965,7 @@
|
|
|
class="info-line-text"
|
|
|
v-model="updateForm.dischargeTime"
|
|
|
type="datetime"
|
|
|
- format="YYYY/MM/DD HH:mm:ss"
|
|
|
+ format="YYYY/MM/DD HH:mm"
|
|
|
value-format="YYYY/MM/DD HH:mm:ss"
|
|
|
placeholder="卸货时间"
|
|
|
disabled
|
|
|
@@ -782,6 +1003,7 @@ import store from "../../store";
|
|
|
import { ElNotification, ElMessageBox, ElMessage } from "element-plus";
|
|
|
import downloadBlobFile from "../../utils/downloadBlobFile";
|
|
|
import url from "../../apis/config";
|
|
|
+import { subTimeStr } from "utils/utils";
|
|
|
|
|
|
const route = useRoute();
|
|
|
let map = ref();
|
|
|
@@ -802,7 +1024,7 @@ function showCerts() {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-async function getVoyageDetail(type) {
|
|
|
+async function getVoyageDetail(isInit) {
|
|
|
policyList.value = [];
|
|
|
voyageBill.value = [];
|
|
|
previewSrcList.value = [];
|
|
|
@@ -811,15 +1033,16 @@ 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;
|
|
|
+ voyage.value.startTime = voyage.value.startTime.substring(0, 16);
|
|
|
+ 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;
|
|
|
|
|
|
@@ -838,7 +1061,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({
|
|
|
@@ -891,6 +1120,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,
|
|
|
});
|
|
|
@@ -1198,7 +1428,8 @@ async function downloadExcel() {
|
|
|
`${url.baseurl}/voyage/exportExcel`,
|
|
|
{ voyageId: route.query.id },
|
|
|
"船舶跟踪表",
|
|
|
- "post"
|
|
|
+ "post",
|
|
|
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
|
|
|
);
|
|
|
if (res) {
|
|
|
isLoadingExcel.value = false;
|
|
|
@@ -1211,7 +1442,8 @@ async function exportDischargeExcel() {
|
|
|
`${url.baseurl}/voyage/exportDischargeExcel`,
|
|
|
{ voyageId: route.query.id },
|
|
|
"卸货记录表",
|
|
|
- "post"
|
|
|
+ "post",
|
|
|
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"
|
|
|
);
|
|
|
if (res) {
|
|
|
isDischargeLoadingExcel.value = false;
|
|
|
@@ -1227,6 +1459,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,
|
|
|
});
|
|
|
@@ -1254,11 +1487,101 @@ function showTruckRecord(item, index, text) {
|
|
|
|
|
|
let truckLoadParams = ref({});
|
|
|
function getTruckLoadBillList() {}
|
|
|
+let blockchainInfo = ref("");
|
|
|
|
|
|
-onMounted(() => {
|
|
|
- getVoyageDetail(1);
|
|
|
- getDischargeList(1);
|
|
|
+let billZipLoading = ref(false);
|
|
|
+async function downloadBillZip() {
|
|
|
+ billZipLoading.value = true;
|
|
|
+ let res = await downloadBlobFile(
|
|
|
+ `${url.baseurl}/voyage/exportBillZip`,
|
|
|
+ { voyageId: route.query.id },
|
|
|
+ "单据文件",
|
|
|
+ "post",
|
|
|
+ "application/zip"
|
|
|
+ );
|
|
|
+
|
|
|
+ billZipLoading.value = false;
|
|
|
+}
|
|
|
+
|
|
|
+let weatherTableData = ref([]);
|
|
|
+let weatherCurrentPage = ref(1);
|
|
|
+let weatherTotal = ref(0);
|
|
|
+async function getPortWeatherList() {
|
|
|
+ let res = await api.getPortWeatherList({
|
|
|
+ voyageId: route.query.id,
|
|
|
+ portId: currentDiscPortId.value,
|
|
|
+ size: 10,
|
|
|
+ currentPage: weatherCurrentPage.value,
|
|
|
+ });
|
|
|
+ weatherTableData.value = res.data.result;
|
|
|
+ weatherTotal.value = res.data.total;
|
|
|
+}
|
|
|
+
|
|
|
+function weatherPageChange(e) {
|
|
|
+ weatherCurrentPage.value = e;
|
|
|
+ getPortWeatherList();
|
|
|
+}
|
|
|
+
|
|
|
+let labTableData = ref([]);
|
|
|
+let labTotal = ref(0);
|
|
|
+let labCurrentPage = ref(1);
|
|
|
+
|
|
|
+async function getLabList() {
|
|
|
+ let res = await api.getLabList({
|
|
|
+ voyageId: route.query.id,
|
|
|
+ portId: currentDiscPortId.value,
|
|
|
+ currentPage: labCurrentPage.value,
|
|
|
+ size: 10,
|
|
|
+ });
|
|
|
+ labTableData.value = res.data.result;
|
|
|
+ labTotal.value = res.data.total;
|
|
|
+}
|
|
|
+function labPageChange(e) {
|
|
|
+ labCurrentPage.value = e;
|
|
|
+ getLabList();
|
|
|
+}
|
|
|
+let isAddLabVisable = ref(false);
|
|
|
+let labBillList = ref([]);
|
|
|
+let labForm = ref({});
|
|
|
+function showLab(item) {
|
|
|
+ isAddLabVisable.value = true;
|
|
|
+ if (item.file) {
|
|
|
+ labBillList.value[0] = {
|
|
|
+ ...item.file,
|
|
|
+ url: item.file.viewUrl,
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ labForm.value = { ...item };
|
|
|
+}
|
|
|
+
|
|
|
+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>
|
|
|
@@ -1440,4 +1763,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>
|