Files
geg-gas-web/src/views/contract/ContractProc/components/createForm.vue
‘huanghaiixia’ 03dc292d57 船期
2026-03-04 16:31:44 +08:00

713 lines
30 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">
<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="kNo">
<a-input v-model:value="formState.kNo" :disabled="isDisable" style="width: 65%" /><a-button v-if="!isDisable" type="primary" @click="onContract">关联合同</a-button>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="合同名称" name="kName">
<a-input v-model:value="formState.kName" placeholder="请输入合同名称" :disabled="isDisable"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="合同期限" name="kPeriod">
<a-select v-model:value="formState.kPeriod" :disabled="isDisable" placeholder="请选择合同期限" @change="kPeriodChange" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.kPeriodList" :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="dateFrom">
<a-date-picker v-model:value="formState.dateFrom" style="width: 100%" @change="dateChange(formState.dateFrom, 'dateFrom')" :disabled="isDisable" :disabled-date="disabledDateStart" placeholder="请选择开始日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="有效期结束" name="dateTo">
<a-date-picker v-model:value="formState.dateTo" style="width: 100%" @change="dateChange(formState.dateTo, 'dateTo')" :disabled="isDisable" :disabled-date="disabledDateEnd" placeholder="请选择结束日期" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="供应商" name="cpName">
<a-input-search v-model:value="formState.cpName" :disabled="isDisable" placeholder="请选择供应商" readonly @search="onSearchSupplier"/>
</a-form-item>
</a-col>
<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="bDeptName">
<a-input-search v-model:value="formState.bDeptName" disabled placeholder="请选择业务部门" readonly @search="onSearch"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="合同主体" name="comName">
<a-input v-model:value="formState.comName" disabled />
</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="approCode">
<a-select v-model:value="formState.approCode" disabled style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.approCodeList" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="备注" name="note" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.note" :disabled="isDisable" placeholder="请输入备注" :auto-size="{ minRows: 2, maxRows: 5 }"/>
</a-form-item>
</a-col>
</a-row>
</Card>
<Card title="业务信息" :bordered="false" >
<a-row>
<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-col :span="24">
<a-form-item label="超期存储费说明" name="periodDesc" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.lngContractProcList[0].periodDesc" :disabled="isDisable" placeholder="请输入超期存储费说明" :auto-size="{ minRows: 2, maxRows: 5 }"/>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="损耗说明" name="wasteDesc" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.lngContractProcList[0].wasteDesc" :disabled="isDisable" placeholder="请输入损耗说明" :auto-size="{ minRows: 2, maxRows: 5 }"/>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="备注" name="note" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.lngContractProcList[0].note" :disabled="isDisable" placeholder="请输入备注" :auto-size="{ minRows: 2, maxRows: 5 }"/>
</a-form-item>
</a-col>
</a-row>
</Card>
<Card title="加工费率" :bordered="false" >
<div v-for="(item, idx) in dataListPrice" class="tbStyle">
<a-button type="primary" style="margin-bottom: 10px;margin-right: 10px;" @click="addProc" v-if="!isDisable">新增</a-button>
<a-button type="primary" @click="deleteProc(idx)" v-if="!isDisable">删除</a-button>
<a-row>
<a-col :span="8">
<a-form-item name="dateFromNew">
<template #label>
<span><span style="color:red">*</span>有效期开始</span>
</template>
<a-date-picker v-model:value="item.dateFromNew" format="YYYY-MM-DD" :value-format="'YYYY-MM-DD'" @openChange="dateToYCheck(idx)" @change="dateFromNewChange" style="width: 100%" :disabled="isDisable" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item name="dateToCode">
<template #label>
<span><span style="color:red">*</span>结束日类型</span>
</template>
<a-select v-model:value="item.dateToCode" @change="dateToCodeChange(idx, item.dateToCode)" :disabled="isDisable" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.dateToCodeList" :key="item.code" :value="item.code">
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="8" v-if="item.dateToCode=='F'">
<a-form-item name="dateToF">
<template #label>
<span><span style="color:red">*</span>固定结束日</span>
</template>
<a-date-picker v-model:value="item.dateToF" format="YYYY-MM-DD" :value-format="'YYYY-MM-DD'" style="width: 100%" :disabled="isDisable" />
</a-form-item>
</a-col>
<a-col :span="8" v-if="item.dateToCode=='Y'">
<a-form-item name="dateToY">
<template #label>
<span><span style="color:red">*</span>每年结束日</span>
</template>
<a-date-picker v-model:value="item.dateToY" format="MM-DD" :value-format="'MM-DD'" style="width: 100%" :disabled="isDisable" @openChange="dateToYCheck(idx)" :disabledDate="disabledCurrentYear"/>
</a-form-item>
</a-col>
<div style="width: 100%">
<a-button type="primary" style="margin-bottom: 10px" @click="handleAdd(idx)" v-if="!isDisable">新增行</a-button>
<a-table style="width: 100%" :columns="columnsPrice" :data-source="item.lngPriceProcDtlList" :pagination="false">
<template #headerCell="{ column }">
<template v-if="column.dataIndex == 'qtyGj'">
<span><span class="redStyle">*</span>阶梯内气量(吉焦)</span>
</template>
<template v-if="column.dataIndex == 'pricePngGj'">
<span><span class="redStyle">*</span>气态加工费率(/吉焦)</span>
</template>
<template v-if="column.dataIndex == 'priceLngGj'">
<span><span class="redStyle">*</span>液态加工费率(/吉焦)</span>
</template>
<template v-if="column.dataIndex == 'rateTonGj'">
<span><span class="redStyle">*</span>/吉焦</span>
</template>
</template>
<template #bodyCell="{ column, record, index }">
<template v-if="column.dataIndex === 'sortDesc'">
<a-input v-model:value="record.sortDesc" :disabled="isDisable" />
</template>
<template v-if="column.dataIndex === 'rateTonGj'">
<input-number v-model:value="record.rateTonGj" :disabled="isDisable" :min="0" :digits="3" style="width: 100%"/>
</template>
<template v-if="column.dataIndex === 'qtyGj'">
<input-number v-model:value="record.qtyGj" :disabled="isDisable" :min="0" :digits="3" style="width: 100%"/>
</template>
<template v-if="column.dataIndex === 'pricePngGj'">
<input-number v-model:value="record.pricePngGj" :disabled="isDisable" :min="0" :digits="3" style="width: 100%"/>
</template>
<template v-if="column.dataIndex === 'priceLngGj'">
<input-number v-model:value="record.priceLngGj" :disabled="isDisable" :min="0" :digits="3" style="width: 100%"/>
</template>
<template v-if="column.dataIndex === 'note'">
<a-input v-model:value="record.note" :disabled="isDisable" />
</template>
<template v-if="column.dataIndex === 'operation'">
<a v-if="!isDisable" @click="handleDelete(idx, index)">删除</a>
</template>
</template>
</a-table>
</div>
</a-row>
</div>
</Card>
<Card title="附件信息" :bordered="false" >
<UploadList :disabled="isDisable" :list="dataFile" :value="formState.filePath" :tableName="tableName" :columnName="columnName" @change="uploadListChange"/>
</Card>
<Card title="关联合同信息" :bordered="false" >
<correlationContractFactList :list="dataListContractFact" :disabled="isDisable" @change="getApproContractFactList"></correlationContractFactList>
</Card>
<Card title="签报列表" :bordered="false" >
<correlationApproList :list="dataListAppro" :disabled="isDisable" @change="getApproList"></correlationApproList>
</Card>
</a-form>
</div>
<deptUserModal @register="register" @success="handleSuccess"/>
<deptListModal @register="registerDept" @success="handleSuccessDept" />
<contractFactListModal @register="registerContractFact" @success="handleSuccessContractFact" />
<lngStationModal @register="registerStation" @success="handleSuccessStation"/>
<supplierListModal @register="registerSupplier" @success="handleSuccessSupplier" selectType="radio" />
</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 { 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 { addLngContract,updateLngContract, getLngContract,getParameter } from '/@/api/contract/ContractProc';
import { getLngContractFact } from '/@/api/contract/ContractFact';
import { getLngAppro,getCompDept } from '/@/api/approve/Appro';
import dayjs from 'dayjs';
import { h } from 'vue';
import { SearchOutlined } from '@ant-design/icons-vue';
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 deptListModal from '/@/components/common/deptListModal.vue';
import correlationApproList from '/@/components/common/correlationApproList.vue';
import correlationContractFactList from '/@/components/common/correlationContractFactList.vue';
import contractFactListModal from '/@/components/common/contractFactListModal.vue';
import lngStationModal from '/@/components/common/lngStationModal.vue';
import supplierListModal from '/@/components/common/supplierListModal.vue';
import { getAllCurrency } from '/@/api/contract/ContractFact';
import { useUserStore } from '/@/store/modules/user';
import { DataFormat, FormatOption, DATE_FORMAT, FormatType } from '/@/utils/dataFormat';
const userStore = useUserStore();
const userInfo = userStore.getUserInfo;
const tableName = 'ContractProc';
const columnName = 'ContractProc'
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',
typeCode: 'P',
onlineSign: 'N',
cpTableName: 'lng_supplier',
curCode: 'CNY',
lngContractProcList: [{}],
});
const [register, { openModal:openModal}] = useModal();
const [registerDept, { openModal:openModalDept}] = useModal();
const [registerContractFact, { openModal:openModalContractFact}] = useModal();
const [registerStation, { openModal:openModalStation}] = useModal();
const [registerSupplier, { openModal:openModalSupplier}] = useModal();
const rules= reactive({
kNo: [{ required: true, message: "该项为必填项", trigger: 'change' }],
kName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
cpName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
uomCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
empName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
bDeptName: [{ required: false, message: "该项为必填项", trigger: 'change' }],
dateTo:[{ required: true, message: "该项为必填项", trigger: 'change' }],
dateFrom:[{ required: true, message: "该项为必填项", trigger: 'change' }],
staName:[{ required: true, message: "该项为必填项", trigger: 'change' }],
});
const layout = {
labelCol: { span: 8 },
wrapperCol: { span: 16 },
}
const rateCode = ref()
const curIdx = ref(null)
const dataFile = ref([]);
const dataListAppro = ref([])
const dataListContractFact = ref([])
let optionSelect= reactive({
approCodeList: [],
kPeriodList: [],
curCodeList: [],
dateToCodeList: []
});
const dataListPrice = ref([
{
lngPriceProcDtlList: []
}
])
const columnsPrice= ref([
// { title: t('序号'), dataIndex: 'index', key: 'index', customRender: (column) => `${column.index + 1}` ,width: 80},
{ title: t('阶梯'), dataIndex: 'sort',width: 80},
{ title: t('约定'), dataIndex: 'sortDesc'},
{ title: t('吨/吉焦'), dataIndex: 'rateTonGj', width: 150},
{ title: t('阶梯内气量(吉焦)'), dataIndex: 'qtyGj', width: 200},
{ title: t('气态加工费率(元/吉焦)'), dataIndex: 'pricePngGj', width: 200},
{ title: t('液态加工费率(元/吉焦)'), dataIndex: 'priceLngGj', width: 200},
{ title: t('备注'), dataIndex: 'note'},
{ title: t('操作'), dataIndex: 'operation', width: 80, fixed: 'right',align: 'center'},
]);
watch(
() => props.id,
(val) => {
if (val) {
getInfo(val)
}
},
{
immediate: true
}
);
watch(
() => props.disabled,
(val) => {
isDisable.value = val
if (val) {
let idx = columnsPrice.value.findIndex(v=>v.dataIndex == 'operation')
idx>-1&&columnsPrice.value.splice(idx, 1)
}
},
{
immediate: true
}
);
onMounted(async () => {
getOption()
if (pageId.value) {
getInfo(pageId.value)
} else {
formState.empName = userInfo.name
formState.empId = userInfo.id
formState.tel = userInfo.mobile
getOptionParams()
}
let a = await getParameter({code: 'RATE_TON_GJ'})||[]
rateCode.value = a[0]?.valueNum1
});
const dateToCodeChange = (idx, val) => {
if (val == 'F') {
dataListPrice.value[idx].dateToY = null
} else {
dataListPrice.value[idx].dateToF = null
}
}
const dateFromNewChange = (val) => {
if (val) {
dataListPrice.value[curIdx.value].dateFrom = dayjs(val).format('YYYY-MM-DD')
dataListPrice.value[curIdx.value].dateToY = null
}
}
const dateToYCheck = (idx) => {
curIdx.value = idx
}
const disabledCurrentYear = (current) => {
let date = new Date().getFullYear()
if (dataListPrice.value[curIdx.value].dateFromNew) {
date = new Date(dataListPrice.value[curIdx.value].dateFromNew).getFullYear()
}
return current && new Date(current).getFullYear() !== date;
};
const kPeriodChange = (val) => {
if (val !== 'Y') {
formState.dateFrom = dayjs('2000-01-01')
formState.dateTo = dayjs('2999-12-31')
}
}
const uploadListChange = (val) => {
dataFile.value = val
}
async function getInfo(id) {
spinning.value = true
try {
let data = await getLngContract(id)
spinning.value = false
Object.assign(formState, {...data})
Object.assign(dataFile.value, formState.lngFileUploadList || [])
Object.assign(dataListContractFact.value, formState.lngContractFactList || [])
Object.assign(dataListAppro.value, formState.lngApproVoList || [])
Object.assign(dataListPrice.value, formState.lngPriceProcList || [])
formState.dateFrom = formState.dateFrom ? dayjs(formState.dateFrom) : null
formState.dateTo = formState.dateTo ? dayjs(formState.dateTo) : null
formState.staName = formState.lngContractProcList[0]?.staName
dataListPrice.value.forEach(v =>{
v.dateFromNew = v.dateFrom ? dayjs(v.dateFrom) : null
v.dateToF = v.dateToF ? dayjs(v.dateToF) : null
v.dateToY = v.dateToY ? dayjs(v.dateToY) : null
v.lngPriceProcDtlList = v.lngPriceProcDtlList || []
getOptionParams()
if (isDisable.value) {
v.lngPriceProcDtlList =DataFormat.format(v.lngPriceProcDtlList, [
FormatOption.createQty('qtyGj'),
FormatOption.createQty('rateTonGj'),
FormatOption.createAmt('priceLngGj'),
FormatOption.createAmt('pricePngGj'),
]);
}
})
dataListAppro.value.forEach(v => {
// v.approId = v.id
})
dataListContractFact.value.forEach(v => {
v.kFactId = v.id
})
} catch (error) {
spinning.value = false
}
}
async function getOption() {
optionSelect.kPeriodList = await getDictionary('LNG_K_PER')
optionSelect.approCodeList = await getDictionary('LNG_APPRO')
optionSelect.dateToCodeList = await getDictionary('LNG_D_TO')
if (!pageId.value) {
getCompDeptInfo(userInfo.id)
}
}
async function getOptionParams() {
optionSelect.curCodeList = await getAllCurrency({eid: formState.curCode})
}
const getCompDeptInfo = async (id, deptId)=> {
const res = await getCompDept(id, deptId)
formState.bDeptName = res?.dept?.name
formState.bDeptId = res?.dept?.id
if (!pageId.value) {
formState.comName = res?.comp?.name
formState.comId = res?.comp?.id
}
}
const getApproList = (val) => {
dataListAppro.value = val
}
const getApproContractFactList = (val) => {
dataListContractFact.value = val
}
const dateChange = (val, k) => {
if (!val) {
if (k=='dateFrom') {
formState.dateFrom = dayjs(new Date())
setTimeout(() => {
formState.dateFrom = null
}, );
}
if (k=='dateTo') {
formState.dateTo = dayjs(new Date())
setTimeout(() => {
formState.dateTo = null
}, );
}
}
}
const disabledDateStart = (startValue) => {
const endValue = formState?.dateTo;
if (!startValue || !endValue) {
return false
}
return startValue.valueOf() >= endValue.valueOf();
}
const disabledDateEnd = (endValue) => {
const startValue = formState?.dateFrom;
if (!endValue || !startValue) {
return false
}
return endValue.valueOf() <= startValue.valueOf();
}
const onSearch = (val)=> {
openModalDept(true,{isUpdate: false})
}
const onSearchSupplier = () => {
openModalSupplier(true,{isUpdate: false})
}
const onSearchUser = (val)=> {
openModal(true,{isUpdate: false})
}
const onContract = (val)=> {
openModalContractFact(true,{isUpdate: false})
}
const onSearchStation = (val)=> {
openModalStation(true,{isUpdate: false})
}
const addProc = () => {
dataListPrice.value.push({
lngPriceProcDtlList:[]
})
}
const deleteProc= (index) => {
if (dataListPrice.value.length ==1)return
dataListPrice.value.splice(index, 1)
}
const handleAdd = (idx)=> {
dataListPrice.value[idx].lngPriceProcDtlList.push({sortDesc: '',rateTonGj:rateCode.value,qtyGj:'',pricePngGj:'',priceLngGj:'',sort:dataListPrice.value[idx].lngPriceProcDtlList.length+1})
}
const handleDelete= (idx,index) => {
dataListPrice.value[idx].lngPriceProcDtlList.splice(index, 1)
}
const handleSuccess = (val, deptId) => {
formState.empName = val[0].name
formState.empId = val[0].id
formState.tel = val[0].mobile
getCompDeptInfo(formState.empId, deptId)
}
const handleSuccessDept = (val, info) => {
formState.bDeptName = val[0].name
formState.bDeptId = val[0].id
formState.comName = info.name
formState.comId = info.id
}
const handleSuccessSupplier = (val) => {
formState.cpCode = val[0].suCode
formState.cpName = val[0].suName
}
const handleSuccessContractFact = (val) => {
val.forEach((v, idx) => {
v.kFactId = v.id
v.sort = idx
v.id = null
})
if (!dataListContractFact.value.length) {
dataListContractFact.value = val
getContractFact()
return
}
let arr = []
val.forEach(v => {
dataListContractFact.value.forEach(i => {
if (v.kNo == i.kNo){
message.warning(v.kNo + '已重复, 合同不需要重复选择')
} else {
arr.push(v)
}
})
})
dataListContractFact.value = unique([...dataListContractFact.value, ...arr], 'kNo')
getContractFact()
}
const getContractFact = async () => {
let a = []
dataListContractFact.value.forEach(v=>{
if (v.relTypeCode == 'M') {
a.push(v)
}
})
if(a.length == 1) {
const res = await getLngContractFact(a[0].kFactId)
formState.kNo = formState.kNo ? formState.kNo : res?.kNo
formState.kName = formState.kName ? formState.kName : res?.kName
formState.kPeriod = formState.kPeriod ? formState.kPeriod : res?.periodTypeCode
formState.curCode = formState.curCode ? formState.curCode : res?.curCode
formState.dateFrom = formState.dateFrom ? formState.dateFrom : (res?.dateFrom ? dayjs(res?.dateFrom) : null)
formState.dateTo = formState.dateTo ? formState.dateTo : (res?.dateTo ? dayjs(res?.dateTo) : null)
formState.cpName = formState.cpName ? formState.cpName : (res?.lngContractFactCpList || [])[0]?.cpName
formState.cpCode = formState.cpCode ? formState.cpCode : (res?.lngContractFactCpList || [])[0]?.cpCode
}
}
const handleSuccessStation = (val) => {
formState.lngContractProcList[0].staCode = val[0].code
formState.lngContractProcList[0].staName = val[0].fullName
formState.staName = val[0].fullName
}
function unique(arr, u_key) {
const map = new Map()
arr.forEach((item, index) => {
if (!map.has(item[u_key])) {
map.set(item[u_key], item)
}
})
return [...map.values()]
}
function close() {
tabStore.closeTab(currentRoute.value, router);
}
async function getFormValue() {
return formState
}
async function handleSubmit(type) {
try {
await formRef.value.validateFields();
for(let k=0; k<dataListPrice.value.length; k++) {
let flag = !dataListPrice.value[k].dateFrom || !dataListPrice.value[k].dateToCode || (dataListPrice.value[k].dateToCode=='F'&&!dataListPrice.value[k].dateToF) || (dataListPrice.value[k].dateToCode=='Y'&&!dataListPrice.value[k].dateToY)
if (flag) {
message.warn('请完善加工费率必选项')
return
}
dataListPrice.value[k].dateFrom = dataListPrice.value[k].dateFrom ? dayjs(dataListPrice.value[k].dateFrom).format('YYYY-MM-DD HH:mm:ss'):null
dataListPrice.value[k].dateFromNew = dataListPrice.value[k].dateFromNew ? dayjs(dataListPrice.value[k].dateFromNew).format('YYYY-MM-DD HH:mm:ss') : null
dataListPrice.value[k].dateToF = dataListPrice.value[k].dateToF ? dayjs(dataListPrice.value[k].dateToF).format('YYYY-MM-DD HH:mm:ss') : null
dataListPrice.value[k].dateToY = dataListPrice.value[k].dateToY ? dayjs(dataListPrice.value[k].dateToY).format('MM-DD') : null
dataListPrice.value[k].comId = formState.comId
dataListPrice.value[k].suCode = formState.cpCode
dataListPrice.value[k].staCode = formState.lngContractProcList[0].staCode
let arr = dataListPrice.value[k].lngPriceProcDtlList || []
for(let i=0; i<arr.length; i++) {
let isFlag = arr[i].rateTonGj == null || arr[i].rateTonGj === ''|| arr[i].pricePngGj == null || arr[i].pricePngGj === '' || arr[i].priceLngGj == null || arr[i].priceLngGj === ''
let isFlagNew = false
if (arr[i].sort <arr.length && (arr[i].qtyGj == '' || arr[i].qtyGj == null)) {
isFlagNew = true
}
if (isFlag || isFlagNew) {
message.warn('请完善加工费率必选项')
return
}
}
}
let obj = {
...formState,
lngFileUploadList: dataFile.value,
lngContractFactRelList: dataListContractFact.value,
lngContractApproRelList: dataListAppro.value,
lngPriceProcList: dataListPrice.value,
approCode: pageType.value=='update' ? 'WTJ' : formState.approCode
}
spinning.value = true;
let request = !formState.id ? addLngContract :updateLngContract
try {
const data = await request(obj);
// 新增保存
if (data?.id) {
getInfo(data?.id)
}
// 同意保存不提示
if (!type) {
notification.success({
message: '提示',
description: data?.id ? t('新增成功') : t('修改成功')
}); //提示消息
}
return data?.id ? data : obj
} 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;
}
.redStyle {
color: red;
}
.tbStyle {
border: 1px dashed #d9d9d9;
padding: 10px;
margin-bottom: 10px;
}
</style>