修改问题

pull/781/head
zy 2025-05-26 17:26:50 +08:00
parent 5b3accf2d7
commit 97e3647a49
14 changed files with 414 additions and 42 deletions

View File

@ -160,6 +160,11 @@ export const printContract = async (id: number) => {
})
}
// 合同上传
export const contractUpload = async (data: TransferReqVO) => {
return await request.put({ url: '/crm/contract/updateFileUrl', data })
}
// ==================== 子表CRM 合同产品关联) ====================

View File

@ -509,7 +509,7 @@ const resetForm = () => {
const changeCustomer = async (val) => {
const customerRes = await CustomerApi.getCustomer(val);
formData.value.clueDeveloper = customerRes.clueDeveloper
formData.value.maintenanceUserId = customerRes.maintainer
formData.value.maintainer = customerRes.maintainer
}
const changeCheck = (val) => {
@ -532,7 +532,7 @@ console.log('%csrc/views/crm/business/BusinessForm.vue:516 getIntDictOptions(DIC
const customerId = route.query.customerId;
formData.value.customerId = Number(route.query.bizId) || ''
formData.value.clueDeveloper = Number(route.query.clueDeveloper) || ''
formData.value.maintenanceUserId = Number(route.query.maintenanceUserId) || ''
formData.value.maintainer = Number(route.query.maintainer) || ''
formData.value.requestorUserId = customerId ? '' : useUserStore().getUser.id;
formType.value = route.query.id || route.params.id;

View File

@ -75,7 +75,7 @@ const props = defineProps<{
customerId?: number // customerId
contactId?: number //
clueDeveloper: number
maintenanceUserId: number
maintainer: number
}>()
const loading = ref(true) //
@ -119,7 +119,6 @@ defineExpose({ getList })
const getData = (val,data) => {
list.value = data
console.log('%csrc/views/crm/business/components/BusinessList.vue:118 val', 'color: #007acc;', val, data.value);
}
/** 搜索按钮操作 */
@ -132,13 +131,12 @@ const handleQuery = () => {
const { push } = useRouter()
const formRef = ref()
const openForm = () => {
console.log('%csrc/views/crm/business/components/BusinessList.vue:135 props', 'color: green;', props);
push({
name: 'CrmBusinessAdd',
query: {
bizId: props.bizId,
clueDeveloper: props.clueDeveloper,
maintenanceUserId: props.maintenanceUserId
maintainer: props.maintainer
}
})
}

View File

@ -51,27 +51,32 @@
</el-col>
<el-col :span="12">
<el-form-item label="计算周期" prop="creditCalcCycle">
<el-input v-model="formData.creditCalcCycle" placeholder="请输入计算周期" />
<el-input v-model="formData.creditCalcCycle" oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入计算周期" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出票周期" prop="ticketIssuanceCycle">
<el-input v-model="formData.ticketIssuanceCycle" placeholder="请输入出票周期" />
<el-input v-model="formData.ticketIssuanceCycle" oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入出票周期" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结算周期" prop="settlementCycle">
<el-input v-model="formData.settlementCycle" placeholder="请输入结算周期" />
<el-input v-model="formData.settlementCycle" oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入结算周期" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="使用天数" prop="usageDays">
<el-input v-model="formData.usageDays" placeholder="请输入使用天数" />
<el-input v-model="formData.usageDays" oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入使用天数" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年利率%" prop="annualInterestRate">
<el-input v-model="formData.annualInterestRate" placeholder="请输入年利率" />
<el-form-item label="年利率" prop="annualInterestRate">
<el-input v-model="formData.annualInterestRate" oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入年利率" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="比例收费" prop="proportionalFee">
<el-input v-model="formData.proportionalFee" oninput = "value=value.match(/^\d+(?:\.\d{0,4})?/)" placeholder="请输入比例收费" />
</el-form-item>
</el-col>
<el-col :span="24">

View File

@ -1,7 +1,7 @@
<template>
<!-- 操作栏 -->
<el-row justify="end">
<el-button @click="openForm" type="primary">
<el-button @click="openForm('create')" type="primary">
<Icon class="mr-5px" icon="system-uicons:contacts" />
创建联系人
</el-button>
@ -41,13 +41,40 @@
</template>
</el-table-column>
<el-table-column align="center" label="手机号" prop="mobile" />
<el-table-column align="center" label="邮箱" prop="email" width="180" />
<el-table-column align="center" label="职位" prop="post" />
<el-table-column align="center" label="性别" prop="sex">
<template #default="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.sex" />
</template>
</el-table-column>
<el-table-column align="center" label="生日" prop="birthday" width="120" />
<!-- <el-table-column align="center" label="直属上级" prop="parentName" />-->
<el-table-column align="center" label="角色" min-width="100" prop="contactRoleType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_CONTACT_ROLE_TYPE" :value="scope.row.contactRoleType" />
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="200">
<template #default="scope">
<el-button
v-hasPermi="['crm:contact:update']"
link
type="primary"
@click="openForm('update', scope.row.id)"
>
编辑
</el-button>
<el-button
v-hasPermi="['crm:contact:delete']"
link
type="danger"
@click="handleDelete(scope.row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
@ -76,6 +103,7 @@ import { BizTypeEnum } from '@/api/crm/permission'
import ContactListModal from './ContactListModal.vue'
defineOptions({ name: 'CrmContactList' })
const { t } = useI18n() //
const props = defineProps<{
bizType: number //
bizId: number //
@ -130,8 +158,8 @@ const handleQuery = () => {
/** 添加操作 */
const formRef = ref()
const openForm = () => {
formRef.value.open('create', undefined, props.bizId, props.businessId)
const openForm = (type, val?: number) => {
formRef.value.open(type, val, props.bizId, props.businessId)
}
/** 打开联系人详情 */
@ -159,6 +187,19 @@ const createContactBusinessList = async (contactIds: number[]) => {
handleQuery()
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ContactApi.deleteContact(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 解除联系人与商机的关联 */
const contactRef = ref()
const deleteContactBusinessList = async () => {

View File

@ -103,7 +103,7 @@
</el-link>
</template>
</el-table-column>
<el-table-column align="center" fixed="left" label="客户名称" prop="customerName" width="280">
<el-table-column align="center" label="客户名称" prop="customerName" width="280">
<!-- <template #default="scope">
<el-link
:underline="false"
@ -115,7 +115,7 @@
</template> -->
</el-table-column>
<el-table-column align="center" label="手机" prop="mobile" width="120" />
<el-table-column align="center" label="电话" prop="telephone" width="130" />
<!-- <el-table-column align="center" label="电话" prop="telephone" width="130" /> -->
<el-table-column align="center" label="邮箱" prop="email" width="180" />
<el-table-column align="center" label="职位" prop="post" width="120" />
<el-table-column align="center" label="家庭地址" prop="detailAddress" width="120" />
@ -144,6 +144,7 @@
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.sex" />
</template>
</el-table-column>
<el-table-column align="center" label="生日" prop="birthday" width="120" />
<el-table-column align="center" label="备注" prop="remark" />
<el-table-column
:formatter="dateFormatter"

View File

@ -196,7 +196,6 @@ const handleAdd = () => {
}
const getList = (val: []) => {
console.log('%csrc/views/crm/contract/components/ContractAAuthorizedPersonForm.vue:182 val', 'color: #007acc;', val);
for(let i = val.length - 1; i >= 0; i--) {
let obj = val[i]
if(formData.value.some(v => v.customerContactId === obj.id)) val.splice(i, 1)

View File

@ -0,0 +1,86 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="50%">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="144px"
v-loading="formLoading"
>
<el-row>
<el-col :span="24">
<el-form-item label="上传文件" prop="contractFileUrl">
<UploadFile v-model="formData.contractFileUrl" :limit="1" />
<!-- <el-input v-model="formData.businessLicense" placeholder="请输入营业执照文件路径" /> -->
</el-form-item>
</el-col>
</el-row>
</el-form>
<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 { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
/** 组织机构 表单 */
defineOptions({ name: 'OrganizationsForm' })
import * as ContractApi from '@/api/crm/contract'
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
contractFileUrl: undefined
})
const formRules = reactive({
contractFileUrl: [{ required: true, message: '文件上传不能为空', trigger: 'change' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('上传文件')
formType.value = id
resetForm()
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as OrganizationsVO
data.customerId = formType.value
await ContractApi.contractUpload(data)
message.success(t('common.createSuccess'))
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
contractFileUrl: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -305,6 +305,7 @@
/>
<FileTemplateForm ref="formRef" @success="onPrintContract" />
<ContractUpload ref="uploadFormRef" @success="getList" />
</ContentWrap>
</template>
@ -312,6 +313,7 @@
import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
import download from '@/utils/download'
import FileTemplateForm from './templateForm.vue'
import ContractUpload from './contractUpload.vue'
import * as ContractApi from '@/api/crm/contract'
import { DICT_TYPE } from '@/utils/dict'
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
@ -325,6 +327,7 @@ defineOptions({ name: 'CrmContract' })
const message = useMessage() //
const { t } = useI18n() //
const uploadFormRef = ref('')
const loading = ref(true) //
const total = ref(0) //
const list = ref([]) //
@ -460,7 +463,7 @@ const getPrintTemplate = (row) => {
}
const handleUpload = (val) => {
uploadFormRef.value.open(val)
}
//

View File

@ -0,0 +1,233 @@
<template>
<!-- 操作栏 -->
<el-row justify="end">
<el-button @click="handleAdd" type="primary">
<Icon class="mr-5px" icon="system-uicons:contacts" />
创建授权人
</el-button>
</el-row>
<ContentWrap class="mt-10px">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
v-loading="formLoading"
label-width="0px"
:inline-message="true"
>
<el-table v-loading="loading" :data="formData" class="-mt-10px">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="授权人姓名" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.customerName`" :rules="formRules.customerName" class="mb-0px!" v-if="!type">
<el-input v-model="row.customerName" placeholder="请输入授权人姓名" />
</el-form-item>
<div v-else>
{{row.customerName}}
</div>
</template>
</el-table-column>
<!-- <el-table-column label="姓名" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.customerName`" :rules="formRules.customerName" class="mb-0px!">
<el-input v-model="row.customerName" placeholder="请输入姓名" />
</el-form-item>
</template>
</el-table-column> -->
<el-table-column label="授权人类型" min-width="150" prop="authPersonType">
<template #default="{ row }">
<!-- <el-form-item :prop="`${$index}.authPersonType`" :rules="formRules.authPersonType" class="mb-0px!" v-if="!type">
<el-select v-model="row.authPersonType" placeholder="请选择授权人类型">
<el-option
v-for="dict in getIntDictOptions('auth_person_type')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> -->
<!-- </el-form-item> -->
<!-- <div v-else>
</div> -->
{{getName(getIntDictOptions(DICT_TYPE.CRM_CONTACT_ROLE_TYPE), row.authPersonType)}}
</template>
</el-table-column>
<el-table-column label="授权人手机号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.phoneNumber`" :rules="formRules.phoneNumber" class="mb-0px!" v-if="!type">
<el-input v-model="row.phoneNumber" placeholder="请输入手机号" />
</el-form-item>
<div v-else>
{{row.phoneNumber}}
</div>
</template>
</el-table-column>
<el-table-column label="微信号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.wechat`" :rules="formRules.wechat" class="mb-0px!" v-if="!type">
<el-input v-model="row.wechat" placeholder="请输入微信号" />
</el-form-item>
<div v-else>
{{row.wechat}}
</div>
</template>
</el-table-column>
<el-table-column label="身份证号" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.idNumber`" :rules="formRules.idNumber" class="mb-0px!" v-if="!type">
<el-input v-model="row.idNumber" placeholder="请输入身份证号" />
</el-form-item>
<div v-else>
{{row.idNumber}}
</div>
</template>
</el-table-column>
<el-table-column label="电子邮箱" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.email`" :rules="formRules.email" class="mb-0px!" v-if="!type">
<el-input v-model="row.email" placeholder="请输入电子邮箱" />
</el-form-item>
<div v-else>
{{row.email}}
</div>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="60" v-if="!type">
<template #default="{ $index }">
<el-button @click="handleDelete($index)" link></el-button>
</template>
</el-table-column>
</el-table>
</el-form>
<!-- <el-row justify="center" class="mt-3" v-if="!type">
<el-button @click="handleAdd" round>+ 添加</el-button>
</el-row> -->
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<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,
customerId: undefined,
formFields: {}
}>()
const formLoading = ref(false) //
const formData = ref([])
const formRules = reactive({
contractId: [{ required: true, message: '合同ID不能为空', trigger: 'blur' }],
authPersonType: [{ required: true, message: '授权人类型不能为空', trigger: 'blur' }],
customerName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
phoneNumber: [{ required: true, message: '手机号不能为空', trigger: 'blur' } ,
{pattern: /^(1[3-9][0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/, message: '请输入正确手机号'}
],
idNumber: [{ required: true, message: '身份证号不能为空', trigger: 'blur' } ,
{
pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
message: "身份证号格式不正确",
trigger: "blur",
},
],
email: [{ required: true, message: '电子邮箱不能为空', trigger: 'blur' } ,
{
pattern:
/^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})$/,
message: "请输入正确的电子邮箱",
}
]
})
const formRef = ref() // Ref
/** 监听主表的关联字段的变化,加载对应的子表数据 */
watch(
() => props.contractId,
async (val) => {
// 1.
formData.value = []
// 2. val
if (!val) {
return;
}
try {
formLoading.value = true
formData.value = await ContractApi.getContractAAuthorizedPersonListByContractId(val)
} finally {
formLoading.value = false
}
},
{ immediate: true }
)
/** 新增按钮操作 */
// 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 message = useMessage() //
const contactRef = ref() // Ref
const handleAdd = () => {
contactRef.value.open(formData.value, props.customerId)
}
const getList = (val: []) => {
console.log('%csrc/views/crm/contract/components/ContractAAuthorizedPersonForm.vue:182 val', 'color: #007acc;', val);
for(let i = val.length - 1; i >= 0; i--) {
let obj = val[i]
if(formData.value.some(v => v.customerContactId === obj.id)) val.splice(i, 1)
}
val.forEach(item => {
if(!formData.value.some(v => v.customerContactId === item.id)) {
val.forEach(item => {
formData.value.push({
"customerContactId": item.id,
"authPersonType": item.contactRoleType,
"customerName": item.name,
"phoneNumber": item.mobile,
"wechat":item. wechat,
"email":item. email,
})
})
}
})
}
/** 删除按钮操作 */
const handleDelete = (index) => {
formData.value.splice(index, 1)
}
/** 表单校验 */
const validate = () => {
return formRef.value.validate()
}
/** 表单值 */
const getData = () => {
return formData.value
}
defineExpose({ validate, getData })
const getName = (opt, val) => {
const arr = opt.filter(v => v.value == val)
return arr.length ? arr[0]['label'] : ''
}
</script>

View File

@ -26,12 +26,12 @@
>
锁定
</el-button> -->
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleReceive"> </el-button>
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleDistributeForm">
<el-button v-if="!customer.clueDeveloper" @click="handleReceive"> </el-button>
<el-button v-if="!customer.clueDeveloper" @click="handleDistributeForm">
分配
</el-button>
<el-button
v-if="customer.ownerUserId && permissionListRef?.validateOwnerUser && !customer.dealStatus"
v-if="customer.clueDeveloper && !customer.dealStatus"
@click="handlePutPool"
>
放入公海
@ -61,7 +61,7 @@
/>
</el-tab-pane> -->
<el-tab-pane label="商机" lazy name="BusinessListRef">
<BusinessList ref="BusinessListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" :clueDeveloper="customer.clueDeveloper" :maintenanceUserId="customer.maintainer" />
<BusinessList ref="BusinessListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" :clueDeveloper="customer.clueDeveloper" :maintainer="customer.maintainer" />
</el-tab-pane>
<el-tab-pane label="方案报价" lazy name="QuotationListRef">
<QuotationList ref="QuotationListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
@ -69,6 +69,9 @@
<el-tab-pane label="合同" lazy name="ContractListRef">
<ContractList ref="ContractListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
</el-tab-pane>
<el-tab-pane label="授权人" lazy name="AuthorizedPersonFormRef">
<AuthorizedPersonForm ref="AuthorizedPersonFormRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
</el-tab-pane>
<!-- <el-tab-pane label="回访" lazy>
<ReturnVisitrecord :biz-id="customerId" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
</el-tab-pane> -->
@ -112,6 +115,7 @@ import { BizTypeEnum } from '@/api/crm/permission'
import type { OperateLogVO } from '@/api/system/operatelog'
import { getOperateLogPage } from '@/api/crm/operateLog'
import CustomerDistributeForm from '@/views/crm/customer/pool/CustomerDistributeForm.vue'
import AuthorizedPersonForm from '@/views/crm/customer/detail/authorizedPersonForm.vue'
defineOptions({ name: 'CrmCustomerDetail' })

View File

@ -229,6 +229,7 @@
:data="deptTree"
:props="defaultProps"
filterable
disabled
check-strictly
node-key="id"
placeholder="请选择归属部门"
@ -918,6 +919,11 @@ const resetForm = () => {
}
const changePartnerType = async (val) => {
formData.value.partnerCompanyId = ''
formData.value.creditCode = ''
formData.value.bankName = ''
formData.value.bankAccount = ''
formData.value.legalRepresentative = ''
const org = await ContractApi.getOrg({
pageNo: 1,
pageSize: 1000,
@ -928,11 +934,13 @@ 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)
formData.value.pricingUserId = useUserStore().getUser.id;
formData.value.deptId = useUserStore().getUser.deptId;
//

View File

@ -25,25 +25,14 @@
</template>
</el-table-column>
<el-table-column label="产品明细" min-width="220">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.detailType`" :rules="formRules.detailType" class="mb-0px!">
<el-select v-model="row.detailType" placeholder="请选择状态" class="!w-240px">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</template>
<el-table-column label="产品明细" align="center" min-width="220">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE" :value="row.detailType" />
</template>
</el-table-column>
<el-table-column label="产品单位" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productUnit`" :rules="formRules.productUnit" class="mb-0px!">
<el-table-column label="产品单位" align="center" min-width="150">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_UNIT" :value="row.productUnit" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="基础服务费(元)" min-width="160">

View File

@ -51,10 +51,10 @@
/>
</el-select>
</el-form-item>
<el-form-item label="展人" prop="expandingUserId">
<el-form-item label="展人" prop="expandingUserId">
<el-select
v-model="queryParams.expandingUserId"
placeholder="请选择展人"
placeholder="请选择展人"
clearable
class="!w-240px"
>