From 813df3688cfcba811bdc9087eead0e5fb23ca385 Mon Sep 17 00:00:00 2001 From: iven Date: Sun, 19 Apr 2026 23:49:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(freelance):=20=E6=B7=BB=E5=8A=A0=20plugin.?= =?UTF-8?q?toml=20=E2=80=94=2010=20=E5=AE=9E=E4=BD=93/20=20=E6=9D=83?= =?UTF-8?q?=E9=99=90/7=20=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/erp-plugin-freelance/plugin.toml | 1079 +++++++++++++++++++++++ 1 file changed, 1079 insertions(+) create mode 100644 crates/erp-plugin-freelance/plugin.toml diff --git a/crates/erp-plugin-freelance/plugin.toml b/crates/erp-plugin-freelance/plugin.toml new file mode 100644 index 0000000..38f55d1 --- /dev/null +++ b/crates/erp-plugin-freelance/plugin.toml @@ -0,0 +1,1079 @@ +# 自由职业者工作台 — 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