CRM 客户管理 权限优化
parent
dc245aa345
commit
d804171fed
|
|
@ -36,7 +36,6 @@ export enum BizTypeEnum {
|
||||||
CRM_RECEIVABLE = 7, // 回款
|
CRM_RECEIVABLE = 7, // 回款
|
||||||
CRM_RECEIVABLE_PLAN = 8 // 回款计划
|
CRM_RECEIVABLE_PLAN = 8 // 回款计划
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CRM 数据权限级别枚举
|
* CRM 数据权限级别枚举
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
import { da } from 'element-plus/es/locale'
|
||||||
|
|
||||||
export interface UserVO {
|
export interface UserVO {
|
||||||
id: number
|
id: number
|
||||||
username: string
|
username: string
|
||||||
nickname: string
|
nickname: string
|
||||||
|
sort: number
|
||||||
deptId: number
|
deptId: number
|
||||||
postIds: string[]
|
postIds: string[]
|
||||||
email: string
|
email: string
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ import * as ContactApi from '@/api/crm/contact'
|
||||||
import ContactForm from './../ContactForm.vue'
|
import ContactForm from './../ContactForm.vue'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
import { BizTypeEnum } from '@/api/crm/permission'
|
import { BizTypeEnum } from '@/api/crm/permission'
|
||||||
import ContactListModal from './ContactListModal.vue'
|
|
||||||
|
|
||||||
defineOptions({ name: 'CrmContactList' })
|
defineOptions({ name: 'CrmContactList' })
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ import { getOperateLogPage } from '@/api/crm/operateLog'
|
||||||
import ContractForm from '@/views/crm/contract/ContractForm.vue'
|
import ContractForm from '@/views/crm/contract/ContractForm.vue'
|
||||||
import CrmTransferForm from '@/views/crm/permission/components/TransferForm.vue'
|
import CrmTransferForm from '@/views/crm/permission/components/TransferForm.vue'
|
||||||
import PermissionList from '@/views/crm/permission/components/PermissionList.vue'
|
import PermissionList from '@/views/crm/permission/components/PermissionList.vue'
|
||||||
import FollowUpList from '@/views/crm/followup/index.vue'
|
import FollowUpList from '@/views/crm/followup/components/FollowUpList.vue'
|
||||||
import ReceivableList from '@/views/crm/receivable/components/ReceivableList.vue'
|
import ReceivableList from '@/views/crm/receivable/components/ReceivableList.vue'
|
||||||
import ReceivablePlanList from '@/views/crm/receivable/plan/components/ReceivablePlanList.vue'
|
import ReceivablePlanList from '@/views/crm/receivable/plan/components/ReceivablePlanList.vue'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,23 +16,19 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ContentWrap class="mt-10px">
|
<ContentWrap class="mt-10px">
|
||||||
<el-descriptions :column="4" direction="horizontal" class="mb-10px">
|
<el-descriptions :column="3" direction="horizontal" class="mb-10px">
|
||||||
<el-descriptions-item label="成交状态:">
|
<el-descriptions-item label="成交状态:">
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_DEAL_STATUS" :value="customer.dealStatus ?? ''" />
|
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_DEAL_STATUS" :value="customer.dealStatus ?? ''" />
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="客户类别:">
|
<el-descriptions-item label="客户类别:">
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId ?? ''" />
|
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId ?? ''" />
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="负责人:">{{ customer.ownerUserName }}</el-descriptions-item>
|
<el-descriptions-item label="责任人:">{{ customer.ownerUserName }}</el-descriptions-item>
|
||||||
|
|
||||||
<el-descriptions-item label="下次联系时间:">
|
<el-descriptions-item label="下次联系时间:">
|
||||||
{{ formatDate(customer.contactNextTime, 'YYYY-MM-DD') }}
|
{{ formatDate(customer.contactNextTime, 'YYYY-MM-DD') }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="创建时间:">
|
|
||||||
{{ formatDate(customer.createTime) }}
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="地址:">
|
<el-descriptions-item label="地址:">
|
||||||
{{ customer.areaName }} {{ customer.detailAddress }}
|
{{ customer.areaName }}{{ customer.detailAddress }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|
||||||
<!-- <el-descriptions-item label="备注:">{{ customer.remark }}</el-descriptions-item> -->
|
<!-- <el-descriptions-item label="备注:">{{ customer.remark }}</el-descriptions-item> -->
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
>
|
>
|
||||||
锁定
|
锁定
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<text>{{ customerId }}</text>
|
||||||
<!-- <el-button v-if="!customer.ownerUserId" type="primary" @click="handleReceive"> 领取</el-button>
|
<!-- <el-button v-if="!customer.ownerUserId" type="primary" @click="handleReceive"> 领取</el-button>
|
||||||
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleDistributeForm">
|
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleDistributeForm">
|
||||||
分配
|
分配
|
||||||
|
|
@ -33,13 +34,13 @@
|
||||||
<el-col>
|
<el-col>
|
||||||
<el-tabs>
|
<el-tabs>
|
||||||
<el-tab-pane v-if="checkPermi(['crm:follow-up-record:query'])" label="跟进记录">
|
<el-tab-pane v-if="checkPermi(['crm:follow-up-record:query'])" label="跟进记录">
|
||||||
<FollowUpList :biz-id="customerId" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
<FollowUpList :biz-id="customer.id" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<!-- <el-tab-pane label="基本信息">
|
<!-- <el-tab-pane label="基本信息">
|
||||||
<CustomerDetailsInfo :customer="customer" />
|
<CustomerDetailsInfo :customer="customer" />
|
||||||
</el-tab-pane> -->
|
</el-tab-pane> -->
|
||||||
<el-tab-pane v-if="checkPermi(['crm:contact:query'])" label="联系人" lazy>
|
<el-tab-pane v-if="checkPermi(['crm:contact:query']) && customer.id != undefined" label="联系人" lazy>
|
||||||
<ContactList :biz-id="customerId" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
<ContactList :biz-id="customer.id" :biz-type="BizTypeEnum.CRM_CUSTOMER" :customerId="customer.id" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<!-- <el-tab-pane label="团队成员">
|
<!-- <el-tab-pane label="团队成员">
|
||||||
<PermissionList
|
<PermissionList
|
||||||
|
|
|
||||||
|
|
@ -11,27 +11,27 @@
|
||||||
<el-form-item label="客户名称" prop="name">
|
<el-form-item label="客户名称" prop="name">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.name"
|
v-model="queryParams.name"
|
||||||
class="!w-200px"
|
class="!w-150px"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请输入客户名称"
|
placeholder="请输入客户名称"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
/>
|
/>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="地区" prop="areaId">
|
<el-form-item label="地区" prop="areaId">
|
||||||
<el-cascader
|
<el-cascader
|
||||||
v-model="queryParams.areaId"
|
v-model="queryParams.areaId"
|
||||||
:options="areaList"
|
:options="areaList"
|
||||||
:props="defaultProps"
|
:props="defaultProps"
|
||||||
class="!w-200px"
|
class="!w-150px"
|
||||||
clearable
|
clearable
|
||||||
filterable
|
filterable
|
||||||
placeholder="请选择地区"
|
placeholder="请选择地区"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</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-200px"
|
class="!w-150px"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请选择客户类别"
|
placeholder="请选择客户类别"
|
||||||
>
|
>
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
<el-form-item label="成交状态" prop="dealStatus">
|
<el-form-item label="成交状态" prop="dealStatus">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.dealStatus"
|
v-model="queryParams.dealStatus"
|
||||||
class="!w-200px"
|
class="!w-150px"
|
||||||
clearable
|
clearable
|
||||||
placeholder="请选择成交状态"
|
placeholder="请选择成交状态"
|
||||||
>
|
>
|
||||||
|
|
@ -58,6 +58,23 @@
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="责任人">
|
||||||
|
<el-select
|
||||||
|
v-model="queryParams.ownerUserId"
|
||||||
|
filterable
|
||||||
|
remote
|
||||||
|
clearable
|
||||||
|
placeholder="请选择责任人"
|
||||||
|
style="width: 150px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="user in userOptions"
|
||||||
|
:key="user.id"
|
||||||
|
:label="user.nickname"
|
||||||
|
:value="user.id"
|
||||||
|
/>
|
||||||
|
</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" />
|
||||||
|
|
@ -189,7 +206,9 @@ import CustomerForm from './CustomerForm.vue'
|
||||||
import CustomerImportForm from './CustomerImportForm.vue'
|
import CustomerImportForm from './CustomerImportForm.vue'
|
||||||
import { defaultProps } from '@/utils/tree'
|
import { defaultProps } from '@/utils/tree'
|
||||||
import { TabsPaneContext } from 'element-plus'
|
import { TabsPaneContext } from 'element-plus'
|
||||||
|
import * as UserApi from '@/api/system/user'
|
||||||
|
|
||||||
|
const userOptions = ref<any[]>([])
|
||||||
defineOptions({ name: 'CrmCustomer' })
|
defineOptions({ name: 'CrmCustomer' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
|
|
@ -207,6 +226,7 @@ const queryParams = reactive({
|
||||||
areaId: undefined,
|
areaId: undefined,
|
||||||
dealStatus: undefined,
|
dealStatus: undefined,
|
||||||
industryId: undefined,
|
industryId: undefined,
|
||||||
|
ownerUserId: undefined,
|
||||||
level: undefined,
|
level: undefined,
|
||||||
source: undefined,
|
source: undefined,
|
||||||
pool: undefined
|
pool: undefined
|
||||||
|
|
@ -309,6 +329,10 @@ watch(
|
||||||
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
// 获得用户列表
|
||||||
|
UserApi.getSimpleUserList().then(res => {
|
||||||
|
userOptions.value = res
|
||||||
|
})
|
||||||
getList()
|
getList()
|
||||||
AreaApi.getAreaTree().then(res => {
|
AreaApi.getAreaTree().then(res => {
|
||||||
areaList.value = res
|
areaList.value = res
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,25 @@
|
||||||
<template>
|
<template>
|
||||||
<!-- 搜索栏 -->
|
<!-- 搜索栏 -->
|
||||||
<el-form :inline="true" :model="queryParams" class="mb-10px">
|
<el-form :inline="true" :model="queryParams" class="mb-10px">
|
||||||
<el-form-item label="跟进内容">
|
<el-form-item label="跟进人">
|
||||||
<el-input v-model="queryParams.content" placeholder="请输入跟进内容" clearable @keyup.enter="handleQuery" />
|
<el-select
|
||||||
|
v-model="queryParams.creator"
|
||||||
|
filterable
|
||||||
|
remote
|
||||||
|
clearable
|
||||||
|
placeholder="请选择跟进人"
|
||||||
|
style="width: 150px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="user in userOptions"
|
||||||
|
:key="user.id"
|
||||||
|
:label="user.nickname"
|
||||||
|
:value="user.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="跟进方式">
|
<el-form-item label="跟进方式">
|
||||||
<el-select v-model="queryParams.type" placeholder="请选择跟进方式" clearable>
|
<el-select v-model="queryParams.type" placeholder="请选择跟进方式" clearable style="width: 150px">
|
||||||
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.CRM_FOLLOW_UP_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.CRM_FOLLOW_UP_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -17,9 +31,6 @@
|
||||||
<el-button @click="resetQuery">
|
<el-button @click="resetQuery">
|
||||||
<Icon icon="ep:refresh" class="mr-5px" />重置
|
<Icon icon="ep:refresh" class="mr-5px" />重置
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button v-hasPermi="['crm:follow-up-record:create']" @click="openForm">
|
|
||||||
<Icon icon="ep:edit" class="mr-5px" />写跟进
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
|
|
@ -32,6 +43,10 @@
|
||||||
placement="top"
|
placement="top"
|
||||||
>
|
>
|
||||||
<span>跟进人:</span>{{ item.creatorName }}
|
<span>跟进人:</span>{{ item.creatorName }}
|
||||||
|
<span v-if="Array.isArray(item.customer) && item.customer.length > 0 && item.customer[0].name" style="margin-left: 8px;">
|
||||||
|
客户名称:{{ item.customer[0].name }}
|
||||||
|
</span>
|
||||||
|
|
||||||
<template #timestamp>
|
<template #timestamp>
|
||||||
<div style="color:#999;font-size:13px;margin-bottom:2px;">跟进时间</div>
|
<div style="color:#999;font-size:13px;margin-bottom:2px;">跟进时间</div>
|
||||||
<span>{{ formatDate(item.createTime) }}</span>
|
<span>{{ formatDate(item.createTime) }}</span>
|
||||||
|
|
@ -115,6 +130,10 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { FollowUpRecordApi, FollowUpRecordVO } from '@/api/crm/followup'
|
import { FollowUpRecordApi, FollowUpRecordVO } from '@/api/crm/followup'
|
||||||
import FollowUpRecordForm from './FollowUpRecordForm.vue'
|
import FollowUpRecordForm from './FollowUpRecordForm.vue'
|
||||||
import { BizTypeEnum } from '@/api/crm/permission'
|
import { BizTypeEnum } from '@/api/crm/permission'
|
||||||
|
import * as UserApi from '@/api/system/user'
|
||||||
|
|
||||||
|
const userOptions = ref<any[]>([])
|
||||||
|
|
||||||
|
|
||||||
/** 跟进记录列表 */
|
/** 跟进记录列表 */
|
||||||
defineOptions({ name: 'FollowUpRecord' })
|
defineOptions({ name: 'FollowUpRecord' })
|
||||||
|
|
@ -132,9 +151,10 @@ const queryParams = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
bizType: 0,
|
bizType: 0,
|
||||||
bizId: undefined as number | undefined, // 明确类型
|
bizId: undefined as number | undefined,
|
||||||
content: '',
|
content: '',
|
||||||
type: undefined
|
type: undefined,
|
||||||
|
creator: undefined as number | undefined // 跟进人
|
||||||
})
|
})
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
|
|
@ -152,21 +172,11 @@ const getList = async () => {
|
||||||
/** 添加/修改操作 */
|
/** 添加/修改操作 */
|
||||||
const formRef = ref<InstanceType<typeof FollowUpRecordForm>>()
|
const formRef = ref<InstanceType<typeof FollowUpRecordForm>>()
|
||||||
// 支持编辑和新增
|
// 支持编辑和新增
|
||||||
const openForm = (type: 'create' | 'update' = 'create', id?: number) => {
|
const openForm = (type: 'create' | 'update', id: number) => {
|
||||||
// 只在有 bizId 时传递,否则不传
|
|
||||||
if (typeof props.bizId === 'number') {
|
formRef.value?.open(type, id)
|
||||||
if (type === 'update' && id) {
|
|
||||||
formRef.value?.open(props.bizType, props.bizId, id)
|
|
||||||
} else {
|
|
||||||
formRef.value?.open(props.bizType, props.bizId)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (type === 'update' && id) {
|
|
||||||
formRef.value?.open(props.bizType, undefined, id)
|
|
||||||
} else {
|
|
||||||
formRef.value?.open(props.bizType, undefined)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
|
|
@ -211,10 +221,16 @@ const handleQuery = () => {
|
||||||
}
|
}
|
||||||
const resetQuery = () => {
|
const resetQuery = () => {
|
||||||
queryParams.content = ''
|
queryParams.content = ''
|
||||||
|
queryParams.creator = undefined
|
||||||
queryParams.type = undefined
|
queryParams.type = undefined
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
// 获得用户列表
|
||||||
|
userOptions.value = await UserApi.getSimpleUserList()
|
||||||
|
})
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.bizId,
|
() => props.bizId,
|
||||||
() => {
|
() => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<!-- 跟进记录的添加表单 -->
|
<!-- 跟进记录的添加表单 -->
|
||||||
<template>
|
<template>
|
||||||
<Dialog v-model="dialogVisible" title="添加跟进记录" width="50%">
|
<Dialog v-model="dialogVisible" title="添加跟进记录" width="70%">
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
v-loading="formLoading"
|
v-loading="formLoading"
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="跟进内容" prop="content">
|
<el-form-item label="跟进内容" prop="content">
|
||||||
<Editor v-model="formData.content" height="150px" />
|
<Editor v-model="formData.content" height="300px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
|
|
@ -103,12 +103,7 @@ watch(
|
||||||
// 获取客户下联系人
|
// 获取客户下联系人
|
||||||
const res = await ContactApi.getContactPageByCustomer({ customerId: val, pageSize: 100 })
|
const res = await ContactApi.getContactPageByCustomer({ customerId: val, pageSize: 100 })
|
||||||
contactOptions.value = res.list || []
|
contactOptions.value = res.list || []
|
||||||
// 自动选中第一个联系人
|
|
||||||
if (contactOptions.value.length > 0) {
|
|
||||||
formData.value.contactIds = [contactOptions.value[0].id]
|
|
||||||
} else {
|
|
||||||
formData.value.contactIds = []
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
contactOptions.value = []
|
contactOptions.value = []
|
||||||
formData.value.contactIds = []
|
formData.value.contactIds = []
|
||||||
|
|
@ -118,13 +113,12 @@ watch(
|
||||||
)
|
)
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = async (bizType: number, bizId: number, id?: number) => {
|
const open = async (type: string, id: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
resetForm()
|
resetForm()
|
||||||
formData.value.bizType = bizType
|
formType.value = type
|
||||||
formData.value.bizId = bizId
|
if (formType.value === 'update') {
|
||||||
if (id) {
|
|
||||||
formType.value = 'update'
|
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
const data = await FollowUpRecordApi.getFollowUpRecord(id)
|
const data = await FollowUpRecordApi.getFollowUpRecord(id)
|
||||||
|
|
@ -132,8 +126,6 @@ const open = async (bizType: number, bizId: number, id?: number) => {
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
formType.value = 'create'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ const open = async (bizId: number) => {
|
||||||
dialogTitle.value = getDialogTitle()
|
dialogTitle.value = getDialogTitle()
|
||||||
resetForm()
|
resetForm()
|
||||||
formData.value.id = bizId
|
formData.value.id = bizId
|
||||||
// 客户转移时默认勾选联系人和合同
|
// 客户转移时默认勾选联系人和合同和跟进记录
|
||||||
if (props.bizType === BizTypeEnum.CRM_CUSTOMER) {
|
if (props.bizType === BizTypeEnum.CRM_CUSTOMER) {
|
||||||
formData.value.toBizTypes = [BizTypeEnum.CRM_CONTACT, BizTypeEnum.CRM_CONTRACT, BizTypeEnum.CRM_CUSTOMER]
|
formData.value.toBizTypes = [BizTypeEnum.CRM_CONTACT, BizTypeEnum.CRM_CONTRACT, BizTypeEnum.CRM_CUSTOMER]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -73,22 +73,21 @@
|
||||||
<el-table-column label="场地名称" fixed="left" align="center" prop="name" />
|
<el-table-column label="场地名称" fixed="left" align="center" prop="name" />
|
||||||
<el-table-column align="center" label="地区" prop="areaId" width="200px" >
|
<el-table-column align="center" label="地区" prop="areaId" width="200px" >
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>{{ scope.row.areaName || '暂无' }} {{ scope.row.detailAddress }}</span>
|
<span>{{ scope.row.areaName || '暂无' }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="定位经度" align="center" prop="locationLng" />
|
<el-table-column label="推荐人" align="center" prop="recommenderName" />
|
||||||
<el-table-column label="定位纬度" align="center" prop="locationLat" />
|
|
||||||
<el-table-column label="可建充电桩数" align="center" prop="estimatedPiles" />
|
<el-table-column label="可建充电桩数" align="center" prop="estimatedPiles" />
|
||||||
<el-table-column label="场地状态" align="center" prop="siteStatus">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :type="DICT_TYPE.CRM_STATION_SITE_STATUS" :value="scope.row.siteStatus" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="场地类型" align="center" prop="siteType">
|
<el-table-column label="场地类型" align="center" prop="siteType">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.CRM_STATION_SITE_TYPE" :value="scope.row.siteType" />
|
<dict-tag :type="DICT_TYPE.CRM_STATION_SITE_TYPE" :value="scope.row.siteType" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="场地状态" align="center" prop="siteStatus">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :type="DICT_TYPE.CRM_STATION_SITE_STATUS" :value="scope.row.siteStatus" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="填报人" align="center" prop="creatorName" />
|
<el-table-column label="填报人" align="center" prop="creatorName" />
|
||||||
<el-table-column label="操作" fixed="right" align="center" min-width="180px">
|
<el-table-column label="操作" fixed="right" align="center" min-width="180px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
|
||||||
|
|
@ -63,10 +63,9 @@
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<el-table-column label="岗位编号" align="center" prop="id" />
|
<el-table-column label="岗位顺序" align="center" prop="sort" />
|
||||||
<el-table-column label="岗位名称" align="center" prop="name" />
|
<el-table-column label="岗位名称" align="center" prop="name" />
|
||||||
<el-table-column label="岗位编码" align="center" prop="code" />
|
<el-table-column label="岗位编码" align="center" prop="code" />
|
||||||
<el-table-column label="岗位顺序" align="center" prop="sort" />
|
|
||||||
<el-table-column label="岗位备注" align="center" prop="remark" />
|
<el-table-column label="岗位备注" align="center" prop="remark" />
|
||||||
<el-table-column label="状态" align="center" prop="status">
|
<el-table-column label="状态" align="center" prop="status">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<el-table-column align="center" label="角色编号" prop="id" />
|
<el-table-column align="center" label="显示顺序" prop="sort" />
|
||||||
<el-table-column align="center" label="角色名称" prop="name" />
|
<el-table-column align="center" label="角色名称" prop="name" />
|
||||||
<el-table-column label="角色类型" align="center" prop="type">
|
<el-table-column label="角色类型" align="center" prop="type">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
@ -93,7 +93,6 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column align="center" label="角色标识" prop="code" />
|
<el-table-column align="center" label="角色标识" prop="code" />
|
||||||
<el-table-column align="center" label="显示顺序" prop="sort" />
|
|
||||||
<el-table-column align="center" label="备注" prop="remark" />
|
<el-table-column align="center" label="备注" prop="remark" />
|
||||||
<el-table-column align="center" label="状态" prop="status">
|
<el-table-column align="center" label="状态" prop="status">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,13 @@
|
||||||
</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="sort">
|
||||||
|
<el-input v-model="formData.sort" maxlength="11" placeholder="请选择显示顺序" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="手机号码" prop="mobile">
|
<el-form-item label="手机号码" prop="mobile">
|
||||||
|
|
@ -119,6 +126,7 @@ const formData = ref({
|
||||||
mobile: '',
|
mobile: '',
|
||||||
email: '',
|
email: '',
|
||||||
id: undefined,
|
id: undefined,
|
||||||
|
sort: 0,
|
||||||
username: '',
|
username: '',
|
||||||
password: '',
|
password: '',
|
||||||
sex: undefined,
|
sex: undefined,
|
||||||
|
|
@ -131,6 +139,7 @@ const formRules = reactive<FormRules>({
|
||||||
username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
|
username: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
|
||||||
nickname: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
|
nickname: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
|
||||||
password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
|
password: [{ required: true, message: '用户密码不能为空', trigger: 'blur' }],
|
||||||
|
sort: [{ required: true, message: '显示顺序不能为空', trigger: 'blur' }],
|
||||||
email: [
|
email: [
|
||||||
{
|
{
|
||||||
type: 'email',
|
type: 'email',
|
||||||
|
|
@ -206,6 +215,7 @@ const resetForm = () => {
|
||||||
mobile: '',
|
mobile: '',
|
||||||
email: '',
|
email: '',
|
||||||
id: undefined,
|
id: undefined,
|
||||||
|
sort: 0,
|
||||||
username: '',
|
username: '',
|
||||||
password: '',
|
password: '',
|
||||||
sex: undefined,
|
sex: undefined,
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<el-table-column label="用户编号" align="center" key="id" prop="id" />
|
<el-table-column align="center" label="显示顺序" prop="sort" />
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="用户名称"
|
label="用户名称"
|
||||||
align="center"
|
align="center"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue