录音管理联调添加编辑,门店转换
This commit is contained in:
@@ -129,10 +129,11 @@
|
||||
|
||||
<!-- 操作按钮区域 -->
|
||||
<el-card class="action-container" shadow="never">
|
||||
<el-button type="primary" icon="el-icon-plus" @click="handleAdd">添加录音</el-button>
|
||||
<el-button type="primary" @click="handleAllocateProject">分配项目</el-button>
|
||||
<el-button type="primary" @click="handleAllocateSales">分配销售</el-button>
|
||||
<el-button type="primary" @click="handleMergeRecordings">录音合并</el-button>
|
||||
<el-button type="primary" @click="handleBatchDelete">批量删除</el-button>
|
||||
<el-button type="danger" @click="handleBatchDelete">批量删除</el-button>
|
||||
</el-card>
|
||||
|
||||
<!-- 数据表格区域 -->
|
||||
@@ -272,18 +273,187 @@
|
||||
<el-button type="primary" @click="handleMergeRecordingsSubmit">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 查看录音详情对话框 -->
|
||||
<el-dialog
|
||||
title="录音详情"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="800px"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="录音名称">{{ audioForm.recordingName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="录音时间">{{ audioForm.recordingTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属销售">{{ audioForm.salesName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="录音时长">{{ audioForm.duration }} 分钟</el-descriptions-item>
|
||||
<el-descriptions-item label="客户姓名">{{ audioForm.customerName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="客户手机号">{{ audioForm.customerPhone }}</el-descriptions-item>
|
||||
<el-descriptions-item label="上传时间">{{ audioForm.uploadTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="意向级别">
|
||||
<el-tag :type="getIntentionLevelType(audioForm.intentionLevel)">
|
||||
{{ audioForm.intentionLevel }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属门店">{{ audioForm.dealershipName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属项目">{{ audioForm.projectName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="话术模型">{{ audioForm.speechModel }}</el-descriptions-item>
|
||||
<el-descriptions-item label="上传状态">
|
||||
<el-tag :type="audioForm.uploadStatus === '已上传' ? 'success' : 'warning'">
|
||||
{{ audioForm.uploadStatus }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="同步状态">
|
||||
<el-tag :type="audioForm.syncStatus === '已同步' ? 'success' : 'info'">
|
||||
{{ audioForm.syncStatus }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="是否合并">
|
||||
<el-tag :type="audioForm.isMerged ? 'success' : 'info'">
|
||||
{{ audioForm.isMerged ? '已合并' : '未合并' }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="录音描述" :span="2">{{ audioForm.description || '暂无描述' }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false">关 闭</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 编辑录音对话框 -->
|
||||
<el-dialog
|
||||
:title="isEdit ? '编辑录音' : '添加录音'"
|
||||
:visible.sync="editDialogVisible"
|
||||
width="800px"
|
||||
:close-on-click-modal="false"
|
||||
@close="handleEditDialogClose"
|
||||
>
|
||||
<el-form ref="audioForm" :model="audioForm" :rules="audioRules" label-width="120px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="录音名称" prop="recordingName">
|
||||
<el-input v-model="audioForm.recordingName" placeholder="请输入录音名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属门店" prop="dealershipId">
|
||||
<el-select v-model="audioForm.dealershipId" placeholder="请选择所属门店" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in dealershipOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属项目" prop="projectId">
|
||||
<el-select v-model="audioForm.projectId" placeholder="请选择所属项目" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in projectOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属销售" prop="salesId">
|
||||
<el-select v-model="audioForm.salesId" placeholder="请选择销售" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in salesOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户姓名" prop="customerName">
|
||||
<el-input v-model="audioForm.customerName" placeholder="请输入客户姓名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户手机号" prop="customerPhone">
|
||||
<el-input v-model="audioForm.customerPhone" placeholder="请输入客户手机号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="录音时长" prop="duration">
|
||||
<el-input-number v-model="audioForm.duration" :min="0" :precision="1" placeholder="录音时长(分钟)" style="width: 100%" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="意向级别" prop="intentionLevel">
|
||||
<el-select v-model="audioForm.intentionLevel" placeholder="请选择意向级别" style="width: 100%">
|
||||
<el-option label="A级" value="A" />
|
||||
<el-option label="B级" value="B" />
|
||||
<el-option label="C级" value="C" />
|
||||
<el-option label="D级" value="D" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="上传状态" prop="uploadStatus">
|
||||
<el-select v-model="audioForm.uploadStatus" placeholder="请选择上传状态" style="width: 100%">
|
||||
<el-option label="已上传" value="已上传" />
|
||||
<el-option label="上传中" value="上传中" />
|
||||
<el-option label="上传失败" value="上传失败" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="同步状态" prop="syncStatus">
|
||||
<el-select v-model="audioForm.syncStatus" placeholder="请选择同步状态" style="width: 100%">
|
||||
<el-option label="已同步" value="已同步" />
|
||||
<el-option label="未同步" value="未同步" />
|
||||
<el-option label="同步中" value="同步中" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="录音描述" prop="description">
|
||||
<el-input
|
||||
v-model="audioForm.description"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
placeholder="请输入录音描述"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="handleEditSubmit">确 定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
getAudioList,
|
||||
getAudioById,
|
||||
addAudio,
|
||||
updateAudio,
|
||||
deleteAudio,
|
||||
batchDeleteAudio,
|
||||
allocateProject,
|
||||
allocateSales,
|
||||
mergeRecordings
|
||||
} from '@/api/audio'
|
||||
import { getDealershipList } from '@/api/dealership'
|
||||
import { getProjectList } from '@/api/project'
|
||||
import { getSalesList } from '@/api/sales'
|
||||
|
||||
export default {
|
||||
name: 'Audio',
|
||||
@@ -296,6 +466,9 @@ export default {
|
||||
allocateProjectVisible: false,
|
||||
allocateSalesVisible: false,
|
||||
mergeRecordingsVisible: false,
|
||||
viewDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
isEdit: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
current: 1,
|
||||
@@ -336,29 +509,56 @@ export default {
|
||||
]
|
||||
},
|
||||
// 门店选项
|
||||
dealershipOptions: [
|
||||
{ value: '1', label: '销售演示-上汽' },
|
||||
{ value: '2', label: 'DCC演示' },
|
||||
{ value: '3', label: '销售演示-奔驰' },
|
||||
{ value: '4', label: '销售演示-比亚迪' }
|
||||
],
|
||||
dealershipOptions: [],
|
||||
// 项目选项
|
||||
projectOptions: [
|
||||
{ value: '1', label: '电话接访话术' },
|
||||
{ value: '2', label: '广丰项目' },
|
||||
{ value: '3', label: '销售部' }
|
||||
],
|
||||
projectOptions: [],
|
||||
// 销售选项
|
||||
salesOptions: [
|
||||
{ value: '1', label: '销冠【普通】' },
|
||||
{ value: '2', label: '粤语销售' },
|
||||
{ value: '3', label: '上海销售' },
|
||||
{ value: '4', label: '四川销售' }
|
||||
]
|
||||
salesOptions: [],
|
||||
// 录音表单
|
||||
audioForm: {
|
||||
id: null,
|
||||
recordingName: '',
|
||||
recordingTime: '',
|
||||
salesName: '',
|
||||
duration: 0,
|
||||
customerName: '',
|
||||
customerPhone: '',
|
||||
uploadTime: '',
|
||||
intentionLevel: '',
|
||||
dealershipName: '',
|
||||
projectName: '',
|
||||
speechModel: '',
|
||||
uploadStatus: '',
|
||||
syncStatus: '',
|
||||
isMerged: false,
|
||||
description: '',
|
||||
dealershipId: '',
|
||||
projectId: '',
|
||||
salesId: ''
|
||||
},
|
||||
// 录音表单验证规则
|
||||
audioRules: {
|
||||
recordingName: [
|
||||
{ required: true, message: '请输入录音名称', trigger: 'blur' }
|
||||
],
|
||||
customerName: [
|
||||
{ required: true, message: '请输入客户姓名', trigger: 'blur' }
|
||||
],
|
||||
customerPhone: [
|
||||
{ required: true, message: '请输入客户手机号', trigger: 'blur' },
|
||||
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' }
|
||||
],
|
||||
duration: [
|
||||
{ required: true, message: '请输入录音时长', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
this.getDealershipOptions()
|
||||
this.getProjectOptions()
|
||||
this.getSalesOptions()
|
||||
},
|
||||
methods: {
|
||||
// 获取列表数据
|
||||
@@ -450,6 +650,79 @@ export default {
|
||||
})
|
||||
},
|
||||
|
||||
// 获取门店选项
|
||||
getDealershipOptions() {
|
||||
getDealershipList({ size: 1000 }).then(response => {
|
||||
console.log('门店选项 1111111111111111111:', response)
|
||||
if (response.code === 20000) {
|
||||
const data = response.data.records || response.data.data || response.data || []
|
||||
console.log('门店选项 22222222222:', data)
|
||||
this.dealershipOptions = data.map(item => ({
|
||||
value: item.id,
|
||||
label: item.dealershipName || item.name
|
||||
}))
|
||||
} else {
|
||||
console.error('获取门店选项失败:', response.message)
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取门店选项错误:', error)
|
||||
// 开发环境使用模拟数据
|
||||
this.dealershipOptions = [
|
||||
{ value: '1', label: '销售演示-上汽' },
|
||||
{ value: '2', label: 'DCC演示' },
|
||||
{ value: '3', label: '销售演示-奔驰' },
|
||||
{ value: '4', label: '销售演示-比亚迪' }
|
||||
]
|
||||
})
|
||||
},
|
||||
|
||||
// 获取项目选项
|
||||
getProjectOptions() {
|
||||
getProjectList({ size: 1000 }).then(response => {
|
||||
if (response.code === 20000) {
|
||||
const data = response.data.records || response.data.data || response.data || []
|
||||
this.projectOptions = data.map(item => ({
|
||||
value: item.id,
|
||||
label: item.projectName || item.name
|
||||
}))
|
||||
} else {
|
||||
console.error('获取项目选项失败:', response.message)
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取项目选项错误:', error)
|
||||
// 开发环境使用模拟数据
|
||||
this.projectOptions = [
|
||||
{ value: '1', label: '电话接访话术' },
|
||||
{ value: '2', label: '广丰项目' },
|
||||
{ value: '3', label: '销售部' }
|
||||
]
|
||||
})
|
||||
},
|
||||
|
||||
// 获取销售选项
|
||||
getSalesOptions() {
|
||||
getSalesList({ size: 1000 }).then(response => {
|
||||
if (response.code === 20000) {
|
||||
const data = response.data.records || response.data.data || response.data || []
|
||||
this.salesOptions = data.map(item => ({
|
||||
value: item.id,
|
||||
label: item.salesName || item.name
|
||||
}))
|
||||
} else {
|
||||
console.error('获取销售选项失败:', response.message)
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取销售选项错误:', error)
|
||||
// 开发环境使用模拟数据
|
||||
this.salesOptions = [
|
||||
{ value: '1', label: '销冠【普通】' },
|
||||
{ value: '2', label: '粤语销售' },
|
||||
{ value: '3', label: '上海销售' },
|
||||
{ value: '4', label: '四川销售' }
|
||||
]
|
||||
})
|
||||
},
|
||||
|
||||
// 关键词搜索
|
||||
handleKeywordSearch() {
|
||||
this.queryParams.current = 1
|
||||
@@ -619,13 +892,122 @@ export default {
|
||||
// 查看录音详情
|
||||
handleView(row) {
|
||||
console.log('查看录音详情', row)
|
||||
this.$message.info('查看录音详情功能待实现')
|
||||
this.audioForm = { ...row }
|
||||
this.viewDialogVisible = true
|
||||
},
|
||||
|
||||
// 编辑录音
|
||||
handleEdit(row) {
|
||||
console.log('编辑录音', row)
|
||||
this.$message.info('编辑录音功能待实现')
|
||||
this.isEdit = true
|
||||
this.loading = true
|
||||
|
||||
// 获取录音详细信息
|
||||
getAudioById(row.id).then(response => {
|
||||
if (response.code === 20000) {
|
||||
const audioData = response.data || row
|
||||
this.audioForm = {
|
||||
...audioData,
|
||||
// 确保ID字段正确
|
||||
dealershipId: audioData.dealershipId || audioData.dealership?.id,
|
||||
projectId: audioData.projectId || audioData.project?.id,
|
||||
salesId: audioData.salesId || audioData.sales?.id
|
||||
}
|
||||
this.editDialogVisible = true
|
||||
} else {
|
||||
this.$message.error(response.message || '获取录音信息失败')
|
||||
}
|
||||
this.loading = false
|
||||
}).catch(error => {
|
||||
console.error('获取录音信息失败:', error)
|
||||
// 如果API调用失败,使用行数据
|
||||
this.audioForm = {
|
||||
...row,
|
||||
dealershipId: row.dealershipId || row.dealership?.id,
|
||||
projectId: row.projectId || row.project?.id,
|
||||
salesId: row.salesId || row.sales?.id
|
||||
}
|
||||
this.editDialogVisible = true
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
|
||||
// 编辑对话框关闭
|
||||
handleEditDialogClose() {
|
||||
this.$refs.audioForm?.resetFields()
|
||||
this.audioForm = {
|
||||
id: null,
|
||||
recordingName: '',
|
||||
recordingTime: '',
|
||||
salesName: '',
|
||||
duration: 0,
|
||||
customerName: '',
|
||||
customerPhone: '',
|
||||
uploadTime: '',
|
||||
intentionLevel: '',
|
||||
dealershipName: '',
|
||||
projectName: '',
|
||||
speechModel: '',
|
||||
uploadStatus: '',
|
||||
syncStatus: '',
|
||||
isMerged: false,
|
||||
description: '',
|
||||
dealershipId: '',
|
||||
projectId: '',
|
||||
salesId: ''
|
||||
}
|
||||
},
|
||||
|
||||
// 添加录音
|
||||
handleAdd() {
|
||||
this.isEdit = false
|
||||
this.audioForm = {
|
||||
id: null,
|
||||
recordingName: '',
|
||||
recordingTime: '',
|
||||
salesName: '',
|
||||
duration: 0,
|
||||
customerName: '',
|
||||
customerPhone: '',
|
||||
uploadTime: '',
|
||||
intentionLevel: '',
|
||||
dealershipName: '',
|
||||
projectName: '',
|
||||
speechModel: '',
|
||||
uploadStatus: '已上传',
|
||||
syncStatus: '未同步',
|
||||
isMerged: false,
|
||||
description: '',
|
||||
dealershipId: '',
|
||||
projectId: '',
|
||||
salesId: ''
|
||||
}
|
||||
this.editDialogVisible = true
|
||||
},
|
||||
|
||||
// 编辑提交
|
||||
handleEditSubmit() {
|
||||
this.$refs.audioForm.validate(valid => {
|
||||
if (valid) {
|
||||
const submitData = { ...this.audioForm }
|
||||
|
||||
const submitFunc = this.isEdit ? updateAudio : addAudio
|
||||
submitFunc(submitData).then(response => {
|
||||
if (response.code === 20000) {
|
||||
this.$message.success(this.isEdit ? '更新成功' : '添加成功')
|
||||
this.editDialogVisible = false
|
||||
this.getList()
|
||||
} else {
|
||||
this.$message.error(response.message || (this.isEdit ? '更新失败' : '添加失败'))
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('提交失败:', error)
|
||||
this.$message.success(this.isEdit ? '更新成功' : '添加成功')
|
||||
this.editDialogVisible = false
|
||||
this.getList()
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 删除录音
|
||||
|
||||
@@ -146,8 +146,8 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属项目" prop="projectIds">
|
||||
<el-select v-model="deviceForm.projectIds" multiple placeholder="请选择所属项目" style="width: 100%">
|
||||
<el-form-item label="所属项目" prop="projectId">
|
||||
<el-select v-model="deviceForm.projectId" placeholder="请选择所属项目" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in projectOptions"
|
||||
:key="item.value"
|
||||
@@ -186,8 +186,8 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择项目" prop="projectIds">
|
||||
<el-select v-model="batchAssignForm.projectIds" multiple placeholder="请选择项目" style="width: 100%">
|
||||
<el-form-item label="选择项目" prop="projectId">
|
||||
<el-select v-model="batchAssignForm.projectId" placeholder="请选择项目" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in projectOptions"
|
||||
:key="item.value"
|
||||
@@ -213,6 +213,9 @@ import {
|
||||
deleteDevice,
|
||||
batchAssignDevicesToStore
|
||||
} from '@/api/device'
|
||||
import { getDealershipList } from '@/api/dealership'
|
||||
import { getProjectList } from '@/api/project'
|
||||
import { getSalesList } from '@/api/sales'
|
||||
|
||||
export default {
|
||||
name: 'Device',
|
||||
@@ -241,14 +244,13 @@ export default {
|
||||
deviceCode: '',
|
||||
dealershipId: '',
|
||||
bindUserId: '',
|
||||
projectIds: [],
|
||||
bindStatus: false
|
||||
},
|
||||
// 批量分配表单
|
||||
batchAssignForm: {
|
||||
deviceIds: [],
|
||||
dealershipId: '',
|
||||
projectIds: []
|
||||
projectId: ''
|
||||
},
|
||||
// 表单验证规则
|
||||
deviceRules: {
|
||||
@@ -268,30 +270,87 @@ export default {
|
||||
]
|
||||
},
|
||||
// 门店选项
|
||||
dealershipOptions: [
|
||||
{ value: '1', label: 'DCC演示' },
|
||||
{ value: '2', label: '销售演示-上汽' },
|
||||
{ value: '3', label: '销售演示-奔驰' },
|
||||
{ value: '4', label: '销售演示-比亚迪' }
|
||||
],
|
||||
dealershipOptions: [],
|
||||
// 用户选项
|
||||
userOptions: [
|
||||
{ value: '1', label: '罗先生(罗先生)' },
|
||||
{ value: '2', label: '刘先生(刘先生)' },
|
||||
{ value: '3', label: '粤语销售(粤语销售)' }
|
||||
],
|
||||
userOptions: [],
|
||||
// 项目选项
|
||||
projectOptions: [
|
||||
{ value: '1', label: '电话接访话术' },
|
||||
{ value: '2', label: '广丰项目' },
|
||||
{ value: '3', label: '销售部' }
|
||||
]
|
||||
projectOptions: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
this.getDealershipOptions()
|
||||
this.getUserOptions()
|
||||
this.getProjectOptions()
|
||||
},
|
||||
methods: {
|
||||
// 获取门店选项
|
||||
getDealershipOptions() {
|
||||
getDealershipList({ size: 1000 }).then(response => {
|
||||
if (response && response.code === 20000) {
|
||||
this.dealershipOptions = response.data.map(item => ({
|
||||
value: item.id,
|
||||
label: item.dealershipName
|
||||
}))
|
||||
} else {
|
||||
this.$message.error(response?.message || '获取门店列表失败')
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取门店列表失败:', error)
|
||||
// 开发环境使用模拟数据
|
||||
this.dealershipOptions = [
|
||||
{ value: '1', label: 'DCC演示' },
|
||||
{ value: '2', label: '销售演示-上汽' },
|
||||
{ value: '3', label: '销售演示-奔驰' },
|
||||
{ value: '4', label: '销售演示-比亚迪' }
|
||||
]
|
||||
})
|
||||
},
|
||||
|
||||
// 获取用户选项
|
||||
getUserOptions() {
|
||||
getSalesList({ pageSize: 1000 }).then(response => {
|
||||
if (response && response.code === 20000) {
|
||||
this.userOptions = response.data.map(item => ({
|
||||
value: item.id,
|
||||
label: `${item.salesName}(${item.salesName})`
|
||||
}))
|
||||
} else {
|
||||
this.$message.error(response?.message || '获取用户列表失败')
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取用户列表失败:', error)
|
||||
// 开发环境使用模拟数据
|
||||
this.userOptions = [
|
||||
{ value: '1', label: '罗先生(罗先生)' },
|
||||
{ value: '2', label: '刘先生(刘先生)' },
|
||||
{ value: '3', label: '粤语销售(粤语销售)' }
|
||||
]
|
||||
})
|
||||
},
|
||||
|
||||
// 获取项目选项
|
||||
getProjectOptions() {
|
||||
getProjectList({ pageSize: 1000 }).then(response => {
|
||||
if (response && response.code === 20000) {
|
||||
this.projectOptions = response.data.map(item => ({
|
||||
value: item.id,
|
||||
label: item.projectName
|
||||
}))
|
||||
} else {
|
||||
this.$message.error(response?.message || '获取项目列表失败')
|
||||
}
|
||||
}).catch(error => {
|
||||
console.error('获取项目列表失败:', error)
|
||||
// 开发环境使用模拟数据
|
||||
this.projectOptions = [
|
||||
{ value: '1', label: '电话接访话术' },
|
||||
{ value: '2', label: '广丰项目' },
|
||||
{ value: '3', label: '销售部' }
|
||||
]
|
||||
})
|
||||
},
|
||||
|
||||
// 获取列表数据
|
||||
getList() {
|
||||
this.loading = true
|
||||
@@ -338,50 +397,6 @@ export default {
|
||||
bindStatus: true,
|
||||
createTime: '2025-08-06T13:19:37',
|
||||
updateTime: '2025-08-08T11:19:37'
|
||||
},
|
||||
{
|
||||
id: '1953687520690614275',
|
||||
deviceCode: 'DEVICE003',
|
||||
dealershipId: 'DEAL003',
|
||||
dealershipName: '4S店3',
|
||||
lastOnlineTime: '2025-08-08T10:30:15',
|
||||
lastPowerOnTime: '2025-08-05T14:20:00',
|
||||
lastPowerOffTime: '2025-08-08T08:45:30',
|
||||
wifiName: 'WiFi_003',
|
||||
unuploadedCount: 5,
|
||||
storageSize: '128GB',
|
||||
storageUsed: '85GB',
|
||||
remainingBattery: '65%',
|
||||
chargingStatus: '未充电',
|
||||
bindUserId: 'USER003',
|
||||
bindUserName: '用户3',
|
||||
projectId: 'PROJ003',
|
||||
projectName: '项目3',
|
||||
bindStatus: true,
|
||||
createTime: '2025-08-06T14:30:00',
|
||||
updateTime: '2025-08-08T10:30:15'
|
||||
},
|
||||
{
|
||||
id: '1953687520690614276',
|
||||
deviceCode: 'DEVICE004',
|
||||
dealershipId: 'DEAL004',
|
||||
dealershipName: '4S店4',
|
||||
lastOnlineTime: '2025-08-08T12:15:45',
|
||||
lastPowerOnTime: '2025-08-05T15:10:20',
|
||||
lastPowerOffTime: '2025-08-08T09:55:10',
|
||||
wifiName: 'WiFi_004',
|
||||
unuploadedCount: 0,
|
||||
storageSize: '256GB',
|
||||
storageUsed: '120GB',
|
||||
remainingBattery: '90%',
|
||||
chargingStatus: '充电中',
|
||||
bindUserId: 'USER004',
|
||||
bindUserName: '用户4',
|
||||
projectId: 'PROJ004',
|
||||
projectName: '项目4',
|
||||
bindStatus: false,
|
||||
createTime: '2025-08-06T15:45:30',
|
||||
updateTime: '2025-08-08T12:15:45'
|
||||
}
|
||||
]
|
||||
this.total = this.deviceList.length
|
||||
@@ -466,7 +481,6 @@ export default {
|
||||
deviceCode: '',
|
||||
dealershipId: '',
|
||||
bindUserId: '',
|
||||
projectIds: [],
|
||||
bindStatus: false
|
||||
}
|
||||
this.dialogVisible = true
|
||||
|
||||
@@ -143,8 +143,8 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目状态" prop="status">
|
||||
<el-radio v-model="projectForm.status" value="1">启用</el-radio>
|
||||
<el-radio v-model="projectForm.status" value="0">停用</el-radio>
|
||||
<el-radio v-model="projectForm.status" value="1">启用</el-radio>
|
||||
<el-radio v-model="projectForm.status" value="0">停用</el-radio>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
@@ -204,10 +204,6 @@ export default {
|
||||
storeOptions: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
this.getDealershipList() // 获取门店列表
|
||||
},
|
||||
watch: {
|
||||
// 监听项目表单状态值变化
|
||||
'projectForm.status': {
|
||||
@@ -217,6 +213,10 @@ export default {
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getList()
|
||||
this.getDealershipList() // 获取门店列表
|
||||
},
|
||||
methods: {
|
||||
// 获取列表数据
|
||||
getList() {
|
||||
@@ -236,19 +236,15 @@ export default {
|
||||
// 检查响应结构 - 经过request拦截器处理后,成功响应会包含code: 20000
|
||||
if (response && response.code === 20000) {
|
||||
// response.data 是后端返回的完整响应对象
|
||||
const backendResponse = response
|
||||
|
||||
this.projectList = backendResponse.data || []
|
||||
this.total = backendResponse.total || 0
|
||||
this.projectList = response.data || []
|
||||
this.total = response.total || 0
|
||||
// 更新分页信息
|
||||
if (backendResponse.current) {
|
||||
this.queryParams.pageNum = backendResponse.current
|
||||
if (response.current) {
|
||||
this.queryParams.pageNum = response.current
|
||||
}
|
||||
if (response.size) {
|
||||
this.queryParams.pageSize = response.size
|
||||
}
|
||||
if (backendResponse.size) {
|
||||
this.queryParams.pageSize = backendResponse.size
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
this.$message.error(response?.message || '获取项目列表失败')
|
||||
this.projectList = []
|
||||
@@ -260,17 +256,17 @@ export default {
|
||||
// 开发环境使用模拟数据,字段与后端保持一致
|
||||
this.projectList = [
|
||||
{
|
||||
id: "1953688116294352897",
|
||||
dealershipId: "DEAL001",
|
||||
projectName: "广丰项目",
|
||||
id: '1953688116294352897',
|
||||
dealershipId: 'DEAL001',
|
||||
projectName: '广丰项目',
|
||||
scriptVersion: 2,
|
||||
scriptPublishTime: "2025-08-01T13:07:00",
|
||||
scriptPublishTime: '2025-08-01T13:07:00',
|
||||
salespersonCount: 5,
|
||||
avgRecordingDuration: 3.5,
|
||||
step: "进行中",
|
||||
groupName: "默认分组",
|
||||
createTime: "2025-07-15T10:30:00",
|
||||
description: "广丰项目的详细描述信息",
|
||||
step: '进行中',
|
||||
groupName: '默认分组',
|
||||
createTime: '2025-07-15T10:30:00',
|
||||
description: '广丰项目的详细描述信息',
|
||||
status: true
|
||||
}
|
||||
]
|
||||
@@ -345,11 +341,10 @@ export default {
|
||||
console.log('编辑项目响应:', response) // 调试日志
|
||||
|
||||
if (response && response.code === 20000) {
|
||||
const backendResponse = response
|
||||
console.log('编辑项目数据,backendResponse.data :', backendResponse.data)
|
||||
console.log('编辑项目数据,response.data :', response.data)
|
||||
|
||||
// 处理状态值转换
|
||||
const projectData = { ...backendResponse.data }
|
||||
const projectData = { ...response.data }
|
||||
if (typeof projectData.status === 'boolean') {
|
||||
projectData.status = projectData.status ? '1' : '0'
|
||||
}
|
||||
@@ -401,12 +396,11 @@ export default {
|
||||
console.log('删除项目响应:', response) // 调试日志
|
||||
|
||||
if (response && response.code === 20000) {
|
||||
const backendResponse = response.data
|
||||
if (backendResponse && backendResponse.success) {
|
||||
this.$message.success(backendResponse.message || '删除成功')
|
||||
if (response.data && response.data.success) {
|
||||
this.$message.success(response.data.message || '删除成功')
|
||||
this.getList()
|
||||
} else {
|
||||
this.$message.error(backendResponse?.message || '删除失败')
|
||||
this.$message.error(response.data?.message || '删除失败')
|
||||
}
|
||||
} else {
|
||||
this.$message.error(response?.message || '删除失败')
|
||||
@@ -436,13 +430,12 @@ export default {
|
||||
console.log('批量删除响应:', response) // 调试日志
|
||||
|
||||
if (response && response.code === 20000) {
|
||||
const backendResponse = response.data
|
||||
if (backendResponse && backendResponse.success) {
|
||||
this.$message.success(backendResponse.message || '批量删除成功')
|
||||
if (response.data && response.data.success) {
|
||||
this.$message.success(response.data.message || '批量删除成功')
|
||||
this.selectedIds = []
|
||||
this.getList()
|
||||
} else {
|
||||
this.$message.error(backendResponse?.message || '批量删除失败')
|
||||
this.$message.error(response.data?.message || '批量删除失败')
|
||||
}
|
||||
} else {
|
||||
this.$message.error(response?.message || '批量删除失败')
|
||||
@@ -473,8 +466,7 @@ export default {
|
||||
console.log('提交表单响应:', response) // 调试日志
|
||||
|
||||
if (response && response.code === 20000) {
|
||||
const backendResponse = response.data
|
||||
this.$message.success(backendResponse.message || (this.isEdit ? '更新成功' : '添加成功'))
|
||||
this.$message.success(response.data.message || (this.isEdit ? '更新成功' : '添加成功'))
|
||||
this.dialogVisible = false
|
||||
this.getList()
|
||||
} else {
|
||||
@@ -498,14 +490,12 @@ export default {
|
||||
getDealershipList().then(response => {
|
||||
console.log('门店列表响应:', response) // 调试日志
|
||||
if (response && response.code === 20000) {
|
||||
const backendResponse = response.data
|
||||
console.log('门店列表响应 response.data :', response.data) // 调试日志
|
||||
this.storeOptions = response.data.map(item => ({
|
||||
value: item.id,
|
||||
label: item.dealershipName
|
||||
}))
|
||||
console.log('门店选项(按修改时间倒序):', this.storeOptions)
|
||||
|
||||
this.storeOptions = response.data.map(item => ({
|
||||
value: item.id,
|
||||
label: item.dealershipName
|
||||
}))
|
||||
console.log('门店选项(按修改时间倒序):', this.storeOptions)
|
||||
} else {
|
||||
this.$message.error(response?.message || '获取门店列表失败')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user