pull/781/head
zy 2025-05-28 19:57:36 +08:00
parent 9778b673bc
commit b90a48337c
17 changed files with 360 additions and 193 deletions

View File

@ -62,8 +62,8 @@ export const getSimpleBusinessList = async () => {
}
// 获得 CRM 我的商机列表
export const getSelfSimpleBusinessList = async () => {
return await request.get({ url: `/crm/business/self-simple-list` })
export const getSelfSimpleBusinessList = async (params: any) => {
return await request.get({ url: `/crm/business/self-simple-list`, params })
}
// 新增 CRM 商机

View File

@ -69,12 +69,7 @@ export default defineComponent({
{size.value ? (
<SizeDropdown class="custom-hover" color="var(--top-header-text-color)"></SizeDropdown>
) : undefined}
{locale.value ? (
<LocaleDropdown
class="custom-hover"
color="var(--top-header-text-color)"
></LocaleDropdown>
) : undefined}
{message.value ? (
<Message class="custom-hover" color="var(--top-header-text-color)"></Message>
) : undefined}

View File

@ -159,6 +159,7 @@
clearable
style="width: 100%"
multiple
filterable
placeholder="请选择抄送人"
>
<el-option
@ -212,7 +213,7 @@
label-width="100px"
>
<el-form-item label="新审批人" prop="assigneeUserId">
<el-select v-model="transferForm.assigneeUserId" clearable style="width: 100%">
<el-select filterable v-model="transferForm.assigneeUserId" clearable style="width: 100%">
<el-option
v-for="item in userOptions"
:key="item.id"
@ -264,7 +265,7 @@
label-width="100px"
>
<el-form-item label="接收人" prop="delegateUserId">
<el-select v-model="delegateForm.delegateUserId" clearable style="width: 100%">
<el-select filterable v-model="delegateForm.delegateUserId" clearable style="width: 100%">
<el-option
v-for="item in userOptions"
:key="item.id"
@ -316,7 +317,7 @@
label-width="100px"
>
<el-form-item label="加签处理人" prop="addSignUserIds">
<el-select v-model="addSignForm.addSignUserIds" multiple clearable style="width: 100%">
<el-select filterable v-model="addSignForm.addSignUserIds" multiple clearable style="width: 100%">
<el-option
v-for="item in userOptions"
:key="item.id"
@ -370,7 +371,7 @@
label-width="100px"
>
<el-form-item label="减签人员" prop="deleteSignTaskId">
<el-select v-model="deleteSignForm.deleteSignTaskId" clearable style="width: 100%">
<el-select filterable v-model="deleteSignForm.deleteSignTaskId" clearable style="width: 100%">
<el-option
v-for="item in runningTask.children"
:key="item.id"

View File

@ -11,7 +11,7 @@
<el-col :span="8">
<el-form-item label="客户名称" prop="customerId">
<SelectComponent :customerList="customerList" @change="changeCustomer" :disabled="formData.customerDefault || type || route.query.bizId" v-model="formData.customerId" />
<SelectComponent :customerList="customerList" @change="changeCustomer" :disabled="formData.customerDefault || type || route.query.bizId || formType" v-model="formData.customerId" />
<!-- <el-select
:disabled="formData.customerDefault || type"
v-model="formData.customerId"
@ -163,7 +163,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="账期" prop="paymentTerm">
<el-select v-model="formData.paymentTerm" :disabled="type" clearable placeholder="请选择账期">
<el-select v-model="formData.paymentTerm" filterable :disabled="type" clearable placeholder="请选择账期">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.PAYMENT_TERM)"
:key="dict.value"
@ -392,7 +392,6 @@ watch(
let totalOfflinePrice = 0;
for (const product of newProducts) {
console.log('%csrc/views/crm/business/BusinessForm.vue:381 22222', 'color: #007acc;', product,22222);
if (typeof product.onlinePrice) {
totalOnlinePrice += Number(product.onlinePrice);
}
@ -529,7 +528,6 @@ const changeDifficult = (val) => {
const route = useRoute();
onMounted(async () => {
console.log('%csrc/views/crm/business/BusinessForm.vue:516 getIntDictOptions(DICT_TYPE.CRM_PRODUCT_CATEGORY)', 'color: #007acc;', getIntDictOptions(DICT_TYPE.CRM_PRODUCT_CATEGORY));
const customerId = route.query.customerId;
formData.value.customerId = Number(route.query.bizId) || ''
formData.value.clueDeveloper = Number(route.query.clueDeveloper) || ''

View File

@ -165,6 +165,7 @@
<el-button
v-hasPermi="['crm:business:delete']"
link
v-if="scope.row.saleStage != 2"
type="danger"
@click="handleDelete(scope.row.id)"
>
@ -297,7 +298,7 @@ const handleExport = async () => {
/** 初始化 **/
onMounted( async () => {
customerList.value = await CustomerApi.getCustomerSimpleList()
customerList.value = await CustomerApi.getSelfCustomerSimpleList()
getList()
})
onActivated(()=>{

View File

@ -284,7 +284,6 @@ const open = async (type: string, id?: number, customerId?: number, businessId?:
formLoading.value = false
}
} else {
console.log('%csrc/views/crm/contact/ContactForm.vue:229 customerId', 'color: #007acc;', customerId);
if (customerId) {
changeCustomerId(customerId)
formData.value.customerId = customerId
@ -294,7 +293,6 @@ const open = async (type: string, id?: number, customerId?: number, businessId?:
if (businessId) {
formData.value.businessId = businessId
}
console.log('%csrc/views/crm/contact/ContactForm.vue:273 formData.customerId', 'color: #007acc;', formData.value);
}
//
contactList.value = await ContactApi.getSimpleContactList()

View File

@ -315,7 +315,7 @@ const openCustomerDetail = (id: number) => {
/** 初始化 **/
onMounted(async () => {
await getList()
customerList.value = await CustomerApi.getCustomerSimpleList()
customerList.value = await CustomerApi.getSelfCustomerSimpleList()
})
onActivated(()=>{
getList()

View File

@ -359,7 +359,7 @@ if(contractFormRef.value) {
//
formLoading.value = true
try {
const data = unref(JSON.parse(JSON.stringify(formData.value))) as unknown as ContractApi.ContractVO
let data = unref(JSON.parse(JSON.stringify(formData.value))) as unknown as ContractApi.ContractVO
//
let proChangeObj = {
1: limitFormRef,
@ -369,8 +369,20 @@ if(contractFormRef.value) {
5: contractAAuthorizedCompanyFormRef1,
6: contractFormRef
}
let proChangeData = {
1: 'limitFormRef',
2: 'contractAAuthorizedPersons',
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 || formData.value.changeItem == 5) {
data[proChangeData[formData.value.changeItem]] = dataFormList
} else {
data = Object.assign(data, dataFormList)
}
if(formData.value.changeItem == 1) {
data.changeAmount = dataFormList.changeAmount
data.changeAmountDeadline = dataFormList.changeAmountDeadline

View File

@ -329,6 +329,30 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="违约金比例(%" prop="penaltyRate">
<el-select v-model="formData.penaltyRate" placeholder="请选择违约金比例">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_PENALTY_RATE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="延期付款利率(%" prop="latePaymentRate">
<el-select v-model="formData.latePaymentRate" placeholder="请选择延期付款利率">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_LATE_PAYMENT_RATE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同签订日期" prop="startTime">
<el-date-picker
@ -361,30 +385,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="违约金比例(%" prop="penaltyRate">
<el-select v-model="formData.penaltyRate" placeholder="请选择违约金比例">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_PENALTY_RATE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="延期付款利率(%" prop="latePaymentRate">
<el-select v-model="formData.latePaymentRate" placeholder="请选择延期付款利率">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_LATE_PAYMENT_RATE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账单日" prop="statementDate">
<el-select v-model="formData.statementDate" disabled placeholder="请选择账单日" >
@ -430,36 +431,7 @@
</el-radio-group>
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" disabled placeholder="请选择售后维护人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="拓展人" prop="clueDeveloper">
<el-select
class="w-1/1"
placeholder="请选择拓展人"
disabled
v-model="formData.clueDeveloper"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="服务对接人" prop="servicor">
<el-select
@ -511,6 +483,36 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" disabled placeholder="请选择售后维护人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="拓展人" prop="clueDeveloper">
<el-select
class="w-1/1"
placeholder="请选择拓展人"
disabled
v-model="formData.clueDeveloper"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" placeholder="请选择售后维护人">
@ -561,13 +563,13 @@
/>
</ContentWrap>
<ContentWrap style="border: none;font-weight:700">
合同甲方关联单位
<span style="color: #f56c6c">*</span> 合同甲方关联单位
</ContentWrap>
<ContentWrap>
<ContractAAuthorizedCompanyForm :formFields="formFields" ref="contractAAuthorizedCompanyFormRef" :data="formData.contractAAuthorizedCompanys" :contract-id="formData.id" :customerId="formData.customerId" />
</ContentWrap>
<ContentWrap style="border: none;font-weight:700">
合同甲方授权人信息
<span style="color: #f56c6c">*</span> 合同甲方授权人信息
</ContentWrap>
<ContentWrap>
<ContractAAuthorizedPersonForm :formFields="formFields" ref="contractAAuthorizedPersonFormRef" :contract-id="formData.id" :customerId="formData.customerId" />

View File

@ -13,10 +13,10 @@
<el-date-picker
v-model="formData.terminationDate"
type="date"
:disabled="formFields.changeAmount !== 2 || isTrue"
:disabled="formFields.terminationDate !== 2 || isTrue"
value-format="x"
placeholder="请选择终止日期"
style="width: 100%"
placeholder="请选择终止日期"
/>
</el-form-item>
</el-col>
@ -24,7 +24,7 @@
<template #terminationReason>
<el-col :span="16">
<el-form-item label="终止原因" prop="terminationReason">
<el-radio-group v-model="formData.terminationReason" :disabled="formFields.changeAmount !== 2 || isTrue">
<el-radio-group v-model="formData.terminationReason" :disabled="formFields.terminationReason !== 2 || isTrue">
<el-radio :label="1">合同到期</el-radio>
<el-radio :label="2">甲方违反协议</el-radio>
<el-radio :label="3">乙方不可抗力</el-radio>
@ -35,7 +35,7 @@
<template #note>
<el-col :span="24">
<el-form-item label="终止说明" prop="note">
<el-input v-model="formData.note" :disabled="formFields.changeAmount !== 2 || isTrue" type="textarea" :row="5" placeholder="必须确保账款已全部回收" />
<el-input v-model="formData.note" :disabled="formFields.note !== 2 || isTrue" type="textarea" :row="5" placeholder="必须确保账款已全部回收" />
</el-form-item>
</el-col>
</template>
@ -61,6 +61,7 @@ const props = defineProps<{
formFields: {},
isTrue: false
}>()
const { t } = useI18n() //
const message = useMessage() //
const customerList = ref([]) //
@ -87,6 +88,20 @@ const formRules = reactive({
terminationReason: [{ required: true, message: '终止原因不能为空', trigger: 'change' }],
terminationDate: [{ required: true, message: '终止日期不能为空', trigger: 'blur' }],
})
watch(
() => props.formFields,
(val) => {
console.log('%csrc/views/crm/contract/components/ContracStop.vue:95 formFields', 'color: #007acc;', props.formFields.terminationDate, props.isTrue);
// if (!val) {
// return
// }
// const totalPrice = val.products.reduce((prev, curr) => prev + curr.totalPrice, 0)
//
// formData.value.totalPrice = totalPrice
},
{ deep: true, immediate: true }
)
const formRef = ref() // Ref
/** 子表的表单 */
@ -165,7 +180,7 @@ const open = async (type: string) => {
/** 表单校验 */
const validate = () => {
return formRef.value.validate()
return formRef.value.innerFormRef.validate()
}
/** 表单值 */

View File

@ -69,7 +69,7 @@
<template #changeItem>
<el-col :span="24">
<el-form-item label="变更项目" prop="changeItem">
<el-radio-group v-model="formData.changeItem" :disabled="formFields.contractAgreement !== 2 || isTrue" >
<el-radio-group v-model="formData.changeItem" :disabled="formFields.changeItem !== 2 || isTrue">
<el-radio :value="1">额度</el-radio>
<el-radio :value="2">授权人</el-radio>
<el-radio :value="3">延期</el-radio>
@ -82,13 +82,11 @@
</template>
<template #other>
<!-- 子表的表单 -->
<ContentWrap>
<ContractChangeLimit
v-if="formData.changeItem == 1"
ref="limitFormRef"
:formFields="formFields"
:data="formData"
:disabled="true"
/>
<div v-if="formData.changeItem == 2">
<ContentWrap style="border: none">
@ -105,11 +103,12 @@
</ContentWrap>
<ContractBAuthorizedPersonForm :formFields="formFields" :type="1" ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
</div>
<ContracExtension ref="contractExtensionFormRef" :isTrue="isTrue" :formFields="formFields" v-if="formData.changeItem == 3" :disabled="true" :data="formData" />
<ContractStop ref="contractStopFormRef" :isTrue="isTrue" :formFields="formFields" :formData="formData" :disabled="true" v-if="formData.changeItem == 4" />
<ContracExtension ref="contractExtensionFormRef" :isTrue="isTrue" :formFields="formFields" v-if="formData.changeItem == 3" :data="formData" />
<el-col :span="24">
<ContractStop ref="contractStopFormRef" :isTrue="false" :formFields="formFields" :formData="formData" v-if="formData.changeItem == 4" />
</el-col>
<ContractAAuthorizedCompanyForm :formFields="formFields" ref="contractAAuthorizedCompanyFormRef1" :type="true" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
<ContractForm ref="contractFormRef" :type="1" :id="formData.id" v-if="formData.changeItem == 6" />
</ContentWrap>
</template>
</processForm>
@ -210,6 +209,12 @@ const formFields = ref({
contractBAuthorizedPersonswechat: 1,
contractBAuthorizedPersonsemail: 1,
contractBAuthorizedPersonsother2: 1,
agreementDeadline: 1,
extensionYears: 1,
extensionDate: 1,
terminationDate: 1,
terminationReason: 1,
note: 1
})
const formData = ref({
authPerson: [],
@ -564,6 +569,8 @@ const getLimit = async () => {
})
}
}
console.log('%csrc/views/crm/contract/detail/ContractChangeDetail.vue:574 object', 'color: #007acc;', formFields.value,555);
}
onMounted(async () => {

View File

@ -397,6 +397,42 @@
</el-form-item>
</el-col>
</template>
<template #penaltyRate>
<el-col :span="8">
<el-form-item label="违约金比例" prop="penaltyRate">
<el-select v-model="formData.penaltyRate" placeholder="" :disabled="formFields.penaltyRate !== 2 || isTrue">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_PENALTY_RATE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #latePaymentRate>
<el-col :span="8">
<el-form-item label="延期付款利率" prop="latePaymentRate">
<el-select v-model="formData.latePaymentRate" placeholder="请选择延期付款利率" :disabled="formFields.latePaymentRate !== 2 || isTrue">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTRACT_LATE_PAYMENT_RATE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-input v-model="formData.invoiceTemplateId" placeholder="请输入票据模板" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row> -->
</template>
<template #startTime>
<el-col :span="8">
<el-form-item label="合同签订日期" prop="startTime">
@ -461,28 +497,7 @@
</el-form-item>
</el-col>
</template>
<template #penaltyRate>
<el-col :span="8">
<el-form-item label="违约金比例" prop="penaltyRate">
<el-input v-model="formData.penaltyRate" :disabled="formFields.penaltyRate !== 2 || isTrue" placeholder="" />
</el-form-item>
</el-col>
</template>
<template #latePaymentRate>
<el-col :span="8">
<el-form-item label="延期付款利率" prop="latePaymentRate">
<el-input v-model="formData.latePaymentRate" :disabled="formFields.latePaymentRate !== 2 || isTrue" placeholder="" />
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-input v-model="formData.invoiceTemplateId" placeholder="请输入票据模板" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row> -->
</template>
<template #other4>
<el-col :span="24">
<ContentWrap style="border: none;font-weight: 700">
@ -500,40 +515,7 @@
</el-form-item>
</el-col>
</template> -->
<template #afterSaleUserId>
<el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" :disabled="formFields.afterSaleUserId !== 2 || isTrue" placeholder="">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #expanderUserId>
<el-col :span="8">
<el-form-item label="拓展人" prop="expanderUserId">
<el-select
class="w-1/1"
placeholder="请选择拓展人"
v-model="formData.expanderUserId"
:disabled="formFields.expanderUserId !== 2 || isTrue"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #servicor>
<el-col :span="8">
<el-form-item label="服务对接人" prop="servicor">
@ -594,6 +576,40 @@
</el-form-item>
</el-col>
</template>
<template #afterSaleUserId>
<el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" :disabled="formFields.afterSaleUserId !== 2 || isTrue" placeholder="">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #expanderUserId>
<el-col :span="8">
<el-form-item label="拓展人" prop="expanderUserId">
<el-select
class="w-1/1"
placeholder="请选择拓展人"
v-model="formData.expanderUserId"
:disabled="formFields.expanderUserId !== 2 || isTrue"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<!-- <template #collUserId>
<el-col :span="8">
<el-form-item label="协作人" prop="collUserId">
@ -734,20 +750,20 @@ const formFields = ref({
deptId: 1,
other3: 1,
contractType: 1,
penaltyRate: 1,
latePaymentRate: 1,
startTime: 1,
contractTerm: 1,
endTime: 1,
statementDate: 1,
lastPayDate: 1,
penaltyRate: 1,
latePaymentRate: 1,
other4: 1,
// settleMethod: 1,
afterSaleUserId: 1,
expanderUserId: 1,
servicor: 1,
technicalLead: 1,
settlementLead: 1,
afterSaleUserId: 1,
expanderUserId: 1,
// collUserId: 1,
// contractBody: 1,
// contractAgreement: 1,
@ -844,7 +860,7 @@ const formRules = reactive({
quotationId: [{ required: true, message: '报价单编号不能为空', trigger: 'blur' }],
orderDate: [{ required: true, message: '下单日期不能为空', trigger: 'blur' }],
// ownerUserId: [{ required: true, message: '', trigger: 'blur' }],
statementDate: [{ required: true, message: '账单日不能为空', trigger: 'change' }],
// statementDate: [{ required: true, message: '', trigger: 'change' }],
contractType: [{ required: true, message: '合同类型不能为空', trigger: 'change' }],
penaltyRate: [{ required: true, message: '违约金比例不能为空', trigger: 'blur' }],
latePaymentRate: [{ required: true, message: '延期付款利率不能为空', trigger: 'blur' }],

View File

@ -31,7 +31,7 @@
</el-form-item>
<el-form-item label="合作类型" prop="partnerType">
<el-select v-model="queryParams.partnerType" clearable placeholder="请选择合作类型">
<el-select v-model="queryParams.partnerType" class="!w-240px" clearable placeholder="请选择合作类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PARTNER_TYPE1)"
:key="dict.value"
@ -558,7 +558,7 @@ const openBusinessDetail = (id: number) => {
/** 初始化 **/
onMounted(async () => {
await getList()
customerList.value = await CustomerApi.getCustomerSimpleList()
customerList.value = await CustomerApi.getSelfCustomerSimpleList()
})
onActivated(()=>{
getList()

View File

@ -207,7 +207,7 @@
<template #partnerCompanyId>
<el-col :span="8">
<el-form-item label="合作类型" prop="partnerType">
<el-select v-model="formData.partnerType" clearable disabled placeholder="请选择合作类型">
<el-select v-model="formData.partnerType" filterable clearable :disabled="formFields.partnerType !== 2 || isTrue" placeholder="请选择合作类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PARTNER_TYPE1)"
:key="dict.value"
@ -219,7 +219,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" clearable disabled @change="onPartnerChange">
<el-select v-model="formData.partnerCompanyId" filterable clearable :disabled="formFields.partnerCompanyId !== 2 || isTrue" @change="onPartnerChange">
<el-option
v-for="dict in orgList"
:key="dict.id"
@ -311,6 +311,20 @@
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #maintainer>
<el-col :span="8">
<el-form-item label="维护人" prop="maintainer">
<el-select v-model="formData.maintainer" disabled placeholder="">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #pricingUserId>
@ -411,6 +425,26 @@
</el-form-item>
</el-col>
</template> -->
<template #onlinePrice>
<el-col :span="8">
<el-form-item label="基础服务费合计" prop="onlinePrice">
<el-input
disabled
v-model="formData.onlinePrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="线下总金额" prop="offlinePrice">
<el-input
disabled
v-model="formData.offlinePrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col> -->
</template>
<template #quotationTimes>
<el-col :span="8">
<el-form-item label="第几次报价" prop="quotationTimes">
@ -418,6 +452,36 @@
</el-form-item>
</el-col>
</template>
<template #statementDate>
<el-col :span="8">
<el-form-item label="账单日" prop="statementDate">
<el-select filterable v-model="formData.statementDate" :disabled="formFields.statementDate !== 2 || isTrue" placeholder="请选择账单日" >
<el-option
v-for="(dict, index) in statement"
:key="index"
:label="index + 1"
:value="index + 1"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #lastPayDate>
<el-col :span="8">
<el-form-item label="最晚付款日" prop="lastPayDate">
<el-select filterable v-model="formData.lastPayDate" :disabled="formFields.lastPayDate !== 2 || isTrue" placeholder="请选择最晚付款日" >
<el-option
v-for="(dict, index) in statement"
:key="index"
:label="index + 1"
:value="index + 1"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<!-- <template #creditLimit1>
<el-col :span="8">
<el-form-item label="授信额度" prop="creditLimit">
@ -440,26 +504,46 @@
</el-form-item>
</el-col>
</template> -->
<template #onlinePrice>
<el-col :span="8">
<el-form-item label="基础服务费合计" prop="onlinePrice">
<el-input
disabled
v-model="formData.onlinePrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
<template #other2>
<el-col :span="24">
<ContentWrap style="border: none; font-weight: 700">服务费收取方式</ContentWrap>
</el-col>
<!-- <el-col :span="8">
<el-form-item label="线下总金额" prop="offlinePrice">
<el-input
disabled
v-model="formData.offlinePrice"
:formatter="erpPriceInputFormatter"
/>
</el-form-item>
</el-col> -->
</template>
<template #serviceFeeCollectionMethodId>
<el-col :span="8">
<el-form-item label="服务费收取方式" prop="serviceFeeCollectionMethodId">
<el-select v-model="formData.serviceFeeCollectionMethodId" filterable :disabled="formFields.lastPayDate !== 2 || isTrue" placeholder="请选择服务费收取方式">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_SERVICE_FEE_COLLECTION_METHOD)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #insuranceId>
<el-col :span="8" v-if="formData.serviceFeeCollectionMethodId == 3">
<el-form-item label="保险类型" prop="insuranceId">
<el-select v-model="formData.insuranceId" :disabled="formFields.lastPayDate !== 2 || isTrue" placeholder="请选择保险类型">
<el-option
v-for="dict in insuranceList"
:key="dict.id"
:label="dict.productDetail"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #other3>
<el-col :span="8" class="toop">
{{remark}}
</el-col>
</template>
<!-- <template #totalPrice>
<el-col :span="8">
<el-form-item label="服务费收入合计" prop="totalPrice">
@ -512,6 +596,7 @@ import RevenueAnalysis from './components/RevenueAnalysis.vue'
/** CRM 方案报价 表单 */
defineOptions({ name: 'QuotationForm' })
const remark = ref('')
const serverMethodList = ref([])
const { t } = useI18n() //
const message = useMessage() //
@ -545,6 +630,12 @@ const print=ref({
clickMounted() { console.log('点击v-print绑定的按钮了') },
})
const serviceDesc = ref({
1:'按单项产品的订单量(机票/张,酒店/间夜,火车票/张、用车/单)分别收取服务费',
2: '按订单总金额乘以比例收取服务费用',
3: ''
})
const insuranceList = ref([])
const isTrue = ref(false)
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
@ -579,17 +670,20 @@ const formFields = ref({ //字段显示隐藏权限控制,字段顺序就是显
deptId: 1,
ownerUserId: 1,
clueDeveloper: 1,
maintainer: 1,
pricingUserId: 1,
paymentTerm: 1,
creditMethod: 1,
creditCalcCycle: 1,
invoiceTemplateId: 1,
quotationTimes: 1,
creditLimit1: 1,
serviceFeeCollectionMethodId: 1,
onlinePrice: 1,
quotationTimes: 1,
statementDate: 1,
lastPayDate: 1,
other2: 1,
serviceFeeCollectionMethodId: 1,
insuranceId: 1,
other3: 1,
totalPrice: 1,
productsother: 1,
productscategory: 1,
@ -744,6 +838,21 @@ const onCustomerChange = async (customerId: string) => {
}
}
const changeInsuranceId = (val) => {
let arr = insuranceList.value.filter(v => v.id === val)
remark.value = (arr.length && arr[0]['describes']) ? '注:' + arr[0]['describes'] : ''
}
const changeQuotation = (val) => {
if(serviceDesc.value[val]) {
remark.value = '注:' + serviceDesc.value[val]
} else {
remark.value = ''
}
// formData.value.insuranceId = ''
}
const onPartnerChange = async (id: string) => {
if (!id) return
try {
@ -820,6 +929,11 @@ const open = async (type: string) => {
formData.value.offlinePrice = (totalOfflinePrice + totalOnlinePrice).toFixed(2)
// let all = totalOnlinePrice + totalOfflinePrice + totalOnlinePrice
// formData.value.totalPrice = all.toFixed(2)
if(formData.value.insuranceId) {
changeInsuranceId(formData.value.insuranceId)
} else {
changeQuotation(formData.value.serviceFeeCollectionMethodId)
}
formData.value.creditLimit = ((formData.value.creditAmount || 0) + (formData.value.creditLimitNum || 0)).toFixed(2)
} finally {
formLoading.value = false
@ -952,8 +1066,10 @@ onMounted(async () => {
//
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
//
let serverList = await QuotationApi.getServerMethodList({pageNo: 1, pageSize: 1000})
serverMethodList.value = serverList.list
// let serverList = await QuotationApi.getServerMethodList({pageNo: 1, pageSize: 1000})
// serverMethodList.value = serverList.list
//
insuranceList.value = await QuotationApi.getInsuranceList()
const org = await ContractApi.getOrg({
pageNo: 1,
pageSize: 1000
@ -962,7 +1078,13 @@ onMounted(async () => {
});
</script>
<style>
<style scoped>
.toop {
line-height: 32px;
font-size: 12px;
font-weight: 500;
padding-left: 10px;
}
@media print {
body, html {
width: 100%;

View File

@ -12,7 +12,7 @@
<el-col :span="8">
<el-form-item label="选择商机" prop="businessId">
<el-select v-model="formData.businessId" clearable placeholder="请选择商机" @change="onBusinessChange">
<el-select v-model="formData.businessId" filterable clearable placeholder="请选择商机" @change="onBusinessChange">
<el-option
v-for="dict in businessList"
:key="dict.id"
@ -166,7 +166,7 @@
<el-row>
<el-col :span="8">
<el-form-item label="合作类型" prop="partnerType">
<el-select v-model="formData.partnerType" @change="changePartnerType" clearable placeholder="请选择合作类型">
<el-select v-model="formData.partnerType" filterable @change="changePartnerType" clearable placeholder="请选择合作类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PARTNER_TYPE1)"
:key="dict.value"
@ -178,7 +178,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" clearable placeholder="请选择合作主体" @change="onPartnerChange">
<el-select v-model="formData.partnerCompanyId" filterable clearable placeholder="请选择合作主体" @change="onPartnerChange">
<el-option
v-for="dict in orgList"
:key="dict.id"
@ -368,7 +368,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="账单日" prop="statementDate">
<el-select v-model="formData.statementDate" placeholder="请选择账单日" >
<el-select v-model="formData.statementDate" filterable placeholder="请选择账单日" >
<el-option
v-for="(dict, index) in statement"
:key="index"
@ -380,7 +380,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="最晚付款日" prop="lastPayDate">
<el-select v-model="formData.lastPayDate" placeholder="请选择最晚付款日" >
<el-select v-model="formData.lastPayDate" filterable placeholder="请选择最晚付款日" >
<el-option
v-for="(dict, index) in statement"
:key="index"
@ -408,7 +408,7 @@
<el-col :span="8">
<el-form-item label="服务费收取方式" prop="serviceFeeCollectionMethodId">
<el-select v-model="formData.serviceFeeCollectionMethodId" @change="changeQuotation" placeholder="请选择服务费收取方式">
<el-select v-model="formData.serviceFeeCollectionMethodId" filterable @change="changeQuotation" placeholder="请选择服务费收取方式">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_SERVICE_FEE_COLLECTION_METHOD)"
:key="dict.value"
@ -454,7 +454,6 @@
</el-form-item>
</el-col> -->
</el-form>
<!-- 子表的表单 -->
<el-tabs v-model="subTabsName" @tab-Click="handleClick">
<el-tab-pane label="报价产品关联" name="quotationProduct">
@ -468,6 +467,8 @@
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="goBack"> </el-button>
</div>
</el-form>
</ContentWrap>
</template>
<script setup lang="ts">
@ -706,7 +707,6 @@ const changeQuotation = (val) => {
}
const changeQuotationTimes = async(val) => {
console.log('%csrc/views/crm/quotation/QuotationForm.vue:671 3333', 'color: #007acc;', 3333);
if(formData.value.serviceFeeCollectionMethodId && formData.value.businessId) {
newProducts.value = []
formData.value.products.forEach( item => {
@ -730,7 +730,6 @@ const changeQuotationTimes = async(val) => {
num.quotationProducts.forEach( v => {
v.productUnit = v.serviceFeeVO.unit
})
console.log('%csrc/views/crm/quotation/QuotationForm.vue:695 num.', 'color: #007acc;', num.quotationProducts);
formData.value.QuotationTimes = num.quotationProducts
}
}
@ -857,7 +856,6 @@ const onPartnerChange = async (id: string) => {
}
}
const getQutotaionTimes = async (val) => {
console.log('%csrc/views/crm/quotation/QuotationForm.vue:692 val', 'color: #007acc;', val);
formData.value.quotationTimes = await QuotationApi.getQutoTimes({customerId: val})
}
@ -876,6 +874,12 @@ const open = async (type: string) => {
formData.value.serviceFeeCollectionMethodId = Number(formData.value.serviceFeeCollectionMethodId)
if(formData.value.partnerType) changePartnerType(formData.value.partnerType)
if(formData.value.insuranceId) {
changeInsuranceId(formData.value.insuranceId)
} else {
changeQuotation(formData.value.serviceFeeCollectionMethodId)
}
} finally {
formLoading.value = false
}
@ -924,7 +928,6 @@ const submitForm = async () => {
const changeTemplate = async() => {
handleType.value = 1
console.log('%csrc/views/crm/quotation/QuotationForm.vue:631 handleType.value,222', 'color: #007acc;', handleType.value,222);
}
const goBack = ()=> {
@ -983,7 +986,6 @@ const changePartnerType = async (val) => {
const route = useRoute();
onMounted(async () => {
console.log('%csrc/views/crm/quotation/QuotationForm.vue:931 useUserStore().getUser', 'color: #007acc;', useUserStore().getUser);
formType.value = props.id || route.query.id;
if (formType.value) open(formType.value)
@ -1002,7 +1004,7 @@ onMounted(async () => {
pageSize: 1000,
})
templateOptions.value = data.list
businessList.value = await BusinessApi.getSelfSimpleBusinessList()
businessList.value = await BusinessApi.getSelfSimpleBusinessList({query: true})
//
deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
//

View File

@ -281,9 +281,7 @@ watch(
data.billSortingServiceFee = ''
data.totalServiceFee = ''
}
console.log('%csrc/views/crm/quotation/components/QuotationProductForm.vue:289 formData.value,data', 'color: #007acc;', formData.value,data);
let foundItem = formData.value.find(item => item.productId == data.id);
console.log('%csrc/views/crm/quotation/components/QuotationProductForm.vue:290 foundItem', 'color: #007acc;', foundItem);
if (foundItem) {
foundItem.basicServiceFee = data.serviceFeeVO.basicServiceFee
foundItem.advancePaymentServiceFee = data.serviceFeeVO.advancePaymentServiceFee

View File

@ -508,7 +508,7 @@ const openCustomerDetail = (id: number) => {
/** 初始化 **/
onMounted(async () => {
//
customerList.value = await CustomerApi.getCustomerSimpleList()
customerList.value = await CustomerApi.getSelfCustomerSimpleList()
//
userOptions.value = await UserApi.getSimpleUserList()
getList()