Files
qctool/lod.html
hbk01 ff726aeec8 + L014-1 相关物质取消测试状态
+ L014-1 相关物质使用表格展示结果
+ 干燥失重将读写存储的操作解耦合
+ 干燥失重将保存功能使用方法删除
2023-01-07 00:28:14 +08:00

302 lines
11 KiB
HTML
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.

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>干燥失重</title>
<link rel="stylesheet" href="./github.css">
<link rel="stylesheet" href="./theme.css">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script type="module">
import { Decimal } from './modules/decimal.mjs'
import { IO } from './modules/tools.js'
let io = new IO('lod')
let debug = false
let tip = `
<br><b>操作过程:</b>
<br>&nbsp;&nbsp; 1. 空瓶干燥 3 小时
<br>&nbsp;&nbsp; 2. 冷却称重
<br>&nbsp;&nbsp; 3. 干燥 1 小时
<br>&nbsp;&nbsp; 4. 冷却称重(1) 并加样(2)
<br>&nbsp;&nbsp; 5. 干燥 3 小时
<br>&nbsp;&nbsp; 6. 冷却称重
<br>&nbsp;&nbsp; 7. 干燥 1 小时
<br>&nbsp;&nbsp; 8. 冷却称重(3)
<br>
`
let decimal = Decimal.set({
rounding: Decimal.ROUND_HALF_EVEN,
precision: 12
})
$(document).ready(() => {
$(".msgbox").append(tip)
loadSavedContentsList()
// 若有前面页面的传值,则导入传入的值
if (window.location.search.startsWith('?data')) {
let data = getUrlParams('data').replaceAll('%22', '"')
importData(JSON.parse(data))
}
$("#ok").click(() => {
let m0l = $("#m0l").val()
let m1l = $("#m1l").val()
let m3l = $("#m3l").val()
let m0r = $("#m0r").val()
let m1r = $("#m1r").val()
let m3r = $("#m3r").val()
let lod1 = lod(m0l, m1l, m3l)
let lod2 = lod(m0r, m1r, m3r)
let average = decimal.add(lod1, lod2).div(2).toString()
let format = (value) => {
if (value <= 0) return `<span style="color: red;">${value}</span>`
return value
}
let msg = `<br>
第一组干燥失重 = ${format(lod1)}<br>
第二组干燥失重 = ${format(lod2)}<br>
两组干燥失重平均值 = ${format(average)}<br>
${m0l != '' && m1l != '' ? `第一组恒重后空瓶+样 = ${decimal.add(m0l, m1l).toString()}` : ''}<br>
${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1r).toString()}` : ''}<br>
`
message(msg)
})
$("#clear").click(() => {
if (!window.confirm("所填写的数据将被清空,确定?")) return
$("#lod-name").val("")
clearInput()
})
$("#new_page").click(() => {
// 将当前页面的数据封装,并通过 URL 参数传递给新页面
let data = JSON.stringify(io.collectData($("input")))
let search = `?data=${data}`.replaceAll('"', '%22')
let url = `${window.location.origin}${window.location.pathname}${search}`
window.open(url, "_blank")
})
$("#save").click(() => {
let id = $("#lod-name").val()
if (id.length == 0) {
confirm("请输入或选择样品批号!")
return
}
io.write(id, JSON.stringify(io.collectData($("input"))))
loadSavedContentsList()
})
$("#restore").click(() => {
let id = $("#lod-name").val()
if (id.length == 0) {
confirm("请输入或选择样品批号!")
return
}
let lod = JSON.parse(io.read(id))
io.exportData(lod, $("input"))
})
$("#remove").click(() => {
let id = $("#lod-name").val()
if (id.length == 0) {
confirm("请输入或选择样品批号!")
return
}
if (confirm(`确认删除 ${id} 的数据?`)) {
io.remove(id)
loadSavedContentsList()
$("#lod-name").val("")
clearInput()
}
})
if (debug) {
$("#m0l").val(18.34625)
$("#m1l").val(1.04213)
$("#m3l").val(19.38511)
$("#m0r").val(21.23537)
$("#m1r").val(1.00242)
$("#m3r").val(22.23460)
}
})
function clearInput() {
$("#m0l").val("")
$("#m1l").val("")
$("#m3l").val("")
$("#m0r").val("")
$("#m1r").val("")
$("#m3r").val("")
message(tip)
}
// 需要导入哪些
function importData(data) {
io.exportData(data, $("input"))
clearInput()
// 对批号自增
let id = data.lod_name
if (data.lod_name.indexOf('-')) {
let x = data.lod_name.split('-')
id = x[x.length - 1]
}
id = decimal.add(id, 1)
if (data.lod_name.indexOf('-')) {
id = data.lod_name.substring(0, data.lod_name.lastIndexOf('-') + 1) + id
}
$("#lod-name").val(id)
}
function getUrlParams(key) {
let params = window.location.search.substring(1).split("&")
for (const v of params) {
let pair = v.split("=")
if (pair[0] == key) return pair[1]
}
}
function loadSavedContentsList() {
// load data from localStorage to input.
$("#keys").empty()
let keys = io.listKeys().sort()
keys.forEach(key => {
let timestamp = JSON.parse(io.read(key)).timestamp
let time = new Date(timestamp).format("yyyy-MM-dd hh:mm")
let option = document.createElement("option")
$(option).attr("value", key)
$(option).attr("label", `保存于 ${time}`)
$("#keys").append(option)
})
}
// check storage available
function storageAvailable(type) {
let storage
try {
storage = window[type]
const x = '__storage_test__'
storage.setItem(x, x)
storage.removeItem(x)
return true
}
catch (e) {
return e instanceof DOMException && (
// everything except Firefox
e.code === 22 ||
// Firefox
e.code === 1014 ||
// test name field too, because code might not be present
// everything except Firefox
e.name === 'QuotaExceededError' ||
// Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
// acknowledge QuotaExceededError only if there's something already stored
(storage && storage.length !== 0)
}
}
function message(msg) {
$(".msgbox").empty()
$(".msgbox").append(msg)
}
/**
* 计算干燥失重
* @param m0 恒重后空瓶重
* @param m1 样品重
* @param m3 干燥恒重后带样品重
* @return 干燥失重(%
*/
function lod(m0, m1, m3) {
if (checkNull(m0, m1, m3)) {
return "0"
}
let a = new Decimal(m0)
let b = new Decimal(m1)
let c = new Decimal(m3)
// a + b - c / b
let d = decimal.add(a, b).minus(c)
let e = d.div(b).mul(100)
return e.toString()
}
function checkNull(m0, m1, m3) {
return m0 == '' || m1 == '' || m3 == ''
}
// 为 Date 创建日期格式化方法
Date.prototype.format = function (fmt) {
let o = {
"M+": this.getMonth() + 1, // 月份
"d+": this.getDate(), // 日
"h+": this.getHours(), // 小时
"m+": this.getMinutes(), // 分
"s+": this.getSeconds(), // 秒
"q+": Math.floor((this.getMonth() + 3) / 3),// 季度
"S": this.getMilliseconds() // 毫秒
}
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length))
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
}
}
return fmt
}
</script>
</head>
<body>
<h3>干燥失重</h3>
<input type="text" name="lod-name" id="lod-name" list="keys" placeholder="样品批号"><br><br>
<div class="one-team">
第一组<br>
<input type="number" name="m0l" id="m0l" class="one-input m0" placeholder="恒重后空瓶重(1)" inputmode="decimal"><br>
<input type="number" name="m1l" id="m1l" class="one-input m1" placeholder="样品重(2)" inputmode="decimal"><br>
<input type="number" name="m3l" id="m3l" class="one-input m3" placeholder="干燥恒重后带样品重(3)"
inputmode="decimal"><br>
<br>
</div>
<div class="two-team">
第二组<br>
<input type="number" name="m0r" id="m0r" class="two-input m0" placeholder="恒重后空瓶重(1)" inputmode="decimal"><br>
<input type="number" name="m1r" id="m1r" class="two-input m1" placeholder="样品重(2)" inputmode="decimal"><br>
<input type="number" name="m3r" id="m3r" class="two-input m3" placeholder="干燥恒重后带样品重(3)"
inputmode="decimal"><br>
<br>
</div>
<div class="buttons">
<button id="new_page">新开标签页</button>
<button id="clear">清除内容</button>
<button id="ok">计算</button><br>
<button id="remove">删除</button>
<button id="restore">恢复</button>
<button id="save">保存</button>
</div>
<div class="msgbox"></div>
<datalist id="keys"></datalist>
</body>
</html>