2021-10-22 20:00:32 +08:00
|
|
|
|
<!DOCTYPE html>
|
2022-11-20 00:19:56 +08:00
|
|
|
|
<html lang="zh-cmn-Hans">
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
|
|
|
|
|
<head>
|
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
2022-07-16 00:43:41 +08:00
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
2021-10-22 20:00:32 +08:00
|
|
|
|
<title>干燥失重</title>
|
|
|
|
|
|
<link rel="stylesheet" href="./github.css">
|
2021-10-22 20:37:21 +08:00
|
|
|
|
<link rel="stylesheet" href="./theme.css">
|
2021-10-22 20:00:32 +08:00
|
|
|
|
<script src="./decimal.js"></script>
|
|
|
|
|
|
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
2022-11-20 00:19:56 +08:00
|
|
|
|
<script type="module">
|
|
|
|
|
|
import { IO } from './modules/tools.js'
|
|
|
|
|
|
let io = new IO('lod')
|
|
|
|
|
|
let debug = false
|
|
|
|
|
|
let tip = `
|
2022-07-24 01:38:35 +08:00
|
|
|
|
<br>
|
|
|
|
|
|
操作过程:
|
|
|
|
|
|
<br>
|
|
|
|
|
|
空瓶 -> 干燥3小时 -> 冷却称重 -> 干燥1小时 -> 冷却称重(1) -> 加样(2) -> 干燥3小时 -> 冷却称重 -> 干燥1小时 -> 冷却称重(3)
|
|
|
|
|
|
<br>
|
|
|
|
|
|
<br>
|
|
|
|
|
|
记录保存功能使用方法:
|
|
|
|
|
|
<br>
|
|
|
|
|
|
保存:输入样品批号,点击保存,此时第一组及第二组输入框内的数据将被存储。
|
|
|
|
|
|
<br>
|
|
|
|
|
|
恢复:输入或选择样品批号,点击恢复,此时将读取对应数据并自动填入输入框。
|
|
|
|
|
|
<br>
|
|
|
|
|
|
删除:输入或选择样品批号,点击删除,此时将从已存储的数据中删除对应数据。
|
2022-10-28 01:05:59 +08:00
|
|
|
|
`
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
2022-11-20 00:19:56 +08:00
|
|
|
|
let decimal = Decimal.set({
|
2022-10-28 01:05:59 +08:00
|
|
|
|
rounding: Decimal.ROUND_HALF_EVEN,
|
|
|
|
|
|
precision: 12
|
|
|
|
|
|
})
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
2022-10-28 01:05:59 +08:00
|
|
|
|
$(document).ready(() => {
|
2021-10-22 20:00:32 +08:00
|
|
|
|
$(".msgbox").append(tip)
|
2022-11-20 00:19:56 +08:00
|
|
|
|
loadSavedContentsList()
|
2022-07-21 16:26:49 +08:00
|
|
|
|
|
2022-10-28 01:05:59 +08:00
|
|
|
|
// 若有前面页面的传值,则导入传入的值
|
|
|
|
|
|
if (window.location.search.startsWith('?data')) {
|
|
|
|
|
|
let data = getUrlParams('data').replaceAll('%22', '"')
|
|
|
|
|
|
importData(JSON.parse(data))
|
|
|
|
|
|
}
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
2022-10-28 01:05:59 +08:00
|
|
|
|
$("#ok").click(() => {
|
|
|
|
|
|
var m0l = $("#m0l").val()
|
|
|
|
|
|
var m1l = $("#m1l").val()
|
|
|
|
|
|
var m3l = $("#m3l").val()
|
|
|
|
|
|
var m0r = $("#m0r").val()
|
|
|
|
|
|
var m1r = $("#m1r").val()
|
|
|
|
|
|
var m3r = $("#m3r").val()
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var lod1 = lod(m0l, m1l, m3l)
|
|
|
|
|
|
var lod2 = lod(m0r, m1r, m3r)
|
2022-10-28 01:05:59 +08:00
|
|
|
|
var average = decimal.add(lod1, lod2).div(2).toString()
|
|
|
|
|
|
|
|
|
|
|
|
// TODO 可能干燥失重不应该使用 RSD 值来判断是否平行,可尝试使用 RD 或 RAD 判断
|
|
|
|
|
|
// let rsd = RSD(lod1, lod2)
|
|
|
|
|
|
|
2022-11-20 00:19:56 +08:00
|
|
|
|
let format = (value) => {
|
|
|
|
|
|
if (value <= 0) return `<span style="color: red;">${value}</span>`
|
|
|
|
|
|
return value
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-10-28 01:05:59 +08:00
|
|
|
|
var msg = `
|
2022-11-20 00:19:56 +08:00
|
|
|
|
第一组干燥失重 = ${format(lod1)}<br>
|
|
|
|
|
|
第二组干燥失重 = ${format(lod2)}<br>
|
|
|
|
|
|
两组干燥失重平均值 = ${format(average)}<br>
|
2022-10-28 01:05:59 +08:00
|
|
|
|
${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("")
|
|
|
|
|
|
$("#m0l").val("")
|
|
|
|
|
|
$("#m1l").val("")
|
|
|
|
|
|
$("#m3l").val("")
|
|
|
|
|
|
$("#m0r").val("")
|
|
|
|
|
|
$("#m1r").val("")
|
|
|
|
|
|
$("#m3r").val("")
|
|
|
|
|
|
message(tip)
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
$("#new_page").click(() => {
|
|
|
|
|
|
// 将当前页面的数据封装,并通过 URL 参数传递给新页面
|
|
|
|
|
|
let data = JSON.stringify(exportData())
|
|
|
|
|
|
let search = `?data=${data}`.replaceAll('"', '%22')
|
|
|
|
|
|
let url = `${window.location.origin}${window.location.pathname}${search}`
|
|
|
|
|
|
window.open(url, "_blank")
|
|
|
|
|
|
})
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
2022-07-21 23:07:22 +08:00
|
|
|
|
$("#save").click(() => {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let id = $("#lod-name").val()
|
2022-07-21 23:07:22 +08:00
|
|
|
|
if (id.length == 0) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
confirm("请输入或选择样品批号!")
|
|
|
|
|
|
return
|
2022-07-21 23:07:22 +08:00
|
|
|
|
}
|
2022-07-21 16:26:49 +08:00
|
|
|
|
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let lod = exportData()
|
2022-11-20 00:19:56 +08:00
|
|
|
|
io.write(id, JSON.stringify(lod))
|
2022-10-28 01:05:59 +08:00
|
|
|
|
loadSavedContentsList()
|
|
|
|
|
|
})
|
2022-07-21 16:26:49 +08:00
|
|
|
|
|
2022-07-21 23:07:22 +08:00
|
|
|
|
$("#restore").click(() => {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let id = $("#lod-name").val()
|
2022-07-21 23:07:22 +08:00
|
|
|
|
if (id.length == 0) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
confirm("请输入或选择样品批号!")
|
|
|
|
|
|
return
|
2022-07-21 23:07:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-11-20 00:19:56 +08:00
|
|
|
|
let lod = JSON.parse(io.read(id))
|
2022-10-28 01:05:59 +08:00
|
|
|
|
$("#m0l").val(lod.m0l)
|
|
|
|
|
|
$("#m1l").val(lod.m1l)
|
|
|
|
|
|
$("#m3l").val(lod.m3l)
|
|
|
|
|
|
$("#m0r").val(lod.m0r)
|
|
|
|
|
|
$("#m1r").val(lod.m1r)
|
|
|
|
|
|
$("#m3r").val(lod.m3r)
|
|
|
|
|
|
})
|
2022-07-21 16:26:49 +08:00
|
|
|
|
|
2022-07-21 23:07:22 +08:00
|
|
|
|
$("#remove").click(() => {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let id = $("#lod-name").val()
|
2022-07-21 16:26:49 +08:00
|
|
|
|
if (id.length == 0) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
confirm("请输入或选择样品批号!")
|
|
|
|
|
|
return
|
2022-07-21 16:26:49 +08:00
|
|
|
|
}
|
2022-11-22 19:15:22 +08:00
|
|
|
|
if (confirm(`确认删除 ${id} 的数据?`)) {
|
2022-11-20 00:19:56 +08:00
|
|
|
|
io.remove(id)
|
2022-10-28 01:05:59 +08:00
|
|
|
|
loadSavedContentsList()
|
|
|
|
|
|
$("#clear").click()
|
2022-07-21 16:26:49 +08:00
|
|
|
|
}
|
2022-10-28 01:05:59 +08:00
|
|
|
|
})
|
2022-07-21 16:26:49 +08:00
|
|
|
|
|
2021-10-22 20:00:32 +08:00
|
|
|
|
if (debug) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
$("#m0l").val(18.34625)
|
|
|
|
|
|
$("#m1l").val(1.04213)
|
|
|
|
|
|
$("#m3l").val(19.38511)
|
|
|
|
|
|
$("#m0r").val(21.23537)
|
|
|
|
|
|
$("#m1r").val(1.00242)
|
|
|
|
|
|
$("#m3r").val(22.23460)
|
2021-10-22 20:00:32 +08:00
|
|
|
|
}
|
2022-10-28 01:05:59 +08:00
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// 需要传递给新页面的数据
|
|
|
|
|
|
function exportData() {
|
|
|
|
|
|
let data = {
|
2022-11-20 00:19:56 +08:00
|
|
|
|
"time": Date.now(),
|
2022-10-28 01:05:59 +08:00
|
|
|
|
"id": $("#lod-name").val(),
|
|
|
|
|
|
"m0l": $("#m0l").val(),
|
|
|
|
|
|
"m1l": $("#m1l").val(),
|
|
|
|
|
|
"m3l": $("#m3l").val(),
|
|
|
|
|
|
"m0r": $("#m0r").val(),
|
|
|
|
|
|
"m1r": $("#m1r").val(),
|
|
|
|
|
|
"m3r": $("#m3r").val(),
|
|
|
|
|
|
}
|
|
|
|
|
|
return data
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 需要导入哪些
|
|
|
|
|
|
function importData(data) {
|
|
|
|
|
|
// 对批号自增
|
|
|
|
|
|
let id = data.id
|
|
|
|
|
|
if (data.id.indexOf('-')) {
|
|
|
|
|
|
let x = data.id.split('-')
|
|
|
|
|
|
id = x[x.length - 1]
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log(id)
|
|
|
|
|
|
id = decimal.add(id, 1)
|
|
|
|
|
|
if (data.id.indexOf('-')) {
|
|
|
|
|
|
id = data.id.substring(0, data.id.lastIndexOf('-') + 1) + id
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log(id)
|
|
|
|
|
|
|
|
|
|
|
|
$("#lod-name").val(id)
|
|
|
|
|
|
// 暂时不需要自动填充上一个页面传来的数据
|
|
|
|
|
|
// $("#m0l").val(data.m0l)
|
|
|
|
|
|
// $("#m1l").val(data.m1l)
|
|
|
|
|
|
// $("#m3l").val(data.m3l)
|
|
|
|
|
|
// $("#m0r").val(data.m0r)
|
|
|
|
|
|
// $("#m1r").val(data.m1r)
|
|
|
|
|
|
// $("#m3r").val(data.m3r)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 计算相对标准偏差
|
|
|
|
|
|
// Markdown 公式:$RSD = \frac{SD}{\overline{x}}*100\%$
|
|
|
|
|
|
function RSD(...array) {
|
|
|
|
|
|
let stdev = STDEV(...array)
|
|
|
|
|
|
let average = () => {
|
|
|
|
|
|
let sum = new Decimal(0)
|
|
|
|
|
|
array.forEach(value => sum = sum.plus(new Decimal(value)))
|
|
|
|
|
|
return sum.dividedBy(array.length)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let rsd = stdev.dividedBy(average()).times(100)
|
|
|
|
|
|
return rsd.toPrecision(5)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 计算标准偏差
|
|
|
|
|
|
// Markdown 公式:$SD = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \overline{x})^2}{n-1}}$
|
|
|
|
|
|
function STDEV(...array) {
|
|
|
|
|
|
// 计算所有数值的和
|
|
|
|
|
|
var sum = new Decimal(0)
|
|
|
|
|
|
array.forEach(value => sum = sum.plus(new Decimal(value)))
|
|
|
|
|
|
|
|
|
|
|
|
// 计算所有数值的平均值
|
|
|
|
|
|
let average = sum.dividedBy(array.length)
|
|
|
|
|
|
|
|
|
|
|
|
// 计算 ((每个数值减去平均值)的二次方)的和,即公式中分子的结果
|
|
|
|
|
|
var sumEach = new Decimal(0)
|
|
|
|
|
|
array.forEach(value => {
|
|
|
|
|
|
let v = new Decimal(value)
|
|
|
|
|
|
let temp = v.minus(average).toPower(2)
|
|
|
|
|
|
sumEach = sumEach.plus(temp)
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// 以上结果除以 n-1 并开根号即得
|
|
|
|
|
|
let x = sumEach.dividedBy(array.length - 1).squareRoot()
|
|
|
|
|
|
return x
|
|
|
|
|
|
}
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
2022-07-21 16:26:49 +08:00
|
|
|
|
function loadSavedContentsList() {
|
|
|
|
|
|
// load data from localStorage to input.
|
2022-11-22 19:15:22 +08:00
|
|
|
|
$("#keys").empty()
|
2022-11-20 00:19:56 +08:00
|
|
|
|
let keys = io.listKeys().sort()
|
2022-07-21 16:26:49 +08:00
|
|
|
|
keys.forEach(key => {
|
2022-11-20 00:19:56 +08:00
|
|
|
|
let timestamp = JSON.parse(io.read(key)).time
|
2022-10-28 01:05:59 +08:00
|
|
|
|
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)
|
|
|
|
|
|
})
|
2022-07-21 16:26:49 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-21 23:07:22 +08:00
|
|
|
|
// check storage available
|
|
|
|
|
|
function storageAvailable(type) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let storage
|
2022-07-21 23:07:22 +08:00
|
|
|
|
try {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
storage = window[type]
|
|
|
|
|
|
const x = '__storage_test__'
|
|
|
|
|
|
storage.setItem(x, x)
|
|
|
|
|
|
storage.removeItem(x)
|
|
|
|
|
|
return true
|
2022-07-21 23:07:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
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
|
2022-10-28 01:05:59 +08:00
|
|
|
|
(storage && storage.length !== 0)
|
2022-07-21 23:07:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-22 20:00:32 +08:00
|
|
|
|
function message(msg) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
$(".msgbox").empty()
|
|
|
|
|
|
$(".msgbox").append(msg)
|
2021-10-22 20:00:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 计算干燥失重
|
|
|
|
|
|
* @param m0 恒重后空瓶重
|
|
|
|
|
|
* @param m1 样品重
|
|
|
|
|
|
* @param m3 干燥恒重后带样品重
|
|
|
|
|
|
* @return 干燥失重(%)
|
|
|
|
|
|
*/
|
|
|
|
|
|
function lod(m0, m1, m3) {
|
|
|
|
|
|
if (checkNull(m0, m1, m3)) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
return "0"
|
2021-10-22 20:00:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let a = new Decimal(m0)
|
|
|
|
|
|
let b = new Decimal(m1)
|
|
|
|
|
|
let c = new Decimal(m3)
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
|
|
|
|
|
// a + b - c / b
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let d = decimal.add(a, b).minus(c)
|
|
|
|
|
|
let e = d.div(b).mul(100)
|
|
|
|
|
|
return e.toString()
|
2021-10-22 20:00:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function checkNull(m0, m1, m3) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
return m0 == '' || m1 == '' || m3 == ''
|
2021-10-22 20:00:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-08-08 01:24:18 +08:00
|
|
|
|
// 为 Date 创建日期格式化方法
|
|
|
|
|
|
Date.prototype.format = function (fmt) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
let o = {
|
2022-08-08 01:24:18 +08:00
|
|
|
|
"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() //毫秒
|
2022-10-28 01:05:59 +08:00
|
|
|
|
}
|
2022-08-08 01:24:18 +08:00
|
|
|
|
if (/(y+)/.test(fmt)) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length))
|
2022-08-08 01:24:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
for (var k in o) {
|
|
|
|
|
|
if (new RegExp("(" + k + ")").test(fmt)) {
|
2022-10-28 01:05:59 +08:00
|
|
|
|
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
|
2022-08-08 01:24:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2022-10-28 01:05:59 +08:00
|
|
|
|
return fmt
|
2022-08-08 01:24:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-22 20:00:32 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
<body>
|
2022-05-10 23:20:18 +08:00
|
|
|
|
<h3>干燥失重</h3>
|
2022-07-21 16:26:49 +08:00
|
|
|
|
<input type="text" name="lod-name" id="lod-name" list="keys" placeholder="样品批号"><br><br>
|
2021-10-22 20:37:21 +08:00
|
|
|
|
|
2021-10-22 20:00:32 +08:00
|
|
|
|
<div class="one-team">
|
2022-05-10 23:20:18 +08:00
|
|
|
|
第一组<br>
|
2022-07-21 23:07:22 +08:00
|
|
|
|
<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>
|
2021-10-22 20:00:32 +08:00
|
|
|
|
<br>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="two-team">
|
2022-05-10 23:20:18 +08:00
|
|
|
|
第二组<br>
|
2022-07-21 23:07:22 +08:00
|
|
|
|
<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>
|
2021-10-22 20:00:32 +08:00
|
|
|
|
<br>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
2021-10-22 20:37:21 +08:00
|
|
|
|
<div class="buttons">
|
2021-10-22 21:38:48 +08:00
|
|
|
|
<button id="new_page">新开标签页</button>
|
|
|
|
|
|
<button id="clear">清除内容</button>
|
2022-07-24 01:38:35 +08:00
|
|
|
|
<button id="ok">计算</button><br>
|
|
|
|
|
|
|
2022-07-21 23:07:22 +08:00
|
|
|
|
<button id="remove">删除</button>
|
|
|
|
|
|
<button id="restore">恢复</button>
|
|
|
|
|
|
<button id="save">保存</button>
|
2021-10-22 20:37:21 +08:00
|
|
|
|
</div>
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
|
|
|
|
|
<div class="msgbox"></div>
|
2022-07-21 16:26:49 +08:00
|
|
|
|
<datalist id="keys"></datalist>
|
2021-10-22 20:00:32 +08:00
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
|
|
2022-05-10 23:20:18 +08:00
|
|
|
|
</html>
|