|
|
|
@ -1,24 +1,28 @@ |
|
|
|
<template> |
|
|
|
<el-dialog v-model="showDialog" :title="formData.id ? t('updateCustomerResources') : t('addCustomerResources')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true"> |
|
|
|
<el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading"> |
|
|
|
<el-form-item :label="t('createYearMonth')" prop="create_year_month"> |
|
|
|
<el-input v-model="formData.create_year_month" clearable :placeholder="t('createYearMonthPlaceholder')" class="input-width" /> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('createDate')" prop="create_date"> |
|
|
|
<el-input v-model="formData.create_date" clearable :placeholder="t('createDatePlaceholder')" class="input-width" /> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('sourceChannel')" prop="source_channel"> |
|
|
|
<el-input v-model="formData.source_channel" clearable :placeholder="t('sourceChannelPlaceholder')" class="input-width" /> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('source')" prop="source"> |
|
|
|
<el-input v-model="formData.source" clearable :placeholder="t('sourcePlaceholder')" class="input-width" /> |
|
|
|
<el-select class="input-width" v-model="formData.source" clearable :placeholder="t('sourcePlaceholder')"> |
|
|
|
<el-option label="请选择" value=""></el-option> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in sourceList" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('consultant')" prop="consultant"> |
|
|
|
<el-input v-model="formData.consultant" clearable :placeholder="t('consultantPlaceholder')" class="input-width" /> |
|
|
|
<el-form-item :label="t('sourceChannel')" > |
|
|
|
<el-select class="input-width" v-model="formData.source_channel" clearable :placeholder="t('sourceChannelPlaceholder')"> |
|
|
|
<el-option label="请选择" value=""></el-option> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in source_channelList" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('name')" prop="name"> |
|
|
|
@ -26,11 +30,19 @@ |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('age')" prop="age"> |
|
|
|
<el-input v-model="formData.age" clearable :placeholder="t('agePlaceholder')" class="input-width" /> |
|
|
|
<el-input-number v-model="formData.age" clearable :placeholder="t('agePlaceholder')" class="input-width" :min = "3" max = "80" /> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('gender')" prop="gender"> |
|
|
|
<el-input v-model="formData.gender" clearable :placeholder="t('genderPlaceholder')" class="input-width" /> |
|
|
|
<el-select class="input-width" v-model="formData.gender" clearable :placeholder="t('genderPlaceholder')"> |
|
|
|
<el-option label="请选择" value=""></el-option> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in genderList" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('phoneNumber')" prop="phone_number"> |
|
|
|
@ -38,21 +50,42 @@ |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('demand')" prop="demand"> |
|
|
|
<el-input v-model="formData.demand" clearable :placeholder="t('demandPlaceholder')" class="input-width" /> |
|
|
|
<el-input v-model="formData.demand" type="textarea" rows="4" clearable :placeholder="t('demandPlaceholder')" class="input-width"/> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('purchasingPower')" prop="purchasing_power"> |
|
|
|
<el-input v-model="formData.purchasing_power" clearable :placeholder="t('purchasingPowerPlaceholder')" class="input-width" /> |
|
|
|
<el-select class="input-width" v-model="formData.purchasing_power" clearable :placeholder="t('purchasingPowerPlaceholder')"> |
|
|
|
<el-option label="请选择" value=""></el-option> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in purchasing_powerList" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('cognitiveIdea')" prop="cognitive_idea"> |
|
|
|
<el-input v-model="formData.cognitive_idea" clearable :placeholder="t('cognitiveIdeaPlaceholder')" class="input-width" /> |
|
|
|
<el-select class="input-width" v-model="formData.cognitive_idea" clearable :placeholder="t('cognitiveIdeaPlaceholder')"> |
|
|
|
<el-option label="请选择" value=""></el-option> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in cognitive_ideaList" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('optionalClassTime')" prop="optional_class_time"> |
|
|
|
<el-input v-model="formData.optional_class_time" clearable :placeholder="t('optionalClassTimePlaceholder')" class="input-width" /> |
|
|
|
<el-form-item :label="t('optionalClassTime')" prop="optional_class_time" class="input-width"> |
|
|
|
<el-date-picker |
|
|
|
class="flex-1 !flex" |
|
|
|
v-model="formData.optional_class_time" |
|
|
|
clearable |
|
|
|
type="datetime" |
|
|
|
value-format="YYYY-MM-DD HH:mm:ss" |
|
|
|
:placeholder="t('optionalClassTimePlaceholder')"> |
|
|
|
</el-date-picker> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('distance')" prop="distance"> |
|
|
|
<el-input v-model="formData.distance" clearable :placeholder="t('distancePlaceholder')" class="input-width" /> |
|
|
|
</el-form-item> |
|
|
|
@ -62,13 +95,33 @@ |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('initialIntent')" prop="initial_intent"> |
|
|
|
<el-input v-model="formData.initial_intent" clearable :placeholder="t('initialIntentPlaceholder')" class="input-width" /> |
|
|
|
<el-select class="input-width" v-model="formData.initial_intent" clearable :placeholder="t('initialIntentPlaceholder')"> |
|
|
|
<el-option label="请选择" value=""></el-option> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in initial_intentList" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('campus')" prop="campus"> |
|
|
|
<el-input v-model="formData.campus" clearable :placeholder="t('campusPlaceholder')" class="input-width" /> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item :label="t('status')" prop="status"> |
|
|
|
<el-select class="input-width" v-model="formData.status" clearable :placeholder="t('statusPlaceholder')"> |
|
|
|
<el-option label="请选择" value=""></el-option> |
|
|
|
<el-option |
|
|
|
v-for="(item, index) in statusList" |
|
|
|
:key="index" |
|
|
|
:label="item.name" |
|
|
|
:value="item.value" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
</el-form> |
|
|
|
|
|
|
|
<template #footer> |
|
|
|
@ -97,11 +150,8 @@ const loading = ref(false) |
|
|
|
*/ |
|
|
|
const initialFormData = { |
|
|
|
id: '', |
|
|
|
create_year_month: '', |
|
|
|
create_date: '', |
|
|
|
source_channel: '', |
|
|
|
source: '', |
|
|
|
consultant: '', |
|
|
|
source_channel: '', |
|
|
|
name: '', |
|
|
|
age: '', |
|
|
|
gender: '', |
|
|
|
@ -114,6 +164,7 @@ const initialFormData = { |
|
|
|
decision_maker: '', |
|
|
|
initial_intent: '', |
|
|
|
campus: '', |
|
|
|
status: '', |
|
|
|
} |
|
|
|
const formData: Record<string, any> = reactive({ ...initialFormData }) |
|
|
|
|
|
|
|
@ -122,28 +173,13 @@ const formRef = ref<FormInstance>() |
|
|
|
// 表单验证规则 |
|
|
|
const formRules = computed(() => { |
|
|
|
return { |
|
|
|
create_year_month: [ |
|
|
|
{ required: true, message: t('createYearMonthPlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
] |
|
|
|
, |
|
|
|
create_date: [ |
|
|
|
{ required: true, message: t('createDatePlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
] |
|
|
|
, |
|
|
|
source_channel: [ |
|
|
|
{ required: true, message: t('sourceChannelPlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
] |
|
|
|
, |
|
|
|
source: [ |
|
|
|
{ required: true, message: t('sourcePlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
] |
|
|
|
, |
|
|
|
consultant: [ |
|
|
|
{ required: true, message: t('consultantPlaceholder'), trigger: 'blur' }, |
|
|
|
source_channel: [ |
|
|
|
{ required: true, message: t('sourceChannelPlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
] |
|
|
|
, |
|
|
|
@ -154,7 +190,7 @@ const formRules = computed(() => { |
|
|
|
, |
|
|
|
age: [ |
|
|
|
{ required: true, message: t('agePlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
{ validator: (rule: any, value: string, callback: any) => { if (value && !/^\d{3,80}$/.test(value)) { callback(new Error(t('generateBetween')))} else { callback() }}}, |
|
|
|
] |
|
|
|
, |
|
|
|
gender: [ |
|
|
|
@ -205,6 +241,11 @@ const formRules = computed(() => { |
|
|
|
campus: [ |
|
|
|
{ required: true, message: t('campusPlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
] |
|
|
|
, |
|
|
|
status: [ |
|
|
|
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' }, |
|
|
|
|
|
|
|
] |
|
|
|
, |
|
|
|
} |
|
|
|
@ -238,7 +279,48 @@ const confirm = async (formEl: FormInstance | undefined) => { |
|
|
|
} |
|
|
|
|
|
|
|
// 获取字典数据 |
|
|
|
|
|
|
|
let sourceList = ref([]) |
|
|
|
const sourceDictList = async () => { |
|
|
|
sourceList.value = await (await useDictionary('source')).data.dictionary |
|
|
|
} |
|
|
|
sourceDictList(); |
|
|
|
watch(() => sourceList.value, () => { formData.source = sourceList.value[0].value }) |
|
|
|
let source_channelList = ref([]) |
|
|
|
const source_channelDictList = async () => { |
|
|
|
source_channelList.value = await (await useDictionary('SourceChannel')).data.dictionary |
|
|
|
} |
|
|
|
source_channelDictList(); |
|
|
|
watch(() => source_channelList.value, () => { formData.source_channel = source_channelList.value[0].value }) |
|
|
|
let genderList = ref([]) |
|
|
|
const genderDictList = async () => { |
|
|
|
genderList.value = await (await useDictionary('zy_sex')).data.dictionary |
|
|
|
} |
|
|
|
genderDictList(); |
|
|
|
watch(() => genderList.value, () => { formData.gender = genderList.value[0].value }) |
|
|
|
let purchasing_powerList = ref([]) |
|
|
|
const purchasing_powerDictList = async () => { |
|
|
|
purchasing_powerList.value = await (await useDictionary('customer_purchasing_power')).data.dictionary |
|
|
|
} |
|
|
|
purchasing_powerDictList(); |
|
|
|
watch(() => purchasing_powerList.value, () => { formData.purchasing_power = purchasing_powerList.value[0].value }) |
|
|
|
let cognitive_ideaList = ref([]) |
|
|
|
const cognitive_ideaDictList = async () => { |
|
|
|
cognitive_ideaList.value = await (await useDictionary('cognitive_concept')).data.dictionary |
|
|
|
} |
|
|
|
cognitive_ideaDictList(); |
|
|
|
watch(() => cognitive_ideaList.value, () => { formData.cognitive_idea = cognitive_ideaList.value[0].value }) |
|
|
|
let initial_intentList = ref([]) |
|
|
|
const initial_intentDictList = async () => { |
|
|
|
initial_intentList.value = await (await useDictionary('preliminarycustomerintention')).data.dictionary |
|
|
|
} |
|
|
|
initial_intentDictList(); |
|
|
|
watch(() => initial_intentList.value, () => { formData.initial_intent = initial_intentList.value[0].value }) |
|
|
|
let statusList = ref([]) |
|
|
|
const statusDictList = async () => { |
|
|
|
statusList.value = await (await useDictionary('kh_status')).data.dictionary |
|
|
|
} |
|
|
|
statusDictList(); |
|
|
|
watch(() => statusList.value, () => { formData.status = statusList.value[0].value }) |
|
|
|
|
|
|
|
|
|
|
|
const setFormData = async (row: any = null) => { |
|
|
|
|