车辆采集修改 客户删除 添加删除原因

This commit is contained in:
浅念
2025-11-18 11:03:19 +08:00
parent 7638eaf80f
commit 4281cb3740
6 changed files with 341 additions and 103 deletions
+32 -14
View File
@@ -630,23 +630,41 @@
})
}
const crmdelectfn = (row: any) => {
ElMessageBox.confirm(
'确定要删除此客户吗?删除后无法恢复,若存在疑问可标记为无效用户或操作移除,将客户移除到公海!',
// ElMessageBox.confirm(
// '确定要删除此客户吗?删除后无法恢复,若存在疑问可标记为无效用户或操作移除,将客户移除到公海!',
// '提示',
// {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// })
// .then(async () => {
// const res = await CrmService.crmCustomerDelete({ id: row.id, scene: 'force' })
// ElMessage.success(res?.message || '提交成功!')
// gettableList()
// // 你可以在这里调用接口或做后续处理
// })
// .catch(() => {
// // 用户点击了取消
// })
ElMessageBox.prompt(
'确定要删除此客户吗?删除后无法恢复,若存在疑问可标记为无效用户或操作移除,将客户移除到公海!删除请填写入删除原因!',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /^(?!\s*$).+/,
inputErrorMessage: '请填写入删除原因'
}
).then(async ({ value }) => {
const res = await CrmService.crmCustomerDelete({
id: row.id,
scene: 'force',
status_desc: value
})
ElMessage.success(res?.message || '提交成功!')
gettableList()
})
.then(async () => {
const res = await CrmService.crmCustomerDelete({ id: row.id, scene: 'force' })
ElMessage.success(res?.message || '提交成功!')
gettableList()
// 你可以在这里调用接口或做后续处理
})
.catch(() => {
// 用户点击了取消
})
}
// 标记无效
const reportfn = (row: any) => {
+133 -36
View File
@@ -44,9 +44,7 @@
<div class="table-container boxshadow">
<div class="btntab">
<ElButton type="primary" v-ripple @click="handleAdd">新增车辆</ElButton>
<ElButton type="success" v-ripple @click="crawlKeywordfn"
>通过车系名称查找抓取车辆</ElButton
>
<ElButton type="success" v-ripple @click="crawlKeywordfn">通过关键字查找车辆</ElButton>
</div>
<ArtTable
ref="tableRef"
@@ -993,8 +991,12 @@
</div>
</template>
</ElDialog>
<!-- 关键字 车型抓取弹出框 -->
<ElDialog v-model="keywordDialogVisible" title="关键字-车型采集" width="900px" align-center>
<ElDialog
v-model="keywordDialogVisible"
title="关键字-车型采集"
:width="keywordwidth"
align-center
>
<div class="collect-models-container">
<div style="display: flex; gap: 12px">
<el-form-item label="关键字:" label-width="70px">
@@ -1011,33 +1013,86 @@
</el-form-item>
</div>
<div class="collect-models-content">
<div v-if="modelLstLoading" class="loading-container">
<ElLoading text="正在采集车型数据..." />
<div v-if="is_series == 0">
<ElRow :gutter="16">
<el-col :span="7">
<ElTable :data="keywordbrand" style="width: 100%" max-height="400">
<ElTableColumn prop="brand" label="品牌" width="100">
<template #default="scope">
<span>{{ scope.row.brand.brand_name }}</span>
</template>
</ElTableColumn>
<ElTableColumn prop="series" label="车系" width="120">
<template #default="scope">
<span>{{ scope.row.series.series_name }}</span>
</template>
</ElTableColumn>
<ElTableColumn prop="id" label="操作" width="120">
<template #default="scope">
<ElButton
type="primary"
size="small"
@click="getcrawlSeries(scope.row.series.series_name)"
>
采集车型
</ElButton>
</template>
</ElTableColumn>
</ElTable>
</el-col>
<el-col :span="17">
<ElTable
:data="modelLst"
style="width: 100%"
max-height="400"
@selection-change="handleModelSelectionChange"
>
<ElTableColumn prop="brand_name" label="品牌" width="100" />
<ElTableColumn prop="series_name" label="车系" width="120" />
<ElTableColumn prop="title" label="车型名称" min-width="200" show-overflow-tooltip />
<ElTableColumn prop="year" label="年款" width="80" />
<ElTableColumn prop="msrp" label="指导价" width="120">
<template #default="scope">
<span v-if="scope.row.msrp" class="price-text">
¥{{ formatPrice(scope.row.msrp) }}
</span>
<span v-else>-</span>
</template>
</ElTableColumn>
<ElTableColumn type="selection" width="55" />
</ElTable>
</el-col>
</ElRow>
</div>
<div v-else-if="!modelLst || modelLst.length === 0" class="empty-container">
<ElEmpty description="暂无车型数据" />
</div>
<div v-else class="models-table-container">
<ElTable
:data="modelLst"
style="width: 100%"
max-height="400"
@selection-change="handleModelSelectionChange"
>
<ElTableColumn type="selection" width="55" />
<ElTableColumn prop="brand_name" label="品牌" width="100" />
<ElTableColumn prop="series_name" label="车系" width="120" />
<ElTableColumn prop="title" label="车型名称" min-width="200" show-overflow-tooltip />
<ElTableColumn prop="year" label="年款" width="80" />
<ElTableColumn prop="msrp" label="指导价" width="120">
<template #default="scope">
<span v-if="scope.row.msrp" class="price-text">
¥{{ formatPrice(scope.row.msrp) }}
</span>
<span v-else>-</span>
</template>
</ElTableColumn>
</ElTable>
<div v-else>
<div v-if="modelLstLoading" class="loading-container">
<ElLoading text="正在采集车型数据..." />
</div>
<div v-else-if="!modelLst || modelLst.length === 0" class="empty-container">
<ElEmpty description="暂无车型数据" />
</div>
<div v-else class="models-table-container">
<ElTable
:data="modelLst"
style="width: 100%"
max-height="400"
@selection-change="handleModelSelectionChange"
>
<ElTableColumn type="selection" width="55" />
<ElTableColumn prop="brand_name" label="品牌" width="100" />
<ElTableColumn prop="series_name" label="车系" width="120" />
<ElTableColumn prop="title" label="车型名称" min-width="200" show-overflow-tooltip />
<ElTableColumn prop="year" label="年款" width="80" />
<ElTableColumn prop="msrp" label="指导价" width="120">
<template #default="scope">
<span v-if="scope.row.msrp" class="price-text">
¥{{ formatPrice(scope.row.msrp) }}
</span>
<span v-else>-</span>
</template>
</ElTableColumn>
</ElTable>
</div>
</div>
</div>
</div>
@@ -1061,7 +1116,9 @@
import { ElMessage, ElMessageBox, ElLoading } from 'element-plus'
import { vehicleService } from '@/api/crmpc/vehicleApi'
import { commonService } from '@/api/commonApi'
defineOptions({ name: 'AdminVehicleList' })
const keywordwidth = ref('900px')
const is_series = ref(1)
defineOptions({ name: 'CrmVehicleList' })
// 搜索表单
const searchForm = reactive({
keyword: '',
@@ -1840,24 +1897,36 @@
const modelLst = ref<any>([])
const modelLstLoading = ref(false)
const crawlKeywordfn = async () => {
keywordwidth.value = '900px'
is_series.value = 1
keywordDialogVisible.value = true
carkeyword.value = ''
keywordModelsData.value = {}
selectedModels.value = []
modelLst.value = []
keywordbrand.value = []
keywordModelsData.value = {}
}
const keywordclose = () => {
keywordwidth.value = '900px'
is_series.value = 1
keywordDialogVisible.value = false
carkeyword.value = ''
keywordModelsData.value = {}
selectedModels.value = []
keywordbrand.value = []
modelLst.value = []
}
const handleModelSelectionChange = (selection: any[]) => {
selectedModels.value = selection
}
const selectedModels = ref<any[]>([])
const keywordbrand = ref<any>([])
const getcarkeyword = async () => {
modelLstLoading.value = true
selectedModels.value = []
keywordbrand.value = []
modelLst.value = []
keywordModelsData.value = {}
const loading = ElLoading.service({
lock: true,
text: 'Loading',
@@ -1865,9 +1934,36 @@
})
try {
const res = await commonService.getcrawlKeyword({ keyword: carkeyword.value })
keywordModelsData.value = res
modelLst.value = res.model
console.log(modelLst.value)
is_series.value = res.is_series
if (res.is_series == 1) {
keywordwidth.value = '900px'
keywordModelsData.value = res.data[0]
modelLst.value = res.data[0].model
} else {
keywordwidth.value = '1200px'
keywordbrand.value = res.data
}
console.log(res)
} finally {
loading.close()
modelLstLoading.value = false
}
}
const getcrawlSeries = async (keyword: any) => {
modelLstLoading.value = true
selectedModels.value = []
modelLst.value = []
keywordModelsData.value = {}
const loading = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)'
})
try {
const res = await commonService.getcrawlKeyword({ keyword: keyword })
keywordModelsData.value = res.data[0]
modelLst.value = res.data[0].model
console.log(res)
} finally {
loading.close()
modelLstLoading.value = false
@@ -1879,6 +1975,7 @@
return
}
await commonService.crawlModelCreate({
series_name: keywordModelsData.value.series.series_name,
series_id: keywordModelsData.value.series.id ? keywordModelsData.value.series.id : 0,
brand_id: keywordModelsData.value.brand.id ? keywordModelsData.value.brand.id : 0,
models: selectedModels.value