From 0afb57d7f1d071195c6f0dff119e03d1e6392c21 Mon Sep 17 00:00:00 2001 From: xpz2018 <107107461@qq.com> Date: Thu, 10 Jul 2025 16:26:21 +0800 Subject: [PATCH] no message --- src/api/clue/index.ts | 10 +++ src/enums/customerEnum.ts | 88 ++++++++++++++++++++++++++ src/views/clue/components/data.ts | 28 ++++----- src/views/clue/customer/data.ts | 94 +++++++++++++++++++++++----- src/views/clue/customer/index.vue | 100 +++++++++++++++++++++++++++--- src/views/clue/customer/modal.vue | 64 +++++++++++++++++++ 6 files changed, 345 insertions(+), 39 deletions(-) create mode 100644 src/views/clue/customer/modal.vue diff --git a/src/api/clue/index.ts b/src/api/clue/index.ts index 7cbaf25..6f54f21 100644 --- a/src/api/clue/index.ts +++ b/src/api/clue/index.ts @@ -71,3 +71,13 @@ export const getSeasList = (params: any) => params, }) + +export const getStoreTeam = (params: any) => defHttp.get({ url: '/dating-agency-uec/user/list/dating-store-team', params}) + +export const getAppointmentList = (params: any) => defHttp.get({ url: '/dating-clue-service/user/list/dating-store-appointment', params}) + +export const createAppointment = (params: any) => defHttp.post({ url: '/dating-clue-service/user/create/dating-store-appointment/by-telemarketer', params }) + +export const editAppointment = (params: any) => defHttp.post({ url: '/dating-clue-service/user/edit/dating-store-appointment/by-telemarketer', params }) + +export const evaluateService = (params: any) => defHttp.post({ url: '/dating-clue-service/user/evaluate/custom-service', params }) \ No newline at end of file diff --git a/src/enums/customerEnum.ts b/src/enums/customerEnum.ts index e1b48a3..fa6c91d 100644 --- a/src/enums/customerEnum.ts +++ b/src/enums/customerEnum.ts @@ -97,4 +97,92 @@ export const marriageList = [ { label: '2年内', value: 2 }, { label: '3年内', value: 3 }, { label: '先恋爱', value: 4 }, +] + +export const storeAppointmentStatus = [ + { label: '待到店', value: 1 }, + { label: '已到店', value: 2 }, + { label: '未到店', value: 3 }, +] + + +export const femaleAgeList = [ + { label: '20-28岁未婚', value: 1 }, + { label: '28-32岁未婚', value: 2 }, + { label: '32-35岁或30岁以下离异不带娃', value: 3 }, + { label: '36-40岁或30岁以上离异带娃', value: 4 }, + { label: '40-45岁或31岁以上离异带娃', value: 5 }, + { label: '45岁以上或40岁以上离异带娃', value: 6 }, +] + +export const femaleAnnualIncomeList = [ + { label: '10w以下', value: 1 }, + { label: '15w/或净资产50万以上', value: 2 }, + { label: '25w/或净资产200万以上', value: 3 }, + { label: '50w/或净资产500万以上', value: 4 }, + { label: '80w/或净资产1000万以上', value: 5 }, + { label: '100w/资产2000万以上', value: 6 }, +] + +export const femaleAppearanceList = [ + { label: '六分', value: 1 }, + { label: '七分', value: 2 }, + { label: '八分', value: 3 }, + { label: '九分', value: 4 }, + { label: '五官或身体有轻微缺陷', value: 5 }, + { label: '五官或身体有中度以上缺陷', value: 6 }, +] + +export const femaleHeightList = [ + { label: '150cm-154cm', value: 1 }, + { label: '155cm-159cm', value: 2 }, + { label: '160cm-167cm', value: 3 }, + { label: '168cm-171cm', value: 4 }, + { label: '172cm-179cm', value: 5 }, + { label: '低于150cm,或高于180cm,或者有肥胖症的,或对生理、身体相关有特殊要求的', value: 6 }, +] + +export const maleAgeList = [ + { label: '20-28岁未婚', value: 1 }, + { label: '28-35岁未婚', value: 2 }, + { label: '35-40岁或35岁以下离异不带娃', value: 3 }, + { label: '40-45岁或35岁以上离异带娃', value: 4 }, + { label: '45岁-50岁或40岁以上离异带娃', value: 5 }, + { label: '50岁以上或45岁以上离异带娃', value: 6 }, +] + +export const maleAnnualIncomeList = [ + { label: '10w以下', value: 1 }, + { label: '30w/或净资产200万以上', value: 2 }, + { label: '50w/或净资产500万以上', value: 3 }, + { label: '100w/或净资产1000万以上', value: 4 }, + { label: '500w/或净资产5000万以上', value: 5 }, + { label: '1000w/或资产过亿', value: 6 }, +] + +export const maleAppearanceList = [ + { label: '六分', value: 1 }, + { label: '七分', value: 2 }, + { label: '八分', value: 3 }, + { label: '九分', value: 4 }, + { label: '五官或身体有轻微缺陷', value: 5 }, + { label: '五官或身体有中度以上缺陷', value: 6 }, +] + +export const maleEducationList = [ + { label: '高中', value: 1 }, + { label: '大专', value: 2 }, + { label: '本科', value: 3 }, + { label: '211/硕士以上', value: 4 }, + { label: '普通985/博士以上', value: 5 }, + { label: '国内top10或海外名校', value: 6 }, +] + +export const maleHeightList = [ + { label: '160cm-164cm', value: 1 }, + { label: '165cm-174cm', value: 2 }, + { label: '175cm-179cm', value: 3 }, + { label: '180cm-184cm', value: 4 }, + { label: '185cm-194cm', value: 5 }, + { label: '低于160cm,或高于195cm,或者有肥胖症的,或对生理、身体相关有特殊要求的', value: 6 }, ] \ No newline at end of file diff --git a/src/views/clue/components/data.ts b/src/views/clue/components/data.ts index 5510af3..f5c0a95 100644 --- a/src/views/clue/components/data.ts +++ b/src/views/clue/components/data.ts @@ -278,31 +278,27 @@ export const modalFormSchema: FormSchema[] = [ // }, // }, { - field: 'propertyPermitsCode', + field: 'housePurchase', label: '购房情况', colProps: { span: 8 }, - component: 'ApiSelect', + component: 'Select', componentProps: { - labelField: 'desc', - api: getPropertyPermits, - getPopupContainer: () => document.body, - onChange: (_: any, v: any) => { - basicInfoData.value.propertyPermits = v?.label - }, + options: [ + { label: '已购房', value: 1 }, + { label: '未购房', value: 0 }, + ], }, }, { - field: 'carPurchaseSituationCode', + field: 'carPurchase', label: '购车情况', colProps: { span: 8 }, - component: 'ApiSelect', + component: 'Select', componentProps: { - labelField: 'desc', - api: getCarPurchaseSituation, - getPopupContainer: () => document.body, - onChange: (_: any, v: any) => { - basicInfoData.value.carPurchaseSituation = v?.label - }, + options: [ + { label: '已购车', value: 1 }, + { label: '未购车', value: 0 }, + ], }, }, { diff --git a/src/views/clue/customer/data.ts b/src/views/clue/customer/data.ts index 6326665..b6b0c61 100644 --- a/src/views/clue/customer/data.ts +++ b/src/views/clue/customer/data.ts @@ -2,7 +2,7 @@ import { useAddressData } from '/@/hooks/common' import { ref } from 'vue' import dayjs, { Dayjs } from 'dayjs' import { FormSchema } from '/@/components/Form' -import { genderList, followTypeList, followStageList, paymentList, marriageList } from '/@/enums/customerEnum' +import { genderList, followTypeList, followStageList, paymentList, marriageList, storeAppointmentStatus } from '/@/enums/customerEnum' import { getIncomeList, getNationList, @@ -18,6 +18,8 @@ import { getCarPurchaseSituation, } from '/@/api/essentialData' +import { getStoreTeam } from '/@/api/clue' + // 基础信息的额外数据 export const basicInfoMoreData = ref({}) // 获取地区数据 @@ -266,29 +268,25 @@ export const basicSchema: FormSchema[] = [ { field: 'housePurchase', label: '购房情况', - component: 'ApiSelect', + component: 'Select', colProps: { span: 8 }, componentProps: { - labelField: 'desc', - api: getPropertyPermits, - getPopupContainer: () => document.body, - onChange: (_: any, v: any) => { - basicInfoMoreData.value.propertyPermits = v?.label - }, + options: [ + { label: '已购房', value: 1 }, + { label: '未购房', value: 0 }, + ], }, }, { field: 'carPurchase', label: '购车情况', - component: 'ApiSelect', + component: 'Select', colProps: { span: 8 }, componentProps: { - labelField: 'desc', - api: getCarPurchaseSituation, - getPopupContainer: () => document.body, - onChange: (_: any, v: any) => { - basicInfoMoreData.value.carPurchaseSituation = v?.label - }, + options: [ + { label: '已购车', value: 1 }, + { label: '未购车', value: 0 }, + ], }, }, { @@ -364,4 +362,70 @@ export const modalFormSchema: FormSchema[] = [ }, }, }, +] + +export const appointmentFormSchema: FormSchema[] = [ + { + field: 'datingStoreOrgId', + label: '预约门店', + component: 'ApiSelect', + required: true, + componentProps: { + valueField: 'orgId', + labelField: 'orgName', + api: getStoreTeam, + }, + }, + { + label: '预约到店时间', + component: 'DatePicker', + field: 'appointmentTime', + required: true, + componentProps: { + showTime: true, + style: { width: '100%' }, + }, + }, + { + field: 'remark', + label: '备注', + required: false, + component: 'InputTextArea', + componentProps: { + autosize: { + minRows: 4, + }, + }, + }, +] + +import { BasicColumn } from '/@/components/Table' +export const tableColumns: BasicColumn[] = [ + // { width: 70, title: '性别', dataIndex: 'genderCode', customRender: ({ text }) => { return genderList.find((find) => find.value === text)?.label} }, + { title: '门店', dataIndex: 'datingStoreOrgName' }, + // { width: 100, title: '渠道来源', dataIndex: 'channelType', + // customRender: ({ text }) => { + // return channelList.find((find) => find.value === text)?.label + // }, + // }, + { title: '预约到店时间', dataIndex: 'appointmentTime' }, + { title: '到店状态', dataIndex: 'datingStoreAppointmentStatus', + customRender: ({ text }) => { + return storeAppointmentStatus.find((find) => find.value === text)?.label + }, + }, + { title: '销售', dataIndex: 'salesConsultantName' }, + { title: '电邀人', dataIndex: 'telemarketerName' }, + // { width: 100, title: '跟进状态', dataIndex: 'followStatus', + // customRender: ({ text }) => { + // return followStatusList.find((find) => find.value === text)?.label + // }, + // }, + { title: '电邀团队', dataIndex: 'teleInvitationOrgName' }, + // { width: 100, title: '跟进结果', dataIndex: 'validStatus', + // customRender: ({ text }) => { + // return validStatusList.find((find) => find.value === text)?.label + // }, + // }, + // { width: 160, title: '录入时间', dataIndex: 'creatTime' }, ] \ No newline at end of file diff --git a/src/views/clue/customer/index.vue b/src/views/clue/customer/index.vue index a2b5531..70c2477 100644 --- a/src/views/clue/customer/index.vue +++ b/src/views/clue/customer/index.vue @@ -113,7 +113,7 @@
- +
@@ -149,7 +149,38 @@
- +
+ + + + + + +
@@ -157,12 +188,20 @@ -