登陆 首页修改 crm客户管理新增地区和主要联系人
parent
d9daa988c3
commit
33975478a5
3
.env
3
.env
|
|
@ -23,3 +23,6 @@ VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
|
||||||
VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码
|
VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码
|
||||||
VITE_APP_DEFAULT_LOGIN_USERNAME = admin
|
VITE_APP_DEFAULT_LOGIN_USERNAME = admin
|
||||||
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
|
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
|
||||||
|
|
||||||
|
# 租户开关
|
||||||
|
VUE_APP_TENANT_ENABLE=false
|
||||||
2
.env.dev
2
.env.dev
|
|
@ -7,7 +7,7 @@ VITE_DEV=true
|
||||||
VITE_BASE_URL='http://192.168.6.136:48080'
|
VITE_BASE_URL='http://192.168.6.136:48080'
|
||||||
|
|
||||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
|
||||||
VITE_UPLOAD_TYPE=server
|
VITE_UPLOAD_TYPE=client
|
||||||
|
|
||||||
# 接口地址
|
# 接口地址
|
||||||
VITE_API_URL=/admin-api
|
VITE_API_URL=/admin-api
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,3 @@ VITE_APP_CAPTCHA_ENABLE=false
|
||||||
|
|
||||||
# GoView域名
|
# GoView域名
|
||||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||||
|
|
||||||
# 租户开关
|
|
||||||
VUE_APP_TENANT_ENABLE=false
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.2 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.7 MiB |
|
|
@ -24,6 +24,7 @@ export interface CustomerVO {
|
||||||
industryId: number // 所属行业
|
industryId: number // 所属行业
|
||||||
level: number // 客户等级
|
level: number // 客户等级
|
||||||
source: number // 客户来源
|
source: number // 客户来源
|
||||||
|
primaryContact: string // 主要联系人
|
||||||
remark: string // 备注
|
remark: string // 备注
|
||||||
creator: string // 创建人
|
creator: string // 创建人
|
||||||
creatorName?: string // 创建人名称
|
creatorName?: string // 创建人名称
|
||||||
|
|
|
||||||
|
|
@ -5,74 +5,11 @@
|
||||||
v-loading="formLoading"
|
v-loading="formLoading"
|
||||||
:model="formData"
|
:model="formData"
|
||||||
:rules="formRules"
|
:rules="formRules"
|
||||||
label-width="100px"
|
label-width="120px"
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="14">
|
||||||
<el-form-item label="客户名称" prop="name">
|
<el-form-item label="地区" prop="areaId">
|
||||||
<el-input v-model="formData.name" placeholder="请输入客户名称" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="客户来源" prop="source">
|
|
||||||
<el-select v-model="formData.source" placeholder="请选择客户来源" class="w-1/1">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="负责人" prop="ownerUserId">
|
|
||||||
<el-select
|
|
||||||
v-model="formData.ownerUserId"
|
|
||||||
:disabled="formType !== 'create'"
|
|
||||||
class="w-1/1"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in userOptions"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.nickname"
|
|
||||||
:value="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="客户行业" prop="industryId">
|
|
||||||
<el-select v-model="formData.industryId" placeholder="请选择客户行业" class="w-1/1">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="客户级别" prop="level">
|
|
||||||
<el-select v-model="formData.level" placeholder="请选择客户级别" class="w-1/1">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="地址" prop="areaId">
|
|
||||||
<el-cascader
|
<el-cascader
|
||||||
v-model="formData.areaId"
|
v-model="formData.areaId"
|
||||||
:options="areaList"
|
:options="areaList"
|
||||||
|
|
@ -84,27 +21,46 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
</el-row>
|
||||||
<el-form-item label="详细地址" prop="detailAddress">
|
<el-row>
|
||||||
<el-input v-model="formData.detailAddress" placeholder="请输入详细地址" />
|
<el-col :span="16">
|
||||||
|
<el-form-item label="客户名称" prop="name">
|
||||||
|
<el-input v-model="formData.name" placeholder="请输入客户名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="客户类别" prop="industryId">
|
||||||
|
<el-select v-model="formData.industryId" placeholder="请选择客户类别" class="w-1/1">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="下次联系时间" prop="contactNextTime">
|
<el-form-item label="下次联系时间" prop="contactNextTime">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.contactNextTime"
|
v-model="formData.contactNextTime"
|
||||||
placeholder="选择下次联系时间"
|
placeholder="选择下次联系时间"
|
||||||
type="datetime"
|
type="date"
|
||||||
value-format="x"
|
value-format="x"
|
||||||
class="!w-1/1"
|
class="!w-1/1"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
</el-row>
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-row>
|
||||||
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
|
<el-col :span="24">
|
||||||
|
<el-form-item label="详细地址" prop="detailAddress">
|
||||||
|
<el-input v-model="formData.detailAddress" placeholder="请输入详细地址" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
@ -151,7 +107,10 @@ const formData = ref({
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }],
|
name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }],
|
||||||
ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
|
contactNextTime: [{ required: true, message: '下次联系时间不能为空', trigger: 'change' }],
|
||||||
|
areaId: [{ required: true, message: '地区不能为空', trigger: 'change' }],
|
||||||
|
detailAddress: [{ required: true, message: '详细地址不能为空', trigger: 'blur' }],
|
||||||
|
industryId: [{ required: true, message: '客户类别不能为空', trigger: 'change' }],
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,12 +26,12 @@
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="所属行业" prop="industryId">
|
<el-form-item label="客户类别" prop="industryId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.industryId"
|
v-model="queryParams.industryId"
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请选择所属行业"
|
placeholder="请选择客户类别"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
|
||||||
|
|
@ -41,36 +41,6 @@
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="客户级别" prop="level">
|
|
||||||
<el-select
|
|
||||||
v-model="queryParams.level"
|
|
||||||
class="!w-240px"
|
|
||||||
clearable
|
|
||||||
placeholder="请选择客户级别"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="客户来源" prop="source">
|
|
||||||
<el-select
|
|
||||||
v-model="queryParams.source"
|
|
||||||
class="!w-240px"
|
|
||||||
clearable
|
|
||||||
placeholder="请选择客户来源"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button @click="handleQuery">
|
<el-button @click="handleQuery">
|
||||||
<Icon class="mr-5px" icon="ep:search" />
|
<Icon class="mr-5px" icon="ep:search" />
|
||||||
|
|
@ -110,62 +80,36 @@
|
||||||
<el-tab-pane label="下属负责的" name="3" />
|
<el-tab-pane label="下属负责的" name="3" />
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
|
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
|
||||||
<el-table-column align="center" fixed="left" label="客户名称" prop="name" width="160">
|
<el-table-column align="center" fixed="left" label="地区" prop="areaId" width="200px" >
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ scope.row.areaName || '--' }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="客户名称" prop="name" width="400">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
|
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
|
||||||
{{ scope.row.name }}
|
{{ scope.row.name }}
|
||||||
</el-link>
|
</el-link>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column align="center" label="客户来源" prop="source" width="100">
|
|
||||||
<template #default="scope">
|
<el-table-column align="center" label="主要联系人" prop="primaryContact" width="150"/>
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
|
|
||||||
</template>
|
<el-table-column align="center" label="客户类别" prop="industryId" width="150">
|
||||||
</el-table-column>
|
|
||||||
<el-table-column align="center" label="客户级别" prop="level" width="135">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column align="center" label="客户行业" prop="industryId" width="100">
|
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
|
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
:formatter="dateFormatter"
|
:formatter="dateFormatter2"
|
||||||
align="center"
|
align="center"
|
||||||
label="下次联系时间"
|
label="下次联系时间"
|
||||||
prop="contactNextTime"
|
prop="contactNextTime"
|
||||||
width="180px"
|
width="180px"
|
||||||
/>
|
/>
|
||||||
<el-table-column align="center" label="备注" prop="remark" width="200" />
|
|
||||||
<el-table-column
|
<el-table-column align="center" label="责任人" prop="ownerUserName" width="100px" />
|
||||||
:formatter="dateFormatter"
|
|
||||||
align="center"
|
|
||||||
label="最后跟进时间"
|
|
||||||
prop="contactLastTime"
|
|
||||||
width="180px"
|
|
||||||
/>
|
|
||||||
<el-table-column align="center" label="最后跟进记录" prop="contactLastContent" width="200" />
|
|
||||||
<el-table-column align="center" label="地址" prop="detailAddress" width="180" />
|
|
||||||
<el-table-column align="center" label="负责人" prop="ownerUserName" width="100px" />
|
|
||||||
<el-table-column align="center" label="所属部门" prop="ownerUserDeptName" width="100px" />
|
|
||||||
<el-table-column
|
|
||||||
:formatter="dateFormatter"
|
|
||||||
align="center"
|
|
||||||
label="更新时间"
|
|
||||||
prop="updateTime"
|
|
||||||
width="180px"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
:formatter="dateFormatter"
|
|
||||||
align="center"
|
|
||||||
label="创建时间"
|
|
||||||
prop="createTime"
|
|
||||||
width="180px"
|
|
||||||
/>
|
|
||||||
<el-table-column align="center" label="创建人" prop="creatorName" width="100px" />
|
|
||||||
<el-table-column align="center" fixed="right" label="操作" min-width="150">
|
<el-table-column align="center" fixed="right" label="操作" min-width="150">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
|
|
@ -203,7 +147,7 @@
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { dateFormatter } from '@/utils/formatTime'
|
import { dateFormatter2 } from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import * as CustomerApi from '@/api/crm/customer'
|
import * as CustomerApi from '@/api/crm/customer'
|
||||||
import CustomerForm from './CustomerForm.vue'
|
import CustomerForm from './CustomerForm.vue'
|
||||||
|
|
@ -224,6 +168,7 @@ const queryParams = reactive({
|
||||||
sceneType: '1', // 默认和 activeName 相等
|
sceneType: '1', // 默认和 activeName 相等
|
||||||
name: '',
|
name: '',
|
||||||
mobile: '',
|
mobile: '',
|
||||||
|
areaId: undefined,
|
||||||
industryId: undefined,
|
industryId: undefined,
|
||||||
level: undefined,
|
level: undefined,
|
||||||
source: undefined,
|
source: undefined,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue