总览
—空间清单
加载中…
能源类别构成 按折标煤占比
选择空间后显示
类别明细
暂无数据
设备在线
加载中…
动态数据采集
加载中…
能源流动图
加载中…
能耗分析
按能源类别汇总实物量、折标煤与碳排类别明细
暂无数据
趋势 折标煤 tce
暂无数据
碳排分析
读碳排域实测值(kgCO₂e → tCO₂e),不再乘系数类别明细
暂无数据
碳排放因子库
平台公共因子(可引用)+ 本企业自建因子;碳排就按这里算
碳排 = 实物量 × 因子。这一页决定用哪条因子:
① 平台公共因子:平台维护的公共库(带地区与出处)。点「引用」之后它才参与本企业的核算 —— 而且是活引用:平台改了那条因子,我们下次核算就跟着变,所以对外报送前请记下用的是哪一条、什么时候生效。
② 本企业自建因子:同一能源类别下,自建的优先;被它遮盖的平台因子仍然列在下面并标注(不是消失了)。
③ 公共因子按「类别名」匹配:如果本企业没有同名的能源类别,那条引用就落不了地—— 「引用了但落不了地」会单独列出来,别让它悄悄不生效。
缺因子是静默漏算:那个类别的用量不进碳排,看起来还更低碳。所以「有能耗却没因子」的类别会被点名。
① 平台公共因子:平台维护的公共库(带地区与出处)。点「引用」之后它才参与本企业的核算 —— 而且是活引用:平台改了那条因子,我们下次核算就跟着变,所以对外报送前请记下用的是哪一条、什么时候生效。
② 本企业自建因子:同一能源类别下,自建的优先;被它遮盖的平台因子仍然列在下面并标注(不是消失了)。
③ 公共因子按「类别名」匹配:如果本企业没有同名的能源类别,那条引用就落不了地—— 「引用了但落不了地」会单独列出来,别让它悄悄不生效。
缺因子是静默漏算:那个类别的用量不进碳排,看起来还更低碳。所以「有能耗却没因子」的类别会被点名。
平台公共因子 平台维护、全平台共用
加载中…
本企业自建因子 本企业自己补的,优先于公共因子
分时明细
至少一条;全天一条就填 00:00:00 ~ 24:00:00;时段不得重叠
加载中…
覆盖率 哪些类别有能耗却没有可用因子
加载中…
电表管理
接入与状态:一块表一行(通不通 / 现在读数 / 24 小时用量)+ 一屏接表接一块电表
电表清单 读取中…
读取中…
计量表
配置域数据,按租户隔离计量表清单
暂无数据
能源平衡
关口 / 分表 / 终端三侧对账与差额、母表-子表偏差、转换环节缺口平衡表 差额 = 关口 − 分表;比例以绝对值更大的一侧为基数
未查询
原始量按单位 不跨单位相加;某一侧没有数据时是「—」而不是 0
未查询
覆盖与勾稽提示 每条提示都带「是什么 / 为什么 / 怎么补」
未查询
母表-子表偏差 阈值取自平台参数(可在「参数设置」里查看与调整)
点上面的「母表对子表」
转换环节与损失 缺什么就写什么,算不出来就不给数
点上面的「转换环节体检」
综合报表
能耗 / 碳排 / 成本三个域各出各的数,不混算;环比取紧邻的等长窗口分域明细
暂无数据
月度基本电费 按需量或按容量、按月计,与逐时电量费分开
查询后显示这一项
初始化导入
下载模板 → 填好 → 上传,系统自动分析并建好空间/网关/计量表/点位加载中…
① 下载模板 xlsx,9 页签:企业信息 / 能源类别 / 空间 / 网关 / 数据源 / 计量表 / 点位 / 员工账号(可选)
② 上传填好的表 先「只校验」(一个字节都不写),确认无误再「确认导入」
③ 结果 自动分析补了什么 · 哪几行有问题 · 打算建什么
还没有上传
④ 已上传的初始化表 保留最近 5 份 · 每次上传都留一份,可下载回去核对当初传的是哪一版
加载中…
这一页的几条规矩 都是"少踩坑"换来的
计划与预测
实测 / 计划 / 基线 / 预测四线对比、节能量核算与用能碳排预算完成情况四线趋势 折标煤 tce;原始量不跨单位相加
未查询
周期明细 完成率 = 实测 / 计划;节能量 = 基线 − 实测
未查询
按类别 原始量按单位分开看,折标煤才可加
未查询
用能与碳排放预算 实测与计划的逐月对照
未查询
录入值的应用情况 本窗口内哪些手工计划值生效了、哪些没应用上
计划录入已移至「产量产值 → 计划录入」:录入、修改、删除、批量导入与导出都在那一页。这里只显示本窗口内录入值的应用结果。
查询后显示本窗口内录入值的应用情况
数据覆盖与提示 缺口、零值、各域截止时间都写在这里
未查询
产量产值
月度工业总产值 / 工业增加值台账 —— 强度指标的分母这一页维护的是强度指标的分母,三条口径请先读
加载中…
录入 / 修改 同一个「空间 + 口径 + 月份」再保存一次即覆盖
台账清单 单位固定万元;同一个键再保存一次即覆盖
未加载
批量导入 列:month,kind,space_id,space_name,value,note —— 导出的文件可以直接导回
体检 缺月、与产量域口径差异、当前报表用的哪一份分母
点上面「体检」
作息与时段
园区的工作日、上下班与午休时段,以及节假日 / 调休补班 —— 这套口径决定「办公 / 非办公」怎么划,碳排与分摊都按它拆分工作日与时段 勾选哪几天算工作日;时段用于把一天切成办公 / 非办公
节假日与调休 放假 = 这一天不上班;调休补班 = 本来休息但要上班
责任与分摊
登记责任主体(入驻单位 / 楼层负责人 / 物业 / 运维组), 按面积 / 人数 / 表计 / 等分把公共能耗与费用分摊到各家 —— 用最大余额法取整,分毫不差责任主体 只有「入驻单位」才是计费对象;其余是职责归属
入住房间 一个入驻单位可以住多间房;退租请填退租日期,不要删行
按入驻单位汇总 把一家公司入住的几间房合起来算 —— 缺数据的房间会被点名,不按 0 计入
分摊规则 一条规则 = 一个基准;试算时按它把总额摊到各责任主体
分摊试算 输入待分摊总额,按所选基准即时算出各家应分摊多少
新建责任主体
登记入住
新建分摊规则
碳汇与碳中和
登记林木与水体碳汇资产、核算年固碳量,再与组织碳一起做碳中和测算 —— 因子必须填写出处,没有出处的系数无法复核林木碳汇资产 年固碳 = 面积 × 郁闭度 × 树龄修正 × 单位面积固碳率 ÷ 1000
水体碳汇资产 年碳汇 = 面积 × 水质修正 × (1 + 水生植物覆盖率) × 因子 ÷ 1000
碳中和测算 净排放 = 组织碳 − 生态碳汇 − 碳抵消;完成度如实反映(可大于 100%)
碳中和台账 逐月留痕;同一月份再次登记会覆盖该月
新增林木碳汇资产
新增水体碳汇资产
能耗热力分布
各空间用量按占比铺成热力格 —— 颜色越深占得越多, 一眼看出「谁在顶大梁」。数据取自空间用量排名(折标煤口径)。范围与窗口 统计范围为所选空间(含下级时只取叶子,父空间等于子空间之和)
热力格 格内为空间名与占比;鼠标悬停给出用量与名次
正在读取…
合计与口径
跨区域对比
把各空间的用量、占比与强度并排放进一张表比较。 强度口径可切换 —— 缺面积或人数的空间会单列"不可比", 不塞进榜单末尾(塞进去等于说它强度最低)。对比条件
对比表
正在读取…
深入分析
高耗区域定位 + 总量与强度排名 + 结构瓶颈 + 专家规则命中 + 数据缺口,收在一页。结论分三档:risk 需处理 / watch 值得看 / gap 数据不足 —— 数据不足不写作正常。分析条件
结论
正在分析…
高耗区域定位
结构瓶颈与规则命中
数据缺口(如实列出,未做估算)
低碳成果
减排成效(基线 vs 实际)与碳汇逐月监测。 没有基线就不给减排量(按 0 处理会变成"减了 100%"); 碳汇只报台账里逐月记录的值,不把年固碳量按月摊平。统计窗口
减排成效
正在读取…
碳汇逐月监测
负荷特性与用量预测
看负荷平不平、几点最高,并外推未来的用电量。 负荷率的分母是逐时最大负荷;没有逐时数据就如实说算不出, 不拿日总量摊成逐时。查询条件
负荷特性 峰谷差 / 负荷率 / 峰值时段
点上面的「查看负荷总览」。
用量预测 与费用预测同一套口径
达峰与中和情景
按基准年与减排措施测算逐年排放曲线。 达峰要求此后确有下降且观察窗口足够;中和要求此后持续不为正。 不满足就明说尚未出现,不硬报年份。新建情景 情景是假设的集合,不是预测
正在读取…
减排措施库 年减排量是每年都减这么多,不是累计
测算一个情景
新建情景 情景是假设的集合,不是预测
新增减排措施 年减排量是每年都减这么多,不是累计
供应链碳与范围三
维护上游供应商与采购台账,按类别核算价值链间接排放。 范围三单独成表,不与直接排放相加;没匹配到因子的条目单列、不按零计入。供应商名录
正在读取…
采购与处置台账 范围三的活动数据
范围三排放因子 必填出处;单位要与台账一致
新增供应商
新增一条台账 范围三的活动数据
碳资产台账
登记碳配额、CCER 与绿证的持有批次,按流水注销或转让。 持有量由流水算出;注销不能超过剩余,过期资产不能注销。登记一笔持有
持有与流水
正在读取…
记一笔流水 注销用于抵消,或转让出去
登记一笔持有
记一笔流水 注销用于抵消,或转让出去
履约视图 配额与已注销抵消并列,缺口不美化
碳核查支撑
建核查批次、自动扫数据质量问题、逐条处置留痕。 尚未核查与核查通过分开显示;第三方核查须填核查机构。核查批次
正在读取…
数据质量检查 查不到就说查不到,不按 0 顶替
点上面的「跑数据质量检查」。
本批次的发现
新建核查批次
人工登记一条发现 自动检查覆盖不到的问题也要能落进来
能碳数据录入
把申报里采集不到的指标录进来:清洁能源占比、绿电与绿证、固废/余热余压/水重复利用率等。每条都标数据来源,未录入与录入 0 分开统计,比值指标录分子分母由系统算。能碳数据录入 申报里「采集不到」的指标由人录进来
这一页录的是没有计量点的指标(固废、余热余压、水重复利用、清洁能源占比、绿电绿证)。
★ 「未录入」不等于「录入 0」:没录就是没录,它不会被当成 0 计入平均。
★ 每条都必须选数据来源 —— 申报与核查都要能回答「这个数从哪来」。
指标台账 缺哪几期、哪个指标没录,一眼看出
批量录入 指标 × 期间,只提交改动过的格子
下面的表格按期间横向铺开:哪个格子是空的,就是哪一期没录。
★ 已有值会预填,改哪个格子就只提交哪个格子(不改的不会动)。
★ 比值指标不出现在可填行里 —— 它们由分子分母自动算(见表底部的说明行),
单独录一个比值会和分子分母对不上。
★ 期间范围由上面「起始 / 结束」决定,改完点「刷新台账」再回到这里即可。
录入一条 比值指标录分子分母,比值由系统算
能源品类:清洁 / 可再生属性 清洁能源占比的分子口径
★ 默认是未标注,系统不替企业判断;未标注不等于非清洁。
碳汇空间分布
按空间铺开林木与水体碳汇:每个空间的年固碳量以条形呈现。 因子未填出处的会点名 —— 参与计算的结论要能逐条复核。资产台账
正在读取…
计划录入
手工月度值(按类别原单位)—— 分别覆盖计划 / 基线 / 预测三条线的对应月份,支持录入 / 修改 / 删除与批量导入导出当前页签的系列:计划
—— 保存 / 导入的录入值只替换这个系列的对应月份,另外两条线不动。
手工值录入(按当前页签的系列)· 导入 / 导出 录入值只替换「当前页签那个系列」的对应月份(按实测负荷形态分摊);计划 / 基线 / 预测三条线的合成值都不能对外报送
导出只按当前页签收窄(只导这一个系列);
不指定系列时导出的是全部三个系列 —— 那份 CSV 可以原样导回。
计划数据清单 这一份是「计划」线的手工录入值
未加载
基线数据清单 这一份是「基线」线的手工录入值 —— 与计划线各自独立
未加载
预测数据清单 这一份是「预测」线的手工录入值 —— 与计划、基线各自独立
未加载
能效对标
单位产品/产值强度 vs 自身历史 vs 标准值库(限额、标杆、先进值)标准值条目 企业自定义优先,否则用平台标准值库
未查询
自身历史 环比 + 历史最优月;不需要任何外部输入
未查询
口径与依据 分母取自哪里、依据哪条标准
未查询
本企业的对标条目 自建条目优先于平台标准值库;改一个限额值等于改了"达标与否"的判据
加载中…
未加载
数据大屏
单页只读大屏:KPI、逐时趋势、能源类别、计划完成、设备与告警预览
外部大屏取数 长期令牌 · 只读 · 可随时吊销
外部大屏系统(AnyReport / AJ-Report / Grafana 等)带不了登录令牌:
它们的 HTTP 数据源加不了静态请求头,而登录令牌 2 小时就过期、还绑在某个账号上。
这里签发的是只读、长期、可吊销、可分辨的专用令牌,凭据放在 URL 查询串里。
明文只在签发那一次显示(库里只存指纹,看不出原文);列表里能看到前缀、到期时间与 "最后取数时间"(用来判断某块屏还活着没有)。
明文只在签发那一次显示(库里只存指纹,看不出原文);列表里能看到前缀、到期时间与 "最后取数时间"(用来判断某块屏还活着没有)。
令牌发放日志
未加载
外部大屏系统 由平台配置
各块数据截止时间 挂屏之前先看这一栏
未加载
报表导出
导出文件自带窗口、口径与各域截止时间;CSV 带 BOM,Excel 里数字可求和可导出的数据集
加载中…
能碳报告(Word)
导出文件里有什么
三维孪生
按空间面积比例生成的三维园区场景,可旋转缩放并下钻预览
场景摘要
设计端 改动先进草稿,点「发布到展示端」才对外的版本生效
设备管理
网关、数据源、计量表、点位的自助配置;每家企业各看各的,改动只影响本企业关系总览 一行 = 一个点位;右上角是它经过的计量表与最终归属的空间
加载中…
空间树 设备、点位、计量表都挂在空间上
说明
这一页维护的是本企业的空间树(厂区 / 厂房 / 车间 / 产线…):
能耗、碳排、成本与能流图都按它聚合,所以名字与层级会出现在报表上。
几条规矩:同一层不许重名(报表里两个同名节点分不清); 最多 8 层;删除受引用保护 —— 有子空间、挂着表/点位/设备, 或已经有历史数据时一律拒绝,并逐条说明卡在哪、去哪里解。
改名与移动不改写历史数据:过去的数仍然属于当时那个口径。
几条规矩:同一层不许重名(报表里两个同名节点分不清); 最多 8 层;删除受引用保护 —— 有子空间、挂着表/点位/设备, 或已经有历史数据时一律拒绝,并逐条说明卡在哪、去哪里解。
改名与移动不改写历史数据:过去的数仍然属于当时那个口径。
加载中…
改这一项就是移动整棵子树;不能移到自己或自己的子孙下面。
成本中心与电价 成本 = 该小时能耗 × 该小时单价
说明
成本域那一张表(单位是元)是按这条链算出来的:
计量表 → 成本中心 → 绑定的费率 → 该类别在该有效期内、按本地时刻命中的时段价。
缺任何一环,那一块表计的成本就一行都不写 —— 而且不会报错,
报表上只是"成本那一栏空着",所以本页给了一个成本域体检,
逐块表计说清缺哪一环、去哪里补。
两条容易搞反的口径:有效期按本地日期填(照证书上的日期填即可,不用换算); 时段价按本地时刻填(与现场时钟同一个口径,不用加减小时)。
时段用左闭右开填写:
两条容易搞反的口径:有效期按本地日期填(照证书上的日期填即可,不用换算); 时段价按本地时刻填(与现场时钟同一个口径,不用加减小时)。
时段用左闭右开填写:
00:00-06:00 表示到 6 点为止、不含 6 点,
保存时会换算成 00:00:00~05:59:59(与已有费率的存法一致)。
平台不给任何默认电价:单价一律按你的电费单填 ——
编一个"看起来合理"的单价,报表上的电费会错几倍而没人看得出来。
体检里的「本月分档」看哪个月:
成本中心
加载中…
绑定:把哪个费率给哪个成本中心
一个成本中心可以绑多个费率(一般每个能源类别一套);同一类别绑多套时,有效期重叠的部分按费率 id 先后取价,体检会点名。
费率(分时电价 / 单一价)
加载中…
代理购电价格按月公布。填成 年-月(如 2025-07)时,
成本域体检会在"取价期早于当前月"时给一条黄条提醒;填别的写法就只能自己核对了。
预填只填时段结构(时间与峰/平/谷),单价一律留空 ——
平台不编电价,请照电费单填。
基本电费(两部制的容需量电价)
两部制的电费是两层:逐时的电度电费(上面那些费率单价)
加上按月计的基本电费。基本电费 = 计费量 × 基本电价,其中"按需量还是按容量"
以及量是多少,由本企业在这里登记 —— 费率上声明了两个单价,平台不替你选。
力调电费(功率因数奖惩)本系统暂不计算:
现有数据拿不到无功电量或功率因数,而官方的奖惩百分比表必须以可核对的原文
逐格转录。这一格只是先把值留档,体检里会写明"还差什么"。
登记与生成都只影响按月那一层;逐时的成本行一分不动。
加载中…
清单
加载中…
新建
可选协议 = 本企业的协议字典 + 平台发布的公共协议
(DEV 后台「公共信息 → 通讯协议」维护),服务端按同一份清单校验。
★ 选得到不等于本机采集代理已装对应驱动 —— 采不采得到看代理有没有实现该协议。
可传 JSON 对象文本,也可留空;服务端按原样存入 connection 列。
成本 = 该小时能耗 × 这个成本中心绑定的费率。
选「不指定」这块表计算不出成本(那一栏会空着,且不报错)——
在「成本中心」页签可以体检到底哪几块表还没配。
留空时由「上次检定日期 + 检定周期」自动算出并存下来。
挂接关系(点位 ↔ 计量表 ↔ 空间) 三条挂接:点位挂到计量表、计量表挂到空间、点位挂到空间(第三条不参与出数);删除保护靠这些引用判断
选择计量表后显示它当前挂接的点位与空间。
采集器接入 网关令牌直接上报 · /api/gateway/ingest
说明
真实设备(电表/网关/PLC)装好后,在网关页签建一台网关并到它的
详情里复制 token —— 采集服务用它直接推送点位读数(无需员工账号登录)。
上报的数据与测试设备写同一批表:报表、能流图、总览都不区分来源。
POST /api/gateway/ingest
X-Tenant: <企业代号>
Authorization: Bearer <网关 token>
{
"data_source_id": <本网关下的数据源 id,可省略>,
"at": "2026-09-15 06:00:00",
"readings": [
{"point_id": 5, "value": 12345.678, "at": "2026-09-15 06:00:00"},
{"point_id": 6, "value": 12.5, "mode": "interval"}
]
}
范围限本网关数据源下的点位;ENERGY_VALUE 按累计差值算小时用量;
X-Tenant 必须与令牌所属企业一致;同一小时重复上报不翻倍(先删后插)。
能源介质与系数体检 指南第 1 项的介质清单
点「体检」看每个能源类别的系数状态与指南介质覆盖度。
指南点名但本企业没有的介质 缺哪个补哪个
先做一次体检。
新增能源介质 / 修改系数
改系数会让历史报表的数字跟着变 —— 保存后界面会如实报出影响多少行。
没有国家标准参考值的工艺介质(压缩空气、中水、循环水…)请按企业实测填报:本工具不给建议值。
超限预警
按已配的计量表逐时限额、点位上下限、能效标准限值比对真实采集数据;告警可确认,也会被后续评估自动消除计数
加载中…
运行一轮评估 会写库:新建 / 刷新 / 自动消除告警行
还没跑过评估。评估读的是本企业最近一个窗口的真实采集数据与已配限额,并把结果写进告警表。
告警清单
加载中…
说明
本页不新建任何规则。判定用的限额全部来自已有配置:
计量表的「小时下限 / 小时上限」、
点位的「上限 / 下限」(另配了更严的
「更高上限 / 更低下限」时按更严的那一档算)、以及
「能效对标」里录入的标准值。要改限额去「设备管理」或「能效对标」改,本页只读它们 ——
所以这里的每一行都能追回一个配置项,追不到配置的告警不该存在。
闭环分三段,中间那段只写一次。新告警是「未确认」;确认后变 「已确认」,确认记录只写一次(确认人 / 确认时间 / 备注), 后续评估刷新这条告警时不会覆盖确认人 —— 两个人先后点确认,责任链不会因此断掉。 再之后是「已消除」:自动消除,判据是"本轮评估的时间窗覆盖到了它、 却没再见到它"(限额恢复,或数据不再超限)。已消除的告警不会因为同一小时再次超限而"复活": 那一小时的告警记录已经存在,后续评估只会继续刷新它的实测值与"最近见到"时间, 状态停在已消除,既不会变回未确认,也不会另出一条新的 —— 下一小时是另一条记录,那才是新的一条。所以一行"已消除"配上一个更晚的 "最近见到"时,本页会把它标成「消除后又被见到」,由人去判断它是否仍在超限。
没有配限值 ≠ 达标。这是本页最容易读错的一句话:能效标准值没有录入时, "能效标准限值"这一路一条都不会产生, 清单是空的 —— 而空清单在这里只意味着无从判定,不意味着达标。同理, 计量表没配逐时限额、点位没配上下限时,它们那一路也不会产生任何告警。所以评估结果里把每一路 "配了限额的对象数 / 扫到的行数 / 命中的条数"分列出来,服务端给了说明就原样显示 —— 「没配限额」「没扫到数据」「扫了但没有超限」是三件不同的事,本页不把它们显示成同一个 0。
判定读的是真实采集数据。计量表读它的逐时用量, 点位读各自的历史读数。 被标记为坏读数的那些不参与判定:一条坏读数不该变成一条告警, 也不该让人对着一条明显越界的数据去翻日志找"为什么没告警" —— 被跳过的坏读数条数会写在评估结果里。
"没配限额"与"超限"是两件事,两个方向都不能混。点位的上限档填 0 时按未配置处理(0 是默认值,当成限值会让每条正读数都超限); 上限档留空同理。反过来,没配限额也不等于达标 —— 能效标准值没录入时,那一路是"未配限值",不是"一切正常"。
累计量(表底读数)点位的上限档不适用。表底读数只增不减, 上限越过一次就永远超限 —— 那不是一次事件,是一处需要复核的配置。 这类点位仍然判下限档(负的表底读数是真故障),而累计电量该由计量表的逐时限额来判 ("计量表小时限额"那一路)。被这样跳过的点位列在评估结果的 「被跳过上限的点位」清单里,不会静默消失。
同一件超限在每次评估里都是同一条(计量表按"表 + 规则 + 小时", 点位按"点 + 规则 + 到秒的时间",强度按"指标 + 空间 + 日期窗口"), 所以重复评估不会产生重复告警,只会把那一行刷新一次。反过来,小时级的告警在下一小时是 另一条 —— 那不是重复,是另一小时的超限。
本页的写动作(评估、确认)都要求预警的写权限:只有只读权限 的账号能看清单、计数与闭环状态,但按钮是禁用的。
闭环分三段,中间那段只写一次。新告警是「未确认」;确认后变 「已确认」,确认记录只写一次(确认人 / 确认时间 / 备注), 后续评估刷新这条告警时不会覆盖确认人 —— 两个人先后点确认,责任链不会因此断掉。 再之后是「已消除」:自动消除,判据是"本轮评估的时间窗覆盖到了它、 却没再见到它"(限额恢复,或数据不再超限)。已消除的告警不会因为同一小时再次超限而"复活": 那一小时的告警记录已经存在,后续评估只会继续刷新它的实测值与"最近见到"时间, 状态停在已消除,既不会变回未确认,也不会另出一条新的 —— 下一小时是另一条记录,那才是新的一条。所以一行"已消除"配上一个更晚的 "最近见到"时,本页会把它标成「消除后又被见到」,由人去判断它是否仍在超限。
没有配限值 ≠ 达标。这是本页最容易读错的一句话:能效标准值没有录入时, "能效标准限值"这一路一条都不会产生, 清单是空的 —— 而空清单在这里只意味着无从判定,不意味着达标。同理, 计量表没配逐时限额、点位没配上下限时,它们那一路也不会产生任何告警。所以评估结果里把每一路 "配了限额的对象数 / 扫到的行数 / 命中的条数"分列出来,服务端给了说明就原样显示 —— 「没配限额」「没扫到数据」「扫了但没有超限」是三件不同的事,本页不把它们显示成同一个 0。
判定读的是真实采集数据。计量表读它的逐时用量, 点位读各自的历史读数。 被标记为坏读数的那些不参与判定:一条坏读数不该变成一条告警, 也不该让人对着一条明显越界的数据去翻日志找"为什么没告警" —— 被跳过的坏读数条数会写在评估结果里。
"没配限额"与"超限"是两件事,两个方向都不能混。点位的上限档填 0 时按未配置处理(0 是默认值,当成限值会让每条正读数都超限); 上限档留空同理。反过来,没配限额也不等于达标 —— 能效标准值没录入时,那一路是"未配限值",不是"一切正常"。
累计量(表底读数)点位的上限档不适用。表底读数只增不减, 上限越过一次就永远超限 —— 那不是一次事件,是一处需要复核的配置。 这类点位仍然判下限档(负的表底读数是真故障),而累计电量该由计量表的逐时限额来判 ("计量表小时限额"那一路)。被这样跳过的点位列在评估结果的 「被跳过上限的点位」清单里,不会静默消失。
同一件超限在每次评估里都是同一条(计量表按"表 + 规则 + 小时", 点位按"点 + 规则 + 到秒的时间",强度按"指标 + 空间 + 日期窗口"), 所以重复评估不会产生重复告警,只会把那一行刷新一次。反过来,小时级的告警在下一小时是 另一条 —— 那不是重复,是另一小时的超限。
本页的写动作(评估、确认)都要求预警的写权限:只有只读权限 的账号能看清单、计数与闭环状态,但按钮是禁用的。
测试设备
在本企业内登记测试设备,按负荷曲线把时序表填起来;数值是 (种子, 目标, 小时) 的纯函数,同一小时重复出数结果一致测试设备清单
加载中…
实时数据
点清单里的「预览」查看库里已写入的实测值
按用能画像自动配置
不用一台台填参数:系统读本企业自己的历史用能,算出每个「空间 × 能源类别」的
日均用量,再折成额定功率与日运行小时 —— 于是新出的数据与历史同一个量级、
同一条曲线形状,报表接得上。只配叶子空间;汇总空间的数值本来就是
子空间之和,再配一台会把同一度电算两遍。
点「预演」看看系统打算配哪些设备、参数从哪来(不会写任何数据)
新增测试设备
小时表是最细粒度,不足 1 小时按 1 小时算。
创建后点「立即出数」;首次会补齐最近 24 小时,便于直接看图。计量表的能源类别必须与所选类别一致。
企业信息
本企业档案:名称、统一社会信用代码、营业执照与联系方式本企业访问地址 发给同事用这个
读取中…
网页品牌(登录页名称与 logo) 读取中…
读取中…
说明
品牌生效在域名上,不是「谁登录就显示谁的」:访客打开
<企业代号>.域名 时看到本企业配的这一套;直接打开平台主域名
或 IP 时看到的是平台默认。这里改的是「本企业门面」,与当前登录的账号属于哪家企业无关
—— 换一家企业登录,只要域名没变,登录页显示的仍是域名对应那一家的品牌。
站点名称会同步影响控制台顶栏与浏览器标签(标签形如「站名 · 身份」),
并且是登录页标题的兜底值:登录页标题留空时显示的就是站点名称。
这一页只管上面三项与 logo。页脚(版权主体、ICP 与公安备案)属于平台的法定展示项,
由平台在「网页品牌」里统一维护 —— 企业侧提交这些字段会被服务端直接拒绝。
「恢复跟随平台」会删掉本企业的整行配置(含 logo),之后本企业域名下显示平台那一套。
读取中…
点「体检」检查当前域名与品牌配置。
登录页背景(本企业) 读取中…
读取中…
说明
背景与网页品牌一样按域名生效:访客打开
<本企业代号>.域名 时看到这一套,与"当前登录的账号属于哪家"无关。
「继承平台」= 本企业不单独配,直接用平台那一套(平台换图,这里跟着变);
「自选素材」= 本企业写死一份,平台之后换图不会影响本企业。
遮罩(dim)请谨慎调小:背景铺满整个视口,页面底部那两行浅色小字
直接压在图上。平台默认的 0.45 是在浅色图上仍然读得清的下限,
调成 0 时请确认自己选的图足够暗。
遮罩 / 模糊 / 位置三项只在「自选素材」下生效 ——
继承平台时这三项由平台统一决定,界面上会置灰并写明原因,
而不是留一个改了没用的控件。
清单来自服务端;没有可选素材时,
请让平台先在「登录页背景」里上传。
登 录
当前没有背景图:登录页用的是代码里的深绿渐变。
读取中…
平台核验项 企业只能看,不能自改 —— 要变更请联系平台
加载中…
已开通的功能模块 由平台授予,企业侧只读
加载中…
我的模块授权(自我排查) 看不到某个模块时先看这里
被拦住时先点这里:三行字就能分清是"企业没开通"还是"没授权给我"。
未查询。这一条只读自己的档案,不需要 user:read / user:admin 权限。
维护本企业信息 可自助修改,保存即生效
改了名称会显示在报表封面、导出材料抬头与大屏标题上。
它印在营业执照上,所以平台会复核一次 —— 期间新名称立即生效,不影响任何功能。
口令重置的验证码按企业登记的联系方式投递(服务端依次解析账号级 → 企业档案 → 企业联系人);一个都没登记就发不出去,界面会如实提示。
营业执照影像 可重传,由平台核验
未加载。影像不放公共目录,点上面的按钮时按权限单独取回。
只接受 PNG / JPEG / WebP / PDF,按文件头判断真实类型(把 .exe 改名成 .png 不算),单张不超过 5 MB。
上传后会立即替换上面那一张,并给平台挂一个「待核验」——核验通过前这里会显示状态。
我的套餐
本企业当前档位、到期时间、宽限期与包含的功能模块(只读)加载中…
说明:这一页为什么只读
套餐由平台调整,本企业没有自助续费或自助延期的入口 ——
注册是"开放 + 自动开通",自助延期会变成一条被反复利用的免费通道。
需要续期、加模块或改档位,请联系平台管理员。
这一页的接口刻意不受功能门控:即使企业已经被到期降级到 expired 档 (只保留 9 个模块),这一页照样打得开 —— 否则就会出现"我少了 8 个模块, 但连'为什么'都查不到"。降级收回的模块会逐键列在上面的「已经失去」里。
宽限期内功能一个键都不会变:上面「宽限结束后将失去」列的是后果, 不是现状。真正被收回发生在宽限结束(默认到期后 15 天)那一刻,而那一刻 在 Phase 1 只由平台点「跑一轮到期评估」触发 —— 不会在后台自动发生。
这一页的接口刻意不受功能门控:即使企业已经被到期降级到 expired 档 (只保留 9 个模块),这一页照样打得开 —— 否则就会出现"我少了 8 个模块, 但连'为什么'都查不到"。降级收回的模块会逐键列在上面的「已经失去」里。
宽限期内功能一个键都不会变:上面「宽限结束后将失去」列的是后果, 不是现状。真正被收回发生在宽限结束(默认到期后 15 天)那一刻,而那一刻 在 Phase 1 只由平台点「跑一轮到期评估」触发 —— 不会在后台自动发生。
订阅与支付
当前档位、在线购买或续费、本企业的支付订单与收款单号(金额与档位由服务端定) 读取中…读取中…
当前档位 与「我的套餐」同源
读取中…
支付模式 可用渠道与各自的说明
读取中…
选择档位 下单只传档位,金额由服务端算
1
第一步:选一个档位。这里不选支付渠道 ——
渠道是下一步(下单之后才出现的那个步骤)。
加载中…
2
第二步:选择支付渠道,然后点「确认支付」。
—
支付结果
自动查询每 5 秒一次;离开这一页会自动停。
实际支付要等通道回调送到服务端,订阅才会生效。
我的订单 含收款单号与收款时间
加载中…
说明:为什么先选档位再选渠道、虚拟支付与实际支付差在哪、二维码怎么来、退款怎么办
一、为什么先选档位、后选渠道。渠道不是"购买前的偏好",而是
"下单之后要走哪条收款路径"。所以这一页先让你看清买哪一档、多少钱,
点「下一步」之后才出现「微信支付 / 支付宝」这一步;那一刻两个渠道
各自可用不可用、缺什么,都逐条写在选项上(未配置的、未定价的当场禁用),
不让人选完渠道点下去才吃一个 400。
二、虚拟支付与实际支付差在哪。虚拟支付(只在测试环境开启, 见顶上那条提示)点「确认支付」之后直接完成:不经任何支付通道、 不产生任何真实收款,但订单照样会拿到一个收款单号与收款时间 (标记为虚拟),订阅也照样生效 —— 它用来在测试环境跑通整条流程。 实际支付会向通道下单并给出二维码,通道回调确认收款之后服务端才 开通功能,并记入一笔真实收款(收款单号 + 收款时间 + 通道流水号)。 本页把这两者在三处分开显示:下单前的模式提示、支付结果区 (底色/边框/图标都不同)、订单列表里每一单的文字标签。
三、金额与档位:一律由服务端从套餐目录取值。下单请求里只有
四、二维码:服务端下单时会同时给
五、收款单号:付款确认(订单变为已支付)那一刻由服务端生成, 形状
六、退款:本轮未实现(点了会明确告诉你不支持, 不会静默失败)。需要退款请联系平台运维走通道 商户后台人工处理。
二、虚拟支付与实际支付差在哪。虚拟支付(只在测试环境开启, 见顶上那条提示)点「确认支付」之后直接完成:不经任何支付通道、 不产生任何真实收款,但订单照样会拿到一个收款单号与收款时间 (标记为虚拟),订阅也照样生效 —— 它用来在测试环境跑通整条流程。 实际支付会向通道下单并给出二维码,通道回调确认收款之后服务端才 开通功能,并记入一笔真实收款(收款单号 + 收款时间 + 通道流水号)。 本页把这两者在三处分开显示:下单前的模式提示、支付结果区 (底色/边框/图标都不同)、订单列表里每一单的文字标签。
三、金额与档位:一律由服务端从套餐目录取值。下单请求里只有
plan_code / provider / request_id
三个字段 —— 传任何金额字段都会被 400 挡下(这是为了防止"改一下请求就能
1 分钱买顶配")。付款成功后订阅由服务端在通道回调里生效,
本页不会、也没有任何接口可以自己去"让订阅生效"。
四、二维码:服务端下单时会同时给
code_url(二维码内容)与 qr_png_data_uri
(已经渲染好的 PNG data URI)。有图就显示图,没图就显示
code_url 文本让人自己扫/复制。下面那一块是布局示例,
不是真二维码;它只在真实下单时才会被真的二维码替换。
五、收款单号:付款确认(订单变为已支付)那一刻由服务端生成, 形状
R + 日期 + 6 位当日序号,与收款时间一起写进订单行,
在下面「我的订单」里只读显示。虚拟单也有单号,但订单列表里会标成
「虚拟(测试)· 未产生真实收款」—— 它不是收入。
六、退款:本轮未实现(点了会明确告诉你不支持, 不会静默失败)。需要退款请联系平台运维走通道 商户后台人工处理。
占位示例
这里放服务端返回的二维码图片 (
这里放服务端返回的二维码图片 (
qr_png_data_uri,data URI,不引任何外部图床或库)请用微信扫码(选支付宝时文案会跟着换成支付宝)
真实下单时这一格是服务端给的 PNG data URI;
服务端没出图(没装二维码库)时,这里显示
code_url 文本,
下面这串就是那种文本的格式占位示例(不是可支付的码)。weixin://wxpay/bizpayurl?pr=FORMAT-EXAMPLE-NOT-A-REAL-CODE
轮询/手动刷新只查我们自己库里那一单的状态
(就是下面「我的订单」里那一单)——
它不会去向通道查单,也不会改任何东西。
企业网关综合管控平台
进入企业网关综合管控平台,或把本企业的清单同步过去(含每台网关自己的令牌)进入企业网关综合管控平台 免账号,一次性票据
点下面的按钮会做两件事:① 用你当前的身份(本企业 + 你的角色)签一张
一次性、60 秒有效的票据;② 在新标签页打开企业网关综合管控平台并自动登录。
票据只能用一次、过期作废 —— 要再进一次请再点一下。
同步相关信息到企业网关综合管控平台
把本企业的空间 / 计量表 / 点位 / 数据源 / 网关 / 测试设备清单推给企业网关综合管控平台,
省掉在那边手工重录一遍;每一台网关还会带上它自己那枚网关令牌,
对面按网关分开保存 —— 于是「清单配好了、令牌却忘了配」这种半成品状态不会再出现。
载荷签名后走 HTTPS,令牌只在这一次传输里出现;页面、返回与报告里
只显示长度与指纹,不回显令牌原文。
「先看要同步什么」只组装、不发出去,也不带令牌。
★ 同步成功 ≠ 数据已经在回来:清单到了之后还要对面那台网关在跑
(新网关第一次同步完,对面可能需要重启一次常驻进程)。
点「先看要同步什么」可以看到将同步多少条(不会发出去)。
参数设置
本企业的算数口径:报表默认看多少天、预警默认回看多少小时、大屏多久自动刷新等本企业参数 每家企业各一份,逐项保存
保存是按项的:每行右边各有「保存」与「恢复引用全局」。
「引用全局」是删掉本企业的行,所以平台以后改全局值时它会跟着变。
加载中…
推演测算
按历史数据推演出企业已在使用的一整套数据:月度台账/计划、设备与逐时读数加载中…
生成企业结构 空间 / 网关 / 数据源 / 计量表 / 点位
加载中…
正在取「将要建什么」的清单…
还没生成
① 数据来源与产值参数 历史优先;预览不写库,确认后才生成
保存的是这一组的「默认值」:保存后换台电脑、重开会话,打开这一页就会按它回填
(只填空着的框,不覆盖你已经输进去的数)。预览与生成读的仍然是你现在填的这些 ——
这里改默认值不会改动任何已经算出来的数据。
② 能源类别与年度实物量 可以一次加多条;年度实物量填 0 的行不保存
正在加载能源类别…
正在读演示数据…
绿色工厂三级计量初始化:一次铺好 天然气、汽油、柴油、电力、热力
五行类别(只铺类别结构,年度实物量留空 —— 数字要你自己填,填 0 的行不保存)。
它不会动你已经填过的行,也不会重复添加。★ 其中
电力 / 热力:国标折标目录里只有折标系数、没有碳排系数,
所以"按需补建"这一步会被服务端拒绝(页面上会写明原因)——
电力的碳排应当来自「碳排放因子库」里按地区电网引用的公共因子,
不是在折标目录里编一个数。
③ 预览结果 逐类别月度明细、自查与逐时预估行数
还没预览
还没预览
还没预览
④ 批次与清场 清场按批次删,只删这一批写进去的东西
未加载
员工管理
本企业内部账号:新建、改资料与角色、按人授权模块、重置口令、停用或彻底删除员工清单
加载中…
新建员工
登录用的账号。创建后不可更改 —— 它是审计留痕里指认这个人的键。
至少 8 位、同时含字母与数字,且不得与账号相同。
改口令不在这里:已建账号只能走该行的「重置口令」(那会返回一枚一次性口令)。
改口令不在这里:已建账号只能走该行的「重置口令」(那会返回一枚一次性口令)。
模块授权 这个账号能用企业的哪些模块
一次性口令 只返回这一次,关掉本页就取不回来了
角色与权限 与登录令牌里下发的是同一套
加载中…
我的实际可用模块 三层关系
加载中…
模块授权
按员工授予可用模块;实际可用 = 企业已开通 ∩ 员工被授权我的授权(自我排查) 被权限拦住时先看这里
加载中…
授权矩阵
加载中…
密码安全
修改本账号口令修改口令 凭旧口令自助修改
忘记口令 / 被平台重置之后
说明
忘记当前口令时不需要登录:登录页的「忘记口令」可用邮件或短信验证码自助设置新口令。
平台管理员重置后,服务端会把该账号标记为「需改密」并下发一次性口令;用它登录后请立即在本页改掉,改密成功后标记会自动清除。
新口令同样受强度检查:至少 8 位、同时含字母与数字、不得是常见弱口令、不得与账号或开通时的默认口令相同。
平台管理员重置后,服务端会把该账号标记为「需改密」并下发一次性口令;用它登录后请立即在本页改掉,改密成功后标记会自动清除。
新口令同样受强度检查:至少 8 位、同时含字母与数字、不得是常见弱口令、不得与账号或开通时的默认口令相同。
当前账号:—
发信通道 本企业的 SMTP / 短信网关配置
加载中…
发送测试 发一条到本企业登记的联系方式
关于三层优先级与「密钥留空」的说明(首次配置前读一遍)
三层优先级:本企业这一行 > 平台全局行 > 环境变量。
本页只写本企业那一行,平台全局行在平台的「功能配置 → 通知通道」里维护。
不填 = 跟随上一层;填了才覆盖。通道开关也是这个语义: 不填
留空的非密钥项按「清除本企业这一项的设置」提交(
「发送测试」用的是本企业的通道, 目标只能是本企业档案上登记的联系方式(测试发送不开放任意目标, 否则它就是一个免验证码的群发口);平台管理员另有 一条可发到任意目标的通道。
不填 = 跟随上一层;填了才覆盖。通道开关也是这个语义: 不填
email_enabled/sms_enabled 表示跟随平台,
显式设为「关闭」才会把平台配好的通道也停掉 —— 想用本企业自己的网关,
就把对应开关显式设为「开启」。留空的非密钥项按「清除本企业这一项的设置」提交(
NULL),
于是它会回落上一层;密钥项留空 = 根本不提交这个字段 = 保持现有密钥不变
(服务端只回末 4 位,界面永不回填原文)。要清掉密钥请显式填一个空值之外的
动作 —— 本页不提供"把密钥抹成空串"的按钮,那等于让这台机器突然发不出信。「发送测试」用的是本企业的通道, 目标只能是本企业档案上登记的联系方式(测试发送不开放任意目标, 否则它就是一个免验证码的群发口);平台管理员另有 一条可发到任意目标的通道。
微信绑定 用微信扫码登录本系统
加载中…
绑定微信是改你自己的进门方式,所以先用当前口令确认一次
(防的是共用设备上别人把你的账号绑到他的微信上)。这枚口令只用于本次确认,
服务端不保存它,页面上也不会回填。
用途:这个微信仅用于登录本系统,不用于任何营销,也不用于对外推送;
昵称 / 头像只在「我的绑定」里显示,好让你认得出绑的是哪一个微信。
随时可自助解绑:上面的「解除绑定」不需要口令,点一下立即生效 —— 想收回授权时不必找任何人。
员工被停用后,他的微信登录会同时失效(每次登录服务端都会复查账号状态); 反过来,解绑只断掉这一枚微信,账号本身与口令登录都不受影响。
随时可自助解绑:上面的「解除绑定」不需要口令,点一下立即生效 —— 想收回授权时不必找任何人。
员工被停用后,他的微信登录会同时失效(每次登录服务端都会复查账号状态); 反过来,解绑只断掉这一枚微信,账号本身与口令登录都不受影响。
使用手册
系统说明与操作培训(平台编写)目录 点一章看正文
加载中…
正文
在目录里点一章。
采集器部署
下载现场部署包(采集器本体 + 启动脚本 + 施工说明),再下载本公司的配置文件推荐下载 读取中…
读取中…
本公司的配置文件 读取中…
读取中…
现场怎么装 五步,每步都有一句"看到什么算成了"
读取中…
现场版本对照 读取中…
读取中…
全部可下载版本 读取中…
读取中…
读取中…
新手指南
五张速查表 + 常见问题新手指南
怎么用这一页 先读这三句
说明
这一页是速查表:每一块回答一个问题,表里都写了
做完的判据 —— 对不上说明那一步没做完,别急着往下走。
每一步的完整说明(为什么这么做、做错了会怎样)在 「使用手册 → 按步骤走一遍(新手指南)」。两份内容分工不重复: 这边压成表,那边是正文。
如果表里的口径与你们现场不一致(例行清单、找平台的联系方式), 告诉平台管理员改这一页 —— 不要自己在心里换算。
每一步的完整说明(为什么这么做、做错了会怎样)在 「使用手册 → 按步骤走一遍(新手指南)」。两份内容分工不重复: 这边压成表,那边是正文。
如果表里的口径与你们现场不一致(例行清单、找平台的联系方式), 告诉平台管理员改这一页 —— 不要自己在心里换算。
加载中…
平台总览
租户规模、注册申请与平台开关概览待审批申请
加载中…
平台开关
加载中…
最近操作留痕
加载中…
企业管理
全部租户与企业档案;平台可代管开通、启停与口令重置,跨租户读数据必须走 /api/platform/tenants/{code}/…添加企业 平台代客开通:建租户 + 建管理员 + 建数据域库
说明
这条路径与企业在登录页自助注册走同一套落库动作,区别有三处,都是刻意的:
① 不要求营业执照(平台自己录客户,凭据可以后补);
② 不受「是否开放自助注册」开关影响 —— 那个开关管的是公开入口;
③ 默认直接建库并置为可用,建完客户就能登录;也可以先只录档案
(状态选 pending、取消勾选"立即建库"),等合同签完再放行。
初始管理员口令留空时由平台生成 12 位强口令, 并在提交后 只显示这一次(库里只存哈希);之后可以走「重置口令」。
初始管理员口令留空时由平台生成 12 位强口令, 并在提交后 只显示这一次(库里只存哈希);之后可以走「重置口令」。
口令只在结果里显示一次
不勾 = 用「平台设置」里的注册默认模板
企业清单
加载中…
企业详情
只读:这一列同时是套餐目录的
外键,改它必须连带改订阅行与功能面。请到
平台 → 套餐管理 改档(那里有缩水闸门与逐键差异确认),
本页只显示当前值。名称、套餐、状态由平台管辖;统一社会信用代码与营业执照是企业提交、平台核验的凭据,不在这里修改。
试用期
选定企业后显示
只填这一个:
从当前到期时间往后加天数;已经过期或还没约定到期日的,从今天起算。
两个都填会被拒绝(无法确定以哪个为准)。
只填这一个:
按这一天的结束时刻算 —— 写「到期日」时以这一天过完为准。
这句话会进操作留痕 ——
半年后有人问「当时为什么给他多一周」,答案只在这里。
功能模块(这家企业开通了哪些)
修改功能模块
说明
三个动作写的是同一列 saas_tenant.features,值不同、后果也不同:
· 保存选中项 → 写入勾选出来的数组(
· 设为一个都不开 → 写入
· 取消功能限制 → 写入
这三者与账号角色权限同时生效:企业开通了模块,账号还得有对应权限才进得去; 反之账号权限再高,企业没开通也进不去。
· 保存选中项 → 写入勾选出来的数组(
["energy","report"])。
勾选框是"这份清单的确切内容",所以不勾任何一项再保存 = 空数组 = 一个都不开。· 设为一个都不开 → 写入
[]。企业登录后只剩「企业信息」「密码安全」,
其余菜单不出现、接口一律 403 FEATURE_DISABLED。· 取消功能限制 → 写入
NULL。不受功能限制(全部可用),
与角色权限叠加决定实际能进哪些页;存量企业就是这个状态,新模块也会自动获得。这三者与账号角色权限同时生效:企业开通了模块,账号还得有对应权限才进得去; 反之账号权限再高,企业没开通也进不去。
企业端页面水印(防未缴费截屏)
已缴费企业用「隐性」(几乎看不见、不挡视线);
试用与未缴费用「显著」(可平铺、略挡视线)。可见文案只有
企业名称、账号、状态、到期日、时间这五项,外加一段可见校验码 ——
校验码就是签名的前 10 位,抄下来就能在「功能配置」页查到是哪一次渲染;
IP 只进指纹、不进文案。
指纹由服务端签名;图上那一段校验码可在「功能配置」页验签。
重置该企业管理员口令
一次性口令只在本次响应里返回一次。
审批
通过时会真实创建该企业的数据域(建库 + 建表 + 迁移);建库失败时租户仍保持原状态,可修正后重试。
营业执照
未加载。
只收 PNG / JPEG / WebP / PDF,按文件头判断真实类型,
单张不超过 5 MB。上传后这一件立即生效,核验状态回到「待核验」。
备注企业端只读可见 —— 它就是企业整改后重传的依据。
营业执照影像(原件)
危险区:彻底删除这家企业
删除是不可逆的:租户行、数据域库
bfbems_t_…、企业品牌与营业执照原件都会被删掉;
审计、告警与发送记录保留。企业代号会释放,之后可以重新注册同一代号。危险区:重新初始化这家企业(回到出厂态)
把这家企业恢复成刚注册开通、还没登录过的样子:
结构、字典、费率与因子、台账与计划、推演与模拟、企业参数、企业定制、
大屏与首登记录,以及数据域里的全部读数都会被清空。
企业档案(名称、统一社会信用代码、营业执照、联系方式)、员工账号、
审计与告警保留。执行前会自动导出一份快照到服务器上。
客户分组
把企业分成运营小组并指派归属人,再按组看规模与收款口径分组管理
说明
分组是运营视角的归类:它只决定"这些客户归谁跟",不参与任何权限判定 ——
企业能看到什么、能调什么接口,仍然只由功能集与角色权限决定。
这么分是因为两者混在一起之后,"把客户挪个组"会变成一次可能改权限的操作,
没人敢动它。
三个动作各有边界:停用只是让它不再可选(已经挂在里面的企业不受影响, 也不会被踢出来);删除只有在组内一家企业都没有时才允许 —— 服务端会挡住并告诉你有多少家,你必须先把它们改到别的组。 这条闸门是刻意的:一次误删会把一批客户的归属信息一起抹掉, 而归属信息没有历史留痕可以回溯。
排序只影响下拉框与看板卡片的先后,数字小的在前。 名称与备注可以随时改(它们只是标签);编码建后不改 —— 接口路径、审计留痕里记的都是编码,改它等于换了一个对象。
三个动作各有边界:停用只是让它不再可选(已经挂在里面的企业不受影响, 也不会被踢出来);删除只有在组内一家企业都没有时才允许 —— 服务端会挡住并告诉你有多少家,你必须先把它们改到别的组。 这条闸门是刻意的:一次误删会把一批客户的归属信息一起抹掉, 而归属信息没有历史留痕可以回溯。
排序只影响下拉框与看板卡片的先后,数字小的在前。 名称与备注可以随时改(它们只是标签);编码建后不改 —— 接口路径、审计留痕里记的都是编码,改它等于换了一个对象。
只允许小写字母、数字与下划线,最长 32 位;
接口路径与审计留痕里记的都是它,建后不改。
整数,数字小的排在前面;留空用服务端默认值 100。
最长 255 字。
名称必填;编码重复时服务端返回 409,原话会显示在下面。
加载中…
客户归属
每一行的两个下拉就是这家企业的分组与归属人,改完必须点这一行的「保存」才写库。
批量区是给"一次挪一批"用的:两个下拉各自带一项「不改动」——
你只选要改的那一项,另一项保持「不改动」,它就一个字节都不会动。
选「未分组 / 未分配(清空)」才是真的把那一项清掉,两者不是一回事。
归属人是平台侧账号,只用于"这客户谁在跟",不代表任何数据权限。
加载中…
按组看板
金额一律由服务端以分下发,这里只换算成元显示(2 位小数);
合计取服务端给的数,不在前端重新加总 —— 前端加总会在筛选之后
悄悄变成另一个数(筛过的表加出来当然更小),而两个数打架时没人分得清哪个对。
两列钱的措辞是刻意分开的,因为它们语义不同: 「实收到账」只算真实到账(服务端的 real_cents / real_cents_total); 「虚拟单(不计收入)」只数单数(虚拟单的实收是 0)。 两者绝不相加,卡片上也没有任何一个数是两者之和 —— 混算会把演示单当成收入,而这个数是拿去做经营判断的。
卡上的数一律照抄服务端:它没给的(例如「合计」里没有已过期这一项) 这一页就不显示,不拿别处的数拼一个出来。
两列钱的措辞是刻意分开的,因为它们语义不同: 「实收到账」只算真实到账(服务端的 real_cents / real_cents_total); 「虚拟单(不计收入)」只数单数(虚拟单的实收是 0)。 两者绝不相加,卡片上也没有任何一个数是两者之和 —— 混算会把演示单当成收入,而这个数是拿去做经营判断的。
卡上的数一律照抄服务端:它没给的(例如「合计」里没有已过期这一项) 这一页就不显示,不拿别处的数拼一个出来。
加载中…
注册审批
自助注册申请;通过时会为该企业创建数据域通过审批会真的建库(schema + migrate),可能耗时数秒;建库失败时租户仍是待审批状态,可直接重试。驳回只改状态,不会建库。
待审批申请
加载中…
自助注册记录
加载中…
平台账号
平台账号(不属于任何企业):建号、停用、选角色、按人授权、重置口令账号清单
加载中…
新建平台账号 默认只读角色;口令留空则自动生成一次性口令
全局唯一,且创建后不可改名 ——
审计留痕里只有账号文本,改名会让历史指不到人。
分组只用于归类与筛选,不参与任何权限判定。
留空最省事:服务端生成一枚强口令并置「首次登录必须改密」,
它只在响应里出现一次。
一次性口令 只返回这一次,关掉本页就取不回来了
编辑与授权
停用是每请求校验的:保存之后对方手里的令牌立刻失效,
不需要等它过期。
按人授权 三态:继承角色 / 一个都不授 / 指定清单
权限 × 账号矩阵(只读,用于巡检)
加载中…
平台权限清单(按危险度分三组)
加载中…
平台分组(单层,不参与权限判定)
加载中…
建后不可改:账号的「分组」存的就是它。
小的在前。
平台设置
平台级开关与参数;含布尔开关、"注册后默认开放哪些功能"与到期策略的数值项功能开关
加载中…
外部大屏系统 AnyReport / AJ-Report / Grafana
说明
外部大屏系统(例如 AnyReport)自己带着大屏令牌去
哪一行发给谁:不带「企业」= 平台行(所有企业都能看到入口); 选了某家企业 = 只写进那一家的行,只有它看得到。 平台行的「大屏地址」默认不发给企业 —— 本机实测出来的原因:那一行地址很可能正是为某一家企业建的屏 (大屏的数据源是那家企业自己的令牌),发给所有企业就等于 一个链接跨了租户。要让所有企业都能打开,勾「共享给所有企业」, 那是在声明「这块屏是公共的、不含任何企业数据」。
/api/screen/feed 取数(零请求头、令牌在查询串里,
格式用 format=bare —— 实测只有"顶层数组"那种形态它才读得成行集)。
这里配的是指针:入口地址、数据集名、要不要对企业开放。
凭据不在这里存:令牌在「数据大屏 → 外部大屏取数」里签发与吊销。
哪一行发给谁:不带「企业」= 平台行(所有企业都能看到入口); 选了某家企业 = 只写进那一家的行,只有它看得到。 平台行的「大屏地址」默认不发给企业 —— 本机实测出来的原因:那一行地址很可能正是为某一家企业建的屏 (大屏的数据源是那家企业自己的令牌),发给所有企业就等于 一个链接跨了租户。要让所有企业都能打开,勾「共享给所有企业」, 那是在声明「这块屏是公共的、不含任何企业数据」。
企业账号
自动给企业开外部大屏账号
说明
一家企业 一个组织 + 一个只读角色 + 只授权它自己那块屏 —— 三层隔离,
再加平台这一行记录"账号 ↔ 企业 ↔ 屏"的对应。
开通是尽力而为的:外部系统不在时不会挡住企业开通, 只会在这里留一行「失败」等人重试(幂等,重试不会开重)。
口令只在开通/重置那一次回显(我们不留明文), 丢了点「重置口令」重新签发一次。 「屏数字 id」是可选的:填了才做数据级授权(只授权那一块屏), 不填就只按组织与角色隔离 —— 结果里会如实写明没做。
开通是尽力而为的:外部系统不在时不会挡住企业开通, 只会在这里留一行「失败」等人重试(幂等,重试不会开重)。
口令只在开通/重置那一次回显(我们不留明文), 丢了点「重置口令」重新签发一次。 「屏数字 id」是可选的:填了才做数据级授权(只授权那一块屏), 不填就只按组织与角色隔离 —— 结果里会如实写明没做。
一键核对
两边是不是一回事
说明
三项各查各的:① 入口通不通;② 平台行集出不出数(要填一条大屏令牌);
③ 外部系统里到底有没有这个数据集(要填那边一个管理员口令)。
两项凭据都只用于本次请求,不落库。
大屏令牌
访问统计 Piwik / Matomo 跟踪链接
说明
配好之后,服务端会在三张页面的
默认关闭:没配过(或显式关闭)时,页面上一个字节都不多。 控制台一直守着"单文件、零外部依赖"(内网出不了外网时引 CDN 会白屏), 统计脚本是唯一一处会打破它的东西,所以要显式打开。
会把什么发出去:页面地址、访问次数、浏览器信息 —— 不含任何业务数据(页面里的表格与数值不会被拿走)。 但对医院、园区这类客户,"访问行为发到外部服务器"通常是需要写进合同的处置行为, 请先确认再打开。
它做不到什么:只做平台级,不按企业分别配置 —— 因为
</head> 之前注入统计脚本:
/(控制台)、/screen(数据大屏)、/twin(三维孪生)。
/api/* 是数据接口,不注入 —— 对它做页面统计毫无意义,
只会把接口路径写进统计报表。
默认关闭:没配过(或显式关闭)时,页面上一个字节都不多。 控制台一直守着"单文件、零外部依赖"(内网出不了外网时引 CDN 会白屏), 统计脚本是唯一一处会打破它的东西,所以要显式打开。
会把什么发出去:页面地址、访问次数、浏览器信息 —— 不含任何业务数据(页面里的表格与数值不会被拿走)。 但对医院、园区这类客户,"访问行为发到外部服务器"通常是需要写进合同的处置行为, 请先确认再打开。
它做不到什么:只做平台级,不按企业分别配置 —— 因为
/screen 与 /twin 是免租户路径(大屏机器没有登录态),
渲染这两张页面时根本没有租户上下文。表里留了 tenant_id,
但当前注入只读平台行。
说明
参数分四种类型,由服务端按默认值的类型判定并随接口下发 kind:
每个开关都显示当前值 vs 默认值:「恢复默认」写回代码里的默认值 (功能模板的默认值取自服务端的功能清单,不是抄一份在前端)。
开关的默认值写在服务端代码里(PLATFORM_GATE_SETTINGS),库里只存"偏离默认的覆写", 所以恢复默认 = 删掉那条覆写,而不是把默认值当成一次修改写进去。
关闭「开放企业自助注册」后,登录页的注册入口与 POST /api/register 会一起关掉 —— 只藏按钮不挡接口等于没关。
「企业注册后默认开放的功能」是给新企业的模板:改它不影响已在用的企业, 那些企业各自的功能集在「企业管理」里逐家看、逐家改。
到期策略的那几项(是否自动降级、评估周期、提前提醒天数、兜底宽限天数)改的是 "到期评估什么时候跑、跑的时候做到哪一步":默认不自动降级, 于是宽限期结束后系统只把这几家企业列在评估结果的"宽限外未降级"里, 功能一个键都不变,等平台处理。打开自动降级等于允许系统在宽限期结束后收回客户模块 —— 这是会改变客户功能面的动作,请确认有人值守时再开。 无论开关是开是关,在「套餐订阅」页点「跑一轮」都会执行到降级那一步。
bool(开/关)、features(一组功能键,值是数组)、
以及两种数值型 number(整数,秒或天)与 days(天数清单,逗号分隔)。
界面按 kind 分别渲染,不复用同一套控件 —— 功能模板的值是逗号分隔的字符串,
用"非空即真"去判会把"一个都不开"显示成"已开启";
到期评估周期 0 秒是"不自动跑",按真假判会显示成"已关闭",
两句话说的不是同一件事。每个开关都显示当前值 vs 默认值:「恢复默认」写回代码里的默认值 (功能模板的默认值取自服务端的功能清单,不是抄一份在前端)。
开关的默认值写在服务端代码里(PLATFORM_GATE_SETTINGS),库里只存"偏离默认的覆写", 所以恢复默认 = 删掉那条覆写,而不是把默认值当成一次修改写进去。
关闭「开放企业自助注册」后,登录页的注册入口与 POST /api/register 会一起关掉 —— 只藏按钮不挡接口等于没关。
「企业注册后默认开放的功能」是给新企业的模板:改它不影响已在用的企业, 那些企业各自的功能集在「企业管理」里逐家看、逐家改。
到期策略的那几项(是否自动降级、评估周期、提前提醒天数、兜底宽限天数)改的是 "到期评估什么时候跑、跑的时候做到哪一步":默认不自动降级, 于是宽限期结束后系统只把这几家企业列在评估结果的"宽限外未降级"里, 功能一个键都不变,等平台处理。打开自动降级等于允许系统在宽限期结束后收回客户模块 —— 这是会改变客户功能面的动作,请确认有人值守时再开。 无论开关是开是关,在「套餐订阅」页点「跑一轮」都会执行到降级那一步。
功能配置
全部功能模块清单、平台级总开关、企业注册后的默认开放模板,以及全局 AI 接口说明与注意
平台级总开关是「否决」:取消勾选(= 停用)之后,所有企业都用不了这个模块 ——
菜单不显示、接口一律 403 FEATURE_DISABLED,即使那家企业已经单独开通了它。
它比「企业管理」里的企业功能集高一层,撤销同样在本页。
「企业注册后默认开放的功能」是「授予模板」,与上面的停用清单方向相反: 它只决定以后注册(或审批)的企业拿到哪些模块,改它不会动到已经在用的企业; 已经在用的企业各自的功能集,在「企业管理」里逐家看、逐家改。
停用核心模块要格外小心:表里标着「核心」的模块一旦被停用,企业连总览、报表都会打不开。 保存时如果服务端回了 core_disabled,本页会把这条风险单独提示出来。
「企业注册后默认开放的功能」是「授予模板」,与上面的停用清单方向相反: 它只决定以后注册(或审批)的企业拿到哪些模块,改它不会动到已经在用的企业; 已经在用的企业各自的功能集,在「企业管理」里逐家看、逐家改。
停用核心模块要格外小心:表里标着「核心」的模块一旦被停用,企业连总览、报表都会打不开。 保存时如果服务端回了 core_disabled,本页会把这条风险单独提示出来。
功能模块清单
加载中…
说明
最后一列就是平台级总开关:勾上 = 可用,取消勾选 = 停用。
保存时提交的是被取消勾选的那些 —— 服务端的 disabled 是「停用清单」而不是「授予清单」,
方向搞反一次就等于把全平台的功能关掉;所以本页在没有画出一个勾选框时直接拒绝提交。
企业数两列的口径:显式授予是 saas_tenant.features 里写明开通了这个模块的企业数; 实际可用是前者再加上 若干 家 「不受功能限制」的企业(它们在服务端是 features=NULL,实际上什么模块都能用)。 只报显式授予数会明显偏低,按一个偏低的数字判断「没人用、可以关掉」是本页最容易犯的决策错误。
企业数两列的口径:显式授予是 saas_tenant.features 里写明开通了这个模块的企业数; 实际可用是前者再加上 若干 家 「不受功能限制」的企业(它们在服务端是 features=NULL,实际上什么模块都能用)。 只报显式授予数会明显偏低,按一个偏低的数字判断「没人用、可以关掉」是本页最容易犯的决策错误。
水印验签(追责用)
校验码就是签名的前 10 位,所以它自己能当
「哪一次渲染」的查找键;查到留痕后再用那条留痕里的完整凭据重算一遍签名,
而不是相信留痕写的就是对的。只查最近 7 天;抄少到 8 位也认,
少于 8 位会提示太短。
完整凭据里带着企业代号、账号、时间、模式与来源 IP,所以验签不需要任何上下文;
签名对不上说明内容被改动过,或者签发它的密钥与本机不同。
只读:不改任何配置,也不写审计。
「企业注册后默认开放的功能」模板
说明
这一层是新企业的模板:改它只影响之后注册(或审批)的企业,不会动到已经在用的企业 ——
要单独增减某一家企业的模块,去「企业管理」里改那一家。
把整组勾掉 = 新企业一个模块都不开(它不是「不受限制」:取消限制是「企业管理」里对单家企业的动作)。
若要把模板改回代码里的默认值,去「平台设置」用那个开关上的「恢复默认」。
加载中…
AI 接口(全局)
说明
三层优先级:企业自己的配置 > 平台全局配置(这一块) > 环境变量 SAAS_DEEPSEEK_API_KEY。
全局配置就是「企业没有单独配置时自动沿用」的那一份,所以它也决定了这部分调用由谁承担。
密钥只回末 4 位、永不回显原文:这里的输入框始终是空的, 留空 = 不提交 api_key 字段 = 保持现有密钥不变 (服务端把「字段缺失」理解为不改动;空串的含义是「显式声明这一层没有 key」,两者后果不同)。 接口地址、模型、超时三项留空 = 清除这一项的覆盖,回落到占位符里写明的默认值。
密钥只回末 4 位、永不回显原文:这里的输入框始终是空的, 留空 = 不提交 api_key 字段 = 保持现有密钥不变 (服务端把「字段缺失」理解为不改动;空串的含义是「显式声明这一层没有 key」,两者后果不同)。 接口地址、模型、超时三项留空 = 清除这一项的覆盖,回落到占位符里写明的默认值。
通知通道(全局) 没有单独配置的企业正在用这一行
加载中…
发送测试 与真实验证码走同一条投递路径与文案模板
开发调试(DEV)· 模拟短信 不调用短信网关,验证码直接显示在页面上
加载中…
发送审计
还没读取发送审计
说明
这一行是平台全局配置:企业没有单独配置时自动沿用。密钥只回末 4 位、
永不回显原文;留空 = 不提交该字段 = 保持现有密钥,保存成功后输入框会立即清空。
短信的
sent=false 且 file 非空表示报文已留档在服务端
data/outbox/ 下 —— 那是"本该发出的信",收件人收不到,
所以界面上一律说"没有真的发出",绝不美化成"已发送"。短信的
sms_success_path 为空时只看 HTTP 状态码:
国内网关在响应体里报的失败会被误判成功,生产环境必须按网关文档填上这一项。
说明
清单来自服务端唯一事实来源
每一项的「覆盖的接口前缀」决定「关掉它到底关掉了什么」:服务端按最长前缀优先匹配, 所以
停用与未开通在外面的表现是一样的(菜单消失 + 403 FEATURE_DISABLED),区别在「谁能恢复」: 平台停用在本页把勾选框勾回来即可;企业没开通要去「企业管理」给那家企业勾上模块; 企业开通了却没轮到某个人,由企业管理员在「模块授权」里勾。所以遇到这条 403 时, 先看企业侧的「企业信息 → 我的模块授权」那处自我排查。
本页的写操作都进审计留痕(feature.configure)。
features.describe()(GET /api/platform/features 的 features 字段),
前端不写死任何功能键 —— 写死之后,服务端新增一个模块,这一页就永远看不到它,而且不会有任何报错。每一项的「覆盖的接口前缀」决定「关掉它到底关掉了什么」:服务端按最长前缀优先匹配, 所以
/api/overview/collect 归「测试设备」而不是「总览与综合报表」。
前缀为空的模块只能挡住菜单、挡不住接口 —— 那属于服务端清单的配置问题,这里如实显示,不替它补。停用与未开通在外面的表现是一样的(菜单消失 + 403 FEATURE_DISABLED),区别在「谁能恢复」: 平台停用在本页把勾选框勾回来即可;企业没开通要去「企业管理」给那家企业勾上模块; 企业开通了却没轮到某个人,由企业管理员在「模块授权」里勾。所以遇到这条 403 时, 先看企业侧的「企业信息 → 我的模块授权」那处自我排查。
本页的写操作都进审计留痕(feature.configure)。
菜单配置
菜单的显示名、同级排序、是否在导航里显示;权限与归属仍由代码定义说明与注意
呈现 ≠ 权限。本页能改的只有显示名、排序、是否显示这三样,它们只影响菜单长什么样,
不影响接口权限;菜单键、所需权限、归属、所属功能由代码定义,页面只读展示
(每一行的对应列上都标着「由代码定义」)。隐藏只让导航里少一个入口:
隐藏之后直接调那条接口仍然照常返回。
平台侧菜单
加载中…
企业侧菜单
加载中…
说明
可改的只有显示名、同级排序、是否在导航里显示这三样,它们只影响呈现,不影响接口权限;
菜单键、所需权限、归属、所属功能由代码定义(menus.py),本页只读展示。
这条边界是刻意的:菜单「有哪些、要什么权限」一旦可以改数据就改,
就会出现改一行数据悄悄多出一个入口 —— 而那类问题最难在测试里被发现。
隐藏只让导航里少一个入口:接口的权限判定完全不受影响,隐藏之后直接调那条接口仍然照常返回。 「功能正常、入口没了」因此是一种真实存在的状态,本页的「覆盖状态」列就是用来一眼看出谁被隐藏的。
「恢复默认」删掉的是那条覆盖,不是菜单本身:删掉之后,这条菜单的显示名、排序、 显示状态完全跟随代码定义(改过名字的也会回到代码里的名字)。
写接口里的
本页的写操作都进审计留痕(menu.configure / menu.reset)。 「菜单配置」自身不允许被隐藏 —— 它是所有隐藏操作的撤销入口,藏掉之后就没有界面能把它改回来。
登录页入口(企业注册)不在这张清单里:它的显示与否由平台开关 registration.open 控制, 再叠一层「隐藏」会让同一个入口有两个互相打架的控制器。
隐藏只让导航里少一个入口:接口的权限判定完全不受影响,隐藏之后直接调那条接口仍然照常返回。 「功能正常、入口没了」因此是一种真实存在的状态,本页的「覆盖状态」列就是用来一眼看出谁被隐藏的。
「恢复默认」删掉的是那条覆盖,不是菜单本身:删掉之后,这条菜单的显示名、排序、 显示状态完全跟随代码定义(改过名字的也会回到代码里的名字)。
写接口里的
null 表示「清除这一项的覆盖」,所以把显示名输入框清空再保存 = 回到代码里的名字,
而不是写一个空名字(空名字会变成导航栏上一条看不见的菜单)。本页的写操作都进审计留痕(menu.configure / menu.reset)。 「菜单配置」自身不允许被隐藏 —— 它是所有隐藏操作的撤销入口,藏掉之后就没有界面能把它改回来。
登录页入口(企业注册)不在这张清单里:它的显示与否由平台开关 registration.open 控制, 再叠一层「隐藏」会让同一个入口有两个互相打架的控制器。
页面帮助
每个页面右上角「?」的内容:这一页实现的功能与注意事项说明
内置文案写在代码里(
「恢复默认」是删掉覆盖行,不是写一份和内置一样的内容:后者在代码升级之后 会停在旧文案上,而界面上看起来它是"改过的"。
文案是纯文本渲染的:不要写 Markdown 的
总线开关在下面:关掉之后所有页面的「?」都不显示(内容仍然取得到)。
saas/pagehelp_content.py,随版本升级);
这里改的是覆盖—— 改过的那几页以你写的为准,没改的跟随代码。「恢复默认」是删掉覆盖行,不是写一份和内置一样的内容:后者在代码升级之后 会停在旧文案上,而界面上看起来它是"改过的"。
文案是纯文本渲染的:不要写 Markdown 的
** 或
<b> 这类标签,它们会原样显示给用户(保存时会被直接拦下)。总线开关在下面:关掉之后所有页面的「?」都不显示(内容仍然取得到)。
体检 哪一页还没文案 / 哪一行成了孤儿 / 总开关与菜单注册表一致不一致
页面清单
加载中…
编辑页面帮助
全局参数
平台设全局值,企业可引用或自定义;被锁定的参数企业改不动说明
三层取值:企业自定义 > 全局值(本页设的) > 代码默认值。
「代码默认值」是出厂值:删掉全局行就回到它 —— 与"把全局值改成和默认一样"不同,
前者以后改了代码默认会跟着走,后者永远停在那一刻。
锁定不删企业已经配过的值:解锁之后它自己就回来了,界面上会写明「已保留、暂不生效」。 「多少家企业在自定义」这一列是改全局值前必须看的一眼:改了会同时影响这些企业(被锁定的除外)。
锁定不删企业已经配过的值:解锁之后它自己就回来了,界面上会写明「已保留、暂不生效」。 「多少家企业在自定义」这一列是改全局值前必须看的一眼:改了会同时影响这些企业(被锁定的除外)。
参数清单 /api/platform/params
保存与恢复都是按项的:在每一行右边操作。
做成"整页保存"会把每一行都写成全局行,而其中多数只是没动过的默认值。
加载中…
碳排放因子库
平台公共排放因子;企业引用后才参与它们的碳排核算说明
这里的因子是平台公共的:所有企业都看得到,但企业在自己那一页点「引用」之后才生效——
往公共库里放一条不等于所有企业都在用,所以列表里要同时看「被引用」次数。
类别按「名称」挂,不按类别 id:能源类别是按企业分行的(同一家公司 id=3 与另一家 id=3 是两个不同的类别),全局行没法指向某一家企业的 id —— 引用时系统拿这个名字去落企业自己那个同名类别。
地区与出处必填:电网因子随地区与年份变(华北/华东/南方…), 公共库里必然同时存在多条;而"这个数从哪来"只有出处能回答 —— 没有出处的系数会被当成真值算进碳排报表。
改一条被引用的因子 = 改那些企业的碳排数字:保存与删除都会先告诉你影响了几家企业。
类别按「名称」挂,不按类别 id:能源类别是按企业分行的(同一家公司 id=3 与另一家 id=3 是两个不同的类别),全局行没法指向某一家企业的 id —— 引用时系统拿这个名字去落企业自己那个同名类别。
地区与出处必填:电网因子随地区与年份变(华北/华东/南方…), 公共库里必然同时存在多条;而"这个数从哪来"只有出处能回答 —— 没有出处的系数会被当成真值算进碳排报表。
改一条被引用的因子 = 改那些企业的碳排数字:保存与删除都会先告诉你影响了几家企业。
公共因子 /api/platform/emission/factors
加载中…
新增一条公共因子
分时明细
至少一条;全天一条就填 00:00:00 ~ 24:00:00;时段不得重叠
体检 没人引用 / 缺类别名 / 缺出处 —— 都不报错,只有结论会错
标准值库
全平台对标的限额 / 标杆 / 先进值;企业可用同名条目覆盖说明
三层取值:企业自定义(同名条目) > 本页的平台标准值库。
source 必填 —— 没有出处的限额值比没有值更糟:它会让人相信一个不知道从哪来的结论。 能填的话把出处链接与来源年份版本也填上:标准会换版 (同一句「单位产品综合能耗限额」在 2013 版与 2024 版是两个数), 而"这个数是从哪一版抄来的"只有链接和版本号能回答。
空间编号只能是 0(全企业口径):各企业的空间是各自编的号,平台条目写具体空间等于给某一家写规则。
适用行业留空 = 通用条目(所有行业都参与对标)。填了行业的条目, 只对「参数设置 → 对标行业」选了该行业的企业生效 —— 而通用条目永远参与, 所以只填国标通用限额也能让所有企业判达标。
「企业覆盖数」列是改这个值前必须看的一眼:那些企业用的是自己的值,改平台值不会影响它们。
source 必填 —— 没有出处的限额值比没有值更糟:它会让人相信一个不知道从哪来的结论。 能填的话把出处链接与来源年份版本也填上:标准会换版 (同一句「单位产品综合能耗限额」在 2013 版与 2024 版是两个数), 而"这个数是从哪一版抄来的"只有链接和版本号能回答。
空间编号只能是 0(全企业口径):各企业的空间是各自编的号,平台条目写具体空间等于给某一家写规则。
适用行业留空 = 通用条目(所有行业都参与对标)。填了行业的条目, 只对「参数设置 → 对标行业」选了该行业的企业生效 —— 而通用条目永远参与, 所以只填国标通用限额也能让所有企业判达标。
「企业覆盖数」列是改这个值前必须看的一眼:那些企业用的是自己的值,改平台值不会影响它们。
标准值条目 /api/platform/benchmarks
加载中…
体检 过期 / 顺序反 / 单位不一致 / 行业没人用 —— 都不会报错,只有结论会错
批量导入 从 Excel 复制整片区域粘进来即可(逗号或制表符都认)
说明
① 点「下载导入模板」拿到列名;② 在 Excel 里按列填好(name / metric / source 必填,
数值列留空表示"这个档位没配置");③ 全选复制,粘到下面;
④ 先点「只校验不入库」,确认没有错行,再点「导入」。
两条会被拦下的错:单位与指标不一致(
同名条目会被拒绝:两条同名会让"哪条生效"取决于 id 顺序。
出处三件套也能批量填:
两条会被拦下的错:单位与指标不一致(
tce/万元 填成 tce/t
会让达标判定在两个不可比的量纲之间比大小);数值顺序不对
(必须是 先进值 ≤ 标杆值 ≤ 限额值 —— 能耗越低越好,限额是准入上限、最宽松)。同名条目会被拒绝:两条同名会让"哪条生效"取决于 id 顺序。
出处三件套也能批量填:
industry(适用行业,留空 = 通用)、
source_url(原文链接,要 http(s))、source_version(年份版本)。
录入一整部国标时这三列与数值同等重要 —— 一条条回表单里补录不现实,
而缺了它们,"这个数出自哪一版"两年后就没人答得上来。
新建标准值条目
可留空。给了就必须是 http(s) 地址 ——
写
javascript: 之类的值不会被拦成"更好看",只会 400。从已填过的行业里选,避免手打错字(打错了不会报错,
只会让企业怎么选都比不上)。
三个值至少给一个;给了限额才会有"达标 / 不达标"的结论,
只给标杆/先进值时只比差距、不下达标结论(那是两件事)。
「适用行业」填了之后,只有「参数设置 → 对标行业」选了同一行业的企业会用它对标; 留空的通用条目对所有企业永远参与。
「适用行业」填了之后,只有「参数设置 → 对标行业」选了同一行业的企业会用它对标; 留空的通用条目对所有企业永远参与。
通讯协议
平台公共通讯协议目录;企业「设备管理 → 数据源」的协议下拉就来自这里说明
这里的协议会下发给企业前台选择:企业「设备管理 → 数据源」表单里那个协议下拉
(以及它的候选清单接口
停用只影响新选择:企业下拉里不再出现它、服务端也不再放行新的数据源用它; 已经建好的数据源照常采集,不会因为停用而断。所以停用是安全动作, 列表里「启用」那一列是软删(行还在,enabled 置 0)。
code 是稳定键,一旦被引用不可改:企业侧的
「能选到」不等于「现场就能采到」:真正决定采集的是 边缘采集代理里有没有实现该协议的驱动。代理的协议闸门是它自己的驱动注册表 (
连接参数模板只是给人看的示例:说明这个协议的
/api/devices/protocols),取的是
「本企业协议字典 + 本页启用中的协议」的并集 —— 所以在这里加一条,
企业侧立刻能选到,不需要先给哪家企业补数据。停用只影响新选择:企业下拉里不再出现它、服务端也不再放行新的数据源用它; 已经建好的数据源照常采集,不会因为停用而断。所以停用是安全动作, 列表里「启用」那一列是软删(行还在,enabled 置 0)。
code 是稳定键,一旦被引用不可改:企业侧的
saas_data_sources.protocol 存的就是它。改了等于把那些数据源指向一个
不存在的协议 —— 所以编辑表单里 code 是只读的。要换 key 只能停用旧的、再新建一条。「能选到」不等于「现场就能采到」:真正决定采集的是 边缘采集代理里有没有实现该协议的驱动。代理的协议闸门是它自己的驱动注册表 (
edgeagent/scheduler.py 的 REGISTRY),它不读协议字典表 ——
所以在这里加一条,代理那边如果没有对应驱动,仍然是"选得到、采不到",
现场表现是采集失败并报「协议 xx 还没有驱动」。连接参数模板只是给人看的示例:说明这个协议的
connection
大概长什么样(必须是一个 JSON 对象),服务端不按它校验企业填的连接参数 ——
现场对同一个协议用的键本来就各不相同。
协议清单 /api/platform/protocols
加载中…
新增一条协议
一旦企业引用就不可改:企业侧
saas_data_sources.protocol 存的就是它。
只允许小写字母、数字与连字符(与本仓既有 40 个协议 code 同一种写法)。自由文本,只用于列表筛选;写错不会报错,也不会影响企业侧。
只作提示:给企业看这个协议的
connection 大概长什么样。服务端不按它校验 ——
写坏了会当场报错,写对了也不代表企业照抄就一定通。支付管理
虚拟支付开关、支付通道配置状态、订单统计与「已支付未履约」补履约 读取中…虚拟支付开关 POST /api/platform/payment/virtual
读取中…
读取中…
支付通道 GET /api/platform/payment/status
加载中…
通道配置项(微信 / 支付宝) GET / POST /api/platform/payment/channels 读取中…
读取中…
加载中…
说明:密钥为什么不进数据库、文件放在哪、改完要不要重启
一、密钥为什么不进数据库。库里的值至少会被四条路带走:数据库备份、
「平台设置」页、审计日志、以及任何一次导出。所以商户私钥、APIv3 密钥、
支付宝公钥只允许落在仓库外的受限目录
二、文件在哪。每个密钥格子上都写着它期望的完整路径;留空就用 默认文件名,要换位置就填「文件路径」那一格。本接口只往密钥目录 (及其子目录)里写文件 —— 往别处写等于让一个新建出来的文件带上那个目录的 权限,而它可能是「本机任何用户可读」。
三、改完要不要重启。
四、开关的边界。「启用」只是"允许企业下单时选这个通道"; 配置不完整时打开它也不会让下单成功 —— 下单会明确回一句「尚未配置」 并列出还缺哪几项,不会静默改走别的通道。 虚拟支付不在这里配,它是上面那一个独立开关。
(读取中…)或者环境变量里 ——
这一页的密钥格子填完就写进那个目录下的文件,不会进数据库;
接口也永不回显内容,只回「配没配」与一个指纹
(指纹用来确认"我手里这份和系统里那份是不是同一份",它推不回原文)。
二、文件在哪。每个密钥格子上都写着它期望的完整路径;留空就用 默认文件名,要换位置就填「文件路径」那一格。本接口只往密钥目录 (及其子目录)里写文件 —— 往别处写等于让一个新建出来的文件带上那个目录的 权限,而它可能是「本机任何用户可读」。
三、改完要不要重启。
(读取中…)
四、开关的边界。「启用」只是"允许企业下单时选这个通道"; 配置不完整时打开它也不会让下单成功 —— 下单会明确回一句「尚未配置」 并列出还缺哪几项,不会静默改走别的通道。 虚拟支付不在这里配,它是上面那一个独立开关。
收款 / 订单流水 GET /api/platform/payment/orders 读取中…
加载中…
订单统计与「已支付未履约」 GET /api/platform/payment/orders/unfulfilled
读取中…
加载中…
虚拟完成某一单 测试动作(DEV)
读取中…
退款 POST /api/platform/payment/orders/{order_no}/refund
这个按钮是禁用态,不是"点一下会报错":服务端那条路由
存在但一律回
501 API.NOT_IMPLEMENTED,所以本页不提供任何
看起来能用的退款动作。
读取中…
说明:虚拟支付为什么被当成事故级开关、密钥去哪儿补、退款为什么是 501
一、虚拟支付:打开之后,任何企业下单都会不经任何支付通道
被直接置为已支付并立即履约 —— 订阅真的会变、功能面真的会开,
而且不可逆(已经发出去的档位收不回来)。换句话说,
"虚拟支付开着"这一个比特等于"谁都能白拿任意付费档位"。
所以它的默认值是关、开启必须由平台管理员带确认串操作、开与关都写审计,
而且有一条只读的常驻横幅(就是本页最上面那一条)。
关闭之后,服务端不会擦掉"上一次是谁开的、什么时候开的"—— 本页也不擦:事后仍然答得出这个开关被开过多久、由谁开。
二、密钥放哪儿:商户号、APPID、回调地址这类非敏感项在 「平台设置」里配(或在环境变量里给,环境变量优先 —— 哪几项正被环境变量 压住,通道卡片上会如实标出);私钥、APIv3 密钥一律放仓库外
三、退款:本轮未实现(
四、这一页看不到"全部订单":平台侧本轮只有统计与未履约清单 两条只读出口。要查某一笔订单的完整字段,请到那家企业自己的 「订阅与支付」页(
关闭之后,服务端不会擦掉"上一次是谁开的、什么时候开的"—— 本页也不擦:事后仍然答得出这个开关被开过多久、由谁开。
二、密钥放哪儿:商户号、APPID、回调地址这类非敏感项在 「平台设置」里配(或在环境变量里给,环境变量优先 —— 哪几项正被环境变量 压住,通道卡片上会如实标出);私钥、APIv3 密钥一律放仓库外
D:\project\ECP-SAAS\_secrets\ 或环境变量,接口只回"缺哪一项、该放哪儿",
不回任何密钥值,本页也不显示密钥值。
三、退款:本轮未实现(
refund_supported=false)。
资金原路退回涉及通道侧退款接口、发票与对账、人工审批三件事,
草率实现比没有更危险。需要退款请走通道商户后台人工处理。
四、这一页看不到"全部订单":平台侧本轮只有统计与未履约清单 两条只读出口。要查某一笔订单的完整字段,请到那家企业自己的 「订阅与支付」页(
GET /api/tenant/payment/orders),
或按订单号在企业侧页面上查 —— 平台令牌打企业接口是 403 作用域隔离,
本页不会绕它。
公众号登录
微信公众号网页授权登录:AppID、网页授权域名、回调形态、两个开关与三份密钥 读取中…运行状态 GET /api/platform/wechat-mp/state 读取中…
读取中…
配置项 GET /api/platform/wechat-mp/descriptors 读取中…
读取中…
PC 端扫码要接管公众号的「服务器配置」,会让自动回复与自定义菜单失效。
扫码登录需要这三项一起配好:
不填这三项时扫码不可用,H5 网页授权登录不受任何影响: 微信内网页授权登录(登录页那个「微信登录」按钮)只需要 AppID、AppSecret、 网页授权域名与回调形态,与服务器配置无关。
wechat_mp.server_url(微信公众平台
「设置与开发 → 基本配置 → 服务器配置」里的 URL)、wechat_mp.token、
wechat_mp.aes_key。启用服务器配置之后,微信会把消息与事件推给
这个地址,公众号后台原有的自动回复与自定义菜单同时失效 ——
动手前请先确认这个公众号没在别处承担别的用途(例如正在给客户做客服)。
不填这三项时扫码不可用,H5 网页授权登录不受任何影响: 微信内网页授权登录(登录页那个「微信登录」按钮)只需要 AppID、AppSecret、 网页授权域名与回调形态,与服务器配置无关。
留空 = 这一项不改动(密钥格子尤其:留空是把已有的那一份留着,
不是把它清成空值)。要恢复某一项的默认值,请把默认值原样填进去 ——
服务端只有"写入"这一个动作,密钥也只支持替换。
说明:密钥为什么不进数据库、文件放在哪、改完要不要重启、两个开关的分工
一、密钥为什么不进数据库。库里的值至少会被四条路带走:数据库备份、
「平台设置」页、审计日志、以及任何一次导出。所以 AppSecret、服务器配置 Token、
EncodingAESKey 只允许落在仓库外的受限目录
二、哪个格子会进数据库。每一项的标题后面都标着 「存入平台设置」或「不写数据库」—— 这个标签直接来自服务端字段表里的
三、文件在哪。每个密钥格子上都写着它期望的完整路径;公众号登录的 密钥位置是固定的(不像支付通道那样另有一格「文件路径」),所以改位置只能靠 环境变量
四、改完要不要重启。
五、当前被环境变量压住的项。(读取中…)
六、两个开关的分工。「启用微信公众号登录」是总开关: 关着的时候相关接口一律回「未启用」。而「登录页显示微信登录」只决定 登录页上那个按钮画不画。两者互相独立,所以「先配好、再放入口」是支持的: 配置全部配完、实测通过之后,再打开入口那一项。反过来只打开总开关、 入口那一项关着时,登录页上什么都不会变 —— 这一页会把这两个值以及它们的 合取("登录页入口当前可见")都摆出来,不用去猜。
(读取中…)或者环境变量里 ——
这一页的密钥格子填完就写进那个目录下的文件,不会进数据库;
接口也永不回显内容,只回「配没配」与一个指纹
(指纹用来确认"我手里这份和系统里那份是不是同一份",它推不回原文)。
这一页也没有"显示明文"这个按钮:能显示就说明接口能回,那才是问题。
二、哪个格子会进数据库。每一项的标题后面都标着 「存入平台设置」或「不写数据库」—— 这个标签直接来自服务端字段表里的
stored_in,不是这一页自己判断的。
三、文件在哪。每个密钥格子上都写着它期望的完整路径;公众号登录的 密钥位置是固定的(不像支付通道那样另有一格「文件路径」),所以改位置只能靠 环境变量
(读取中…)。
四、改完要不要重启。
(读取中…)
五、当前被环境变量压住的项。(读取中…)
六、两个开关的分工。「启用微信公众号登录」是总开关: 关着的时候相关接口一律回「未启用」。而「登录页显示微信登录」只决定 登录页上那个按钮画不画。两者互相独立,所以「先配好、再放入口」是支持的: 配置全部配完、实测通过之后,再打开入口那一项。反过来只打开总开关、 入口那一项关着时,登录页上什么都不会变 —— 这一页会把这两个值以及它们的 合取("登录页入口当前可见")都摆出来,不用去猜。
在线更新
看当前版本与可用更新、算一次安装计划、落盘与回滚这一页怎么用 先看清三件事再动手
说明
落盘不等于生效。「安装这个版本」只把文件写到应用的磁盘上,
跑着的进程仍然是旧代码 —— 重启由服务器上的
deploy/linux/selfupdate-apply.sh 完成:它等旧进程退出、
用面板入口重启、然后冒烟三项(健康检查 / 首页 / 企业子域名品牌)。
冒烟不过它会自动回滚并再重启一次。所以装完页面上写的是
「还有一步」,不是「已更新完成」。
装之前先「检查更新」。那一步只算计划、一个字节都不写,
会逐份列出要写哪些文件、跳过哪些、删哪些,以及清单里的 sha256。
计划里出现你没预期的文件时,先别装 —— 那是核对"这次发布到底带上了什么"
的唯一时机。
包必须带签名。包体与索引都按 HMAC-SHA256 校验
(密钥在服务器的
/www/secrets/selfupdate.key,与开发机同一枚);
被改过一个字节的包会在安装之前就被拒,磁盘上不会有任何变化。
索引或包取不到时这一页会如实报错,而不是显示「暂无更新」。
更新包只能改应用目录里的白名单路径(
saas/、
tools/、deploy/、docs/ 与几个顶层文件),
碰不到数据目录、凭据文件与解释器。发布目录本身也不对公网开放:
只有本机能读,包不会被外面下载走。
读取中…
上传补丁文件安装 手上已经有包时走这条,不需要更新源
选一个补丁包(
.tar.gz)上传。「上传并检查」这一步只暂存并校验
(格式 / 签名 / 逐文件 sha256 / 路径白名单),会先给出"要写哪些、删哪些"的计划;
确认之后点「安装已上传的补丁」才真的改写源码。两条取包路径(更新源 / 上传文件)
共用同一套校验与同一条落盘实现。还没有选择文件。原始大小上限 36 MB。
暂存区:读取中…
当前版本与可用更新 这一条走部署时配好的更新源
索引:读取中…
「检查更新」不写任何文件;「安装这个版本」会改写应用源码,
会先要一次确认。
安装计划 「检查更新」或「安装这个版本」之后的结果原样显示
还没有算过计划:点上面的「检查更新」。
最近几次记录 谁、何时、从哪版到哪版、写了哪些文件、备份在哪
读取中…
套餐管理
套餐目录(档位/价格/周期/功能集)、企业订阅与到期评估到期自动降级默认是关闭的:服务端
SAAS_EXPIRY_SCAN_SECONDS=0 时没有任何定时任务会改企业的功能面 ——
不点下面的「跑一轮到期评估」,就不会发生任何自动降级。
宽限期(默认 15 天)结束后企业才会被覆盖成 expired 档,而这一步在 Phase 1 只由
「跑一轮」或平台手工改档触发。这一行会按接口返回的实际取值刷新。套餐目录 saas_plan_catalog
加载中…
档位详情
新增档位 POST /api/platform/plans
tier 只决定"档位下降要不要二次确认"(服务端的档位序:
expired < trial < paid < internal),与价格无关。
★ NULL 与"空清单"是两件相反的事,在库里只差一层引号:
NULL 是"不受限制",空清单是"一个都不开"。standard 档就是 NULL。
改动不会级联回写在用的企业:要改某家的功能集,请走下面的订阅变更。
企业订阅 saas_subscription 的当前有效行
加载中…
改档 POST /api/platform/tenants/{code}/subscription
只列启用的档位(后端 list_plans(active_only=true)):
已停用的档不能用于新开通,但已在用它的企业不受影响。
overwrite 是唯一会缩水的模式:命中缩水闸门时服务端会拒绝,
页面会把"失去哪些模块"逐键列出来,确认后才带 confirm_shrink=true 重发。
"不传"与"传 null"是两件事:前者按周期算,后者是明确不过期
(存量 5 家就是这个形态,到期评估永远跳过它们)。
到期评估 POST /api/platform/subscriptions/run-expiry
幂等:已经处理过的行不会再被处理一次。
说明:这一页做了什么、没做什么
目录改动不级联:改一档的功能集只改目录这一行,不会回写在用的企业 ——
那会是一次没人按过按钮的批量降级。接口会在响应里告诉你"这一档有多少家企业在用",
要改它们必须逐家走下面的订阅变更(那一步才有缩水闸门与逐键审计)。
两种"要确认"是两件事:
幂等:每次变更都带一个页面生成的
企业侧没有写接口:
到期评估的后果分三段:未到期只做提醒(Phase 1 未接投递通道,接口如实回报
本页不做:企业侧的续费、支付、发票(Phase 1 没有这些接口,页面上也不摆一个 点了会报错的按钮);到期提醒的投递通道(同上)。
两种"要确认"是两件事:
API.FEATURE_SHRINK_REQUIRES_CONFIRM
是"这次变更会让你失去 N 个模块"(逐键列出);
API.PLAN_DEGRADE_REQUIRES_CONFIRM 是"档位在下降"(例如 standard → expired)。
两者都要带 confirm_shrink=true 重发,但理由不同,所以界面分开说。
幂等:每次变更都带一个页面生成的
request_id;同一个键重放时服务端
返回既有那一行并标 replayed:true,不会写第二行。并发撞键是 409 而不是 500。
企业侧没有写接口:
POST /api/tenant/subscription 会得到 405 ——
那条路由根本不存在。企业只能看,套餐只能由平台调整。
到期评估的后果分三段:未到期只做提醒(Phase 1 未接投递通道,接口如实回报
sent=false);宽限期内只把订阅行标成 grace,功能一个键都不变;
宽限结束才覆盖成 expired 档,并逐键记录收回的模块。
本页不做:企业侧的续费、支付、发票(Phase 1 没有这些接口,页面上也不摆一个 点了会报错的按钮);到期提醒的投递通道(同上)。
密码安全
修改本平台账号的口令(凭旧口令自助修改,只改自己)修改口令 POST /api/platform/password/change
这一页改的是谁
说明
这一页只改当前登录的这个平台账号:接口只接受
改口令成功后,已经签发的令牌仍然有效(平台令牌 TTL 7200 秒)—— 不会被强制下线。要断掉其它会话,请让该账号的口令被别人重置一次。
成功时的提示里会带上服务端返回的说明,其中包括本机自动化口令文件 是否已同步(同步了,脚本里那份口令跟着换了;没同步,脚本里还是旧口令 —— 那种情况下自动化检查会在下一次登录时报出来,不是静默失败)。
忘记口令时不需要登录:请让另一位平台管理员在「平台账号」页重置 (重置后会下发一次性口令,并在该账号上标记「需改密」)。
old_password 与 new_password 两个字段,
没有"改哪个账号"这个参数 —— 所以它改不到别人,也不需要额外权限
(任何已登录的平台账号都能改自己的口令,与企业端「密码安全」同一条口径)。
改口令成功后,已经签发的令牌仍然有效(平台令牌 TTL 7200 秒)—— 不会被强制下线。要断掉其它会话,请让该账号的口令被别人重置一次。
成功时的提示里会带上服务端返回的说明,其中包括本机自动化口令文件 是否已同步(同步了,脚本里那份口令跟着换了;没同步,脚本里还是旧口令 —— 那种情况下自动化检查会在下一次登录时报出来,不是静默失败)。
忘记口令时不需要登录:请让另一位平台管理员在「平台账号」页重置 (重置后会下发一次性口令,并在该账号上标记「需改密」)。
当前账号:—
审计日志
平台侧操作留痕:谁、什么时候、对谁、做了什么; 可按账号、动作、对象、来源 IP、关键词与时间段筛选,按时间倒序分页操作记录 每页条数见上方;详情列最多显示每行写入时截断的前 1024 字
加载中…
培训手册
系统说明与操作培训;逐章配置企业端是否展示企业端展示 总开关
说明
手册的正文写在代码里(随版本升级、可 review、可 diff),
这一页配的是呈现:标题、企业端是否可见、是否隐藏 ——
与「菜单配置」对菜单的做法完全一致。
两层控制:总开关决定企业侧有没有「使用手册」这个入口 (关掉后菜单消失,且
写给平台运维看的章节(企业开通、平台开关、菜单呈现)默认不对企业展示 —— 不是保密,而是"企业用户看到一堆自己点不到的页面, 只会以为系统坏了或自己没权限"。
两层控制:总开关决定企业侧有没有「使用手册」这个入口 (关掉后菜单消失,且
/api/manual 直接拒绝 ——
只藏按钮不挡接口等于没关);逐章可见性决定企业能看到哪几章。
写给平台运维看的章节(企业开通、平台开关、菜单呈现)默认不对企业展示 —— 不是保密,而是"企业用户看到一堆自己点不到的页面, 只会以为系统坏了或自己没权限"。
章节 逐章配置企业端可见性
加载中…
正文预览 选一章看它到底长什么样
在下面点一章的「预览」。
网页品牌
登录页名称与 logo、控制台顶栏名称、页脚 ICP 与公安备案配置状态 公开接口 / 页脚段数 / 最近更新
站点名称与登录页标题
同时进:浏览器标签、控制台顶栏、登录页的兜底标题。
顶栏高度固定 56px,建议 12 字以内。
留空就跟着上面那个走 —— 改个名不用改两个框。
想去掉副标题就把这里清空(清空与「恢复默认」是两件事)。
logo 登录页与控制台顶栏共用
页脚 · 备案信息 登录页与控制台底部
年份由服务端补(© 今年),不用自己写年份。
点页脚那个备案号会去这里;只接受 http(s) 链接。
预览 按当前表单里的值画一遍
加载中…
体检结果 页脚空不空、备案号像不像、logo 合不合适
点上面的「体检」。
采集器现场包
上传现场部署包、维护版本、控制企业端能不能下载发布状态 企业端总开关 · 存盘目录 · 体积上限
读取中…
企业端总开关在「平台设置」里(企业端可下载采集器部署包);
这里只显示它当前是开还是关,改它请去平台设置。
上传一个新版本 ZIP · 版本号要和包内 VERSION.txt 一致
选好 zip 会自动带上版本号,可以改。
版本清单 读取中…
读取中…
读取中…
企业授权与下载情况 读取中…
读取中…
读取中…
登录页背景
平台默认背景图与素材库;企业可在「企业信息 → 登录页背景」里覆盖配置状态 公开接口 · 当前平台默认 · 三个显示参数
说明
背景按域名生效,与"谁登录"无关:访客打开平台主域名看到的是
这里配的平台默认;打开
<企业代号>.域名 时,如果那家企业
自己选了素材就用企业的,否则回落平台这一套。所以这里改一次,
所有没覆盖的企业门面一起变。
遮罩(dim)不是装饰:背景图铺满整个视口,登录框虽然是不透明白卡片,
但页面底部那两行浅色小字(当前企业、备案信息)直接压在图上。
遮罩越接近 1 越暗,浅色小字在任何一张图上都读得清。选图时请优先选
主体偏暗或大面积留白的横版图,别选明暗对比极强的图。
素材只能上传 JPEG / PNG / WebP。不收 SVG:
它可以内嵌脚本,浏览器把它当图片加载时仍可能执行。
服务端按文件头字节判断真实类型(把
.svg 改名成 .png 也拦得住),
前端在上传前先拦一次,省得白等一次上传。
版权与出处必须如实填写:素材列表里那一段(授权协议 / 出处链接 /
作者 / 署名要求)是给运维与审核看的合规凭据。用外站素材时,
把来源页与授权写清楚;出现"未填写"时页面上会如实标记出来,
不要靠记忆补。
读取中…
当前平台默认 企业没覆盖时,登录页用的就是这一套
登 录
当前没有背景图:登录页用的是代码里的深绿渐变。
读取中…
在素材库里点「预览」看别的图时,这里显示的是那张;
点这个按钮切回来。三个滑杆是实时的,不必先保存。
0 = 不加遮罩,0.95 = 几乎全黑(服务端上限)。
默认 0.45。它的作用是保证压在背景上的浅色小字读得清
(见「?本页说明」)。读一次接口之后,这里的上限与默认值
都会改成服务端下发的那两个数。
单位像素,0 = 不模糊(服务端上限 40)。
模糊时图片会被放大几个像素,否则视口边缘会出现一圈发虚的透明边。
图片按"填满视口"缩放,超出的部分按这里裁掉。
窄屏与宽屏裁的位置不一样,改完记得看下面的预览。
服务端只收这九个值(白名单,不是任意字符串)。
素材库 读取中…
读取中…
带星号的两项是必填:服务端不接受缺版权元数据的素材
(缺了就不许入库),前端在上传前也会先拦一次。其余四项留空会在列表里
显示成「未填写」,不会替你猜。长度上限与服务端一致:名称 128、主题 32、
授权协议 128、出处 512、作者 128、署名 255。
已经放进服务端素材目录(
_audit/_bg/,带 manifest.json)的那批图,
不必一张张手传 —— 用下面这条路批量导入。它是幂等的:
同一个文件导两次只会被算成「重复」,不会多出一行。读取中…
新手指南
企业端「设置 → 新手指南」速查页的正文与开关企业端展示 总开关
说明
这一页的正文可以直接在这里改(Markdown,服务端渲染预览)——
与「培训手册」不同:手册写的是"这个系统怎么用",改了会与产品脱节,
所以正文只在代码里;而这一页是速查表,里面那些
"客户自己的东西"(例行清单是每天还是每班、谁确认告警、找平台走哪条线)
只有客户知道。
代码里那份是默认值:改过的那一块就以库里的为准, 「恢复默认」= 删掉覆盖行(不是写一份等于默认的内容)。 代价要认:改过的正文不再跟随版本升级,体检会把它们列出来。
两层控制:总开关决定企业侧有没有「新手指南」这个入口 (关掉后菜单消失,且 /api/guide 直接拒绝 —— 只藏按钮不挡接口等于没关);逐块可见性 / 隐藏决定企业能看到哪几块。
代码里那份是默认值:改过的那一块就以库里的为准, 「恢复默认」= 删掉覆盖行(不是写一份等于默认的内容)。 代价要认:改过的正文不再跟随版本升级,体检会把它们列出来。
两层控制:总开关决定企业侧有没有「新手指南」这个入口 (关掉后菜单消失,且 /api/guide 直接拒绝 —— 只藏按钮不挡接口等于没关);逐块可见性 / 隐藏决定企业能看到哪几块。
体检结果 哪一块没正文、谁成了孤儿、哪些写法渲染不出来
点上面的「体检」。
块 逐块改写正文或隐藏
加载中…
编辑 在下面点一块的「编辑」
企业注册入口
这条菜单描述的是登录页上的注册入口,不是平台后台的一个功能页当前状态与说明
去登录页填注册表单
注册表单是未登录用户填的,所以要从登录页进;这里给一个直达按钮,
它会退出当前平台会话并打开登录页的注册表单(注册不需要任何令牌)。