如何在 NocoBase 中实现 CRM 的线索转化
1. 引言
本教程将一步一步地引导您如何在 NocoBase 中实现 CRM 的商机转化(Opportunity Conversion)功能。我们将介绍如何创建所需的 collections(数据表)、配置数据管理页面、设计转化流程以及设置关联管理,从而帮助您顺利构建整个业务流程。
2. 准备工作:创建所需的 Collections
在开始之前,我们需要准备以下 4 个 collections,并配置它们之间的关联关系。
2.1 LEAD Collection(线索)
这是用于存储潜在客户信息的 collection,其字段定义如下:
| Field name | 字段显示名称 | Field interface | Description |
|---|---|---|---|
| id | Id | Integer | 主键 |
| account_id | account_id | Integer | ACCOUNT 外键 |
| contact_id | contact_id | Integer | CONTACT 外键 |
| opportunity_id | opportunity_id | Integer | OPPORTUNITY 外键 |
| name | 线索名 | Single line text | 潜在客户的姓名 |
| company | 公司名 | Single line text | 潜在客户所在的公司名称 |
| 电子邮箱 | 潜在客户的电子邮箱地址 | ||
| phone | 联系电话 | Phone | 联系电话 |
| status | 状态 | Single select | 线索当前状态(未达标, 新线索, 处理中, 跟进中, 交易进行中, 完成) |
| Account | 公司 | Many to one | 关联到公司 Collection |
| Contact | 联系人 | Many to one | 关联到联系人 Collection |
| Opportunity | 商机 | Many to one | 关联到商机 Collection |
2.2 ACCOUNT Collection(公司)
用于保存公司的详细信息,其字段配置如下:
| Field name | 字段显示名称 | Field interface | Description |
|---|---|---|---|
| name | 名称 | Single line text | 账户名称(公司或组织名称) |
| industry | 行业 | Single select | 账户所属行业 |
| phone | 电话 | Phone | 账户联系电话 |
| website | 网站 | URL | 账户官方网站地址 |
2.3 CONTACT Collection(联系人)
存储联系人信息的 collection,包含以下字段:
| Field name | 字段显示名称 | Field interface | Description |
|---|---|---|---|
| name | 名称 | Single line text | 联系人的姓名 |
| 电子邮箱 | 联系人的电子邮箱地址 | ||
| phone | 电话 | Phone | 联系人的联系电话 |
2.4 OPPORTUNITY Collection(商机)
用于记录商机信息,其字段定义如下:
| Field name | 字段显示名称 | Field interface | Description |
|---|---|---|---|
| name | 名称 | Single line text | 商机的名称 |
| stage | 阶段 | Single select | 商机所处阶段(资格审查, 需求, 提案, 谈判, 交易关闭, 成功, 失败) |
| amount | 金额 | Number | 商机的金额 |
| close_date | 关闭日期 | Datetime | 商机预计的关闭日期 |
3. 理解商机转化流程
3.1 正常转化流程概述
一个商机从线索转化为正式商机一般会经历如下流程:

3.2 关联关系说明
假设您已经成功创建上述 4 个 collections,并映射配置好它们之间的业务关系:

4. 创建数据管理页面
在 NocoBase 的工作区中,为各个 collections 创建数据管理页面,并随机新增一些线索数据以便后续测试。

5. 实现商机转化功能
本章节重点讲解如何将一个线索转化为公司、联系人及商机数据,并确保转化操作不会被重复触发。
5.1 创建“转化”编辑操作
在对应的线索详情界面中,创建一个编辑操作,命名为“转化”。在转化弹窗内,进行如下配置:
5.1.1 展示线索基本信息
以只读方式展示当前线索的基本信息,确保用户不会误修改原数据。
5.1.2 显示关联关系字段
在弹窗中展示以下三个关联字段,并为每个字段开启“快速创建”功能,以便在未找到匹配数据时,可以即时创建新数据。

5.1.3 配置快速创建的默认映射
在“快速创建”弹窗的设置中,为各关联字段配置默认值,从而将线索信息自动映射到目标 collection。映射规则如下:
- 线索/线索名 → 公司/名称
- 线索/电子邮箱 → 公司/电子邮箱
- 线索/联系电话 → 公司/电话
- 线索/线索名 → 联系人/名称
- 线索/电子邮箱 → 联系人/电子邮箱
- 线索/联系电话 → 联系人/电话
- 线索/线索名 → 商机/名称
- 线索/状态 → 商机/阶段
配置示例截图:

接下来,我们给提交操作再加一个友好的反馈:


提交效果:

5.1.4 查看转化效果
配置完成后,执行转化操作时,系统将根据映射关系创建并关联新的公司、联系人以及商机数据。效果示例如下:


5.2 防止重复转化
为避免同一线索被多次转化,可以通过以下方式进行控制:
5.2.1 更新线索状态
在转化表单的提交操作中,增加一个数据自动更新的步骤,将线索状态修改为“已转化”。
配置截图:


效果演示:

5.2.2 设置按钮联动规则
为转化按钮添加联动规则:当线索状态为“已转化”时,自动隐藏转化按钮,从而避免重复操作。
配置截图:



6. 配置详情页面的关联管理区块
为了让用户在各个 Collection 的详情页面中查看关联数据,您需要配置相应的 list 区块或详情区块。
6.1 配置公司 Collection 详情页面
在公司的详情页面(例如,在联系人的编辑/详情弹窗中),分别添加以下 list 区块:
- 联系人 list
- 商机 list
- 线索 list
示例截图:

6.2 添加筛选条件
为每个 list 区块增加筛选规则,确保只显示关联到当前公司 ID 的数据。
配置截图:


6.3 配置联系人与商机详情页面
在联系人 Collection 的详情弹窗中,添加以下区块:
- 商机 list
- 公司详情
- 线索 list(并按照 ID 进行筛选)
截图:

在商机详情页面,同样添加:
- 联系人 list
- 公司详情
- 线索 list(按 ID 过滤)
截图:

7. 总结
通过以上步骤,您已成功实现一个简单的 CRM 商机转化功能,并配置了联系人、公司与线索之间的关联管理。希望本教程能够以清晰、循序渐进的方式,帮助您掌握整个业务流程的构建,从而为您的项目带来便利和高效的操作体验。
若在操作过程中遇到任何问题,欢迎前往NocoBase社区交流或查阅官方文档。希望本指南能帮助您根据实际需求顺利实现用户注册审核,并根据需要灵活扩展。祝您使用顺利,项目成功!
相关文章:
如何在 NocoBase 中实现 CRM 的线索转化
1. 引言 本教程将一步一步地引导您如何在 NocoBase 中实现 CRM 的商机转化(Opportunity Conversion)功能。我们将介绍如何创建所需的 collections(数据表)、配置数据管理页面、设计转化流程以及设置关联管理,从而帮助…...
StarRocks-fe工程在Cursor中不能识别为Java项目
SR简介 StarRocks 是一款高性能分析型数据库,支持实时、多维度、高并发的数据分析。本指南旨在解决在使用 VSCode 或 Cursor 开发 StarRocks 后端项目时遇到的模块识别问题。 问题描述 使用 Cursor 或 VSCode 打开 StarRocks 的后端工程 fe 时,spark-…...
影刀RPA开发拓展--SQL常用语句全攻略
前言 SQL(结构化查询语言)是数据库管理和操作的核心工具,无论是初学者还是经验丰富的数据库管理员,掌握常用的 SQL 语句对于高效管理和查询数据都至关重要。本文将系统性地介绍最常用的 SQL 语句,并为每个语句提供详细…...
05类加载机制篇(D6_方法调用和方法执行)
目录 一、字节码指令集 二、基本数据类型 1. 加载和存储指令 2. const系列 3. push系列 4. ldc系列 5. load系列 load系列A load系列B 6. store系列 store系列A store系列B 7. pop系列 8. 栈顶元素数学操作及移位操作系列 9. 运算指令 10. 类型转换指令 11. 宽…...
视音频数据处理入门:颜色空间(二)---ffmpeg
目录 概述 流程 相关流程 初始化方法 初始化代码 转换方法 转换代码 释放方法 整体代码介绍 代码路径 概述 本篇简单说一下基于FFmpeg的libswscale的颜色空间转换;Libswscale里面实现了各种图像像素格式的转换,例如:YUV与RGB之间的…...
从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略
前言 最近,我有幸在工作中接触到了DeepSeek R1 671B模型,这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型,以其惊人的6710亿参数量和出色的推理性能,引起了业界广泛关注。 作为一名AI基础…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(5)
1.问题描述: 提供两套标准方案,可根据体验需求选择: 1.地图Picker(地点详情) 用户体验:①展示地图 ②标记地点 ③用户选择已安装地图应用 接入文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guide…...
Leetcode 3469. Find Minimum Cost to Remove Array Elements
Leetcode 3469. Find Minimum Cost to Remove Array Elements 1. 解题思路2. 代码实现 题目链接:3469. Find Minimum Cost to Remove Array Elements 1. 解题思路 这一题我没啥特别好的思路,就只能动态规划了,倒是也能过,不过总…...
Excel的行高、列宽单位不统一?还是LaTeX靠谱
想要生成田字格、米字格、带拼音标准,方便小学生书法和练字。Word,Excel之类所见即所得是最容易相当的方式。但它们处理带田字格之类背景时,如果没有专用模板、奇奇怪怪的插件,使用起来会碰到各种问题。比如,Word里面用…...
(新版本onenet)stm32+esp8266/01s mqtt连接onenet上报温湿度和远程控制(含小程序)
物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意:ESP-01sWIFI模块,去搜了一下这个小东西很有玩点,远程控制LED啥的,然后我就想…...
告别GitHub连不上!一分钟快速访问方案
一、当GitHub抽风时,你是否也这样崩溃过? 😡 npm install卡在node-sass半小时不动😭 git clone到90%突然fatal: early EOF🤬 改了半天hosts文件,第二天又失效了... 根本原因:传统代理需要复杂…...
迷你世界脚本对象库接口:ObjectLib
对象库接口:ObjectLib 迷你世界 更新时间: 2023-04-26 20:21:09 具体函数名及描述如下: 序号 函数名 函数描述 1 getAreaData(...) 获取区域数据 2 getPositionData(...) 获取位置数据 3 getLivingData(...) 获取生物数据 4 getItemDat…...
数据库事务、乐观锁及悲观锁
参考:node支付宝支付及同步、异步通知、主动查询支付宝订单状态 以下容结合上述链接查看 1. 什么是数据库事务? 1.1. 连续执行数据库操作 在支付成功后,我们在自定义的paidSuccess里,依次更新了订单状态和用户信息。也就说这里…...
蓝桥王国--dij模板
#include <bits/stdc.h> // 万能头 using namespace std; typedef pair<long long ,int> PII; int n,m; long long d[300011]; struct edge///邻接表 {int v;long long w; }; int vis[300011]; vector<edge> mp[300011];///邻接表 void dij(int s)///dij单源…...
Java基础关键_017_集合(一)
目 录 一、概述 二、Collection 关系结构 1.概览 2.说明 三、Collection 接口 1.通用方法 (1)add(E e) (2)size() (3)addAll(Collection c) (4)contains(Object o) &#…...
Rust编程实战:Rust实现简单的Web服务,单线程性能问题
知识点 tcp 服务多线程处理 实现功能 启动web服务,访问链接获取页面内容。 单线程web服务 TcpListener 使用 TcpListener 开启服务端口 let listener TcpListener::bind("127.0.0.1:7878").unwrap();处理客户端连接: for stream in lis…...
GitLab 密钥详解:如何安全地使用 SSH 密钥进行身份验证
目录 一、什么是 GitLab SSH 密钥?二、为什么要使用 SSH 密钥?三、如何生成 SSH 密钥?1. Linux/macOS2. Windows 四、将公钥添加到 GitLab五、配置 SSH 客户端六、常见问题及解决方案七、总结 GitLab 是一个功能强大的 Git 仓库管理平台&…...
《论数据分片技术及其应用》审题技巧 - 系统架构设计师
论数据分片技术及其应用写作框架 一、考点概述 本论题“论数据分片技术及其应用”主要考察的是软件工程中数据分片技术的理解、应用及其实际效果分析。考点涵盖以下几个方面: 首先,考生需对数据分片的基本概念有清晰的认识,理解数据分片是…...
【C++】当一个类A中没有声明任何成员变量和成员函数,sizeof(A)是多少?
在 C 中,即使一个类没有任何数据成员(即空类),它的大小也不会是 0,而是 1。这主要有以下几个原因: 地址唯一性要求 C 标准规定,每个对象都必须有唯一的地址。如果空类的大小为 0,那么…...
Maven 私服的搭建与使用(一)
一、引言 在 Java 项目开发中,Maven 作为强大的项目管理和构建工具,极大地提高了开发效率,而 Maven 私服在开发过程中也扮演着至关重要的角色。私服是一种特殊的远程仓库,架设在局域网内,代理广域网上的远程仓库&…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
