You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3999 lines
113 KiB
Plaintext
3999 lines
113 KiB
Plaintext
5 months ago
|
<template>
|
||
|
<div @click="pageClick" class="booking-list">
|
||
|
<a-spin tip="Loading..." :spinning="spinning">
|
||
|
<a-row :gutter="24" style="margin: 0">
|
||
|
<a-col :md="24" :sm="24" style="padding: 0 0 0 0" class="content-box">
|
||
|
<XCard class="content-nav">
|
||
|
<div class="table-page-search-wrapper">
|
||
|
<a-row :gutter="48" class="booking-from-box">
|
||
|
<a-col :xl="19" :lg="24" :md="24" :sm="24" :class="advanced ? '' : 'advanced'">
|
||
|
<BasicForm @register="registerForm" />
|
||
|
</a-col>
|
||
|
<a-col
|
||
|
style="padding: 0px"
|
||
|
:xl="5"
|
||
|
:lg="24"
|
||
|
:md="24"
|
||
|
:sm="24"
|
||
|
class="table-page-search-box"
|
||
|
>
|
||
|
<span
|
||
|
class="table-page-search-submitButtons"
|
||
|
:style="(advanced && { float: 'right', overflow: 'hidden' }) || {}"
|
||
|
>
|
||
|
<a-button size="small" type="primary" @click="tableRefresh">查询</a-button>
|
||
|
<a-button size="small" class="reset" @click="tableReset">重置</a-button>
|
||
|
<template v-if="screenWidth > 1600">
|
||
|
<a-button size="small" class="more-search" @click="tableMoreRefresh">
|
||
|
多提单号查询<a-icon type="search" />
|
||
|
</a-button>
|
||
|
<span class="tab-btn" @click="formSetting">
|
||
|
<a-icon type="setting" :style="{ marginLeft: '0px' }" />
|
||
|
</span>
|
||
|
<a
|
||
|
class="senior-search"
|
||
|
@click="toggleAdvanced"
|
||
|
v-if="searchFormSchema.length > 4"
|
||
|
>
|
||
|
{{ advanced ? '收起查询' : '更多查询' }}
|
||
|
<i class="iconfont" :class="advanced ? 'icon-shouqi' : 'icon-zhankai'"></i>
|
||
|
</a>
|
||
|
<a-button size="small" class="more-search" @click="FnOpenAdvancedQuery">
|
||
|
高级
|
||
|
</a-button>
|
||
|
</template>
|
||
|
<template v-else>
|
||
|
<a-button size="small" class="more-search" @click="tableMoreRefresh">
|
||
|
多提单号<a-icon type="search" />
|
||
|
</a-button>
|
||
|
<span class="tab-btn" @click="formSetting">
|
||
|
<a-icon type="setting" :style="{ marginLeft: '0px' }" />
|
||
|
</span>
|
||
|
<a
|
||
|
class="senior-search"
|
||
|
@click="toggleAdvanced"
|
||
|
v-if="searchFormSchema.length > 4"
|
||
|
>
|
||
|
{{ advanced ? '收起' : '更多' }}
|
||
|
<i class="iconfont" :class="advanced ? 'icon-shouqi' : 'icon-zhankai'"></i>
|
||
|
</a>
|
||
|
</template>
|
||
|
</span>
|
||
|
</a-col>
|
||
|
</a-row>
|
||
|
</div>
|
||
|
</XCard>
|
||
|
<XCard class="content-table" :style="{ marginTop: '-6px' }">
|
||
|
<vxe-toolbar>
|
||
|
<template #buttons> </template>
|
||
|
<template #tools>
|
||
|
<div class="right BookTopButton">
|
||
|
<span class="tab-btn" @click="tableRefreshFirst">
|
||
|
<a-icon
|
||
|
type="redo"
|
||
|
:style="{ fontSize: '14px', transform: 'rotate(278deg)' }"
|
||
|
/>
|
||
|
</span>
|
||
|
<span class="tab-btn" @click="tableHeaderEdit">
|
||
|
<a-icon type="setting" :style="{ fontSize: '14px' }" />
|
||
|
</span>
|
||
|
</div>
|
||
|
</template>
|
||
|
</vxe-toolbar>
|
||
|
<BasicTable @register="register" @row-dbClick="handledbclick">
|
||
|
<template #toolbar>
|
||
|
<div class="nav-box">
|
||
|
<div class="nav" @click="addBooking">
|
||
|
<i class="iconfont icon-jiahao2fill"></i>新建
|
||
|
</div>
|
||
|
<div class="nav" @click="copyBooking"
|
||
|
><i class="iconfont icon-fuzhi"></i>复制</div
|
||
|
>
|
||
|
<div class="nav" @click="copyBookingMore"
|
||
|
><i class="iconfont icon-fuzhi1"></i>复制多票</div
|
||
|
>
|
||
|
<div class="nav">
|
||
|
<a-dropdown>
|
||
|
<span> <i class="iconfont icon-bianjiwenjian"></i>批量操作 </span>
|
||
|
<template #overlay>
|
||
|
<a-menu>
|
||
|
<a-menu-item>
|
||
|
<a @click="batchEditing()" href="javascript:;">批量编辑</a>
|
||
|
</a-menu-item>
|
||
|
<!-- <a-menu-item>
|
||
|
<a @click="handleOpenShip" href="javascript:;">批量修改船代</a>
|
||
|
</a-menu-item> -->
|
||
|
</a-menu>
|
||
|
</template>
|
||
|
</a-dropdown>
|
||
|
</div>
|
||
|
|
||
|
<a-popconfirm
|
||
|
title="确定删除当前选中订舱?"
|
||
|
ok-text="是"
|
||
|
cancel-text="否"
|
||
|
@confirm="removeMoreFun"
|
||
|
@cancel="cancelRemove"
|
||
|
>
|
||
|
<div class="nav"><i class="iconfont icon-shanchu2"></i>删除</div>
|
||
|
</a-popconfirm>
|
||
|
<div class="nav"><i class="iconfont icon-shishijifei"></i>定时订舱</div>
|
||
|
|
||
|
<div class="nav" @click="handleSearchTxxp">
|
||
|
<a-spin :spinning="txxpLoading">
|
||
|
<i class="iconfont icon-xiaopiaodayin"></i>小票状态
|
||
|
</a-spin>
|
||
|
</div>
|
||
|
<div class="nav" @click="openTraceModel"
|
||
|
><i class="iconfont icon-yunshu1"></i>运踪订阅</div
|
||
|
>
|
||
|
<div class="nav">
|
||
|
<a-dropdown>
|
||
|
<span>
|
||
|
<i
|
||
|
class="iconfont icon-a-wendangcaozuoxiazaishangchuanshanchuxinzengfujianyasuochakan-01"
|
||
|
></i
|
||
|
>船公司文件
|
||
|
</span>
|
||
|
<template #overlay>
|
||
|
<a-menu>
|
||
|
<a-menu-item>
|
||
|
<a @click="handleDownByBc(1)" href="javascript:;">BC下载</a>
|
||
|
</a-menu-item>
|
||
|
<a-menu-item>
|
||
|
<a @click="handleDownByBc(2)" href="javascript:;">DRAFT下载</a>
|
||
|
</a-menu-item>
|
||
|
<a-menu-item>
|
||
|
<a @click="handleDownByBc(4)" href="javascript:;">舱位分配查询</a>
|
||
|
</a-menu-item>
|
||
|
<a-menu-item>
|
||
|
<a @click="handleImportBc" href="javascript:;">单票BC引入</a>
|
||
|
</a-menu-item>
|
||
|
<a-menu-item>
|
||
|
<a @click="handleImportBcMore" href="javascript:;">多票BC引入</a>
|
||
|
</a-menu-item>
|
||
|
</a-menu>
|
||
|
</template>
|
||
|
</a-dropdown>
|
||
|
</div>
|
||
|
<div class="nav" @click="GoExpress"><i class="iconfont icon-goods"></i>快递</div>
|
||
|
</div>
|
||
|
</template>
|
||
|
<template #mblno="e">
|
||
|
<div class="mblno">
|
||
|
<span @click="editColumns(e.record)">{{ e.text }}</span>
|
||
|
<Icon icon="ant-design:copy-outlined" @click="FnCopy(e.text)" />
|
||
|
</div>
|
||
|
</template>
|
||
|
<template #sourceId="e">{{ RText('sourceId', e) }} </template>
|
||
|
<template #sourceDetailId="e">{{ RText('sourceDetailId', e) }} </template>
|
||
|
<template #arFeeStatus="e">
|
||
|
<span class="CsFeeStatus" :class="`type${e.text}`">{{
|
||
|
RText('arFeeStatus', e)
|
||
|
}}</span>
|
||
|
</template>
|
||
|
<template #apFeeStatus="e">
|
||
|
<span class="CsFeeStatus" :class="`type${e.text}`">{{
|
||
|
RText('apFeeStatus', e)
|
||
|
}}</span>
|
||
|
</template>
|
||
|
</BasicTable>
|
||
|
</XCard>
|
||
|
</a-col>
|
||
|
</a-row>
|
||
|
<!-- -------------------Z----------------------->
|
||
|
<a-modal
|
||
|
title="高级查询"
|
||
|
:maskClosable="false"
|
||
|
width="40%"
|
||
|
:visible="AdvancedQueryVisible"
|
||
|
@ok="FnAdvancedQuery"
|
||
|
@cancel="FnCancelAdvancedQuery"
|
||
|
>
|
||
|
<div class="CsConditionFilter">
|
||
|
<ConditionFilter v-model="AdvancedQueryData" :filter-fields="fields" :disabled="false" />
|
||
|
</div>
|
||
|
</a-modal>
|
||
|
<!-- 批量编辑 -->
|
||
|
<BatchModification @register="registerModal" @success="BMSuccess" />
|
||
|
<a-modal
|
||
|
:title="
|
||
|
TaskShippingOrderCompareData.isExistsDiff ? '下货纸比对(有差异)' : '下货纸比对(正常)'
|
||
|
"
|
||
|
@cancel="TaskShippingOrderCompareHandleCancel"
|
||
|
:visible="TaskShippingOrderCompareVisible"
|
||
|
width="40%"
|
||
|
>
|
||
|
<template #footer>
|
||
|
<a-button key="back" @click="TaskShippingOrderCompareHandleCancel"> 关闭 </a-button>
|
||
|
</template>
|
||
|
<p class="TaskShippingOrderCompareP">
|
||
|
{{ TaskShippingOrderCompareData.compareTime }}
|
||
|
<span v-if="TaskShippingOrderCompareData.isExistsDiff">
|
||
|
比对异常 合计
|
||
|
<span class="TaskShippingOrderCompareSpan">{{
|
||
|
TaskShippingOrderCompareData.total
|
||
|
}}</span>
|
||
|
条
|
||
|
</span>
|
||
|
</p>
|
||
|
<div class="TaskShippingOrderCompareMainBox">
|
||
|
<div class="TaskShippingOrderCompareMain">
|
||
|
<div class="TaskShippingOrderCompareMainHeader">
|
||
|
<div>
|
||
|
<p>提单号:(本地数据)</p>
|
||
|
<p>--------------------------</p>
|
||
|
<p>{{ TaskShippingOrderCompareData.mBlNo }}</p>
|
||
|
</div>
|
||
|
<div></div>
|
||
|
<div>
|
||
|
<p>提单号:(场站数据)</p>
|
||
|
<p>--------------------------</p>
|
||
|
<p>{{ TaskShippingOrderCompareData.mBlNo }}</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
class="TaskShippingOrderCompareMainList"
|
||
|
v-for="(item, index) in TaskShippingOrderCompareData.showDetailList"
|
||
|
:key="index"
|
||
|
v-show="item.pCode != 'ContaList'"
|
||
|
>
|
||
|
<p>{{ item.fieldName }}:</p>
|
||
|
<p>{{ item.reqVal }}</p>
|
||
|
<p v-if="item.msg">
|
||
|
<a-icon type="close" :style="{ color: 'red' }" />
|
||
|
</p>
|
||
|
<p v-else><a-icon type="check" :style="{ color: 'green' }" /></p>
|
||
|
<p>{{ item.fieldName }}:</p>
|
||
|
<p v-if="!item.isDiff">{{ item.targetVal }}</p>
|
||
|
<p v-else v-html="item.mergeHtml"></p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="TaskShippingOrderCompareMain">
|
||
|
<div class="TaskShippingOrderCompareMainHeader Box">
|
||
|
<div>
|
||
|
<p>箱信息:(本地数据)</p>
|
||
|
</div>
|
||
|
<div></div>
|
||
|
<div>
|
||
|
<p>箱信息:(场站数据)</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
v-for="(item, index) in TaskShippingOrderCompareData.showDetailList"
|
||
|
:key="index"
|
||
|
v-show="item.pCode == 'ContaList'"
|
||
|
:class="
|
||
|
item.fieldName == '箱号'
|
||
|
? 'TaskShippingOrderCompareMainList BoxNo'
|
||
|
: 'TaskShippingOrderCompareMainList'
|
||
|
"
|
||
|
>
|
||
|
<p>{{ item.fieldName }}:</p>
|
||
|
<p>{{ item.reqVal }}</p>
|
||
|
<p v-if="item.msg">
|
||
|
<a-icon type="close" :style="{ color: 'red' }" />
|
||
|
</p>
|
||
|
<p v-else><a-icon type="check" :style="{ color: 'green' }" /></p>
|
||
|
<p>{{ item.fieldName }}:</p>
|
||
|
<p v-if="!item.isDiff">{{ item.targetVal }}</p>
|
||
|
<p v-else v-html="item.mergeHtml"></p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</a-modal>
|
||
|
<a-modal
|
||
|
:title="formatSheet.isExistsDiff ? '格式单比对(有差异)' : '格式单比对(正常)'"
|
||
|
@cancel="formatSheetVisible = false"
|
||
|
:visible="formatSheetVisible"
|
||
|
width="90%"
|
||
|
>
|
||
|
<template #footer>
|
||
|
<a-button key="back" @click="formatSheetVisible = false"> 关闭 </a-button>
|
||
|
</template>
|
||
|
<div style="display: flex">
|
||
|
<div style="width: 55%">
|
||
|
<div>
|
||
|
<div
|
||
|
v-if="formatSheet.total > 0"
|
||
|
style="display: flex; justify-content: space-between"
|
||
|
class="TaskShippingOrderCompareP"
|
||
|
>
|
||
|
<div>
|
||
|
{{ formatSheet.compareTime }}
|
||
|
<span v-if="formatSheet.isExistsDiff">
|
||
|
比对异常 合计
|
||
|
<span class="TaskShippingOrderCompareSpan">{{ formatSheet.total }}</span>
|
||
|
条
|
||
|
</span>
|
||
|
</div>
|
||
|
<div>
|
||
|
显示全部
|
||
|
<a-switch :checked="formatFlag" @change="formatFlag = !formatFlag" />
|
||
|
</div>
|
||
|
</div>
|
||
|
<div style="display: flex; align-items: flex-start" v-else>
|
||
|
<a-icon
|
||
|
style="color: rgb(82, 196, 26); font-size: 50px; margin-top: 5px"
|
||
|
type="check-circle"
|
||
|
theme="filled"
|
||
|
/>
|
||
|
<div style="margin-left: 20px">
|
||
|
<div style="font-weight: bold; font-size: 22px">格式单比对(正常)</div>
|
||
|
<div style="font-weight: bold">提单号:{{ formatSheet.mBlNo }}</div>
|
||
|
<div style="font-weight: bold">{{ formatSheet.compareTime }}</div>
|
||
|
</div>
|
||
|
<div style="margin: 5px 0px 0px 40px">
|
||
|
显示全部
|
||
|
<a-switch :checked="formatFlag" @change="formatFlag = !formatFlag" />
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
v-if="!formatFlag && formatSheet.total > 0"
|
||
|
class="TaskShippingOrderCompareMainBox"
|
||
|
style="height: 600px"
|
||
|
>
|
||
|
<div class="TaskShippingOrderCompareMain">
|
||
|
<div class="TaskShippingOrderCompareMainHeader">
|
||
|
<div>
|
||
|
<p>提单号</p>
|
||
|
<div
|
||
|
style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"
|
||
|
></div>
|
||
|
<p>{{ formatSheet.mBlNo }}</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
v-for="(item, index) in formatSheet.showDetailList"
|
||
|
:key="index"
|
||
|
style="display: flex; margin-top: 15px"
|
||
|
v-show="item.pCode != 'ContaList' && item.isDiff"
|
||
|
>
|
||
|
<p style="padding-top: 4px" v-if="item.msg">
|
||
|
<a-icon
|
||
|
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
|
||
|
type="close-circle"
|
||
|
theme="filled"
|
||
|
/>
|
||
|
</p>
|
||
|
<p v-if="item.isDiff" style="width: 90px; margin-right: 20px"
|
||
|
>{{ item.fieldName }}:</p
|
||
|
>
|
||
|
<div v-if="item.isDiff" style="width: 60%">
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0"
|
||
|
>本地</span
|
||
|
>
|
||
|
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
|
||
|
</div>
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0"
|
||
|
>格式单</span
|
||
|
>
|
||
|
<div v-html="item.mergeHtml"></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="TaskShippingOrderCompareMain">
|
||
|
<div>
|
||
|
<div>
|
||
|
<p>箱信息</p>
|
||
|
<div
|
||
|
style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"
|
||
|
></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
v-for="(item, index) in formatSheet.showDetailList"
|
||
|
:key="index"
|
||
|
v-show="(item.pCode == 'ContaList' && item.isDiff) || item.fieldName == '箱号'"
|
||
|
style="display: flex; margin-top: 15px; align-items: flex-start"
|
||
|
>
|
||
|
<div v-if="item.fieldName == '箱号' && formatSheet.isShowCntall"
|
||
|
>箱号:{{ item.primaryKey }}</div
|
||
|
>
|
||
|
<p
|
||
|
style="padding-top: 4px"
|
||
|
v-if="item.msg && item.isDiff && item.fieldName != '箱号'"
|
||
|
>
|
||
|
<a-icon
|
||
|
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
|
||
|
type="close-circle"
|
||
|
theme="filled"
|
||
|
/>
|
||
|
</p>
|
||
|
<p
|
||
|
v-if="item.isDiff && item.fieldName != '箱号'"
|
||
|
style="width: 90px; margin-right: 20px"
|
||
|
>{{ item.fieldName }}:</p
|
||
|
>
|
||
|
<div v-if="item.isDiff && item.fieldName != '箱号'" style="width: 60%">
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0"
|
||
|
>本地</span
|
||
|
>
|
||
|
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
|
||
|
</div>
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0"
|
||
|
>格式单</span
|
||
|
>
|
||
|
<div v-html="item.mergeHtml"></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div v-if="!formatFlag && formatSheet.total == 0"></div>
|
||
|
<div v-if="formatFlag" class="TaskShippingOrderCompareMainBox" style="height: 600px">
|
||
|
<div class="TaskShippingOrderCompareMain">
|
||
|
<div class="TaskShippingOrderCompareMainHeader">
|
||
|
<div>
|
||
|
<p>提单号</p>
|
||
|
<div
|
||
|
style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"
|
||
|
></div>
|
||
|
<p>{{ formatSheet.mBlNo }}</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
v-for="(item, index) in formatSheet.showDetailList"
|
||
|
:key="index"
|
||
|
style="display: flex; margin-top: 15px"
|
||
|
v-show="item.pCode != 'ContaList'"
|
||
|
>
|
||
|
<p style="padding-top: 4px" v-if="item.msg">
|
||
|
<a-icon
|
||
|
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
|
||
|
type="close-circle"
|
||
|
theme="filled"
|
||
|
/>
|
||
|
</p>
|
||
|
<p style="padding-top: 4px" v-else>
|
||
|
<a-icon
|
||
|
style="color: rgb(0, 153, 68); font-size: 18px; margin-right: 35px"
|
||
|
type="check-circle"
|
||
|
theme="filled"
|
||
|
/>
|
||
|
</p>
|
||
|
<p style="width: 90px; margin-right: 20px">{{ item.fieldName }}:</p>
|
||
|
<div style="width: 60%">
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0"
|
||
|
>本地</span
|
||
|
>
|
||
|
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
|
||
|
</div>
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="margin-right: 10px; font-weight: bold; width: 42px; flex-shrink: 0"
|
||
|
>格式单</span
|
||
|
>
|
||
|
<div v-if="item.isDiff" v-html="item.mergeHtml"></div>
|
||
|
<div v-else v-html="item.targetVal"></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="TaskShippingOrderCompareMain">
|
||
|
<div>
|
||
|
<div>
|
||
|
<p>箱信息</p>
|
||
|
<div
|
||
|
style="width: 100%; height: 1px; border-bottom: 1px dashed; margin: 5px 0"
|
||
|
></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
v-for="(item, index) in formatSheet.showDetailList"
|
||
|
:key="index"
|
||
|
v-show="item.pCode == 'ContaList'"
|
||
|
style="display: flex; margin-top: 15px; align-items: flex-start"
|
||
|
>
|
||
|
<div v-if="item.fieldName == '箱号'">箱号:{{ item.primaryKey }}</div>
|
||
|
<div style="display: flex; align-items: flex-start" v-else>
|
||
|
<p style="padding-top: 4px" v-if="item.msg">
|
||
|
<a-icon
|
||
|
style="color: rgb(194, 5, 5); font-size: 18px; margin-right: 35px"
|
||
|
type="close-circle"
|
||
|
theme="filled"
|
||
|
/>
|
||
|
</p>
|
||
|
<p style="padding-top: 4px" v-else>
|
||
|
<a-icon
|
||
|
style="color: rgb(0, 153, 68); font-size: 18px; margin-right: 35px"
|
||
|
type="check-circle"
|
||
|
theme="filled"
|
||
|
/>
|
||
|
</p>
|
||
|
<p style="width: 90px; margin-right: 20px; flex-shrink: 0"
|
||
|
>{{ item.fieldName }}:</p
|
||
|
>
|
||
|
<div style="width: 60%">
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(0, 153, 204)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="
|
||
|
margin-right: 10px;
|
||
|
font-weight: bold;
|
||
|
width: 42px;
|
||
|
flex-shrink: 0;
|
||
|
"
|
||
|
>本地</span
|
||
|
>
|
||
|
<div style="margin-bottom: 15px">{{ item.reqVal }}</div>
|
||
|
</div>
|
||
|
<div style="display: flex">
|
||
|
<a-icon
|
||
|
style="margin-top: 4px; margin-right: 5px; color: rgb(100, 163, 90)"
|
||
|
type="right-circle"
|
||
|
/>
|
||
|
<span
|
||
|
style="
|
||
|
margin-right: 10px;
|
||
|
font-weight: bold;
|
||
|
width: 42px;
|
||
|
flex-shrink: 0;
|
||
|
"
|
||
|
>格式单</span
|
||
|
>
|
||
|
<div v-if="item.isDiff" v-html="item.mergeHtml"></div>
|
||
|
<div v-else v-html="item.targetVal"></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<a-spin class="padUrl" style="width: 100%; min-height: 600px" :spinning="pdfLoading">
|
||
|
<iframe style="width: 100%; height: 100%" :src="formatPdf" frameborder="0"></iframe>
|
||
|
</a-spin>
|
||
|
</div>
|
||
|
</a-modal>
|
||
|
<a-modal
|
||
|
title="多提单号查询"
|
||
|
:maskClosable="false"
|
||
|
:width="400"
|
||
|
:visible="moreNumVisible"
|
||
|
@ok="moreNumSubmit"
|
||
|
@cancel="moreNumCancel"
|
||
|
>
|
||
|
<div>
|
||
|
<a-textarea v-model:value="moreNumVal" style="height: 200px" />
|
||
|
</div>
|
||
|
</a-modal>
|
||
|
<a-modal
|
||
|
title="小票状态查询"
|
||
|
:width="600"
|
||
|
:visible="txxpFlag"
|
||
|
:footer="null"
|
||
|
@cancel="txxpFlag = false"
|
||
|
>
|
||
|
<div>
|
||
|
<p>提箱小票未申请:{{ txxpForm.noApply }}</p>
|
||
|
<p>提箱小票已申请未打印:{{ txxpForm.applyNoPrint }}</p>
|
||
|
<p>提箱小票已打印:{{ txxpForm.print }}</p>
|
||
|
<p>是否封账:{{ txxpForm.IsLockBooking }}</p>
|
||
|
</div>
|
||
|
</a-modal>
|
||
|
<a-modal title="提示信息" :visible="bcFileFlag" :footer="null" @cancel="bcFileFlag = false">
|
||
|
<div class="bcfile-title">
|
||
|
<div
|
||
|
><a-icon style="margin-right: 10px" @click="handleCopy" type="copy" />时间{{
|
||
|
bcFile.executeTime
|
||
|
}}</div
|
||
|
>
|
||
|
<span> {{ bcFile.batchTotal }}</span>
|
||
|
</div>
|
||
|
<div ref="RefbcBox" class="bc-box" v-if="bcFile.ext && bcFile.ext.length > 0">
|
||
|
<div class="bc-item" v-for="(item, index) in bcFile.ext" :key="index">
|
||
|
<span>{{ item.bno }}</span>
|
||
|
<span> {{ item.msg }}</span>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div v-else>{{ bcFile.msg }}</div>
|
||
|
</a-modal>
|
||
|
<a-modal
|
||
|
title="输入复制数量"
|
||
|
:visible="copyMoreFlag"
|
||
|
:footer="null"
|
||
|
@cancel="copyMoreFlag = false"
|
||
|
>
|
||
|
<a-form
|
||
|
ref="RefcopyMoreForm"
|
||
|
:model="copyMoreForm"
|
||
|
:label-col="{ span: 5 }"
|
||
|
:wrapper-col="{ span: 12 }"
|
||
|
@submit="handleSubmitCopyMore"
|
||
|
:style="{ padding: '10px' }"
|
||
|
>
|
||
|
<a-form-item
|
||
|
label="数量"
|
||
|
name="number"
|
||
|
:rules="[{ required: true, message: '请输入数量' }]"
|
||
|
>
|
||
|
<a-input-number :min="1" :max="10" v-model:value="copyMoreForm.number" />
|
||
|
</a-form-item>
|
||
|
<a-form-item :wrapper-col="{ span: 12, offset: 5 }">
|
||
|
<a-button type="primary" html-type="submit">确定</a-button>
|
||
|
</a-form-item>
|
||
|
</a-form>
|
||
|
</a-modal>
|
||
|
|
||
|
<a-modal
|
||
|
title="批量修改船代"
|
||
|
:width="600"
|
||
|
:visible="shipagencyFlag"
|
||
|
:footer="null"
|
||
|
@cancel="shipagencyFlag = false"
|
||
|
>
|
||
|
<a-select
|
||
|
placeholder="请选择船代"
|
||
|
v-model="shipagency"
|
||
|
show-search
|
||
|
style="width: 200px; margin-right: 20px"
|
||
|
@focus="shipagencySearch"
|
||
|
@search="shipagencySearch"
|
||
|
:default-active-first-option="false"
|
||
|
:show-arrow="false"
|
||
|
:filter-option="false"
|
||
|
:not-found-content="null"
|
||
|
>
|
||
|
<a-select-option
|
||
|
v-for="item in shipagencyData"
|
||
|
:key="item.showCode"
|
||
|
:value="item.showCode"
|
||
|
>
|
||
|
{{ item.name }}
|
||
|
</a-select-option>
|
||
|
</a-select>
|
||
|
<a-button :loading="shipagencyLoad" type="primary" @click="handleSubimtShip">确认</a-button>
|
||
|
</a-modal>
|
||
|
<a-modal width="50vw" :maskClosable="false" v-model="traceModalVisible" title="运踪订阅">
|
||
|
<div class="trace-box">
|
||
|
<a-form>
|
||
|
<a-row :gutter="16">
|
||
|
<a-col :span="24" class="book-model-box">
|
||
|
<a-form-item
|
||
|
label="请选择订阅内容"
|
||
|
:labelCol="{ xs: { span: 24 }, sm: { span: 6 } }"
|
||
|
:wrapperCol="{ xs: { span: 24 }, sm: { span: 15 } }"
|
||
|
has-feedback
|
||
|
>
|
||
|
<a-checkbox-group
|
||
|
class="trace-check"
|
||
|
v-model="traceValue"
|
||
|
name="checkboxgroup"
|
||
|
:options="traceOptions"
|
||
|
@change="onTraceChange"
|
||
|
/>
|
||
|
</a-form-item>
|
||
|
</a-col>
|
||
|
</a-row>
|
||
|
</a-form>
|
||
|
</div>
|
||
|
<template #footer>
|
||
|
<a-button type="primary" @click="traceSend">订阅</a-button>
|
||
|
</template>
|
||
|
</a-modal>
|
||
|
<importBc
|
||
|
:form="bcObj"
|
||
|
@handleClose="bcClose"
|
||
|
ref="RefimportBc"
|
||
|
@handleSuccess="handleSuccess"
|
||
|
></importBc>
|
||
|
<importBcMore ref="RefimportBcMore"></importBcMore>
|
||
|
<setFormModel
|
||
|
ref="setForm"
|
||
|
:formData="formData"
|
||
|
:formAllData="formMoreData"
|
||
|
type="from"
|
||
|
@ok="submitForm"
|
||
|
v-if="formMoreData"
|
||
|
></setFormModel>
|
||
|
<setFormModel
|
||
|
ref="setTableForm"
|
||
|
:formData="formTableData"
|
||
|
:formAllData="formMoreTableData"
|
||
|
:sortLabelList="sortLabelList"
|
||
|
:firstSort="{ label: tableOrderLabel, type: tableOrderType }"
|
||
|
:maxNum="999"
|
||
|
type="table"
|
||
|
@ok="submitTableForm"
|
||
|
@sortList="submitSort"
|
||
|
v-if="formMoreTableData"
|
||
|
></setFormModel>
|
||
|
<div
|
||
|
class="hovers-list"
|
||
|
:style="{ top: `${remarkScreenY}px`, left: `${remarkScreenX}px` }"
|
||
|
v-if="remarkShow"
|
||
|
>
|
||
|
<div class="title">备注内容:</div>
|
||
|
<div class="list" v-for="(remarkItem, rindex) in remarkData" :key="rindex">
|
||
|
<i class="iconfont icon-yuandian icon"></i> {{ remarkItem.remark }}
|
||
|
</div>
|
||
|
</div>
|
||
|
<div
|
||
|
class="goods-hovers-list"
|
||
|
:class="[
|
||
|
{ 'hide-goods-hover': !goodStatusShow },
|
||
|
{ 'seat-top': goodStatusSeat === 'top' },
|
||
|
{ 'seat-bottom': goodStatusSeat === 'bottom' },
|
||
|
]"
|
||
|
:style="{ top: `${goodStatusScreenY}px`, left: `${goodStatusScreenX}px` }"
|
||
|
>
|
||
|
<div class="title">货运动态</div>
|
||
|
<template v-for="(goodStatusItem, gindex) in goodStatusData">
|
||
|
<template v-if="goodStatusItem.finishTime || goodStatusItem.remark">
|
||
|
<a-popover placement="top" :key="gindex">
|
||
|
<template #content>
|
||
|
<div>
|
||
|
<div v-if="goodStatusItem.finishTime">时间:{{ goodStatusItem.finishTime }}</div>
|
||
|
<div v-if="goodStatusItem.remark">备注:{{ goodStatusItem.remark }}</div>
|
||
|
<div v-if="goodStatusItem.extData">显示天数:{{ goodStatusItem.extData }}</div>
|
||
|
</div>
|
||
|
</template>
|
||
|
<div
|
||
|
class="goods-btn"
|
||
|
:class="{ active: goodStatusItem.finishTime || goodStatusItem.remark }"
|
||
|
>
|
||
|
{{ goodStatusItem.statusName }}
|
||
|
</div>
|
||
|
</a-popover>
|
||
|
</template>
|
||
|
<template v-else>
|
||
|
<div
|
||
|
class="goods-btn"
|
||
|
:key="gindex"
|
||
|
:class="{ active: goodStatusItem.finishTime || goodStatusItem.remark }"
|
||
|
>
|
||
|
{{ goodStatusItem.statusName }}
|
||
|
</div>
|
||
|
</template>
|
||
|
</template>
|
||
|
</div>
|
||
|
</a-spin>
|
||
|
</div>
|
||
|
</template>
|
||
|
<script lang="ts" setup>
|
||
|
import BatchModification from './modules/BatchModification.vue'
|
||
|
import ConditionFilter from '/@/components/Condition/index.vue'
|
||
|
import { ref, Ref, onMounted, onUnmounted, reactive, getCurrentInstance, watch } from 'vue'
|
||
|
import { onBeforeRouteLeave } from 'vue-router'
|
||
|
import XCard from '/@/components/xnComponents/XCard.vue'
|
||
|
import setFormModel from '/@/components/setFormModel/index.vue'
|
||
|
import formLabel from './modules/formLabel.vue'
|
||
|
import moment from 'moment'
|
||
|
import { useGo } from '/@/hooks/web/usePage'
|
||
|
import importBc from './modules/importBc.vue'
|
||
|
import importBcMore from './modules/importBcMore.vue'
|
||
|
import initData from './modules/initData.js'
|
||
|
import { FilterRules } from '/@/components/Condition/index'
|
||
|
import { Field } from '/@/components/Render/interface'
|
||
|
import { getColumnsByClient } from '/@/views/baseinfo/formcopy/api'
|
||
|
import {
|
||
|
GetClientSourceSelectList,
|
||
|
GetClientSourceDetailSelectList,
|
||
|
// -------------------------------------------
|
||
|
UpdateUserQuerySet,
|
||
|
GetUserQuerySet,
|
||
|
PageDataByBooking,
|
||
|
SendTrace,
|
||
|
getVesselInfoService,
|
||
|
GetPortlist,
|
||
|
GetPortloadlist,
|
||
|
BookingOrderBachUpdate,
|
||
|
GetCarrierlist,
|
||
|
DjyCustomerSuggest,
|
||
|
GetSysUserPage,
|
||
|
DjyCustomerpage,
|
||
|
GetCtn,
|
||
|
GetPackage,
|
||
|
Codeissuetypelist,
|
||
|
GetFrt,
|
||
|
GetService,
|
||
|
GetForwarderlist,
|
||
|
// DjyUserConfigMulti,
|
||
|
SeaExportBatchDel,
|
||
|
ExcuteShippingOrderCompareBatch,
|
||
|
GetTenantLineList,
|
||
|
downloadBookingConfirm,
|
||
|
downloadDraft,
|
||
|
checkUpdateManifestNo,
|
||
|
singleBCFileRead,
|
||
|
refreshSailingDate,
|
||
|
RefreshBillTrace,
|
||
|
SaveDataInList,
|
||
|
SaveBookingTxxp,
|
||
|
GetDraftCompareResultInfo,
|
||
|
BookingOrderDownload,
|
||
|
GetShippingOrderCompareResult,
|
||
|
GetWebData,
|
||
|
CancelServiceStatusByList,
|
||
|
SaveServiceStatusByList,
|
||
|
BachUpdateShipagency,
|
||
|
TxxpLink,
|
||
|
} from './api/BookingLedger.js'
|
||
|
import { useModal } from '/@/components/Modal'
|
||
|
import { DjyUserConfigGet, DjyUserConfigAdd } from './api/DjyUserConfig.js'
|
||
|
import { useAppStore } from '/@/store/modules/app'
|
||
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||
|
import { useRouter, useRoute } from 'vue-router'
|
||
|
|
||
|
const router = useRouter()
|
||
|
const route = useRoute()
|
||
|
const appStore = useAppStore()
|
||
|
const go = useGo()
|
||
|
const { notification } = useMessage()
|
||
|
let { ctx: that, proxy }: any = getCurrentInstance()
|
||
|
import { usePermissionStore } from '/@/store/modules/permission'
|
||
|
// -----------------------------------
|
||
|
import { BasicColumn, BasicTable, useTable } from '/@/components/Table'
|
||
|
import { BasicForm, useForm } from '/@/components/Form/index'
|
||
|
import { columns, searchFormSchema, FeeStatus } from '/@/views/operation/seaexport/columns'
|
||
|
|
||
|
const ListData = reactive<any>({
|
||
|
sourceId: [],
|
||
|
sourceDetailId: {},
|
||
|
})
|
||
|
|
||
|
const ConditionalList: Ref<any> = ref()
|
||
|
// 初始化 数据
|
||
|
async function init() {
|
||
|
const FnsourceId: API.DataResult = await GetClientSourceSelectList()
|
||
|
if (FnsourceId.succeeded) {
|
||
|
ListData.sourceId = []
|
||
|
let data: any = []
|
||
|
FnsourceId.data.forEach((e) => {
|
||
|
data.push({ label: e.sourceName, value: e.id })
|
||
|
})
|
||
|
ListData.sourceId = data
|
||
|
}
|
||
|
ListData.sourceId.forEach(async (item) => {
|
||
|
const FnsourceDetailId: any = await GetClientSourceDetailSelectList({
|
||
|
id: item.value,
|
||
|
})
|
||
|
if (FnsourceDetailId.succeeded) {
|
||
|
ListData.sourceDetailId[item.value] = []
|
||
|
let data: any = []
|
||
|
FnsourceDetailId.data.forEach((e) => {
|
||
|
data.push({ label: e.detailName, value: e.id })
|
||
|
})
|
||
|
ListData.sourceDetailId[item.value] = data
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
// 查询列表数据
|
||
|
async function getList(queryParam = {}, isInit = false, isAdd = 'normal', isAdv = false) {
|
||
|
console.log('getList')
|
||
|
}
|
||
|
// 创建搜索列表
|
||
|
const [registerForm, { getFieldsValue, resetFields, validateFields, setFieldsValue, validate }] =
|
||
|
useForm({
|
||
|
labelWidth: 80,
|
||
|
schemas: searchFormSchema,
|
||
|
showActionButtonGroup: false,
|
||
|
})
|
||
|
// 首字母转大写
|
||
|
function capitalizeFirstLetter(string) {
|
||
|
return string.charAt(0).toUpperCase() + string.slice(1)
|
||
|
}
|
||
|
// 创建列表
|
||
|
const [register, { reload, getForm, getPaginationRef, getSelectRows }] = useTable({
|
||
|
api: async (p) => {
|
||
|
init()
|
||
|
const res: API.DataResult = await PageDataByBooking(p)
|
||
|
return new Promise((resolve) => {
|
||
|
resolve({ data: [...res.data], total: res.count })
|
||
|
})
|
||
|
},
|
||
|
beforeFetch: () => {
|
||
|
var currentPageInfo: any = getPaginationRef()
|
||
|
const postParam: API.PageRequest = {
|
||
|
queryCondition: '',
|
||
|
pageCondition: {
|
||
|
pageIndex: currentPageInfo.current,
|
||
|
pageSize: currentPageInfo.pageSize,
|
||
|
sortConditions: [],
|
||
|
},
|
||
|
}
|
||
|
|
||
|
let condition: API.ConditionItem[] = []
|
||
|
|
||
|
Object.keys(getFieldsValue()).forEach((e) => {
|
||
|
if (getFieldsValue()[e]) {
|
||
|
if (e == 'etd') {
|
||
|
getFieldsValue()[e].forEach((t, i) => {
|
||
|
condition.push({
|
||
|
FieldName: capitalizeFirstLetter(e),
|
||
|
FieldValue: t,
|
||
|
ConditionalType: i == 0 ? 3 : 5,
|
||
|
})
|
||
|
})
|
||
|
} else {
|
||
|
condition.push({
|
||
|
FieldName: capitalizeFirstLetter(e),
|
||
|
FieldValue: getFieldsValue()[e],
|
||
|
ConditionalType: 1,
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
if (isAdvancedQuery.value) {
|
||
|
condition.push(ConditionalList.value)
|
||
|
}
|
||
|
if (moreNumVal.value) {
|
||
|
let ManyQueryData: any = { ConditionalList: [] }
|
||
|
moreNumVal.value
|
||
|
.replace(/\n|\r/g, ',')
|
||
|
.split(',')
|
||
|
.forEach((item) => {
|
||
|
ManyQueryData.ConditionalList.push({
|
||
|
Key: 0,
|
||
|
Value: { FieldName: 'mblno', FieldValue: item, ConditionalType: 1 },
|
||
|
})
|
||
|
})
|
||
|
|
||
|
condition.push(ManyQueryData)
|
||
|
}
|
||
|
|
||
|
postParam.queryCondition = JSON.stringify(condition)
|
||
|
return postParam
|
||
|
},
|
||
|
afterFetch: () => {
|
||
|
isAdvancedQuery.value = false
|
||
|
|
||
|
moreNumVisible.value = false
|
||
|
moreNumVal.value = ''
|
||
|
},
|
||
|
columns,
|
||
|
pagination: true,
|
||
|
bordered: true,
|
||
|
useSearchForm: true,
|
||
|
showTableSetting: true,
|
||
|
tableSetting: { size: false, fullScreen: false },
|
||
|
actionColumn: {
|
||
|
width: 80,
|
||
|
title: '操作',
|
||
|
dataIndex: 'action',
|
||
|
fixed: undefined,
|
||
|
},
|
||
|
})
|
||
|
// 返回列表文字
|
||
|
function RText(type, data) {
|
||
|
let Rdata = '-'
|
||
|
|
||
|
if (type == 'sourceId') {
|
||
|
ListData[type].forEach((item) => {
|
||
|
if (data.text == item.value) {
|
||
|
Rdata = item.label
|
||
|
}
|
||
|
})
|
||
|
} else if (type == 'sourceDetailId') {
|
||
|
if (ListData.sourceDetailId[data.record.sourceId]) {
|
||
|
ListData.sourceDetailId[data.record.sourceId].forEach((item) => {
|
||
|
if (data.text == item.value) {
|
||
|
Rdata = item.label
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
} else if (type == 'arFeeStatus' || type == 'apFeeStatus') {
|
||
|
FeeStatus.forEach((item) => {
|
||
|
if (data.text == item.value) {
|
||
|
Rdata = item.label
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
return Rdata
|
||
|
}
|
||
|
// 列设置按钮
|
||
|
function tableHeaderEdit() {
|
||
|
let setting: any = document.getElementsByClassName('anticon-setting')
|
||
|
console.log(setting)
|
||
|
|
||
|
setting[0].click()
|
||
|
|
||
|
// setTableForm.value.open()
|
||
|
}
|
||
|
// 刷新按钮
|
||
|
function tableRefreshFirst() {
|
||
|
let redo: any = document.getElementsByClassName('anticon-redo')
|
||
|
redo[0].click()
|
||
|
// const data = { ...formRes.value }
|
||
|
// nowFirst.value = true
|
||
|
// data.multisort = searchData.value.multisort
|
||
|
// searchData.value = JSON.parse(JSON.stringify(data))
|
||
|
// init(searchData.value)
|
||
|
// formRes.value = data
|
||
|
}
|
||
|
// 删除
|
||
|
function removeMoreFun() {
|
||
|
const select = getSelectRows()
|
||
|
if (select.length === 0) {
|
||
|
notification.error({ message: '请选择操作订单', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
const removeArr = select.map((item) => {
|
||
|
return item.id
|
||
|
})
|
||
|
deleteBookingOrder(removeArr)
|
||
|
}
|
||
|
// 删除方法
|
||
|
function deleteBookingOrder(arr) {
|
||
|
// let api = ''
|
||
|
// arr.forEach((e, i) => {
|
||
|
// if (i == 0) {
|
||
|
// api = `?Ids=${e}`
|
||
|
// } else {
|
||
|
// api = `${api}&Ids=${e}`
|
||
|
// }
|
||
|
// })
|
||
|
// console.log(api);
|
||
|
let api = []
|
||
|
arr.forEach((e, i) => {
|
||
|
api.push(e)
|
||
|
})
|
||
|
SeaExportBatchDel({ ids: api })
|
||
|
.then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
notification.success({ message: '删除成功', duration: 3 })
|
||
|
reload()
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
console.log(err)
|
||
|
})
|
||
|
}
|
||
|
// 批量编辑
|
||
|
function batchEditing() {
|
||
|
const select = getSelectRows()
|
||
|
if (select.length === 0) {
|
||
|
notification.error({ message: '请选择操作订单', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
const removeArr = select.map((item) => {
|
||
|
return item.id
|
||
|
})
|
||
|
openModal(true, { removeArr })
|
||
|
}
|
||
|
// 批量编辑 弹窗
|
||
|
const [registerModal, { openModal }] = useModal()
|
||
|
function BMSuccess() {
|
||
|
reload()
|
||
|
}
|
||
|
const isAdvancedQuery = ref(false)
|
||
|
//打开高级查询弹窗
|
||
|
function FnOpenAdvancedQuery() {
|
||
|
AdvancedQueryVisible.value = true
|
||
|
}
|
||
|
//关闭高级查询弹窗
|
||
|
function FnCancelAdvancedQuery() {
|
||
|
AdvancedQueryVisible.value = false
|
||
|
}
|
||
|
//执行高级查询
|
||
|
async function FnAdvancedQuery() {
|
||
|
let Api = (data) => {
|
||
|
let Obj: any = {}
|
||
|
let key: number = 0
|
||
|
console.log(data)
|
||
|
data.logicalOperator == 'and' ? (key = 0) : (key = 1)
|
||
|
if (data.conditions.length) {
|
||
|
if (!Obj.ConditionalList) {
|
||
|
Obj.ConditionalList = []
|
||
|
}
|
||
|
|
||
|
let Arr: any[] = []
|
||
|
data.conditions.forEach((item) => {
|
||
|
Arr.push({
|
||
|
Key: key,
|
||
|
Value: {
|
||
|
FieldName: item.field,
|
||
|
FieldValue: item.operator,
|
||
|
ConditionalType: item.value,
|
||
|
},
|
||
|
})
|
||
|
})
|
||
|
Obj.ConditionalList.push(...Arr)
|
||
|
}
|
||
|
if (data.groups.length) {
|
||
|
if (!Obj.ConditionalList) {
|
||
|
Obj.ConditionalList = []
|
||
|
}
|
||
|
let Arr: any[] = []
|
||
|
data.groups.forEach((item) => {
|
||
|
Arr.push({
|
||
|
Key: key,
|
||
|
Value: Api(item),
|
||
|
})
|
||
|
})
|
||
|
Obj.ConditionalList.push(...Arr)
|
||
|
}
|
||
|
return Obj
|
||
|
}
|
||
|
|
||
|
ConditionalList.value = {
|
||
|
ConditionalList: Api(AdvancedQueryData.value).ConditionalList,
|
||
|
}
|
||
|
|
||
|
let ApiData = {
|
||
|
permissionId: permissionId.value,
|
||
|
content: JSON.stringify(AdvancedQueryData.value),
|
||
|
}
|
||
|
const res: API.DataResult = await UpdateUserQuerySet(ApiData)
|
||
|
if (res.succeeded) {
|
||
|
console.log(res)
|
||
|
isAdvancedQuery.value = true
|
||
|
reload()
|
||
|
// getList(searchData.value, false, 'normal', true)
|
||
|
// FnCancelAdvancedQuery()
|
||
|
}
|
||
|
}
|
||
|
// 查询
|
||
|
function tableRefresh() {
|
||
|
isAdvancedQuery.value = false
|
||
|
reload()
|
||
|
}
|
||
|
onMounted(() => {
|
||
|
// 绑定监听事件
|
||
|
window.addEventListener('keydown', keyDown)
|
||
|
})
|
||
|
onUnmounted(() => {
|
||
|
// 销毁事件
|
||
|
window.removeEventListener('keydown', keyDown, false)
|
||
|
})
|
||
|
// 回车 查询
|
||
|
function keyDown(e) {
|
||
|
if (e.keyCode === 13 || e.keyCode === 100) {
|
||
|
tableRefresh()
|
||
|
}
|
||
|
}
|
||
|
// 重置
|
||
|
function tableReset() {
|
||
|
resetFields()
|
||
|
setTimeout(() => {
|
||
|
reload()
|
||
|
}, 100)
|
||
|
}
|
||
|
const moreNumVal = ref('') // 多提单号绑定值
|
||
|
const moreNumVisible = ref(false) //多提单号弹窗
|
||
|
// 打开多提单号查询
|
||
|
function tableMoreRefresh() {
|
||
|
moreNumVal.value = ''
|
||
|
moreNumVisible.value = !moreNumVisible.value
|
||
|
}
|
||
|
// 多提单号 确定
|
||
|
function moreNumSubmit() {
|
||
|
reload()
|
||
|
}
|
||
|
// 多提单号 取消
|
||
|
function moreNumCancel() {
|
||
|
moreNumVisible.value = false
|
||
|
}
|
||
|
// -----------------------------------
|
||
|
const formInitData = [
|
||
|
{ title: '主提单号', align: 'center', width: '90', label: 'MBLNO', type: 'input' },
|
||
|
{ title: '分提单号', align: 'center', width: '90', label: 'HBLNO', type: 'input' },
|
||
|
{ title: '订舱编号', align: 'center', width: '90', label: 'CUSTNO', type: 'input' },
|
||
|
{
|
||
|
title: '开船日期',
|
||
|
align: 'center',
|
||
|
width: 160,
|
||
|
label: 'ETD',
|
||
|
type: 'dateRange',
|
||
|
resLabel: ['BETD', 'EETD'],
|
||
|
},
|
||
|
{
|
||
|
title: '实际开船日期',
|
||
|
align: 'center',
|
||
|
width: 160,
|
||
|
label: 'ATD',
|
||
|
type: 'dateRange',
|
||
|
resLabel: ['BATD', 'EATD'],
|
||
|
},
|
||
|
{
|
||
|
title: '船名',
|
||
|
align: 'center',
|
||
|
width: 120,
|
||
|
label: 'VESSEL',
|
||
|
type: 'select',
|
||
|
showLabel: 'vessel',
|
||
|
},
|
||
|
]
|
||
|
const formMoreTableData = ref('')
|
||
|
const formTableData = ref(JSON.parse(JSON.stringify(initData.columns)))
|
||
|
|
||
|
const formatFlag = ref(false)
|
||
|
|
||
|
const AdvancedQueryVisible = ref(false)
|
||
|
const advanced = ref(false)
|
||
|
const goodStatusShow = ref(false)
|
||
|
const goodStatusData = ref(null)
|
||
|
const spinning = ref(false)
|
||
|
const formData = ref(formInitData)
|
||
|
const formRes = ref({})
|
||
|
const ResetType = ref(true)
|
||
|
const nowFirst = ref(false)
|
||
|
const searchData = ref({ multisort: [] })
|
||
|
const gridOptions = reactive({
|
||
|
border: false,
|
||
|
resizable: true,
|
||
|
showOverflow: true,
|
||
|
loading: true,
|
||
|
stripe: true,
|
||
|
round: true,
|
||
|
autoResize: true,
|
||
|
align: 'left',
|
||
|
scrollY: { enabled: true },
|
||
|
columnConfig: { resizable: true },
|
||
|
importConfig: {},
|
||
|
exportConfig: {},
|
||
|
pagerConfig: {
|
||
|
total: 0,
|
||
|
currentPage: 1,
|
||
|
pageSize: 20,
|
||
|
pageSizes: [10, 20, 50, 100, 200, 500],
|
||
|
},
|
||
|
columns: [],
|
||
|
data: [],
|
||
|
})
|
||
|
const tableOrderLabel = ref('')
|
||
|
const tableOrderType = ref('')
|
||
|
const carrierRadio = ref('CMA')
|
||
|
const RecentlyCarrierData = ref([])
|
||
|
const addNum = ref(0)
|
||
|
const RcarrierData = ref([])
|
||
|
const radioStyle = reactive({
|
||
|
display: 'block',
|
||
|
height: '50px',
|
||
|
lineHeight: '50px',
|
||
|
})
|
||
|
|
||
|
const copyMoreForm = reactive({
|
||
|
number: 1,
|
||
|
})
|
||
|
|
||
|
const RefeditingForm = ref()
|
||
|
const editingForm = reactive({
|
||
|
vessel: '',
|
||
|
etd: '',
|
||
|
voynoinner: '',
|
||
|
voyno: '',
|
||
|
portDischarge: '',
|
||
|
portDischargeId: '',
|
||
|
destination: '',
|
||
|
destinationid: '',
|
||
|
closingdate: '',
|
||
|
closedocdate: '',
|
||
|
})
|
||
|
const WebVessel = ref('')
|
||
|
const vesselData = ref([])
|
||
|
const portDischargeData = ref([])
|
||
|
const destinationData = ref([])
|
||
|
const shipagencyFlag = ref(false)
|
||
|
const shipagency = ref('')
|
||
|
const shipagencyData = ref([])
|
||
|
const shipagencyLoad = ref(false)
|
||
|
const txxpLoading = ref(false)
|
||
|
const txxpFlag = ref(false)
|
||
|
const txxpForm = ref({})
|
||
|
const traceModalVisible = ref(false)
|
||
|
const traceValue = ref([])
|
||
|
const traceOptions = ref([
|
||
|
{ label: '起运港', value: '1' },
|
||
|
{ label: '目的港', value: '2' },
|
||
|
])
|
||
|
const bcFileFlag = ref(false)
|
||
|
const bcFile = ref({ ext: [] })
|
||
|
const bcObj = ref({})
|
||
|
const RefimportBc = ref()
|
||
|
const RefimportBcMore = ref()
|
||
|
const xGrid = ref()
|
||
|
const tableHeight = ref(0)
|
||
|
const setForm = ref()
|
||
|
const formMoreData = ref()
|
||
|
const formAllData = ref([])
|
||
|
const formBtnCol = ref(8)
|
||
|
const sortLabelList = ref([])
|
||
|
const editRow = ref({})
|
||
|
const serviceFd = ref('')
|
||
|
const serviceFlag = ref(false)
|
||
|
const webData = ref('')
|
||
|
const webDataFlag = ref(false)
|
||
|
const webDataTitle = ref('')
|
||
|
const remarkScreenX = ref(0)
|
||
|
const remarkScreenY = ref(0)
|
||
|
const remarkData = ref()
|
||
|
const remarkShow = ref(false)
|
||
|
const TaskShippingOrderCompareData = ref({
|
||
|
showDetailList: '',
|
||
|
total: '',
|
||
|
isExistsDiff: false,
|
||
|
})
|
||
|
const TaskShippingOrderCompareVisible = ref(false)
|
||
|
const pdfUrl = ref('')
|
||
|
const formatSheet = ref({
|
||
|
showDetailList: [],
|
||
|
total: '',
|
||
|
isShowCntall: false,
|
||
|
})
|
||
|
const formatSheetVisible = ref(false)
|
||
|
const pdfLoading = ref(false)
|
||
|
const formatPdf = ref('')
|
||
|
const goodStatusScreenX = ref(0)
|
||
|
const goodStatusScreenY = ref(0)
|
||
|
const goodStatusSeat = ref('bottom')
|
||
|
const screenWidth = ref(document.body.clientWidth)
|
||
|
const RefbcBox = ref()
|
||
|
const setTableForm = ref()
|
||
|
const showColumns = ref({})
|
||
|
const fromTableAllData = ref({})
|
||
|
const AdvancedQueryData = ref<FilterRules>({ logicalOperator: 'and', conditions: [], groups: [] })
|
||
|
const fields = ref<Field[]>([])
|
||
|
const permissionId = ref<String>('')
|
||
|
|
||
|
// ========
|
||
|
onBeforeRouteLeave((to, from, next) => {
|
||
|
appStore.setbookingGridOptions(gridOptions)
|
||
|
appStore.setsaveNeedNumber(null)
|
||
|
next()
|
||
|
})
|
||
|
watch(
|
||
|
() => route,
|
||
|
(nD, oD) => {
|
||
|
console.log(nD, nD.name)
|
||
|
|
||
|
if (nD.name === 'booking_ledger') {
|
||
|
if (appStore.getsaveNeedNumber !== null) {
|
||
|
let index = -1
|
||
|
gridOptions.data.forEach((ite, inde) => {
|
||
|
if (ite.id === appStore.getsaveNeedNumber) {
|
||
|
index = inde
|
||
|
}
|
||
|
})
|
||
|
if (index !== -1) {
|
||
|
getListByone(appStore.getsaveNeedNumber, index)
|
||
|
}
|
||
|
}
|
||
|
if (appStore.getfirstFlag && appStore.getsaveNeedNumber === null && !appStore.getdeleteId) {
|
||
|
getList(searchData.value)
|
||
|
}
|
||
|
if (appStore.getdeleteId !== null) {
|
||
|
let index = -1
|
||
|
gridOptions.data.forEach((ite, inde) => {
|
||
|
if (ite.id === appStore.getdeleteId) {
|
||
|
index = inde
|
||
|
}
|
||
|
})
|
||
|
console.log(index)
|
||
|
if (index !== -1) {
|
||
|
gridOptions.data.splice(index, 1)
|
||
|
}
|
||
|
}
|
||
|
appStore.setinBookingDetailsSave(false)
|
||
|
}
|
||
|
},
|
||
|
{ deep: true },
|
||
|
)
|
||
|
|
||
|
createdInit()
|
||
|
//------ ZTH 状态不全 后期删掉 走 上面的createdInit------
|
||
|
getList()
|
||
|
// ----------------------------------------------------
|
||
|
const arr = localStorage.getItem('bookingSetting')
|
||
|
? JSON.parse(localStorage.getItem('bookingSetting'))
|
||
|
: []
|
||
|
if (arr.length > 0) {
|
||
|
gridOptions.columns = arr
|
||
|
} else {
|
||
|
gridOptions.columns = JSON.parse(JSON.stringify(initData.columns))
|
||
|
}
|
||
|
onMounted(() => {
|
||
|
onresize()
|
||
|
})
|
||
|
// ====================================================
|
||
|
// 新建
|
||
|
function addBooking() {
|
||
|
addNum.value = Math.round(Math.random() * 1000)
|
||
|
go(`/BookingDetail?addNum=${addNum.value}`)
|
||
|
}
|
||
|
// 复制
|
||
|
function copyBooking() {
|
||
|
const select = getSelectRows()
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
if (pkIdArr.length > 1) {
|
||
|
notification.error({ message: '请选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
} else if (pkIdArr.length === 0) {
|
||
|
notification.error({ message: '请至少选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
go(`/BookingDetail?id=${pkIdArr[0]}&isCopy=${true}`)
|
||
|
}
|
||
|
|
||
|
// 复制多票
|
||
|
const copyMoreFlag = ref(false)
|
||
|
function copyBookingMore() {
|
||
|
const select = getSelectRows()
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
if (pkIdArr.length > 1) {
|
||
|
notification.error({ message: '请选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
} else if (pkIdArr.length === 0) {
|
||
|
notification.error({ message: '请至少选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
copyMoreFlag.value = true
|
||
|
}
|
||
|
const RefcopyMoreForm = ref()
|
||
|
function handleSubmitCopyMore(e) {
|
||
|
const select = getSelectRows()
|
||
|
const pkIdArr = select.map((item) => {
|
||
|
return item.id
|
||
|
})
|
||
|
for (let index = 0; index < copyMoreForm.number; index++) {
|
||
|
setTimeout(() => {
|
||
|
console.log(`/?id=${pkIdArr[0]}&isCopy=${true}©Id=${index}`)
|
||
|
router.push({
|
||
|
path: '/BookingDetail',
|
||
|
query: { id: pkIdArr[0], isCopy: true, copyId: index },
|
||
|
})
|
||
|
}, 100)
|
||
|
}
|
||
|
copyMoreFlag.value = false
|
||
|
}
|
||
|
// ====================================================
|
||
|
function getListByone(listId, listIndex) {
|
||
|
PageDataByBooking({ id: listId }).then((res) => {
|
||
|
const item = res.data[0]
|
||
|
const bookstatus = [
|
||
|
{ staCode: 'sta_cangdan', isChecked: false },
|
||
|
{ staCode: 'sta_haifang', isChecked: false },
|
||
|
{ staCode: 'sta_zhuangzai', isChecked: false },
|
||
|
{ staCode: 'sta_mafang', isChecked: false },
|
||
|
{ staCode: 'sta_zhuangchuan', isChecked: false },
|
||
|
{ staCode: 'sta_atd', isChecked: false },
|
||
|
]
|
||
|
if (item.bookstatus.length > 0) {
|
||
|
bookstatus.map((book, bindex) => {
|
||
|
item.bookstatus.map((ite, index) => {
|
||
|
if (ite.staCode === book.staCode) {
|
||
|
bookstatus[bindex] = ite
|
||
|
bookstatus[bindex].isChecked = true
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
if (item.bsstatusname) {
|
||
|
if (appStore.getstatusDIct) {
|
||
|
appStore.getstatusDIct.forEach((ite) => {
|
||
|
if (ite.name == item.bsstatusname) {
|
||
|
item.bsstatusnameColor = ite.remark
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
item.bookstatus = bookstatus
|
||
|
item.refshYzitemLoad = false
|
||
|
item.webDataLoad = false
|
||
|
item.dzmarkLoading = false
|
||
|
item.czmarkLoading = false
|
||
|
item.custnoLoading = false
|
||
|
item.sqxsLoading = false
|
||
|
item.ponoLoading = false
|
||
|
item.rowCzMark = false
|
||
|
item.rowSqxs = false
|
||
|
item.rowPono = false
|
||
|
item.rowCustno = false
|
||
|
item.rowDzMark = false
|
||
|
item.atdLoading = false
|
||
|
item.serviceLoad = false
|
||
|
if (!item.shenQingXiangShi) {
|
||
|
item.shenQingXiangShi = ''
|
||
|
}
|
||
|
let hasGoods = 0
|
||
|
item.goodsStatusList.map((gitem, gindex) => {
|
||
|
if (gitem.finishTime || gitem.remark) {
|
||
|
hasGoods++
|
||
|
}
|
||
|
})
|
||
|
item.hasGoods = hasGoods
|
||
|
gridOptions.data.listIndex = item
|
||
|
xGrid.value.reloadData(gridOptions.data)
|
||
|
xGrid.value.setCurrentRow(gridOptions.data[listIndex])
|
||
|
})
|
||
|
}
|
||
|
async function createdInit() {
|
||
|
showColumns.value = JSON.parse(JSON.stringify(initData.columns))
|
||
|
formAllData.value = JSON.parse(JSON.stringify(initData.condAllData))
|
||
|
fromTableAllData.value = JSON.parse(JSON.stringify(initData.columnsAllData))
|
||
|
tableHeight.value = document.body.clientHeight - 230
|
||
|
const res: API.DataResult = await getColumnsByClient({
|
||
|
tableViewName: 'op_sea_export',
|
||
|
})
|
||
|
const fullPath = ref(router.currentRoute.value.fullPath)
|
||
|
usePermissionStore().getWrouteList.forEach((item: Record<any, any>) => {
|
||
|
item.children[0].children?.forEach((item2: Record<any, any>) => {
|
||
|
if (fullPath.value.indexOf(item2.path) != -1) {
|
||
|
permissionId.value = item2.id
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
if (res.succeeded) {
|
||
|
console.log(res)
|
||
|
|
||
|
let data: any[] = []
|
||
|
res.data.forEach((item) => {
|
||
|
data.push({
|
||
|
id: item.dbColumnName,
|
||
|
title: item.columnDescription,
|
||
|
name: 'Select',
|
||
|
value: null,
|
||
|
props: {
|
||
|
disabled: false,
|
||
|
multiple: false,
|
||
|
// placeholder: '请选择请假事由',
|
||
|
options: [],
|
||
|
},
|
||
|
style: {
|
||
|
width: '100%',
|
||
|
},
|
||
|
})
|
||
|
})
|
||
|
|
||
|
fields.value = data
|
||
|
}
|
||
|
FnGetUserQuerySet()
|
||
|
// getConfigUser(true)
|
||
|
}
|
||
|
async function FnGetUserQuerySet() {
|
||
|
const res: API.DataResult = await GetUserQuerySet({
|
||
|
permissionId: permissionId.value,
|
||
|
})
|
||
|
if (res.succeeded) {
|
||
|
console.log(res)
|
||
|
AdvancedQueryData.value = JSON.parse(res.data.content)
|
||
|
}
|
||
|
}
|
||
|
// function getConfigUser(isInit = false) {
|
||
|
// const query = {
|
||
|
// typeArr: ['booking_list_cond', 'booking_list_column', 'booking_list_page', 'booking_sort'],
|
||
|
// }
|
||
|
// // DjyUserConfigMulti(this.$qs.stringify(query, { arrayFormat: 'repeat' })).then((res) => {
|
||
|
// DjyUserConfigMulti(JSON.stringify(query, { arrayFormat: 'repeat' })).then((res) => {
|
||
|
// const $data = {}
|
||
|
// res.data.map((item, index) => {
|
||
|
// switch (item.type) {
|
||
|
// case 'booking_list_cond':
|
||
|
// $data.booking_list_cond = item
|
||
|
// break
|
||
|
// case 'booking_list_column':
|
||
|
// $data.booking_list_column = item
|
||
|
// break
|
||
|
// case 'booking_sort':
|
||
|
// setSort(item)
|
||
|
// break
|
||
|
// case 'booking_list_page':
|
||
|
// setPageSize(item)
|
||
|
// break
|
||
|
// }
|
||
|
// })
|
||
|
|
||
|
// if (Object.keys($data).includes('booking_list_cond')) {
|
||
|
// setFormData($data.booking_list_cond, false, true)
|
||
|
// } else {
|
||
|
// setFormData({}, false, true)
|
||
|
// }
|
||
|
// if (Object.keys($data).includes('booking_list_column')) {
|
||
|
// setTableList($data.booking_list_column)
|
||
|
// } else {
|
||
|
// setTableList({})
|
||
|
// }
|
||
|
// })
|
||
|
// }
|
||
|
function setTableList(data) {
|
||
|
if (Object.keys(data).length > 0 && JSON.parse(data.configJson).length) {
|
||
|
formTableData.value = JSON.parse(data.configJson)
|
||
|
formTableData.value.forEach((item) => {
|
||
|
if (!item.slots && item.field === 'bsstatusname') {
|
||
|
item.slots = { default: 'bsstatusname' }
|
||
|
}
|
||
|
if (item.field === 'zhanCangFlag') {
|
||
|
item.width = 35
|
||
|
}
|
||
|
if (item.field === 'custno') {
|
||
|
item.slots = { default: 'custno' }
|
||
|
}
|
||
|
if (item.field === 'shenQingXiangShi') {
|
||
|
item.slots = { default: 'shenQingXiangShi' }
|
||
|
}
|
||
|
if (item.field === 'pono') {
|
||
|
item.slots = { default: 'pono' }
|
||
|
}
|
||
|
if (item.label === 'LINENAME') {
|
||
|
item.field = 'lineName'
|
||
|
}
|
||
|
if (item.label === 'ETA') {
|
||
|
item.title = '目的港ETA'
|
||
|
}
|
||
|
if (item.label === 'isVGM') {
|
||
|
item.title = 'VGM'
|
||
|
item.width = 60
|
||
|
}
|
||
|
if (item.label === 'IsZZFX') {
|
||
|
item.title = '装载'
|
||
|
item.width = 50
|
||
|
}
|
||
|
if (item.label === 'IsCanDan') {
|
||
|
item.title = '舱单'
|
||
|
item.width = 50
|
||
|
}
|
||
|
})
|
||
|
const nowTableArr = formTableData.value.map((item, index) => {
|
||
|
if (item.field === 'operate') {
|
||
|
item.width = 60
|
||
|
}
|
||
|
return item.field
|
||
|
})
|
||
|
gridOptions.columns = JSON.parse(JSON.stringify(formTableData.value))
|
||
|
localStorage.setItem('bookingSetting', JSON.stringify(gridOptions.columns))
|
||
|
const moreTableArr = []
|
||
|
fromTableAllData.value.map((item, index) => {
|
||
|
if (!nowTableArr.includes(item.field)) {
|
||
|
moreTableArr.push(item)
|
||
|
}
|
||
|
})
|
||
|
formMoreTableData.value = moreTableArr
|
||
|
// that.$forceUpdate()
|
||
|
} else {
|
||
|
const nowTableArr = formTableData.value.map((item, index) => {
|
||
|
return item.field
|
||
|
})
|
||
|
const moreTableArr = []
|
||
|
fromTableAllData.value.map((item, index) => {
|
||
|
if (!nowTableArr.includes(item.field)) {
|
||
|
moreTableArr.push(item)
|
||
|
}
|
||
|
})
|
||
|
formMoreTableData.value = moreTableArr
|
||
|
// that.$forceUpdate()
|
||
|
}
|
||
|
}
|
||
|
function setPageSize(data) {
|
||
|
if (data && JSON.parse(data.configJson)) {
|
||
|
gridOptions.pagerConfig.pageSize = JSON.parse(data.configJson).pageSize
|
||
|
// that.$forceUpdate()
|
||
|
} else {
|
||
|
getList({}, true)
|
||
|
}
|
||
|
}
|
||
|
function setSort(item) {
|
||
|
if (Array.isArray(JSON.parse(item.configJson))) {
|
||
|
sortLabelList.value = JSON.parse(item.configJson)
|
||
|
if (sortLabelList.value.length > 0) {
|
||
|
const key = JSON.parse(item.configJson)[0].sortField
|
||
|
const sort = JSON.parse(item.configJson)[0].descSort
|
||
|
tableOrderLabel.value = key || ''
|
||
|
tableOrderType.value = sort ? 'desc' : 'asc'
|
||
|
const newArr = []
|
||
|
sortLabelList.value.forEach((item) => {
|
||
|
newArr.push({
|
||
|
sortField: item.sortField,
|
||
|
descSort: item.descSort,
|
||
|
})
|
||
|
})
|
||
|
searchData.value.multisort = newArr
|
||
|
xGrid.value.sort(key, sort)
|
||
|
} else {
|
||
|
tableOrderLabel.value = ''
|
||
|
tableOrderType.value = ''
|
||
|
xGrid.value.clearSort()
|
||
|
}
|
||
|
} else {
|
||
|
sortLabelList.value = []
|
||
|
const key = JSON.parse(item.configJson).key
|
||
|
const sort = JSON.parse(item.configJson).sort ? 'desc' : 'asc'
|
||
|
tableOrderLabel.value = key || ''
|
||
|
tableOrderType.value = sort ? 'desc' : 'asc'
|
||
|
xGrid.value.sort(key, sort)
|
||
|
}
|
||
|
}
|
||
|
function onresize() {
|
||
|
window.onresize = () => {
|
||
|
screenWidth.value = document.body.clientWidth
|
||
|
}
|
||
|
}
|
||
|
function submitSort(arr) {
|
||
|
const newArr = []
|
||
|
if (arr.length > 0) {
|
||
|
arr.forEach((item) => {
|
||
|
newArr.push({
|
||
|
sortField: item.field,
|
||
|
descSort: item.descSort,
|
||
|
})
|
||
|
})
|
||
|
searchData.value.multisort = newArr
|
||
|
DjyUserConfigAdd({
|
||
|
type: 'booking_sort',
|
||
|
configJson: JSON.stringify(newArr),
|
||
|
}).then((res) => {
|
||
|
const key = newArr[0].sortField
|
||
|
const sort = newArr[0].descSort
|
||
|
sortLabelList.value = newArr
|
||
|
tableOrderLabel.value = key || ''
|
||
|
tableOrderType.value = sort ? 'desc' : 'asc'
|
||
|
xGrid.value.sort(key, sort)
|
||
|
getList(searchData.value)
|
||
|
})
|
||
|
} else {
|
||
|
DjyUserConfigAdd({
|
||
|
type: 'booking_sort',
|
||
|
configJson: JSON.stringify([]),
|
||
|
}).then((res) => {
|
||
|
searchData.value.multisort = []
|
||
|
tableOrderLabel.value = ''
|
||
|
tableOrderType.value = ''
|
||
|
getList(searchData.value)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
function submitTableForm(data) {
|
||
|
gridOptions.columns = JSON.parse(JSON.stringify(data))
|
||
|
setTableForm.value.handleCancel()
|
||
|
editColumnsSave(gridOptions.columns)
|
||
|
localStorage.setItem('bookingSetting', JSON.stringify(gridOptions.columns))
|
||
|
}
|
||
|
|
||
|
function handleCopy() {
|
||
|
notification.success({ message: '复制成功', duration: 3 })
|
||
|
const text = RefbcBox.innerText
|
||
|
var cInput = document.createElement('input')
|
||
|
cInput.value = text
|
||
|
document.body.appendChild(cInput)
|
||
|
cInput.select() // 选取文本框内容
|
||
|
document.execCommand('copy')
|
||
|
document.body.removeChild(cInput)
|
||
|
}
|
||
|
|
||
|
function TaskShippingOrderCompareHandleCancel() {
|
||
|
TaskShippingOrderCompareVisible.value = false
|
||
|
}
|
||
|
function toggleAdvanced() {
|
||
|
advanced.value = !advanced.value
|
||
|
// // that.$forceUpdate()
|
||
|
// const start = new Date().getTime()
|
||
|
// console.log('== 点击展开 ==', start, formBtnCol)
|
||
|
// if (!advanced.value) {
|
||
|
// const len = searchFormSchema.length % 4
|
||
|
// if (searchFormSchema.length === 4 || searchFormSchema.length > 4) {
|
||
|
// formBtnCol.value = 8
|
||
|
// } else {
|
||
|
// formBtnCol.value = 24 - len * 4
|
||
|
// }
|
||
|
// } else {
|
||
|
// const len = searchFormSchema.length % 6
|
||
|
// // formBtnCol.value = 24 - len * 4
|
||
|
// formBtnCol.value = 24 - len * 4 === 4 ? 24 : 24 - len * 4
|
||
|
// }
|
||
|
// console.log('== 展开结束 ==', new Date().getTime() - start, formBtnCol)
|
||
|
}
|
||
|
function formSetting() {
|
||
|
setForm.value.open()
|
||
|
}
|
||
|
|
||
|
function pageClick() {
|
||
|
goodStatusShow.value = false
|
||
|
goodStatusData.value = null
|
||
|
}
|
||
|
function formChange(data) {
|
||
|
const { form, value } = data
|
||
|
if (form.type === 'input') {
|
||
|
formRes.value[form.label] = value
|
||
|
} else if (form.type === 'date') {
|
||
|
formRes.value[form.label] = value
|
||
|
} else if (form.type === 'dateRange') {
|
||
|
formRes.value[form.resLabel[0]] = value[0] || ''
|
||
|
formRes.value[form.resLabel[1]] = value[1] || ''
|
||
|
} else if (form.type === 'select') {
|
||
|
formRes.value[form.label] = value
|
||
|
} else if (form.type === 'complete') {
|
||
|
formRes.value[form.label] = value
|
||
|
} else if (form.type === 'selectTree') {
|
||
|
formRes.value[form.label] = value
|
||
|
} else if (form.type === 'multiple') {
|
||
|
if (value.length == 0) {
|
||
|
formRes.value[form.label] = ''
|
||
|
} else {
|
||
|
formRes.value[form.label] = value
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// that.$forceUpdate()
|
||
|
}
|
||
|
function pressEnterFun() {
|
||
|
tableRefresh()
|
||
|
}
|
||
|
|
||
|
function getCompleteListFun({ form, value }) {
|
||
|
let query = {}
|
||
|
if (
|
||
|
[
|
||
|
'PORTDISCHARGE',
|
||
|
'PORTLOAD',
|
||
|
'PLACERECEIPT',
|
||
|
'DESTINATION',
|
||
|
'PLACEDELIVERY',
|
||
|
'PAYABLEAT',
|
||
|
'BLFRT',
|
||
|
'ISSUEPLACE',
|
||
|
'PREPARDAT',
|
||
|
'SERVICE',
|
||
|
'SHIPAGENCY',
|
||
|
].includes(form.label)
|
||
|
) {
|
||
|
// 船公司 卸货港
|
||
|
query = {
|
||
|
KeyWord: value,
|
||
|
}
|
||
|
} else if (form.label === 'CUSTOMERNAME') {
|
||
|
// 客户/ 委托单位
|
||
|
query = {
|
||
|
KeyWord: value,
|
||
|
type: 'consignor',
|
||
|
}
|
||
|
} else if (form.label === 'FORWARDER') {
|
||
|
// 订舱代理
|
||
|
query = {
|
||
|
KeyWord: value,
|
||
|
type: 'booking_agent',
|
||
|
}
|
||
|
} else if (['SALE', 'CUSTSERVICE', 'DOC', 'ROUTE', 'OP'].includes(form.label)) {
|
||
|
// 销售 、 揽货人, 航线操作
|
||
|
query = {
|
||
|
name: value,
|
||
|
}
|
||
|
} else if (form.label === 'CUSTOMSER') {
|
||
|
// 报关行
|
||
|
query = {
|
||
|
SearchValue: value,
|
||
|
PropString: 'customs_broker',
|
||
|
}
|
||
|
} else if (form.label === 'AGENTID') {
|
||
|
query = {
|
||
|
SearchValue: value,
|
||
|
PropString: 'out_agent',
|
||
|
}
|
||
|
} else if (form.label === 'TRUCKER') {
|
||
|
query = {
|
||
|
SearchValue: value,
|
||
|
PropString: 'fleet',
|
||
|
}
|
||
|
} else if (form.label === 'VESSEL') {
|
||
|
const etdStart = moment().subtract(3, 'days').format('YYYY-MM-DD')
|
||
|
const etdEnd = moment().add(3, 'days').format('YYYY-MM-DD')
|
||
|
query = {
|
||
|
KeyWord: value,
|
||
|
sortField: 'etd',
|
||
|
descSort: true,
|
||
|
etdStart: etdStart,
|
||
|
etdEnd: etdEnd,
|
||
|
}
|
||
|
}
|
||
|
const fun = emnuCompleteApi(form.label)
|
||
|
if (fun) {
|
||
|
getFromSelectData(emnuCompleteApi(form.label), query).then((data) => {
|
||
|
if (['CUSTOMERNAME', 'FORWARDER', 'CUSTOMSER', 'AGENTID', 'TRUCKER'].includes(form.label)) {
|
||
|
that.$refs[`fromlabel-${form.label}`][0].$data.dataSourceList = data.rows
|
||
|
} else if (['VESSEL'].includes(form.label)) {
|
||
|
const map = new Map()
|
||
|
for (const item of data) {
|
||
|
if (!map.has(item.vessel)) {
|
||
|
map.set(item.vessel, item)
|
||
|
}
|
||
|
}
|
||
|
that.$refs[`fromlabel-${form.label}`][0].$data.dataSourceList = [...map.values()]
|
||
|
} else {
|
||
|
that.$refs[`fromlabel-${form.label}`][0].$data.dataSourceList = data
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
function emnuCompleteApi(type) {
|
||
|
switch (type) {
|
||
|
case 'VESSEL':
|
||
|
return getVesselInfoService
|
||
|
case 'CUSTOMERNAME':
|
||
|
return DjyCustomerSuggest
|
||
|
case 'FORWARDER':
|
||
|
return DjyCustomerSuggest
|
||
|
case 'PORTDISCHARGE': // 卸货港
|
||
|
return GetPortlist
|
||
|
case 'PORTLOAD': // 装货港
|
||
|
return GetPortloadlist
|
||
|
case 'PLACERECEIPT': // 收货地
|
||
|
return GetPortloadlist
|
||
|
case 'DESTINATION': // 目的地
|
||
|
return GetPortlist
|
||
|
case 'PLACEDELIVERY': // 交货地
|
||
|
return GetPortlist
|
||
|
case 'SALE':
|
||
|
return GetSysUserPage
|
||
|
case 'CUSTSERVICE':
|
||
|
return GetSysUserPage
|
||
|
case 'ROUTE':
|
||
|
return GetSysUserPage
|
||
|
// case 'OP':
|
||
|
// return GetSysUserPage
|
||
|
case 'DOC':
|
||
|
return GetSysUserPage
|
||
|
case 'CUSTOMSER':
|
||
|
return DjyCustomerpage
|
||
|
case 'PAYABLEAT':
|
||
|
return GetPortlist
|
||
|
case 'BLFRT':
|
||
|
return GetFrt
|
||
|
case 'ISSUEPLACE':
|
||
|
return GetPortloadlist
|
||
|
case 'PREPARDAT':
|
||
|
return GetPortloadlist
|
||
|
case 'SERVICE':
|
||
|
return GetService
|
||
|
case 'AGENTID':
|
||
|
return DjyCustomerpage
|
||
|
case 'TRUCKER':
|
||
|
return DjyCustomerpage
|
||
|
case 'SHIPAGENCY':
|
||
|
return GetForwarderlist
|
||
|
}
|
||
|
}
|
||
|
function getFromSelectData(func, ...args) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
func(...args).then((res) => {
|
||
|
if (res.code === 200) {
|
||
|
resolve(res.data)
|
||
|
} else {
|
||
|
reject(res)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
function getSelectFirst({ form, index, value }) {
|
||
|
const fun = emnuSelectApi(form.label)
|
||
|
if (fun) {
|
||
|
getFromSelectData(fun).then((data) => {
|
||
|
formData.value[index].dataList = data
|
||
|
that.$refs[`fromlabel-${form.label}`][0].$data.dataList = data
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
function emnuSelectApi(type) {
|
||
|
switch (type) {
|
||
|
case 'CARRIER':
|
||
|
return GetCarrierlist
|
||
|
// case 'YARDID':
|
||
|
// return GetYardlist
|
||
|
case 'CNTRTOTAL':
|
||
|
return GetCtn
|
||
|
case 'KINDPKGS':
|
||
|
return GetPackage
|
||
|
case 'ISSUETYPE':
|
||
|
return Codeissuetypelist
|
||
|
case 'lineName':
|
||
|
return GetTenantLineList
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function editingHandleOk() {
|
||
|
RefeditingForm.value.validateFields((errors, values) => {
|
||
|
if (!errors) {
|
||
|
values.id = []
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
select.forEach((item) => {
|
||
|
values.id.push(item.id)
|
||
|
})
|
||
|
BookingOrderBachUpdate(values).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
notification.success({ message: '编辑成功', duration: 3 })
|
||
|
editingHandleCancel()
|
||
|
} else {
|
||
|
notification.error({ message: `编辑失败,${res.message}`, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
} else {
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
function editingHandleCancel() {
|
||
|
RefeditingForm.value.resetFields()
|
||
|
editingModalVisible.value = false
|
||
|
}
|
||
|
function vesselSearch(data) {
|
||
|
if (data) {
|
||
|
WebVessel.value = data
|
||
|
} else if (data === undefined) {
|
||
|
WebVessel.value = data
|
||
|
}
|
||
|
|
||
|
getVesselInfoService({ KeyWord: data }).then((res) => {
|
||
|
vesselData.value = res.data
|
||
|
})
|
||
|
}
|
||
|
function vesselBlur() {
|
||
|
if (WebVessel.value !== undefined) {
|
||
|
setTimeout(() => {
|
||
|
RefeditingForm.value.setFieldsValue({
|
||
|
...RefeditingForm.value.getFieldsValue(),
|
||
|
vessel: WebVessel.value,
|
||
|
})
|
||
|
}, 100)
|
||
|
}
|
||
|
}
|
||
|
function portDischargeSearch(data) {
|
||
|
GetPortlist({ KeyWord: data }).then((res) => {
|
||
|
portDischargeData.value = res.data
|
||
|
})
|
||
|
}
|
||
|
function portDischargeChange(value) {
|
||
|
portDischargeData.value.forEach((item) => {
|
||
|
if (item.enName == value) {
|
||
|
setTimeout(() => {
|
||
|
RefeditingForm.value.setFieldsValue({
|
||
|
...RefeditingForm.value.getFieldsValue(),
|
||
|
portDischargeId: item.ediCode,
|
||
|
})
|
||
|
}, 100)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
function destinationSearch(data) {
|
||
|
GetPortlist({ KeyWord: data }).then((res) => {
|
||
|
destinationData.value = res.data
|
||
|
})
|
||
|
}
|
||
|
function destinationChange(value) {
|
||
|
destinationData.value.forEach((item) => {
|
||
|
if (item.enName == value) {
|
||
|
setTimeout(() => {
|
||
|
RefeditingForm.value.setFieldsValue({
|
||
|
...RefeditingForm.value.getFieldsValue(),
|
||
|
destinationid: item.ediCode,
|
||
|
})
|
||
|
}, 100)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
// ----------------------批量修改船代----------------------
|
||
|
function handleOpenShip() {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
if (pkIdArr.length === 0) {
|
||
|
notification.error({ message: '请至少选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
shipagencyFlag.value = true
|
||
|
}
|
||
|
function shipagencySearch(data) {
|
||
|
GetForwarderlist({ KeyWord: data }).then((res) => {
|
||
|
shipagencyData.value = res.data
|
||
|
})
|
||
|
}
|
||
|
function handleSubimtShip() {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
let shipagencyName = ''
|
||
|
shipagencyData.value.forEach((item) => {
|
||
|
if (item.showCode == shipagency.value) {
|
||
|
shipagencyName = item.name
|
||
|
}
|
||
|
})
|
||
|
const data = {
|
||
|
id: pkIdArr,
|
||
|
shipagencyId: shipagency.value,
|
||
|
shipagency: shipagencyName,
|
||
|
}
|
||
|
shipagencyLoad.value = true
|
||
|
BachUpdateShipagency(data).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
notification.success({ message: '操作成功', duration: 3 })
|
||
|
shipagencyFlag.value = false
|
||
|
getList()
|
||
|
} else {
|
||
|
notification.success({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
shipagencyLoad.value = false
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function cancelRemove() {
|
||
|
console.log('== 取消 ==')
|
||
|
}
|
||
|
// -----------------------小票状态-----------------------
|
||
|
function handleSearchTxxp() {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
if (select.length === 0) {
|
||
|
notification.error({ message: '请选择操作订单', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
txxpLoading.value = true
|
||
|
SaveBookingTxxp({ Id: pkIdArr[0] }).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
txxpFlag.value = true
|
||
|
txxpForm.value = res.data
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
txxpLoading.value = false
|
||
|
})
|
||
|
}
|
||
|
// -----------------------运踪订阅-----------------------
|
||
|
function openTraceModel() {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
if (select.length === 0) {
|
||
|
notification.error({ message: '请选择操作订单', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
traceModalVisible.value = !traceModalVisible.value
|
||
|
}
|
||
|
function onTraceChange(values) {
|
||
|
console.log(traceValue.value)
|
||
|
}
|
||
|
function traceSend() {
|
||
|
if (!traceValue.value) {
|
||
|
notification.error({ message: '请选择订阅内容', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
const arr = []
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
if (select.length === 0) {
|
||
|
notification.error({ message: '请选择操作订单', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
let errorTip = ''
|
||
|
select.map((item, index) => {
|
||
|
if (traceValue.value.includes('1') && (!item.yard || !item.yardid)) {
|
||
|
errorTip = `单号${item.mblno}未选择场站`
|
||
|
}
|
||
|
if (traceValue.value.includes('2') && (!item.carrierid || !item.carrier)) {
|
||
|
errorTip = `单号${item.mblno}未选择船公司`
|
||
|
}
|
||
|
const query = {
|
||
|
businessId: item.id,
|
||
|
mblno: item.mblno,
|
||
|
yard: traceValue.value.includes('1') ? item.yard : '',
|
||
|
yardCode: traceValue.value.includes('1') ? item.yardid : '',
|
||
|
carrierid: traceValue.value.includes('2') ? item.carrierid : '',
|
||
|
carrier: traceValue.value.includes('2') ? item.carrier : '',
|
||
|
isBook: !!traceValue.value.includes('2'),
|
||
|
}
|
||
|
arr.push(query)
|
||
|
})
|
||
|
|
||
|
if (errorTip !== '') {
|
||
|
notification.error({ message: errorTip, duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
SendTrace(arr)
|
||
|
.then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
const tip = `订阅成功`
|
||
|
notification.success({ message: tip, duration: 3 })
|
||
|
traceModalVisible.value = false
|
||
|
traceValue.value = []
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
traceModalVisible.value = false
|
||
|
traceValue.value = []
|
||
|
}
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
console.log(err)
|
||
|
})
|
||
|
}
|
||
|
// -----------------------船公司文件-----------------------
|
||
|
function handleDownByBc(type) {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
if (pkIdArr.length === 0) {
|
||
|
notification.error({ message: '请至少选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
} else {
|
||
|
spinning.value = true
|
||
|
if (type === 1) {
|
||
|
downloadBookingConfirm(pkIdArr)
|
||
|
.then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
spinning.value = false
|
||
|
bcFileFlag.value = true
|
||
|
bcFile.value = res.data
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
console.log(err)
|
||
|
})
|
||
|
}
|
||
|
if (type === 2) {
|
||
|
downloadDraft(pkIdArr)
|
||
|
.then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
spinning.value = false
|
||
|
bcFileFlag.value = true
|
||
|
bcFile.value = res.data
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
console.log(err)
|
||
|
})
|
||
|
}
|
||
|
if (type === 4) {
|
||
|
checkUpdateManifestNo(pkIdArr)
|
||
|
.then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
spinning.value = false
|
||
|
bcFileFlag.value = true
|
||
|
bcFile.value = res.data
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
console.log(err)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
function handleImportBc() {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
if (pkIdArr.length === 0) {
|
||
|
notification.error({ message: '请选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
} else {
|
||
|
if (pkIdArr.length > 1) {
|
||
|
notification.error({ message: '只能选择一条数据', duration: 3 })
|
||
|
return false
|
||
|
} else {
|
||
|
bcObj.value = {}
|
||
|
RefimportBc.value.open()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
function bcClose() {
|
||
|
bcObj.value = {}
|
||
|
}
|
||
|
function handleSuccess(file) {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
const pkIdArr = select.map((item, index) => {
|
||
|
return item.id
|
||
|
})
|
||
|
const formData = new FormData()
|
||
|
formData.append('file', file)
|
||
|
formData.append('bookingOrderId', pkIdArr[0])
|
||
|
singleBCFileRead(formData)
|
||
|
.then((res) => {
|
||
|
if (res.data.succ) {
|
||
|
bcObj.value = res.data.ext
|
||
|
notification.success({ message: '上传成功', duration: 3 })
|
||
|
RefimportBc.value.loading = false
|
||
|
} else {
|
||
|
notification.error({ message: res.data.msg, duration: 3 })
|
||
|
RefimportBc.value.loading = false
|
||
|
}
|
||
|
})
|
||
|
.catch((res) => {
|
||
|
notification.error({ message: '上传失败', duration: 3 })
|
||
|
RefimportBc.value.loading = false
|
||
|
})
|
||
|
}
|
||
|
function handleImportBcMore() {
|
||
|
RefimportBcMore.value.open()
|
||
|
}
|
||
|
// ------------------------快递------------------------
|
||
|
function GoExpress() {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
if (select.length === 0) {
|
||
|
notification.error({ message: '请选择操作订单', duration: 3 })
|
||
|
return false
|
||
|
} else {
|
||
|
let Ids = ''
|
||
|
console.log(select)
|
||
|
select.forEach((item, index) => {
|
||
|
if (index == 0) {
|
||
|
Ids = `${item.id}`
|
||
|
} else {
|
||
|
Ids = `${Ids},${item.id}`
|
||
|
}
|
||
|
})
|
||
|
go(`/ExpressModuleDetails?type=Add&Ids=${Ids}`)
|
||
|
}
|
||
|
}
|
||
|
// ------------------------表格------------------------
|
||
|
function handlePageChange({ currentPage, pageSize }) {
|
||
|
if (gridOptions.pagerConfig.pageSize !== pageSize) {
|
||
|
editPageSizeSave(pageSize)
|
||
|
}
|
||
|
gridOptions.pagerConfig.currentPage = currentPage
|
||
|
gridOptions.pagerConfig.pageSize = pageSize
|
||
|
getList(searchData.value)
|
||
|
}
|
||
|
function editPageSizeSave(pageSize = 10) {
|
||
|
const data = {
|
||
|
pageSize: pageSize,
|
||
|
}
|
||
|
DjyUserConfigAdd({
|
||
|
type: 'booking_list_page',
|
||
|
configJson: JSON.stringify(data),
|
||
|
}).then((res) => {
|
||
|
console.log('页码设置成功')
|
||
|
})
|
||
|
}
|
||
|
function handledbclick(record, index, event) {
|
||
|
console.log('handledbclick', record, index, event)
|
||
|
|
||
|
editColumns(record)
|
||
|
}
|
||
|
function editColumns(row) {
|
||
|
if (row.mblno) {
|
||
|
go(`/BookingDetail?id=${row.id}&type=${row.carrierid}&mblno=${row.mblno}`)
|
||
|
} else {
|
||
|
go(`/BookingDetail?id=${row.id}&type=${row.carrierid}&customerNo=${row.customerNo}`)
|
||
|
}
|
||
|
}
|
||
|
function customSortMethod() {}
|
||
|
function resizableChange(e) {
|
||
|
gridOptions.columns[e.columnIndex].width = e.resizeWidth
|
||
|
editColumnsSave(gridOptions.columns)
|
||
|
localStorage.setItem('bookingSetting', JSON.stringify(gridOptions.columns))
|
||
|
}
|
||
|
function editColumnsSave(data = {}) {
|
||
|
DjyUserConfigAdd({
|
||
|
type: 'booking_list_column',
|
||
|
configJson: JSON.stringify(data),
|
||
|
}).then((res) => {
|
||
|
setForm.value.handleCancel()
|
||
|
})
|
||
|
}
|
||
|
function submitForm(data) {
|
||
|
formData.value = data
|
||
|
const arr = data.map((item, index) => {
|
||
|
return item.label
|
||
|
})
|
||
|
|
||
|
formRes.value = {}
|
||
|
searchData.value = {}
|
||
|
DjyUserConfigAdd({
|
||
|
type: 'booking_list_cond',
|
||
|
configJson: JSON.stringify(arr),
|
||
|
}).then((res) => {
|
||
|
notification.success({ message: '保存成功', duration: 3 })
|
||
|
setForm.value.handleCancel()
|
||
|
Object.keys(that.$refs).map((label, index) => {
|
||
|
if (label.includes('fromlabel-') && that.$refs[label].length > 0) {
|
||
|
that.$refs[label][0].$data.value = ''
|
||
|
}
|
||
|
})
|
||
|
getFormData()
|
||
|
init()
|
||
|
})
|
||
|
}
|
||
|
function getFormData(isReset = false) {
|
||
|
DjyUserConfigGet({ type: 'booking_list_cond' }).then((res) => {
|
||
|
setFormData(res.data)
|
||
|
})
|
||
|
}
|
||
|
function setFormData(data, isReset = false, isInit = false) {
|
||
|
if (Object.keys(data).length > 0 && JSON.parse(data.configJson).length) {
|
||
|
const arr = JSON.parse(data.configJson)
|
||
|
const nowData = []
|
||
|
const moreData = []
|
||
|
arr.map((item, index) => {
|
||
|
formAllData.value.map((fitem, findex) => {
|
||
|
if (fitem.label === 'VESSEL') {
|
||
|
fitem.type = 'select'
|
||
|
}
|
||
|
if (fitem.label === item) {
|
||
|
nowData.push(fitem)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
formAllData.value.map((item, index) => {
|
||
|
if (!arr.includes(item.label)) {
|
||
|
moreData.push(item)
|
||
|
}
|
||
|
})
|
||
|
formData.value = nowData
|
||
|
formMoreData.value = moreData
|
||
|
} else {
|
||
|
const nowData = formData.value.map((item, index) => {
|
||
|
return item.label
|
||
|
})
|
||
|
const moreData = []
|
||
|
formAllData.value.map((item, index) => {
|
||
|
if (!nowData.includes(item.label)) {
|
||
|
moreData.push(item)
|
||
|
}
|
||
|
})
|
||
|
formMoreData.value = moreData
|
||
|
}
|
||
|
formData.value.map((item, index) => {
|
||
|
formRes.value[item.label] = formRes.value[item.label] || ''
|
||
|
// select 船公司 等获取下拉列表
|
||
|
if (item.type === 'select') {
|
||
|
if (['NOBILL', 'CARGOID'].includes(item.label)) {
|
||
|
item.dataList = item.data
|
||
|
setTimeout(() => {
|
||
|
that.$refs[`fromlabel-${item.label}`][0].$data.dataList = item.data
|
||
|
}, 300)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
// if (!isReset && !isInit) {
|
||
|
// this.getList(formRes.value)
|
||
|
// }
|
||
|
if (!isReset) {
|
||
|
getList(formRes.value)
|
||
|
}
|
||
|
const len = formData.value.length % 4
|
||
|
if (formData.value.length === 4 || formData.value.length > 4) {
|
||
|
formBtnCol.value = 8
|
||
|
} else {
|
||
|
formBtnCol.value = 24 - len * 4
|
||
|
}
|
||
|
// that.$forceUpdate()
|
||
|
}
|
||
|
function tableSortChange(e) {
|
||
|
const { property, order } = e
|
||
|
tableOrderLabel.value = property || ''
|
||
|
tableOrderType.value = order
|
||
|
const data = [
|
||
|
{
|
||
|
sortField: property,
|
||
|
descSort: order === 'desc',
|
||
|
},
|
||
|
]
|
||
|
DjyUserConfigAdd({
|
||
|
type: 'booking_sort',
|
||
|
configJson: JSON.stringify(data),
|
||
|
}).then((res) => {
|
||
|
sortLabelList.value = []
|
||
|
searchData.value.multisort = data
|
||
|
getList(searchData.value)
|
||
|
})
|
||
|
}
|
||
|
function checkboxChangeEvent() {
|
||
|
console.log('== 选中,取消选中 ==', xGrid.value.getCheckboxRecords())
|
||
|
}
|
||
|
function FnCopy(data) {
|
||
|
const el = document.createElement('input')
|
||
|
el.setAttribute('value', data)
|
||
|
document.body.appendChild(el)
|
||
|
el.select()
|
||
|
document.execCommand('copy')
|
||
|
document.body.removeChild(el)
|
||
|
notification.success({ message: '复制成功!', duration: 3 })
|
||
|
}
|
||
|
function handleSaveService(row) {
|
||
|
const data = {
|
||
|
bookingId: row.id,
|
||
|
statusCodes: [{ statusCode: 'YFD' }],
|
||
|
}
|
||
|
row.serviceLoad = true
|
||
|
SaveServiceStatusByList(data).then((res) => {
|
||
|
if (res.code === 200) {
|
||
|
notification.success({ message: res.data.msg, duration: 3 })
|
||
|
PageDataByBooking({ id: row.id }).then((ress) => {
|
||
|
const itme = ress.data.items[0]
|
||
|
row.bsstatusname = itme.bsstatusname
|
||
|
row.serviceLoad = false
|
||
|
})
|
||
|
} else {
|
||
|
notification.error({ message: res.data.msg, duration: 3 })
|
||
|
row.serviceLoad = false
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
function handleOpenService(row) {
|
||
|
editRow.value = row
|
||
|
serviceFd.value = ''
|
||
|
serviceFlag.value = true
|
||
|
}
|
||
|
function handleRefshAtd(row, index) {
|
||
|
row.atdLoading = true
|
||
|
refreshSailingDate({ id: row.id }).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
row.atdLoading = false
|
||
|
row.atd = res.data.atd
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
row.atdLoading = false
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
function removeFun(data) {
|
||
|
deleteBookingOrder([data.id])
|
||
|
}
|
||
|
function handleRefshYZOnce(row, rowIndex) {
|
||
|
row.refshYzitemLoad = true
|
||
|
RefreshBillTrace('ids=' + row.id).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
PageDataByBooking({ id: row.id }).then((ress) => {
|
||
|
const item = ress.data.items[0]
|
||
|
row.refshYzitemLoad = false
|
||
|
const bookstatus = [
|
||
|
{ staCode: 'sta_cangdan', isChecked: false },
|
||
|
{ staCode: 'sta_haifang', isChecked: false },
|
||
|
{ staCode: 'sta_zhuangzai', isChecked: false },
|
||
|
{ staCode: 'sta_mafang', isChecked: false },
|
||
|
{ staCode: 'sta_zhuangchuan', isChecked: false },
|
||
|
{ staCode: 'sta_atd', isChecked: false },
|
||
|
]
|
||
|
if (item.bookstatus.length > 0) {
|
||
|
bookstatus.map((book, bindex) => {
|
||
|
item.bookstatus.map((ite, index) => {
|
||
|
if (ite.staCode === book.staCode) {
|
||
|
bookstatus[bindex] = ite
|
||
|
bookstatus[bindex].isChecked = true
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}
|
||
|
row.bookstatus = bookstatus
|
||
|
row.statuslogs1 = item.statuslogs1
|
||
|
notification.success({ message: '操作成功', duration: 3 })
|
||
|
})
|
||
|
} else {
|
||
|
row.refshYzitemLoad = false
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
function handleGetWebDataYZ(row, code) {
|
||
|
let webCode = ''
|
||
|
webData.value = ''
|
||
|
if (code === 'sta_haifang' || code === 'sta_cangdan') {
|
||
|
webCode = 'HLW_CD'
|
||
|
webDataTitle.value = '物流信息数据'
|
||
|
} else {
|
||
|
webCode = 'YGT'
|
||
|
webDataTitle.value = '云港通数据'
|
||
|
}
|
||
|
const data = {
|
||
|
bookingId: row.id,
|
||
|
webCode: webCode,
|
||
|
}
|
||
|
row.refshYzitemLoad = true
|
||
|
GetWebData(data).then((res) => {
|
||
|
if (res.code === 200) {
|
||
|
webData.value = res.data
|
||
|
webDataFlag.value = true
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
row.refshYzitemLoad = false
|
||
|
})
|
||
|
}
|
||
|
function enmuBookingBtn(val) {
|
||
|
switch (val) {
|
||
|
case 'sta_cangdan':
|
||
|
return '舱单'
|
||
|
case 'sta_haifang':
|
||
|
return '海放'
|
||
|
case 'sta_zhuangzai':
|
||
|
return '装载'
|
||
|
case 'sta_mafang':
|
||
|
return '码放'
|
||
|
case 'sta_zhuangchuan':
|
||
|
return '装船'
|
||
|
case 'sta_atd':
|
||
|
return '离港'
|
||
|
case 'sta_so':
|
||
|
return '已订舱'
|
||
|
case 'sta_bc':
|
||
|
return '订舱确认'
|
||
|
case 'sta_letter_yard':
|
||
|
return '放舱'
|
||
|
case 'sta_xhz':
|
||
|
return '下货纸'
|
||
|
default:
|
||
|
return '--'
|
||
|
}
|
||
|
}
|
||
|
function handleGetWebData(row, code) {
|
||
|
const data = {
|
||
|
bookingId: row.id,
|
||
|
webCode: code,
|
||
|
}
|
||
|
webData.value = ''
|
||
|
webDataTitle.value = '场站数据'
|
||
|
row.webDataLoad = true
|
||
|
GetWebData(data).then((res) => {
|
||
|
if (res.code === 200) {
|
||
|
webData.value = res.data
|
||
|
webDataFlag.value = true
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
row.webDataLoad = false
|
||
|
})
|
||
|
}
|
||
|
function remarkhover(e, data) {
|
||
|
if (data.bookremark.length > 0) {
|
||
|
const maxWidth = window.innerWidth
|
||
|
if (maxWidth - e.pageX > 230) {
|
||
|
remarkScreenX.value = e.pageX + 20
|
||
|
} else {
|
||
|
remarkScreenX.value = e.pageX - 300
|
||
|
}
|
||
|
remarkScreenY.value = e.pageY + 20
|
||
|
remarkData.value = data.bookremark
|
||
|
remarkShow.value = true
|
||
|
}
|
||
|
}
|
||
|
function remarkLeave() {
|
||
|
remarkShow.value = false
|
||
|
remarkData.value = null
|
||
|
}
|
||
|
function FnTxxpLink(row) {
|
||
|
TxxpLink(row.id)
|
||
|
.then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
window.open(res.data)
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
console.log(err)
|
||
|
})
|
||
|
}
|
||
|
function handleLookPdf(row) {
|
||
|
window.open(row.extendState.txxpPdfUrl)
|
||
|
}
|
||
|
function handleOpenResult(row) {
|
||
|
spinning.value = true
|
||
|
GetShippingOrderCompareResult({ bookingId: row.id }).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
if (!res.data.succ) {
|
||
|
spinning.value = false
|
||
|
notification.success({ message: res.data.msg, duration: 3 })
|
||
|
} else {
|
||
|
if (res.data.extra) {
|
||
|
TaskShippingOrderCompareData.value = { ...res.data.extra }
|
||
|
TaskShippingOrderCompareData.value.total = res.data.total
|
||
|
TaskShippingOrderCompareVisible.value = true
|
||
|
spinning.value = false
|
||
|
} else {
|
||
|
notification.success({ message: res.data.msg, duration: 3 })
|
||
|
spinning.value = false
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
spinning.value = false
|
||
|
notification.error({ message: res.data.msg, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
function excuteShippingOrderCompareBatch(data) {
|
||
|
let arr = []
|
||
|
if (data) {
|
||
|
arr.push(data.id.toString())
|
||
|
} else {
|
||
|
const select = xGrid.value.getCheckboxRecords()
|
||
|
arr = select.map((item, index) => {
|
||
|
return item.id.toString()
|
||
|
})
|
||
|
if (arr.length === 0) {
|
||
|
notification.error({ message: '请选择操作订单', duration: 3 })
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
spinning.value = true
|
||
|
ExcuteShippingOrderCompareBatch(arr)
|
||
|
.then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
if (!res.data.succ) {
|
||
|
spinning.value = false
|
||
|
notification.success({ message: res.data.msg, duration: 3 })
|
||
|
} else {
|
||
|
if (res.data.extra) {
|
||
|
TaskShippingOrderCompareData.value = res.data.extra
|
||
|
TaskShippingOrderCompareData.value.total = res.data.total
|
||
|
TaskShippingOrderCompareVisible.value = true
|
||
|
PageDataByBooking({ id: data.id }).then((ress) => {
|
||
|
const itme = ress.data.items[0]
|
||
|
spinning.value = false
|
||
|
data.lstShipOrderCompareRlt = itme.lstShipOrderCompareRlt
|
||
|
data.lstShipOrderCompareMode = itme.lstShipOrderCompareMode
|
||
|
data.lstShipOrderCompareDate = itme.lstShipOrderCompareDate
|
||
|
})
|
||
|
} else {
|
||
|
notification.success({ message: res.data.msg, duration: 3 })
|
||
|
spinning.value = false
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
spinning.value = false
|
||
|
notification.error({ message: res.data.msg, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
console.log(err)
|
||
|
spinning.value = false
|
||
|
})
|
||
|
}
|
||
|
function handleFormatContrast(row) {
|
||
|
spinning.value = true
|
||
|
pdfUrl.value = ''
|
||
|
GetDraftCompareResultInfo({ bookingid: row.id }).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
if (!res.data.succ) {
|
||
|
spinning.value = false
|
||
|
notification.success({ message: res.data.msg, duration: 3 })
|
||
|
} else {
|
||
|
if (res.data.extra) {
|
||
|
formatSheet.value = res.data.extra
|
||
|
formatSheet.value.total = res.data.total
|
||
|
formatSheetVisible.value = true
|
||
|
const arr = []
|
||
|
formatSheet.value.showDetailList.forEach((item) => {
|
||
|
if (item.pCode === 'ContaList' && item.isDiff) {
|
||
|
arr.push(1)
|
||
|
}
|
||
|
})
|
||
|
if (arr.length == 0) {
|
||
|
formatSheet.value.isShowCntall = false
|
||
|
} else {
|
||
|
formatSheet.value.isShowCntall = true
|
||
|
}
|
||
|
} else {
|
||
|
notification.success({ message: res.data.msg, duration: 3 })
|
||
|
}
|
||
|
spinning.value = false
|
||
|
if (res.data.extra3) {
|
||
|
pdfLoading.value = true
|
||
|
BookingOrderDownload({ id: res.data.extra3 }).then((res) => {
|
||
|
pdfUrl.value = window.URL.createObjectURL(
|
||
|
new Blob([res], { type: 'application/pdf;charset=utf-8' }),
|
||
|
)
|
||
|
formatPdf.value = pdfUrl.value
|
||
|
pdfLoading.value = false
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
spinning.value = false
|
||
|
notification.error({ message: res.data.msg, duration: 3 })
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
function goodStatusclick(e, data) {
|
||
|
if (!goodStatusShow.value) {
|
||
|
goodStatusHover(e, data)
|
||
|
} else {
|
||
|
goodStatusLeave()
|
||
|
}
|
||
|
}
|
||
|
function goodStatusHover(e, data) {
|
||
|
const maxWidth = window.innerWidth
|
||
|
if (maxWidth - e.pageX > 230) {
|
||
|
// goodStatusScreenX.value = e.pageX + 20
|
||
|
goodStatusScreenX.value = e.pageX - 139
|
||
|
} else {
|
||
|
// goodStatusScreenX.value = e.pageX - 300
|
||
|
goodStatusScreenX.value = e.pageX - 139
|
||
|
}
|
||
|
|
||
|
if (e.pageY > window.innerHeight - 340) {
|
||
|
goodStatusScreenY.value = e.pageY - 370 - 10
|
||
|
goodStatusSeat.value = 'top'
|
||
|
} else {
|
||
|
goodStatusScreenY.value = e.pageY + 25
|
||
|
goodStatusSeat.value = 'bottom'
|
||
|
}
|
||
|
// goodStatusScreenY.value = e.pageY + 20
|
||
|
goodStatusData.value = data.goodsStatusList
|
||
|
goodStatusShow.value = true
|
||
|
}
|
||
|
function goodStatusLeave() {
|
||
|
goodStatusShow.value = false
|
||
|
goodStatusData.value = null
|
||
|
}
|
||
|
function getFocusMark(row, file) {
|
||
|
row[file] = true
|
||
|
}
|
||
|
function getBlurMark(row, file) {
|
||
|
row[file] = false
|
||
|
}
|
||
|
function handleSaveMark(row, type) {
|
||
|
const data = {
|
||
|
Id: row.id,
|
||
|
}
|
||
|
if (type === 1) {
|
||
|
row.dzmarkLoading = true
|
||
|
data.dzRemark = row.dzRemark
|
||
|
}
|
||
|
if (type === 2) {
|
||
|
row.czmarkLoading = true
|
||
|
data.czRemark = row.czRemark
|
||
|
}
|
||
|
if (type === 3) {
|
||
|
row.custnoLoading = true
|
||
|
data.custno = row.custno
|
||
|
}
|
||
|
if (type === 4) {
|
||
|
row.sqxsLoading = true
|
||
|
data.shenQingXiangShi = row.shenQingXiangShi
|
||
|
}
|
||
|
if (type === 5) {
|
||
|
row.ponoLoading = true
|
||
|
data.pono = row.pono
|
||
|
}
|
||
|
SaveDataInList(data).then((res) => {
|
||
|
if (res.succeeded) {
|
||
|
notification.success({ message: '修改成功', duration: 3 })
|
||
|
} else {
|
||
|
notification.error({ message: res.message, duration: 3 })
|
||
|
}
|
||
|
row.dzmarkLoading = false
|
||
|
row.czmarkLoading = false
|
||
|
row.custnoLoading = false
|
||
|
row.sqxsLoading = false
|
||
|
row.ponoLoading = false
|
||
|
})
|
||
|
}
|
||
|
</script>
|
||
|
<style lang="less" scoped>
|
||
|
.advanced {
|
||
|
height: 65px;
|
||
|
}
|
||
|
.CsConditionFilter {
|
||
|
padding: 16px;
|
||
|
}
|
||
|
.booking-list {
|
||
|
padding-top: 8px;
|
||
|
padding-left: 8px;
|
||
|
padding-right: 8px;
|
||
|
}
|
||
|
/*.ant-layout{
|
||
|
background: #f4f4f4;
|
||
|
}*/
|
||
|
/*列表排序按钮 */
|
||
|
.vxe-cell--sort {
|
||
|
margin-top: -6px;
|
||
|
|
||
|
i {
|
||
|
font-size: 10px;
|
||
|
}
|
||
|
|
||
|
.vxe-sort--asc-btn {
|
||
|
margin-top: 6px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*列表表头 */
|
||
|
.vxe-header--row {
|
||
|
position: relative;
|
||
|
background: #fff !important;
|
||
|
|
||
|
.vxe-cell--sort {
|
||
|
position: absolute;
|
||
|
z-index: 3;
|
||
|
right: 0;
|
||
|
}
|
||
|
|
||
|
&::after {
|
||
|
content: '';
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
z-index: 0;
|
||
|
background: @primary-color;
|
||
|
opacity: 0.04;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*列表分页 */
|
||
|
.vxe-pager {
|
||
|
margin: 8px 0;
|
||
|
}
|
||
|
</style>
|
||
|
<style lang="less" scoped>
|
||
|
/*订舱表格内字体颜色 */
|
||
|
.mblno {
|
||
|
text-align: left;
|
||
|
color: @primary-color !important;
|
||
|
|
||
|
span {
|
||
|
margin-right: 0.5rem;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.CSMblnoCopy {
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
}
|
||
|
.CsFeeStatus {
|
||
|
padding: 5px 10px;
|
||
|
&.type0 {
|
||
|
background: #9acd32;
|
||
|
}
|
||
|
&.type1 {
|
||
|
|
||
|
}
|
||
|
&.type2 {
|
||
|
background: #FFE37E;
|
||
|
}
|
||
|
&.type3 {
|
||
|
|
||
|
}
|
||
|
&.type4 {
|
||
|
|
||
|
}
|
||
|
&.type5 {
|
||
|
|
||
|
}
|
||
|
&.type6 {
|
||
|
background: #FF4500;
|
||
|
}
|
||
|
&.type7 {
|
||
|
background: #FF4500;
|
||
|
}
|
||
|
&.type8 {
|
||
|
background: #b9b9ff;
|
||
|
}
|
||
|
&.type9 {
|
||
|
background: #87cefa;
|
||
|
}
|
||
|
}
|
||
|
// .vessel {
|
||
|
// color: #77c950;
|
||
|
// }
|
||
|
.nav-box {
|
||
|
padding: 0 10px;
|
||
|
|
||
|
.nav {
|
||
|
display: inline-block;
|
||
|
margin-right: 8px;
|
||
|
cursor: pointer;
|
||
|
border: 1px solid rgba(255, 255, 255, 0);
|
||
|
padding: 0 10px;
|
||
|
height: 28px;
|
||
|
line-height: 26px;
|
||
|
color: #000;
|
||
|
|
||
|
.iconfont {
|
||
|
margin-right: 6px;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
border: 1px solid rgba(255, 255, 255, 0);
|
||
|
border-radius: 4px;
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(1) {
|
||
|
.iconfont {
|
||
|
color: #1d8aff;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(2) {
|
||
|
.iconfont {
|
||
|
color: #865ef8;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(3) {
|
||
|
.iconfont {
|
||
|
color: #ff9702;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(4) {
|
||
|
.iconfont {
|
||
|
color: #1d8aff;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(5) {
|
||
|
.iconfont {
|
||
|
color: #ff1062;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(6) {
|
||
|
.iconfont {
|
||
|
color: #1ebeca;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(7) {
|
||
|
.iconfont {
|
||
|
color: #82c93d;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(8) {
|
||
|
.iconfont {
|
||
|
color: #1d8aff;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(9) {
|
||
|
.iconfont {
|
||
|
color: #f6826b;
|
||
|
}
|
||
|
|
||
|
&:hover {
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.right {
|
||
|
float: right;
|
||
|
cursor: pointer;
|
||
|
padding-top: 6px;
|
||
|
}
|
||
|
|
||
|
.BookTopButton {
|
||
|
height: 33px;
|
||
|
|
||
|
.tab-btn {
|
||
|
padding: 6px 9px;
|
||
|
border: 1px solid #c7c7c9;
|
||
|
background: #f9fafe;
|
||
|
border-radius: 2px;
|
||
|
margin-right: 10px;
|
||
|
cursor: pointer;
|
||
|
-webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.02);
|
||
|
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.02);
|
||
|
-webkit-user-select: 0 2px 0 rgba(0, 0, 0, 0.02);
|
||
|
}
|
||
|
}
|
||
|
.table-page-search-box {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
}
|
||
|
.table-page-search-submitButtons {
|
||
|
text-align: right;
|
||
|
padding-top: 6px;
|
||
|
|
||
|
.reset {
|
||
|
margin-left: 8px;
|
||
|
margin-right: 8px;
|
||
|
}
|
||
|
|
||
|
.more-search {
|
||
|
margin-left: 0px;
|
||
|
margin-right: 0px;
|
||
|
padding-right: 0px;
|
||
|
border: none;
|
||
|
position: relative;
|
||
|
box-shadow: none !important;
|
||
|
}
|
||
|
|
||
|
.tab-btn {
|
||
|
margin: 0 10px;
|
||
|
cursor: pointer;
|
||
|
position: relative;
|
||
|
|
||
|
i {
|
||
|
font-size: 14px;
|
||
|
margin-left: 8px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// .tab-btn::before {
|
||
|
// content: '';
|
||
|
// position: absolute;
|
||
|
// width: 1px;
|
||
|
// height: 17px;
|
||
|
// background: #ccc;
|
||
|
// top: 2px;
|
||
|
// left: -20px;
|
||
|
// }
|
||
|
|
||
|
.senior-search {
|
||
|
margin-left: 0px;
|
||
|
color: rgba(0, 0, 0, 0.65);
|
||
|
position: relative;
|
||
|
|
||
|
i {
|
||
|
margin-left: 3px;
|
||
|
font-size: 15px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// .senior-search::before {
|
||
|
// content: '';
|
||
|
// position: absolute;
|
||
|
// width: 1px;
|
||
|
// height: 17px;
|
||
|
// background: #ccc;
|
||
|
// top: 2px;
|
||
|
// left: -16px;
|
||
|
// }
|
||
|
|
||
|
.senior-search:hover {
|
||
|
color: @primary-color;
|
||
|
|
||
|
i {
|
||
|
color: @primary-color;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.ant-btn {
|
||
|
margin-right: 8px;
|
||
|
}
|
||
|
|
||
|
.table {
|
||
|
margin: 8px auto 20px;
|
||
|
}
|
||
|
|
||
|
.radio-logo {
|
||
|
width: 50px;
|
||
|
// height: 40px;
|
||
|
display: inline-block;
|
||
|
}
|
||
|
|
||
|
.group-label-box {
|
||
|
width: 100%;
|
||
|
|
||
|
.group-label {
|
||
|
width: 100%;
|
||
|
display: flex;
|
||
|
flex-wrap: wrap;
|
||
|
|
||
|
.ant-radio-wrapper {
|
||
|
height: 45px !important;
|
||
|
line-height: 45px !important;
|
||
|
width: 10%;
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
// .label-flex {
|
||
|
// flex: 1;
|
||
|
// }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.Awrapper {
|
||
|
width: 100% !important;
|
||
|
display: flex !important;
|
||
|
height: 45px !important;
|
||
|
line-height: 45px !important;
|
||
|
width: 10%;
|
||
|
margin: 0;
|
||
|
|
||
|
.line {
|
||
|
margin-left: 10px;
|
||
|
margin-right: 40px;
|
||
|
height: 24px;
|
||
|
flex: 1;
|
||
|
border-bottom: 1px solid #c9c9c9;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*查询区日期默认颜色 */
|
||
|
/deep/ .ant-calendar-today {
|
||
|
.ant-calendar-date {
|
||
|
color: @primary-color !important;
|
||
|
border-color: @primary-color !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*方块边框按钮 */
|
||
|
.tab-btn:hover {
|
||
|
border-color: @primary-color;
|
||
|
color: @primary-color;
|
||
|
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||
|
}
|
||
|
|
||
|
/*列表双列背景色 */
|
||
|
// /deep/ .vxe-table--render-default .vxe-body--row.row--stripe {
|
||
|
// // background: #f5f9fe;
|
||
|
// position: relative;
|
||
|
// background: #fff;
|
||
|
// z-index: 1;
|
||
|
// &::after {
|
||
|
// content: '';
|
||
|
// position: absolute;
|
||
|
// top: 0;
|
||
|
// left: 0;
|
||
|
// width: 100%;
|
||
|
// height: 100%;
|
||
|
// z-index: 0;
|
||
|
// background: @primary-color;
|
||
|
// opacity: 0.04;
|
||
|
// z-index: -1;
|
||
|
// }
|
||
|
// }
|
||
|
/*列表操作按钮颜色 */
|
||
|
/deep/ .operate-btn {
|
||
|
color: @primary-color;
|
||
|
width: 19px;
|
||
|
margin: 0 !important;
|
||
|
}
|
||
|
|
||
|
/deep/ .operate-btn:hover {
|
||
|
color: @primary-color !important;
|
||
|
opacity: 0.7;
|
||
|
}
|
||
|
|
||
|
.book-btn {
|
||
|
display: inline-block;
|
||
|
padding: 0 10px;
|
||
|
height: 24px;
|
||
|
margin-right: 8px;
|
||
|
border: 1px solid #eee;
|
||
|
color: #999;
|
||
|
font-size: 12px;
|
||
|
line-height: 24px;
|
||
|
|
||
|
i {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
&.sta_so {
|
||
|
color: #8bc34a;
|
||
|
border: 1px solid #8bc34a;
|
||
|
}
|
||
|
|
||
|
&.sta_bc {
|
||
|
color: #fbc02d;
|
||
|
border: 1px solid #fbc02d;
|
||
|
}
|
||
|
|
||
|
&.sta_letter_yard {
|
||
|
color: #00bcd4;
|
||
|
border: 1px solid #00bcd4;
|
||
|
}
|
||
|
|
||
|
&.sta_xhz {
|
||
|
color: #e64a19;
|
||
|
border: 1px solid #e64a19;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.billtrace-box {
|
||
|
width: 100%;
|
||
|
|
||
|
// display: flex;
|
||
|
// height: 48px;
|
||
|
// flex-wrap:wrap;
|
||
|
// padding:3px 0;
|
||
|
// text-align: center;
|
||
|
.billtrace-btn {
|
||
|
display: inline-block;
|
||
|
font-size: 12px;
|
||
|
height: 16px;
|
||
|
|
||
|
// width:30%;
|
||
|
// display: flex;
|
||
|
span {
|
||
|
// flex: 1;
|
||
|
text-align: right;
|
||
|
color: black;
|
||
|
}
|
||
|
|
||
|
i {
|
||
|
font-size: 12px;
|
||
|
color: #ccc;
|
||
|
// flex: 1;
|
||
|
text-align: center;
|
||
|
|
||
|
&.hide {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.active {
|
||
|
cursor: pointer;
|
||
|
// color: @primary-color;
|
||
|
color: #ff9702;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.normal-box {
|
||
|
.billtrace-btn {
|
||
|
display: inline-block;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.flex-box {
|
||
|
display: flex;
|
||
|
height: 48px;
|
||
|
flex-wrap: wrap;
|
||
|
padding: 3px 0;
|
||
|
text-align: center;
|
||
|
justify-content: center;
|
||
|
}
|
||
|
|
||
|
.billtrace-btn {
|
||
|
font-size: 12px;
|
||
|
height: 16px;
|
||
|
width: 30%;
|
||
|
display: flex;
|
||
|
|
||
|
span {
|
||
|
flex: 1;
|
||
|
text-align: right;
|
||
|
color: #999;
|
||
|
}
|
||
|
|
||
|
i {
|
||
|
font-size: 12px;
|
||
|
color: #ccc;
|
||
|
flex: 1;
|
||
|
text-align: center;
|
||
|
|
||
|
&.hide {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.active {
|
||
|
cursor: pointer;
|
||
|
// color: @primary-color;
|
||
|
color: #ff9702;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
&:nth-of-type(3) {
|
||
|
i {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.billtrace-btn1 {
|
||
|
font-size: 12px;
|
||
|
|
||
|
.active {
|
||
|
cursor: pointer;
|
||
|
// color: @primary-color;
|
||
|
color: #ff9702 !important;
|
||
|
font-weight: bold;
|
||
|
font-size: 12px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/deep/ .ant-form-item {
|
||
|
margin-bottom: 10px !important;
|
||
|
}
|
||
|
|
||
|
/deep/ .table-page-search-submitButtons {
|
||
|
margin-bottom: 10px !important;
|
||
|
}
|
||
|
|
||
|
/deep/ .ant-input {
|
||
|
height: 28px;
|
||
|
margin-top: 4px;
|
||
|
// transform: scaleY(.8);
|
||
|
}
|
||
|
|
||
|
/deep/ .ant-card-body {
|
||
|
padding-top: 10px;
|
||
|
}
|
||
|
|
||
|
/deep/ .ant-calendar-picker-input {
|
||
|
padding: 0 4px;
|
||
|
}
|
||
|
|
||
|
/deep/ .ant-calendar-range-picker-input {
|
||
|
height: 28px;
|
||
|
font-size: 12px;
|
||
|
vertical-align: top;
|
||
|
text-align: center;
|
||
|
// background: #f99;
|
||
|
}
|
||
|
|
||
|
.reamrk-btns {
|
||
|
overflow: visible;
|
||
|
}
|
||
|
|
||
|
/deep/ .from-label {
|
||
|
padding: 0 !important;
|
||
|
}
|
||
|
|
||
|
.booking-from-box {
|
||
|
padding: 0 10px;
|
||
|
}
|
||
|
|
||
|
@media (min-width: 1200px) and (max-width: 1600px) {
|
||
|
.from-label {
|
||
|
padding-right: 0 !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media (min-width: 1200px) and (max-width: 1438px) {
|
||
|
.table-page-search-submitButtons {
|
||
|
.ant-btn {
|
||
|
margin-left: 4px;
|
||
|
margin-right: 4px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.table-page-search-submitButtons .senior-search {
|
||
|
margin-left: 20px;
|
||
|
|
||
|
&::before {
|
||
|
left: -7px;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/deep/ .book-remark-box {
|
||
|
> .vxe-cell {
|
||
|
overflow: visible !important;
|
||
|
}
|
||
|
|
||
|
// /deep/ .vxe-cell {
|
||
|
// overflow: visible !important;
|
||
|
// }
|
||
|
}
|
||
|
|
||
|
.bookremark {
|
||
|
position: relative;
|
||
|
|
||
|
.reamrk-label {
|
||
|
width: 100%;
|
||
|
white-space: nowrap;
|
||
|
text-overflow: ellipsis;
|
||
|
overflow: hidden;
|
||
|
display: block;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 货物状态
|
||
|
.goods-status {
|
||
|
width: 100%;
|
||
|
display: flex;
|
||
|
height: 48px;
|
||
|
align-items: center;
|
||
|
|
||
|
.goods-status-left {
|
||
|
flex: 1;
|
||
|
overflow: hidden;
|
||
|
height: 48px;
|
||
|
text-overflow: ellipsis;
|
||
|
white-space: nowrap;
|
||
|
|
||
|
.goods-tip {
|
||
|
font-size: 12px;
|
||
|
margin: 0 4px;
|
||
|
cursor: pointer;
|
||
|
height: 48px;
|
||
|
line-height: 48px;
|
||
|
display: inline-block;
|
||
|
color: @primary-color;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.goods-status-right {
|
||
|
width: 30px;
|
||
|
text-align: center;
|
||
|
height: 48px;
|
||
|
|
||
|
i {
|
||
|
color: @primary-color;
|
||
|
cursor: pointer;
|
||
|
height: 48px;
|
||
|
line-height: 48px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.TablelstShipOrderCompareRltRedo {
|
||
|
cursor: pointer;
|
||
|
margin-left: 0.5rem;
|
||
|
color: #13c2c2;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.dzRemark,
|
||
|
.czRemark {
|
||
|
display: block;
|
||
|
text-align: left;
|
||
|
width: 100%;
|
||
|
overflow: hidden;
|
||
|
text-overflow: ellipsis;
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
|
||
|
/deep/ .line-box:nth-last-of-type(-n + 5) {
|
||
|
.book-remark-box {
|
||
|
.bookremark {
|
||
|
.reamrk-list {
|
||
|
top: inherit;
|
||
|
bottom: calc(100% + 8px);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/deep/.line-box:nth-of-type(2n) {
|
||
|
position: relative;
|
||
|
background: #fff;
|
||
|
|
||
|
> * {
|
||
|
z-index: 1;
|
||
|
}
|
||
|
|
||
|
&::after {
|
||
|
content: '';
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
z-index: 0;
|
||
|
background: @primary-color;
|
||
|
opacity: 0.04;
|
||
|
}
|
||
|
|
||
|
.book-remark-box {
|
||
|
.bookremark {
|
||
|
.reamrk-list {
|
||
|
top: inherit;
|
||
|
bottom: calc(100% + 8px);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.hovers-list {
|
||
|
max-height: 400px;
|
||
|
position: fixed;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
z-index: 999;
|
||
|
width: 300px;
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 10px #eee;
|
||
|
border-radius: 4px;
|
||
|
border: 1px solid #eee;
|
||
|
padding: 5px 20px 10px 20px;
|
||
|
white-space: normal;
|
||
|
text-align: left;
|
||
|
z-index: 999 !important;
|
||
|
|
||
|
.title {
|
||
|
height: 30px;
|
||
|
line-height: 30px;
|
||
|
font-size: 12px;
|
||
|
font-weight: 600;
|
||
|
}
|
||
|
|
||
|
.list {
|
||
|
border-bottom: 1px solid #eee;
|
||
|
padding: 6px 0;
|
||
|
line-height: 18px;
|
||
|
font-size: 12px;
|
||
|
color: #666;
|
||
|
word-break: break-all;
|
||
|
|
||
|
&:nth-last-of-type(1) {
|
||
|
border: none;
|
||
|
}
|
||
|
|
||
|
.icon {
|
||
|
margin-right: 4px;
|
||
|
color: @primary-color;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.goods-hovers-list {
|
||
|
max-height: 400px;
|
||
|
position: fixed;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
z-index: 999;
|
||
|
width: 300px;
|
||
|
background: #fff;
|
||
|
box-shadow: 0 0 50px #eee;
|
||
|
border-radius: 4px;
|
||
|
border: 1px solid #eee;
|
||
|
padding: 5px 20px 10px 20px;
|
||
|
white-space: normal;
|
||
|
text-align: left;
|
||
|
z-index: 999 !important;
|
||
|
transition: 0.5s all;
|
||
|
display: block;
|
||
|
opacity: 1;
|
||
|
|
||
|
&.seat-top {
|
||
|
&::before {
|
||
|
display: none;
|
||
|
// content: '';
|
||
|
// bottom: -15px;
|
||
|
// left: 50%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&.hide-goods-hover {
|
||
|
display: none;
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
// overflow: auto;
|
||
|
&::before {
|
||
|
content: '';
|
||
|
float: left;
|
||
|
width: 0;
|
||
|
height: 0;
|
||
|
border-width: 8px;
|
||
|
border-style: solid;
|
||
|
border-color: transparent #fff transparent transparent;
|
||
|
-webkit-transform: rotate(90deg);
|
||
|
transform: rotate(90deg);
|
||
|
position: absolute;
|
||
|
top: -15px;
|
||
|
left: 50%;
|
||
|
margin-left: -16px;
|
||
|
}
|
||
|
|
||
|
.title {
|
||
|
height: 30px;
|
||
|
line-height: 30px;
|
||
|
font-size: 12px;
|
||
|
font-weight: 600;
|
||
|
}
|
||
|
|
||
|
.goods-btn {
|
||
|
display: inline-block;
|
||
|
font-size: 12px;
|
||
|
color: #666;
|
||
|
word-break: break-all;
|
||
|
width: 82px;
|
||
|
height: 28px;
|
||
|
line-height: 28px;
|
||
|
border-radius: 4px;
|
||
|
border: 1px solid #eee;
|
||
|
margin-bottom: 6px;
|
||
|
text-align: center;
|
||
|
margin: 0 2px 8px;
|
||
|
cursor: pointer;
|
||
|
|
||
|
&.active {
|
||
|
color: @primary-color;
|
||
|
border: 1px solid @primary-color;
|
||
|
}
|
||
|
|
||
|
.icon {
|
||
|
margin-right: 4px;
|
||
|
color: @primary-color;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media (min-width: 1192px) and (max-width: 1591px) {
|
||
|
.booking-from-box {
|
||
|
padding-right: 24px;
|
||
|
|
||
|
/deep/ .ant-calendar-picker-icon {
|
||
|
display: none;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.booking-from-box {
|
||
|
/deep/ .ant-calendar-picker-icon {
|
||
|
margin-top: -4px !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/deep/ .ant-form-item-control-wrapper {
|
||
|
overflow: hidden !important;
|
||
|
}
|
||
|
|
||
|
.no-data {
|
||
|
display: block;
|
||
|
color: #aaa;
|
||
|
font-size: 14px;
|
||
|
|
||
|
i {
|
||
|
line-height: 120px;
|
||
|
font-size: 100px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/deep/ .padUrl .ant-spin-container {
|
||
|
height: 100%;
|
||
|
}
|
||
|
|
||
|
/deep/ .content-table .vxe-body--column .vxe-cell div {
|
||
|
color: #000;
|
||
|
}
|
||
|
|
||
|
.pono {
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
/deep/ .vxe-header--row th {
|
||
|
text-align: left !important;
|
||
|
}
|
||
|
|
||
|
/deep/ .vxe-cell--title {
|
||
|
width: 100%;
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
.TaskShippingOrderCompareP {
|
||
|
border-bottom: 1px solid #000;
|
||
|
padding: 5px;
|
||
|
background: #0000000e;
|
||
|
|
||
|
.TaskShippingOrderCompareSpan {
|
||
|
font-weight: bolder;
|
||
|
color: red;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.TaskShippingOrderCompareMainBox {
|
||
|
height: 55vh;
|
||
|
overflow-y: auto;
|
||
|
|
||
|
.TaskShippingOrderCompareMain {
|
||
|
p {
|
||
|
margin-bottom: 0;
|
||
|
}
|
||
|
|
||
|
.TaskShippingOrderCompareMainHeader {
|
||
|
display: flex;
|
||
|
|
||
|
> div {
|
||
|
&:nth-child(1) {
|
||
|
flex: 3;
|
||
|
}
|
||
|
|
||
|
&:nth-child(2) {
|
||
|
width: 46px;
|
||
|
}
|
||
|
|
||
|
&:nth-child(3) {
|
||
|
flex: 3;
|
||
|
}
|
||
|
|
||
|
> p {
|
||
|
&:first-child {
|
||
|
font-weight: bolder;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&.Box {
|
||
|
border-top: 1px solid #000;
|
||
|
// border-bottom: 1px solid #000;
|
||
|
padding: 0.5rem 0 0 0;
|
||
|
margin-bottom: 0.5rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.TaskShippingOrderCompareMainList {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
margin-bottom: 0.5rem;
|
||
|
|
||
|
> p {
|
||
|
flex: 2;
|
||
|
|
||
|
&:nth-child(1) {
|
||
|
flex: 1;
|
||
|
}
|
||
|
|
||
|
&:nth-child(3) {
|
||
|
flex: 0;
|
||
|
margin: 0 1rem;
|
||
|
}
|
||
|
|
||
|
&:nth-child(4) {
|
||
|
flex: 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&.BoxNo {
|
||
|
padding-top: 0.5rem;
|
||
|
border-top: 1px solid #000;
|
||
|
|
||
|
&:nth-child(1) {
|
||
|
padding-top: 0;
|
||
|
border: none;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.bcfile-title {
|
||
|
border-bottom: 1px dashed black;
|
||
|
padding-bottom: 5px;
|
||
|
margin-bottom: 10px;
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
justify-content: space-between;
|
||
|
}
|
||
|
|
||
|
.bc-box {
|
||
|
max-height: 200px;
|
||
|
overflow-y: auto;
|
||
|
padding-right: 14px;
|
||
|
|
||
|
.bc-item {
|
||
|
margin: 7px 0px;
|
||
|
display: flex;
|
||
|
justify-content: space-between;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.txfcSpan {
|
||
|
width: 140px;
|
||
|
display: inline-block;
|
||
|
}
|
||
|
|
||
|
.flag-icon {
|
||
|
color: #1d8aff;
|
||
|
cursor: pointer;
|
||
|
font-size: 20px;
|
||
|
}
|
||
|
|
||
|
/deep/ .vxe-table--render-default .vxe-body--row.row--checked {
|
||
|
background: #fff3e0 !important;
|
||
|
}
|
||
|
|
||
|
/deep/ .booking-from-box .ant-form-item-label > label::after {
|
||
|
margin-right: 1px !important;
|
||
|
}
|
||
|
</style>
|
||
|
<style lang="less">
|
||
|
.vxe-table--render-default .vxe-body--row.row--current {
|
||
|
background: #9be945 !important;
|
||
|
}
|
||
|
|
||
|
.vxe-table--render-default {
|
||
|
color: black;
|
||
|
}
|
||
|
|
||
|
.fangdan-modal {
|
||
|
position: fixed;
|
||
|
top: 100px;
|
||
|
left: 36%;
|
||
|
width: 400px;
|
||
|
background-color: #fff;
|
||
|
background-clip: padding-box;
|
||
|
border: 0;
|
||
|
border-radius: 2px;
|
||
|
-webkit-box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||
|
pointer-events: auto;
|
||
|
padding: 20px;
|
||
|
z-index: 999;
|
||
|
}
|
||
|
</style>
|
||
|
<style lang="less" scoped>
|
||
|
:deep(.vxe-toolbar) {
|
||
|
display: none;
|
||
|
}
|
||
|
:deep(.vben-basic-form--compact) {
|
||
|
display: none;
|
||
|
}
|
||
|
//
|
||
|
:deep(.vben-basic-table-header__toolbar) {
|
||
|
display: flex;
|
||
|
.nav-box {
|
||
|
flex: 1;
|
||
|
}
|
||
|
}
|
||
|
</style>
|
||
|
<style lang="less" scoped>
|
||
|
:deep(.ant-input-affix-wrapper) {
|
||
|
padding: 0 0 0 10px;
|
||
|
}
|
||
|
:deep(.ant-input) {
|
||
|
margin: 0;
|
||
|
}
|
||
|
</style>
|