Files
geg-gas-web/src/views/ship/OpsSalesInt/components/createForm.vue
‘huanghaiixia’ 1b24d0284e 价格申请列表
2026-03-05 17:46:46 +08:00

746 lines
33 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<a-spin :spinning="spinning" tip="加载中...">
<div class="page-bg-wrap formViewStyle pdcss">
<div class="top-toolbar" >
<a-button style="margin-right: 10px" @click="close">
<slot name="icon"><close-outlined /></slot>关闭
</a-button>
<template v-if="pageType!=='view'">
<a-button style="margin-right: 10px" type="primary" @click="handleSubmit">
<slot name="icon"><save-outlined /></slot>保存
</a-button>
</template>
</div>
<a-form ref="formRef" :model="formState" :rules="rules" v-bind="layout">
<Card title="基础信息" :bordered="false" >
<a-row>
<a-col :span="8">
<a-form-item label="船期编号" name="ssNo">
<a-input-search v-model:value="formState.ssNo" :disabled="isDisable || pageType" placeholder="请选择船期" readonly @search="onSearchShip"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="交易主体" name="comName">
<a-select v-model:value="formState.comId" disabled placeholder="请选择" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.comIdList" :key="item.value" :value="item.value">
{{ item.label }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="业务类型" name="ssTypeCode">
<a-select v-model:value="formState.ssTypeCode" :disabled="isDisable" placeholder="请选择" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.ssTypeCodeList" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="合同" name="kName">
<a-input-search v-model:value="formState.kName" :disabled="isDisable" placeholder="请选择合同" readonly @search="onContract"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="长协/现货" name="longSpotCode">
<a-select v-model:value="formState.longSpotCode" disabled placeholder="" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.longSpotCodeList" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="客户" name="cuName">
<a-input-search v-model:value="formState.cuName" disabled/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="信用证号" name="lcNo">
<a-select v-model:value="formState.lcNo" :disabled="isDisable" placeholder="请选择" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.signList" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="国际气源地" name="sourceName">
<a-input v-model:value="formState.sourceName" :disabled="isDisable" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="销售区域" name="salesAreaCode">
<a-cascader v-model:value="formState.salesAreaCode" :options="options" :load-data="loadData" :disabled="isDisable" @change="onChange" change-on-select
:field-names="{label: 'fullName', value: 'code', children: 'children'}" placeholder="请选择区域"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="接收站" name="staName">
<a-input-search v-model:value="formState.staName" :disabled="isDisable" placeholder="请选择接收站" readonly @search="onSearchStation"/>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="8">
<a-form-item label="我方联系人" name="empName">
<a-input-search v-model:value="formState.empName" :disabled="isDisable" placeholder="请选择业务联系人" readonly @search="onSearchUser"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="联系人电话" name="empTel">
<a-input-search v-model:value="formState.empTel" :disabled="isDisable" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="所在部门" name="empDeptName">
<a-input v-model:value="formState.empDeptName" disabled placeholder="请输入"/>
</a-form-item>
</a-col>
</a-row>
</Card>
<Card title="货物信息" :bordered="false" >
<a-row>
<a-col :span="8">
<a-form-item label="执行日" name="dateOps">
<a-date-picker v-model:value="formState.dateOps" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="货权转移日" name="dateTrans">
<a-date-picker v-model:value="formState.dateTrans" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="价格条款" name="prcTermCode">
<a-select v-model:value="formState.prcTermCode" :disabled="isDisable" placeholder="请选择" style="width: 100%" allow-clear @change="periodTypeCodeChange">
<a-select-option v-for="item in optionSelect.prcTermCodeList" :key="item.code" :value="item.code">
{{ item.fullName }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="是否自租船" name="frtSign">
<a-select v-model:value="formState.frtSign" :disabled="isDisable" placeholder="请选择" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.signList" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="船名" name="shipName">
<a-input v-model:value="formState.shipName" :disabled="isDisable" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="IMO" name="shipCode">
<a-input v-model:value="formState.shipCode" :disabled="isDisable" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="是否保险" name="insurSign">
<a-select v-model:value="formState.insurSign" :disabled="isDisable" placeholder="请选择" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.signList" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="币种" name="curCode">
<a-select v-model:value="formState.curCode" :disabled="isDisable" placeholder="请选择币种" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.curCodeList" :key="item.code" :value="item.code">
{{ item.fullName }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="汇率" name="rateEx">
<input-number v-model:value="formState.rateEx" :disabled="isDisable" :digits="6" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="预估币种价格" name="priceCurrEst">
<input-number v-model:value="formState.priceCurrEst" @change="numCount" :disabled="isDisable" :digits="4" :min="0" style="width: 100%" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="预估币种金额" name="amountCurrEst">
<input-number v-model:value="formState.amountCurrEst" disabled :digits="2" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="热值(MMBtu)" name="qtyMmbtu">
<input-number v-model:value="formState.qtyMmbtu" @change="numCount" :disabled="isDisable" :digits="3" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="热值(GJ)" name="qtyGj">
<input-number v-model:value="formState.qtyGj" :disabled="isDisable" :digits="3" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="重量(吨)" name="qtyTon">
<input-number v-model:value="formState.qtyTon" :disabled="isDisable" :digits="3" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="体积(标方)" name="qtyM3">
<input-number v-model:value="formState.qtyM3" :disabled="isDisable" :digits="3" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="结算量(MMBtu)" name="qtySettleMmbtu">
<input-number v-model:value="formState.qtySettleMmbtu" @change="numChange" :disabled="isDisable" :digits="3" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="结算币种价格" name="priceCurr">
<input-number v-model:value="formState.priceCurr" @change="numChange" :disabled="isDisable" :digits="4" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="结算币种金额" name="amountCurr">
<input-number v-model:value="formState.amountCurr" :disabled="isDisable" :digits="2" :min="0" style="width: 100%" placeholder="请输入"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="NOR日" name="dateNor">
<a-date-picker v-model:value="formState.dateNor" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="最迟交货日" name="dateEnd">
<a-date-picker v-model:value="formState.dateEnd" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="发出付款通知日" name="datePayNtc">
<a-date-picker v-model:value="formState.datePayNtc" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="付款日" name="dateRp">
<a-date-picker v-model:value="formState.dateRp" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
</a-row>
</Card>
<Card title="卸港信息" :bordered="false" >
<a-row>
<a-col :span="8">
<a-form-item label="卸港" name="portUnloading1Name">
<a-input-search v-model:value="formState.portUnloading1Name" :disabled="isDisable" placeholder="请选择卸港港口" readonly @search="onSearchPort('portUnload')"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="替代卸港" name="portUnloading2">
<a-input v-model:value="formState.portUnloading2" :disabled="isDisable" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="卸港ETA" name="dateEta">
<a-date-picker v-model:value="formState.dateEta" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="卸港ETB" name="dateEtb">
<a-date-picker v-model:value="formState.dateEtb" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="卸港ETC" name="dateEtc">
<a-date-picker v-model:value="formState.dateEtc" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="卸港ETD" name="dateEtd">
<a-date-picker v-model:value="formState.dateEtd" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="卸港信息说明" name="noteArrival" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.noteArrival" :disabled="isDisable" placeholder="请输入内容最多100字" :maxLength="100" :auto-size="{ minRows: 2, maxRows: 5 }"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="卸载日期" name="dateIn">
<a-date-picker v-model:value="formState.dateIn" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
</a-row>
</Card>
<Card title="通关信息" :bordered="false" >
<a-row>
<a-col :span="8">
<a-form-item label="提单号" name="blNo">
<a-input v-model:value="formState.blNo" style="width: 100%" :disabled="isDisable" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="提单日" name="dateBl">
<a-date-picker v-model:value="formState.dateBl" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="商检公司" name="inspName">
<a-input v-model:value="formState.inspName" style="width: 100%" :disabled="isDisable" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="报关单号" name="cdNo">
<a-input v-model:value="formState.cdNo" style="width: 100%" :disabled="isDisable" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="邮寄报关资料日" name="datePost">
<a-date-picker v-model:value="formState.datePost" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="产地证" name="origin">
<a-input v-model:value="formState.origin" style="width: 100%" :disabled="isDisable" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="许可证编号" name="licNo">
<a-input v-model:value="formState.licNo" style="width: 100%" :disabled="isDisable" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="办理许可证日" name="dateLic">
<a-date-picker v-model:value="formState.dateLic" style="width: 100%" :disabled="isDisable" placeholder="请选择日期" />
</a-form-item>
</a-col>
</a-row>
</Card>
<Card title="附件信息" :bordered="false" >
<UploadList :disabled="isDisable" :list="dataFile" :value="formState.filePath" :tableName="tableName" :columnName="columnName" @change="uploadListChange"/>
</Card>
</a-form>
</div>
<deptUserModal @register="register" @success="handleSuccess"/>
<contractPurIntListModal @register="registerContractPurInt" @success="handleSuccessContractPurInt" selectType="radio" />
<lngStationModal @register="registerStation" @success="handleSuccessStation"/>
<portListModal @register="registerPort" @success="handleSuccessPort"/>
<shipScheduleListModal @register="registerShip" @success="handleSuccessShip" />
</a-spin>
</template>
<script lang="ts" setup>
import { Card } from 'ant-design-vue';
import { useRouter } from 'vue-router';
import { FromPageType, RecordType } from '/@/enums/workflowEnum';
import { ref, computed, onMounted, onBeforeMount, nextTick, defineAsyncComponent, reactive, defineComponent, watch} from 'vue';
import { SendOutlined, SaveOutlined, CloseOutlined, } from '@ant-design/icons-vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n';
import { useMultipleTabStore } from '/@/store/modules/multipleTab';
import useEventBus from '/@/hooks/event/useEventBus';
import type { Rule } from 'ant-design-vue/es/form';
import { getDictionary } from '/@/api/sales/Customer';
import { useModal } from '/@/components/Modal';
import { getAllPriceTerm} from '/@/api/contract/ContractPurInt';
import { addLngOpsSalesInt,updateLngOpsSalesInt, getLngOpsSalesInt} from '/@/api/ship/OpsSalesInt';
import { getAllCurrency } from '/@/api/contract/ContractFact';
import dayjs from 'dayjs';
import { getAppEnvConfig } from '/@/utils/env';
import { message } from 'ant-design-vue';
import UploadList from '/@/components/Form/src/components/UploadList.vue';
import deptUserModal from '/@/components/common/deptUserModal.vue';
import contractPurIntListModal from '../../../../components/common/contractPurIntListModal.vue';
import supplierListModal from '/@/components/common/supplierListModal.vue';
import lngStationModal from '/@/components/common/lngStationModal.vue';
import customerListModal from '/@/components/common/customerListModal.vue';
import portListModal from '/@/components/common/portListModal.vue';
import shipScheduleListModal from '/@/components/common/shipScheduleListModal.vue';
import { useUserStore } from '/@/store/modules/user';
import { getAllCom} from '/@/api/contract/ContractPurInt';
import type { CascaderProps } from 'ant-design-vue';
import { getAreaList, getAreaInfo} from '/@/api/mdm/CountryRegion';
import {getCompDept } from '/@/api/approve/Appro';
import { getLngShipSchedule} from '/@/api/ship/ShipSchedule';
const userStore = useUserStore();
const userInfo = userStore.getUserInfo;
const tableName = 'ShipSchedule';
const columnName = 'ShipSchedule'
const formType = ref('2'); // 0 新建 1 修改 2 查看
const formRef = ref();
const props = defineProps({
disabled: false,
id: ''
});
const { bus, FORM_LIST_MODIFIED } = useEventBus();
const router = useRouter();
const { currentRoute } = router;
const isDisable = ref(false);
const { formPath } = currentRoute.value.query;
const pathArr = [];
const tabStore = useMultipleTabStore();
const formProps = ref(null);
const formId = ref(currentRoute.value?.params?.id);
const pageType = ref(currentRoute.value.query?.type);
const pageId = ref(currentRoute.value.query?.id)
const spinning = ref(false);
const { notification } = useMessage();
const { t } = useI18n()
const formState = reactive({
approCode: 'WTJ'
});
const [register, { openModal:openModal}] = useModal();
const [registerContractPurInt, { openModal:openModalContractPurInt}] = useModal();
const [registerStation, { openModal:openModalStation}] = useModal();
const [registerPort, { openModal:openModalPort}] = useModal();
const [registerShip, { openModal:openModalShip}] = useModal();
const rules= reactive({
ssNo: [{ required: true, message: "该项为必填项", trigger: 'change' }],
comId: [{ required: true, message: "该项为必填项", trigger: 'change' }],
ssTypeCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
curCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
dateEta: [{ required: true, message: "该项为必填项", trigger: 'change' }],
kName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
staName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
dateOps: [{ required: true, message: "该项为必填项", trigger: 'change' }],
frtSign: [{ required: true, message: "该项为必填项", trigger: 'change' }],
insurSign: [{ required: true, message: "该项为必填项", trigger: 'change' }],
prcTermCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
});
const layout = {
labelCol: { span: 8 },
wrapperCol: { span: 16 },
}
const dataFile = ref([]);
let optionSelect= reactive({
signList: [],
comIdList: [],
ssTypeCodeList: [],
longSpotCodeList: [],
curCodeList: [],
prcTermCodeList: [],
});
watch(
() => props.id,
(val) => {
if (val) {
getInfo(val)
}
},
{
immediate: true
}
);
watch(
() => props.disabled,
(val) => {
isDisable.value = val
},
{
immediate: true
}
);
onMounted(() => {
isDisable.value = pageType.value == 'view'
getOption()
if (pageId.value) {
getInfo(pageId.value)
} else {
formState.empName = userInfo.name
formState.empId = userInfo.id
formState.empTel = userInfo.mobile
getOptionParams()
}
initialFetch()
});
const options = ref<CascaderProps['options']>([]);
const loadData: CascaderProps['loadData'] = async (selectedOptions) => {
const targetOption = selectedOptions[selectedOptions.length - 1];
targetOption.loading = true;
try {
const res = await getAreaList({pid: targetOption.id, excludeType:'CONTINENT'});
if (Array.isArray(res)) {
const children = (res || []).map(item => {
return {
...item,
isLeaf: !item.hasChild,
}
});
targetOption.children = children;
return;
}
} catch (e) {
console.error(e);
} finally {
targetOption.loading = false;
}
};
async function initialFetch() {
try {
const res = await getAreaList({pid: '', excludeType:'CONTINENT'});
options.value = (res || []).map(item => {
return {
...item,
isLeaf: !item.hasChild,
}
})
} catch (error) {}
}
const onChange = (value, selectedOptions) => {
}
const getArea = async (val) => {
const resData = await getAreaInfo({code: val,excludeType:'CONTINENT' });
options.value = resData.areaList
formState.salesAreaCode = resData.regionCode
}
const uploadListChange = (val) => {
dataFile.value = val
}
async function getInfo(id) {
spinning.value = true
try {
let data = await getLngOpsSalesInt(id)
spinning.value = false
Object.assign(formState, {...data})
Object.assign(dataFile.value, formState.lngFileUploadList || [])
formState.dateNor = formState.dateNor ? dayjs(formState.dateNor) : null
formState.dateEnd = formState.dateEnd ? dayjs(formState.dateEnd) : null
formState.dateEta = formState.dateEta ? dayjs(formState.dateEta) : null
formState.dateEtb = formState.dateEtb ? dayjs(formState.dateEtb) : null
formState.dateEtc = formState.dateEtc ? dayjs(formState.dateEtc) : null
formState.dateEtd = formState.dateEtd ? dayjs(formState.dateEtd) : null
formState.dateOps = formState.dateOps ? dayjs(formState.dateOps) : null
formState.dateTrans = formState.dateTrans ? dayjs(formState.dateTrans) : null
formState.dateEnd = formState.dateEnd ? dayjs(formState.dateEnd) : null
formState.datePayNtc = formState.datePayNtc ? dayjs(formState.datePayNtc) : null
formState.dateIn = formState.dateIn ? dayjs(formState.dateIn) : null
formState.dateRp = formState.dateRp ? dayjs(formState.dateRp) : null
formState.dateBl = formState.dateBl ? dayjs(formState.dateBl) : null
formState.datePost = formState.datePost ? dayjs(formState.datePost) : null
formState.dateLic = formState.dateLic ? dayjs(formState.dateLic) : null
getOptionParams()
if (formState.salesAreaCode) {
getArea(formState.salesAreaCode)
}
} catch (error) {
spinning.value = false
}
}
const getCompDeptInfo = async (id, deptId)=> {
const res = await getCompDept(id, deptId)
formState.empDeptName = res?.dept?.name
formState.empDeptId = res?.dept?.id
if (!pageId.value) {
formState.comName = res?.comp?.name
formState.comId = res?.comp?.id
}
}
async function getOption() {
optionSelect.signList = await getDictionary('LNG_YN')
optionSelect.ssTypeCodeList = await getDictionary('LNG_SHP_S')
optionSelect.approCodeList = await getDictionary('LNG_APPRO')
optionSelect.longSpotCodeList = await getDictionary('LNG_LONG')
if (!pageId.value) {
getCompDeptInfo(userInfo.id)
}
let res = await getAllCom() || []
optionSelect.comIdList = res.map(v=> {
return {
label: v.shortName,
value: v.id
}
})
}
async function getOptionParams() {
optionSelect.curCodeList = await getAllCurrency({eid: formState.curCode})
optionSelect.prcTermCodeList = await getAllPriceTerm({eid: formState.prcTermCode})
}
const numCount = () => {
formState.amountCurrEst = (Number(formState.qtyMmbtu) || 0) * (Number(formState.priceCurrEst) || 0)
formState.amountCurrEst = formState.amountCurrEst ? formState.amountCurrEst.toFixed(2) : ''
}
const numChange = () => {
formState.amountCurr = (Number(formState.qtySettleMmbtu) || 0) * (Number(formState.priceCurr) || 0)
formState.amountCurr = formState.amountCurr ? formState.amountCurr.toFixed(2) : ''
}
const onSearchPort= (type) => {
openModalPort(true,{isUpdate: false, type})
}
const onSearchShip = () => {
openModalShip(true,{isUpdate: false})
}
const onSearchStation = (val)=> {
openModalStation(true,{isUpdate: false})
}
const onSearchUser = (val)=> {
openModal(true,{isUpdate: false})
}
const onContract = (val)=> {
openModalContractPurInt(true,{isUpdate: false})
}
const handleSuccess = (val, deptId) => {
formState.empName = val[0].name
formState.empId = val[0].id
formState.empTel = val[0].mobile
getCompDeptInfo(formState.empId, deptId)
}
const handleSuccessPort = (val, type) => {
if (type == 'portUnload') {
formState.portUnloading1Code = val[0].code
formState.portUnloading1Name = val[0].fullName
} else {
formState.portLoading1Code = val[0].code
formState.portLoading1Name = val[0].fullName
}
}
const handleSuccessStation = (val) => {
formState.staCode = val[0].code
formState.staName = val[0].fullName
}
const handleSuccessShip = (val) => {
formState.ssNo = val[0].ssNo
formState.ssId = val[0].id
getLngShipInfo(val[0].id)
}
const getLngShipInfo = async (id) => {
try {
spinning.value = true
let data = await getLngShipSchedule(id)
spinning.value = false
formState.comId = data.comId
formState.kId = data.kId
formState.kName = data.kName
formState.longSpotCode = data.longSpotCode
formState.cuCode = data.cuCode
formState.cuName = data.cuName
formState.staCode = data.staCode
formState.staName = data.staName
formState.sourceName = data.sourceName
formState.empId = data.empId
formState.empName = data.empName
formState.empTel = data.empTel
formState.prcTermCode = data.prcTermCode
formState.shipCode = data.shipCode
formState.shipName = data.shipName
formState.dateNor = data.dateNor ? dayjs(data.dateNor) : null
formState.portUnloading1Code = data.portUnloading1Code
formState.portUnloading1Name = data.portUnloading1Name
formState.dateEta = data.dateEta ? dayjs(data.dateEta) : null
formState.dateEtb = data.dateEtb ? dayjs(data.dateEtb) : null
formState.dateEtc = data.dateEtc ? dayjs(data.dateEtc) : null
formState.dateEtd = data.dateEtd ? dayjs(data.dateEtd) : null
formState.qtyMmbtu = data.qtyMmbtu
formState.qtyGj = data.qtyGj
formState.qtyTon = data.qtyTon
formState.qtyM3 = data.qtyM3
formState.curCode = data.curCode
formState.rateEx = data.rateEx
formState.priceCurrEst = data.priceCurrEst
formState.amountCurrEst = data.amountCurrEst
} catch (error) {
spinning.value = false
}
}
const handleSuccessContractPurInt = (val) => {
formState.kId = val[0].id
formState.kName = val[0].kName
formState.comId = val[0].comId
formState.cuCode = val[0].cuCode
formState.cuName = val[0].cuName
formState.longSpotCode = val[0].longSpotCode
formState.prcTermCode = val[0].prcTermCode
formState.sourceName = val[0].sourceName
}
function close() {
tabStore.closeTab(currentRoute.value, router);
}
async function getFormValue() {
return formState
}
async function handleSubmit(type) {
try {
await formRef.value.validateFields();
let obj = {
...formState,
salesAreaCode: formState.salesAreaCode ? formState.salesAreaCode[formState.salesAreaCode.length -1] : '',
lngFileUploadList: dataFile.value,
}
spinning.value = true;
let request = !formState.id ? addLngOpsSalesInt :updateLngOpsSalesInt
try {
const data = await request(obj);
notification.success({
message: '提示',
description: data?.id ? t('新增成功!') : t('修改成功!')
}); //提示消息
setTimeout(() => {
bus.emit(FORM_LIST_MODIFIED, {});
close();
}, 500);
} finally {
spinning.value = false;
}
} catch (errorInfo) {
spinning.value = false;
errorInfo?.errorFields?.length && notification.warning({
message: '提示',
description: '请完善信息'
});
return false
}
}
defineExpose({
handleSubmit,
getFormValue
});
</script>
<style lang="less" scoped>
:deep(.ant-form-item .ant-form-item-label) {
width: 135px !important;
max-width: 135px !important;
}
.page-bg-wrap {
background-color: #fff;
}
.top-toolbar {
min-height: 44px;
margin-bottom: 12px;
border-bottom: 1px solid #eee;
}
.pdcss {
padding:0px 12px 6px 12px !important;
}
:deep(.formItemWarp .ant-form-item-label > label) {
white-space: normal !important;
word-break: break-word !important;
}
</style>