feat(销售页面): 优化表单数据显示逻辑并添加二级顶部API
重构RawDataCards组件表单数据显示逻辑,支持两种不同格式的数据源 在sale.vue中添加表单数据加载功能并传递给子组件 添加secondTop.js包含二级顶部页面所需的所有API接口 调整SalesTimelineWithTaskList.vue中的未到课显示文案
This commit is contained in:
@@ -113,6 +113,10 @@ const props = defineProps({
|
||||
selectedContact: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
formInfo: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
|
||||
@@ -121,26 +125,59 @@ const activeTab = ref('chat')
|
||||
|
||||
// 表单字段数据
|
||||
const formFields = computed(() => {
|
||||
const contact = props.selectedContact
|
||||
if (!contact || !contact.details) {
|
||||
const formData = props.formInfo
|
||||
if (!formData || Object.keys(formData).length === 0) {
|
||||
return [
|
||||
{ label: '姓名', value: '暂无数据' },
|
||||
{ label: '联系方式', value: '暂无数据' },
|
||||
{ label: '意向课程', value: '暂无数据' },
|
||||
{ label: '预算范围', value: '暂无数据' }
|
||||
{ label: '孩子信息', value: '暂无数据' },
|
||||
{ label: '地区', value: '暂无数据' }
|
||||
]
|
||||
}
|
||||
|
||||
return [
|
||||
{ label: '客户姓名', value: contact.name || '暂无' },
|
||||
{ label: '孩子姓名', value: contact.details.childName || '暂无' },
|
||||
{ label: '孩子年龄', value: contact.details.childAge ? `${contact.details.childAge}岁` : '暂无' },
|
||||
{ label: '关注问题', value: contact.details.concerns?.join('、') || '暂无' },
|
||||
{ label: '预算范围', value: contact.details.budget || '暂无' },
|
||||
{ label: '偏好时间', value: contact.details.preferredTime || '暂无' },
|
||||
{ label: '销售阶段', value: contact.salesStage || '暂无' },
|
||||
{ label: '健康度', value: contact.health ? `${contact.health}%` : '暂无' }
|
||||
// 检查是否为第一种格式(包含name, mobile等字段)
|
||||
if (formData.name || formData.mobile || formData.child_name) {
|
||||
const fields = [
|
||||
{ label: '客户姓名', value: formData.name || '暂无' },
|
||||
{ label: '联系方式', value: formData.mobile || '暂无' },
|
||||
{ label: '孩子姓名', value: formData.child_name || '暂无' },
|
||||
{ label: '孩子性别', value: formData.child_gender || '暂无' },
|
||||
{ label: '孩子教育', value: formData.child_education || '暂无' },
|
||||
{ label: '关系', value: formData.child_relation || '暂无' },
|
||||
{ label: '职业', value: formData.occupation || '暂无' },
|
||||
{ label: '地区', value: formData.territory || '暂无' }
|
||||
]
|
||||
|
||||
// 如果有additional_info,添加前3个问题
|
||||
if (formData.additional_info && Array.isArray(formData.additional_info)) {
|
||||
formData.additional_info.slice(0, 3).forEach((item, index) => {
|
||||
fields.push({
|
||||
label: `问题${index + 1}`,
|
||||
value: `${item.topic}: ${item.answer}`
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return fields
|
||||
}
|
||||
|
||||
// 第二种格式(expandXXX字段)
|
||||
const fields = [
|
||||
{ label: '孩子姓名', value: formData.expandTwentyNine || '暂无' },
|
||||
{ label: '孩子性别', value: formData.expandTwentyFive || '暂无' },
|
||||
{ label: '孩子教育', value: formData.expandTwo || '暂无' },
|
||||
{ label: '关系', value: formData.expandTwentyOne || '暂无' },
|
||||
{ label: '职业', value: formData.expandOne || '暂无' },
|
||||
{ label: '学习状态', value: formData.expandFive || '暂无' },
|
||||
{ label: '沟通情况', value: formData.expandEight || '暂无' },
|
||||
{ label: '主要问题', value: formData.expandTwentySeven || '暂无' },
|
||||
{ label: '关注领域', value: formData.expandFifteen || '暂无' },
|
||||
{ label: '学习成绩', value: formData.expandFourteen || '暂无' },
|
||||
{ label: '孩子数量', value: formData.expandTwenty || '暂无' },
|
||||
{ label: '预期时间', value: formData.expandThirty || '暂无' }
|
||||
]
|
||||
|
||||
return fields.filter(field => field.value !== '暂无' && field.value !== null)
|
||||
})
|
||||
|
||||
// 聊天数据
|
||||
@@ -371,7 +408,7 @@ const callRecords = computed(() => {
|
||||
|
||||
.tab-content {
|
||||
min-height: 300px;
|
||||
max-height: 400px;
|
||||
max-height: 450px;
|
||||
overflow-y: auto;
|
||||
|
||||
.content-header {
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
</div>
|
||||
<div class="course-details-content">
|
||||
<div v-if="!selectedContactDetails.class_situation || Object.keys(selectedContactDetails.class_situation).length === 0" class="no-data">
|
||||
暂无到课记录
|
||||
未到课
|
||||
</div>
|
||||
<div v-else class="course-lessons">
|
||||
<div
|
||||
@@ -300,7 +300,7 @@ const getAttendedLessons = (classSituation, classNum) => {
|
||||
}
|
||||
|
||||
// 如果没有 class_num,则使用 class_situation
|
||||
if (!classSituation) return '暂无到课记录';
|
||||
if (!classSituation) return '未到课';
|
||||
|
||||
if (Array.isArray(classSituation)) {
|
||||
return classSituation.join(' ');
|
||||
@@ -310,10 +310,10 @@ const getAttendedLessons = (classSituation, classNum) => {
|
||||
.map(key => parseInt(key))
|
||||
.filter(num => !isNaN(num))
|
||||
.sort((a, b) => a - b);
|
||||
return lessonNumbers.length > 0 ? lessonNumbers.join(' ') : '暂无到课记录';
|
||||
return lessonNumbers.length > 0 ? lessonNumbers.join(' ') : '未到课';
|
||||
}
|
||||
|
||||
return '暂无到课记录';
|
||||
return '未到课';
|
||||
};
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user