浏览代码

feat(线索): 添加线索来源枚举和下拉选择功能

yz 1 周之前
父节点
当前提交
c9c7e691a7
共有 2 个文件被更改,包括 51 次插入2 次删除
  1. 42 0
      src/constants/lead.js
  2. 9 2
      src/views/lead/mixins/leadIndex.js

+ 42 - 0
src/constants/lead.js

@@ -108,6 +108,48 @@ export const LEAD_STATUS_OPTIONS = [
 ]
 
 /**
+ * 线索来源枚举
+ * @readonly
+ * @enum {string}
+ */
+export const LEAD_SOURCE = {
+  /** 线上广告 */
+  ONLINE_ADS: '线上广告',
+  /** 线下活动 */
+  OFFLINE_EVENTS: '线下活动',
+  /** 客户推荐 */
+  CUSTOMER_REFERRAL: '客户推荐'
+}
+
+/**
+ * 线索来源选项数据
+ * @readonly
+ * @type {Array<{label: string, value: string}>}
+ */
+export const LEAD_SOURCE_OPTIONS = [
+  { label: LEAD_SOURCE.ONLINE_ADS, value: LEAD_SOURCE.ONLINE_ADS },
+  { label: LEAD_SOURCE.OFFLINE_EVENTS, value: LEAD_SOURCE.OFFLINE_EVENTS },
+  { label: LEAD_SOURCE.CUSTOMER_REFERRAL, value: LEAD_SOURCE.CUSTOMER_REFERRAL }
+]
+
+/**
+ * 验证线索来源值是否有效
+ * @param {string} source - 来源值
+ * @returns {boolean} 是否有效
+ */
+export function isValidLeadSource(source) {
+  return Object.values(LEAD_SOURCE).includes(source)
+}
+
+/**
+ * 获取所有线索来源值
+ * @returns {Array<string>} 所有来源值
+ */
+export function getAllLeadSourceValues() {
+  return Object.values(LEAD_SOURCE)
+}
+
+/**
  * 获取线索优先级标签
  * @param {number} priority - 优先级值
  * @returns {string} 优先级标签

+ 9 - 2
src/views/lead/mixins/leadIndex.js

@@ -21,7 +21,8 @@ import {
   isLeadEditable,
   isLeadConvertible,
   isLeadCompleted,
-  isLeadActive
+  isLeadActive,
+  LEAD_SOURCE_OPTIONS
 } from '@/constants/lead'
 
 
@@ -434,9 +435,15 @@ export default {
                     {
                         label: '线索来源',
                         prop: 'source',
+                        type: 'select',
+                        filterable: true,
+                        allowCreate: true,
+                        clearable: true,
+                        placeholder: '请选择或输入线索来源',
+                        dicData: LEAD_SOURCE_OPTIONS,
                         rules: [{
                             required: true,
-                            message: '请输入线索来源',
+                            message: '请选择或输入线索来源',
                             trigger: 'blur'
                         }],
                         search: true