1080 lines
24 KiB
TOML
1080 lines
24 KiB
TOML
# 自由职业者工作台 — plugin.toml
|
||
# 汕头市智界科技有限公司 IT 服务行业插件
|
||
|
||
[metadata]
|
||
id = "erp-freelance"
|
||
name = "自由职业者工作台"
|
||
version = "0.1.0"
|
||
description = "一人 IT 服务公司的全链路业务管理:客户→商机→报价→合同→项目→工时→开票→收支"
|
||
author = "ERP Platform"
|
||
min_platform_version = "0.1.0"
|
||
|
||
# ── 权限声明(10 实体 × 2 = 20 个权限码)──
|
||
|
||
[[permissions]]
|
||
code = "client.list"
|
||
name = "查看客户"
|
||
description = "查看客户列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "client.manage"
|
||
name = "管理客户"
|
||
description = "创建、编辑、删除客户"
|
||
|
||
[[permissions]]
|
||
code = "opportunity.list"
|
||
name = "查看商机"
|
||
description = "查看商机列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "opportunity.manage"
|
||
name = "管理商机"
|
||
description = "创建、编辑、删除商机"
|
||
|
||
[[permissions]]
|
||
code = "quote.list"
|
||
name = "查看报价"
|
||
description = "查看报价单列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "quote.manage"
|
||
name = "管理报价"
|
||
description = "创建、编辑、删除报价单"
|
||
|
||
[[permissions]]
|
||
code = "quote_line.list"
|
||
name = "查看报价明细"
|
||
description = "查看报价明细列表"
|
||
|
||
[[permissions]]
|
||
code = "quote_line.manage"
|
||
name = "管理报价明细"
|
||
description = "创建、编辑、删除报价明细"
|
||
|
||
[[permissions]]
|
||
code = "contract.list"
|
||
name = "查看合同"
|
||
description = "查看合同列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "contract.manage"
|
||
name = "管理合同"
|
||
description = "创建、编辑、删除合同"
|
||
|
||
[[permissions]]
|
||
code = "project.list"
|
||
name = "查看项目"
|
||
description = "查看项目列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "project.manage"
|
||
name = "管理项目"
|
||
description = "创建、编辑、删除项目"
|
||
|
||
[[permissions]]
|
||
code = "task.list"
|
||
name = "查看任务"
|
||
description = "查看任务列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "task.manage"
|
||
name = "管理任务"
|
||
description = "创建、编辑、删除任务"
|
||
|
||
[[permissions]]
|
||
code = "time_entry.list"
|
||
name = "查看工时"
|
||
description = "查看工时记录列表"
|
||
|
||
[[permissions]]
|
||
code = "time_entry.manage"
|
||
name = "管理工时"
|
||
description = "创建、编辑、删除工时记录"
|
||
|
||
[[permissions]]
|
||
code = "invoice.list"
|
||
name = "查看发票"
|
||
description = "查看发票/收款列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "invoice.manage"
|
||
name = "管理发票"
|
||
description = "创建、编辑、删除发票/收款记录"
|
||
|
||
[[permissions]]
|
||
code = "expense.list"
|
||
name = "查看支出"
|
||
description = "查看支出列表和详情"
|
||
|
||
[[permissions]]
|
||
code = "expense.manage"
|
||
name = "管理支出"
|
||
description = "创建、编辑、删除支出记录"
|
||
|
||
# ── 实体定义 ──
|
||
|
||
# ── 2.3.1 client(客户)──
|
||
|
||
[[schema.entities]]
|
||
name = "client"
|
||
display_name = "客户"
|
||
is_public = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "name"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "客户名称"
|
||
searchable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "contact_name"
|
||
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 = "industry"
|
||
field_type = "string"
|
||
display_name = "行业"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
options = [
|
||
{ label = "制造业", value = "manufacturing" },
|
||
{ label = "零售", value = "retail" },
|
||
{ label = "教育", value = "education" },
|
||
{ label = "医疗", value = "healthcare" },
|
||
{ label = "政府", value = "government" },
|
||
{ label = "金融", value = "finance" },
|
||
{ label = "其他", value = "other" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "source"
|
||
field_type = "string"
|
||
display_name = "来源"
|
||
ui_widget = "select"
|
||
options = [
|
||
{ label = "转介绍", value = "referral" },
|
||
{ label = "线上", value = "online" },
|
||
{ label = "展会", value = "exhibition" },
|
||
{ label = "老客户", value = "repeat" },
|
||
{ label = "主动开发", value = "outreach" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "level"
|
||
field_type = "string"
|
||
display_name = "重要等级"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
options = [
|
||
{ label = "A", value = "a" },
|
||
{ label = "B", value = "b" },
|
||
{ label = "C", value = "c" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "status"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "状态"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "potential"
|
||
options = [
|
||
{ label = "潜在", value = "potential" },
|
||
{ label = "活跃", value = "active" },
|
||
{ label = "休眠", value = "dormant" },
|
||
{ label = "流失", value = "lost" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "address"
|
||
field_type = "string"
|
||
display_name = "地址"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "notes"
|
||
field_type = "string"
|
||
display_name = "备注"
|
||
ui_widget = "textarea"
|
||
|
||
# ── 2.3.2 opportunity(商机)──
|
||
|
||
[[schema.entities]]
|
||
name = "opportunity"
|
||
display_name = "商机"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "client_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "客户"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "client"
|
||
ref_label_field = "name"
|
||
ref_search_fields = ["name"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "title"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "商机名称"
|
||
searchable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "business_type"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "业务类型"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
options = [
|
||
{ label = "软件开发", value = "software_development" },
|
||
{ label = "AI 开发", value = "ai_development" },
|
||
{ label = "系统集成", value = "system_integration" },
|
||
{ label = "软件外包", value = "software_outsourcing" },
|
||
{ label = "IT 咨询", value = "it_consulting" },
|
||
{ label = "数字内容", value = "digital_content" },
|
||
{ label = "营销策划", value = "marketing_planning" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "stage"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "阶段"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "visit"
|
||
options = [
|
||
{ label = "初访", value = "visit" },
|
||
{ label = "需求确认", value = "requirement" },
|
||
{ label = "报价", value = "quote" },
|
||
{ label = "谈判", value = "negotiation" },
|
||
{ label = "成交", value = "won" },
|
||
{ label = "失败", value = "lost" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "estimated_amount"
|
||
field_type = "decimal"
|
||
display_name = "预估金额"
|
||
sortable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "probability"
|
||
field_type = "integer"
|
||
display_name = "成交概率(%)"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "expected_close_date"
|
||
field_type = "date"
|
||
display_name = "预计成交日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "next_follow_up"
|
||
field_type = "date"
|
||
display_name = "下次跟进日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "description"
|
||
field_type = "string"
|
||
display_name = "需求描述"
|
||
ui_widget = "textarea"
|
||
|
||
# ── 2.3.3 quote(报价单)──
|
||
|
||
[[schema.entities]]
|
||
name = "quote"
|
||
display_name = "报价单"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "client_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "客户"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "client"
|
||
ref_label_field = "name"
|
||
ref_search_fields = ["name"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "opportunity_id"
|
||
field_type = "uuid"
|
||
display_name = "关联商机"
|
||
ref_entity = "opportunity"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "quote_number"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "报价单号"
|
||
unique = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "status"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "状态"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "draft"
|
||
options = [
|
||
{ label = "草稿", value = "draft" },
|
||
{ label = "已发送", value = "sent" },
|
||
{ label = "已接受", value = "accepted" },
|
||
{ label = "已拒绝", value = "rejected" },
|
||
{ label = "已过期", value = "expired" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "valid_until"
|
||
field_type = "date"
|
||
display_name = "有效期至"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "subtotal"
|
||
field_type = "decimal"
|
||
display_name = "小计"
|
||
sortable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "tax_rate"
|
||
field_type = "decimal"
|
||
display_name = "税率(%)"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "total_amount"
|
||
field_type = "decimal"
|
||
display_name = "总金额"
|
||
sortable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "notes"
|
||
field_type = "string"
|
||
display_name = "备注"
|
||
ui_widget = "textarea"
|
||
|
||
[[schema.entities.relations]]
|
||
entity = "quote_line"
|
||
foreign_key = "quote_id"
|
||
on_delete = "cascade"
|
||
name = "lines"
|
||
type = "one_to_many"
|
||
display_field = "item_name"
|
||
|
||
# ── 2.3.4 quote_line(报价明细行)──
|
||
|
||
[[schema.entities]]
|
||
name = "quote_line"
|
||
display_name = "报价明细"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "quote_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "报价单"
|
||
ref_entity = "quote"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "item_name"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "项目名称"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "description"
|
||
field_type = "string"
|
||
display_name = "描述"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "quantity"
|
||
field_type = "decimal"
|
||
required = true
|
||
display_name = "数量"
|
||
default = 1
|
||
|
||
[[schema.entities.fields]]
|
||
name = "unit_price"
|
||
field_type = "decimal"
|
||
required = true
|
||
display_name = "单价"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "unit"
|
||
field_type = "string"
|
||
display_name = "单位"
|
||
ui_widget = "select"
|
||
default = "project"
|
||
options = [
|
||
{ label = "项目", value = "project" },
|
||
{ label = "人月", value = "person_month" },
|
||
{ label = "人天", value = "person_day" },
|
||
{ label = "小时", value = "hour" },
|
||
{ label = "个", value = "piece" },
|
||
{ label = "套", value = "set" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "amount"
|
||
field_type = "decimal"
|
||
display_name = "金额"
|
||
|
||
# ── 2.3.5 contract(合同)──
|
||
|
||
[[schema.entities]]
|
||
name = "contract"
|
||
display_name = "合同"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "client_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "客户"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "client"
|
||
ref_label_field = "name"
|
||
ref_search_fields = ["name"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "opportunity_id"
|
||
field_type = "uuid"
|
||
display_name = "关联商机"
|
||
ref_entity = "opportunity"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "quote_id"
|
||
field_type = "uuid"
|
||
display_name = "关联报价"
|
||
ref_entity = "quote"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "contract_number"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "合同编号"
|
||
unique = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "title"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "合同名称"
|
||
searchable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "type"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "合同类型"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
options = [
|
||
{ label = "开发合同", value = "development" },
|
||
{ label = "集成合同", value = "integration" },
|
||
{ label = "外包合同", value = "outsourcing" },
|
||
{ label = "咨询合同", value = "consulting" },
|
||
{ label = "维保合同", value = "maintenance" },
|
||
{ label = "销售合同", value = "sales" },
|
||
{ label = "其他", value = "other" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "status"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "状态"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "drafting"
|
||
options = [
|
||
{ label = "草拟中", value = "drafting" },
|
||
{ label = "待签署", value = "pending_signature" },
|
||
{ label = "执行中", value = "active" },
|
||
{ label = "已完成", value = "completed" },
|
||
{ label = "已终止", value = "terminated" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "amount"
|
||
field_type = "decimal"
|
||
required = true
|
||
display_name = "合同金额"
|
||
sortable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "paid_amount"
|
||
field_type = "decimal"
|
||
display_name = "已付金额"
|
||
default = 0
|
||
|
||
[[schema.entities.fields]]
|
||
name = "start_date"
|
||
field_type = "date"
|
||
display_name = "开始日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "end_date"
|
||
field_type = "date"
|
||
display_name = "结束日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "payment_terms"
|
||
field_type = "string"
|
||
display_name = "付款条款"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "notes"
|
||
field_type = "string"
|
||
display_name = "备注"
|
||
ui_widget = "textarea"
|
||
|
||
# ── 2.3.6 project(项目)──
|
||
|
||
[[schema.entities]]
|
||
name = "project"
|
||
display_name = "项目"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "client_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "客户"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "client"
|
||
ref_label_field = "name"
|
||
ref_search_fields = ["name"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "contract_id"
|
||
field_type = "uuid"
|
||
display_name = "关联合同"
|
||
ref_entity = "contract"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "opportunity_id"
|
||
field_type = "uuid"
|
||
display_name = "关联商机"
|
||
ref_entity = "opportunity"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "name"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "项目名称"
|
||
searchable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "business_type"
|
||
field_type = "string"
|
||
display_name = "业务类型"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
options = [
|
||
{ label = "软件开发", value = "software_development" },
|
||
{ label = "AI 开发", value = "ai_development" },
|
||
{ label = "系统集成", value = "system_integration" },
|
||
{ label = "软件外包", value = "software_outsourcing" },
|
||
{ label = "IT 咨询", value = "it_consulting" },
|
||
{ label = "数字内容", value = "digital_content" },
|
||
{ label = "营销策划", value = "marketing_planning" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "deliverable_type"
|
||
field_type = "string"
|
||
display_name = "交付物类型"
|
||
ui_widget = "select"
|
||
options = [
|
||
{ label = "软件", value = "software" },
|
||
{ label = "网站", value = "website" },
|
||
{ label = "小程序", value = "miniprogram" },
|
||
{ label = "视频", value = "video" },
|
||
{ label = "设计稿", value = "design" },
|
||
{ label = "文档", value = "document" },
|
||
{ label = "咨询报告", value = "consulting_report" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "status"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "状态"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "pending"
|
||
options = [
|
||
{ label = "待开始", value = "pending" },
|
||
{ label = "进行中", value = "in_progress" },
|
||
{ label = "已交付", value = "delivered" },
|
||
{ label = "验收中", value = "accepting" },
|
||
{ label = "已完成", value = "completed" },
|
||
{ label = "已搁置", value = "shelved" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "start_date"
|
||
field_type = "date"
|
||
display_name = "开始日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "end_date"
|
||
field_type = "date"
|
||
display_name = "截止日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "contract_amount"
|
||
field_type = "decimal"
|
||
display_name = "合同金额"
|
||
sortable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "description"
|
||
field_type = "string"
|
||
display_name = "项目说明"
|
||
ui_widget = "textarea"
|
||
|
||
[[schema.entities.relations]]
|
||
entity = "task"
|
||
foreign_key = "project_id"
|
||
on_delete = "cascade"
|
||
name = "tasks"
|
||
type = "one_to_many"
|
||
display_field = "title"
|
||
|
||
[[schema.entities.relations]]
|
||
entity = "time_entry"
|
||
foreign_key = "project_id"
|
||
on_delete = "cascade"
|
||
name = "time_entries"
|
||
type = "one_to_many"
|
||
display_field = "description"
|
||
|
||
# ── 2.3.7 task(任务)──
|
||
|
||
[[schema.entities]]
|
||
name = "task"
|
||
display_name = "任务"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "project_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "所属项目"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "project"
|
||
ref_label_field = "name"
|
||
ref_search_fields = ["name"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "title"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "任务标题"
|
||
searchable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "status"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "状态"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "todo"
|
||
options = [
|
||
{ label = "待办", value = "todo" },
|
||
{ label = "进行中", value = "in_progress" },
|
||
{ label = "已完成", value = "done" },
|
||
{ label = "已取消", value = "cancelled" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "priority"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "优先级"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "medium"
|
||
options = [
|
||
{ label = "紧急", value = "urgent" },
|
||
{ label = "高", value = "high" },
|
||
{ label = "中", value = "medium" },
|
||
{ label = "低", value = "low" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "due_date"
|
||
field_type = "date"
|
||
display_name = "截止日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "estimated_hours"
|
||
field_type = "decimal"
|
||
display_name = "预估工时"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "actual_hours"
|
||
field_type = "decimal"
|
||
display_name = "实际工时"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "description"
|
||
field_type = "string"
|
||
display_name = "详细说明"
|
||
ui_widget = "textarea"
|
||
|
||
# ── 2.3.8 time_entry(工时记录)──
|
||
|
||
[[schema.entities]]
|
||
name = "time_entry"
|
||
display_name = "工时记录"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "task_id"
|
||
field_type = "uuid"
|
||
display_name = "关联任务"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "task"
|
||
ref_label_field = "title"
|
||
ref_search_fields = ["title"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "project_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "关联项目"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "project"
|
||
ref_label_field = "name"
|
||
ref_search_fields = ["name"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "date"
|
||
field_type = "date"
|
||
required = true
|
||
display_name = "日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "hours"
|
||
field_type = "decimal"
|
||
required = true
|
||
display_name = "时长(小时)"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "description"
|
||
field_type = "string"
|
||
display_name = "工作内容"
|
||
|
||
# ── 2.3.9 invoice(发票/收款)──
|
||
|
||
[[schema.entities]]
|
||
name = "invoice"
|
||
display_name = "发票/收款"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "client_id"
|
||
field_type = "uuid"
|
||
required = true
|
||
display_name = "客户"
|
||
ui_widget = "entity_select"
|
||
ref_entity = "client"
|
||
ref_label_field = "name"
|
||
ref_search_fields = ["name"]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "project_id"
|
||
field_type = "uuid"
|
||
display_name = "关联项目"
|
||
ref_entity = "project"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "contract_id"
|
||
field_type = "uuid"
|
||
display_name = "关联合同"
|
||
ref_entity = "contract"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "invoice_number"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "发票号"
|
||
unique = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "type"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "类型"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
options = [
|
||
{ label = "开票", value = "invoice" },
|
||
{ label = "收款记录", value = "payment" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "amount"
|
||
field_type = "decimal"
|
||
required = true
|
||
display_name = "金额"
|
||
sortable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "status"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "状态"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
default = "pending"
|
||
options = [
|
||
{ label = "待开票", value = "pending" },
|
||
{ label = "已开票", value = "issued" },
|
||
{ label = "部分收款", value = "partial" },
|
||
{ label = "已收款", value = "paid" },
|
||
{ label = "已逾期", value = "overdue" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "issue_date"
|
||
field_type = "date"
|
||
display_name = "开票日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "due_date"
|
||
field_type = "date"
|
||
display_name = "到期日"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "payment_date"
|
||
field_type = "date"
|
||
display_name = "实际收款日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "notes"
|
||
field_type = "string"
|
||
display_name = "备注"
|
||
ui_widget = "textarea"
|
||
|
||
# ── 2.3.10 expense(支出)──
|
||
|
||
[[schema.entities]]
|
||
name = "expense"
|
||
display_name = "支出"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "project_id"
|
||
field_type = "uuid"
|
||
display_name = "关联项目"
|
||
ref_entity = "project"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "category"
|
||
field_type = "string"
|
||
required = true
|
||
display_name = "类别"
|
||
ui_widget = "select"
|
||
filterable = true
|
||
options = [
|
||
{ label = "硬件", value = "hardware" },
|
||
{ label = "软件订阅", value = "software" },
|
||
{ label = "云服务", value = "cloud" },
|
||
{ label = "差旅", value = "travel" },
|
||
{ label = "餐饮", value = "meal" },
|
||
{ label = "办公用品", value = "office" },
|
||
{ label = "其他", value = "other" }
|
||
]
|
||
|
||
[[schema.entities.fields]]
|
||
name = "amount"
|
||
field_type = "decimal"
|
||
required = true
|
||
display_name = "金额"
|
||
sortable = true
|
||
|
||
[[schema.entities.fields]]
|
||
name = "date"
|
||
field_type = "date"
|
||
required = true
|
||
display_name = "日期"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "vendor"
|
||
field_type = "string"
|
||
display_name = "供应商"
|
||
|
||
[[schema.entities.fields]]
|
||
name = "description"
|
||
field_type = "string"
|
||
display_name = "描述"
|
||
|
||
# ── 编号规则 ──
|
||
|
||
[[numbering]]
|
||
entity = "quote"
|
||
field = "quote_number"
|
||
prefix = "QT"
|
||
format = "{PREFIX}-{YEAR}-{SEQ}"
|
||
seq_length = 4
|
||
|
||
[[numbering]]
|
||
entity = "contract"
|
||
field = "contract_number"
|
||
prefix = "CT"
|
||
format = "{PREFIX}-{YEAR}-{SEQ}"
|
||
seq_length = 4
|
||
|
||
[[numbering]]
|
||
entity = "invoice"
|
||
field = "invoice_number"
|
||
prefix = "INV"
|
||
format = "{PREFIX}-{YEAR}-{SEQ}"
|
||
seq_length = 4
|
||
|
||
# ── 页面设计 ──
|
||
|
||
# 页面 1:全局工作台
|
||
[[ui.pages]]
|
||
type = "dashboard"
|
||
label = "工作台"
|
||
icon = "DashboardOutlined"
|
||
|
||
# 页面 2:客户管理(列表 + 详情 + 商机看板)
|
||
[[ui.pages]]
|
||
type = "tabs"
|
||
label = "客户管理"
|
||
icon = "team"
|
||
|
||
[[ui.pages.tabs]]
|
||
label = "客户列表"
|
||
type = "crud"
|
||
entity = "client"
|
||
enable_search = true
|
||
|
||
[[ui.pages]]
|
||
type = "detail"
|
||
entity = "client"
|
||
label = "客户详情"
|
||
|
||
[[ui.pages.sections]]
|
||
type = "fields"
|
||
label = "基本信息"
|
||
fields = ["name", "contact_name", "phone", "email", "industry", "source", "level", "status", "address", "notes"]
|
||
|
||
[[ui.pages.sections]]
|
||
type = "crud"
|
||
label = "商机"
|
||
entity = "opportunity"
|
||
filter_field = "client_id"
|
||
|
||
[[ui.pages.sections]]
|
||
type = "crud"
|
||
label = "报价/合同"
|
||
entity = "quote"
|
||
filter_field = "client_id"
|
||
|
||
[[ui.pages.sections]]
|
||
type = "crud"
|
||
label = "项目"
|
||
entity = "project"
|
||
filter_field = "client_id"
|
||
|
||
[[ui.pages.sections]]
|
||
type = "crud"
|
||
label = "发票"
|
||
entity = "invoice"
|
||
filter_field = "client_id"
|
||
|
||
# 商机看板
|
||
[[ui.pages]]
|
||
type = "kanban"
|
||
entity = "opportunity"
|
||
label = "商机看板"
|
||
icon = "swap"
|
||
lane_field = "stage"
|
||
lane_order = ["visit", "requirement", "quote", "negotiation", "won", "lost"]
|
||
card_title_field = "title"
|
||
card_subtitle_field = "estimated_amount"
|
||
card_fields = ["business_type", "probability"]
|
||
enable_drag = true
|
||
|
||
# 页面 3:项目管理 + 详情
|
||
[[ui.pages]]
|
||
type = "crud"
|
||
entity = "project"
|
||
label = "项目管理"
|
||
icon = "project"
|
||
enable_search = true
|
||
|
||
[[ui.pages]]
|
||
type = "detail"
|
||
entity = "project"
|
||
label = "项目详情"
|
||
|
||
[[ui.pages.sections]]
|
||
type = "fields"
|
||
label = "项目信息"
|
||
fields = ["name", "client_id", "contract_id", "business_type", "deliverable_type", "status", "start_date", "end_date", "contract_amount", "description"]
|
||
|
||
[[ui.pages.sections]]
|
||
type = "crud"
|
||
label = "任务"
|
||
entity = "task"
|
||
filter_field = "project_id"
|
||
|
||
[[ui.pages.sections]]
|
||
type = "crud"
|
||
label = "工时记录"
|
||
entity = "time_entry"
|
||
filter_field = "project_id"
|
||
|
||
[[ui.pages.sections]]
|
||
type = "crud"
|
||
label = "发票"
|
||
entity = "invoice"
|
||
filter_field = "project_id"
|
||
|
||
# 页面 4:财务中心
|
||
[[ui.pages]]
|
||
type = "tabs"
|
||
label = "财务中心"
|
||
icon = "account-book"
|
||
|
||
[[ui.pages.tabs]]
|
||
label = "报价管理"
|
||
type = "crud"
|
||
entity = "quote"
|
||
enable_search = true
|
||
|
||
[[ui.pages.tabs]]
|
||
label = "合同管理"
|
||
type = "crud"
|
||
entity = "contract"
|
||
enable_search = true
|
||
|
||
[[ui.pages.tabs]]
|
||
label = "发票/收款"
|
||
type = "crud"
|
||
entity = "invoice"
|
||
enable_search = true
|
||
|
||
# 页面 5:支出管理
|
||
[[ui.pages]]
|
||
type = "crud"
|
||
entity = "expense"
|
||
label = "支出管理"
|
||
icon = "pay-circle"
|
||
enable_search = true
|