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

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 13
赞赏 0
下载 12737050
赞赏 1959
赞赏
京公网安备:11010802035340号