[metadata] id = "erp-crm" name = "CRM" version = "0.1.0" description = "客户关系管理插件 — ERP 平台第一个行业插件" author = "ERP Team" min_platform_version = "0.1.0" # ── 权限声明 ── [[permissions]] code = "customer.list" name = "查看客户" description = "查看客户列表和详情" data_scope_levels = ["self", "department", "department_tree", "all"] [[permissions]] code = "customer.manage" name = "管理客户" description = "创建、编辑、删除客户" data_scope_levels = ["self", "department", "department_tree", "all"] [[permissions]] code = "contact.list" name = "查看联系人" [[permissions]] code = "contact.manage" name = "管理联系人" [[permissions]] code = "communication.list" name = "查看沟通记录" [[permissions]] code = "communication.manage" name = "管理沟通记录" [[permissions]] code = "tag.manage" name = "管理客户标签" [[permissions]] code = "relationship.list" name = "查看客户关系" [[permissions]] code = "relationship.manage" name = "管理客户关系" # ── 实体定义 ── [[schema.entities]] name = "customer" display_name = "客户" data_scope = true [[schema.entities.fields]] name = "code" field_type = "string" required = true display_name = "客户编码" unique = true searchable = true [[schema.entities.fields]] name = "name" field_type = "string" required = true display_name = "客户名称" searchable = true [[schema.entities.fields]] name = "customer_type" field_type = "string" required = true display_name = "客户类型" ui_widget = "select" filterable = true options = [ { label = "企业", value = "enterprise" }, { label = "个人", value = "personal" } ] [[schema.entities.fields]] name = "industry" field_type = "string" display_name = "行业" filterable = true [[schema.entities.fields]] name = "region" field_type = "string" display_name = "地区" filterable = true [[schema.entities.fields]] name = "source" field_type = "string" display_name = "来源" ui_widget = "select" options = [ { label = "推荐", value = "referral" }, { label = "广告", value = "ad" }, { label = "展会", value = "exhibition" }, { label = "主动联系", value = "outreach" }, { label = "其他", value = "other" } ] [[schema.entities.fields]] name = "level" field_type = "string" display_name = "等级" ui_widget = "select" filterable = true options = [ { label = "潜在客户", value = "potential" }, { label = "普通客户", value = "normal" }, { label = "VIP", value = "vip" }, { label = "SVIP", value = "svip" } ] [[schema.entities.fields]] name = "status" field_type = "string" required = true display_name = "状态" ui_widget = "select" filterable = true options = [ { label = "活跃", value = "active" }, { label = "停用", value = "inactive" }, { label = "黑名单", value = "blacklist" } ] [[schema.entities.fields]] name = "credit_code" field_type = "string" display_name = "统一社会信用代码" visible_when = "customer_type == 'enterprise'" [[schema.entities.fields]] name = "id_number" field_type = "string" display_name = "身份证号" visible_when = "customer_type == 'personal'" [[schema.entities.fields]] name = "parent_id" field_type = "uuid" display_name = "上级客户" [[schema.entities.fields]] name = "website" field_type = "string" display_name = "网站" [[schema.entities.fields]] name = "address" field_type = "string" display_name = "地址" [[schema.entities.fields]] name = "remark" field_type = "string" display_name = "备注" ui_widget = "textarea" [[schema.entities.fields]] name = "owner_id" field_type = "uuid" display_name = "负责人" scope_role = "owner" [[schema.entities]] name = "contact" display_name = "联系人" [[schema.entities.fields]] name = "customer_id" field_type = "uuid" required = true display_name = "所属客户" ui_widget = "entity_select" ref_label_field = "name" ref_search_fields = ["name", "code"] [[schema.entities.fields]] name = "name" field_type = "string" required = true display_name = "姓名" searchable = true [[schema.entities.fields]] name = "position" field_type = "string" display_name = "职务" [[schema.entities.fields]] name = "department" field_type = "string" display_name = "部门" [[schema.entities.fields]] name = "phone" field_type = "string" display_name = "手机号" [[schema.entities.fields]] name = "email" field_type = "string" display_name = "邮箱" [[schema.entities.fields]] name = "wechat" field_type = "string" display_name = "微信号" [[schema.entities.fields]] name = "is_primary" field_type = "boolean" display_name = "主联系人" [[schema.entities.fields]] name = "remark" field_type = "string" display_name = "备注" [[schema.entities]] name = "communication" display_name = "沟通记录" [[schema.entities.fields]] name = "customer_id" field_type = "uuid" required = true display_name = "关联客户" [[schema.entities.fields]] name = "contact_id" field_type = "uuid" display_name = "关联联系人" ui_widget = "entity_select" ref_label_field = "name" ref_search_fields = ["name"] cascade_from = "customer_id" cascade_filter = "customer_id" [[schema.entities.fields]] name = "type" field_type = "string" required = true display_name = "类型" ui_widget = "select" filterable = true options = [ { label = "电话", value = "phone" }, { label = "邮件", value = "email" }, { label = "会议", value = "meeting" }, { label = "拜访", value = "visit" }, { label = "其他", value = "other" } ] [[schema.entities.fields]] name = "subject" field_type = "string" required = true display_name = "主题" searchable = true [[schema.entities.fields]] name = "content" field_type = "string" required = true display_name = "内容" ui_widget = "textarea" [[schema.entities.fields]] name = "occurred_at" field_type = "date_time" required = true display_name = "沟通时间" sortable = true [[schema.entities.fields]] name = "next_follow_up" field_type = "date" display_name = "下次跟进日期" [[schema.entities]] name = "customer_tag" display_name = "客户标签" [[schema.entities.fields]] name = "customer_id" field_type = "uuid" required = true display_name = "关联客户" [[schema.entities.fields]] name = "tag_name" field_type = "string" required = true display_name = "标签名称" searchable = true [[schema.entities.fields]] name = "tag_category" field_type = "string" display_name = "标签分类" ui_widget = "select" options = [ { label = "行业", value = "industry" }, { label = "地区", value = "region" }, { label = "来源", value = "source" }, { label = "自定义", value = "custom" } ] [[schema.entities]] name = "customer_relationship" display_name = "客户关系" [[schema.entities.fields]] name = "from_customer_id" field_type = "uuid" required = true display_name = "源客户" [[schema.entities.fields]] name = "to_customer_id" field_type = "uuid" required = true display_name = "目标客户" [[schema.entities.fields]] name = "relationship_type" field_type = "string" required = true display_name = "关系类型" ui_widget = "select" filterable = true options = [ { label = "母子公司", value = "parent_child" }, { label = "兄弟公司", value = "sibling" }, { label = "合作伙伴", value = "partner" }, { label = "供应商", value = "supplier" }, { label = "竞争对手", value = "competitor" } ] [[schema.entities.fields]] name = "description" field_type = "string" display_name = "关系描述" # ── 页面声明 ── [[ui.pages]] type = "tabs" label = "客户管理" icon = "team" [[ui.pages.tabs]] label = "客户列表" type = "crud" entity = "customer" enable_search = true enable_views = ["table"] [[ui.pages.tabs]] label = "客户层级" type = "tree" entity = "customer" id_field = "id" parent_field = "parent_id" label_field = "name" [[ui.pages]] type = "detail" entity = "customer" label = "客户详情" [[ui.pages.sections]] type = "fields" label = "基本信息" fields = ["code", "name", "customer_type", "industry", "region", "level", "status", "credit_code", "id_number", "website", "address", "remark"] [[ui.pages.sections]] type = "crud" label = "联系人" entity = "contact" filter_field = "customer_id" [[ui.pages.sections]] type = "crud" label = "沟通记录" entity = "communication" filter_field = "customer_id" enable_views = ["table", "timeline"] [[ui.pages]] type = "crud" entity = "contact" label = "联系人" icon = "user" enable_search = true [[ui.pages]] type = "crud" entity = "communication" label = "沟通记录" icon = "message" enable_search = true enable_views = ["table", "timeline"] [[ui.pages]] type = "crud" entity = "customer_tag" label = "标签管理" icon = "tags" [[ui.pages]] type = "crud" entity = "customer_relationship" label = "客户关系" icon = "apartment" [[ui.pages]] type = "graph" entity = "customer" label = "关系图谱" icon = "apartment" relationship_entity = "customer_relationship" source_field = "from_customer_id" target_field = "to_customer_id" edge_label_field = "relationship_type" node_label_field = "name" [[ui.pages]] type = "dashboard" label = "统计概览" icon = "DashboardOutlined" [[ui.pages]] type = "kanban" entity = "customer" label = "销售漏斗" icon = "swap" lane_field = "level" lane_order = ["potential", "normal", "vip", "svip"] card_title_field = "name" card_subtitle_field = "code" card_fields = ["region", "status"] enable_drag = true