|
|
@@ -0,0 +1,153 @@
|
|
|
+<template>
|
|
|
+ <div class="card">
|
|
|
+ <div class="df aic jcsb mb10">
|
|
|
+ <div class="t20">招标信息</div>
|
|
|
+ <div class="df aic">
|
|
|
+ <div
|
|
|
+ class="mr10 fs18"
|
|
|
+ :style="{ color: tenderData.status === 1 ? '#00B050' : '#FFA500' }"
|
|
|
+ >
|
|
|
+ {{ tenderData.status === 1 ? "招标中" : "" }}
|
|
|
+ {{ tenderData.status === 2 ? "招标完成" : "" }}
|
|
|
+ {{ tenderData.status === 3 ? "取消招标" : "" }}
|
|
|
+ </div>
|
|
|
+ <div class="mr10" v-if="tenderData.status === 1">
|
|
|
+ 竞标截止剩余: {{ getLeftTime(tenderData.bidDeadlineDatetime) }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="card mb20">
|
|
|
+ <div class="df aic mb10">
|
|
|
+ <div class="info-title">发起时间:</div>
|
|
|
+ <div class="info-text">{{ tenderData.operatorDate }}</div>
|
|
|
+ <div class="info-title">货种:</div>
|
|
|
+ <div class="info-text">{{ tenderData.cargo }}</div>
|
|
|
+ <div class="info-title">装货港:</div>
|
|
|
+ <div class="info-text">{{ tenderData.loadPortName }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="df aic mb10">
|
|
|
+ <div class="info-title">截止时间:</div>
|
|
|
+ <div class="info-text">{{ tenderData.bidDeadlineDatetime }}</div>
|
|
|
+ <div class="info-title">发货吨位:</div>
|
|
|
+ <div class="info-text">{{ tenderData.tons }} 吨</div>
|
|
|
+ <div class="info-title">卸货港:</div>
|
|
|
+ <div class="info-text">{{ tenderData.dischargePortName }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="tenderData.initMethod === 3">
|
|
|
+ <div class="t20 mb10">前置航次信息</div>
|
|
|
+ <div class="card">
|
|
|
+ <AMapContainer
|
|
|
+ :ships="[voyage]"
|
|
|
+ :loadPorts="loadPorts"
|
|
|
+ :dischargePorts="dischargePorts"
|
|
|
+ style="width: 100%; height: 500px"
|
|
|
+ ></AMapContainer>
|
|
|
+ <div class="card mt10">
|
|
|
+ <div class="t16 mb10">航次信息</div>
|
|
|
+ <div class="df aic mb10">
|
|
|
+ <div class="info-title">船名:</div>
|
|
|
+ <div class="info-text">{{ voyage.shipName }}</div>
|
|
|
+ <div class="info-title">装货港:</div>
|
|
|
+ <div class="info-text">{{ voyage.loadPort }}</div>
|
|
|
+ <div class="info-title">货种:</div>
|
|
|
+ <div class="info-text">{{ voyage.cargo }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="df aic mb10">
|
|
|
+ <div class="info-title">MMSI:</div>
|
|
|
+ <div class="info-text">{{ voyage.mmsi }}</div>
|
|
|
+ <div class="info-title">卸货港:</div>
|
|
|
+ <div class="info-text">{{ voyage.dischargePorts }}</div>
|
|
|
+ <div class="info-title">装载吨位:</div>
|
|
|
+ <div class="info-text">{{ voyage.tons }} 吨</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="t20 mt20 mb10">运力要求</div>
|
|
|
+ <div class="card">
|
|
|
+ <pre style="white-space: pre-wrap">{{
|
|
|
+ tenderData.capacityRequirements
|
|
|
+ }}</pre>
|
|
|
+ </div>
|
|
|
+ <div class="t20 mt20 mb10">报价要求</div>
|
|
|
+ <div class="card">
|
|
|
+ <pre style="white-space: pre-wrap">{{ tenderData.quotationRequest }}</pre>
|
|
|
+ </div>
|
|
|
+ <el-divider></el-divider>
|
|
|
+ <div class="t20 mb10">投标信息</div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import api from "../../apis/fetch";
|
|
|
+import store from "../../store";
|
|
|
+import router from "../../router";
|
|
|
+import { ref, onMounted, reactive, computed } from "vue";
|
|
|
+import { ElNotification, ElMessage, ElMessageBox } from "element-plus";
|
|
|
+import { mapGetters } from "vuex";
|
|
|
+import { useRoute } from "vue-router";
|
|
|
+
|
|
|
+const route = useRoute();
|
|
|
+
|
|
|
+const tenderData = ref({
|
|
|
+ operatorDate: "",
|
|
|
+ bidDeadlineDatetime: "",
|
|
|
+ cargo: "",
|
|
|
+ loadPortName: "",
|
|
|
+ tons: "",
|
|
|
+ dischargePortName: "",
|
|
|
+ participateProxyNum: "",
|
|
|
+ capacityRequirements: "",
|
|
|
+ quotationRequest: "",
|
|
|
+ tenderProxies: [],
|
|
|
+});
|
|
|
+
|
|
|
+const voyage = ref({});
|
|
|
+const loadPorts = ref([]);
|
|
|
+const dischargePorts = ref([]);
|
|
|
+
|
|
|
+async function getTenderDetail() {
|
|
|
+ let { data } = await api.getTenderDetail({
|
|
|
+ tenderId: route.query.id,
|
|
|
+ });
|
|
|
+ tenderData.value = data.result;
|
|
|
+}
|
|
|
+
|
|
|
+function getLeftTime(givenTime = "2099-12-31 23:59:59") {
|
|
|
+ givenTime = new Date(givenTime);
|
|
|
+ const currentTime = new Date();
|
|
|
+ const differenceInMilliseconds = Math.abs(givenTime - currentTime);
|
|
|
+ const days = Math.floor(differenceInMilliseconds / (1000 * 60 * 60 * 24));
|
|
|
+ const hours = Math.floor(
|
|
|
+ (differenceInMilliseconds % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
|
|
|
+ );
|
|
|
+ return `${days}天${hours}小时`;
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ getTenderDetail();
|
|
|
+});
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.info-title {
|
|
|
+ width: 110px;
|
|
|
+ text-align: right;
|
|
|
+ color: #666;
|
|
|
+ margin-right: 10px;
|
|
|
+}
|
|
|
+
|
|
|
+.info-text {
|
|
|
+ width: 160px;
|
|
|
+ color: #333;
|
|
|
+}
|
|
|
+.table-title {
|
|
|
+ color: #666;
|
|
|
+ margin-right: 10px;
|
|
|
+}
|
|
|
+.table-text {
|
|
|
+ color: #333;
|
|
|
+ margin-right: 30px;
|
|
|
+}
|
|
|
+</style>
|