<template>
  <div class="line-container-p24">
    <i class="el-icon-arrow-left"></i>
    <div
      class="dib go-back ml8 pointer"
      @click="router.replace('/voyage/voyageList')"
    >
      返回航次列表
    </div>
  </div>

  <div class="container-title df aic jcsb">
    <div>航次信息</div>
    <el-button
      style="width: 220px; margin-right: 20px"
      type="primary"
      @click="downloadExcel"
      :loading="isLoadingExcel"
    >
      下载船舶跟踪表
    </el-button>
  </div>
  <div class="line-container-p24">
    <div class="line">
      <div class="info-line">
        <div class="info-line-title">航次名称</div>
        <el-input
          class="info-line-text"
          v-model="voyage.voyageName"
          disabled
        ></el-input>
      </div>
      <div class="info-gap" v-if="shipAudits.length"></div>
      <div class="info-line">
        <div class="info-line-title">货主</div>
        <el-input
          class="info-line-text"
          v-model="voyage.cargoOwnerName"
          disabled
        ></el-input>
      </div>
    </div>
    <!-- <div class="line">
      <div class="info-line">
        <div class="info-line-title">船东</div>
        <el-input
          class="info-line-text"
          v-model="voyage.shipOwnerName"
          disabled
        ></el-input>
      </div>
      <div class="info-line">
        <div class="info-line-title">船东手机号</div>
        <el-input
          class="info-line-text"
          v-model="voyage.shipOwnerPhone"
          disabled
        ></el-input>
      </div>
    </div> -->
    <div class="line">
      <div class="info-line">
        <div class="info-line-title">船舶名称</div>
        <el-input
          class="info-line-text"
          v-model="voyage.shipName"
          disabled
        ></el-input>
      </div>
      <div
        class="info-gap"
        v-if="shipAudits.length"
        @click="isCertsVisable = true"
      >
        汇很多认证
      </div>
      <el-dialog
        @open="showCerts"
        v-model="isCertsVisable"
        destroy-on-close
        width="30%"
      >
        <Certs ref="certs"></Certs>
      </el-dialog>
      <div class="info-line">
        <div class="info-line-title">MMSI</div>
        <el-input
          class="info-line-text"
          v-model="voyage.shipMmsi"
          disabled
        ></el-input>
      </div>
    </div>
    <div id="map-container" class="map-container"></div>
    <div class="line" style="margin-top: 30px">
      <div class="info-line">
        <div class="info-line-title">开始时间</div>
        <el-input
          class="info-line-text"
          v-model="voyage.startTime"
          disabled
        ></el-input>
      </div>
      <div class="info-line">
        <div class="info-line-title">结束时间</div>
        <el-input
          class="info-line-text"
          v-model="voyage.endTime"
          disabled
        ></el-input>
      </div>
    </div>
    <div class="line">
      <div class="info-line">
        <div class="info-line-title">装货港</div>
        <el-input
          class="info-line-text"
          v-model="voyage.loadPort"
          disabled
        ></el-input>
      </div>
      <div class="info-line">
        <div class="info-line-title">卸货港</div>
        <el-input
          class="info-line-text"
          v-model="voyage.dischargeProt"
          disabled
        ></el-input>
      </div>
    </div>
    <div class="line">
      <div class="info-line">
        <div class="info-line-title">货种</div>
        <el-input
          class="info-line-text"
          v-model="voyage.cargo"
          disabled
        ></el-input>
      </div>
      <div class="info-line">
        <div style="width: 120px !important" class="info-line-title">货量</div>
        <el-input
          style="width: 100px !important"
          class="info-line-text"
          v-model="voyage.tons"
          disabled
        ></el-input>
        <span class="unit">吨</span>
        <el-input
          style="width: 80px !important"
          class="info-line-text"
          v-model="voyage.Pieces"
          disabled
        ></el-input>
        <span class="unit">件</span>
      </div>
    </div>
    <div class="container-second-title df aic jcsb mt40">
      <div>船舶运输记录详情</div>
      <div style="margin-right: 20px">
        信息更新时间 :
        <span style="font-size: 18px">
          {{ subStr(voyage.infoUpdateTime) }}</span
        >
      </div>
    </div>
    <div class="line-container-p24">
      <div class="line">
        <div class="info-line">
          <div class="info-line-title">到达装货港时间</div>
          <el-date-picker
            class="info-line-text"
            v-model="voyage.arrivalLoadPortTime"
            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-input
            style="width: 100px !important"
            class="info-line-text"
            v-model="voyage.actualLoadTons"
            :disabled="disabledStatus"
            placeholder="实装吨位"
          ></el-input>
          <span class="unit">吨</span>
          <el-input
            style="width: 80px !important"
            class="info-line-text"
            v-model="voyage.actualLoadPieces"
            :disabled="disabledStatus"
            placeholder="实装件数"
          ></el-input>
          <span class="unit">件</span>
        </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.loadStartTime"
            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.loadEndTime"
            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-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">
        <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"
          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 class="line">
        <div class="info-line">
          <div class="info-line-title">备注</div>
          <el-input
            class="info-line-textarea"
            v-model="voyage.remark"
            autosize
            type="textarea"
            :disabled="disabledStatus"
          ></el-input>
        </div>
      </div>
    </div>
    <hr class="hr m30-0" />
    <div class="container-second-title df aic jcsb">
      <div>卸货记录</div>
      <el-button
        v-auth="'DOWNLOADDISCHARGE'"
        @click="exportDischargeExcel"
        style="width: 220px; margin-right: 20px"
        type="primary"
        :loading="isDischargeLoadingExcel"
        >下载卸货信息</el-button
      >
    </div>
    <el-table :data="dischargeList" stripe style="width: 800px">
      <el-table-column
        type="index"
        label="序号"
        min-width="80"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="dischargeTime"
        label="卸货时间"
        min-width="120"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="dischargeTons"
        label="卸货吨位"
        min-width="100"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="dischargePieces"
        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="showUpdateDischarge(scope.row, scope.$index)"
            type="primary"
            size="small"
            v-if="scope.row.files"
          >
            查看
          </el-button>
        </template>
      </el-table-column>
    </el-table>

    <el-dialog v-model="dialogVisible" title="图片预览" width="30%">
      <el-image
        :src="dialogImageUrl"
        style="height: 100%; width: 100%"
      ></el-image>
    </el-dialog>
    <div style="width: 100%; text-align: right; margin-top: 43px">
      <el-pagination
        background
        layout="prev, pager, next"
        :total="total"
        @current-change="pageChange"
      ></el-pagination>
    </div>
    <div class="hr m30-0"></div>
    <div class="container-second-title df aic jcsb mt40">
      <div>汽车装货记录详情</div>
    </div>
    <el-table :data="truckTableData" stripe>
      <el-table-column
        type="index"
        label="序号"
        min-width="120"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="portName"
        label="港口名称"
        min-width="100"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="weighTime"
        label="称重时间"
        min-width="120"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="carNum"
        label="车号"
        min-width="100"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="cargoName"
        label="货物名称"
        min-width="120"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="shippingUnit"
        label="发货单位"
        min-width="100"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="receivingUnit"
        label="收货单位"
        min-width="120"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="grossWeight"
        label="毛重"
        min-width="100"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="tare"
        label="皮重"
        min-width="120"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="netWeight"
        label="净重"
        min-width="100"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="shipName"
        label="货船名称"
        min-width="120"
        align="center"
      ></el-table-column>
      <el-table-column
        prop="weigher"
        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="showTruckRecord(scope.row, scope.$index, '查看单据')"
            type="primary"
            size="small"
          >
            查看
          </el-button>
        </template>
      </el-table-column>
    </el-table>
    <div style="text-align: right; margin-top: 43px">
      <el-pagination
        background
        layout="prev, pager, next"
        :total="truckTotal"
        @current-change="truckPageChange"
      ></el-pagination>
    </div>
    <el-dialog
      v-model="isAddTruckRecordVisable"
      title="查看记录"
      width="780px"
      center
    >
      <el-form
        :model="truckRecordForm"
        inline
        style="margin-bottom: 20px"
        label-width="100px"
      >
        <el-form-item label="港口名称">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.portName"
            placeholder="港口名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="称重时间">
          <el-date-picker
            class="info-line-text"
            v-model="truckRecordForm.weighTime"
            type="datetime"
            format="YYYY/MM/DD HH:mm:ss"
            value-format="YYYY/MM/DD HH:mm:ss"
            placeholder="称重时间"
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="车号">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.carNum"
            placeholder="车号"
          ></el-input>
        </el-form-item>
        <el-form-item label="货物名称">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.cargoName"
            placeholder="货物名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="发货单位">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.shippingUnit"
            placeholder="发货单位"
          ></el-input>
        </el-form-item>
        <el-form-item label="毛重">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.grossWeight"
            placeholder="毛重"
          ></el-input>
        </el-form-item>
        <el-form-item label="收货单位">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.receivingUnit"
            placeholder="收货单位"
          ></el-input>
        </el-form-item>
        <el-form-item label="皮重">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.tare"
            placeholder="皮重"
          ></el-input>
        </el-form-item>
        <el-form-item label="运输单位">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.transUnit"
            placeholder="运输单位"
          ></el-input>
        </el-form-item>
        <el-form-item label="净重">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.netWeight"
            placeholder="净重"
          ></el-input>
        </el-form-item>
        <el-form-item label="货船名称">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.shipName"
            placeholder="货船名称"
          ></el-input>
        </el-form-item>
        <el-form-item label="司磅员">
          <el-input
            style="width: 240px"
            v-model="truckRecordForm.weigher"
            placeholder="司磅员"
          ></el-input>
        </el-form-item>
        <el-form-item label="汽车装货单">
          <Uploader
            actionUrl="#"
            :uploaderId="'truckLoad'"
            :params="truckLoadParams"
            @onSendFileList="getTruckLoadBillList"
            :fileList="truckRecordBillList"
            uploadText="上传装货单"
            :limit="1"
            disabled
          ></Uploader>
        </el-form-item>
      </el-form>
    </el-dialog>
  </div>

  <div class="container-title">单据信息</div>
  <div class="line-container-p24" style="padding-left: 60px">
    <div class="df aic">
      <div class="info-line-title">保险单:</div>
      <el-image
        style="width: 200px; height: 200px; margin-right: 20px"
        :src="item.viewUrl"
        v-for="item in policyList"
        :key="item"
        @click="openMediaModal(item.viewUrl, 1, '保险单查看')"
      ></el-image>
    </div>
    <hr class="hr m30-0" />
    <div class="df aic">
      <div class="info-line-title">运单:</div>
      <el-image
        style="width: 200px; height: 200px; margin-right: 20px"
        :src="item.viewUrl"
        v-for="item in voyageBill"
        :key="item"
        @click="openMediaModal(item.viewUrl, 1, '运单查看')"
      ></el-image>
    </div>
  </div>
  <div class="container-title">航次图片</div>
  <div class="line-container-p24">
    <div v-if="medias.length" class="medias-content df ffw">
      <div class="pic-container">
        <div v-for="(item, index) in medias" :key="item" class="pic-main">
          <div
            :class="[
              'box',
              index % 2 == 0 ? '' : 'bottom-box',
              item.status == 1 ? 'now-box' : '',
            ]"
          >
            <div class="card-note">
              {{ item.shipName }} 拍摄于
              <br />
              {{ item.createTime }}
            </div>
            <div class="medias-box" style="position: relative">
              <el-image
                v-if="item.mediaType == 1"
                style="width: 100%; height: 100%"
                fit="contain"
                :src="item.downloadUrl"
                @click="openMediaModal(item.downloadUrl, 1, '图片审核')"
              ></el-image>
              <video
                style="width: 100%; height: 100%"
                v-else
                :src="item.downloadUrl"
              ></video>
              <img
                @click="openMediaModal(item.downloadUrl, 2, '视频审核')"
                v-if="item.mediaType == 2"
                src="../../assets/icon-player.png"
                style="
                  object-fit: contain;
                  width: 40px;
                  height: 40px;
                  position: absolute;
                  top: calc(50% - 20px);
                  left: calc(50% - 20px);
                  background: #fff;
                  border-radius: 50%;
                "
                alt=""
              />
            </div>
          </div>
          <div
            :class="[
              's-line',
              index % 2 == 0 ? '' : 'top210px',
              item.status == 1 ? 'now-s-line' : '',
            ]"
          ></div>
          <div :class="['point', item.status == 1 ? '' : 'now-point']"></div>
          <div
            :class="['l-line', item.status == 1 ? 'now-l-line' : '']"
            v-if="index + 1 != medias.length"
          ></div>
        </div>
      </div>
    </div>
    <el-dialog v-model="mediaModal" :title="modalTitle">
      <el-image
        v-if="modalType == 1"
        style="height: 60vh; display: flex"
        fit="contain"
        :src="currentUrl"
        :preview-src-list="modalPreview"
      ></el-image>
      <video
        v-else
        autoplay
        controls
        style="width: 100%; height: 100%"
        :src="currentUrl"
      ></video>
    </el-dialog>
    <el-dialog
      v-model="updateDischargeDialog"
      title="查看记录"
      width="700px"
      center
    >
      <el-form :model="updateForm" style="margin-bottom: 20px">
        <!-- <el-form-item label="记录ID">
            <span style="padding-left: 20px">{{ updateForm.id }}</span>
          </el-form-item> -->
        <el-form-item label="卸货时间">
          <el-date-picker
            class="info-line-text"
            v-model="updateForm.dischargeTime"
            type="datetime"
            format="YYYY/MM/DD HH:mm:ss"
            value-format="YYYY/MM/DD HH:mm:ss"
            placeholder="卸货时间"
            disabled
          ></el-date-picker>
        </el-form-item>
        <el-form-item label="卸货吨位">
          <el-input
            style="width: 240px"
            v-model="updateForm.dischargeTons"
            placeholder="卸货吨位"
            disabled
          ></el-input>
        </el-form-item>
        <el-form-item label="磅单查看">
          <el-image
            style="width: 200px; height: 200px; margin-right: 20px"
            v-for="item in updatePoundBillList"
            :src="item.viewUrl"
            :key="item"
            @click="openMediaModal(item.viewUrl, 1, '磅单查看')"
          ></el-image>
        </el-form-item>
      </el-form>
    </el-dialog>
  </div>
</template>
<script setup>
import { onMounted, reactive, ref, toRefs } from "vue";
import api from "../../apis/fetch";
import { useRoute } from "vue-router";
import _ from "lodash";
import router from "../../router";
import store from "../../store";
import { ElNotification, ElMessageBox, ElMessage } from "element-plus";
import downloadBlobFile from "../../utils/downloadBlobFile";
import url from "../../apis/config";

const route = useRoute();
let map = ref();
let voyage = ref({});
let medias = ref([]);
let coordinates = ref();
let previewSrcList = ref([]);
let policyList = ref([]);
let previewPoundList = ref([]);
let shipAudits = ref([]);

let certs = ref(null);
let isCertsVisable = ref(false);

function showCerts() {
  setTimeout(() => {
    certs.value.initCerts(shipAudits.value);
  });
}

async function getVoyageDetail(type) {
  policyList.value = [];
  voyageBill.value = [];
  previewSrcList.value = [];
  let res = await api.getVoyageDetail({
    type: localStorage.userType,
    voyageId: route.query.id,
  });
  if (res.data.status == 0) {
    if (type) {
      ElNotification({
        type: "success",
        title: res.data.msg,
      });
    }

    coordinates.value = res.data.result.coordinates;
    voyage.value = res.data.result.voyage;
    medias.value = res.data.result.medias;
    shipAudits.value = res.data.result.shipAudits;

    for (let i of res.data.result.policys || []) {
      policyList.value.push({
        ...i,
        url: i.viewUrl,
      });
    }
    for (let i of res.data.result.waybills) {
      voyageBill.value.push({
        ...i,
        url: i.viewUrl,
      });
    }
    for (let i of medias.value) {
      previewSrcList.value.push(i.downloadUrl);
    }
    initMap();
  } else {
    console.log(res);
    ElNotification({
      type: "error",
      title: res.data.msg,
    });
  }
}
let total = ref(0);
function pageChange(e) {
  dischargeCurrentPage.value = e;
  getDischargeList();
}
async function addDischarge() {
  if (!formInline.value.dischargeTime || !formInline.value.dischargeTons)
    return;
  let res = await api.addDischarge({
    ...formInline.value,
    voyageId: route.query.id,
  });
  if (res.data.status == 0) {
    getDischargeList(1);
    formInline.value = {};
  } else {
    console.log(res);
  }
}
async function deleteDischarge(id, index) {
  let res = await api.deleteDischarge({
    id,
  });
  if (res.data.status == 0) {
    dischargeList.value.splice(index, 1);
    ElNotification({
      type: "success",
      title: res.data.msg,
    });
  } else {
    console.log(res);
    ElNotification({
      type: "error",
      title: res.data.msg,
    });
  }
}
async function exportExcel() {}
let dischargeCurrentPage = ref(1);
let dischargeList = ref();
let formInline = ref({});
async function getDischargeList(type) {
  let res = await api.getDischargeList({
    voyageId: route.query.id,
    currentPage: dischargeCurrentPage.value,
    size: 10,
  });
  if (res.data.status == 0) {
    dischargeList.value = res.data.result;
    total.value = res.data.total;
  } else {
    console.log(res);
  }
}
let updateForm = ref({});
let updateDischargeDialog = ref(false);
let currentUpdateIndex = ref(-1);
async function updateDischarge() {
  let res = await api.updateDischarge({
    ...updateForm.value,
  });

  if (res.data.status == 0) {
    dischargeList.value[currentUpdateIndex.value] = res.data.result;
    cancelUpdateDischarge();
    ElNotification({
      type: "success",
      title: res.data.msg,
    });
  } else {
    console.log(res);
    ElNotification({
      type: "error",
      title: res.data.msg,
    });
  }
}
let updatePoundParams = ref([]);
let updatePoundBillList = ref([]);

function showUpdateDischarge(item, index) {
  updateDischargeDialog.value = true;
  updatePoundBillList.value = [];

  let { id, dischargeTons, dischargeTime, voyageId, files } = item;
  updatePoundBillList.value = files;

  updateForm.value = {
    id,
    dischargeTons,
    dischargeTime,
  };
  currentUpdateIndex.value = index;
}
function cancelUpdateDischarge() {
  updateDischargeDialog.value = false;
  updateForm.value = {};
  currentUpdateIndex.value = -1;
}
function initMap() {
  map.value = new AMap.Map("map-container", {
    zoom: 11, //级别
    center: [120.563757, 31.891174], //中心点坐标
    mapStyle: "amap://styles/f48d96805f5fa7f5aada657c5ee37017",
    zoomEnable: false,
    dragEnable: false,
  });
  let toolBar = new AMap.ToolBar({
    position: {
      top: "40px",
      right: "40px",
    },
  });
  let hawkEye = new AMap.HawkEye({
    opened: false,
  });
  map.value.addControl(toolBar);
  map.value.addControl(hawkEye);
  let markers = [];
  for (let i of medias.value) {
    let content = `<div style='width:160px'>
        ${
          i.audit == 1
            ? `<img id='img${i.id}' style='width:160px;height:160px;object-fit:contain;' src='${i.viewUrl}'/>`
            : ``
        }
        <img src='https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/ship-red-icon.png' style='display:block;width:20px;height:20px;margin:6px auto'/
      </div>`;

    let marker = new AMap.Marker({
      content,
      position: new AMap.LngLat(i.longitude, i.latitude),
      offset: new AMap.Pixel(-75, i.audit == 1 ? -195 : -30),
    });
    if (i.audit == 1) {
      marker.on("click", () => {
        openMediaModal(i.viewUrl, 1, "航次图片", i);
      });
    }

    markers.push(marker);
  }

  let overlayGroups = new AMap.OverlayGroup(markers);
  map.value.on("complete", function () {
    let t = setTimeout(() => {
      map.value.add(overlayGroups);
      map.value.setFitView(markers, true, [200, 50, 0, 0], 18);
      clearTimeout(t);
    }, 2000);
  });
}

function setShipMarker(longitude = 121.524761, latitude = 31.228721) {
  map.value.setCenter([longitude, latitude]);
  var marker = new AMap.Marker({
    position: new AMap.LngLat(longitude, latitude),
    offset: new AMap.Pixel(-20, -20),
    size: new AMap.Size(80, 80),
    icon: "https://hhd-pat-1255802371.cos.ap-shanghai.myqcloud.com/frontend/ship-red-icon.png", // 添加 Icon 图标 URL
    title: "",
  });
  map.value.add(marker);
}

let disabledStatus = ref(true);
let updateCache = {};
function changeVoyageInfo() {
  updateCache = _.cloneDeep(voyage.value);
  disabledStatus.value = false;
}
function cancelVoyageChange() {
  voyage.value = updateCache;
  disabledStatus.value = true;
}
async function submitVoyageChange() {
  let {
    id,
    transStatus,
    loadStartTime,
    loadEndTime,
    dischargeStartTime,
    dischargeEndTime,
    actualDischargeTons,
    remark,
  } = voyage.value;
  let res = await api.updateVoyage({
    id,
    transStatus,
    loadStartTime,
    loadEndTime,
    dischargeStartTime,
    dischargeEndTime,
    actualDischargeTons,
    remark,
  });
  if (res.data.status == 0) {
    ElNotification({
      type: "success",
      title: res.data.msg,
    });
    disabledStatus.value = true;
  } else {
    ElNotification({
      type: "error",
      title: res.data.msg,
    });
    console.log(res);
  }
}
let options = ref([
  { value: 0, label: "请选择" },
  {
    value: 1,
    label: "航行",
  },
  {
    value: 2,
    label: "停泊",
  },
  {
    value: 3,
    label: "装货",
  },
  {
    value: 4,
    label: "运输中",
  },
  {
    value: 5,
    label: "卸货",
  },
]);

async function finishVoyage() {
  if (!voyage.value.dischargeEndTime) return;
  let res = await api.finishVoyage({
    voyageId: route.query.id,
  });

  if (res.data.status == 0) {
    voyage.value.voyageStatus = 2;
    ElNotification({
      type: "success",
      title: res.data.msg,
    });
  } else {
    ElNotification({
      type: "error",
      title: res.data.msg,
    });
    console.log(res);
  }
}
let currentUrl = ref("");
let mediaModal = ref(false);
let modalType = ref(1);
let modalTitle = ref();
let modalPreview = ref([]);
function openMediaModal(url, type, title) {
  console.log(url, type, title);
  modalPreview.value = [url];
  modalTitle.value = title;
  modalType.value = type;
  currentUrl.value = url;
  mediaModal.value = true;
}

async function auditMedia(mediaId, a, index, mediaType) {
  console.log(mediaId, a, index, mediaType);
  let res = await api.auditMedia({
    mediaId,
    audit: a,
  });
  if (res.data.status == 0) {
    medias.value[index].audit = a;
    ElNotification({
      type: "success",
      title: res.data.msg,
    });
  } else {
    console.log(res);
  }
}
let dialogImageUrl = ref();
let dialogVisible = ref(false);
function handlePictureCardPreview(file) {
  dialogVisible.value = true;
  dialogImageUrl.value = file.url;
}

async function handleRemoveBill(file, list) {
  let cache = _.cloneDeep(voyageBill.value);
  console.log(cache);
  ElMessageBox.confirm("确认删除运单?", "Warning", {
    confirmButtonText: "删除",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(async () => {
      let { id } = file;
      let res = await api.deleteWaybill({
        id,
      });
      if (res.data.status == 0) {
        ElMessage({
          message: "删除成功!",
          type: "success",
        });
        voyageBill.value = list;
      }
    })
    .catch(() => {
      voyageBill.value = cache;
      ElMessage({
        type: "info",
        message: "取消删除",
      });
    });
}
let voyageBill = ref([]);

function billUploadSuccess(response, file, list) {
  list[list.length - 1] = {
    ...response.result,
    url: response.result.viewUrl,
  };
  console.log(list);
  voyageBill.value = list;
}

let billParams = ref({
  voyageId: route.query.id,
});

async function calExpectedArrivalTime() {
  let res = await api.calExpectedArrivalTime({
    voyageId: route.query.id,
    setSailTime: voyage.value.setSailTime,
  });
  if (res.data.status == 0) {
    voyage.value.expectedArrivalTime = res.data.result;
  }
}
let isLoadingExcel = ref(false);
async function downloadExcel() {
  isLoadingExcel.value = true;
  let res = await downloadBlobFile(
    `${url.baseurl}/voyage/exportExcel`,
    { voyageId: route.query.id },
    "船舶跟踪表",
    "post"
  );
  if (res) {
    isLoadingExcel.value = false;
  }
}
let isDischargeLoadingExcel = ref(false);
async function exportDischargeExcel() {
  isDischargeLoadingExcel.value = true;
  let res = await downloadBlobFile(
    `${url.baseurl}/voyage/exportDischargeExcel`,
    { voyageId: route.query.id },
    "卸货记录表",
    "post"
  );
  if (res) {
    isDischargeLoadingExcel.value = false;
  }
}

function subStr(str = "") {
  return str.substring(0, 10);
}
let truckTableData = ref([]);
let truckCurrentPage = ref(1);
let truckTotal = ref(0);
async function getTruckLoadRecord() {
  let res = await api.getTruckLoadRecord({
    voyageId: route.query.id,
    currentPage: truckCurrentPage.value,
    size: 10,
  });
  truckTableData.value = res.data.result;
  truckTotal.value = res.data.total;
}
function truckPageChange(e) {
  truckCurrentPage.value = e;
  getTruckLoadRecord();
}
let truckRecordForm = ref({});
let isAddTruckRecordVisable = ref(false);
let truckRecordBillList = ref([]);
function showTruckRecord(item, index, text) {
  isAddTruckRecordVisable.value = true;
  if (item.file) {
    truckRecordBillList.value[0] = {
      ...item.file,
      url: item.file.viewUrl,
    };
  }

  truckRecordForm.value = { ...item };
}

let truckLoadParams = ref({});
function getTruckLoadBillList() {}

onMounted(() => {
  getVoyageDetail(1);
  getDischargeList(1);
  getTruckLoadRecord();
});
</script>
<style scoped>
.map-container {
  width: 100%;
  height: 500px;
}

.card-note {
  height: 30px;
  font-size: 12px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  color: #777777;
}

.medias-box {
  width: 200px;
  height: 200px;
  margin-top: 20px;
}

.checkbox-group {
  width: 200px;
  height: 50px;
  margin-top: 20px;
}

.medias-content {
  width: 100%;
  height: 600px;
  background: #f7f7f7;
  border-radius: 2px;
}

.pic-container {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  display: flex;
  padding: 30px;
  overflow-x: scroll;
  overflow-y: hidden;
  white-space: nowrap;
}

.pic-main {
  position: relative;
  width: 120px;
}
.box {
  position: absolute;
  height: 240px;
  width: var(--box-width);
  border: 5px solid #dddddd;
  transition: all 0.5s;
  background: #fff;
  z-index: 10;
}

.point {
  position: relative;
  left: 93px;
  top: 258px;
  width: 16px;
  height: 16px;
  background-image: url(../../assets/blue-circle.png);
}

.s-line {
  position: absolute;
  left: 100px;
  top: 242px;
  height: 20px;
  border-left: 2px dashed;
  box-sizing: border-box;
  border-color: #ddd;
}

.l-line {
  position: relative;
  bottom: 30px;
  left: 111px;
  top: 249px;
  height: 3px;
  width: 100px;
  background-color: #dddddd;
}

.bottom-box {
  top: 290px;
}
.top210px {
  top: 270px;
}

.box:hover {
  transform: scale(1.2);
}

.medias-box {
  width: 80px;
  height: 80px;
  margin-top: 10px;
}

.card-note {
  height: 30px;
  font-size: 12px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  color: #777777;
  padding: 10px 20px;
}

.medias-box {
  width: 100%;
  height: 100px;
  margin-top: 20px;
}

.checkbox-group {
  width: 180px;
  height: 50px;
  margin-top: 20px;
}

.el-checkbox {
  margin: 0;
}

.now-box {
  border: 5px solid #0094fe;
}

.now-l-line {
  background-color: #0094fe;
}

.now-s-line {
  border-color: #97caf6;
}

.now-point {
  filter: grayscale(1);
}

.info-line-text-table {
  width: 180px !important;
}

.upload-plus-icon {
  height: 15%;
  color: rgb(139, 147, 156);
  line-height: 100px;
  font-size: 40px;
  font-weight: 200;
}

.upload-text {
  height: 25%;
  color: rgb(139, 147, 156);
}

.info-gap {
  width: 40px;
  font-size: 14px;
  overflow: visible;
  white-space: nowrap;
  color: #006ebc;
  cursor: pointer;
}

.unit {
  font-size: 14px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  color: #353a42;
  line-height: 100%;
  margin: 0 10px;
}
</style>
