bug修复
This commit is contained in:
parent
f1ab5eeaf4
commit
c1fc0f9764
|
|
@ -66,7 +66,7 @@ export const CustomerInforApi = {
|
|||
|
||||
|
||||
// 修改客户信息
|
||||
updateCustomer: async (data: CustomerInforVO) => {
|
||||
updateCustomer: async (data: any) => {
|
||||
return await request.put({ url: `/crm/customer/update`, data })
|
||||
},
|
||||
// 分配客户
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ export interface FollwRecordVO {
|
|||
customerId: number // 客户ID
|
||||
content: string // 跟进内容
|
||||
userId: number // 客户经理
|
||||
createTime: number // 创建时间
|
||||
}
|
||||
|
||||
// 跟进记录 API
|
||||
|
|
@ -16,7 +17,7 @@ export const FollwRecordApi = {
|
|||
},
|
||||
|
||||
// 新增跟进记录
|
||||
createFollwRecord: async (data: FollwRecordVO) => {
|
||||
createFollwRecord: async (data: any) => {
|
||||
return await request.post({ url: `/crm/follw-record/create`, data })
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -80,6 +80,8 @@ declare module 'vue' {
|
|||
ElCheckTag: typeof import('element-plus/es')['ElCheckTag']
|
||||
ElCol: typeof import('element-plus/es')['ElCol']
|
||||
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
|
||||
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
|
||||
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
|
||||
ElDialog: typeof import('element-plus/es')['ElDialog']
|
||||
ElDivider: typeof import('element-plus/es')['ElDivider']
|
||||
ElDrawer: typeof import('element-plus/es')['ElDrawer']
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
<div class="w-[300px]">
|
||||
<el-tabs>
|
||||
<el-tab-pane label="跟进记录">
|
||||
<FollowRecord :customer-id="props.customerId" />
|
||||
<FollowRecord ref="followRecordRef" :customer-id="props.customerId" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="流转记录">
|
||||
<TransferRecord :customer-id="props.customerId" />
|
||||
|
|
@ -75,7 +75,11 @@
|
|||
<el-tabs>
|
||||
<el-tab-pane label="客户资料">
|
||||
<div class="mt-4">
|
||||
<QuickFollow :customer-id="props.customerId" :customer-form="customerForm" />
|
||||
<QuickFollow
|
||||
:customer-id="props.customerId"
|
||||
:customer-form="customerForm"
|
||||
@save-success="followRecordRef?.refresh()"
|
||||
/>
|
||||
<Infor :customer-id="props.customerId" :customer-form="customerForm" />
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
|
@ -112,6 +116,7 @@ const emit = defineEmits(['prev', 'next'])
|
|||
|
||||
const formRef = ref() // 分配表单的 Ref
|
||||
const transferFormRef = ref() // 转公海表单的 Ref
|
||||
const followRecordRef = ref()
|
||||
|
||||
// 客户表单数据
|
||||
const customerForm = ref({
|
||||
|
|
|
|||
|
|
@ -35,6 +35,16 @@ const props = defineProps<{
|
|||
customerId?: number
|
||||
}>()
|
||||
|
||||
// 暴露刷新方法给父组件
|
||||
defineExpose({
|
||||
refresh: () => {
|
||||
resetData()
|
||||
if (props.customerId) {
|
||||
loadData()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const followRecordList = ref<FollwRecordVO[]>([])
|
||||
const pageNo = ref(1)
|
||||
const pageSize = ref(10)
|
||||
|
|
@ -74,6 +84,15 @@ const loadData = async () => {
|
|||
}
|
||||
}
|
||||
|
||||
// 重置数据
|
||||
const resetData = () => {
|
||||
followRecordList.value = []
|
||||
pageNo.value = 1
|
||||
total.value = 0
|
||||
finished.value = false
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
// 加载更多
|
||||
const loadMore = async () => {
|
||||
if (finished.value) return
|
||||
|
|
@ -82,13 +101,14 @@ const loadMore = async () => {
|
|||
}
|
||||
|
||||
// 监听 customerId 变化,重置并加载数据
|
||||
watch(() => props.customerId, async (id) => {
|
||||
if (id) {
|
||||
pageNo.value = 1
|
||||
finished.value = false
|
||||
// 确保用户列表已加载
|
||||
await crmStore.getUserList()
|
||||
await loadData()
|
||||
watch(() => props.customerId, async (newId, oldId) => {
|
||||
if (newId !== oldId) {
|
||||
resetData()
|
||||
if (newId) {
|
||||
// 确保用户列表已加载
|
||||
await crmStore.getUserList()
|
||||
await loadData()
|
||||
}
|
||||
}
|
||||
}, { immediate: true })
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -103,11 +103,11 @@
|
|||
<div class="flex items-center gap-2">
|
||||
<el-date-picker
|
||||
v-model="form.nextFollowTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="datetime"
|
||||
placeholder="请选择时间"
|
||||
class="!w-[150px]"
|
||||
size="small"
|
||||
size="small"
|
||||
value-format="x"
|
||||
/>
|
||||
<el-button
|
||||
type="danger"
|
||||
|
|
@ -216,7 +216,7 @@ const props = defineProps<{
|
|||
customerForm: any
|
||||
}>()
|
||||
|
||||
const emit = defineEmits(['prev', 'next'])
|
||||
const emit = defineEmits(['prev', 'next', 'save-success'])
|
||||
|
||||
const message = useMessage()
|
||||
|
||||
|
|
@ -247,7 +247,7 @@ const form = ref<{
|
|||
importLevelId: number | undefined
|
||||
isImport: number | undefined
|
||||
customerLabelIds: number[]
|
||||
nextFollowTime: string | undefined
|
||||
nextFollowTime: number | null
|
||||
}>({
|
||||
id: 0,
|
||||
haveCar: undefined,
|
||||
|
|
@ -259,7 +259,7 @@ const form = ref<{
|
|||
importLevelId: undefined,
|
||||
isImport: undefined,
|
||||
customerLabelIds: [],
|
||||
nextFollowTime: undefined
|
||||
nextFollowTime: null
|
||||
})
|
||||
|
||||
// 表单验证规则
|
||||
|
|
@ -314,8 +314,8 @@ const handleCustomerLablesChange = (labelId: number, checked: boolean) => {
|
|||
|
||||
// 设置下次跟进时间
|
||||
const setNextFollowTime = (minutes: number) => {
|
||||
form.value.nextFollowTime = minutes ? dayjs().add(minutes, 'minute').format('YYYY-MM-DD HH:mm:ss') : undefined
|
||||
}
|
||||
form.value.nextFollowTime = minutes ? dayjs().add(minutes, 'minute').valueOf() : undefined
|
||||
}
|
||||
|
||||
// 保存
|
||||
const handleSave = async () => {
|
||||
|
|
@ -333,16 +333,23 @@ const handleSave = async () => {
|
|||
|
||||
//2:添加跟进记录
|
||||
if (content.value) {
|
||||
const followRecord: FollwRecordVO = {
|
||||
id: 0,
|
||||
await FollwRecordApi.createFollwRecord({
|
||||
customerId: props.customerId!,
|
||||
content: content.value,
|
||||
userId: userStore.getUser.id
|
||||
}
|
||||
await FollwRecordApi.createFollwRecord(followRecord)
|
||||
})
|
||||
|
||||
console.log("content:"+content.value);
|
||||
//3:修改客户的最新跟进信息
|
||||
await CustomerInforApi.updateCustomer({
|
||||
id: props.customerId!,
|
||||
lastFollowTime: dayjs().valueOf(),
|
||||
lastFollowContent: content.value
|
||||
});
|
||||
emit('save-success')
|
||||
}
|
||||
|
||||
//3:添加客户标签
|
||||
|
||||
//4:添加客户标签
|
||||
if (props.customerId && customerLabels.value.length > 0) {
|
||||
await request.post({
|
||||
url: '/crm/customer-labels/create',
|
||||
|
|
@ -354,6 +361,9 @@ const handleSave = async () => {
|
|||
}
|
||||
|
||||
message.success('保存成功')
|
||||
// 重置跟进备注
|
||||
content.value = ''
|
||||
|
||||
} catch (error: any) {
|
||||
// 只有在实际保存操作失败时才显示错误
|
||||
if (error?.message) {
|
||||
|
|
|
|||
|
|
@ -302,7 +302,13 @@
|
|||
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail :customer-id="customerId" />
|
||||
<CustomerDetail
|
||||
:customer-id="customerId"
|
||||
:prev-id="prevId"
|
||||
:next-id="nextId"
|
||||
@prev="handlePrevNextClick('prev')"
|
||||
@next="handlePrevNextClick('next')"
|
||||
/>
|
||||
</el-drawer>
|
||||
|
||||
<!-- 转公海弹窗 -->
|
||||
|
|
@ -314,6 +320,7 @@
|
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import { buildTree } from '@/utils/tree'
|
||||
import { handlePrevNext } from '@/utils/crm'
|
||||
import { CustomerInforApi, CustomerInforVO } from '@/api/crm/customer/customer'
|
||||
import CustomerDetail from '@/views/crm/components/Customer/Detail.vue'
|
||||
import TransferForm from '@/views/crm/components/Transfer/TransferForm.vue'
|
||||
|
|
@ -363,6 +370,8 @@ let customerSourceOptions = ref<any>();
|
|||
let customerTypeOptions = ref<any>();
|
||||
const drawerVisible = ref(false) // 抽屉是否显示
|
||||
const customerId = ref<number>() // 当前查看的客户ID
|
||||
const prevId = ref<number>(0) // 上一条记录ID
|
||||
const nextId = ref<number>(0) // 下一条记录ID
|
||||
const cascaderProps= {
|
||||
emitPath: false,
|
||||
}
|
||||
|
|
@ -395,9 +404,31 @@ const resetQuery = () => {
|
|||
/** 打开跟进抽屉 */
|
||||
const openInforForm = (id?: number) => {
|
||||
customerId.value = id
|
||||
// 找到当前记录在列表中的索引
|
||||
const currentIndex = list.value.findIndex(item => item.id === id)
|
||||
|
||||
// 获取上一条和下一条记录的ID
|
||||
prevId.value = currentIndex > 0 ? list.value[currentIndex - 1].id : 0
|
||||
nextId.value = currentIndex < list.value.length - 1 ? list.value[currentIndex + 1].id : 0
|
||||
|
||||
drawerVisible.value = true
|
||||
}
|
||||
|
||||
/** 处理上一条/下一条切换 */
|
||||
const handlePrevNextClick = (type: 'prev' | 'next') => {
|
||||
if (customerId.value === undefined) return
|
||||
|
||||
handlePrevNext(type, {
|
||||
list: list.value,
|
||||
currentId: customerId.value,
|
||||
onUpdateIds: ({ currentId, prevId: newPrevId, nextId: newNextId }) => {
|
||||
customerId.value = currentId
|
||||
prevId.value = newPrevId
|
||||
nextId.value = newNextId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 打开转公海弹窗 */
|
||||
const openTransferForm = () => {
|
||||
if (multipleSelection.value.length === 0) {
|
||||
|
|
|
|||
|
|
@ -281,7 +281,13 @@
|
|||
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail :customer-id="customerId" />
|
||||
<CustomerDetail
|
||||
:customer-id="customerId"
|
||||
:prev-id="prevId"
|
||||
:next-id="nextId"
|
||||
@prev="handlePrevNextClick('prev')"
|
||||
@next="handlePrevNextClick('next')"
|
||||
/>
|
||||
</el-drawer>
|
||||
|
||||
<!-- 转公海弹窗 -->
|
||||
|
|
@ -293,6 +299,7 @@
|
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import { buildTree } from '@/utils/tree'
|
||||
import { handlePrevNext } from '@/utils/crm'
|
||||
import { CustomerInforApi, CustomerInforVO } from '@/api/crm/customer/customer'
|
||||
import CustomerDetail from '@/views/crm/components/Customer/Detail.vue'
|
||||
import TransferForm from '@/views/crm/components/Transfer/TransferForm.vue'
|
||||
|
|
@ -342,6 +349,8 @@ let customerSourceOptions = ref<any>()
|
|||
let customerTypeOptions = ref<any>()
|
||||
const drawerVisible = ref(false) // 抽屉是否显示
|
||||
const customerId = ref<number>() // 当前查看的客户ID
|
||||
const prevId = ref<number>(0) // 上一条记录ID
|
||||
const nextId = ref<number>(0) // 下一条记录ID
|
||||
const cascaderProps= {
|
||||
emitPath: false,
|
||||
}
|
||||
|
|
@ -375,9 +384,31 @@ const resetQuery = () => {
|
|||
/** 打开跟进抽屉 */
|
||||
const openInforForm = (id?: number) => {
|
||||
customerId.value = id
|
||||
// 找到当前记录在列表中的索引
|
||||
const currentIndex = list.value.findIndex(item => item.id === id)
|
||||
|
||||
// 获取上一条和下一条记录的ID
|
||||
prevId.value = currentIndex > 0 ? list.value[currentIndex - 1].id : 0
|
||||
nextId.value = currentIndex < list.value.length - 1 ? list.value[currentIndex + 1].id : 0
|
||||
|
||||
drawerVisible.value = true
|
||||
}
|
||||
|
||||
/** 处理上一条/下一条切换 */
|
||||
const handlePrevNextClick = (type: 'prev' | 'next') => {
|
||||
if (customerId.value === undefined) return
|
||||
|
||||
handlePrevNext(type, {
|
||||
list: list.value,
|
||||
currentId: customerId.value,
|
||||
onUpdateIds: ({ currentId, prevId: newPrevId, nextId: newNextId }) => {
|
||||
customerId.value = currentId
|
||||
prevId.value = newPrevId
|
||||
nextId.value = newNextId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 打开转公海弹窗 */
|
||||
const openTransferForm = () => {
|
||||
if (multipleSelection.value.length === 0) {
|
||||
|
|
|
|||
|
|
@ -280,7 +280,13 @@
|
|||
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail :customer-id="customerId" />
|
||||
<CustomerDetail
|
||||
:customer-id="customerId"
|
||||
:prev-id="prevId"
|
||||
:next-id="nextId"
|
||||
@prev="handlePrevNextClick('prev')"
|
||||
@next="handlePrevNextClick('next')"
|
||||
/>
|
||||
</el-drawer>
|
||||
|
||||
<!-- 转公海弹窗 -->
|
||||
|
|
@ -298,6 +304,7 @@ import TransferForm from '@/views/crm/components/Transfer/TransferForm.vue'
|
|||
import { useCrmStore } from '@/store/modules/crm'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import dayjs from 'dayjs'
|
||||
import { handlePrevNext } from '@/utils/crm'
|
||||
|
||||
/** 客户信息 列表 */
|
||||
defineOptions({ name: 'AllCustomer' })
|
||||
|
|
@ -342,6 +349,8 @@ let customerSourceOptions = ref<any>()
|
|||
let customerTypeOptions = ref<any>()
|
||||
const drawerVisible = ref(false) // 抽屉是否显示
|
||||
const customerId = ref<number>() // 当前查看的客户ID
|
||||
const prevId = ref<number>(0) // 上一条记录ID
|
||||
const nextId = ref<number>(0) // 下一条记录ID
|
||||
const cascaderProps= {
|
||||
emitPath: false,
|
||||
}
|
||||
|
|
@ -380,9 +389,31 @@ const resetQuery = () => {
|
|||
/** 打开跟进抽屉 */
|
||||
const openInforForm = (id?: number) => {
|
||||
customerId.value = id
|
||||
// 找到当前记录在列表中的索引
|
||||
const currentIndex = list.value.findIndex(item => item.id === id)
|
||||
|
||||
// 获取上一条和下一条记录的ID
|
||||
prevId.value = currentIndex > 0 ? list.value[currentIndex - 1].id : 0
|
||||
nextId.value = currentIndex < list.value.length - 1 ? list.value[currentIndex + 1].id : 0
|
||||
|
||||
drawerVisible.value = true
|
||||
}
|
||||
|
||||
/** 处理上一条/下一条切换 */
|
||||
const handlePrevNextClick = (type: 'prev' | 'next') => {
|
||||
if (customerId.value === undefined) return
|
||||
|
||||
handlePrevNext(type, {
|
||||
list: list.value,
|
||||
currentId: customerId.value,
|
||||
onUpdateIds: ({ currentId, prevId: newPrevId, nextId: newNextId }) => {
|
||||
customerId.value = currentId
|
||||
prevId.value = newPrevId
|
||||
nextId.value = newNextId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 打开转公海弹窗 */
|
||||
const openTransferForm = () => {
|
||||
if (multipleSelection.value.length === 0) {
|
||||
|
|
|
|||
|
|
@ -280,7 +280,13 @@
|
|||
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail :customer-id="customerId" />
|
||||
<CustomerDetail
|
||||
:customer-id="customerId"
|
||||
:prev-id="prevId"
|
||||
:next-id="nextId"
|
||||
@prev="handlePrevNextClick('prev')"
|
||||
@next="handlePrevNextClick('next')"
|
||||
/>
|
||||
</el-drawer>
|
||||
|
||||
<!-- 转公海弹窗 -->
|
||||
|
|
@ -298,6 +304,7 @@ import TransferForm from '@/views/crm/components/Transfer/TransferForm.vue'
|
|||
import { useCrmStore } from '@/store/modules/crm'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import dayjs from 'dayjs'
|
||||
import { handlePrevNext } from '@/utils/crm'
|
||||
|
||||
/** 客户信息 列表 */
|
||||
defineOptions({ name: 'AllCustomer' })
|
||||
|
|
@ -342,6 +349,8 @@ let customerSourceOptions = ref<any>()
|
|||
let customerTypeOptions = ref<any>()
|
||||
const drawerVisible = ref(false) // 抽屉是否显示
|
||||
const customerId = ref<number>() // 当前查看的客户ID
|
||||
const prevId = ref<number>(0) // 上一条记录ID
|
||||
const nextId = ref<number>(0) // 下一条记录ID
|
||||
const cascaderProps= {
|
||||
emitPath: false,
|
||||
}
|
||||
|
|
@ -380,9 +389,31 @@ const resetQuery = () => {
|
|||
/** 打开跟进抽屉 */
|
||||
const openInforForm = (id?: number) => {
|
||||
customerId.value = id
|
||||
// 找到当前记录在列表中的索引
|
||||
const currentIndex = list.value.findIndex(item => item.id === id)
|
||||
|
||||
// 获取上一条和下一条记录的ID
|
||||
prevId.value = currentIndex > 0 ? list.value[currentIndex - 1].id : 0
|
||||
nextId.value = currentIndex < list.value.length - 1 ? list.value[currentIndex + 1].id : 0
|
||||
|
||||
drawerVisible.value = true
|
||||
}
|
||||
|
||||
/** 处理上一条/下一条切换 */
|
||||
const handlePrevNextClick = (type: 'prev' | 'next') => {
|
||||
if (customerId.value === undefined) return
|
||||
|
||||
handlePrevNext(type, {
|
||||
list: list.value,
|
||||
currentId: customerId.value,
|
||||
onUpdateIds: ({ currentId, prevId: newPrevId, nextId: newNextId }) => {
|
||||
customerId.value = currentId
|
||||
prevId.value = newPrevId
|
||||
nextId.value = newNextId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 打开转公海弹窗 */
|
||||
const openTransferForm = () => {
|
||||
if (multipleSelection.value.length === 0) {
|
||||
|
|
|
|||
|
|
@ -277,7 +277,13 @@
|
|||
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail :customer-id="customerId" />
|
||||
<CustomerDetail
|
||||
:customer-id="customerId"
|
||||
:prev-id="prevId"
|
||||
:next-id="nextId"
|
||||
@prev="handlePrevNextClick('prev')"
|
||||
@next="handlePrevNextClick('next')"
|
||||
/>
|
||||
</el-drawer>
|
||||
|
||||
<!-- 转公海弹窗 -->
|
||||
|
|
@ -289,6 +295,7 @@
|
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import { buildTree } from '@/utils/tree'
|
||||
import { handlePrevNext } from '@/utils/crm'
|
||||
import { CustomerInforApi, CustomerInforVO } from '@/api/crm/customer/customer'
|
||||
import CustomerDetail from '@/views/crm/components/Customer/Detail.vue'
|
||||
import TransferForm from '@/views/crm/components/Transfer/TransferForm.vue'
|
||||
|
|
@ -338,6 +345,8 @@ let customerSourceOptions = ref<any>()
|
|||
let customerTypeOptions = ref<any>()
|
||||
const drawerVisible = ref(false) // 抽屉是否显示
|
||||
const customerId = ref<number>() // 当前查看的客户ID
|
||||
const prevId = ref<number>(0) // 上一条记录ID
|
||||
const nextId = ref<number>(0) // 下一条记录ID
|
||||
const cascaderProps= {
|
||||
emitPath: false,
|
||||
}
|
||||
|
|
@ -372,9 +381,31 @@ const resetQuery = () => {
|
|||
/** 打开跟进抽屉 */
|
||||
const openInforForm = (id?: number) => {
|
||||
customerId.value = id
|
||||
// 找到当前记录在列表中的索引
|
||||
const currentIndex = list.value.findIndex(item => item.id === id)
|
||||
|
||||
// 获取上一条和下一条记录的ID
|
||||
prevId.value = currentIndex > 0 ? list.value[currentIndex - 1].id : 0
|
||||
nextId.value = currentIndex < list.value.length - 1 ? list.value[currentIndex + 1].id : 0
|
||||
|
||||
drawerVisible.value = true
|
||||
}
|
||||
|
||||
/** 处理上一条/下一条切换 */
|
||||
const handlePrevNextClick = (type: 'prev' | 'next') => {
|
||||
if (customerId.value === undefined) return
|
||||
|
||||
handlePrevNext(type, {
|
||||
list: list.value,
|
||||
currentId: customerId.value,
|
||||
onUpdateIds: ({ currentId, prevId: newPrevId, nextId: newNextId }) => {
|
||||
customerId.value = currentId
|
||||
prevId.value = newPrevId
|
||||
nextId.value = newNextId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 打开转公海弹窗 */
|
||||
const openTransferForm = () => {
|
||||
if (multipleSelection.value.length === 0) {
|
||||
|
|
|
|||
|
|
@ -263,9 +263,15 @@
|
|||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail :customer-id="customerId" />
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail
|
||||
:customer-id="customerId"
|
||||
:prev-id="prevId"
|
||||
:next-id="nextId"
|
||||
@prev="handlePrevNextClick('prev')"
|
||||
@next="handlePrevNextClick('next')"
|
||||
/>
|
||||
</el-drawer>
|
||||
|
||||
<!-- 分配弹窗 -->
|
||||
|
|
@ -274,6 +280,7 @@
|
|||
|
||||
<script setup lang="ts">
|
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { handlePrevNext } from '@/utils/crm'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import { buildTree } from '@/utils/tree'
|
||||
import { CustomerInforApi, CustomerInforVO } from '@/api/crm/customer/customer'
|
||||
|
|
@ -284,7 +291,7 @@ import AllocateForm from '@/views/crm/components/Allocate/AllocateForm.vue'
|
|||
|
||||
/** 客户信息 列表 */
|
||||
defineOptions({ name: 'AllCustomer' })
|
||||
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
|
|
@ -302,9 +309,14 @@ let customerTypeOptions = ref<any>()
|
|||
|
||||
const drawerVisible = ref(false) // 抽屉是否显示
|
||||
const customerId = ref<number>() // 当前查看的客户ID
|
||||
const prevId = ref<number>(0) // 上一条记录ID
|
||||
const nextId = ref<number>(0) // 下一条记录ID
|
||||
|
||||
const multipleSelection = ref<CustomerInforVO[]>([])
|
||||
const formRef = ref() // 分配表单的 Ref
|
||||
|
||||
|
||||
|
||||
const cascaderProps= {
|
||||
emitPath: false,
|
||||
}
|
||||
|
|
@ -358,6 +370,13 @@ const resetQuery = () => {
|
|||
/** 打开跟进抽屉 */
|
||||
const openInforForm = (id?: number) => {
|
||||
customerId.value = id
|
||||
// 找到当前记录在列表中的索引
|
||||
const currentIndex = list.value.findIndex(item => item.id === id)
|
||||
|
||||
// 获取上一条和下一条记录的ID
|
||||
prevId.value = currentIndex > 0 ? list.value[currentIndex - 1].id : 0
|
||||
nextId.value = currentIndex < list.value.length - 1 ? list.value[currentIndex + 1].id : 0
|
||||
|
||||
drawerVisible.value = true
|
||||
}
|
||||
/** 打开分配弹窗 */
|
||||
|
|
@ -417,4 +436,18 @@ const handleReceive = async () => {
|
|||
message.error('领取失败')
|
||||
}
|
||||
}
|
||||
/** 处理上一条/下一条切换 */
|
||||
const handlePrevNextClick = (type: 'prev' | 'next') => {
|
||||
if (customerId.value === undefined) return
|
||||
|
||||
handlePrevNext(type, {
|
||||
list: list.value,
|
||||
currentId: customerId.value,
|
||||
onUpdateIds: ({ currentId, prevId: newPrevId, nextId: newNextId }) => {
|
||||
customerId.value = currentId
|
||||
prevId.value = newPrevId
|
||||
nextId.value = newNextId
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
|
@ -265,7 +265,13 @@
|
|||
</ContentWrap>
|
||||
<!-- 客户详情抽屉 -->
|
||||
<el-drawer v-model="drawerVisible" size="80%" :destroy-on-close="true" :with-header="false" :show-close="true">
|
||||
<CustomerDetail :customer-id="customerId" />
|
||||
<CustomerDetail
|
||||
:customer-id="customerId"
|
||||
:prev-id="prevId"
|
||||
:next-id="nextId"
|
||||
@prev="handlePrevNextClick('prev')"
|
||||
@next="handlePrevNextClick('next')"
|
||||
/>
|
||||
</el-drawer>
|
||||
|
||||
<!-- 分配弹窗 -->
|
||||
|
|
@ -274,6 +280,7 @@
|
|||
|
||||
<script setup lang="ts">
|
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { handlePrevNext } from '@/utils/crm'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import { buildTree } from '@/utils/tree'
|
||||
import { CustomerInforApi, CustomerInforVO } from '@/api/crm/customer/customer'
|
||||
|
|
@ -303,6 +310,9 @@ let customerTypeOptions = ref<any>()
|
|||
|
||||
const drawerVisible = ref(false) // 抽屉是否显示
|
||||
const customerId = ref<number>() // 当前查看的客户ID
|
||||
const prevId = ref<number>(0) // 上一条记录ID
|
||||
const nextId = ref<number>(0) // 下一条记录ID
|
||||
|
||||
const multipleSelection = ref<CustomerInforVO[]>([])
|
||||
const formRef = ref() // 分配表单的 Ref
|
||||
|
||||
|
|
@ -357,8 +367,16 @@ const resetQuery = () => {
|
|||
handleQuery()
|
||||
}
|
||||
/** 打开跟进抽屉 */
|
||||
/** 打开跟进抽屉 */
|
||||
const openInforForm = (id?: number) => {
|
||||
customerId.value = id
|
||||
// 找到当前记录在列表中的索引
|
||||
const currentIndex = list.value.findIndex(item => item.id === id)
|
||||
|
||||
// 获取上一条和下一条记录的ID
|
||||
prevId.value = currentIndex > 0 ? list.value[currentIndex - 1].id : 0
|
||||
nextId.value = currentIndex < list.value.length - 1 ? list.value[currentIndex + 1].id : 0
|
||||
|
||||
drawerVisible.value = true
|
||||
}
|
||||
/** 打开分配弹窗 */
|
||||
|
|
@ -418,4 +436,19 @@ const handleReceive = async () => {
|
|||
message.error('领取失败')
|
||||
}
|
||||
}
|
||||
|
||||
/** 处理上一条/下一条切换 */
|
||||
const handlePrevNextClick = (type: 'prev' | 'next') => {
|
||||
if (customerId.value === undefined) return
|
||||
|
||||
handlePrevNext(type, {
|
||||
list: list.value,
|
||||
currentId: customerId.value,
|
||||
onUpdateIds: ({ currentId, prevId: newPrevId, nextId: newNextId }) => {
|
||||
customerId.value = currentId
|
||||
prevId.value = newPrevId
|
||||
nextId.value = newNextId
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
Loading…
Reference in New Issue