Files
erp/plans/skill-parallel-pixel.md

1302 lines
30 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 汕头市智界科技有限公司 — 行业插件设计规格
> 日期: 2026-04-19
> 来源: 无主题发散式互动探讨(多专家头脑风暴)
> 状态: Draft
---
## 1. 背景与动机
以汕头市智界科技有限公司(一人 IT 服务公司)为案例,设计针对 IT 服务行业的 ERP 插件组合,覆盖其全部 9 条经营范围。
**公司经营范围:**
1. 软件开发
2. 数字文化创意软件开发
3. 人工智能基础/应用软件开发
4. 信息系统集成服务
5. 网络技术服务
6. 软件销售
7. 软件外包服务
8. 计算机软硬件及辅助设备批发/零售
9. 信息技术咨询服务
10. 信息系统运行维护服务
11. 数字内容制作服务
12. 市场营销策划
**设计原则:**
- 一人公司优先:所有功能对单人操作友好,减少上下文切换
- 最少插件覆盖最多场景3 个插件覆盖全部经营范围
- 快捷操作优先:高频操作一键完成,不打开完整表单
- 全局工作台:一个仪表盘掌握全局
**插件组合与经营范围对照:**
| 插件 | 覆盖的经营范围 |
|------|--------------|
| freelance自由职业者工作台 | 软件开发、AI开发、系统集成、外包、IT咨询、数字内容、营销策划 |
| itopsIT 运维服务台) | IT 运维服务、网络技术服务 |
| inventory已有需扩展 | 软硬件批发零售 |
---
## 2. 插件 1erp-plugin-freelance自由职业者工作台
### 2.1 插件元数据
```toml
[metadata]
id = "erp-freelance"
name = "自由职业者工作台"
version = "0.1.0"
description = "一人 IT 服务公司的全链路业务管理:客户→商机→报价→合同→项目→工时→开票→收支"
author = "ERP Platform"
```
### 2.2 实体设计9 个实体)
#### 2.2.1 client客户
```toml
[[schema.entities]]
name = "client"
display_name = "客户"
[[schema.entities.fields]]
name = "name"
field_type = "string"
display_name = "客户名称"
required = 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"
options = ["制造业", "零售", "教育", "医疗", "政府", "金融", "其他"]
[[schema.entities.fields]]
name = "source"
field_type = "string"
display_name = "来源"
ui_widget = "select"
options = ["转介绍", "线上", "展会", "老客户", "主动开发"]
[[schema.entities.fields]]
name = "level"
field_type = "string"
display_name = "重要等级"
ui_widget = "select"
options = ["A", "B", "C"]
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["潜在", "活跃", "休眠", "流失"]
default_value = "潜在"
[[schema.entities.fields]]
name = "address"
field_type = "string"
display_name = "地址"
[[schema.entities.fields]]
name = "notes"
field_type = "text"
display_name = "备注"
```
#### 2.2.2 opportunity商机
```toml
[[schema.entities]]
name = "opportunity"
display_name = "商机"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
required = true
[[schema.entities.fields]]
name = "title"
field_type = "string"
display_name = "商机名称"
required = true
[[schema.entities.fields]]
name = "business_type"
field_type = "string"
display_name = "业务类型"
ui_widget = "select"
options = ["software_development", "ai_development", "system_integration", "software_outsourcing", "it_consulting", "digital_content", "marketing_planning"]
required = true
[[schema.entities.fields]]
name = "stage"
field_type = "string"
display_name = "阶段"
ui_widget = "select"
options = ["初访", "需求确认", "报价", "谈判", "成交", "失败"]
default_value = "初访"
[[schema.entities.fields]]
name = "estimated_amount"
field_type = "number"
display_name = "预估金额"
[[schema.entities.fields]]
name = "probability"
field_type = "number"
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 = "text"
display_name = "需求描述"
```
#### 2.2.3 quote报价单
```toml
[[schema.entities]]
name = "quote"
display_name = "报价单"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
required = true
[[schema.entities.fields]]
name = "opportunity_id"
field_type = "uuid"
display_name = "关联商机"
ref_entity = "opportunity"
[[schema.entities.fields]]
name = "quote_number"
field_type = "string"
display_name = "报价单号"
generated = true
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["草稿", "已发送", "已接受", "已拒绝", "已过期"]
default_value = "草稿"
[[schema.entities.fields]]
name = "valid_until"
field_type = "date"
display_name = "有效期至"
[[schema.entities.fields]]
name = "subtotal"
field_type = "number"
display_name = "小计"
[[schema.entities.fields]]
name = "tax_rate"
field_type = "number"
display_name = "税率(%)"
default_value = 0
[[schema.entities.fields]]
name = "total_amount"
field_type = "number"
display_name = "总金额"
[[schema.entities.fields]]
name = "notes"
field_type = "text"
display_name = "备注"
```
#### 2.2.4 quote_line报价明细行
```toml
[[schema.entities]]
name = "quote_line"
display_name = "报价明细"
[[schema.entities.fields]]
name = "quote_id"
field_type = "uuid"
display_name = "报价单"
ref_entity = "quote"
required = true
[[schema.entities.fields]]
name = "item_name"
field_type = "string"
display_name = "项目名称"
required = true
[[schema.entities.fields]]
name = "description"
field_type = "string"
display_name = "描述"
[[schema.entities.fields]]
name = "quantity"
field_type = "number"
display_name = "数量"
required = true
default_value = 1
[[schema.entities.fields]]
name = "unit_price"
field_type = "number"
display_name = "单价"
required = true
[[schema.entities.fields]]
name = "unit"
field_type = "string"
display_name = "单位"
ui_widget = "select"
options = ["项目", "人月", "人天", "小时", "个", "套"]
default_value = "项目"
[[schema.entities.fields]]
name = "amount"
field_type = "number"
display_name = "金额"
```
#### 2.2.5 contract合同
```toml
[[schema.entities]]
name = "contract"
display_name = "合同"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
required = true
[[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"
display_name = "合同编号"
generated = true
[[schema.entities.fields]]
name = "title"
field_type = "string"
display_name = "合同名称"
required = true
[[schema.entities.fields]]
name = "type"
field_type = "string"
display_name = "合同类型"
ui_widget = "select"
options = ["开发合同", "集成合同", "外包合同", "咨询合同", "维保合同", "销售合同", "其他"]
required = true
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["草拟中", "待签署", "执行中", "已完成", "已终止"]
default_value = "草拟中"
[[schema.entities.fields]]
name = "amount"
field_type = "number"
display_name = "合同金额"
required = true
[[schema.entities.fields]]
name = "paid_amount"
field_type = "number"
display_name = "已付金额"
default_value = 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 = "text"
display_name = "备注"
```
#### 2.2.6 project项目
```toml
[[schema.entities]]
name = "project"
display_name = "项目"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
required = true
[[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"
display_name = "项目名称"
required = true
[[schema.entities.fields]]
name = "business_type"
field_type = "string"
display_name = "业务类型"
ui_widget = "select"
options = ["software_development", "ai_development", "system_integration", "software_outsourcing", "it_consulting", "digital_content", "marketing_planning"]
[[schema.entities.fields]]
name = "deliverable_type"
field_type = "string"
display_name = "交付物类型"
ui_widget = "select"
options = ["software", "website", "miniprogram", "video", "design", "document", "consulting_report"]
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["待开始", "进行中", "已交付", "验收中", "已完成", "已搁置"]
default_value = "待开始"
[[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 = "number"
display_name = "合同金额"
[[schema.entities.fields]]
name = "description"
field_type = "text"
display_name = "项目说明"
```
#### 2.2.7 task任务
```toml
[[schema.entities]]
name = "task"
display_name = "任务"
[[schema.entities.fields]]
name = "project_id"
field_type = "uuid"
display_name = "所属项目"
ref_entity = "project"
required = true
[[schema.entities.fields]]
name = "title"
field_type = "string"
display_name = "任务标题"
required = true
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["待办", "进行中", "已完成", "已取消"]
default_value = "待办"
[[schema.entities.fields]]
name = "priority"
field_type = "string"
display_name = "优先级"
ui_widget = "select"
options = ["紧急", "高", "中", "低"]
default_value = "中"
[[schema.entities.fields]]
name = "due_date"
field_type = "date"
display_name = "截止日期"
[[schema.entities.fields]]
name = "estimated_hours"
field_type = "number"
display_name = "预估工时"
[[schema.entities.fields]]
name = "actual_hours"
field_type = "number"
display_name = "实际工时"
[[schema.entities.fields]]
name = "description"
field_type = "text"
display_name = "详细说明"
```
#### 2.2.8 time_entry工时记录
```toml
[[schema.entities]]
name = "time_entry"
display_name = "工时记录"
[[schema.entities.fields]]
name = "task_id"
field_type = "uuid"
display_name = "关联任务"
ref_entity = "task"
[[schema.entities.fields]]
name = "project_id"
field_type = "uuid"
display_name = "关联项目"
ref_entity = "project"
required = true
[[schema.entities.fields]]
name = "date"
field_type = "date"
display_name = "日期"
required = true
[[schema.entities.fields]]
name = "hours"
field_type = "number"
display_name = "时长(小时)"
required = true
[[schema.entities.fields]]
name = "description"
field_type = "string"
display_name = "工作内容"
```
#### 2.2.9 invoice发票/收款)
```toml
[[schema.entities]]
name = "invoice"
display_name = "发票/收款"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
required = true
[[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"
display_name = "发票号"
generated = true
[[schema.entities.fields]]
name = "type"
field_type = "string"
display_name = "类型"
ui_widget = "select"
options = ["开票", "收款记录"]
required = true
[[schema.entities.fields]]
name = "amount"
field_type = "number"
display_name = "金额"
required = true
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["待开票", "已开票", "部分收款", "已收款", "已逾期"]
default_value = "待开票"
[[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 = "text"
display_name = "备注"
```
#### 2.2.10 expense支出
```toml
[[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"
display_name = "类别"
ui_widget = "select"
options = ["硬件", "软件订阅", "云服务", "差旅", "餐饮", "办公用品", "其他"]
required = true
[[schema.entities.fields]]
name = "amount"
field_type = "number"
display_name = "金额"
required = true
[[schema.entities.fields]]
name = "date"
field_type = "date"
display_name = "日期"
required = true
[[schema.entities.fields]]
name = "vendor"
field_type = "string"
display_name = "供应商"
[[schema.entities.fields]]
name = "description"
field_type = "string"
display_name = "描述"
```
### 2.3 权限声明10 实体 x 2 = 20 个权限码)
```toml
[[permissions]]
code = "client.list"
name = "查看客户"
[[permissions]]
code = "client.manage"
name = "管理客户"
[[permissions]]
code = "opportunity.list"
name = "查看商机"
[[permissions]]
code = "opportunity.manage"
name = "管理商机"
[[permissions]]
code = "quote.list"
name = "查看报价"
[[permissions]]
code = "quote.manage"
name = "管理报价"
[[permissions]]
code = "quote_line.list"
name = "查看报价明细"
[[permissions]]
code = "quote_line.manage"
name = "管理报价明细"
[[permissions]]
code = "contract.list"
name = "查看合同"
[[permissions]]
code = "contract.manage"
name = "管理合同"
[[permissions]]
code = "project.list"
name = "查看项目"
[[permissions]]
code = "project.manage"
name = "管理项目"
[[permissions]]
code = "task.list"
name = "查看任务"
[[permissions]]
code = "task.manage"
name = "管理任务"
[[permissions]]
code = "time_entry.list"
name = "查看工时"
[[permissions]]
code = "time_entry.manage"
name = "管理工时"
[[permissions]]
code = "invoice.list"
name = "查看发票"
[[permissions]]
code = "invoice.manage"
name = "管理发票"
[[permissions]]
code = "expense.list"
name = "查看支出"
[[permissions]]
code = "expense.manage"
name = "管理支出"
```
### 2.4 页面设计4 个页面)
#### 页面 1全局工作台Dashboard
展示内容:
- **财务概览**:本月收入/支出/利润、应收总额、逾期金额
- **紧急待办**今日到期任务、逾期收款、即将到期合同7天内
- **活跃项目**:进行中项目卡片(进度条 = 已用工时/预估工时)
- **最新工单**:最近 5 条 itops 工单(如已安装)
- **商机跟进提醒**next_follow_up 在本周内的商机
快捷操作按钮条(页面顶部):
- 开始/停止计时(悬浮计时器)
- 快速记支出3 字段:金额+分类+备注)
- 新建报价
- 新建工单(如 itops 已安装)
#### 页面 2客户管理
客户列表(支持搜索、按来源/行业/等级/状态筛选)+ 客户详情 Tab 页:
- Tab 1基本信息
- Tab 2商机列表看板视图按阶段分列
- Tab 3报价/合同
- Tab 4项目
- Tab 5发票/收支
从客户详情一键生成:报价单 / 合同 / 项目
#### 页面 3项目工作台
项目列表 → 项目详情 Tab 页:
- Tab 1项目信息
- Tab 2任务列表状态分组支持拖拽排序
- Tab 3工时记录支持快速录入
- Tab 4关联发票
#### 页面 4财务中心
Tab 1报价管理报价单列表 + 详情)
Tab 2合同管理合同列表 + 详情 + 到期预警)
Tab 3发票/收款(发票列表 + 收支统计图表)
---
## 3. 插件 2erp-plugin-itopsIT 运维服务台)
### 3.1 插件元数据
```toml
[metadata]
id = "erp-itops"
name = "IT 运维服务台"
version = "0.1.0"
description = "IT 运维工单管理 + SLA 追踪 + 定期巡检"
author = "ERP Platform"
```
### 3.2 跨插件依赖声明
```toml
[dependencies.freelance]
optional = true
description = "自由职业者工作台 — 自动关联客户数据,未安装时客户字段为手动输入"
```
### 3.3 实体设计4 个实体)
#### 3.3.1 service_contract维保合同
```toml
[[schema.entities]]
name = "service_contract"
display_name = "维保合同"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
ref_scope = "external"
ref_display_field = "name"
ref_search_fields = ["name", "phone"]
ref_fallback_label = "外部客户"
filterable = true
[[schema.entities.fields]]
name = "contract_number"
field_type = "string"
display_name = "合同编号"
generated = true
[[schema.entities.fields]]
name = "name"
field_type = "string"
display_name = "合同名称"
required = true
[[schema.entities.fields]]
name = "service_scope"
field_type = "text"
display_name = "服务范围"
[[schema.entities.fields]]
name = "sla_level"
field_type = "string"
display_name = "SLA 等级"
ui_widget = "select"
options = ["标准", "银牌", "金牌"]
required = true
default_value = "标准"
[[schema.entities.fields]]
name = "sla_response_hours"
field_type = "number"
display_name = "SLA 响应时间(小时)"
default_value = 8
[[schema.entities.fields]]
name = "sla_resolve_hours"
field_type = "number"
display_name = "SLA 解决时间(小时)"
default_value = 48
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["生效中", "即将到期", "已过期", "已终止"]
default_value = "生效中"
[[schema.entities.fields]]
name = "start_date"
field_type = "date"
display_name = "开始日期"
required = true
[[schema.entities.fields]]
name = "end_date"
field_type = "date"
display_name = "结束日期"
required = true
[[schema.entities.fields]]
name = "amount"
field_type = "number"
display_name = "合同金额"
[[schema.entities.fields]]
name = "payment_terms"
field_type = "string"
display_name = "付款条款"
[[schema.entities.fields]]
name = "notes"
field_type = "text"
display_name = "备注"
```
#### 3.3.2 ticket工单
```toml
[[schema.entities]]
name = "ticket"
display_name = "工单"
[[schema.entities.fields]]
name = "contract_id"
field_type = "uuid"
display_name = "维保合同"
ref_entity = "service_contract"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
ref_scope = "external"
ref_display_field = "name"
ref_search_fields = ["name", "phone"]
ref_fallback_label = "外部客户"
filterable = true
[[schema.entities.fields]]
name = "title"
field_type = "string"
display_name = "工单标题"
required = true
[[schema.entities.fields]]
name = "type"
field_type = "string"
display_name = "类型"
ui_widget = "select"
options = ["故障", "巡检", "咨询", "变更", "其他"]
default_value = "故障"
[[schema.entities.fields]]
name = "priority"
field_type = "string"
display_name = "优先级"
ui_widget = "select"
options = ["紧急", "高", "中", "低"]
default_value = "中"
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["待处理", "处理中", "等待客户", "已解决", "已关闭"]
default_value = "待处理"
[[schema.entities.fields]]
name = "channel"
field_type = "string"
display_name = "来源渠道"
ui_widget = "select"
options = ["电话", "微信", "邮件", "系统"]
[[schema.entities.fields]]
name = "description"
field_type = "text"
display_name = "问题描述"
[[schema.entities.fields]]
name = "resolution"
field_type = "text"
display_name = "解决方案"
[[schema.entities.fields]]
name = "responded_at"
field_type = "datetime"
display_name = "首次响应时间"
[[schema.entities.fields]]
name = "resolved_at"
field_type = "datetime"
display_name = "解决时间"
[[schema.entities.fields]]
name = "closed_at"
field_type = "datetime"
display_name = "关闭时间"
```
#### 3.3.3 check_plan巡检计划
```toml
[[schema.entities]]
name = "check_plan"
display_name = "巡检计划"
[[schema.entities.fields]]
name = "contract_id"
field_type = "uuid"
display_name = "维保合同"
ref_entity = "service_contract"
required = true
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
ref_scope = "external"
ref_display_field = "name"
ref_search_fields = ["name", "phone"]
ref_fallback_label = "外部客户"
filterable = true
[[schema.entities.fields]]
name = "name"
field_type = "string"
display_name = "计划名称"
required = true
[[schema.entities.fields]]
name = "frequency"
field_type = "string"
display_name = "巡检频率"
ui_widget = "select"
options = ["每周", "每两周", "每月", "每季度"]
required = true
[[schema.entities.fields]]
name = "check_items"
field_type = "text"
display_name = "检查项(JSON)"
[[schema.entities.fields]]
name = "status"
field_type = "string"
display_name = "状态"
ui_widget = "select"
options = ["启用", "停用"]
default_value = "启用"
[[schema.entities.fields]]
name = "next_check_date"
field_type = "date"
display_name = "下次巡检日期"
[[schema.entities.fields]]
name = "notes"
field_type = "text"
display_name = "备注"
```
#### 3.3.4 check_record巡检记录
```toml
[[schema.entities]]
name = "check_record"
display_name = "巡检记录"
[[schema.entities.fields]]
name = "plan_id"
field_type = "uuid"
display_name = "巡检计划"
ref_entity = "check_plan"
required = true
[[schema.entities.fields]]
name = "contract_id"
field_type = "uuid"
display_name = "维保合同"
ref_entity = "service_contract"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ref_entity = "client"
ref_scope = "external"
ref_display_field = "name"
ref_search_fields = ["name", "phone"]
ref_fallback_label = "外部客户"
filterable = true
[[schema.entities.fields]]
name = "check_date"
field_type = "date"
display_name = "巡检日期"
required = true
[[schema.entities.fields]]
name = "result"
field_type = "string"
display_name = "结果"
ui_widget = "select"
options = ["正常", "有异常"]
required = true
[[schema.entities.fields]]
name = "items_data"
field_type = "text"
display_name = "检查项结果(JSON)"
[[schema.entities.fields]]
name = "issues_found"
field_type = "text"
display_name = "发现的问题"
[[schema.entities.fields]]
name = "actions_taken"
field_type = "text"
display_name = "采取措施"
[[schema.entities.fields]]
name = "notes"
field_type = "text"
display_name = "备注"
```
### 3.4 权限声明4 实体 x 2 = 8 个权限码)
```toml
[[permissions]]
code = "service_contract.list"
name = "查看维保合同"
[[permissions]]
code = "service_contract.manage"
name = "管理维保合同"
[[permissions]]
code = "ticket.list"
name = "查看工单"
[[permissions]]
code = "ticket.manage"
name = "管理工单"
[[permissions]]
code = "check_plan.list"
name = "查看巡检计划"
[[permissions]]
code = "check_plan.manage"
name = "管理巡检计划"
[[permissions]]
code = "check_record.list"
name = "查看巡检记录"
[[permissions]]
code = "check_record.manage"
name = "管理巡检记录"
```
### 3.5 页面设计3 个页面)
#### 页面 1运维概览共享工作台的一部分
作为全局工作台的一个区域展示:
- 活跃合同数 + 即将到期合同预警
- 本月工单统计(按状态饼图)
- SLA 达标率(百分比 + 趋势)
- 今日待巡检列表
- 最近 5 条工单
快捷操作快速创建工单3 字段:标题+客户+优先级)
#### 页面 2合同管理
维保合同列表(支持按状态/客户/到期日筛选)+ 合同详情 Tab 页:
- Tab 1合同信息
- Tab 2关联工单
- Tab 3巡检计划 + 巡检记录
#### 页面 3工单中心
Tab 1工单列表按状态分 Tab待处理/处理中/已解决/已关闭)
Tab 2巡检管理巡检计划列表 + 巡检记录列表)
工单详情展示 SLA 倒计时(超时变红预警)
### 3.6 SLA 自动计算规则
| SLA 等级 | 响应时间 | 解决时间 | 创建工单时自动带入 |
|----------|---------|---------|-------------------|
| 标准 | 8 小时 | 48 小时 | sla_response_hours=8, sla_resolve_hours=48 |
| 银牌 | 4 小时 | 24 小时 | sla_response_hours=4, sla_resolve_hours=24 |
| 金牌 | 2 小时 | 8 小时 | sla_response_hours=2, sla_resolve_hours=8 |
工单列表中实时显示 SLA 倒计时。
---
## 4. 跨插件引用关系
```
itops.service_contract.client_id → freelance.client (ref_scope=external)
itops.ticket.client_id → freelance.client (ref_scope=external)
itops.check_plan.client_id → freelance.client (ref_scope=external)
itops.check_record.client_id → freelance.client (ref_scope=external)
```
降级行为freelance 未安装时client_id 降级为文本输入字段,显示 ref_fallback_label "外部客户"。
---
## 5. inventory 插件扩展建议
在现有 inventory 插件的 product 实体增加字段:
| 字段 | 类型 | 说明 |
|------|------|------|
| product_type | select: physical/virtual/service | 产品类型virtual/service 走零库存 |
覆盖"计算机软硬件及辅助设备批发/零售"的经营范围。
---
## 6. 全局工作台合并设计
freelance 和 itops 的仪表盘合并为一个全局工作台,布局如下:
```
┌─────────────────────────────────────────────────────┐
│ 快捷操作栏:[⏱ 计时] [💰 记支出] [📋 新报价] [🔧 新工单] │
├──────────────────────┬──────────────────────────────┤
│ 财务概览 │ 紧急待办 │
│ 本月收入: ¥XX,XXX │ 🔴 逾期收款: 2 笔 │
│ 本月支出: ¥X,XXX │ 🟡 今日到期任务: 3 项 │
│ 利润: ¥XX,XXX │ 🟡 即将到期合同: 1 份(7天内) │
│ 应收: ¥XX,XXX │ 🔵 待处理工单: 4 条 │
├──────────────────────┼──────────────────────────────┤
│ 活跃项目 (4) │ 运维概览 │
│ [项目A ████░░ 60%] │ 活跃合同: 5 份 │
│ [项目B ██░░░░ 30%] │ SLA 达标率: 96% │
│ [项目C ██████ 100%] │ 今日待巡检: 2 项 │
│ │ 最新工单: ... │
├──────────────────────┴──────────────────────────────┤
│ 商机跟进提醒 │
│ 📅 张三(XX公司) - 网站开发 - 明天需跟进 │
│ 📅 李四(YY公司) - AI方案 - 后天到期 │
└─────────────────────────────────────────────────────┘
```
---
## 7. 实施优先级
```
P1: freelance 插件核心实体client, opportunity, project, task, time_entry
P2: freelance 插件财务实体quote, quote_line, contract, invoice, expense
P3: freelance 页面(全局工作台 + 客户管理 + 项目工作台 + 财务中心)
P4: itops 插件(全部实体 + 页面)
P5: inventory 扩展product_type 字段)
P6: 全局工作台合并 + 快捷操作
```
---
## 8. 验证矩阵
| 验证场景 | 预期结果 |
|---------|---------|
| 单独安装 freelance | 全部功能正常,客户字段内部关联 |
| 单独安装 itops不装 freelance | client_id 降级为文本输入 |
| 同时安装 freelance + itops | client_id 自动关联 freelance.client下拉选择客户 |
| 创建商机 → 创建报价 → 转合同 → 创建项目 | 全链路数据流通 |
| 项目中记录工时 → 生成发票 | 工时汇总可关联到发票 |
| 创建维保合同 → 设定巡检计划 → 执行巡检 → 创建工单 | 运维全流程 |
| SLA 超时预警 | 工单创建后超时自动标红 |
| 合同到期提醒 | 全局工作台显示即将到期合同 |
---
## 9. 讨论溯源
本文档基于 2026-04-19 的无主题发散式互动探讨产出经过多专家头脑风暴审查UX 专家、技术架构专家、业务顾问),采纳了以下关键建议:
- 新增 contract 实体B2B 必要环节)
- 页面从 10 个压缩到 7 个(合并仪表盘+整合 tab
- project 增加 business_type/deliverable_type 枚举覆盖全部经营范围
- 全局工作台 + 快捷操作(瑞士军刀原则)
- itops client_id 加 filterable + generated column 索引
- inventory 扩展 product.type 支持软硬件销售