张同海 2 weeks ago
commit 94ab4e6418

@ -14,7 +14,7 @@ VITE_PUBLIC_PATH = /
# Please note that no line breaks
# VITE_PROXY = [["/basic-api","http://60.209.125.238"],["/upload","http://localhost:3300/upload"]]
# VITE_PROXY=[["/api","http://60.209.125.238:3008"],["/stage-api","https://www.666cxf.com/stage-api"]] # 开发 测试环境
VITE_PROXY=[["/api","http://60.209.125.238:3008"],["/stage-api","https://www.666cxf.com/stage-api"]] # 开发 测试环境
VITE_PROXY=[["/api","http://118.190.144.189:3008"],["/stage-api","https://www.666cxf.com/stage-api"]] # 开发 测试环境
# Delete console
VITE_DROP_CONSOLE = false

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M13 16L3 16C1.3 16 0 14.6 0 13L0 3C0 1.3 1.4 0 3 0L13 0C14.7 0 16 1.4 16 3L16 13C16 14.6 14.6 16 13 16Z" fill="#469FA6" >
</path>
<path d="M12.2004 9.20001L3.70039 9.20001C3.30039 9.20001 2.90039 8.90001 2.90039 8.40001L2.90039 7.40001C2.90039 7.00001 3.20039 6.60001 3.70039 6.60001L12.4004 6.60001C12.8004 6.60001 13.2004 6.90001 13.2004 7.40001L13.2004 8.50001C13.1004 8.80001 12.6004 9.20001 12.2004 9.20001Z" fill="#FFFFFF" >
</path>
<path d="M6.59961 12.2L6.59961 3.69999C6.59961 3.29999 6.89961 2.89999 7.39961 2.89999L8.49961 2.89999C8.89961 2.89999 9.29961 3.19999 9.29961 3.69999L9.29961 12.4C9.29961 12.8 8.99961 13.2 8.49961 13.2L7.39961 13.2C6.89961 13.1 6.59961 12.6 6.59961 12.2Z" fill="#FFFFFF" >
</path>
</svg>

After

Width:  |  Height:  |  Size: 882 B

@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M2.2 1.70001L10.1 1.70001C11.5 1.70001 12.3 2.40001 12.3 3.90001L12.3 13.8C12.3 15.2 11.6 16 10.1 16L2.2 16C0.7 15.9 0 15.2 0 13.7L0 3.80001C0 2.40001 0.7 1.70001 2.2 1.70001Z" fill="#45ABFF" >
</path>
<path d="M6.29961 0L13.7996 0C15.2996 0 15.9996 0.7 15.9996 2.2L15.9996 12.1C15.9996 13.5 15.2996 14.3 13.7996 14.3L6.29961 14.3C4.89961 14.3 4.09961 13.6 4.09961 12.1L4.09961 2.2C4.19961 0.7 4.89961 0 6.29961 0Z" fill="#45ABFF" >
</path>
<path d="M10.0996 1.70001L4.19961 1.70001C4.09961 1.90001 4.09961 2.10001 4.09961 2.30001L4.09961 12C4.09961 13.3 5.09961 14.3 6.29961 14.3L11.8996 14.3C11.9996 14.3 12.0996 14.3 12.2996 14.3C12.2996 14.1 12.3996 13.9 12.3996 13.7L12.3996 3.90001C12.2996 2.70001 11.2996 1.70001 10.0996 1.70001Z" fill="#216DE8" >
</path>
<path d="M8.6998 9.10001L2.9998 9.10001C2.5998 9.10001 2.2998 8.80001 2.2998 8.40001C2.2998 8.00001 2.5998 7.70001 2.9998 7.70001L8.6998 7.70001C9.0998 7.70001 9.39981 8.00001 9.39981 8.40001C9.39981 8.80001 9.0998 9.10001 8.6998 9.10001Z" fill="#FFFFFF" >
</path>
<path d="M8.6998 12.5L2.9998 12.5C2.5998 12.5 2.2998 12.2 2.2998 11.8C2.2998 11.4 2.5998 11.1 2.9998 11.1L8.6998 11.1C9.0998 11.1 9.39981 11.4 9.39981 11.8C9.39981 12.2 9.0998 12.5 8.6998 12.5Z" fill="#FFFFFF" >
</path>
<path d="M8.6998 5.79999L2.9998 5.79999C2.5998 5.79999 2.2998 5.49999 2.2998 5.09999C2.2998 4.69999 2.5998 4.39999 2.9998 4.39999L8.6998 4.39999C9.0998 4.39999 9.39981 4.69999 9.39981 5.09999C9.39981 5.49999 9.0998 5.79999 8.6998 5.79999Z" fill="#FFFFFF" >
</path>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" fill="none">
<path d="M13 16L3 16C1.3 16 0 14.6 0 13L0 3C0 1.3 1.4 0 3 0L13 0C14.7 0 16 1.4 16 3L16 13C16 14.6 14.6 16 13 16Z" fill="#C73035" >
</path>
<path d="M10.0999 11.9L3.9999 5.80001C3.6999 5.50001 3.6999 5.00001 3.9999 4.7L4.6999 4C4.9999 3.7 5.4999 3.6 5.7999 4L11.9999 10.2C12.2999 10.5 12.3999 11 11.9999 11.3L11.1999 12C10.8999 12.2 10.3999 12.2 10.0999 11.9Z" fill="#FFFFFF" >
</path>
<path d="M4.00013 10.1L10.1001 4C10.4001 3.7 10.9001 3.6 11.2001 4L12.0001 4.7C12.3001 5.00001 12.4001 5.50001 12.0001 5.80001L5.80013 12C5.50013 12.3 5.00013 12.4 4.70013 12L3.90013 11.2C3.70013 10.8 3.70013 10.3 4.00013 10.1Z" fill="#FFFFFF" >
</path>
</svg>

After

Width:  |  Height:  |  Size: 791 B

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"
viewBox="0 0 16 16" fill="none">
<path
d="M13.7 16L2.3 16C1 16 0 15 0 13.8L0 2.2C0 1 1 0 2.3 0L12.1 0C12.3 0 12.5 0.1 12.6 0.2L15.8 3.2C15.9 3.3 16 3.5 16 3.7L16 13.8C16 15 15 16 13.7 16Z"
fill="#FFB636">
</path>
<path
d="M9.89961 6.9L5.59961 6.9C4.49961 6.9 3.59961 6 3.59961 5L3.59961 0L11.8996 0L11.8996 5C11.8996 6 10.9996 6.9 9.89961 6.9Z"
fill="#FF7C0E">
</path>
<path
d="M9.5998 5.4999L7.1998 5.4999C6.6998 5.4999 6.2998 5.0999 6.2998 4.6999C6.2998 4.2999 6.6998 3.8999 7.1998 3.8999L9.5998 3.8999C10.0998 3.8999 10.4998 4.2999 10.4998 4.6999C10.4998 5.0999 10.0998 5.4999 9.5998 5.4999Z"
fill="#FFFFFF">
</path>
</svg>

After

Width:  |  Height:  |  Size: 939 B

@ -40,9 +40,10 @@
:min-height="tableHeightRef + 36"
:height="tableHeightRef + 35"
:row-config="{ isCurrent: true, isHover: true }"
:span-method="getBindValues.mergeRowMethod"
:column-config="{ resizable: true }"
:scroll-y="{ enabled: true, gt: 0, scrollToTopOnChange: true }"
:scroll-x="{ enabled: true, gt: 0 }"
:scroll-y="{ enabled: !getBindValues.isMerge ? true : false, gt: 0, scrollToTopOnChange: !getBindValues.isMerge ? true : false }"
:scroll-x="{ enabled: !getBindValues.isMerge ? true : false, gt: 0 }"
:sort-config="{ trigger: 'cell', remote: true }"
rowSelection
size="mini"
@ -225,6 +226,7 @@ export default defineComponent({
if (unref(v).tableComponent == 'vxe') {
getVxeColSetData()
}
console.log(v)
},
{ deep: true }
)

@ -205,8 +205,12 @@ export interface BasicTableProps<T = any> {
autoHeight?: number,
// 展开配置
expandConfig?:object
// 合并函数
mergeRowMethod?: Fn
// 是否展开
isExpand?: boolean
// 是否合并
isMerge?: boolean
// 在分页改变的时候清空选项
clearSelectOnPageChange?: boolean
//

@ -11,7 +11,7 @@
<span>{{ t('common.addText') }}</span>
</template>
<span v-if="btnKeys.includes('add') && !checkPermissions(show.add)" :class="`${prefixCls}-svg-btn`" @click="add">
<svg t="1732239931995" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14776" width="200" height="200"><path d="M832 1024H192c-108.8 0-192-89.6-192-192V192c0-108.8 89.6-192 192-192h640c108.8 0 192 89.6 192 192v640c0 102.4-89.6 192-192 192z" fill="#469FA6" p-id="14777"></path><path d="M780.8 588.8H236.8c-25.6 0-51.2-19.2-51.2-51.2v-64c0-25.6 19.2-51.2 51.2-51.2h556.8c25.6 0 51.2 19.2 51.2 51.2v70.4c-6.4 19.2-38.4 44.8-64 44.8z" fill="#FFFFFF" p-id="14778"></path><path d="M422.4 780.8V236.8c0-25.6 19.2-51.2 51.2-51.2h70.4c25.6 0 51.2 19.2 51.2 51.2v556.8c0 25.6-19.2 51.2-51.2 51.2H473.6c-32-6.4-51.2-38.4-51.2-64z" fill="#FFFFFF" p-id="14779"></path></svg>
<SvgIcon size="16" name="add-btn" />
</span>
</a-tooltip>
<!-- 复制 -->
@ -20,7 +20,7 @@
<span>{{ t('common.copyText') }}</span>
</template>
<span v-if="btnKeys.includes('copy') && !checkPermissions(show.copy)" :class="`${prefixCls}-svg-btn`" @click="copy">
<svg t="1732241194906" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16430" width="200" height="200"><path d="M140.8 108.8h505.6c89.6 0 140.8 44.8 140.8 140.8v633.6c0 89.6-44.8 140.8-140.8 140.8H140.8C44.8 1017.6 0 972.8 0 876.8V243.2c0-89.6 44.8-134.4 140.8-134.4z" fill="#45ABFF" p-id="16431"></path><path d="M403.2 0h480c96 0 140.8 44.8 140.8 140.8v633.6c0 89.6-44.8 140.8-140.8 140.8H403.2c-89.6 0-140.8-44.8-140.8-140.8V140.8C268.8 44.8 313.6 0 403.2 0z" fill="#45ABFF" p-id="16432"></path><path d="M646.4 108.8H268.8c-6.4 12.8-6.4 25.6-6.4 38.4V768c0 83.2 64 147.2 140.8 147.2h384c0-12.8 6.4-25.6 6.4-38.4V249.6c-6.4-76.8-70.4-140.8-147.2-140.8z" fill="#216DE8" p-id="16433"></path><path d="M556.8 582.4H192c-25.6 0-44.8-19.2-44.8-44.8 0-25.6 19.2-44.8 44.8-44.8h364.8c25.6 0 44.8 19.2 44.8 44.8s-19.2 44.8-44.8 44.8zM556.8 800H192c-25.6 0-44.8-19.2-44.8-44.8 0-25.6 19.2-44.8 44.8-44.8h364.8c25.6 0 44.8 19.2 44.8 44.8s-19.2 44.8-44.8 44.8zM556.8 371.2H192c-25.6 0-44.8-19.2-44.8-44.8s19.2-44.8 44.8-44.8h364.8c25.6 0 44.8 19.2 44.8 44.8 0 25.6-19.2 44.8-44.8 44.8z" fill="#FFFFFF" p-id="16434"></path></svg>
<SvgIcon size="16" name="copy-btn" />
</span>
</a-tooltip>
<!-- 删除 -->
@ -35,7 +35,7 @@
@confirm="del"
>
<span v-if="btnKeys.includes('del') && !checkPermissions(show.del)" :class="`${prefixCls}-svg-btn`">
<svg t="1732240833320" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15643" width="200" height="200"><path d="M832 1024H192c-108.8 0-192-89.6-192-192V192c0-108.8 89.6-192 192-192h640c108.8 0 192 89.6 192 192v640c0 102.4-89.6 192-192 192z" fill="#C73035" p-id="15644"></path><path d="M646.4 761.6L256 371.2c-19.2-19.2-19.2-51.2 0-70.4l44.8-44.8c19.2-19.2 51.2-25.6 70.4 0l396.8 396.8c19.2 19.2 25.6 51.2 0 70.4l-51.2 44.8c-19.2 12.8-51.2 12.8-70.4-6.4z" fill="#FFFFFF" p-id="15645"></path><path d="M256 646.4L646.4 256c19.2-19.2 51.2-25.6 70.4 0l51.2 44.8c19.2 19.2 25.6 51.2 0 70.4L371.2 768c-19.2 19.2-51.2 25.6-70.4 0l-51.2-51.2c-12.8-25.6-12.8-57.6 6.4-70.4z" fill="#FFFFFF" p-id="15646"></path></svg>
<SvgIcon size="16" name="del-btn" />
</span>
</a-popconfirm>
</a-tooltip>
@ -48,6 +48,7 @@
import { useDesign } from '/@/hooks/web/useDesign'
import { useI18n } from '/@/hooks/web/useI18n'
import { checkPermissions } from '/@/hooks/Permissions/index'
import { SvgIcon } from '/@/components/Icon'
const { prefixCls } = useDesign('ds-table-button')
const { t } = useI18n()
const props = defineProps({

@ -367,21 +367,21 @@ export const columns: BasicColumn[] = [
width: 200,
dataIndex: 'labelList',
slots: { default: 'labelList' },
customCell: sharedOnCell,
},
{
title: '舱位提单号',
align: 'left',
width: 160,
dataIndex: 'slotBookingNo',
customCell: sharedOnCell,
},
{
title: '订舱编号',
align: 'left',
width: 150,
dataIndex: 'slotNo',
customCell: sharedOnCell,
},
{
title: '船名/航次',
@ -390,7 +390,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'vessel',
showHeaderOverflow: true,
sortable: true,
customCell: sharedOnCell,
},
{
title: '舱位状态',
@ -399,77 +399,77 @@ export const columns: BasicColumn[] = [
dataIndex: 'statusName',
showHeaderOverflow: true,
sortable: true,
customCell: sharedOnCell,
},
{
title: '船公司',
align: 'left',
width: 100,
dataIndex: 'carrier',
customCell: sharedOnCell,
},
{
title: '合约号',
align: 'left',
width: 100,
dataIndex: 'contractNo',
customCell: sharedOnCell,
},
{
title: '承运模式',
align: 'left',
width: 100,
dataIndex: 'carriageTypeName',
customCell: sharedOnCell,
},
{
title: '订舱方式',
align: 'left',
width: 100,
dataIndex: 'bookingSlotTypeName',
customCell: sharedOnCell,
},
{
title: 'ETD',
align: 'left',
width: 100,
dataIndex: 'etd',
customCell: sharedOnCell,
},
{
title: 'ETA',
align: 'left',
width: 100,
dataIndex: 'eta',
customCell: sharedOnCell,
},
{
title: 'CANCELLATION',
align: 'left',
width: 150,
dataIndex: 'isCancellation',
customCell: sharedOnCell,
},
{
title: '提单类型',
align: 'left',
width: 100,
dataIndex: 'blIssueType',
customCell: sharedOnCell,
},
{
title: '订舱参考号',
align: 'left',
width: 100,
dataIndex: 'userReferNo',
customCell: sharedOnCell,
},
{
title: '船司参考号',
align: 'left',
width: 100,
dataIndex: 'carrierReferNo',
customCell: sharedOnCell,
},
{
title: '委托单位',
@ -542,238 +542,235 @@ export const columns: BasicColumn[] = [
align: 'left',
width: 100,
dataIndex: 'splitOrMergeFlag',
customCell: sharedOnCell,
},
{
title: '舱保类型',
align: 'left',
width: 100,
dataIndex: 'loadGuaranteeFlagName',
customCell: sharedOnCell1,
},
{
title: '来源邮箱',
align: 'left',
width: 100,
dataIndex: 'senderEmail',
customCell: sharedOnCell1,
},
{
title: '接受邮箱',
align: 'left',
width: 100,
dataIndex: 'recvEmail',
customCell: sharedOnCell1,
},
{
title: '收货地',
align: 'left',
width: 180,
dataIndex: 'placeReceipt',
customCell: sharedOnCell,
},
{
title: '交货地',
align: 'left',
width: 180,
dataIndex: 'placeDelivery',
customCell: sharedOnCell,
},
{
title: '装货港',
align: 'left',
width: 180,
dataIndex: 'portLoad',
customCell: sharedOnCell,
},
{
title: '卸货港',
align: 'left',
width: 180,
dataIndex: 'portDischarge',
customCell: sharedOnCell,
},
{
title: '卸货港国家地区',
align: 'left',
width: 180,
dataIndex: 'portDischargeCountry',
customCell: sharedOnCell,
},
{
title: '箱型箱量',
align: 'left',
width: 100,
dataIndex: 'ctnStat',
customCell: sharedOnCell,
},
{
title: 'WEEK',
align: 'left',
width: 100,
dataIndex: 'weekAt',
customCell: sharedOnCell,
},
{
title: '样单截止时间',
align: 'left',
width: 150,
dataIndex: 'siCutDate',
customCell: sharedOnCell,
},
{
title: 'VGM截止时间',
align: 'left',
width: 150,
dataIndex: 'vgmSubmissionCutDate',
customCell: sharedOnCell,
},
{
title: '截港时间',
align: 'left',
width: 150,
dataIndex: 'cyCutDate',
customCell: sharedOnCell,
},
{
title: '入港清单截止',
align: 'left',
width: 150,
dataIndex: 'manifestCutDate',
customCell: sharedOnCell,
},
{
title: 'MDGF截止',
align: 'left',
width: 150,
dataIndex: 'mdgfCutDate',
customCell: sharedOnCell,
},
{
title: '航线',
align: 'left',
width: 100,
dataIndex: 'laneName',
customCell: sharedOnCell,
},
{
title: '创建日期',
align: 'left',
width: 150,
dataIndex: 'createTime',
customCell: sharedOnCell,
},
{
title: '创建人',
align: 'left',
width: 100,
dataIndex: 'createUserName',
customCell: sharedOnCell,
},
{
title: '更新日期',
align: 'left',
width: 150,
dataIndex: 'updateTime',
customCell: sharedOnCell,
},
{
title: '更新人',
align: 'left',
width: 100,
dataIndex: 'updateUserName',
customCell: sharedOnCell,
},
{
title: 'VGM回执',
align: 'left',
width: 100,
dataIndex: 'vgmRltStat',
customCell: sharedOnCell,
},
{
title: 'SI回执',
align: 'left',
width: 100,
dataIndex: 'siRltStat',
customCell: sharedOnCell,
},
{
title: '提箱',
align: 'left',
width: 100,
dataIndex: 'takeCtnRltStat',
customCell: sharedOnCell,
},
{
title: '还箱',
align: 'left',
width: 100,
dataIndex: 'returnCtnRltStat',
customCell: sharedOnCell,
},
{
title: '预甩',
align: 'left',
width: 100,
dataIndex: 'nominationRltStat',
customCell: sharedOnCell,
},
{
title: '舱位变更',
align: 'left',
width: 100,
dataIndex: 'amendmentRltStat',
customCell: sharedOnCell,
},
{
title: '舱位取消',
align: 'left',
width: 100,
dataIndex: 'cancellationRltStat',
customCell: sharedOnCell,
},
{
title: '卸船未提货',
align: 'left',
width: 100,
dataIndex: 'dischargeFullRltStat',
customCell: sharedOnCell,
},
{
title: '提箱未还空箱',
align: 'left',
width: 150,
dataIndex: 'gateOutfullRltStat',
customCell: sharedOnCell,
},
{
title: '费用信息',
align: 'left',
width: 100,
dataIndex: 'typeCode',
customCell: sharedOnCell,
},
{
title: '备注',
align: 'left',
width: 100,
dataIndex: 'remark',
customCell: sharedOnCell,
},
{
title: '计费时间',
align: 'left',
width: 100,
dataIndex: 'priceCalculationDate',
customCell: sharedOnCell,
},
{
title: '操作',
align: 'center',
width: 50,
dataIndex: 'action',
customCell: sharedOnCell,
fixed: 'right',
},
]

@ -1,23 +1,18 @@
<template>
<div class="main">
<div style="width: 74%;margin-right: 20px;background: white;padding: 10px;">
<div style="margin-bottom: 10px;">
<a-button type="link" size="mini" @click="handleSave">
<span class="iconfont icon-jiahao2fill"></span>
保存
</a-button>
<!-- <a-button v-if="type === 'edit'" style="margin: 0 10px;" type="link" size="mini">
<span class="iconfont icon-tijiao1"></span>
提交
</a-button>
<a-button v-if="type === 'edit'" type="link" size="mini">
<span class="iconfont icon-fuzhi3"></span>
审核
</a-button>
<a-button v-if="type === 'edit'" style="margin: 0 10px;" type="link" size="mini">
<span class="iconfont icon-guanli"></span>提交审核</a-button> -->
<div class="box-top">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="舱位台账"></a-tab-pane>
<a-tab-pane key="2" tab="日志"></a-tab-pane>
</a-tabs>
</div>
<div style="margin-bottom: 10px;margin-left: 20px">
<span class="icon-box" @click="handleSave">
<SvgIcon size="16" name="save-btn" />
</span>
</div>
<div style="display: flex;padding: 0 20px">
<div style="width: 74%;margin-right: 20px;">
<a-spin :spinning="loading">
<a-form :model="form" :wrapper-col="{ span: 21 }">
<div v-if="type === 'edit' && form.bookingSlotSaleInfoList.length && form.bookingSlotSaleInfoList.length > 0"
@ -39,8 +34,8 @@
:filter-option="false" :not-found-content="null" @change="e => {
ChangeUser(e, 'customerId', 5, index)
}" @search="SearchCustomer">
<a-select-option v-for="(item1, index1) in CustomerList" :key="index1"
:value="item1.pinYinCode">
<a-select-option v-for="(item1, index1) in CustomerList"
:key="index1" :value="item1.pinYinCode">
{{ item1.pinYinCode }}
</a-select-option>
</a-select>
@ -168,9 +163,11 @@
<div class="box-item">
<div class="title">
<span style="margin-right: 20px;">{{ type === 'edit' ? '舱位修改' : '舱位新增' }}</span>
<span style="background: #d78a6d;color: white;padding: 0 8px;font-size: 13px;font-weight: 400;"
<span
style="background: #d78a6d;color: white;padding: 0 8px;font-size: 13px;font-weight: 400;"
v-if="form.spliT_OR_MERGE_FLAG == 1">已拆票</span>
<span style="background: #d78a6d;color: white;padding: 0 8px;font-size: 13px;font-weight: 400;"
<span
style="background: #d78a6d;color: white;padding: 0 8px;font-size: 13px;font-weight: 400;"
v-if="form.spliT_OR_MERGE_FLAG == 2">已合票</span>
</div>
<BasicForm @register="registerForm" />
@ -185,9 +182,8 @@
<div class="box-item">
<div class="title">
<span>箱型箱量</span>
<span style="font-size: 12px;margin-left: 20px;cursor: pointer;font-weight: 400"
@click="handleOpenBoxList">
<span class="iconfont icon-jiahao2fill" style="color: rgba(37, 122, 250, 1);"></span>添加
<span @click="handleOpenBoxList" class="ctn-btn">
<i class="iconfont icon-xiugai-danse"></i>编辑
</span>
<span style="font-size: 12px;margin-left: 20px;" @click="boxFlag = true">合计:{{ boxTotal
}}</span>
@ -207,18 +203,17 @@
<div class="box-item">
<div class="title">
<span>用途</span>
<span style="font-size: 12px;margin-left: 20px;cursor: pointer;font-weight: 400"
@click="handleOpenUse">
<span class="iconfont icon-jiahao2fill" style="color: rgba(37, 122, 250, 1);"></span>添加
<span @click="handleOpenUse" class="icon-box gray">
<SvgIcon size="16" name="add-btn" />
</span>
</div>
<div class="use-list">
<div class="item" v-for="(item, index) in form.useToList" :key="item.useTo">
<i @click="delUse(index)" class="icon-shanchu2 iconfont"></i>
<span>{{ item.useToName }}</span>
<span> {{ item.useToValShow }} </span>
<i @click="editUse(item, index)" style="margin-left: 5px;"
class="icon-bianji1 iconfont"></i>
<i @click="delUse(index)" class="icon-chahao iconfont"></i>
</div>
</div>
</div>
@ -226,13 +221,12 @@
<div class="box-item">
<div class="title">
<span>舱位延期</span>
<span style="font-size: 12px;margin-left: 20px;cursor: pointer;font-weight: 400"
@click="openRoll">
<span class="iconfont icon-jiahao2fill" style="color: rgba(37, 122, 250, 1);"></span>新增
<span @click="openRoll" class="icon-box gray">
<SvgIcon size="16" name="add-btn" />
</span>
</div>
<div class="cost">
<BasicTable class="ds-table" @register="registerTable1">
<BasicTable @register="registerTable1">
</BasicTable>
</div>
</div>
@ -240,14 +234,14 @@
<div class="box-item">
<div class="title">费用</div>
<div class="cost">
<BasicTable class="ds-table" @register="registerTable">
<BasicTable @register="registerTable">
</BasicTable>
</div>
</div>
</a-spin>
</div>
<div style="width: 26%;padding-right: 20px;margin-top: 53px">
<div style="width: 26%;">
<div class="card">
<DsFile ref="dsFile" :id="id" :show="false" height="300">
<div class="title">
@ -259,12 +253,14 @@
</div>
</DsFile>
</div>
<div class="card">
<!-- <div class="card">
<div class="title">日志</div>
<log :logList="form.logList"></log>
</div> -->
</div>
</div>
<a-modal :footer="null" title="请选择箱型" width="600px" @cancel="boxFlag = false" :visible="boxFlag">
<div class="boxList">
<div class="boxItem" :class="{ 'active': item.flag }" @click="handleClick(item)" v-for="item in boxList"
@ -300,12 +296,14 @@ import {
GetCustomerServiceList, GetSaleList, GetVouchingClerkList
} from '/@/views/operation/seaexport/api/BookingLedger'
import { useOptionsStore } from '/@/store/modules/options'
import { SvgIcon } from '/@/components/Icon'
import log from './log.vue'
import { useRoute, useRouter } from 'vue-router'
const optionsStore = useOptionsStore()
import { BasicTable, useTable, TableAction } from '/@/components/Table'
import { BasicForm, useForm } from '/@/components/Form/index'
import { detialForm, detialTimeForm, useDetailForm, rollForm } from '../columns'
const activeKey = ref('1')
//
const [registerForm,
{
@ -868,6 +866,8 @@ async function handleSave() {
createMessage.error(res.message)
loading.value = false
}
}).catch(error => {
loading.value = false
})
} finally {
}
@ -999,20 +999,31 @@ function getWeek(dateTime) {
}
.box-item {
border: 1px solid rgba(232, 235, 237, 1);
padding: 15px;
margin-bottom: 20px
padding: 15px 20px;
margin-bottom: 16px;
border-radius: 6px;
background: rgba(255, 255, 255, 1);
border: 1px solid rgba(204, 214, 223, 1);
}
.main {
display: flex;
background-color: rgba(240, 242, 245, 1);
.box-top {
height: 48px;
line-height: 48px;
background-color: white;
padding-left: 20px;
margin-bottom: 10px;
}
}
.title {
font-weight: bold;
color: black;
margin-bottom: 15px;
font-size: 13px;
margin-bottom: 13px;
font-size: 14px;
}
.week {
@ -1263,8 +1274,10 @@ function getWeek(dateTime) {
.card {
border: 1px solid #E8EBED;
padding: 20px 16px;
border-radius: 6px;
background: rgba(255, 255, 255, 1);
border: 1px solid rgba(204, 214, 223, 1);
margin-bottom: 20px;
.title {
@ -1290,7 +1303,7 @@ function getWeek(dateTime) {
}
:deep(.ds-table .ant-table-container,
.ds-table-detail .ant-table-container) {
.ds-table-detail .ant-table-container) {
padding: 0px !important;
}
@ -1328,15 +1341,17 @@ function getWeek(dateTime) {
.use-list {
display: flex;
flex-wrap: wrap;
font-size: 12px;
.item {
border: 1px solid rgba(232, 235, 237, 1);
padding: 5px;
background: #f5f9fc;
border-radius: 4px;
background: rgba(240, 242, 245, 1);
color: black;
margin-right: 15px;
display: flex;
margin-bottom: 10px;
height: 26px;
line-height: 26px;
align-items: center;
justify-content: space-around;
}
@ -1345,4 +1360,74 @@ function getWeek(dateTime) {
cursor: pointer;
}
}
:deep(.ant-tabs-nav-list) {
display: flex;
width: 100%;
height: 48px;
line-height: 48px;
}
:deep(.ant-tabs-tab + .ant-tabs-tab) {
margin: 0px !important;
}
:deep(.ant-tabs-ink-bar) {
height: 3px !important;
}
:deep(.ant-tabs-tab-btn) {
font-size: 12px;
font-weight: 200;
color: #7a8996;
line-height: 14px;
}
:deep(.ant-tabs-tab-active .ant-tabs-tab-btn) {
color: #121826 !important;
font-weight: bold;
}
:deep(.ant-tabs-tab) {
display: inline-block;
text-align: center;
width: 5%;
line-height: 12px;
padding: 17px 0;
}
:deep(.ant-tabs-nav) {
margin: 0px !important;
}
.icon-box {
border-radius: 4px;
background: rgba(255, 255, 255, 1);
margin-right: 10px;
cursor: pointer;
height: 26px;
width: 26px;
line-height: 27px;
text-align: center;
display: inline-block;
}
.ctn-btn {
cursor: pointer;
font-size: 12px;
margin-left: 8px;
border-radius: 4px;
background: rgba(240, 242, 245, 1);
padding: 5px 6px;
font-weight: 300;
.iconfont {
font-size: 14px
}
}
.gray {
background: rgba(240, 242, 245, 1) !important;
margin-left: 10px;
}
</style>

@ -166,7 +166,26 @@ const [
queryStr.value = formatParams(p)
return formatParams(p)
},
mergeRowMethod: ({ row, _rowIndex, column, visibleData }) => {
const arr = ['saleTime', 'sellingPrice', 'goodsName', 'shipper', 'sale', 'business', 'op', 'doc', 'custService', 'customerName']
if ((!arr.includes(column.property)) || column.type === 'checkbox' || column.field === 'caozuo') {
const prevRow = visibleData[_rowIndex - 1];
let nextRow = visibleData[_rowIndex + 1];
if (prevRow && prevRow.id === row.id) {
return { rowspan: 0, colspan: 0 };
} else {
let countRowspan = 1;
while (nextRow && nextRow.id === row.id) {
nextRow = visibleData[++countRowspan + _rowIndex];
}
if (countRowspan > 1) {
return { rowspan: countRowspan, colspan: 1 };
}
}
}
},
columns,
isMerge:true,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
@ -186,6 +205,9 @@ const [
canResize: true,
resizeHeightOffset: 45,
immediate: true,
tableComponent: 'vxe',
id: '0',
autoHeight: window.innerHeight - 325.5
})
const generation = ref('')
function handleOpenSlot(row) {

@ -1,44 +1,81 @@
<template>
<BasicModal width="1300px" v-bind="$attrs" :use-wrapper="true" title="马士基订舱" @register="registerModal">
<a-spin :spinning="formLoading">
<div class="main">
<a-spin :spinning="formLoading">
<div>
<div style="margin-bottom: 14px;display: flex;align-items: center;">
<span class="title-text">马士基订舱</span>
<span class="icon-box" @click="handleSave">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"
viewBox="0 0 16 16" fill="none">
<path
d="M13.7 16L2.3 16C1 16 0 15 0 13.8L0 2.2C0 1 1 0 2.3 0L12.1 0C12.3 0 12.5 0.1 12.6 0.2L15.8 3.2C15.9 3.3 16 3.5 16 3.7L16 13.8C16 15 15 16 13.7 16Z"
fill="#FFB636">
</path>
<path
d="M9.89961 6.9L5.59961 6.9C4.49961 6.9 3.59961 6 3.59961 5L3.59961 0L11.8996 0L11.8996 5C11.8996 6 10.9996 6.9 9.89961 6.9Z"
fill="#FF7C0E">
</path>
<path
d="M9.5998 5.4999L7.1998 5.4999C6.6998 5.4999 6.2998 5.0999 6.2998 4.6999C6.2998 4.2999 6.6998 3.8999 7.1998 3.8999L9.5998 3.8999C10.0998 3.8999 10.4998 4.2999 10.4998 4.6999C10.4998 5.0999 10.0998 5.4999 9.5998 5.4999Z"
fill="#FFFFFF">
</path>
</svg>
</span>
<span class="icon-box" v-if="mskType === 'add'" @click="handleSubimt" type="success">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16.01025390625"
height="15.9814453125" viewBox="0 0 16.01025390625 15.9814453125" fill="none">
<path
d="M7.07846 12.1814L4.17846 10.6814C3.27846 10.2814 2.77846 10.5814 3.17846 11.6814C3.17846 11.6814 4.87846 15.7814 4.87846 15.9814L7.47846 14.2814C7.77846 13.9814 7.97846 13.4814 7.87846 13.0814C7.77846 12.6814 7.47846 12.3814 7.07846 12.1814Z"
fill="#5097FF">
</path>
<path
d="M14.5788 0.18125L0.478775 7.28125C-0.121225 7.58125 -0.121225 8.08125 0.278775 8.38125C0.378775 8.48125 0.478775 8.48125 0.578775 8.48125L3.37878 9.58125C4.17878 9.88125 4.87878 9.68125 5.57878 9.08125L11.8788 4.08125C12.0788 3.88125 12.1788 4.08125 12.0788 4.28125L6.47878 9.68125C6.27878 9.88125 6.17878 10.2812 6.17878 10.5813C6.27878 10.8812 6.47878 11.0813 6.77878 11.2812L7.07878 11.3812L12.1788 13.7812L12.2788 13.7812C12.8788 14.0813 13.5788 13.7812 13.7788 13.1812C13.7788 13.0813 13.7788 13.0813 13.8788 12.9812L13.8788 12.8812L15.9788 1.18125C16.1788 0.28125 15.3788 -0.31875 14.5788 0.18125Z"
fill="#1B65DD">
</path>
</svg>
</span>
<span v-if="mskType === 'copy'">:</span>
<a-input-number style="margin:0 10px;width: 120px !important;" v-if="mskType === 'copy'" :precision="0"
v-model:value="mskNumber" :min="1" :max="50" />
</div>
<a-form :rules="rules" ref="mskform" :model="form" :label-col="labelCol" :wrapper-col="wrapperCol">
<div class="title">MSK 订舱</div>
<div class="backgroud">
<div class="title">MSK 订舱</div>
<a-row>
<a-col :span="6">
<a-col :span="4">
<a-form-item>
<div>订舱产品代码</div>
<a-select allowClear @change="handleSelectProduct" size="small" disabled
v-model:value="form.productCode" style="width: 100%">
<a-select allowClear @change="handleSelectProduct" disabled v-model:value="form.productCode"
style="width: 100%">
<a-select-option value="MaerskContract">MaerskContract</a-select-option>
<a-select-option value="MaerskSpot">MaerskSpot</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item label="">
<div>请求类别</div>
<a-select allowClear v-model:value="form.sender" size="small" style="width: 100%">
<a-select allowClear v-model:value="form.sender" style="width: 100%">
<a-select-option value="BOOKAPI">BOOKAPI</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="6" v-if="mskBookType == 'api'">
<a-col :span="4" v-if="mskBookType == 'api'">
<a-form-item label="">
<div>订舱合同唯一ID</div>
<a-select :disabled="nodisabled" allowClear @select="handleSelectPrice"
v-model:value="form.priceReferenceId" size="small" style="width: 100%">
v-model:value="form.priceReferenceId" style="width: 100%">
<a-select-option v-for="(item, index) in contractnoList" :key="index" :value="item.id">
{{ item.contractName }} - {{ item.contractNo }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="vesselCarrierCode" label="">
<div>服务船公司</div>
<a-select allowClear v-model:value="form.vesselCarrierCode" size="small" style="width: 100%">
<a-select allowClear v-model:value="form.vesselCarrierCode" style="width: 100%">
<a-select-option value="MAEU">MAEU</a-select-option>
<a-select-option value="SEAU">SEAU</a-select-option>
<a-select-option value="SEJJ">SEJJ</a-select-option>
@ -47,9 +84,7 @@
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row v-if="mskBookType == 'api'">
<a-col :span="12">
<a-col :span="4" v-if="mskBookType == 'api'">
<a-form-item label="">
<div>是否持约</div>
<a-switch @change="handleChangePrice" v-model:checked="form.isBookingPartOwnPrice" />
@ -112,16 +147,16 @@
</div>
</div>
<div class="title">地点船期详情</div>
<div class="backgroud">
<div class="title">地点船期详情</div>
<a-row>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="sfcarrierGeoID" label="">
<div class="must">始发地</div>
<a-select v-model:value="form.sfcarrierGeoID" show-search allowClear @search="getSearchLocations"
@select="handleSelect" :filter-option="false" size="small" style="width: 100%">
@select="handleSelect" :filter-option="false" style="width: 100%">
<template v-if="fetching" #notFoundContent>
<a-spin size="small" />
<a-spin />
</template>
<a-select-option v-for="(item, index) in portloadList" :key="item.carrierGeoID"
:value="item.carrierGeoID">
@ -131,13 +166,13 @@
</a-select>
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="mdsfcarrierGeoID" label="">
<div class="must">目的地</div>
<a-select v-model:value="form.mdsfcarrierGeoID" show-search allowClear @select="handleSelect1"
@search="getSearchLocations1" :filter-option="false" size="small" style="width: 100%">
@search="getSearchLocations1" :filter-option="false" style="width: 100%">
<template v-if="fetching" #notFoundContent>
<a-spin size="small" />
<a-spin />
</template>
<a-select-option v-for="(item, index) in portdischargeList" :key="item.carrierGeoID"
:value="item.carrierGeoID">
@ -148,29 +183,27 @@
</a-select>
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="exportServiceMode" label="">
<div class="must">始发地服务模式</div>
<a-select allowClear v-model:value="form.exportServiceMode" size="small" style="width: 100%">
<a-select allowClear v-model:value="form.exportServiceMode" style="width: 100%">
<a-select-option value="CY">CY</a-select-option>
<a-select-option value="SD">SD</a-select-option>
<a-select-option value="CFS">CFS</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="importServiceMode" label="">
<div class="must">目的地运输条款</div>
<a-select allowClear v-model:value="form.importServiceMode" size="small" style="width: 100%">
<a-select allowClear v-model:value="form.importServiceMode" style="width: 100%">
<a-select-option value="CY">CY</a-select-option>
<a-select-option value="SD">SD</a-select-option>
<a-select-option value="CFS">CFS</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="6">
<a-col :span="4">
<a-form-item label="">
<div>预计离港日期</div>
<a-date-picker valueFormat="YYYY-MM-DD" style="width: 70%;"
@ -179,7 +212,7 @@
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item label="">
<div>强制不使用船期表订舱</div>
<a-switch v-model:checked="form.isSendNoSchedule">强制不使用船期表订舱</a-switch>
@ -189,6 +222,7 @@
<div class="box" v-for="(item, index) in shipData" :key="index">
<div class="top">
<span class="top-text">
<i class="iconfont icon-PC_gangkou"></i>
{{ item.orignCityName }}<span v-if="item.originRegionName">,</span>
{{ item.originRegionName }}<span v-if="item.originCountryName">,</span>
{{ item.originCountryName }}</span>
@ -201,63 +235,63 @@
item.totalCurrency }}</span>
<span style="color: black;font-weight: bold">{{ item.totalAmountShow }}</span>
</div>
<div style="display: flex;align-items: flex-end;">
<div class="box-bottom">
<div class="left" style="width: 100% !important;padding-right: 10px">
<div class="bottom">
<div class="item">
<div class="item-left">
<i class="iconfont icon-dingwei top-icon"></i>
<i class="iconfont icon-rili-xianxing top-icon"></i>
</div>
<div class="item-right">
<div>离港</div>
<div class="right-text">{{ item.etd }}</div>
<div>离港:{{ item.etd }}</div>
<div class="right-text"></div>
</div>
</div>
<div class="item">
<div class="item-left">
<i class="iconfont icon-dingwei top-icon"></i>
<i class="iconfont icon-rili-xianxing top-icon"></i>
</div>
<div class="item-right">
<div>到港</div>
<div class="right-text">{{ item.eta }}</div>
<div>到港:{{ item.eta }}</div>
<div class="right-text"></div>
</div>
</div>
<div class="item">
<div class="item-left">
<i class="iconfont icon-shijian1 top-icon"></i>
<i class="iconfont icon-naozhong-xianxing top-icon"></i>
</div>
<div class="item-right">
<div>运输时间</div>
<div class="right-text">{{ item.days }}天数</div>
<div>运输时间:{{ item.days }}天数</div>
<div class="right-text"></div>
</div>
</div>
<div class="item">
<div class="item-left"> <i class="iconfont icon-chuanfanguanli-chuanfanshenqing top-icon"></i>
</div>
<div class="item-right">
<div>船名/航次</div>
<div class="right-text">{{ item.vesselName }} / {{ item.carrierDepartureVoyageNumber }}</div>
<div>船名/航次:{{ item.vesselName }} / {{ item.carrierDepartureVoyageNumber }}</div>
<div class="right-text"></div>
</div>
</div>
</div>
<div v-if="item.legs" style="margin-top: 15px;">
<div v-for="(ite, index1) in item.legs" :key="index1" class="leg-item">
<span style="color: rgba(37, 122, 250, 1);font-weight: 700;" v-if="index1 < 9">0{{ index1 + 1
<span style="color: rgba(39, 94, 204, 1);font-weight: 400;" v-if="index1 < 9">0{{ index1 + 1
}}</span>
<span style="color: rgba(37, 122, 250, 1);font-weight: 700;" v-else>{{ index1 + 1 }}</span>
<i style="margin: 0 15px;" class="iconfont icon-chuanbo top-icon"></i>
<span style="color: rgba(39, 94, 204, 1);font-weight: 400;" v-else>{{ index1 + 1 }}</span>
<i style="margin: 0 15px;" class="iconfont icon-chuan-danse top-icon"></i>
<span style="margin-right: 5px;display: inline-block;width:220px">
{{ ite.from.cityName }}<span v-if="ite.from.regionName">,</span>
{{ ite.from.regionName }}<span v-if="ite.from.countryName">,</span>
{{ ite.from.countryName }}</span>
<span><span style="font-weight: bold;color: black">ETD</span>{{ ite.etd }}</span>
<span style="color: rgba(122, 137, 150, 1)"><span>ETD</span>{{ ite.etd }}</span>
<span style="margin: 0 10px;">--------</span>
<i style="margin: 0 15px;" class="iconfont icon-chuanbo top-icon"></i>
<i style="margin-right: 15px;" class="iconfont icon-PC_gangkou top-icon"></i>
<span style="margin-right: 10px;display: inline-block;min-width: 240px">
{{ ite.to.cityName }}<span v-if="ite.to.regionName">,</span>
{{ ite.to.regionName }}<span v-if="ite.to.countryName">,</span>
{{ ite.to.countryName }}</span>
<span><span style="font-weight: bold;color: black">ETA</span>{{ ite.eta }}</span>
<span style="color: rgba(122, 137, 150, 1)"><span>ETA</span>{{ ite.eta }}</span>
</div>
</div>
</div>
@ -265,95 +299,95 @@
</div>
</div>
<div class="title">货物详情</div>
<div class="backgroud">
<div class="title">货物详情</div>
<a-row>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="commodityName" label="">
<div class="must">商品名称</div>
<a-input disabled size="small" ref="commodityName" v-model:value="form.commodityName"
style="width: 70%;" />
<span @click="handleOpenSP" style="height: 20.8px;line-height: 20.8px;" class="open-btn">检索商品</span>
<a-input disabled ref="commodityName" v-model:value="form.commodityName" style="width: 70%;" />
<span @click="handleOpenSP" class="open-btn">检索商品</span>
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="commodityCodeType" label="">
<div class="must">商品编码类型</div>
<a-select allowClear v-model:value="form.commodityCodeType" size="small" style="width: 100%">
<a-select allowClear v-model:value="form.commodityCodeType" style="width: 100%">
<a-select-option value="MaerskCode">MaerskCode</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="totalCargoWeight" label="">
<div class="must">总重(KGS)</div>
<a-input-number style="width: 90%" size="small" v-model:value="form.totalCargoWeight" />
<a-input-number style="width: 90%" v-model:value="form.totalCargoWeight" />
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item name="cargoType" label="">
<div class="must">货物标志</div>
<a-select allowClear v-model:value="form.cargoType" size="small" style="width: 100%">
<a-select allowClear v-model:value="form.cargoType" style="width: 100%">
<a-select-option value="DRY">DRY</a-select-option>
<a-select-option value="REEFER">REEFER</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="6">
<a-col :span="4">
<a-form-item label="">
<div>是否冷冻处理</div>
<a-switch @change="handleChagneType" v-model:checked="form.isReefer" />
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item label="">
<div>温度</div>
<a-input-number :disabled="disabled" style="width: 100%" size="small"
v-model:value="form.temperature" />
<a-input-number :disabled="disabled" style="width: 100%" v-model:value="form.temperature" />
</a-form-item>
</a-col>
<a-col :span="6">
</a-row>
<a-row>
<a-col :span="4">
<a-form-item label="">
<div>货物探测器数量</div>
<a-input-number :min="0" :disabled="disabled" :precision="0" style="width: 100%" size="small"
<a-input-number :min="0" :disabled="disabled" :precision="0" style="width: 100%"
v-model:value="form.noOfProbes" />
</a-form-item>
</a-col>
<a-col :span="6">
<a-col :span="4">
<a-form-item label="">
<div>通风(/hour)</div>
<a-input-number :disabled="disabled" style="width: 74%" size="small"
v-model:value="form.ventilation" />
<a-input-number :disabled="disabled" style="width: 74%" v-model:value="form.ventilation" />
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="6">
<a-col :span="4">
<a-form-item label="">
<div>湿度(%)</div>
<a-input-number :min="0" :precision="0" :disabled="disabled" style="width: 84%" size="small"
<a-input-number :min="0" :precision="0" :disabled="disabled" style="width: 84%"
v-model:value="form.humidity" />
</a-form-item>
</a-col>
</a-row>
</div>
<a-row>
</a-row>
</div>
<div class="backgroud">
<div class="title">箱型箱量
<span @click="handleAdd" style="cursor: pointer;font-size: 15px;margin-left: 30px"><i
class="iconfont icon-zengjiatianjiajiajian"></i>添加</span>
<span @click="handleAdd" class="ctn-btn">
<i class="iconfont icon-xinzeng-danse"></i>新增
</span>
<span @click="handleDeleteCtn" class="ctn-btn">
<i class="iconfont icon-shanchu-danse"></i>删除
</span>
</div>
<a-table :pagination="false" size="small" bordered :data-source="form.ctns" :columns="columns">
<a-table :rowKey="(record, index) => { return index }"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: changeSelect }" style="margin-top: 10px"
size="small" :pagination="false" bordered :data-source="form.ctns" :columns="columns">
<template #bodyCell="{ column, record, index }">
<template v-if="column.dataIndex === 'ctnCode'">
<a-select show-search @search="handleSearchCtn" v-model:value="record.ctnCode" @change="handleCtnChange(record)"
:filter-option="false" size="small" style="width: 100%">
<a-select show-search @search="handleSearchCtn" v-model:value="record.ctnCode"
@change="handleCtnChange(record)" :filter-option="false" style="width: 100%">
<a-select-option v-for="(item, index) in ctnallList" :key="index" :value="item.ediCode">
{{ item.ctnName }}
</a-select-option>
@ -361,42 +395,25 @@
</template>
<template v-if="column.dataIndex === 'ctnNum'">
<a-input-number style="width: 70%" :min="1" :precision="0" size="small" v-model:value="record.ctnNum" />
<a-input-number style="width: 70%" :min="1" :precision="0" v-model:value="record.ctnNum" />
</template>
<template v-if="column.dataIndex === 'ctnSufferWeight'">
<a-input-number style="width: 70%" :precision="0" size="small" v-model:value="record.ctnSufferWeight" />
<a-input-number style="width: 70%" :precision="0" v-model:value="record.ctnSufferWeight" />
</template>
<template v-if="column.dataIndex === 'operation'">
<DeleteOutlined style="color: red;" @click="handleDeleteCtn(index)" />
</template>
</template>
</a-table>
<a-form-item>
<a-checkbox v-model:checked="form.isShipperOwned">我希望使用托运人自己的集装箱</a-checkbox>
<a-checkbox v-model:checked="form.isImportReturned">我想使用进口退货集装箱或者其他三角集运选项</a-checkbox>
</a-form-item>
</div>
</a-form>
</div>
</a-spin>
<template #footer>
<span v-if="mskType === 'copy'">:</span>
<a-input-number style="margin:0 10px;width: 120px !important;" v-if="mskType === 'copy'" :precision="0"
size="small" v-model:value="mskNumber" :min="1" :max="50" />
<a-button pre-icon="ant-design:close-outlined" type="warning" :loading="loading" ghost
style="margin-right: 0.8rem" @click="closeModal">取消</a-button>
<a-popconfirm title="确定发送吗?" ok-text="" cancel-text="" @confirm="handleSubimt">
<a-button pre-icon="ant-design:check-outlined" style="margin-right: 0.8rem" v-if="mskType === 'add'"
type="success">发送</a-button>
</a-popconfirm>
<a-button pre-icon="ant-design:check-circle-outlined" type="primary" :loading="loading"
@click="handleSave">保存</a-button>
</template>
</BasicModal>
<a-modal title="检索船期" :footer="null" :visible="visible" width="1300px" @cancel="visible = false">
<div class="backgroud">
@ -419,7 +436,7 @@
<a-form-item label="">
<div>箱型</div>
<a-select show-search v-model:value="searchForm.isoEquipmentCode" :filter-option="filterOption"
size="small" style="width: 100%">
style="width: 100%">
<a-select-option v-for="(item, index) in ctnallList" :key="index" :value="item.ediCode">
{{ item.ctnName }}
</a-select-option>
@ -429,13 +446,13 @@
<a-col :span="5">
<a-form-item label="">
<div>船名</div>
<a-input size="small" v-model:value="searchForm.vesselName" />
<a-input v-model:value="searchForm.vesselName" />
</a-form-item>
</a-col>
<a-col :span="5">
<a-form-item label="">
<div>航次号</div>
<a-input size="small" v-model:value="searchForm.carrierDepartureVoyageNumber" />
<a-input v-model:value="searchForm.carrierDepartureVoyageNumber" />
</a-form-item>
</a-col>
</a-row>
@ -446,6 +463,7 @@
<div class="box" v-for="(item, index) in shipList" :key="index">
<div class="top">
<span class="top-text">
<i class="iconfont icon-PC_gangkou"></i>
{{ item.orignCityName }}<span v-if="item.originRegionName">,</span>
{{ item.originRegionName }}<span v-if="item.originCountryName">,</span>
{{ item.originCountryName }}</span>
@ -463,57 +481,58 @@
<div class="bottom">
<div class="item">
<div class="item-left">
<i class="iconfont icon-dingwei top-icon"></i>
<i class="iconfont icon-rili-xianxing top-icon"></i>
</div>
<div class="item-right">
<div>离港</div>
<div class="right-text">{{ item.etd }}</div>
<div>离港:{{ item.etd }}</div>
<div class="right-text"></div>
</div>
</div>
<div class="item">
<div class="item-left">
<i class="iconfont icon-dingwei top-icon"></i>
<i class="iconfont icon-rili-xianxing top-icon"></i>
</div>
<div class="item-right">
<div>到港</div>
<div class="right-text">{{ item.eta }}</div>
<div>到港:{{ item.eta }}</div>
<div class="right-text"></div>
</div>
</div>
<div class="item">
<div class="item-left">
<i class="iconfont icon-shijian1 top-icon"></i>
<i class="iconfont icon-naozhong-xianxing top-icon"></i>
</div>
<div class="item-right">
<div>运输时间</div>
<div class="right-text">{{ item.days }}天数</div>
<div>运输时间:{{ item.days }}天数</div>
<div class="right-text"></div>
</div>
</div>
<div class="item">
<div class="item-left"> <i class="iconfont icon-chuanfanguanli-chuanfanshenqing top-icon"></i> </div>
<div class="item-left"> <i class="iconfont icon-chuanfanguanli-chuanfanshenqing top-icon"></i>
</div>
<div class="item-right">
<div>船名/航次</div>
<div class="right-text">{{ item.vesselName }} / {{ item.carrierDepartureVoyageNumber }}</div>
<div>船名/航次:{{ item.vesselName }} / {{ item.carrierDepartureVoyageNumber }}</div>
<div class="right-text"></div>
</div>
</div>
</div>
<div v-if="item.legs" style="margin-top: 15px;">
<div v-for="(ite, index1) in item.legs" :key="index1" class="leg-item">
<span style="color: rgba(37, 122, 250, 1);font-weight: 700;" v-if="index1 < 9">0{{ index1 + 1
<span style="color: rgba(39, 94, 204, 1);font-weight: 400;" v-if="index1 < 9">0{{ index1 + 1
}}</span>
<span style="color: rgba(37, 122, 250, 1);font-weight: 700;" v-else>{{ index1 + 1 }}</span>
<i style="margin: 0 15px;" class="iconfont icon-chuanbo top-icon"></i>
<span style="color: rgba(39, 94, 204, 1);font-weight: 400;" v-else>{{ index1 + 1 }}</span>
<i style="margin: 0 15px;" class="iconfont icon-chuan-danse top-icon"></i>
<span style="margin-right: 5px;display: inline-block;width:220px">
{{ ite.from.cityName }}<span v-if="ite.from.regionName">,</span>
{{ ite.from.regionName }}<span v-if="ite.from.countryName">,</span>
{{ ite.from.countryName }}</span>
<span><span style="font-weight: bold;color: black">ETD</span>{{ ite.etd }}</span>
<span style="margin: 0 10px;">----------</span>
<i style="margin: 0 15px;" class="iconfont icon-chuanbo top-icon"></i>
<span style="color: rgba(122, 137, 150, 1)"><span>ETD</span>{{ ite.etd }}</span>
<span style="margin: 0 10px;">--------</span>
<i style="margin-right: 15px;" class="iconfont icon-PC_gangkou top-icon"></i>
<span style="margin-right: 10px;display: inline-block;min-width: 240px">
{{ ite.to.cityName }}<span v-if="ite.to.regionName">,</span>
{{ ite.to.regionName }}<span v-if="ite.to.countryName">,</span>
{{ ite.to.countryName }}</span>
<span><span style="font-weight: bold;color: black">ETA</span>{{ ite.eta }}</span>
<span style="color: rgba(122, 137, 150, 1)"><span>ETA</span>{{ ite.eta }}</span>
</div>
</div>
</div>
@ -526,7 +545,6 @@
<p>共计 {{ shipList.length }} 条船期记录</p>
</div>
</a-modal>
<a-modal title="检索商品" :visible="goodsFlag" width="1200px" @cancel="goodsFlag = false">
<div style="display: flex;background-color: rgba(245, 249, 252, 1);padding: 10px;">
<a-row style="width:90%">
@ -569,35 +587,28 @@
</a-spin>
</a-modal>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref, reactive, h } from 'vue'
import { Modal } from 'ant-design-vue';
import { BasicModal, useModalInner } from '/@/components/Modal'
import { useMultipleTabStore } from '/@/store/modules/multipleTab'
const tabStore = useMultipleTabStore()
import { GetCtnSelectList } from '/@/views/operation/seaexport/api/BookingLedger'
import {
getContractno, SearchCommodities, SearchShipSailingSchedule, mskGetGetInfoSpot, mskGetSaveSpot,
SearchLocations, SendMSKBooking, mskGetSave, mskGetGetInfo, GetInitInfoMsk, SendMSKBookingSpot, GetInitInfoMskApi,
CheckWarningBatchCopy, maskCopy, SearchLocationsSpot, SearchShipSailingScheduleSpot, maskCopySPOT, SearchCommoditiesSpot
} from './api'
import { DeleteOutlined } from '@ant-design/icons-vue';
import { useRoute, useRouter } from 'vue-router'
import { useGo } from '/@/hooks/web/usePage'
const go = useGo()
const router = useRouter()
const route = useRoute()
const form = ref({}) as any
const [registerModal, { setModalProps, closeModal }] = useModalInner((data) => {
const id = data.id ? data.id : null
const type = data.type ? data.type : null
const number = data.number ? data.number : null
const copyId = data.copyId ? data.copyId : null
if (data.mskBookType === 'api') {
init(id, type, number, copyId)
}
if (data.mskBookType === 'spot') {
spotInit(id, type, number, copyId)
}
setModalProps({ loading: false })
})
const loading = ref(false)
@ -765,8 +776,22 @@ onMounted(() => {
GetCtnSelectList().then(res => {
ctnallList.value = res.data
})
start()
});
function start() {
const id = route.query.id ? route.query.id : null
const type = route.query.type ? route.query.type : null
const number = route.query.number ? route.query.number : null
const copyId = route.query.copyId ? route.query.copyId : null
if (route.query.mskBookType === 'api') {
init(id, type, number, copyId)
}
if (route.query.mskBookType === 'spot') {
spotInit(id, type, number, copyId)
}
}
//
function getinitInfoMsk() {
// GetInitInfoMsk().then(res => {
@ -776,8 +801,8 @@ function getinitInfoMsk() {
mskApiInfo.value = res.data
})
}
function handleSearchCtn(val){
GetCtnSelectList({queryKey:val}).then(res => {
function handleSearchCtn(val) {
GetCtnSelectList({ queryKey: val }).then(res => {
ctnallList.value = res.data
})
}
@ -801,7 +826,7 @@ function init(id, type, number, copyId) {
if (!id) {
form.value = {
ctns: [
{ ctnSufferWeight: 15000, ctnNum: 1, ctnCode: '20G0', ctnName: '20GP' },
{ ctnSufferWeight: 15000, ctnNum: 1, ctnCode: '22G0', ctnName: '20GP' },
{ ctnSufferWeight: 15000, ctnNum: 1, ctnCode: '45G0', ctnName: '40HC' }
],
isReefer: false,
@ -854,6 +879,10 @@ function init(id, type, number, copyId) {
}
// showFlag.value = true
}
const selectedRowKeys = ref([])
function changeSelect(v) {
selectedRowKeys.value = v
}
//spot
function spotInit(id, type, number, copyId) {
mskType.value = type || 'add'
@ -1015,7 +1044,6 @@ function handleSubimt() {
if (res.succeeded) {
showFlag.value = false
createMessage.success('发送成功')
emit('handleSuccess')
} else {
createMessage.error(res.message)
}
@ -1027,7 +1055,6 @@ function handleSubimt() {
if (res.succeeded) {
showFlag.value = false
createMessage.success('发送成功')
emit('handleSuccess')
} else {
createMessage.error(res.message)
}
@ -1055,24 +1082,40 @@ function handleSave() {
mskGetSaveSpot(form.value).then(res => {
if (res.succeeded) {
showFlag.value = false
emit('handleSuccess')
closeModal()
createMessage.success('保存成功')
if (!form.value.id) {
const { fullPath } = route //
tabStore.closeTabByKey(fullPath, router)
setTimeout(() => {
go(`/cabinBookingDetail?id=${res.data}&mskBookType=api`)
}, 50)
}
} else {
createMessage.error(res.message)
}
formLoading.value = false
}).catch(error => {
formLoading.value = false
})
}
if (mskBookType.value === 'api') {
mskGetSave(form.value).then(res => {
if (res.succeeded) {
showFlag.value = false
emit('handleSuccess')
closeModal()
createMessage.success('保存成功')
if (!form.value.id) {
const { fullPath } = route //
tabStore.closeTabByKey(fullPath, router)
setTimeout(() => {
go(`/cabinBookingDetail?id=${res.data}&mskBookType=api`)
}, 50)
}
} else {
createMessage.error(res.message)
}
formLoading.value = false
}).catch(error => {
formLoading.value = false
})
}
} else {
@ -1126,6 +1169,8 @@ function handleCopyMore() {
createMessage.error(res.message)
}
formLoading.value = false
}).catch(error => {
formLoading.value = false
})
}
if (mskBookType.value === 'spot') {
@ -1138,6 +1183,8 @@ function handleCopyMore() {
createMessage.error(res.message)
}
formLoading.value = false
}).catch(error => {
formLoading.value = false
})
}
}
@ -1146,7 +1193,7 @@ function handleSelect(val) {
if (item.carrierGeoID === val) {
form.value.placeOfReceiptCityName = item.cityName
form.value.carrierCollectionOriginGeoID = item.carrierGeoID
// form.value.placeOfReceiptCountryCode = item.countryCode
form.value.placeOfReceiptCountryCode = item.countryCode
form.value.userPlaceOfReceiptUnLocCode = item.unLocationCode
form.value.userPlaceOfReceiptCityName = item.cityName
form.value.userPlaceOfReceiptCountryCode = item.countryCode
@ -1159,7 +1206,7 @@ function handleSelect1(val) {
portdischargeList.value.forEach(item => {
if (item.carrierGeoID === val) {
form.value.placeOfDeliveryCityName = item.cityName
// form.value.placeOfDeliveryCountryCode = item.countryCode
form.value.placeOfDeliveryCountryCode = item.countryCode
form.value.carrierDeliveryDestinationGeoID = item.carrierGeoID
form.value.userPlaceOfDeliveryUnLocCode = item.unLocationCode
form.value.userPlaceOfDeliveryCityName = item.cityName
@ -1250,8 +1297,15 @@ function handleSelectGoods(item) {
form.value.commodityCode = item.commodityCode
form.value.commodityName = item.commodityName
}
function handleDeleteCtn(index) {
form.value.ctns.splice(index, 1)
function handleDeleteCtn() {
for (let i = selectedRowKeys.value.length - 1; i >= 0; i--) {
const index = selectedRowKeys.value[i];
if (index >= 0 && index < form.value.ctns.length) {
form.value.ctns.splice(index, 1);
}
}
selectedRowKeys.value = []
}
function handleAdd() {
const data = {
@ -1259,7 +1313,6 @@ function handleAdd() {
ctnNum: 1,
ctnSufferWeight: 0
}
console.log(form.value.ctns)
form.value.ctns.push(data)
}
function filterOption(input, option) {
@ -1345,6 +1398,11 @@ function getContractnoList() {
</script>
<style lang="less" scoped>
.main {
background-color: #f0f2f5;
padding: 20px;
}
:deep(.ant-form-item) {
margin-bottom: 10px !important;
}
@ -1352,28 +1410,32 @@ function getContractnoList() {
:deep(.ant-form-item-label>label) {
height: 25px !important;
}
:deep(.ant-form-item-control-input-content) {
div{
div {
font-size: 12px;
}
span{
span {
font-size: 12px;
}
}
.leg-item {
border-radius: 2px;
background: rgba(245, 249, 252, 1);
border-left: 1px solid rgba(37, 122, 250, 1);
border-radius: 4px;
background: white;
border-left: 1px solid rgba(39, 94, 204, 1);
margin-top: 5px;
display: flex;
align-items: center;
padding: 12px 15px;
padding: 6px 15px;
}
.backgroud {
background-color: rgba(245, 249, 252, 1);
padding: 15px 20px 5px 20px;
padding: 15px 20px;
border-radius: 4px;
background: rgba(255, 255, 255, 1);
border: 1px solid rgba(204, 214, 223, 1);
margin-bottom: 15px
}
@ -1381,8 +1443,8 @@ function getContractnoList() {
cursor: pointer;
border-radius: 4px;
color: rgba(37, 122, 250, 1);
height: 28px;
line-height: 28px;
height: 26px;
line-height: 24px;
text-align: center;
padding: 0 8px;
border: 1px solid rgba(37, 122, 250, 1);
@ -1390,6 +1452,29 @@ function getContractnoList() {
background: white;
}
html[data-theme='blue'] .open-btn {
border: 1px solid rgba(37, 122, 250, 1);
color: rgba(37, 122, 250, 1);
}
html[data-theme='white'] .open-btn {
border: 1px solid rgba(37, 122, 250, 1);
color: rgba(37, 122, 250, 1);
}
html[data-theme='black'] .open-btn {
border: 1px solid rgba(255, 102, 0, 1);
color: rgba(255, 102, 0, 1);
}
.box-bottom {
display: flex;
align-items: flex-end;
background-color: rgba(245, 249, 252, 1);
padding-top: 15px;
padding-bottom: 20px;
}
.good-top {
height: 36px;
line-height: 36px;
@ -1421,11 +1506,11 @@ function getContractnoList() {
font-weight: bold;
color: black;
margin-bottom: 10px;
font-size: 12px;
font-size: 14px;
}
.top-icon {
font-size: 17px;
font-size: 14px;
color: rgba(37, 122, 250, 1);
}
@ -1443,8 +1528,6 @@ function getContractnoList() {
.box {
margin: 10px 0;
background: white;
padding-bottom: 20px;
margin-bottom: 20px;
.left {
width: 90%;
@ -1458,10 +1541,9 @@ function getContractnoList() {
}
.top {
margin-bottom: 15px;
display: flex;
align-items: center;
background: rgba(37, 122, 250, 1);
background: rgba(39, 94, 204, 1);
padding: 10px 20px;
font-size: 14px;
width: 100%;
@ -1489,6 +1571,7 @@ function getContractnoList() {
display: flex;
width: 21%;
margin-right: 15px;
align-items: center;
.item-left {
margin-right: 4px;
@ -1501,5 +1584,67 @@ function getContractnoList() {
color: red;
margin-right: 4px;
font-size: 14px;
line-height: 18px;
}
.title-text {
color: rgba(18, 24, 38, 1);
font-size: 14px;
font-weight: bold;
margin-right: 10px;
}
.icon-box {
border-radius: 4px;
background: rgba(255, 255, 255, 1);
margin-right: 10px;
cursor: pointer;
height: 26px;
width: 26px;
line-height: 26px;
text-align: center;
display: inline-block;
}
.item-right {
font-size: 12px
}
:deep(.ant-select-selector) {
height: 26px !important;
}
:deep(.ant-select-selection-item) {
line-height: 26px !important;
}
:deep(.ant-select-selector) {
line-height: 26px !important;
}
:deep(.ant-input-number-input) {
height: 26px !important;
}
:deep(.ant-input) {
height: 26px !important;
}
:deep(.ant-picker) {
height: 26px !important;
}
.ctn-btn {
cursor: pointer;
font-size: 12px;
margin-left: 8px;
border-radius: 4px;
background: rgba(240, 242, 245, 1);
font-weight: 300;
padding: 5px 7px;
.iconfont {
font-size: 14px
}
}
</style>

@ -9,7 +9,7 @@
<span @click="handleSendAll" class="iconfont icon-piliangtijiao-danse">批量发送</span>
<span @click="openTime" class="icon-dingshidingcang-danse iconfont">定时订舱</span>
<a-popconfirm title="确认取消吗?" ok-text="" cancel-text="" @confirm="cancelTime">
<span @click="openTime" class="icon-quxiaodingshi-danse iconfont">取消定时</span>
<span class="icon-quxiaodingshi-danse iconfont">取消定时</span>
</a-popconfirm>
</TableButton>
</a-spin>
@ -41,8 +41,8 @@
</template>
</template>
</BasicTable>
<cabinModal @handleSuccess="handleSuccess" @handleSuccessCopy="handleSuccessCopy" @register="registerModal">
</cabinModal>
<!-- <cabinModal @handleSuccess="handleSuccess" @handleSuccessCopy="handleSuccessCopy" @register="registerModal">
</cabinModal> -->
<a-modal title="输入复制数量" :visible="copyflag" :footer="null" @cancel="copyflag = false">
<a-form ref="formRef" :rules="rules" :model="copyMoreForm" :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }">
@ -94,13 +94,13 @@ import {
} from './api'
import { columns, searchFormSchema } from './columns'
import { BulbFilled, CheckCircleFilled } from '@ant-design/icons-vue';
import cabinModal from './detail.vue'
import { useModal } from '/@/components/Modal'
import { reactive, ref, h, onMounted } from 'vue';
import { useGo } from '/@/hooks/web/usePage'
import { useMessage } from '../../../hooks/web/useMessage'
import { formatParams } from '/@/hooks/web/common'
const { createMessage } = useMessage()
const [registerModal, { openModal }] = useModal()
const go = useGo()
const [registerTable, { reload, getVxeSelectRows, setLoading }] = useTable({
api: async (p) => {
const res: API.DataResult = await mskGetPage(p)
@ -155,10 +155,10 @@ function getTaskTimeList() {
}
function handleEdit(row) {
if (row.bookingChannelType === 'CON_API') {
openModal(true, { mskBookType: 'api', id: row.id })
go('/cabinBookingDetail?mskBookType=api&id='+row.id)
}
if (row.bookingChannelType === 'SPOT_API') {
openModal(true, { mskBookType: 'spot', id: row.id })
go('/cabinBookingDetail?mskBookType=spot&id='+row.id)
}
}
const timeFlag = ref(false)
@ -188,14 +188,14 @@ function handleDelete() {
}
function handleAdd() {
if (tenantParam.value.length === 0) {
openModal(true, { mskBookType: 'api' })
go('/cabinBookingDetail?mskBookType=api')
}
if (tenantParam.value.length === 1) {
if (tenantParam.value[0] === 'MSK_CON_API') {
openModal(true, { mskBookType: 'api' })
go('/cabinBookingDetail?mskBookType=api')
}
if (tenantParam.value[0] === 'MSK_SPOT_API') {
openModal(true, { mskBookType: 'api' })
go('/cabinBookingDetail?mskBookType=api')
}
}
if (tenantParam.value.length > 1) {
@ -223,10 +223,10 @@ const mskSpotFlag = ref(false)
const mskApiFlag = ref(false)
function handleOpen(type) {
if (type === 'api') {
openModal(true, { mskBookType: 'api', type: 'add' })
go('/cabinBookingDetail?mskBookType=api&type=add')
}
if (type === 'spot') {
openModal(true, { mskBookType: 'spot', type: 'add' })
go('/cabinBookingDetail?mskBookType=spot&type=add')
}
addFlag.value = false
}
@ -247,10 +247,12 @@ function handleChange() {
return item.id
})
if (select[0].bookingChannelType === 'CON_API') {
openModal(true, { mskBookType: 'api', id: pkIdArr[0], type: 'copy', number: copyMoreForm.number, copyId: pkIdArr[0] })
// openModal(true, { mskBookType: 'api', id: pkIdArr[0], type: 'copy', number: copyMoreForm.number, copyId: pkIdArr[0] })
go('/cabinBookingDetail?mskBookType=api&type=copy&number='+copyMoreForm.number+'&copyId='+pkIdArr[0]+'&id='+pkIdArr[0])
}
if (select[0].bookingChannelType === 'SPOT_API') {
openModal(true, { mskBookType: 'spot', id: pkIdArr[0], type: 'copy', number: copyMoreForm.number, copyId: pkIdArr[0] })
// openModal(true, { mskBookType: 'spot', id: pkIdArr[0], type: 'copy', number: copyMoreForm.number, copyId: pkIdArr[0] })
go('/cabinBookingDetail?mskBookType=spot&type=copy&number='+copyMoreForm.number+'&copyId='+pkIdArr[0]+'&id='+pkIdArr[0])
}
copyflag.value = false
}

@ -2050,7 +2050,9 @@ html[data-theme='black'] .box-text:hover{
cursor: pointer;
}
}
:deep(.ant-table-body){
background-color: #f0f2f5;
}
:deep(.ant-table-cell) {
text-align: left !important;
}

@ -11,8 +11,8 @@
<a-spin :spinning="loading">
<div style="padding-left: 20px;margin-top: 20px">
<div> 船公司</div>
<a-select size="small" @change="handleChangeSearch" v-model:value="carrierId"
style="width: 24%;margin-right: 20px">
<a-select size="small" @change="handleChangeSearch" show-search @search="handleSearch"
v-model:value="carrierId" style="width: 24%;margin-right: 20px">
<a-select-option v-for="item in carrierList" :key="item.carrierId" :value="item.carrierId">{{
item.carrier
}}</a-select-option>
@ -23,7 +23,7 @@
<div class="left">
<div class="card-title"> 操作
<TableButton :show="{}">
<span @click="handleEdit('Operator')" class="iconfont icon-piliangbianji">修改</span>
<span @click="handleEdit('Operator')" class="iconfont icon-bianji-danse">修改</span>
</TableButton>
</div>
<div class="taskTypeList">
@ -38,7 +38,8 @@
<div class="left">
<div class="card-title"> 单证
<TableButton :show="{}">
<span @click="handleEdit('VouchingClerk')" class="iconfont icon-piliangbianji">修改</span>
<span @click="handleEdit('VouchingClerk')"
class="iconfont icon-bianji-danse">修改</span>
</TableButton>
</div>
<div class="taskTypeList">
@ -55,7 +56,7 @@
<div class="left">
<div class="card-title"> 销售
<TableButton :show="{}">
<span @click="handleEdit('Sale')" class="iconfont icon-piliangbianji">修改</span>
<span @click="handleEdit('Sale')" class="iconfont icon-bianji-danse">修改</span>
</TableButton>
</div>
<div class="taskTypeList">
@ -68,13 +69,13 @@
</div>
</div>
<!-- <div title="报关员" class="card">
<div class="card-title"> <i @click="handleEdit('Custom')" class="icon-piliangbianji iconfont"></i> </div>
<div class="card-title"> <i @click="handleEdit('Custom')" class="icon-bianji-danse iconfont"></i> </div>
<div class="taskType" v-for="(item, index) in roleTaskData.customTaskTypeList" :key="index">{{
item.taskTypeName }}
</div>
</div>
<div title="财务" class="card">
<div class="card-title"> <i @click="handleEdit('FinancialStaff')" class="icon-piliangbianji iconfont"></i> </div>
<div class="card-title"> <i @click="handleEdit('FinancialStaff')" class="icon-bianji-danse iconfont"></i> </div>
<div class="taskType" v-for="(item, index) in roleTaskData.financialStaffTaskTypeList" :key="index">{{
item.taskTypeName }}
</div>
@ -83,7 +84,8 @@
<div class="left">
<div class="card-title"> 客服
<TableButton :show="{}">
<span @click="handleEdit('CustomerService')" class="iconfont icon-piliangbianji">修改</span>
<span @click="handleEdit('CustomerService')"
class="iconfont icon-bianji-danse">修改</span>
</TableButton>
</div>
<div class="taskTypeList">
@ -96,13 +98,13 @@
</div>
</div>
<!-- <div title="司机" class="card">
<div class="card-title"> <i @click="handleEdit('Driver')" class="icon-piliangbianji iconfont"></i> </div>
<div class="card-title"> <i @click="handleEdit('Driver')" class="icon-bianji-danse iconfont"></i> </div>
<div class="taskType" v-for="(item, index) in roleTaskData.driverTaskTypeList" :key="index">{{
item.taskTypeName }}
</div>
</div>
<div title="派车调度人员" class="card">
<div class="card-title"> <i @click="handleEdit('Dispatcher')" class="icon-piliangbianji iconfont"></i> </div>
<div class="card-title"> <i @click="handleEdit('Dispatcher')" class="icon-bianji-danse iconfont"></i> </div>
<div class="taskType" v-for="(item, index) in roleTaskData.dispatcherTaskTypeList" :key="index">{{
item.taskTypeName }}
</div>
@ -131,7 +133,7 @@
<div>船公司</div>
<a-select @change="handleChangeCarrier" v-model:value="carrierIdAll" style="width: 180px">
<a-select-option v-for="item in carrierListAll" :key="item.id" :value="item.id">{{
item.shortName
item.pinYinCode
}}</a-select-option>
</a-select>
</div>
@ -153,6 +155,7 @@ import { ref, onMounted } from 'vue'
import { GetCarrierlist } from '/@/views/operation/seaexport/api/BookingLedger'
import { GetTaskPlatEnumDict, TaskAllocationSave, TaskAllocationGetList, GetContainsCarrierList, GetCreateTaskConfigList, SaveCreateTaskConfig } from '../api'
import { useMessage } from '../../../hooks/web/useMessage'
import { GetCarrierSelectList } from '/@/api/common'
const { createMessage } = useMessage()
const open = ref(false)
const carrierIdAll = ref('')
@ -210,8 +213,8 @@ function handleSave() {
} as any
carrierListAll.value.forEach(item => {
if (item.id === carrierIdAll.value) {
data.carrier = item.shortName
data.carrierCode = item.codeName
data.carrier = item.cnName
data.carrierCode = item.code
}
})
const arr = [] as any
@ -249,6 +252,16 @@ function handleSave() {
})
}
const taskTypeList = ref([]) as any
function handleSearch(val) {
GetCarrierSelectList({queryKey: val}).then(res => {
carrierListAll.value = res.data
carrierListAll.value.unshift({
pinYinCode: '默认',
code: '',
id: ''
})
})
}
function handleChange(val) {
if (val == 2) {
loading.value = true
@ -302,10 +315,10 @@ onMounted(() => {
}
})
})
GetCarrierlist().then((res) => {
GetCarrierSelectList({queryKey:''}).then((res) => {
carrierListAll.value = res.data
carrierListAll.value.unshift({
shortName: '默认',
pinYinCode: '默认',
code: '',
id: ''
})
@ -419,6 +432,8 @@ function searchInfo() {
:deep(.ant-tabs-nav-list) {
display: flex;
width: 100%;
height: 48px;
line-height: 48px;
}
:deep(.ant-tabs-tab + .ant-tabs-tab) {
@ -428,18 +443,29 @@ function searchInfo() {
:deep(.ant-tabs-ink-bar) {
height: 3px !important;
}
:deep(.ant-tabs-tab-btn){
font-size: 14px;
font-weight: 200;
color: #7a8996;
line-height: 14px;
}
:deep(.ant-tabs-tab-active .ant-tabs-tab-btn){
color: #121826 !important;
font-weight: bold;
}
:deep(.ant-tabs-tab) {
display: inline-block;
text-align: center;
width: 5%;
line-height: 14px;
padding: 17px 0;
}
:deep(.ant-tabs-nav) {
margin: 0px !important;
}
:deep(.vben-ds-table-button .iconfont){
:deep(.vben-ds-table-button .iconfont) {
top: 0px;
}
</style>
Loading…
Cancel
Save