更新记录

1.0.0(2026-11-03)

首个版本:卷长(外径/芯径/厚度反算米数与圈数)、反算外径与有效厚度、卷材与圆线米重、截面线径互转、重量面积体积换算、元每公斤与元每米互转、盘具装载(层数×每层圈数×各层周长,与限重取小)、规格表批量换算与汇总、单位体检、换算表 CSV 导出(带 BOM)。尺寸一律 mm、密度 g/cm³,算例与行业标称值对照过。UTS→Kotlin 编译通过(index.kt 与 classes.dex 已生成),176 项回归测试全部通过;真机未执行(adb devices 为空),市场截图为 H5 渲染并标注示例数据。


平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× √ × × √ × √ × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

卷材米重换算与盘具装载

给做薄膜、胶带、纸张、线缆、管材的人用:不展开、不称重,算出这卷有多少米、每米多重、装得进哪个盘。

一张规格表进去,四样东西出来:米重(kg/m)、卷长(这卷多少米)、重量与面积、盘具能装多少米。

购买前必读

  1. 只支持 Android(minSdkVersion 23,Android 6.0 起)。iOS 与鸿蒙本版本未实现,市场平台声明里已标不支持。
  2. 卷长是按几何算的,不是实测。公式 L = π(D²-d²)/(4t) 的前提是厚度均匀、卷绕紧密同心、无层间空隙。实测一般比算出来的少 3%~10%(卷绕张力、胶层被压实)。要准就用插件提供的厚度校准:量一卷已知米数的,反解出有效厚度,再拿这个厚度去算其他卷。
  3. 不做配方与工艺。它不知道你的胶层涂布量、不建模返工、不算损耗。它只做「米 ↔ 公斤 ↔ 平方米 ↔ 卷径」这几件事之间的换算。
  4. 单位是硬的:长度一律 mm,密度 g/cm³,米重 kg/m。厚度填 0.048(毫米)和填 48(微米)结果差 1000 倍,插件会用单位体检把这种错点出来,但它不替你把微米换算成毫米。
  5. 盘具只算理想排线。层数×每层圈数的矩形排布,实际乱绕会少装 5%~10%,用 fillRate(排线率)往下调。

解决什么问题

采购按吨报价、车间按米领料、客户按平方米下单,三个口径每天都在互相折算,手工按计算器必错:

  • 「这卷膜还有多少米?」 拿卡尺量外径和纸管,公式是 π(D²-d²)/(4t),但 D 和 d 量的是直径不是半径、单位还要统一,一步错就差十倍;
  • 「这一卷有多重,能不能一个人抬?」 米重 = 宽 × 厚 × 密度,系数是除以 1000 还是除以 1e6,凭记忆写的人经常错一位;
  • 「这批线装 1250 的盘能装多少米?」 要先算径向能绕几层、宽度能排几圈、每层周长还不一样,最后还要跟盘的限重比一比——这一步手算几乎没人算对。

与同类的边界

你可能已有的 它做什么 本插件做什么
网页版卷长计算器(CalculatorLib、MAXScanner 等) 一次算一卷,输入三个尺寸出一个米数 一次导入整张规格表,逐行换算 + 汇总总米数总重 + 导出 CSV
roll-calc(GitHub,MIT) 5 个纯几何函数,只解决「卷」 加上线材米重、盘具装载、价格口径、单位体检,是给业务用的而不是给代码用的
线缆厂官网的重量计算器 按 IEC 结构算某个规格的 kg/km 不依赖结构参数,只按截面与密度算;支持批量与盘具,能装进自己的 App 离线用
多级 BOM 展开(本店 szhzy-bom-explode) 一台成品要备多少料 备的料本身有多少米、多重
报价核算(本店 szhzy-quote-cost) 单件成本与报价(工时折成钱) 材料计量换算,不碰工时与利润
装箱分箱(本店 szhzy-carton-pack) 出货要打多少箱 货本身有多少米、多少公斤

网页计算器都免费,但它们都是「打开浏览器、一次算一个、结果抄进 Excel」。本插件解决的是另一段:你自己 App 里的批量换算,仓库管理员拿手机扫一眼就知道这卷还能出多少米。

快速上手

import { calcMaterials, exportItems } from '@/uni_modules/szhzy-material-calc'

const csv = `名称,类型,宽度,厚度,外径,芯径,密度
BOPP胶带,卷,48,0.048,120,76,0.91
PE缠绕膜,卷,500,0.02,260,76,0.92
铝箔,卷,300,0.012,200,76,2.7
BV1.5铜线,线,,,,,8.9`

const r = calcMaterials({ csv })

r.rows[0].lenM        // 141.11     这卷 BOPP 胶带多少米
r.rows[0].kgPerM      // 0.0020966  每米 2.10 克
r.rows[0].unitKg      // 0.2958     单卷重量
r.summary.totalLen    // 总米数
r.summary.totalKg     // 总重
r.warnings            // 单位体检提示
r.csv                 // 换算表 CSV

线材要给截面或线径:

const w = wireGeometry({ section: 1.5, density: 8.9, len: 100 })
w.kgPerM    // 0.01335(= 13.35 kg/km,与行业标称 13.3 对得上)
w.totalKg   // 1.335

规格表列

列 说明
名称 品名 / 料号,缺省用行号
类型 卷 / 线,写 roll / wire 也认;不写就按填了哪些字段推断
宽度 卷材幅宽(mm)
厚度 单层厚度(mm),不是微米
外径 整卷外径(mm)
芯径 纸管 / 管芯外径(mm)
线径 圆线直径(mm),与截面二选一
截面 标称截面(mm²),与线径二选一
密度 g/cm³
长度 米数;填了就直接用,不再按卷径算
数量 同规格几卷,默认 1
单价 元/kg,填了会顺带算出元/m

列名别名:品名 / 物料 / 料号 = 名称,幅宽 / 门幅 = 宽度,膜厚 = 厚度,卷径 = 外径,纸管内径 / 筒径 = 芯径,比重 = 密度,米数 = 长度,卷数 = 数量。列顺序随意,逗号与制表符都认。

口径与公式

卷长(米):

L = π(D² - d²) / (4t)  ÷ 1000

D 外径、d 芯径、t 单层厚度,全部 mm。端面看是一圈环带,展开成「长 × 厚」的长条,两者面积相等即得。

米重(kg/m):

卷材:宽(mm) × 厚(mm) × 密度(g/cm³) ÷ 1000
圆线:截面(mm²) × 密度(g/cm³) ÷ 1000

验证:48mm × 0.048mm × 0.91 = 2.10 g/m;1.5mm² 铜 = 13.35 kg/km。

反算外径(要 3000 米这卷多粗):D = sqrt(d² + 4tL/π)

反算有效厚度(用实测米数校准):t = π(D²-d²)/(4L)

盘具容量:

层数 = floor((盘外径 - 筒径 - 2×边距) / (2×线径))
每层圈数 = floor(盘宽 × 排线率 / 线径)
总长 = 每层圈数 × π × (层数×筒径 + 线径×层数²)

再与限重取小:限重长度 = 限重(kg) ÷ 米重(kg/m)。装得下不等于吊得动,很多单子是重量先到顶。

API

方法 用途
calcMaterials(options) 批量换算:逐行结果 + 汇总 + 体检 + 纯文本 + CSV
itemDetail(options) 单个规格换算(表单页用)
rollGeometry(options) 卷材几何:算米数 / 反算外径 / 反算厚度 / 圈数 / 米重
wireGeometry(options) 线材:截面与线径互转 + 米重
drumPlan(options) 盘具装载:层数、每层圈数、容量、限重
convert(options) 重量 ↔ 长度 ↔ 价格口径(len / weight / priceM / priceKg)
exportItems(options) 导出换算表 CSV
densityPresets() 常用材料密度预设
materialDefaults() 默认值与输出目录

全部返回统一信封 { ok, code, message, ... }。ok=false 时看 code:EMPTY 没给规格表、NO_ITEM 没有可用行、TOO_LARGE 超 500 行、BAD_DENSITY 密度缺失、BAD_UNIT_WEIGHT 米重算不出、NO_LENGTH 既无米数也无卷径、BAD_INPUT 盘具参数不全、READ_FAILED 读文件失败。

提示(warnings)

kind 含义
THICK_LIKE_UM 厚度大于 5mm,像是把微米数当毫米填了
THICK_TOO_THIN 厚度小于 0.003mm,像是把米数当毫米填了
WIDTH_LIKE_M 宽度小于 1mm,像是把米填成了毫米
WIDTH_TOO_WIDE 宽度超过 6 米
BAD_GEOMETRY 外径不大于芯径,算不出长度
OD_TOO_LARGE 外径超过 3 米
DENSITY_LOW / DENSITY_HIGH 密度偏离常见材料范围
HEAVY_ROLL 单卷超过 800kg,人工抬不动
TOO_LONG / TOO_SHORT 单卷超过 20 公里 / 不足 1 米
NO_LENGTH / NO_WIDTH / NO_THICK / NO_SECTION 对应字段缺失

单位体检是这个插件最值钱的部分:厚度 0.05 和 50 看起来都很正常,结果差 1000 倍,而且账面上看不出来。插件不猜,直接把可疑行点出来。

能力边界与已知限制

  • 单次最多 500 个规格,文件上限 12 MB;
  • 卷长按理想卷绕算,不含层间空隙与张力影响(用厚度校准可修正系统性偏差);
  • 盘具按矩形排线算,不做乱绕仿真(用 fillRate 折减);
  • 不读 ERP / BOM,料号与数量请调用方自己带进来;
  • 不做磅差与损耗,称重与账面差多少要自己在业务层处理。

验证状态

  • 纯逻辑回归测试:176 项全部通过(dev-tools-uts/verify/material-calc/run-tests.mjs),覆盖卷长公式与三个反算方向(互相回代验证)、卷材与圆线米重(与行业标称值对照)、截面线径互转、盘具容量与限重两条约束、规格表解析(表头 / 无表头 / 别名 / 坏行)、批量汇总、单位体检;
  • Kotlin 编译:cli launch app-android --compile true 输出「编译成功」,index.kt 与 classes.dex 已生成(过了 Kotlin 类型检查,不是只做转写);
  • 真机:未执行。开发机 adb devices 为空,平台层文件读写未在真机上跑过。市场截图来自 H5 渲染,页面标注「示例数据」,不是真机截图。
  • iOS / 鸿蒙:未实现。

授权

普通授权与源码授权两档,源码版含 utssdk/ 全部实现与演示工程。商用请遵守 license.md。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无系统权限。读取调用方用系统文件选择器交过来的文件(路径或 content:// 授权),写出走应用外部私有目录。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集、不上传任何数据,不访问网络,不写日志。规格表只在本机内存中解析与计算;换算结果由调用方决定是否落盘,默认写应用外部私有目录。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。