223 lines
5.7 KiB
JavaScript
223 lines
5.7 KiB
JavaScript
import request from '@/utils/request'
|
||
import store from '@/store'
|
||
import { getLoginAccount } from '@/utils/auth'
|
||
import { getBusinessHeaders } from '@/utils/business-headers'
|
||
|
||
function resolveCurrentLoginAccount() {
|
||
const fromStore = (store.getters.account || '').trim()
|
||
if (fromStore) return fromStore
|
||
const fromStorage = getLoginAccount()
|
||
if (fromStorage) return fromStorage
|
||
const fromHeader = (getBusinessHeaders()['X-Account-Name'] || '').trim()
|
||
return fromHeader || ''
|
||
}
|
||
|
||
// 分页查询客户列表
|
||
export function getCustomerList(params) {
|
||
return request({
|
||
url: '/customerManagement/list',
|
||
method: 'get',
|
||
params: {
|
||
current: params.current || 1,
|
||
size: params.size || 10,
|
||
customerName: params.customerName,
|
||
contact: params.contact,
|
||
salesName: params.salesName,
|
||
dealershipId: params.dealershipId,
|
||
projectId: params.projectId,
|
||
createTimeStart: params.createTimeStart,
|
||
createTimeEnd: params.createTimeEnd,
|
||
infoCard: params.infoCard
|
||
}
|
||
})
|
||
}
|
||
|
||
// 根据联系方式查询客户信息
|
||
export function getCustomerByContact(contact) {
|
||
return request({
|
||
url: '/customerManagement/getByContact',
|
||
method: 'get',
|
||
params: { contact }
|
||
})
|
||
}
|
||
|
||
// 根据ID查询客户
|
||
export function getCustomerById(id) {
|
||
return request({
|
||
url: `/customerManagement/get/${id}`,
|
||
method: 'get'
|
||
})
|
||
}
|
||
|
||
// 删除客户
|
||
export function deleteCustomer(id) {
|
||
return request({
|
||
url: `/customerManagement/delete/${id}`,
|
||
method: 'delete'
|
||
})
|
||
}
|
||
|
||
// 批量删除客户
|
||
export function batchDeleteCustomer(ids) {
|
||
return request({
|
||
url: '/customerManagement/batchDelete',
|
||
method: 'delete',
|
||
data: ids
|
||
})
|
||
}
|
||
|
||
// 添加新的客户信息(自动附带当前登录人姓名、账号,供后端 salesName / salesPhone)
|
||
export function addCustomer(data) {
|
||
const body = data && typeof data === 'object' ? { ...data } : {}
|
||
const salesName = (store.getters.name || '').trim()
|
||
const salesPhone = resolveCurrentLoginAccount()
|
||
if (salesName) body.salesName = salesName
|
||
if (salesPhone) body.salesPhone = salesPhone
|
||
return request({
|
||
url: '/customerManagement/add',
|
||
method: 'post',
|
||
data: body
|
||
})
|
||
}
|
||
|
||
// 更新客户信息
|
||
export function updateCustomer(data) {
|
||
return request({
|
||
url: '/customerManagement/update',
|
||
method: 'put',
|
||
data
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 预览客户照片(后端从 MinIO 拉流)。
|
||
* 方式一:传 url(与 uploadPhoto 返回的 MinIO 访问 URL 一致)。
|
||
* 方式二:传 id + photoType(front | side | life),由后端读库再拉 MinIO。
|
||
* @param {{ url?: string, id?: string|number, photoType?: 'front'|'side'|'life' }}=} params
|
||
*/
|
||
export function previewCustomerPhoto(params) {
|
||
const p = params && typeof params === 'object' ? params : {}
|
||
const query = {}
|
||
if (p.url != null && String(p.url).trim() !== '') {
|
||
query.url = String(p.url).trim()
|
||
}
|
||
if (p.id != null && String(p.id).trim() !== '') {
|
||
query.id = String(p.id).trim()
|
||
}
|
||
if (p.photoType != null && String(p.photoType).trim() !== '') {
|
||
query.photoType = String(p.photoType).trim()
|
||
}
|
||
return request({
|
||
url: '/customerManagement/previewPhoto',
|
||
method: 'get',
|
||
params: query,
|
||
responseType: 'blob',
|
||
timeout: 120000
|
||
})
|
||
}
|
||
|
||
/** 客户照片上传至 MinIO;id 可选,有则作为 query 传入;成功时响应 data 中含 url */
|
||
export function uploadCustomerPhoto(customerId, file) {
|
||
const formData = new FormData()
|
||
formData.append('file', file)
|
||
const config = {
|
||
url: '/customerManagement/uploadPhoto',
|
||
method: 'post',
|
||
data: formData,
|
||
timeout: 120000
|
||
}
|
||
if (customerId != null && String(customerId).trim() !== '') {
|
||
config.params = { id: String(customerId).trim() }
|
||
}
|
||
return request(config)
|
||
}
|
||
|
||
// 获取客户统计信息
|
||
export function getCustomerStatistics() {
|
||
return request({
|
||
url: '/customerManagement/statistics',
|
||
method: 'get'
|
||
})
|
||
}
|
||
|
||
// 导出客流
|
||
export function exportCustomerFlow(params) {
|
||
return request({
|
||
url: '/customerManagement/export',
|
||
method: 'get',
|
||
params,
|
||
responseType: 'blob'
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 高德周边商家检索(地理编码 + place/around)
|
||
* @param {{ CITY: string, ADDRESS: string, RADIUS: number, MAX_PAGE: number, maxRecordsOfpage: number }} params
|
||
*/
|
||
export function searchNearbyMerchants(params) {
|
||
return request({
|
||
url: '/customerManagement/searchNearbyMerchants',
|
||
method: 'get',
|
||
params: {
|
||
CITY: params.CITY,
|
||
ADDRESS: params.ADDRESS,
|
||
RADIUS: params.RADIUS,
|
||
MAX_PAGE: params.MAX_PAGE,
|
||
maxRecordsOfpage: params.maxRecordsOfpage
|
||
},
|
||
timeout: 120000,
|
||
skipResponseNormalize: true
|
||
})
|
||
}
|
||
|
||
// 沟通记录相关API
|
||
// 分页查询沟通记录
|
||
export function getCommunicationRecordPage(params) {
|
||
return request({
|
||
url: '/communication-record/page',
|
||
method: 'get',
|
||
params: {
|
||
current: params.current || 1,
|
||
size: params.size || 10,
|
||
customerName: params.customerName,
|
||
customerPhone: params.customerPhone,
|
||
communicationType: params.communicationType,
|
||
ownerName: params.ownerName
|
||
}
|
||
})
|
||
}
|
||
|
||
// 添加沟通记录
|
||
export function addCommunicationRecord(data) {
|
||
return request({
|
||
url: '/communication-record/add',
|
||
method: 'post',
|
||
data
|
||
})
|
||
}
|
||
|
||
// 更新沟通记录
|
||
export function updateCommunicationRecord(data) {
|
||
return request({
|
||
url: '/communication-record/update',
|
||
method: 'put',
|
||
data
|
||
})
|
||
}
|
||
|
||
// 删除沟通记录
|
||
export function deleteCommunicationRecord(id) {
|
||
return request({
|
||
url: `/communication-record/delete/${id}`,
|
||
method: 'delete'
|
||
})
|
||
}
|
||
|
||
// 根据ID查询沟通记录详情
|
||
export function getCommunicationRecordById(id) {
|
||
return request({
|
||
url: `/communication-record/get/${id}`,
|
||
method: 'get'
|
||
})
|
||
}
|