szh-new
张同海 5 months ago
parent 90db7d8d26
commit d4072f7aa0

@ -20,6 +20,7 @@ import {
GetPackageSelectList,
GetTruckClientList,
GetDispatcherList,
GetFactorySelectList,
} from '/@/views/operation/seaexport/api/BookingLedger'
import { getList } from '/@/views/flowcenter/flowInstances/api'
import { GetFeeCurrencySelectList } from '/@/api/common/index'
@ -132,4 +133,10 @@ export default {
return res.data
})
},
//工厂信息
GetFactorySelectList: () => {
return GetFactorySelectList().then((res) => {
return res.data
})
},
}

@ -45,7 +45,9 @@ export const useOptionsStore = defineStore({
// 币别
GetTruckClientList: null,
// 派车调度人员
GetDispatcherList:null
GetDispatcherList:null,
// 工厂
GetFactorySelectList:null
}),
getters: {
// 通过code获取下拉字典code)就是接口尾部单词

@ -0,0 +1,126 @@
<template>
<BasicModal
v-bind="$attrs"
:use-wrapper="true"
:title="getTitle"
width="50%"
@register="registerModal"
@ok="handleSave"
>
<BasicForm @register="registerForm" />
<!--右下角按钮-->
<template #footer>
<a-button
pre-icon="ant-design:close-outlined"
type="warning"
:loading="loading"
ghost
style="margin-right: 0.8rem"
@click="closeModal"
>
取消
</a-button>
<a-button
type="success"
:loading="loading"
pre-icon="ant-design:check-outlined"
style="margin-right: 0.8rem"
@click="handleSave(false)"
>
仅保存
</a-button>
<a-button
pre-icon="ant-design:check-circle-outlined"
type="primary"
:loading="loading"
@click="handleSave(true)"
>
保存并关闭
</a-button>
</template>
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, computed, unref } from 'vue'
import { BasicModal, useModalInner } from '/@/components/Modal'
import { BasicForm, useForm } from '/@/components/Form/index'
import { formSchema } from './columns'
import { ApiEdit, ApiInfo } from './api'
import { useMessage } from '/@/hooks/web/useMessage'
// Emits
const emit = defineEmits(['success', 'register'])
const isUpdate = ref(true)
const loading = ref(false)
const rowId = ref('')
const { createMessage } = useMessage()
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 100,
schemas: formSchema,
showActionButtonGroup: false,
})
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
resetFields()
setModalProps({ confirmLoading: false, loading: true })
isUpdate.value = !!data?.isUpdate
if (unref(isUpdate)) {
// setModalProps({ confirmLoading: true });
rowId.value = data.record.id
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
if (res.succeeded) {
setFieldsValue({
...res.data,
})
// console.log('Form', getFieldsValue());
// setFieldsValue({ trainId: unref(res.data.trainId) });
}
// setModalProps({ confirmLoading: false });
} else {
setFieldsValue({ permissionIdentity: unref(2) })
}
setModalProps({ loading: false })
})
const getTitle = computed(() => (!unref(isUpdate) ? '新增工厂信息' : '编辑工厂信息'))
async function handleSave(exit) {
try {
const values = await validate()
setModalProps({ confirmLoading: true, loading: true })
// TODO custom api
console.log(values)
// loading.value = true;
const res: API.DataResult = await ApiEdit(values)
console.log(res)
if (res.succeeded) {
createMessage.success(res.message)
emit('success')
//
if (!exit) {
if (unref(isUpdate)) {
await refresh()
} else {
rowId.value = res.data
isUpdate.value = true
await refresh()
}
}
} else {
createMessage.error(res.message)
}
exit && closeModal()
} finally {
// loading.value = false;
setModalProps({ confirmLoading: false, loading: false })
}
}
async function refresh() {
const res: API.DataResult = await ApiInfo({ id: unref(rowId) })
if (res.succeeded) {
await setFieldsValue({
...res.data,
})
}
}
</script>

@ -0,0 +1,42 @@
// @ts-ignore
import { request } from '/@/utils/request'
import { DataResult, PageRequest } from '/@/api/model/baseModel'
enum Api {
list = '/mainApi/CodeFactory/GetFactoryList',
edit = '/mainApi/CodeFactory/EditCodeFactory',
info = '/mainApi/CodeFactory/GetCodeFactoryInfo',
del = '/mainApi/CodeFactory/BatchDelCodeFactory',
}
// 列表 (Auth)
export function ApiList(data: PageRequest) {
return request<DataResult>({
url: Api.list,
method: 'post',
data,
})
}
// 编辑 (Auth)
export function ApiEdit(data: PageRequest) {
return request<DataResult>({
url: Api.edit,
method: 'post',
data,
})
}
// 详情 (Auth)
export function ApiInfo(query) {
return request<DataResult>({
url: Api.info,
method: 'get',
params: query,
})
}
// 批量删除 (Auth)
export function ApiDel(data: PageRequest) {
return request<DataResult>({
url: Api.del,
method: 'post',
data,
})
}

@ -0,0 +1,170 @@
import { BasicColumn, FormSchema } from '/@/components/Table'
import { Tag } from 'ant-design-vue'
import { getOptions } from '/@/hooks/dict'
export const columns: BasicColumn[] = [
{
title: '工厂中文名称',
dataIndex: 'factoryName',
width: 150,
},
{
title: '工厂英文文名称',
dataIndex: 'enName',
width: 150,
},
{
title: '工厂地址',
dataIndex: 'factoryAddress',
width: 150,
},
{
title: '工厂联系人',
dataIndex: 'factoryAttn',
width: 150,
},
{
title: '工厂联系电话',
dataIndex: 'factoryTel',
width: 150,
},
{
title: '委托单位',
dataIndex: 'customerName',
width: 150,
},
{
title: '是否启用',
dataIndex: 'status',
width: 80,
customRender: ({ text }) => {
if (text === 0) {
return <Tag color="success"></Tag>
} else if (text === 1) {
return <Tag color="error"></Tag>
}
return text
},
},
{
title: '备注',
dataIndex: 'note',
width: 150,
},
]
export const searchFormSchema: FormSchema[] = [
{
field: 'factoryName',
label: '工厂中文名称',
component: 'Input',
colProps: { span: 6 },
},
]
export const formSchema: FormSchema[] = [
{
label: '',
field: 'id',
component: 'Input',
defaultValue: '',
show: false,
},
{
field: 'factoryName',
label: '工厂中文名称',
component: 'Input',
colProps: { span: 12 },
},
{
field: 'enName',
label: '工厂英文文名称',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
{
field: 'factoryAddress',
label: '工厂地址',
component: 'Input',
colProps: { span: 12 },
defaultValue: '',
},
{
field: 'factoryAttn',
label: '工厂联系人',
component: 'Input',
colProps: { span: 12 },
defaultValue: 0,
},
{
field: 'factoryTel',
label: '工厂联系电话',
component: 'Input',
colProps: { span: 12 },
defaultValue: 0,
},
{
label: '委托单位Nmae',
field: 'customerName',
component: 'Input',
// defaultValue: '',
show: false,
},
{
label: '委托单位',
field: 'customerId',
component: 'ApiSelect',
required: false,
dynamicDisabled: false,
// defaultValue: '',
colProps: { span: 12 },
componentProps: ({ formModel }) => {
return {
allowClear: true,
showSearch: true,
api: () => {
return new Promise((resolve) => {
const arr = getOptions('controller')
resolve(arr)
})
},
labelField: 'name',
valueField: 'id',
resultField: 'data',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
onChange: (e, obj) => {
if (obj) {
formModel.customerName = obj.label
} else {
formModel.customerName = ''
}
},
}
},
},
{
field: 'note',
label: '备注',
component: 'InputTextArea',
colProps: { span: 12 },
componentProps: {
rows: 2,
},
},
{
field: 'status',
label: '是否可用',
component: 'RadioButtonGroup',
defaultValue: 0,
colProps: { span: 12 },
componentProps: {
options: [
{ label: '禁用', value: 1 },
{ label: '启用', value: 0 },
],
},
},
]

@ -0,0 +1,133 @@
<template>
<div>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleCreate"> </a-button>
<a-popconfirm
title="确定要删除勾选的数据?"
ok-text="确定"
cancel-text="取消"
@confirm="handleDel"
>
<a-button type="primary"> 删除 </a-button>
</a-popconfirm>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
tooltip: '编辑',
onClick: handleAudit.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
<TenantAuditStepModal @register="registerModal" @success="handleSuccess" />
</div>
</template>
<script lang="ts" setup>
import { defineComponent, onMounted, ref } from 'vue'
import { BasicTable, useTable, TableAction, SorterResult } from '/@/components/Table'
import { ApiList, ApiDel } from './api'
import { useModal } from '/@/components/Modal'
import TenantAuditStepModal from './TenantAuditStepModal.vue'
import { columns, searchFormSchema } from './columns'
import { useMessage } from '/@/hooks/web/useMessage'
const { notification } = useMessage()
let filterInfo: Partial<Recordable<string[]>> = []
let sortInfo: SorterResult = {}
const refImportFlow = ref()
const [registerModal, { openModal }] = useModal()
const [registerTable, { reload, getForm, getPaginationRef, getSelectRows }] = useTable({
title: '工厂信息列表',
api: async (p) => {
const res: API.DataResult = await ApiList(p)
return new Promise((resolve) => {
resolve({ data: [...res.data], total: res.count })
})
},
beforeFetch: () => {
var currentPageInfo: any = getPaginationRef()
var data = getForm().getFieldsValue()
const postParam: API.PageRequest = {
queryCondition: '',
pageCondition: {
pageIndex: currentPageInfo.current,
pageSize: currentPageInfo.pageSize,
sortConditions: [],
},
}
let condition: API.ConditionItem[] = []
if (!!data.factoryName) {
condition.push({
FieldName: 'factoryName',
FieldValue: data.factoryName,
ConditionalType: 1,
})
}
postParam.queryCondition = JSON.stringify(condition)
return postParam
},
columns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
sortFn: (sorter) => {
// console.log(':' + sorter);
sortInfo = sorter
},
filterFn: (filters) => {
// console.log(':' + filters);
filterInfo = filters
},
pagination: true,
bordered: true,
useSearchForm: true,
showTableSetting: true,
tableSetting: { fullScreen: true },
actionColumn: {
width: 80,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
})
function handleCreate() {
openModal(true, {
isParent: false,
isUpdate: false,
})
}
function handleDel() {
if (getSelectRows().length) {
let Apidata: any = {
ids: [],
}
getSelectRows().forEach((item) => {
Apidata.ids.push(item.id)
})
ApiDel(Apidata).then((res) => {
if (res.succeeded) {
notification.success({ message: '删除成功', duration: 3 })
handleSuccess()
}
})
} else {
notification.warning({ message: '请至少选择一条数据', duration: 3 })
}
}
function handleAudit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
})
}
function handleSuccess() {
reload()
}
</script>

@ -125,7 +125,7 @@
if (!id) {
id = 0
}
BookingOrderOcrUpFile({ data: formData, parameter: { bookingId: id } }).then((res) => {
UploadOcrFile({ data: formData, parameter: { bookingId: id } }).then((res) => {
if (res.success) {
fileName.value = res.data.ocrFileName
if (id == 0) {

@ -625,6 +625,14 @@ export function SubmitTelex(parameter) {
data: parameter,
})
}
// 获取工厂信息下拉列表-客户端 (Auth)
export function GetFactorySelectList(parameter) {
return request({
url: '/mainApi/ClientCommon/GetFactorySelectList',
method: 'get',
params: parameter,
})
}
/**
* 获取分页查询客户
* @params ShortName
@ -1104,43 +1112,41 @@ export function BookingOrderDownload(parameter) {
}
// 上传ocr文件
export function BookingOrderOcrUpFile(data) {
export function UploadOcrFile(data) {
return request({
url: '/BookingOrder/OcrUpFile',
url: '/opApi/SeaExport/UploadOcrFile',
method: 'post',
data: data.data,
params: data.parameter,
})
}
/**
* 更新订舱
*/
export function BookingOrderUpdate(parameter) {
return request({
url: '/BookingOrder/Update',
method: 'post',
data: parameter,
})
}
// 获取图片
export function BookingOrderOcrGetImg(parameter) {
export function GetOcrImg(parameter) {
return request({
url: '/BookingOrder/OcrGetImg',
url: '/opApi/SeaExport/GetOcrImg',
method: 'post',
params: parameter,
responseType: 'arraybuffer',
})
}
// 获取文字
export function BookingOrderOcrGetText(parameter) {
export function GetOcrText(parameter) {
return request({
url: '/BookingOrder/OcrGetText',
url: '/opApi/SeaExport/GetOcrText',
method: 'post',
params: parameter,
})
}
/**
* 更新订舱
*/
export function BookingOrderUpdate(parameter) {
return request({
url: '/BookingOrder/Update',
method: 'post',
data: parameter,
})
}
/**
* 新增订舱

@ -2,20 +2,99 @@
<div class="sea-select-textarea">
<div class="flex">
<div class="name">
<span @click="handleOpen(2)" class="copy-btn iconfont icon-bianji" :style="{ fontSize: '12px' }"></span>
<span
@click="handleOpen(2)"
class="copy-btn iconfont icon-bianji"
:style="{ fontSize: '12px' }"
></span>
{{ props.label }}
</div>
<div class="name Second" v-if="props.label == '通知人'" @click="openVisible"></div>
<a-modal
title="第二通知人"
:width="900"
v-model:visible="visibleTwo"
@ok="visibleTwo = false"
@cancel="visibleTwo = false"
>
<div>
<a-form :selfUpdate="true" ref="mailingFrom" :model="details">
<a-row :gutter="10">
<a-form-item
has-feedback
name="notifypartY2"
class="sender-label"
style="overflow: hidden"
>
<div class="sender">
<div class="top">
<div class="name">第二通知人</div>
<a-select
ref="select"
v-model:value="company2"
style="flex: 1"
placeholder="请选择"
optionLabelProp="label"
@change="handleChange2"
>
<a-select-option
v-for="item in companyList"
:key="item.id"
:value="item.id"
:label="item.shortName"
:title="`${item.shortName}(${item.codeName})`"
:blContent="item.blContent"
>
{{ item.shortName }} ({{ item.codeName }})
</a-select-option>
</a-select>
<div class="right">
<span class="btn" @click="changeCode(30, 'Content2')">30</span>
<span class="btn" @click="changeCode(35, 'Content2')">35</span>
<span class="btn" @click="changeCode(40, 'Content2')">40</span>
</div>
</div>
<div class="bottom">
<textareaView
id="consignee-scroll"
:parentVal="Content2"
type="Content"
:openToCDB="true"
@getTextareaChange="getTextareaChange2"
/>
<!-- <a-textarea v-model:value="Content2" :auto-size="{ minRows: 2, maxRows: 5 }" /> -->
<!-- <div
class="line-count"
id="notifypartY2-scroll-right"
v-if="
Object.keys(details).length > 1 &&
details.notifypartY2 &&
details.notifypartY2.length > 0
"
>
<div v-for="(num, index) in details.notifypartY2.split('\n')" :key="index">{{
num.length
}}</div>
</div> -->
</div>
</div>
</a-form-item>
</a-row>
</a-form>
</div>
</a-modal>
<a-select
ref="select"
v-model:value="company"
style="width: 100px;"
style="width: 100px"
placeholder="请选择"
optionLabelProp="label"
@change="handleChange"
>
<a-select-option
v-for="item in companyList"
:key="item.id" :value="item.id"
:key="item.id"
:value="item.id"
:label="item.shortName"
:title="`${item.shortName}(${item.codeName})`"
:blContent="item.blContent"
@ -60,14 +139,18 @@
</template>
<script lang="ts" setup>
import { ref, watch } from 'vue'
import { GetShipperClientList, GetConsigneeClientList, GetNotifyPartyClientList } from '/@/views/operation/seaexport/api/BookingLedger'
import {
GetShipperClientList,
GetConsigneeClientList,
GetNotifyPartyClientList,
} from '/@/views/operation/seaexport/api/BookingLedger'
import { getOptions } from '/@/hooks/dict'
// import selectView from '../detail/components/selectView.vue'
import textareaView from '../detail/components/textareaView.vue'
const props = defineProps({
details: {
type: Object,
default: {}
default: {},
},
// rules: { type: Object, default: {} },
// isLockBooking: { type: Boolean, default: false },
@ -81,12 +164,14 @@
(nval) => {
if (nval) {
Content.value = nval[`${props.field}Content`]
Id.value = nval[`${props.field}Id`]
company.value = nval[`${props.field}Id`]
Content2.value = nval.secondNotifyPartyContent
company2.value = nval.secondNotifyPartyId
}
},
{
deep: true,
}
},
)
const emit = defineEmits(['spliceMore', 'Change'])
const visible = ref(false)
@ -99,14 +184,16 @@
const modelType = ref('')
const modelContent = ref('')
const company = ref()
const company2 = ref()
const Content2 = ref()
//
const companyList = ref([])
const companyList = ref<any>([])
//
const init = async () => {
if (props.field == 'shipper') {
companyList.value = getOptions('shipper')
} else if (props.field == 'consignee') {
GetConsigneeClientList().then(res => {
GetConsigneeClientList().then((res) => {
companyList.value = res.data
})
} else {
@ -114,9 +201,6 @@
}
}
init()
const handleChange = (v, obj) => {
Content.value = obj.blContent
}
function handleOpen(type) {
visible.value = true
modalType.value = type
@ -154,6 +238,18 @@
Content.value = e.value
getSelectViewRes({ type: 'Content', res: e.value })
}
function getTextareaChange2(e) {
Content2.value = e.value
getSelectViewRes({ type: 'Content2', res: e.value })
}
const handleChange = (v, obj) => {
getSelectViewRes({ type: 'Id', res: obj })
Content.value = obj.blContent
}
const handleChange2 = (v, obj) => {
getSelectViewRes({ type: 'Id2', res: obj })
Content2.value = obj.blContent
}
function saveModel(type) {
modelVisible.value = true
modelType.value = type
@ -210,7 +306,7 @@
}
function changeCode(len, type) {
const value = Content.value
var textArr = value.match(/.+[\n]*/g)
var textArr: any = value.match(/.+[\n]*/g)
var subValue = ''
for (var j = 0; j < textArr.length; j++) {
var subArr = textArr[j].match(/[\w]+[ ]*[\n]*|[\d]+[ ]*[\n]*|[^\w\d]+[ ]*[\n]*/g)
@ -239,38 +335,69 @@
console.log(subValue, 2222)
Content.value = subValue
}
const visibleTwo = ref(false)
function openVisible() {
visibleTwo.value = true
}
</script>
<style lang="less" scoped>
@import url('/@/views/operation/seaexport/detail/style/mailingInfo.less');
// @import url('../../../BookingLedger/detail/index.less');
// @import url('../../../BookingLedger/detail/style/mailingInfo.less');
// .copy-btn {
// &:hover {
// color: @primary-color;
// }
// }
// .tit{
// line-height: 26px;
// }
</style>
<style lang="less">
.sea-select-textarea {
.name {
font-size: 12px;
font-weight: 600;
color: #262626;
}
.icon-bianji {
cursor: pointer;
color: #0057FF;
}
.ant-select {
position: relative;
top: -5px;
left: 5px;
.sender-label {
width: 100%;
.sender {
.top {
height: auto;
margin-bottom: 10px;
}
}
}
.right {
margin-left: 20px;
position: relative;
top: -5px;
.btn {
margin-right: 5px;
display: inline-block;
text-align: center;
.sea-select-textarea {
.name {
font-size: 12px;
font-weight: 600;
color: #262626;
&.Second {
margin: 0 5px;
cursor: pointer;
}
}
.icon-bianji {
cursor: pointer;
height: 28px;
width: 28px;
line-height: 26px;
background: #c1e0ff;
border-radius: 50%;
color: #0057ff;
}
.ant-select {
position: relative;
top: -5px;
left: 5px;
}
.right {
margin-left: 20px;
position: relative;
top: -5px;
.btn {
margin-right: 5px;
display: inline-block;
text-align: center;
cursor: pointer;
height: 28px;
width: 28px;
line-height: 26px;
background: #c1e0ff;
border-radius: 50%;
}
}
}
}
</style>

@ -540,13 +540,45 @@ export const formSchema: FormSchema[] = [
defaultValue: '',
show: false,
},
// {
// label: '工厂',
// field: 'factoryId',
// component: 'ApiSelect',
// defaultValue: '',
// colProps: {
// span: 24,
// },
// },
{
label: '工厂',
field: 'factoryId',
component: 'ApiSelect',
defaultValue: '',
colProps: {
span: 24,
required: false,
dynamicDisabled: false,
colProps: { span: 24 },
componentProps: ({ formModel }) => {
return {
immediate: false,
option: optionsStore.getOptionsByCode('GetFactorySelectList'),
labelField: 'factoryName',
valueField: 'id',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
onChange: (e, obj) => {
if (obj) {
formModel.factoryName = obj.factoryName
formModel.factoryAddress = obj.factoryAddress
formModel.factoryAttn = obj.factoryAttn
formModel.factoryTel = obj.factoryTel
} else {
formModel.factoryName = ''
formModel.factoryAddress = ''
formModel.factoryAttn = ''
formModel.factoryTel = ''
}
},
}
},
},
{

@ -1,23 +1,29 @@
<template>
<a-spin :spinning="spinning">
<div class="buttonGroup">
<div class="nav" @click="handleSave"> <i class="iconfont icon-jiahao2fill"></i>保存 </div>
</div>
<BasicForm @register="registerForm" />
<div>
<div class="MainBox">
<div class="buttonGroup">
<div class="nav" @click="TableAdd"> <i class="iconfont icon-jiahao2fill"></i>新增明细 </div>
<a-popconfirm
title="确定要删除所选数据?"
ok-text="确定"
cancel-text="取消"
@confirm="FnClickDel"
>
<div class="nav"> <i class="iconfont icon-shanchu"></i>删除明细 </div>
</a-popconfirm>
<div class="nav" @click="handleSave"> <i class="iconfont icon-jiahao2fill"></i>保存 </div>
</div>
<div class="Content">
<BasicForm @register="registerForm" />
<div>
<div class="buttonGroup">
<div class="nav" @click="TableAdd">
<i class="iconfont icon-jiahao2fill"></i>新增明细
</div>
<a-popconfirm
title="确定要删除所选数据?"
ok-text="确定"
cancel-text="取消"
@confirm="FnClickDel"
>
<div class="nav"> <i class="iconfont icon-shanchu"></i>删除明细 </div>
</a-popconfirm>
</div>
</div>
<hot-table ref="hotTb" :data="list" :settings="settings"></hot-table>
</div>
</div>
<hot-table ref="hotTb" :data="list" :settings="settings"></hot-table>
</a-spin>
</template>
<script lang="ts" setup>
@ -348,3 +354,21 @@
},
}
</script>
<style lang="scss" scoped>
.ant-spin-nested-loading {
height: 100%;
:deep(.ant-spin-container) {
height: 100%;
}
}
.MainBox {
height: 100%;
position: relative;
.buttonGroup {
}
.Content {
height: calc(100% - 28px);
overflow-y: auto;
}
}
</style>

@ -1,9 +1,9 @@
<template>
<div>
<div class="MainBox">
<div class="buttonGroup">
<div class="nav" @click="handleSave"> <i class="iconfont icon-jiahao2fill"></i>保存 </div>
</div>
<BasicForm @register="registerForm" />
<BasicForm class="Content" @register="registerForm" />
</div>
</template>
<script lang="ts" setup>
@ -65,3 +65,15 @@
}
}
</script>
<style lang="less" scoped>
.MainBox {
height: 100%;
position: relative;
.buttonGroup {
}
.Content {
height: calc(100% - 28px);
overflow-y: auto;
}
}
</style>

@ -479,9 +479,9 @@ export const basicInfoFormSchema: FormSchema[] = [
valueField: 'voyNo',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
},
}
}
},
},
{
label: '船司航线',
@ -697,9 +697,9 @@ export const basicInfoFormSchema: FormSchema[] = [
valueField: 'id',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
},
}
}
},
},
{
label: '客服员',
@ -713,7 +713,9 @@ export const basicInfoFormSchema: FormSchema[] = [
return {
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetCustomerServiceList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetCustomerServiceList')),
)
data.forEach((e) => {
e.userName = `${e.userCode}/${e.userName}`
})
@ -741,7 +743,9 @@ export const basicInfoFormSchema: FormSchema[] = [
return {
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetCustomerServiceList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetCustomerServiceList')),
)
data.forEach((e) => {
e.userName = `${e.userCode}/${e.userName}`
})
@ -862,8 +866,8 @@ export const mailingInfoFormSchemaL: FormSchema[] = [
onChange: (e) => {
if (e) {
if (e.type == 'Id') {
formModel.shipper = e.res.shortName
formModel.shipperId = e.res.id
formModel.shipper = e.label
formModel.shipperId = e.value
} else {
formModel[`shipper${e.type}`] = e.res
}
@ -905,8 +909,8 @@ export const mailingInfoFormSchemaL: FormSchema[] = [
onChange: (e) => {
if (e) {
if (e.type == 'Id') {
formModel.consignee = e.res.shortName
formModel.consigneeId = e.res.id
formModel.consignee = e.label
formModel.consigneeId = e.value
} else {
formModel[`consignee${e.type}`] = e.res
}
@ -936,6 +940,27 @@ export const mailingInfoFormSchemaL: FormSchema[] = [
// defaultValue: '',
show: false,
},
{
label: '',
field: 'secondNotifyPartyContent',
component: 'Input',
// defaultValue: '',
show: false,
},
{
label: '',
field: 'secondNotifyParty',
component: 'Input',
// defaultValue: '',
show: false,
},
{
label: '',
field: 'secondNotifyPartyId',
component: 'Input',
// defaultValue: '',
show: false,
},
{
field: 'tzr',
component: 'SelectTextArea',
@ -947,11 +972,25 @@ export const mailingInfoFormSchemaL: FormSchema[] = [
field: 'notifyParty',
onChange: (e) => {
if (e) {
if (e.type == 'Id') {
formModel.notifyParty = e.res.shortName
formModel.notifyPartyId = e.res.id
} else {
formModel[`notifyParty${e.type}`] = e.res
console.log(e, 123)
switch (e.type) {
case 'Content':
formModel[`notifyParty${e.type}`] = e.res
break
case 'Id':
formModel.notifyParty = e.res.label
formModel.notifyPartyId = e.res.value
break
case 'Content2':
formModel.secondNotifyPartyContent = e.res
break
case 'Id2':
formModel.secondNotifyParty = e.res.label
formModel.secondNotifyPartyId = e.res.value
break
default:
break
}
}
},
@ -987,7 +1026,9 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((item) => {
item.portName = `${item.portName}(${item.ediCode})`
})
@ -1124,7 +1165,9 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.ediCode = `${e.portName}/${e.ediCode}`
})
@ -1231,7 +1274,9 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.portName = `${e.portName}/${e.ediCode}`
})
@ -1328,9 +1373,11 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.ediCode = `${e.portName}/${e.ediCode}`
e.ediCode = `${e.portName}/${e.ediCode}`
})
resolve({ data })
})
@ -1409,9 +1456,11 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.ediCode = `${e.portName}/${e.ediCode}`
e.ediCode = `${e.portName}/${e.ediCode}`
})
resolve({ data })
})
@ -1498,9 +1547,11 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.ediCode = `${e.portName}/${e.ediCode}`
e.ediCode = `${e.portName}/${e.ediCode}`
})
resolve({ data })
})
@ -1615,9 +1666,11 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.ediCode = `${e.portName}/${e.ediCode}`
e.ediCode = `${e.portName}/${e.ediCode}`
})
resolve({ data })
})
@ -1687,7 +1740,9 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.portName = `${e.portName}/${e.ediCode}`
})
@ -1731,7 +1786,9 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
showSearch: true,
api: () => {
return new Promise((resolve) => {
const data = JSON.parse(JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')))
const data = JSON.parse(
JSON.stringify(optionsStore.getOptionsByCode('GetClientPortSelectList')),
)
data.forEach((e) => {
e.portName = `${e.portName}/${e.ediCode}`
})

@ -71,14 +71,14 @@
</button>
</div>
<div class="btn-list more-view-2">
<button @click="FnLetterChange">
<!-- <button @click="FnLetterChange">
<span class="iconfont icon-dayinxiaopiao"></span>变更通知
</button>
<LCDetails :letterId="details.id" @register="LCregisterModal" />
<button @click="FnSurChange">
<span class="iconfont icon-dayinxiaopiao"></span>电放保函
</button>
<LSDetails :letterId="details.id" @register="LSregisterModal" />
<LSDetails :letterId="details.id" @register="LSregisterModal" /> -->
<button @click="FnOpBusinessYard">
<span class="iconfont icon-dayinxiaopiao"></span>场站入货
</button>
@ -102,7 +102,7 @@
<span class="iconfont icon-dayinxiaopiao"></span>提箱小票
</button>
</div>
<!-- <div class="btn-list single-view-4" :style="{ width: '90px' }">
<div class="btn-list single-view-4" :style="{ width: '90px' }">
<a-upload
:file-list="fileList"
:before-upload="beforeUpload"
@ -111,13 +111,13 @@
>
<button @click="ShowOCR"><span class="iconfont icon-OCR"></span>OCR</button>
</a-upload>
<button v-if="cabinShow && appStore.slotShow" @click="openModel('cabinSpace')">
<!-- <button v-if="cabinShow && appStore.slotShow" @click="openModel('cabinSpace')">
引入舱位
</button>
<button v-if="!cabinShow && appStore.slotShow" @click="handleCancelCabin">
<a-spin :spinning="cabinLoad">取消舱位</a-spin>
</button>
</div> -->
</button> -->
</div>
<div class="btn-list single-view-1" :style="{ width: '110px' }">
<a-spin :spinning="telxLoad">
<button @click="handleSubmitTelex">
@ -795,6 +795,47 @@
</a-spin>
</a-modal>
<!-- 打印弹窗 end -->
<!-- OCR抽屉 start -->
<a-drawer
title="OCR"
width="45vw"
:destroyOnClose="true"
:mask="false"
placement="right"
:visible="OcrVisible"
@close="OcrOnClose"
class="OCRBox"
>
<a-row justify="end" :style="{ width: '100%', marginTop: '5px' }">
<a-col :span="6" :offset="18">
<span>缩放比例</span>
<a-select size="small" v-model:value="scale" style="width: 120px">
<a-select-option value="1.0">100%</a-select-option>
<a-select-option value="1.2">120%</a-select-option>
<a-select-option value="1.5">150%</a-select-option>
<a-select-option value="2.0">200%</a-select-option>
</a-select>
</a-col>
</a-row>
<canvas
class="CV"
id="myCanvas"
ref="myCanvas"
width="893"
height="1262"
@mousedown="mousedown"
@mouseup="mouseup"
@mousemove="mousemove"
:style="{ backgroundImage: `url(${imgSrc})` }"
></canvas>
<ul class="CvBox" v-if="CvBoxType" :style="{ left: `${Bx}px`, top: `${By}px` }">
<li v-for="item in BCvData" :key="item.name" @click="FnClickCvBox(item)">{{
item.name
}}</li>
</ul>
</a-drawer>
<!-- OCR抽屉 end -->
<!-- 运踪弹窗 start -->
<a-modal
width="50vw"
@ -850,8 +891,8 @@
SampleBill,
SampleBillPdf,
TxxpLink,
BookingOrderOcrUpFile,
BookingOrderOcrGetImg,
UploadOcrFile,
GetOcrImg,
DownloadBookingOrClosingEDI,
GetYardlist,
CheckAndInitVOLTAEdi,
@ -861,7 +902,7 @@
SaveBookingLetteryard,
SaveBookingSampleBill,
ExcuteRulesOceanBooking,
BookingOrderOcrGetText,
GetOcrText,
DeleteLetterYard,
SendTrace,
LetterYardHis,
@ -952,6 +993,7 @@
const cabinSpaceFlag = ref(false)
const fileList = ref([])
const fileName = ref('')
const Rdata = ref('')
const scale = ref('1.5')
const imgSrc = ref('')
const OcrVisible = ref(false)
@ -989,6 +1031,13 @@
lineHeight: '30px',
})
const mskBookingOrder = ref()
watch(scale, () => {
if (fileName.value) {
GetOcrImg({ fileName: fileName.value, scale: scale.value }).then((res) => {
imgSrc.value = window.URL.createObjectURL(new Blob([res]))
})
}
})
// ============================================
//
function saveFun() {
@ -1507,6 +1556,108 @@
id: props.details.id,
})
}
// ========== OCR ==========
const myCanvas = ref()
const flag = ref(false)
const x = ref(0)
const y = ref(0)
const width = ref(0)
const height = ref(0)
const Bx = ref(0)
const By = ref(0)
const BCvData = ref([
{ name: '发货人', code: 'shipper' },
{ name: '收货人', code: 'consignee' },
{ name: '装货港', code: 'portload' },
{ name: '目的地', code: 'destination' },
{ name: '唛头', code: 'marks' },
{ name: '货物描述', code: 'description' },
{ name: '包装', code: 'kindpkgs' },
{ name: '件数', code: 'pkgs' },
{ name: '尺寸', code: 'cbm' },
{ name: '毛重', code: 'kgs' },
{ name: '卸货港', code: 'portdischarge' },
{ name: '通知人', code: 'notifyparty' },
])
function FnClickCvBox(data) {
let details = { ...props.details }
const Arr = ['pkgs', 'cbm', 'kgs', 'portdischarge', 'destination', 'kindpkgs']
let Type = false
Arr.forEach((item) => {
if (data.code == item) {
Type = true
}
})
if (Type) {
if (data.code == 'pkgs' || data.code == 'cbm' || data.code == 'kgs') {
details[data.code] = parseFloat(Rdata.value)
} else {
details[data.code] = Rdata.value
}
} else {
details[data.code] = details[data.code] + Rdata.value
}
// details[data.code] = details[data.code] + Rdata.value
CvBoxType.value = false
BCvData.value.forEach((item, index) => {
if (item.code == data.code) {
BCvData.value.splice(index, 1)
BCvData.value.push(item)
}
})
}
function mouseup(e) {
flag.value = false
// if (imgSrc.value && width.value != 0 && height.value != 0) {
GetOcrText({
fileName: fileName.value,
x: x.value,
y: y.value,
w: width.value,
h: height.value,
scale: scale.value,
}).then((res) => {
Rdata.value = res.data
Bx.value = x.value + width.value
By.value = y.value + height.value
CvBoxType.value = true
})
// }
}
function mousemove(e) {
// if (imgSrc.value) {
drawRect(e)
// }
}
function drawRect(e) {
if (flag.value) {
const canvas = myCanvas.value
var ctx = canvas.getContext('2d')
const Dx = x.value
const Dy = y.value
ctx.clearRect(0, 0, canvas.width, canvas.height)
ctx.beginPath()
// 线
ctx.strokeStyle = '#e1271d'
// 线
ctx.lineWidth = 1
width.value = e.offsetX - Dx
height.value = e.offsetY - Dy
ctx.strokeRect(Dx, Dy, e.offsetX - Dx, e.offsetY - Dy)
}
}
function mousedown(e) {
myCanvas.value.getContext('2d').clearRect(0, 0, myCanvas.value.width, myCanvas.value.height)
// if (imgSrc.value) {
flag.value = true
x.value = e.offsetX // X
y.value = e.offsetY // Y
CvBoxType.value = false
width.value = 0
height.value = 0
// }
}
function copyFun(data) {
const copyInput = document.createElement('input')
document.body.appendChild(copyInput)
@ -1524,20 +1675,23 @@
formData.append('file', file.file)
// formData.append('bookingId', id.value)
const type = file.file.type
let id = id.value
let Did: any = id.value
if (route.query.isCopy) {
id = 0
Did = 0
}
if (!id.value) {
id = 0
Did = 0
}
BookingOrderOcrUpFile({ data: formData, parameter: { bookingId: id } }).then((res) => {
UploadOcrFile({
data: formData,
parameter: { LinkId: Did, TypeCode: 'other', TypeName: '其他' },
}).then((res) => {
if (res.success) {
fileName.value = res.data.ocrFileName
if (id == 0) {
if (Did == 0) {
emit('ocrUpflie', res.data.uploadFileName)
}
BookingOrderOcrGetImg({ fileName: fileName.value, scale: scale.value }).then((res) => {
GetOcrImg({ fileName: fileName.value, scale: scale.value }).then((res) => {
imgSrc.value = window.URL.createObjectURL(
new Blob([res], { type: `${type};chartset=UTF-8` }),
)

@ -3,13 +3,25 @@
<a-card :bodyStyle="tstyle" :bordered="false">
<div class="title">
<i class="iconfont icon-ERP_zhuyi"></i><span>注意事项</span>
<!-- <a-icon class="rule-icon" @click="handleOpenRule({}, 1)" type="setting" theme="filled" /> -->
<!-- <a-icon
<!-- <a-icon class="rule-icon" @click="handleOpenRule({}, 1)" type="setting" theme="filled" />
<a-icon
type="reload"
@click="checkFun"
title="重新校验"
style="color: rgb(30, 144, 255); margin-left: 10px; cursor: pointer"
/> -->
<Icon
class="rule-icon"
icon="ant-design:setting-filled"
:size="16"
@click="handleOpenRule({}, 1)"
/>
<Icon
icon="ant-design:reload-outlined"
:size="16"
@click="checkFun"
style="color: rgb(30, 144, 255); margin-left: 10px; cursor: pointer"
/>
</div>
<div class="content">
<div class="tip" v-if="excuteRules.length > 0">
@ -21,12 +33,12 @@
></i>
<i class="iconfont icon-shibai Error" v-else-if="rule.errorType === 'Error'"></i>
<span>{{ rule.resultName }}</span>
<!-- <a-icon
<a-icon
class="rule-icon"
@click="handleOpenRule(rule, 2)"
type="setting"
theme="filled"
/> -->
/>
</div>
</div>
<div class="tip" v-else-if="excuteRulesType === 'success'">
@ -259,19 +271,15 @@
</a-spin>
</a-card>
<a-card :bodyStyle="tstyle" :bordered="false">
<DsFile
ref="dsFile"
:id='id'
:show="false"
>
<div class="title">
<i class="iconfont icon-fujian-wenjian"></i><span>附件</span>
<span class="right" @click="addFile">
<i class="iconfont icon-jiahao2fill"></i>新增附件
</span>
</div>
<div class="content">
<!-- <div class="file" v-for="(file, findex) in details.file" :key="findex">
<DsFile ref="dsFile" :id="id" :show="false">
<div class="title">
<i class="iconfont icon-fujian-wenjian"></i><span>附件</span>
<span class="right" @click="addFile">
<i class="iconfont icon-jiahao2fill"></i>新增附件
</span>
</div>
<div class="content">
<!-- <div class="file" v-for="(file, findex) in details.file" :key="findex">
<div class="top">
<span class="left">
<i
@ -300,11 +308,11 @@
<span><i class="iconfont icon-shijian1"></i>{{ file.createdTime }}</span>
</div>
</div> -->
<!-- <div class="no-data" v-if="!details.file || details.file.length === 0">
<!-- <div class="no-data" v-if="!details.file || details.file.length === 0">
<i class="iconfont icon-wushuju"></i>
<div class="text">暂无附件</div>
</div> -->
</div>
</div>
</DsFile>
</a-card>
<a-card :bodyStyle="tstyle" :bordered="false">
@ -627,7 +635,7 @@
} from '/@/views/operation/seaexport/api/BookingLedger'
import { ref, Ref, reactive, getCurrentInstance, h, watch, onMounted } from 'vue'
//
import DsFile from "/@/components/File/index.vue"
import DsFile from '/@/components/File/index.vue'
import { useMessage } from '/@/hooks/web/useMessage'
const { notification } = useMessage()
import { useAppStore } from '/@/store/modules/app'

@ -16,24 +16,40 @@
<template v-slot:bodyCell="{ column, record }">
<!-- 应收费用 -->
<template v-if="column.dataIndex == 'arFeeStatus'">
<span v-if="record.arFeeStatus == 0" class="ds-green-tag">{{ FeeStatus[record.arFeeStatus] }}</span>
<span v-else-if="record.arFeeStatus == 1" class="ds-blue-tag">{{ FeeStatus[record.arFeeStatus] }}</span>
<span v-else-if="/^2|3|4|5|6$/.test(record.arFeeStatus)" class="ds-orange-tag">{{ FeeStatus[record.arFeeStatus] }}</span>
<span v-else-if="/^7|8$/.test(record.arFeeStatus)" class="ds-red-tag">{{ FeeStatus[record.arFeeStatus] }}</span>
<span v-if="record.arFeeStatus == 0" class="ds-green-tag">{{
FeeStatus[record.arFeeStatus]
}}</span>
<span v-else-if="record.arFeeStatus == 1" class="ds-blue-tag">{{
FeeStatus[record.arFeeStatus]
}}</span>
<span v-else-if="/^2|3|4|5|6$/.test(record.arFeeStatus)" class="ds-orange-tag">{{
FeeStatus[record.arFeeStatus]
}}</span>
<span v-else-if="/^7|8$/.test(record.arFeeStatus)" class="ds-red-tag">{{
FeeStatus[record.arFeeStatus]
}}</span>
<span v-else class="ds-purple-tag">{{ FeeStatus[record.arFeeStatus] }}</span>
</template>
<!-- 应付费用 -->
<!-- 应付费用 -->
<template v-if="column.dataIndex == 'apFeeStatus'">
<span v-if="record.apFeeStatus == 0" class="ds-green-tag">{{ FeeStatus[record.apFeeStatus] }}</span>
<span v-else-if="record.apFeeStatus == 1" class="ds-blue-tag">{{ FeeStatus[record.apFeeStatus] }}</span>
<span v-else-if="/^2|3|4|5|6$/.test(record.apFeeStatus)" class="ds-orange-tag">{{ FeeStatus[record.apFeeStatus] }}</span>
<span v-else-if="/^7|8$/.test(record.apFeeStatus)" class="ds-red-tag">{{ FeeStatus[record.apFeeStatus] }}</span>
<span v-if="record.apFeeStatus == 0" class="ds-green-tag">{{
FeeStatus[record.apFeeStatus]
}}</span>
<span v-else-if="record.apFeeStatus == 1" class="ds-blue-tag">{{
FeeStatus[record.apFeeStatus]
}}</span>
<span v-else-if="/^2|3|4|5|6$/.test(record.apFeeStatus)" class="ds-orange-tag">{{
FeeStatus[record.apFeeStatus]
}}</span>
<span v-else-if="/^7|8$/.test(record.apFeeStatus)" class="ds-red-tag">{{
FeeStatus[record.apFeeStatus]
}}</span>
<span v-else class="ds-purple-tag">{{ FeeStatus[record.apFeeStatus] }}</span>
</template>
<!-- 主题单号 -->
<template v-if="column.dataIndex == 'mblno'">
<div class="mblno">
<span @click="editColumns(record.mblno)">{{ record.mblno }}</span>
<span @click="editColumns(record)">{{ record.mblno }}</span>
<Icon icon="ant-design:copy-outlined" @click="FnCopy(record.mblno)" />
</div>
</template>
@ -81,9 +97,7 @@
{{ TaskShippingOrderCompareData.compareTime }}
<span v-if="TaskShippingOrderCompareData.isExistsDiff">
比对异常 合计
<span class="TaskShippingOrderCompareSpan">{{
TaskShippingOrderCompareData.total
}}</span>
<span class="TaskShippingOrderCompareSpan">{{ TaskShippingOrderCompareData.total }}</span>
</span>
</p>
@ -175,7 +189,7 @@
api: async (p) => {
const res: API.DataResult = await PageDataByBooking(p)
return new Promise((resolve) => {
res.data.forEach(item => {
res.data.forEach((item) => {
item.stlDate = formatTableData(item.stlDate)
item.etd = formatTableData(item.etd)
item.closingDate = formatTableData(item.closingDate)
@ -218,96 +232,96 @@
condition.push({
FieldName: 'mblno',
FieldValue: data.mblno,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.hblno) {
condition.push({
FieldName: 'hblno',
FieldValue: data.hblno,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.customerId) {
condition.push({
FieldName: 'customerId',
FieldValue: data.customerId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.etd) {
condition.push({
FieldName: 'etd',
FieldValue: data.etd[0],
ConditionalType: 3
ConditionalType: 3,
})
condition.push({
FieldName: 'etd',
FieldValue: data.etd[1],
ConditionalType: 5
ConditionalType: 5,
})
}
if (!!data.operatorId) {
condition.push({
FieldName: 'operatorId',
FieldValue: data.operatorId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.saleId) {
condition.push({
FieldName: 'saleId',
FieldValue: data.saleId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.vesselId) {
condition.push({
FieldName: 'vesselId',
FieldValue: data.vesselId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.voyno) {
condition.push({
FieldName: 'voyno',
FieldValue: data.voyno,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.dischargePortId) {
condition.push({
FieldName: 'dischargePortId',
FieldValue: data.dischargePortId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.destinationId) {
condition.push({
FieldName: 'destinationId',
FieldValue: data.destinationId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.carrierId) {
condition.push({
FieldName: 'carrierId',
FieldValue: data.carrierId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.laneId) {
condition.push({
FieldName: 'laneId',
FieldValue: data.laneId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (!!data.laneId) {
condition.push({
FieldName: 'laneId',
FieldValue: data.laneId,
ConditionalType: 1
ConditionalType: 1,
})
}
if (isAdvancedQuery.value) {
@ -348,7 +362,7 @@
bordered: true,
showIndexColumn: true,
canResize: false,
immediate: false
immediate: false,
})
function editColumns(row) {
if (row.mblno) {
@ -396,7 +410,7 @@
})
const TaskShippingOrderCompareVisible = ref(false)
const formatSheetVisible = ref(false)
//
function FnOpenAdvancedQuery() {
AdvancedQueryVisible.value = true
@ -539,27 +553,27 @@
</script>
<style lang="less">
.ds-sea-export-table {
.vben-basic-table-header__toolbar {
justify-content: space-between;
}
.mblno {
text-align: left;
color: @primary-color !important;
span {
margin-right: 0.5rem;
cursor: pointer;
.ds-sea-export-table {
.vben-basic-table-header__toolbar {
justify-content: space-between;
}
.mblno {
text-align: left;
color: @primary-color !important;
.CSMblnoCopy {
cursor: pointer;
span {
margin-right: 0.5rem;
cursor: pointer;
}
.CSMblnoCopy {
cursor: pointer;
}
}
}
}
.high-search {
.CsConditionFilter {
padding: 16px;
.high-search {
.CsConditionFilter {
padding: 16px;
}
}
}
</style>

Loading…
Cancel
Save