Files
erp/crates/erp-plugin-itops/plugin.toml

525 lines
12 KiB
TOML
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.

# IT 运维服务台 — plugin.toml
# 汕头市智界科技有限公司 IT 服务行业插件
[metadata]
id = "erp-itops"
name = "IT 运维服务台"
version = "0.1.0"
description = "IT 运维工单管理 + SLA 追踪 + 定期巡检"
author = "ERP Platform"
min_platform_version = "0.1.0"
# ── 权限声明4 实体 × 2 = 8 个权限码)──
[[permissions]]
code = "service_contract.list"
name = "查看维保合同"
description = "查看维保合同列表和详情"
[[permissions]]
code = "service_contract.manage"
name = "管理维保合同"
description = "创建、编辑、删除维保合同"
[[permissions]]
code = "ticket.list"
name = "查看工单"
description = "查看工单列表和详情"
[[permissions]]
code = "ticket.manage"
name = "管理工单"
description = "创建、编辑、删除工单"
[[permissions]]
code = "check_plan.list"
name = "查看巡检计划"
description = "查看巡检计划列表和详情"
[[permissions]]
code = "check_plan.manage"
name = "管理巡检计划"
description = "创建、编辑、删除巡检计划"
[[permissions]]
code = "check_record.list"
name = "查看巡检记录"
description = "查看巡检记录列表"
[[permissions]]
code = "check_record.manage"
name = "管理巡检记录"
description = "创建、编辑、删除巡检记录"
# ── 实体定义 ──
# ── 3.3.1 service_contract维保合同──
[[schema.entities]]
name = "service_contract"
display_name = "维保合同"
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ui_widget = "entity_select"
ref_plugin = "erp-freelance"
ref_entity = "client"
ref_label_field = "name"
ref_search_fields = ["name"]
ref_fallback_label = "外部客户"
[[schema.entities.fields]]
name = "contract_number"
field_type = "string"
required = true
display_name = "合同编号"
unique = true
[[schema.entities.fields]]
name = "name"
field_type = "string"
required = true
display_name = "合同名称"
searchable = true
[[schema.entities.fields]]
name = "service_scope"
field_type = "string"
display_name = "服务范围"
ui_widget = "textarea"
[[schema.entities.fields]]
name = "sla_level"
field_type = "string"
required = true
display_name = "SLA 等级"
ui_widget = "select"
filterable = true
default = "standard"
options = [
{ label = "标准", value = "standard" },
{ label = "银牌", value = "silver" },
{ label = "金牌", value = "gold" }
]
[[schema.entities.fields]]
name = "sla_response_hours"
field_type = "integer"
display_name = "SLA 响应时间(小时)"
default = 8
[[schema.entities.fields]]
name = "sla_resolve_hours"
field_type = "integer"
display_name = "SLA 解决时间(小时)"
default = 48
[[schema.entities.fields]]
name = "status"
field_type = "string"
required = true
display_name = "状态"
ui_widget = "select"
filterable = true
default = "active"
options = [
{ label = "生效中", value = "active" },
{ label = "即将到期", value = "expiring" },
{ label = "已过期", value = "expired" },
{ label = "已终止", value = "terminated" }
]
[[schema.entities.fields]]
name = "start_date"
field_type = "date"
required = true
display_name = "开始日期"
[[schema.entities.fields]]
name = "end_date"
field_type = "date"
required = true
display_name = "结束日期"
[[schema.entities.fields]]
name = "amount"
field_type = "decimal"
display_name = "合同金额"
sortable = true
[[schema.entities.fields]]
name = "payment_terms"
field_type = "string"
display_name = "付款条款"
[[schema.entities.fields]]
name = "notes"
field_type = "string"
display_name = "备注"
ui_widget = "textarea"
[[schema.entities.relations]]
entity = "ticket"
foreign_key = "contract_id"
on_delete = "nullify"
name = "tickets"
type = "one_to_many"
display_field = "title"
[[schema.entities.relations]]
entity = "check_plan"
foreign_key = "contract_id"
on_delete = "cascade"
name = "check_plans"
type = "one_to_many"
display_field = "name"
# ── 3.3.2 ticket工单──
[[schema.entities]]
name = "ticket"
display_name = "工单"
[[schema.entities.fields]]
name = "contract_id"
field_type = "uuid"
display_name = "维保合同"
ui_widget = "entity_select"
ref_entity = "service_contract"
ref_label_field = "name"
ref_search_fields = ["name"]
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ui_widget = "entity_select"
ref_plugin = "erp-freelance"
ref_entity = "client"
ref_label_field = "name"
ref_search_fields = ["name"]
ref_fallback_label = "外部客户"
[[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
default = "fault"
options = [
{ label = "故障", value = "fault" },
{ label = "巡检", value = "check" },
{ label = "咨询", value = "consult" },
{ label = "变更", value = "change" },
{ label = "其他", value = "other" }
]
[[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 = "status"
field_type = "string"
required = true
display_name = "状态"
ui_widget = "select"
filterable = true
default = "open"
options = [
{ label = "待处理", value = "open" },
{ label = "处理中", value = "in_progress" },
{ label = "等待客户", value = "waiting_client" },
{ label = "已解决", value = "resolved" },
{ label = "已关闭", value = "closed" }
]
[[schema.entities.fields]]
name = "channel"
field_type = "string"
display_name = "来源渠道"
ui_widget = "select"
options = [
{ label = "电话", value = "phone" },
{ label = "微信", value = "wechat" },
{ label = "邮件", value = "email" },
{ label = "系统", value = "system" }
]
[[schema.entities.fields]]
name = "description"
field_type = "string"
display_name = "问题描述"
ui_widget = "textarea"
[[schema.entities.fields]]
name = "resolution"
field_type = "string"
display_name = "解决方案"
ui_widget = "textarea"
[[schema.entities.fields]]
name = "responded_at"
field_type = "date_time"
display_name = "首次响应时间"
[[schema.entities.fields]]
name = "resolved_at"
field_type = "date_time"
display_name = "解决时间"
[[schema.entities.fields]]
name = "closed_at"
field_type = "date_time"
display_name = "关闭时间"
# ── 3.3.3 check_plan巡检计划──
[[schema.entities]]
name = "check_plan"
display_name = "巡检计划"
[[schema.entities.fields]]
name = "contract_id"
field_type = "uuid"
required = true
display_name = "维保合同"
ui_widget = "entity_select"
ref_entity = "service_contract"
ref_label_field = "name"
ref_search_fields = ["name"]
[[schema.entities.fields]]
name = "client_id"
field_type = "uuid"
display_name = "客户"
ui_widget = "entity_select"
ref_plugin = "erp-freelance"
ref_entity = "client"
ref_label_field = "name"
ref_search_fields = ["name"]
ref_fallback_label = "外部客户"
[[schema.entities.fields]]
name = "name"
field_type = "string"
required = true
display_name = "计划名称"
searchable = true
[[schema.entities.fields]]
name = "frequency"
field_type = "string"
required = true
display_name = "巡检频率"
ui_widget = "select"
options = [
{ label = "每周", value = "weekly" },
{ label = "每两周", value = "biweekly" },
{ label = "每月", value = "monthly" },
{ label = "每季度", value = "quarterly" }
]
[[schema.entities.fields]]
name = "check_items"
field_type = "json"
display_name = "检查项"
[[schema.entities.fields]]
name = "status"
field_type = "string"
required = true
display_name = "状态"
ui_widget = "select"
default = "active"
options = [
{ label = "启用", value = "active" },
{ label = "停用", value = "inactive" }
]
[[schema.entities.fields]]
name = "next_check_date"
field_type = "date"
display_name = "下次巡检日期"
[[schema.entities.fields]]
name = "notes"
field_type = "string"
display_name = "备注"
ui_widget = "textarea"
[[schema.entities.relations]]
entity = "check_record"
foreign_key = "plan_id"
on_delete = "cascade"
name = "records"
type = "one_to_many"
display_field = "check_date"
# ── 3.3.4 check_record巡检记录──
[[schema.entities]]
name = "check_record"
display_name = "巡检记录"
[[schema.entities.fields]]
name = "plan_id"
field_type = "uuid"
required = true
display_name = "巡检计划"
ui_widget = "entity_select"
ref_entity = "check_plan"
ref_label_field = "name"
ref_search_fields = ["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 = "客户"
ui_widget = "entity_select"
ref_plugin = "erp-freelance"
ref_entity = "client"
ref_label_field = "name"
ref_search_fields = ["name"]
ref_fallback_label = "外部客户"
[[schema.entities.fields]]
name = "check_date"
field_type = "date"
required = true
display_name = "巡检日期"
[[schema.entities.fields]]
name = "result"
field_type = "string"
required = true
display_name = "结果"
ui_widget = "select"
filterable = true
options = [
{ label = "正常", value = "normal" },
{ label = "有异常", value = "abnormal" }
]
[[schema.entities.fields]]
name = "items_data"
field_type = "json"
display_name = "检查项结果"
[[schema.entities.fields]]
name = "issues_found"
field_type = "string"
display_name = "发现的问题"
ui_widget = "textarea"
[[schema.entities.fields]]
name = "actions_taken"
field_type = "string"
display_name = "采取措施"
ui_widget = "textarea"
[[schema.entities.fields]]
name = "notes"
field_type = "string"
display_name = "备注"
ui_widget = "textarea"
# ── 编号规则 ──
[[numbering]]
entity = "service_contract"
field = "contract_number"
prefix = "SC"
format = "{PREFIX}-{YEAR}-{SEQ}"
seq_length = 4
# ── 页面设计 ──
# 页面 1合同管理 + 详情
[[ui.pages]]
type = "crud"
entity = "service_contract"
label = "合同管理"
icon = "file-text"
enable_search = true
[[ui.pages]]
type = "detail"
entity = "service_contract"
label = "合同详情"
[[ui.pages.sections]]
type = "fields"
label = "合同信息"
fields = ["name", "client_id", "service_scope", "sla_level", "sla_response_hours", "sla_resolve_hours", "status", "start_date", "end_date", "amount", "payment_terms", "notes"]
[[ui.pages.sections]]
type = "crud"
label = "工单"
entity = "ticket"
filter_field = "contract_id"
[[ui.pages.sections]]
type = "crud"
label = "巡检计划"
entity = "check_plan"
filter_field = "contract_id"
[[ui.pages.sections]]
type = "crud"
label = "巡检记录"
entity = "check_record"
filter_field = "contract_id"
# 页面 2工单中心
[[ui.pages]]
type = "tabs"
label = "工单中心"
icon = "tool"
[[ui.pages.tabs]]
label = "工单列表"
type = "crud"
entity = "ticket"
enable_search = true
[[ui.pages.tabs]]
label = "巡检计划"
type = "crud"
entity = "check_plan"
enable_search = true
[[ui.pages.tabs]]
label = "巡检记录"
type = "crud"
entity = "check_record"
enable_search = true