修改问题
parent
5b3accf2d7
commit
97e3647a49
|
|
@ -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 合同产品关联) ====================
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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 () => {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
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>
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
||||
//盖章合同下载
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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' })
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
||||
// 获得客户列表
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
>
|
||||
|
|
|
|||
Loading…
Reference in New Issue