Files
geg-gas-web/src/views/contract/ContractFact/components/createForm.vue
‘huanghaiixia’ fa527fc312 合同查询、日志
2026-02-05 10:59:08 +08:00

650 lines
28 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" :class="isViewForm ? 'pdcss':''">
<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="onAppro">关联签报</a-button>
</a-form-item>
</a-col>
<a-col :span="16">
<a-form-item label="合同名称" name="kName" :label-col="{ span: 4 }" :wrapper-col="{ span: 24 }">
<a-input v-model:value="formState.kName" placeholder="请输入合同名称" :disabled="isDisable"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="关联类别" name="relTypeCode">
<a-select v-model:value="formState.relTypeCode" :disabled="isDisable" placeholder="请选择关联类别" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.relTypeCodeList" :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="kTypeCode1">
<a-select v-model:value="formState.kTypeCode1" :disabled="isDisable" placeholder="请选择合同类别" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.kTypeCode1List" :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="kTypeCode2">
<a-select v-model:value="formState.kTypeCode2" :disabled="isDisable" placeholder="请选择二级类别" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.kTypeCode2List" :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="periodTypeCode">
<a-select v-model:value="formState.periodTypeCode" :disabled="isDisable" placeholder="请选择合同期限" @change="periodTypeCodeChange" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.periodTypeCodeList" :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="dateDraft">
<a-date-picker v-model:value="formState.dateDraft" style="width: 100%" :disabled="isDisable" placeholder="请选择起草日期" />
</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="cpCount">
<a-input-number v-model:value="formState.cpCount" style="width: 100%" disabled :precision="0" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="合同金额类型" name="amountTypeCode">
<a-select v-model:value="formState.amountTypeCode" :disabled="isDisable" placeholder="请选择合同金额类型" @change="amountTypeCodeChange" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.amountTypeCodeList" :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="amount">
<a-input-number v-model:value="formState.amount" style="width: 100%" :formatter="value => ` ${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')" @blur="amountBlur(formState.amount)" :min="0" :disabled="isDisable" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="合同金额大写" name="amountCn">
<a-input v-model:value="formState.amountCn" disabled />
</a-form-item>
</a-col>
<a-col :span="22">
<a-form-item label="合同金额说明" name="amountDesc" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.amountDesc" :disabled="isDisable" placeholder="请输入合同金额说明" :auto-size="{ minRows: 2, maxRows: 5 }"/>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="结算类型" name="settleTypeCode">
<a-select v-model:value="formState.settleTypeCode" :disabled="isDisable" placeholder="请选择结算类型" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.settleTypeCodeList" :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="bidSign">
<a-select v-model:value="formState.bidSign" :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="preApproSign">
<a-select v-model:value="formState.preApproSign" :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="aheadSign">
<a-select v-model:value="formState.aheadSign" :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="tempSign">
<a-select v-model:value="formState.tempSign" :disabled="isDisable" placeholder="请选择采用范本" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.tempSignList" :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="impSign">
<a-select v-model:value="formState.impSign" :disabled="isDisable" placeholder="请选择重大事项所涉合同" style="width: 100%" allow-clear>
<a-select-option v-for="item in optionSelect.impSignList" :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="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="tel">
<a-input v-model:value="formState.tel" :disabled="isDisable" placeholder="请输入电话" />
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="业务部门" name="bDeptName">
<a-input-search v-model:value="formState.bDeptName" :disabled="isDisable" 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="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="22">
<a-form-item label="合同说明" name="kDesc" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.kDesc" :disabled="isDisable" placeholder="请输入备注最多1000字" :maxlength="1000" :auto-size="{ minRows: 4, }"/>
</a-form-item>
</a-col>
<a-col :span="22">
<a-form-item label="备注" name="note" :label-col="{ span: 3 }" :wrapper-col="{ span: 24 }">
<a-textarea v-model:value="formState.note" :disabled="isDisable" placeholder="请输入备注最多200字" :maxlength="200" :auto-size="{ minRows: 2, maxRows: 5 }"/>
</a-form-item>
</a-col>
</a-row>
</Card>
<Card title="相对方信息" :bordered="false" >
<div style="width: 100%">
<a-button type="primary" style="margin-bottom: 10px" @click="addUser" v-if="!isDisable">新增行</a-button>
<a-table style="width: 100%" :columns="columns" :data-source="dataList" :pagination="false" :scroll="{x: 1000}">
<template #bodyCell="{ column, record, index }">
<template v-if="column.dataIndex === 'operation'">
<a v-if="!isDisable" style="margin-right: 10px" @click="btnCheck('cp', 'edit', record, index)">编辑</a>
<a v-if="!isDisable" style="margin-right: 10px" @click="btnCheck('cp', 'delete', record, index)">删除</a>
</template>
</template>
</a-table>
</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" >
<correlationApproList :list="dataListAppro" :disabled="isDisable" @change="getApproList"></correlationApproList>
</Card>
</a-form>
</div>
<deptUserModal @register="register" @success="handleSuccess"/>
<deptListModal @register="registerDept" @success="handleSuccessDept" />
<approListModal @register="registerAppro" @success="handleSuccessAppro" />
<contractFactUserModal @register="registerUser" @success="handleSuccessUser" />
</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 { addLngContractFact,updateLngContractFact,getAllCurrency,getAllUser, getLngContractFact } from '/@/api/contract/ContractFact';
import { getLngAppro,getCompDept } from '/@/api/approve/Appro';
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 deptListModal from '/@/components/common/deptListModal.vue';
import approListModal from '/@/components/common/approListModal.vue';
import contractFactUserModal from '/@/components/common/contractFactUserModal.vue';
import correlationApproList from '/@/components/common/correlationApproList.vue';
import { amountToChinese } from '/@/utils/amountToChinese';
import { Modal } from 'ant-design-vue';
import { useUserStore } from '/@/store/modules/user';
const userStore = useUserStore();
const userInfo = userStore.getUserInfo;
const tableName = 'ContractFact';
const columnName = 'ContractFact'
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 isViewForm = currentRoute.value.path.includes('viewForm')
const spinning = ref(false);
const curIdx = ref(null)
const { notification } = useMessage();
const { t } = useI18n();
const formState = reactive({
approCode: 'WTJ',
dateDraft: dayjs(new Date()),
});
const [register, { openModal:openModal}] = useModal();
const [registerDept, { openModal:openModalDept}] = useModal();
const [registerAppro, { openModal:openModalAppro}] = useModal();
const [registerUser, { openModal:openModalUser}] = useModal();
const rules= reactive({
kNo: [{ required: true, message: "该项为必填项", trigger: 'change' }],
kName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
relTypeCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
kTypeCode1: [{ required: true, message: "该项为必填项", trigger: 'change' }],
periodTypeCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
cpCount: [{ required: false, message: "该项为必填项", trigger: 'change' }],
amountTypeCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
settleTypeCode: [{ required: true, message: "该项为必填项", trigger: 'change' }],
bidSign: [{ required: true, message: "该项为必填项", trigger: 'change' }],
preApproSign: [{ required: true, message: "该项为必填项", trigger: 'change' }],
aheadSign: [{ required: true, message: "该项为必填项", trigger: 'change' }],
tempSign: [{ required: true, message: "该项为必填项", trigger: 'change' }],
impSign: [{ required: true, message: "该项为必填项", trigger: 'change' }],
empName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
tel: [{ required: true, message: "该项为必填项", trigger: 'change' }],
bDeptName: [{ required: true, message: "该项为必填项", trigger: 'change' }],
});
const layout = {
labelCol: { span: 8 },
wrapperCol: { span: 16 },
}
const columns= ref([
{ title: t('序号'), dataIndex: 'index', key: 'index', customRender: (column) => `${column.index + 1}` ,width: 100},
{ title: t('相对方名称'), dataIndex: 'cpName', width:200},
{ title: t('相对方顺序'), dataIndex: 'sort', width: 130},
{ title: t('相对方银行名称'), dataIndex: 'cpBankName', width: 200},
{ title: t('对方银行开户名'), dataIndex: 'cpBankAccountName', width: 300},
{ title: t('对方银行账号'), dataIndex: 'cpBankAccount', width: 200},
{ title: t('对方联系人姓名'), dataIndex: 'contactName', width: 200},
{ title: t('对方联系人电话'), dataIndex: 'contactTel', width: 200},
{ title: t('对方联系人邮箱'), dataIndex: 'contactEmail', width: 200},
{ title: t('对方通讯地址'), dataIndex: 'contactAddress', width: 200},
{ title: t('备注'), dataIndex: 'note', width: 200},
{ title: t('操作'), dataIndex: 'operation', width: 120, fixed: 'right',align: 'center'},
]);
const dataList = ref([])
const dataFile = ref([]);
const dataListAppro = ref([])
let optionSelect= reactive({
approCodeList: [],
typeCodeList: [],
relTypeCodeList: [],
signList: [],
periodTypeCodeList: []
});
watch(
() => props.id,
(val) => {
if (val) {
getInfo(val)
}
},
{
immediate: true
}
);
watch(
() => props.disabled,
(val) => {
isDisable.value = val
if (val) {
let idx = columns.value.findIndex(v =>v.dataIndex == 'operation')
idx>-1 && columns.value.splice(idx, 1)
}
},
{
immediate: true
}
);
onMounted(() => {
getOption()
if (pageId.value) {
getInfo(pageId.value)
if (currentRoute.value.query?.disabled) {
isDisable.value = true
let idx = columns.value.findIndex(v =>v.dataIndex == 'operation')
idx>-1 && columns.value.splice(idx, 1)
}
} else {
formState.empName = userInfo.name
formState.empId = userInfo.id
formState.tel = userInfo.mobile
}
});
const uploadListChange = (val) => {
dataFile.value = val
}
async function getInfo(id) {
spinning.value = true
try {
let data = await getLngContractFact(id)
spinning.value = false
Object.assign(formState, {...data})
Object.assign(dataFile.value, formState.lngFileUploadList || [])
Object.assign(dataList.value, formState.lngContractFactCpList || [])
Object.assign(dataListAppro.value, formState.lngApproVoList || [])
formState.dateDraft = formState.dateDraft ? dayjs(formState.dateDraft) : null
formState.dateFrom = formState.dateFrom ? dayjs(formState.dateFrom) : null
formState.dateTo = formState.dateTo ? dayjs(formState.dateTo) : null
periodTypeCodeChange(formState.periodTypeCode)
amountTypeCodeChange(formState.amountTypeCode)
} catch (error) {
spinning.value = false
}
}
async function getOption() {
optionSelect.relTypeCodeList = await getDictionary('LNG_K_REL')
optionSelect.kTypeCode1List = await getDictionary('LNG_K_TYP1')
optionSelect.kTypeCode2List = await getDictionary('LNG_K_TYP2')
optionSelect.amountTypeCodeList = await getDictionary('LNG_K_AMT')
optionSelect.settleTypeCodeList = await getDictionary('LNG_K_ST')
optionSelect.periodTypeCodeList = await getDictionary('LNG_K_PER')
optionSelect.signList = await getDictionary('LNG_YNU')
optionSelect.tempSignList = await getDictionary('LNG_YNR')
optionSelect.impSignList = await getDictionary('LNG_YN')
optionSelect.approCodeList = await getDictionary('LNG_APPRO')
optionSelect.curCodeList = await getAllCurrency()
// optionSelect.telList = await getAllUser()
if (!pageId.value) {
const res = await getCompDept(userInfo.id)
formState.bDeptName = res?.dept?.name
formState.bDeptId = res?.dept?.id
formState.comName = res?.comp?.name
formState.comId = res?.comp?.id
}
}
const periodTypeCodeChange = (val) => {
if (val === 'Y') {
rules.dateTo = [{ required: true, message: "该项为必填项", trigger: 'change' }]
rules.dateFrom = [{ required: true, message: "该项为必填项", trigger: 'change' }]
} else {
rules.dateTo = [{ required: false, message: "该项为必填项", trigger: 'change' }]
rules.dateFrom = [{ required: false, message: "该项为必填项", trigger: 'change' }]
formState.dateFrom = dayjs('2000-01-01')
formState.dateTo = dayjs('2999-12-31')
}
}
const amountTypeCodeChange = (val) => {
if (val === 'Y') {
rules.curCode = [{ required: true, message: "该项为必填项", trigger: 'change' }]
rules.amount = [{ required: true, message: "该项为必填项", trigger: 'change' }]
} else {
rules.curCode = [{ required: false, message: "该项为必填项", trigger: 'change' }]
rules.amount = [{ required: false, message: "该项为必填项", trigger: 'change' }]
}
}
const amountBlur = (val) => {
if (!val) return
formState.amountCn = amountToChinese(Number(val)*10000)
}
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 getApproList = (val) => {
dataListAppro.value = val
}
const onSearch = (val)=> {
openModalDept(true,{isUpdate: false})
}
const onSearchUser = (val)=> {
openModal(true,{isUpdate: false})
}
const onAppro = (val)=> {
openModalAppro(true,{isUpdate: false})
}
const addUser = (val)=> {
curIdx.value = null
openModalUser(true,{isUpdate: false,list: dataList.value, curIdx: curIdx.value})
}
const handleSuccess = (val) => {
formState.empName = val[0].name
formState.empId = val[0].id
formState.tel = val[0].mobile
}
const handleSuccessDept = (val, info) => {
formState.bDeptName = val[0].name
formState.bDeptId = val[0].id
formState.comName = info.name
formState.comId = info.id
}
const handleSuccessAppro = (val) =>{
val.forEach(v => {
v.approId = v.id
v.id = null
})
if (!dataListAppro.value.length) {
dataListAppro.value = val
return
}
let arr = []
val.forEach(v => {
dataListAppro.value.forEach(i => {
if (v.code == i.code){
message.warning(v.code + '已重复, 签报不需要重复选择')
} else {
arr.push(v)
}
})
})
dataListAppro.value = unique([...dataListAppro.value, ...arr], 'code')
}
const handleSuccessUser = (val) => {
if (curIdx.value != null) {
dataList.value[curIdx.value] = {...val}
return
}
dataList.value.push({...val})
formState.cpCount = dataList.value.length
}
const btnCheck = (type, btn, record, index) => {
curIdx.value = null
if (type == 'cp') {
if (btn == 'delete') {
dataList.value.splice(index, 1)
formState.cpCount = dataList.value.length
}
if (btn == 'edit') {
curIdx.value = index
openModalUser(true, {record: record,isUpdate: true, list: dataList.value, curIdx: curIdx.value});
}
}
}
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();
if (Number(formState.cpCount)<0 || Number(formState.cpCount)>20) {
notification.warning({
message: 'Tip',
description: '相对方信息个数必须在0-20间'
});
return
}
let obj = {
...formState,
lngFileUploadList: dataFile.value,
lngContractFactCpList: dataList.value,
lngContractApproRelList: dataListAppro.value,
approCode: pageType.value=='update' ? 'WTJ' : formState.approCode
}
spinning.value = true;
let request = !formState.id ? addLngContractFact :updateLngContractFact
try {
const data = await request(obj);
// 新增保存
if (data?.id) {
getInfo(data?.id)
}
// 同意保存不提示
if (!type) {
notification.success({
message: 'Tip',
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: 'Tip',
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: 6px 12px !important;
}
</style>