合同变更

pull/781/head
zy 2025-05-01 20:18:50 +08:00
parent 3b22398ae7
commit 79126ca91a
8 changed files with 416 additions and 125 deletions

View File

@ -0,0 +1,158 @@
<template>
<Dialog title="添加联系人" v-model="dialogVisible" width="50%">
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="100px"
>
<el-form-item label="姓名" prop="name">
<el-input
v-model="queryParams.name"
class="!w-240px"
clearable
placeholder="请输入姓名"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon class="mr-5px" icon="ep:search" />
搜索
</el-button>
<el-button @click="resetQuery">
<Icon class="mr-5px" icon="ep:refresh" />
重置
</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<ContentWrap>
<el-table ref="multipleTableRef" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :row-key="getRowKey" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="序号" align="center" type="selection" :reserve-selection="true" />
<el-table-column label="联系人姓名" align="center" prop="name" />
<el-table-column align="center" label="电话" prop="telephone" width="130" />
<el-table-column align="center" label="职位" prop="post" width="120" />
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as ContactApi from '@/api/crm/contact'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { BillTemplateApi, BillTemplateVO } from '@/api/crm/billtemplate'
/** 票据模版 列表 */
defineOptions({ name: 'BillTemplate' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<BillTemplateVO[]>([]) //
const total = ref(0) //
const multipleSelection = ref([])
const dialogVisible = ref(false) //
const multipleTableRef = ref()
const selectedRowKeys = ref<number[]>([]);
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
name: undefined,
customerId: undefined
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 打开弹窗 */
const open = async (data: [], id) => {
dialogVisible.value = true
multipleSelection.value = data
queryParams.customerId = id
await getList()
await setSelections()
}
defineExpose({ open }) // open
// id
const getRowKey = (row) => {
return row.id
}
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await ContactApi.getContactPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
const handleSelectionChange = (val: []) => {
multipleSelection.value = val
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
multipleTableRef.value.clearSelection()
handleQuery()
}
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
dialogVisible.value = false
//
emit('success', multipleSelection.value)
}
const setSelections = async () => {
const selections = multipleSelection.value.map(item => {
return {
id: item.id
}
})
console.log('%csrc/components/product/index.vue:153 list.value', 'color: #007acc;', multipleSelection);
if (selections && selections.length > 0) {
list.value.forEach((row: any) => {
if (selections.some(item => item.id === row.id)) {
multipleTableRef.value.toggleRowSelection(row, true); //
}
});
} else {
multipleTableRef.value.clearSelection(); //
}
}
</script>

View File

@ -72,7 +72,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="变更项目" prop="endTime">
<el-radio-group v-model="formData.radio">
<el-radio-group v-model="formData.changeItem">
<el-radio :value="1">额度</el-radio>
<el-radio :value="2">授权人</el-radio>
<el-radio :value="3">延期</el-radio>
@ -87,12 +87,12 @@
<!-- 子表的表单 -->
<ContentWrap>
<ContractChangeLimit
v-if="formData.radio == 1"
v-if="formData.changeItem == 1"
ref="limitFormRef"
:formData="formData"
:disabled="disabled"
/>
<div v-if="formData.radio == 2">
<div v-if="formData.changeItem == 2">
<ContentWrap style="border: none">
甲方现授权人信息
</ContentWrap>
@ -103,12 +103,12 @@
<ContentWrap style="border: none">
甲方授权人
</ContentWrap>
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef" :contract-id="formData.id" />
<ContractBAuthorizedPersonForm ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
</div>
<ContracExtension ref="contractExtensionFormRef" v-if="formData.radio == 3" :formData="formData" />
<ContractStop ref="contractStopFormRef" :formData="formData" v-if="formData.radio == 4" />
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" v-if="formData.radio == 5" :contract-id="formData.id" />
<ContractForm ref="contractFormRef" :type="1" :formData="formData" v-if="formData.radio == 6" />
<ContracExtension ref="contractExtensionFormRef" v-if="formData.changeItem == 3" :formData="formData" />
<ContractStop ref="contractStopFormRef" :formData="formData" v-if="formData.changeItem == 4" />
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" v-if="formData.changeItem == 5" :contract-id="formData.id" />
<ContractForm ref="contractFormRef" :type="1" :formData="formData" v-if="formData.changeItem == 6" />
</ContentWrap>
</el-form>
<div style="text-align: right">
@ -132,6 +132,7 @@ import ContracExtension from '@/views/crm/contract/components/ContractExtension.
import ContractStop from '@/views/crm/contract/components/ContracStop.vue'
import ContractProductForm from '@/views/crm/contract/components/ContractProductForm.vue'
import ContractAAuthorizedCompanyForm from './components/ContractAAuthorizedCompanyForm.vue'
import ContractBAuthorizedPersonForm from './components/ContractAAuthorizedPersonForm.vue'
import ContractForm from './ContractForm.vue'
const { t } = useI18n() //
@ -179,7 +180,7 @@ const formData = ref({
partnerCompanyId: undefined,
deptId: undefined,
quotationTimes: undefined,
radio: 1,
changeItem: 1,
products: []
})
const formRules = reactive({
@ -196,7 +197,7 @@ const contactList = ref<ContactApi.ContactVO[]>([])
/** 子表的表单 */
const subTabsName = ref('limit')
const contractAAuthorizedCompanyFormRef = ref()
const ContractBAuthorizedPersonFormRef = ref()
const contractAAuthorizedCompanyFormRef1 = ref()
const limitFormRef = ref()
const contractExtensionFormRef = ref()
@ -246,6 +247,16 @@ const submitForm = async () => {
// const Authalid1 = await contractAAuthorizedCompanyFormRef1.value.validate()
// if (!Authalid1) return
if(ContractBAuthorizedPersonFormRef.value) {
const Authalid = await ContractBAuthorizedPersonFormRef.value.validate()
if (!Authalid) return
}
if(contractAAuthorizedCompanyFormRef1.value) {
const Authalid1 = await contractAAuthorizedCompanyFormRef1.value.validate()
if (!Authalid1) return
}
if(limitFormRef.value) {
const limitValid = await limitFormRef.value.validate()
if (!limitValid) return
@ -253,9 +264,20 @@ if(limitFormRef.value) {
if(contractExtensionFormRef.value) {
const extensionValid = await contractExtensionFormRef.value.validate()
console.log('%csrc/views/crm/contrxact/ContractChange.vue:247 123', 'color: #007acc;', extensionValid,123);
if (!extensionValid) return
}
if(contractStopFormRef.value) {
const stopValid = await contractStopFormRef.value.validate()
if (!stopValid) return
}
if(contractFormRef.value) {
const contractValid = await contractFormRef.value.validate()
if (!contractValid) return
}
@ -266,18 +288,30 @@ if(contractExtensionFormRef.value) {
// if (!contractValid) return
return
//
formLoading.value = true
try {
const data = unref(JSON.parse(JSON.stringify(formData.value))) as unknown as ContractApi.ContractVO
//
data.contractAAuthorizedCompanys = limitFormRef.value.getData()
data.contractAAuthorizedCompanys = contractExtensionFormRef.value.getData()
data.contractAAuthorizedCompanys = contractStopFormRef.value.getData()
data.contractAAuthorizedCompanys = contractFormRef.value.getData()
data.contractAAuthorizedCompanys = contractAAuthorizedCompanyFormRef.value.getData()
let proChangeObj = {
1: limitFormRef,
2: ContractBAuthorizedPersonFormRef,
3: contractExtensionFormRef,
4: contractStopFormRef,
5: contractAAuthorizedCompanyFormRef1,
6: contractFormRef
}
let dataFormList = proChangeObj[formData.value.changeItem].value.getData()
data[proChangeObj[formData.value.changeItem]] = dataFormList
if(formData.value.changeItem == 2) {
let ids = []
dataFormList.map(item => {
ids.push(item.id)
})
data.afterAuthorizerId = ids.join(',')
}
// data.contractAAuthorizedCompanys = limitFormRef.value.getData()
data.contractId = data.id
delete data.id
await ContractApi.changeContract(data)
@ -334,7 +368,7 @@ const resetForm = () => {
partnerCompanyId: undefined,
deptId: undefined,
quotationTimes: undefined,
radio: 1,
changeItem: 1,
products: []
}
formRef.value?.resetFields()

View File

@ -75,14 +75,18 @@
<el-row justify="center" class="mt-3" v-if="!type">
<el-button @click="handleAdd" round>+ 添加</el-button>
</el-row>
<!-- 表单弹窗添加/修改 -->
<ContactForm ref="contactRef" @success="getList" />
</template>
<script setup lang="ts">
import * as ContractApi from '@/api/crm/contract'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getBoolDictOptions } from '@/utils/dict'
import ContactForm from '@/components/contact/index.vue'
const props = defineProps<{
contractId: undefined, // ID
type: undefined
type: undefined,
customerId: undefined
}>()
const formLoading = ref(false) //
const formData = ref([])
@ -115,21 +119,50 @@ watch(
)
/** 新增按钮操作 */
// const handleAdd = () => {
// const row = {
// id: undefined,
// contractId: undefined,
// customerContactId: undefined,
// customerName: undefined,
// authPersonType: undefined,
// phoneNumber: undefined,
// wechat: undefined,
// idNumber: undefined,
// email: undefined,
// deletedFlag: undefined
// }
// row.contractId = props.contractId
// formData.value.push(row)
// }
const contactRef = ref() // Ref
const handleAdd = () => {
const row = {
id: undefined,
contractId: undefined,
customerContactId: undefined,
customerName: undefined,
authPersonType: undefined,
phoneNumber: undefined,
wechat: undefined,
idNumber: undefined,
email: undefined,
deletedFlag: undefined
contactRef.value.open(formData.value, props.customerId)
}
const getList = (val: []) => {
for(let i = val.length - 1; i >= 0; i--) {
let obj = val[i]
if(formData.value.some(v => v.id === obj.id)) val.splice(i, 1)
}
row.contractId = props.contractId
formData.value.push(row)
val.forEach(item => {
if(!formData.value.some(v => v.id === item.id)) {
val.forEach(item => {
formData.value.push({
"name": item.name,
"postId": item.post,
"userRank": item.userRank,
"phoneNumber": item.mobile,
"authDesc": item.authDesc,
"wechat":item. wechat,
"email":item. email,
"id": item.id
})
})
}
})
}
/** 删除按钮操作 */

View File

@ -33,7 +33,7 @@
<el-table-column label="姓名" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.name`" :rules="formRules.name" class="mb-0px!">
<el-input v-model="row.name" disabled placeholder="请输入姓名" />
<el-input v-model="row.name" placeholder="请输入姓名" />
</el-form-item>
</template>
</el-table-column>
@ -41,7 +41,7 @@
<el-table-column label="岗位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.postId`" :rules="formRules.postId" class="mb-0px!">
<el-input v-model="row.postId" disabled placeholder="请输入岗位" />
<el-input v-model="row.postId" placeholder="请输入岗位" />
</el-form-item>
</template>
</el-table-column>
@ -90,6 +90,7 @@
<el-row justify="center" class="mt-3" v-if="!type">
<el-button @click="handleAdd" round>+ 添加</el-button>
</el-row>
</template>
<script setup lang="ts">
import * as ContractApi from '@/api/crm/contract'
@ -97,7 +98,7 @@ import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getBoolDictOptions } f
const props = defineProps<{
contractId: undefined, // ID
type: undefined
type: undefined,
}>()
const formLoading = ref(false) //
const formData = ref([])
@ -149,6 +150,8 @@ const handleAdd = () => {
formData.value.push(row)
}
/** 删除按钮操作 */
const handleDelete = (index) => {
formData.value.splice(index, 1)

View File

@ -8,15 +8,11 @@
v-loading="formLoading"
>
<el-row>
<el-col :span="8">
<el-form-item label="报价单编号" prop="no">
<el-input v-model="formData.no" placeholder="请输入报价单编号" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="选择商机" prop="businessId">
<el-select v-model="formData.businessId" placeholder="请选择商机" @change="onBusinessChange" disabled>
<el-select v-model="formData.businessId" disabled clearable placeholder="请选择商机" @change="onBusinessChange">
<el-option
v-for="dict in businessList"
:key="dict.id"
@ -26,12 +22,32 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8" v-if="formType">
<el-form-item label="报价单编号" prop="">
<el-input v-model="formData.no" disabled placeholder="自动获取" />
</el-form-item>
</el-col>
</el-row>
<ContentWrap style="border: none; font-weight: 700">风控信息</ContentWrap>
<el-row>
<el-col :span="8">
<el-form-item label="系统授信额度" prop="customerId">
<el-input v-model="formData.creditAmount" disabled placeholder="自动获取" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="授信额度调整" prop="creditLimitNum">
<el-input v-model="formData.creditLimitNum" disabled @input="changeNum" clearable placeholder="请输入授信额度调整" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="最终授信额度" prop="creditLimit">
<el-input v-model="formData.creditLimit" disabled placeholder="自动获取" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户" prop="customerId">
<el-select v-model="formData.customerId" disabled placeholder="请选择客户" @change="onCustomerChange">
<el-select v-model="formData.customerId" disabled placeholder="请选择客户" clearable @change="onCustomerChange">
<el-option
v-for="item in customerList"
:key="item.id"
@ -43,7 +59,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="合作类型" prop="cooperationType">
<el-select v-model="formData.cooperationType" disabled filterable placeholder="合作类型" class="w-1/1">
<el-select v-model="formData.cooperationType" disabled filterable clearable placeholder="请选择合作类型" class="w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_COOPERATION_TYPE)"
:key="dict.value"
@ -54,131 +70,132 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="公司类型" prop="companyType">
<el-input v-model="formData.companyType" disabled />
<el-form-item label="公司类型" prop="regType">
<el-input v-model="formData.regType" disabled clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="上市情况" prop="listingStatus">
<el-input v-model="formData.listingStatus" disabled />
<el-input v-model="formData.listingStatus" disabled clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="融资信息" prop="financingInfo">
<el-input v-model="formData.financingInfo" disabled />
<el-input v-model="formData.financingInfo" disabled clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实缴资金" prop="paidInCapital">
<el-input v-model="formData.paidInCapital" disabled />
<el-form-item label="实缴资金" prop="actualCapital">
<el-input v-model="formData.actualCapital" disabled clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参保人数" prop="insuredCount">
<el-input v-model="formData.insuredCount" disabled />
<el-form-item label="参保人数" prop="socialEmployeeNum">
<el-input v-model="formData.socialEmployeeNum" disabled clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="成立日期" prop="establishmentDate">
<el-input v-model="formData.establishmentDate" disabled />
<el-form-item label="成立日期" prop="startDate">
<el-input v-model="formData.startDate" disabled clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-col :span="8">
<el-form-item label="企业类型" prop="enterpriseType">
<el-input v-model="formData.enterpriseType" disabled />
<el-input v-model="formData.enterpriseType" clearable />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="8">
<el-form-item label="营业状态" prop="businessStatus">
<el-input v-model="formData.businessStatus" disabled />
<el-form-item label="营业状态" prop="serviceStatus">
<el-input v-model="formData.serviceStatus" disabled clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="被告记录" prop="defendantRecord">
<el-radio-group v-model="formData.defendantRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-radio-group v-model="formData.defendantRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="经营异常" prop="businessAbnormal">
<el-radio-group v-model="formData.businessAbnormal" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-form-item label="经营异常" prop="abnormalService">
<el-radio-group v-model="formData.abnormalService" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="股权出质" prop="equityPledge">
<el-radio-group v-model="formData.equityPledge" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-radio-group v-model="formData.equityPledge" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="失信记录" prop="dishonestRecord">
<el-radio-group v-model="formData.dishonestRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-form-item label="失信记录" prop="dishonestyRecord">
<el-radio-group v-model="formData.dishonestyRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="融资记录" prop="financingRecord">
<el-radio-group v-model="formData.financingRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-form-item label="融资记录" prop="financeRecord">
<el-radio-group v-model="formData.financeRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="被执行记录" prop="enforcementRecord">
<el-radio-group v-model="formData.enforcementRecord" :disabled="true">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
<el-form-item label="被执行记录" prop="judgmentRecord">
<el-radio-group v-model="formData.judgmentRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<ContentWrap style="border: none; font-weight: 700">需求信息</ContentWrap>
<el-row>
<el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" disabled placeholder="请选择合作主体" @change="onPartnerChange">
<el-select v-model="formData.partnerCompanyId" clearable disabled placeholder="请选择合作主体" @change="onPartnerChange">
<el-option
v-for="dict in deptList"
v-for="dict in orgList"
:key="dict.id"
:label="dict.name"
:label="dict.orgName"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户行" prop="bBankName">
<el-input v-model="formData.bBankName" disabled />
<el-form-item label="开户行" prop="bankName">
<el-input v-model="formData.bankName" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="银行账号" prop="bBankAccount">
<el-input v-model="formData.bBankAccount" disabled />
<el-form-item label="银行账号" prop="bankAccount">
<el-input v-model="formData.bankAccount" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="法人代表" prop="bLegalRepresentative">
<el-input v-model="formData.bLegalRepresentative" disabled />
<el-form-item label="法人代表" prop="legalRepresentative">
<el-input v-model="formData.legalRepresentative" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-col :span="8">
<el-form-item label="营业执照号" prop="bBusinessLicenseNumber">
<el-input v-model="formData.bBusinessLicenseNumber" disabled />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="8">
<el-form-item label="营业执照" prop="bBusinessLicense">
<el-input v-model="formData.bBusinessLicense" disabled />
<el-form-item label="营业执照" prop="businessLicense">
<el-input v-model="formData.businessLicense" disabled />
</el-form-item>
</el-col>
@ -188,8 +205,8 @@
<el-col :span="8">
<el-form-item label="归属部门" prop="deptId">
<el-tree-select
disabled
v-model="formData.deptId"
disabled
:data="deptTree"
:props="defaultProps"
filterable
@ -249,21 +266,21 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<!-- <el-col :span="8">
<el-form-item label="签约人联系电话" prop="signPhoneNumber">
<el-input v-model="formData.signPhoneNumber" disabled placeholder="请输入签约人联系电话" />
<el-input v-model="formData.signPhoneNumber" placeholder="请输入签约人联系电话" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签约人Email" prop="signEmail">
<el-input v-model="formData.signEmail" disabled placeholder="请输入签约人Email" />
<el-input v-model="formData.signEmail" placeholder="请输入签约人Email" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签约人微信" prop="signWechat">
<el-input v-model="formData.signWechat" disabled placeholder="请输入签约人微信" />
<el-input v-model="formData.signWechat" placeholder="请输入签约人微信" />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="8">
<el-form-item label="账期" prop="paymentTerm">
@ -352,7 +369,7 @@
<!-- 子表的表单 -->
<el-tabs v-model="subTabsName">
<el-tab-pane label="报价产品关联" name="quotationProduct">
<QuotationProductForm ref="quotationProductFormRef" :quotation-id="formData.id" :business-id="formData.businessId" :billTemplateId="formData.invoiceTemplateId" />
<QuotationProductForm ref="quotationProductFormRef" :products="formData.products" :quotation-id="formData.id" :business-id="formData.businessId" :billTemplateId="formData.invoiceTemplateId" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
@ -363,12 +380,11 @@ import { QuotationApi, QuotationVO } from '@/api/crm/quotation'
import { defaultProps, handleTree } from '@/utils/tree'
import { BillTemplateApi, BillTemplateVO } from '@/api/crm/billtemplate'
import QuotationProductForm from './components/QuotationProductDetail.vue'
import * as ContractApi from '@/api/crm/contract'
import * as CustomerApi from '@/api/crm/customer'
import * as UserApi from '@/api/system/user'
import * as DeptApi from '@/api/system/dept'
import * as BusinessApi from '@/api/crm/business'
import { erpPriceMultiply, erpPriceInputFormatter } from '@/utils'
import { propTypes } from '@/utils/propTypes'
/** CRM 方案报价 表单 */
defineOptions({ name: 'QuotationForm' })
@ -381,11 +397,11 @@ const templateOptions = ref([])
const businessList = ref([])
const deptTree = ref() //
const deptList = ref() //
const orgList = ref([])
const invoiceTemplateList = ref([])
const props = defineProps({
id: propTypes.number.def(undefined)
})
const { proxy }: any = getCurrentInstance();
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
@ -435,13 +451,27 @@ const formData = ref({
bBankAccount: undefined, //
bLegalRepresentative: undefined, //
bBusinessLicenseNumber: undefined, //
bBusinessLicense: undefined //
bBusinessLicense: undefined, //
creditAmount: undefined,
creditLimitNum: undefined,
})
const formRules = reactive({
no: [{ required: true, message: '报价单编号不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户id不能为空', trigger: 'change' }],
businessId: [{ required: true, message: '商机编号不能为空', trigger: 'change' }],
invoiceTemplateId: [{ required: true, message: '票据模板Id不能为空', trigger: 'change' }]
// no: [{ required: true, message: '', trigger: 'blur' }],
// customerId: [{ required: true, message: 'id', trigger: 'change' }],
// businessId: [{ required: true, message: '', trigger: 'change' }],
// invoiceTemplateId: [{ required: true, message: 'Id', trigger: 'change' }],
// actualCapital: [{ required: true, message: '', trigger: 'blur' }],
// socialEmployeeNum: [{ required: true, message: '', trigger: 'blur' }],
// defendantRecord: [{ required: true, message: '', trigger: 'blur' }],
// abnormalService: [{ required: true, message: '', trigger: 'blur' }],
// equityPledge: [{ required: true, message: '', trigger: 'blur' }],
// dishonestyRecord: [{ required: true, message: '', trigger: 'blur' }],
// financeRecord: [{ required: true, message: '', trigger: 'blur' }],
// judgmentRecord: [{ required: true, message: '', trigger: 'blur' }],
// paymentTerm: [{ required: true, message: '', trigger: 'change' }],
// partnerCompanyId: [{ required: true, message: '', trigger: 'change' }],
// creditMethod: [{ required: true, message: '', trigger: 'change' }],
// creditCalcCycle: [{ required: true, message: '', trigger: 'change' }],
})
const formRef = ref() // Ref
@ -478,6 +508,10 @@ const onCustomerChange = async (customerId: string) => {
try {
formLoading.value = true;
const customerRes = await CustomerApi.getCustomer(customerId);
formData.value.actualCapital = customerRes.actualCapital
formData.value.socialEmployeeNum = customerRes.socialEmployeeNum
formData.value.startDate = customerRes.startDate
formData.value.actualCapital = customerRes.actualCapital
formData.value.cooperationType = customerRes.cooperationType;
formData.value.companyType = customerRes.companyType;
formData.value.listingStatus = customerRes.listingStatus;
@ -504,21 +538,25 @@ const onPartnerChange = async (id: string) => {
if (!id) return
try {
formLoading.value = true;
const res = await DeptApi.getDept(id);
formData.value.bBankName = res.bankName;
formData.value.bBankAccount = res.bankAccount;
formData.value.bLegalRepresentative = res.legalRepresentative;
formData.value.bBusinessLicenseNumber = res.businessLicenseNumber;
formData.value.bBusinessLicense = res.businessLicense;
const res = await ContractApi.getOrgInfo(id);
formData.value.bankName = res.bankName;
formData.value.bankAccount = res.bankAccount;
formData.value.legalRepresentative = res.legalRepresentative;
formData.value.businessLicenseNumber = res.businessLicenseNumber;
formData.value.businessLicense = res.businessLicense;
// formData.value.partnerCompanyId = res.partnerCompanyId;
} catch (err) {
} finally {
formLoading.value = false;
}
}
const changeNum = (val) => {
formData.value.creditLimit = (Number(val) + (formData.value.creditAmount || 0)).toFixed(2)
}
/** 打开弹窗 */
const open = async (type: string) => {
dialogVisible.value = true
formType.value = type
//
if (type) {
formLoading.value = true
@ -530,6 +568,8 @@ const open = async (type: string) => {
}
deptList.value = await DeptApi.getSimpleDeptList()
//
invoiceTemplateList.value = await BillTemplateApi.getSimpleList()
}
defineExpose({ open }) // open
@ -561,12 +601,17 @@ const submitForm = async () => {
dialogVisible.value = false
//
emit('success')
goBack()
} finally {
formLoading.value = false
}
}
const goBack = ()=> {
proxy.$router.go(-1)
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
@ -600,7 +645,8 @@ const resetForm = () => {
const route = useRoute();
onMounted(async () => {
formType.value = props.id || route.query.id
formType.value = route.query.id;
if (formType.value) open(formType.value)
//
@ -613,8 +659,13 @@ onMounted(async () => {
pageSize: 1000,
})
templateOptions.value = data.list
businessList.value = await BusinessApi.getSimpleBusinessList()
businessList.value = await BusinessApi.getSelfSimpleBusinessList()
//
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
const org = await ContractApi.getOrg({
pageNo: 1,
pageSize: 1000
})
orgList.value = org.list
});
</script>

View File

@ -103,7 +103,9 @@ import * as BusinessApi from '@/api/crm/business'
const props = defineProps<{
quotationId: undefined, //
businessId: undefined,
billTemplateId: undefined
billTemplateId: undefined,
products: undefined
}>()
const formLoading = ref(false) //
const formData = ref([])
@ -141,7 +143,6 @@ watch(
formLoading.value = false
}
},
{ immediate: true }
)
watch(
@ -169,8 +170,20 @@ watch(
formLoading.value = false
}
},
{ immediate: true }
)
watch(
() => props.products,
(val) => {
if (!val || val.length === 0) {
return;
}
nextTick(() => {
formData.value = val
})
},
{ immediate: true }
);
/** 新增按钮操作 */
const handleAdd = () => {

View File

@ -213,7 +213,6 @@ watch(
}
try {
formLoading.value = true
console.log('%csrc/views/crm/quotation/components/QuotationProductForm.vue:214 1111', 'color: #007acc;', 1111);
// if(val.quotationId) {
// formData.value = await QuotationApi.getQuotationProductListByQuotationId(val.quotationId)
// } else if(val.businessId) {

View File

@ -265,7 +265,7 @@ const handleQuery = () => {
}
const openDetail = (id: number) => {
push({ name: 'QuotationDetail', params: { id } })
router.push({ name: 'QuotationDetail', query: { id: id } })
}
/** 重置按钮操作 */