+ L414-5KR 相关物质修改提示信息
+ 目录结构调整
This commit is contained in:
281
views/L014-1-impurities.html
Normal file
281
views/L014-1-impurities.html
Normal file
@@ -0,0 +1,281 @@
|
||||
<!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>L014-1 相关物质</title>
|
||||
<link rel="stylesheet" href="../statics/github.css">
|
||||
<link rel="stylesheet" href="../statics/theme.css">
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script type="module">
|
||||
import { Decimal } from "../statics/modules/decimal.mjs"
|
||||
|
||||
let decimal = Decimal.set({
|
||||
rounding: Decimal.ROUND_HALF_EVEN,
|
||||
precision: 12
|
||||
})
|
||||
|
||||
// 舍入模式:四舍六入五成双
|
||||
const ROUNDING = Decimal.ROUND_HALF_EVEN
|
||||
// 计算精度
|
||||
const PRECISION = 3
|
||||
|
||||
// debug 开关
|
||||
const DEBUG = false
|
||||
|
||||
// 2.2-Dimer 最大值
|
||||
const DIMER_MAX = 2.5
|
||||
// 2-乙酰噻吩 最大值
|
||||
const AT_MAX = 1.0
|
||||
// 总杂 最大值
|
||||
const TOTAL_IMPURITIES_MAX = 4
|
||||
// 纯度 最小值
|
||||
const PURTY_MIN = 96
|
||||
|
||||
// 2.2-Dimer 的 RRF
|
||||
const DIMER_RRF = 1.34
|
||||
// 2-乙酰噻吩 的 RRF
|
||||
const AT_RRF = 2.06
|
||||
|
||||
const msg = `
|
||||
<b>相关参数:</b><br>
|
||||
2.2-Dimer 的 RRF: ${DIMER_RRF}<br>
|
||||
2-乙酰噻吩的 RRF: ${AT_RRF}<br>
|
||||
<br>
|
||||
<b>质量标准:</b><br>
|
||||
2.2-Dimer ≤ ${DIMER_MAX}% <br>
|
||||
2-乙酰噻吩 ≤ ${AT_MAX.toFixed(1)}% <br>
|
||||
杂质总量 ≤ ${TOTAL_IMPURITIES_MAX}% <br>
|
||||
纯度 ≥ ${PURTY_MIN}% <br>
|
||||
`
|
||||
|
||||
$(document).ready(() => {
|
||||
if (DEBUG) {
|
||||
$("#one-dimer").val(247427)
|
||||
$("#one-at").val(65863)
|
||||
$("#one-014-1").val(11511879)
|
||||
$("#one-all").val(11888859)
|
||||
|
||||
$("#two-dimer").val(249299)
|
||||
$("#two-at").val(66682)
|
||||
$("#two-014-1").val(11563139)
|
||||
$("#two-all").val(11943432)
|
||||
}
|
||||
|
||||
$("#msgbox").html(msg)
|
||||
|
||||
$("#new_page").click(() => window.open(window.location.href, '_BLANK'))
|
||||
|
||||
$("#clear").click(() => {
|
||||
$("#one-dimer").val("")
|
||||
$("#one-at").val("")
|
||||
$("#one-014-1").val("")
|
||||
$("#one-all").val("")
|
||||
$("#two-dimer").val("")
|
||||
$("#two-at").val("")
|
||||
$("#two-014-1").val("")
|
||||
$("#two-all").val("")
|
||||
$("#msgbox").html(msg)
|
||||
$("#table").hide()
|
||||
})
|
||||
|
||||
$("#ok").click(() => {
|
||||
let one_dimer = $("#one-dimer").val()
|
||||
let two_dimer = $("#two-dimer").val()
|
||||
let one_014_1 = $("#one-014-1").val()
|
||||
let two_014_1 = $("#two-014-1").val()
|
||||
let one_at = $("#one-at").val()
|
||||
let two_at = $("#two-at").val()
|
||||
let one_all = $("#one-all").val()
|
||||
let two_all = $("#two-all").val()
|
||||
|
||||
let one_dimer_ = func_dimer(one_dimer, one_all).toFixed(PRECISION, ROUNDING)
|
||||
let one_at_ = func_at(one_at, one_all).toFixed(PRECISION, ROUNDING)
|
||||
let one_impurities = func_impurities(one_dimer, one_at, one_014_1, one_all).toFixed(PRECISION, ROUNDING)
|
||||
let one_purity = func_purity(one_impurities).toFixed(PRECISION, ROUNDING)
|
||||
|
||||
let two_dimer_ = func_dimer(two_dimer, two_all).toFixed(PRECISION, ROUNDING)
|
||||
let two_at_ = func_at(two_at, two_all).toFixed(PRECISION, ROUNDING)
|
||||
let two_impurities = func_impurities(two_dimer, two_at, two_014_1, two_all).toFixed(PRECISION, ROUNDING)
|
||||
let two_purity = func_purity(two_impurities).toFixed(PRECISION, ROUNDING)
|
||||
|
||||
let average_dimer = averageFixed(average(one_dimer_, two_dimer_))
|
||||
let average_at = averageFixed(average(one_at_, two_at_))
|
||||
let average_impurities = averageFixed(average(one_impurities, two_impurities))
|
||||
let average_purity = averageFixed(average(one_purity, two_purity))
|
||||
|
||||
let data = {
|
||||
"one": {
|
||||
"dimer": format(one_dimer_, DIMER_MAX),
|
||||
"at": format(one_at_, AT_MAX),
|
||||
"impurities": format(one_impurities, TOTAL_IMPURITIES_MAX),
|
||||
"purity": format(one_purity, 100, PURTY_MIN,)
|
||||
},
|
||||
"two": {
|
||||
"dimer": format(two_dimer_, DIMER_MAX),
|
||||
"at": format(two_at_, AT_MAX),
|
||||
"impurities": format(two_impurities, TOTAL_IMPURITIES_MAX),
|
||||
"purity": format(two_purity, 100, PURTY_MIN)
|
||||
},
|
||||
"average": {
|
||||
"dimer": format(average_dimer, DIMER_MAX),
|
||||
"at": format(average_at, AT_MAX),
|
||||
"impurities": format(average_impurities, TOTAL_IMPURITIES_MAX),
|
||||
"purity": format(average_purity, 100, PURTY_MIN)
|
||||
}
|
||||
}
|
||||
|
||||
generateTable(data)
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
function func_dimer(dimer, all) {
|
||||
if (dimer == '' || all == '') return 0
|
||||
// dimer% = [dimer / (all * RRF)] * 100
|
||||
let x = decimal.mul(all, DIMER_RRF)
|
||||
let y = decimal.div(dimer, x)
|
||||
return decimal.mul(y, 100)
|
||||
}
|
||||
|
||||
function func_at(at, all) {
|
||||
if (at == '' || all == '') return 0
|
||||
// at% = [at / (all * RRF)] * 100
|
||||
let x = decimal.mul(all, AT_RRF)
|
||||
let y = decimal.div(at, x)
|
||||
return decimal.mul(y, 100)
|
||||
}
|
||||
|
||||
function func_impurities(dimer, at, l014_1, all) {
|
||||
if (dimer == '' || at == '' || l014_1 == '' || all == '') return 0
|
||||
// x = all - dimer - at - l014_1
|
||||
// y = (x / all) * 100
|
||||
// impurities% = y + dimer% + at%
|
||||
let x = decimal.sub(all, dimer).sub(at).sub(l014_1)
|
||||
let y = decimal.div(x, all).mul(100)
|
||||
let z = decimal.add(y, func_dimer(dimer, all)).add(func_at(at, all))
|
||||
return z
|
||||
}
|
||||
|
||||
function func_purity(total_impurities) {
|
||||
if (total_impurities == '') return 0
|
||||
// purty% = 100 - impurities%
|
||||
return decimal.sub(100, total_impurities)
|
||||
}
|
||||
|
||||
function average(a, b) {
|
||||
return decimal.add(a, b).div(2)
|
||||
}
|
||||
|
||||
function format(value, max, min = 0) {
|
||||
if (value == 0) {
|
||||
return 'ND' // means 'Not Detected'
|
||||
}
|
||||
|
||||
if (value > max || value < min) {
|
||||
return `<span style='color: red;'>${value}</span>`
|
||||
}
|
||||
|
||||
return value
|
||||
}
|
||||
|
||||
// 对平均值进行舍入
|
||||
function averageFixed(value) {
|
||||
// 大于等于 1 时只保留一位小数,否则保留两位
|
||||
return value.toFixed(value >= 1 ? 1 : 2, ROUNDING)
|
||||
}
|
||||
|
||||
function generateTable(data) {
|
||||
$("#table").show()
|
||||
|
||||
$("#Dimer>#one").html(data.one.dimer)
|
||||
$("#2-AT>#one").html(data.one.at)
|
||||
$("#impurities>#one").html(data.one.impurities)
|
||||
$("#purity>#one").html(data.one.purity)
|
||||
|
||||
$("#Dimer>#two").html(data.two.dimer)
|
||||
$("#2-AT>#two").html(data.two.at)
|
||||
$("#impurities>#two").html(data.two.impurities)
|
||||
$("#purity>#two").html(data.two.purity)
|
||||
|
||||
$("#Dimer>#average").html(data.average.dimer)
|
||||
$("#2-AT>#average").html(data.average.at)
|
||||
$("#impurities>#average").html(data.average.impurities)
|
||||
$("#purity>#average").html(data.average.purity)
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h3>L014-1 相关物质</h3>
|
||||
<div class="one">
|
||||
第一组<br>
|
||||
<input type="number" name="one-dimer" id="one-dimer" inputmode="numeric" placeholder="2.2-Dimer 峰面积">
|
||||
<input type="number" name="one-at" id="one-at" inputmode="numeric" placeholder="2-乙酰噻吩峰面积">
|
||||
<input type="number" name="one-014-1" id="one-014-1" inputmode="numeric" placeholder="L014-1 峰面积">
|
||||
<input type="number" name="one-all" id="one-all" inputmode="numeric" placeholder="总峰面积">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<div class="two">
|
||||
第二组<br>
|
||||
<input type="number" name="two-dimer" id="two-dimer" inputmode="numeric" placeholder="2.2-Dimer 峰面积">
|
||||
<input type="number" name="two-at" id="two-at" inputmode="numeric" placeholder="2-乙酰噻吩峰面积">
|
||||
<input type="number" name="two-014-1" id="two-014-1" inputmode="numeric" placeholder="L014-1 峰面积">
|
||||
<input type="number" name="two-all" id="two-all" inputmode="numeric" placeholder="总峰面积">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<div class="buttons">
|
||||
<button id="new_page">新开标签页</button>
|
||||
<button id="clear">清除内容</button>
|
||||
<button id="ok">计算</button>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<table id="table" style="font-size: small; width: 100%; text-align: center; display: none;">
|
||||
<caption>计算结果</caption>
|
||||
<tr>
|
||||
<th scope="col">/</th>
|
||||
<th scope="col">第一组(%)</th>
|
||||
<th scope="col">第二组(%)</th>
|
||||
<th scope="col">平均值(%)</th>
|
||||
</tr>
|
||||
<tr id="Dimer">
|
||||
<th scope="row">2.2-Dimer</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
<tr id="2-AT">
|
||||
<th scope="row">2-乙酰噻吩</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
<tr id="max_impurities">
|
||||
<th scope="row">最大单杂</th>
|
||||
<td id="one">/</td>
|
||||
<td id="two">/</td>
|
||||
<td id="average">/</td>
|
||||
</tr>
|
||||
<tr id="impurities">
|
||||
<th scope="row">杂质总量</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
<tr id="purity">
|
||||
<th scope="row">纯度</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="msgbox"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
286
views/L414-5KR-impurities.html
Normal file
286
views/L414-5KR-impurities.html
Normal file
@@ -0,0 +1,286 @@
|
||||
<!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>L414-5KR 相关物质</title>
|
||||
<link rel="stylesheet" href="../statics/github.css">
|
||||
<link rel="stylesheet" href="../statics/theme.css">
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script type="module">
|
||||
import { Decimal } from "../statics/modules/decimal.mjs"
|
||||
|
||||
// debug 开关
|
||||
const DEBUG = false
|
||||
// 校正因子
|
||||
const F_L414_3 = 0.80
|
||||
const F_L414_5_IM = 1.48
|
||||
// 计算精度
|
||||
const PRECISION = 3
|
||||
// 操规允许的最大值
|
||||
const MAX_L414_3 = 0.3
|
||||
const MAX_L414_5_IM = 1.0
|
||||
const MAX_TOTAL_IMPURITIES = 2.0
|
||||
const MIN_PURITY = 98.0
|
||||
|
||||
let tips_params = `
|
||||
<b>相关参数:</b><br>
|
||||
L414-3 的校正因子: ${F_L414_3.toFixed(2)}<br>
|
||||
L414-5-IM 的校正因子: ${F_L414_5_IM}<br>
|
||||
`
|
||||
|
||||
let tips_standard = `
|
||||
<b>质量标准:</b><br>
|
||||
L414-3 ≤ ${MAX_L414_3}% <br>
|
||||
L414-401 ≤ 0.2% <br>
|
||||
L414-5-IM ≤ ${MAX_L414_5_IM.toFixed(1)}% <br>
|
||||
最大单杂 ≤ 0.50% <br>
|
||||
杂质总量 ≤ ${MAX_TOTAL_IMPURITIES}% <br>
|
||||
纯度 ≥ ${MIN_PURITY}% <br>
|
||||
`
|
||||
|
||||
// 默认的消息提示
|
||||
let tips = `
|
||||
${tips_params}
|
||||
<br>
|
||||
${tips_standard}
|
||||
`
|
||||
|
||||
let decimal = Decimal.set({
|
||||
rounding: Decimal.ROUND_HALF_EVEN,
|
||||
precision: 12
|
||||
})
|
||||
|
||||
$(document).ready(() => {
|
||||
let one_all = $("#one-all")
|
||||
let one_414_3 = $("#one-414-3")
|
||||
let one_414_5_im = $("#one-414-5-im")
|
||||
let one_414_5 = $("#one-414-5")
|
||||
let two_all = $("#two-all")
|
||||
let two_414_3 = $("#two-414-3")
|
||||
let two_414_5_im = $("#two-414-5-im")
|
||||
let two_414_5 = $("#two-414-5")
|
||||
|
||||
if (DEBUG) {
|
||||
one_414_3.val(1762)
|
||||
one_414_5_im.val(2614)
|
||||
one_414_5.val(24001626)
|
||||
one_all.val(24075340)
|
||||
|
||||
two_414_3.val(2175)
|
||||
two_414_5_im.val(3319)
|
||||
two_414_5.val(24320630)
|
||||
two_all.val(24409434)
|
||||
}
|
||||
|
||||
$("#msgbox").html(tips)
|
||||
$("#new_page").click(() => window.open(window.location.href, "_BLANK"))
|
||||
|
||||
$("#clear").click(() => {
|
||||
one_all.val("")
|
||||
two_all.val("")
|
||||
one_414_3.val("")
|
||||
two_414_3.val("")
|
||||
one_414_5_im.val("")
|
||||
two_414_5_im.val("")
|
||||
one_414_5.val("")
|
||||
two_414_5.val("")
|
||||
$("#msgbox").empty()
|
||||
$("#msgbox").html(tips)
|
||||
$("#table").hide()
|
||||
})
|
||||
|
||||
$("#ok").click(() => {
|
||||
let one_414_3_cf = correctionFactor(one_414_3.val(), one_all.val(), F_L414_3)
|
||||
let one_414_5_im_cf = correctionFactor(one_414_5_im.val(), one_all.val(), F_L414_5_IM)
|
||||
|
||||
let two_414_3_cf = correctionFactor(two_414_3.val(), two_all.val(), F_L414_3)
|
||||
let two_414_5_im_cf = correctionFactor(two_414_5_im.val(), two_all.val(), F_L414_5_IM)
|
||||
|
||||
let one_total_impurities = totalImpurities(
|
||||
one_all.val(), one_414_5.val(),
|
||||
one_414_3.val(), one_414_3_cf,
|
||||
one_414_5_im.val(), one_414_5_im_cf
|
||||
)
|
||||
|
||||
let two_total_impurities = totalImpurities(
|
||||
two_all.val(), two_414_5.val(),
|
||||
two_414_3.val(), two_414_3_cf,
|
||||
two_414_5_im.val(), two_414_5_im_cf
|
||||
)
|
||||
|
||||
let one_purity = decimal.sub(100, one_total_impurities).toFixed(PRECISION)
|
||||
let two_purity = decimal.sub(100, two_total_impurities).toFixed(PRECISION)
|
||||
|
||||
let data = {
|
||||
"one": {
|
||||
"L414_3": format(one_414_3_cf, MAX_L414_3),
|
||||
"L414_5_IM": format(one_414_5_im_cf, MAX_L414_5_IM),
|
||||
"impurities": format(one_total_impurities, MAX_TOTAL_IMPURITIES),
|
||||
"purity": format(one_purity, MIN_PURITY, true)
|
||||
},
|
||||
"two": {
|
||||
"L414_3": format(two_414_3_cf, MAX_L414_3),
|
||||
"L414_5_IM": format(two_414_5_im_cf, MAX_L414_5_IM),
|
||||
"impurities": format(two_total_impurities, MAX_TOTAL_IMPURITIES),
|
||||
"purity": format(two_purity, MIN_PURITY, true)
|
||||
},
|
||||
"average": {
|
||||
"L414_3": format(average(one_414_3_cf, two_414_3_cf), MAX_L414_3),
|
||||
"L414_5_IM": format(average(one_414_5_im_cf, two_414_5_im_cf), MAX_L414_5_IM),
|
||||
"impurities": format(average(one_total_impurities, two_total_impurities), MAX_TOTAL_IMPURITIES),
|
||||
"purity": format(average(one_purity, two_purity, 1), MIN_PURITY, true)
|
||||
}
|
||||
}
|
||||
|
||||
$("#table").show()
|
||||
generateTable(data)
|
||||
$("#msgbox").html(`
|
||||
<br>
|
||||
<b>注意:</b><br>
|
||||
结果表格中,标注 / 的仅用于占行,具体结果需查看色谱图峰表。<br>
|
||||
<br>
|
||||
${tips}
|
||||
`)
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* 将结果输出到表格中
|
||||
*/
|
||||
function generateTable(data) {
|
||||
$("#L414-3>#one").html(data.one.L414_3)
|
||||
$("#L414-5-IM>#one").html(data.one.L414_5_IM)
|
||||
$("#impurities>#one").html(data.one.impurities)
|
||||
$("#purity>#one").html(data.one.purity)
|
||||
|
||||
$("#L414-3>#two").html(data.two.L414_3)
|
||||
$("#L414-5-IM>#two").html(data.two.L414_5_IM)
|
||||
$("#impurities>#two").html(data.two.impurities)
|
||||
$("#purity>#two").html(data.two.purity)
|
||||
|
||||
$("#L414-3>#average").html(data.average.L414_3)
|
||||
$("#L414-5-IM>#average").html(data.average.L414_5_IM)
|
||||
$("#impurities>#average").html(data.average.impurities)
|
||||
$("#purity>#average").html(data.average.purity)
|
||||
}
|
||||
|
||||
/**
|
||||
* 代入校正因子进行计算
|
||||
*/
|
||||
function correctionFactor(pa, paa, f) {
|
||||
if (pa == '' || paa == '' || f == '') return 0
|
||||
return decimal.div(pa, paa).mul(f).mul(100).toFixed(PRECISION, Decimal.ROUND_HALF_EVEN)
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算杂质总量
|
||||
*/
|
||||
function totalImpurities(paa, l414_5, l414_3, l414_3_rrf, l414_5_im, l414_5_im_rrf) {
|
||||
if (paa == '' || l414_5 == '' || l414_3 == '' || l414_3_rrf == '' ||
|
||||
l414_5_im == '' || l414_5_im_rrf == '') return 0
|
||||
|
||||
// X = All - (L414-5) - (L414-3) - (L414-5-IM) / All * 100
|
||||
// R = X + (%L414-3) + (%L414-5-IM)
|
||||
let a = decimal.sub(paa, l414_5).sub(l414_3).sub(l414_5_im)
|
||||
let b = decimal.div(a, paa).mul(100)
|
||||
let r = decimal.add(b, l414_3_rrf).add(l414_5_im_rrf)
|
||||
return r.toFixed(PRECISION, Decimal.ROUND_HALF_EVEN)
|
||||
}
|
||||
|
||||
function format(value, max, morethen = false) {
|
||||
let red_value = `<span style='color: red;'>${value}</span>`
|
||||
if (value == 0) return "ND"
|
||||
if (value < 0) return red_value
|
||||
if (!morethen && value >= max) return red_value
|
||||
if (morethen && value <= max) return red_value
|
||||
return `${value}`
|
||||
}
|
||||
|
||||
/**
|
||||
* 求两个数的平均值
|
||||
*/
|
||||
function average(a, b, fd = (PRECISION - 1)) {
|
||||
return decimal.add(a, b).div(2).toFixed(fd)
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h3>L414-5KR 相关物质</h3>
|
||||
<div class="one">
|
||||
第一组<br>
|
||||
<input type="number" name="one-414-3" id="one-414-3" , placeholder="L414-3 峰面积" inputmode="numeric">
|
||||
<input type="number" name="one-414-5-im" id="one-414-5-im" , placeholder="L414-5-IM 峰面积" inputmode="numeric">
|
||||
<input type="number" name="one-414-5" id="one-414-5" , placeholder="L414-5 峰面积" inputmode="numeric">
|
||||
<input type="number" name="one-all" id="one-all" placeholder="总峰面积" inputmode="numeric">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<div class="two">
|
||||
第二组<br>
|
||||
<input type="number" name="two-414-3" id="two-414-3" , placeholder="L414-3 峰面积" inputmode="numeric">
|
||||
<input type="number" name="two-414-5-im" id="two-414-5-im" , placeholder="L414-5-IM 峰面积" inputmode="numeric">
|
||||
<input type="number" name="two-414-5" id="two-414-5" , placeholder="L414-5 峰面积" inputmode="numeric">
|
||||
<input type="number" name="two-all" id="two-all" placeholder="总峰面积" inputmode="numeric">
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<div class="buttons">
|
||||
<button id="new_page">新开标签页</button>
|
||||
<button id="clear">清除内容</button>
|
||||
<button id="ok">计算</button>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
<table id="table" style="font-size: small; width: 100%; text-align: center; display: none;">
|
||||
<caption>计算结果</caption>
|
||||
<tr>
|
||||
<th scope="col">/</th>
|
||||
<th scope="col">第一组(%)</th>
|
||||
<th scope="col">第二组(%)</th>
|
||||
<th scope="col">平均值(%)</th>
|
||||
</tr>
|
||||
<tr id="L414-3">
|
||||
<th scope="row">L414-3</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
<tr id="L414-4">
|
||||
<th scope="row">L414-401</th>
|
||||
<td id="one">/</td>
|
||||
<td id="two">/</td>
|
||||
<td id="average">/</td>
|
||||
</tr>
|
||||
<tr id="L414-5-IM">
|
||||
<th scope="row">L414-5-IM</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
<tr id="purity">
|
||||
<th scope="row">纯度</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
<tr id="max_impurities">
|
||||
<th scope="row">最大单杂</th>
|
||||
<td id="one">/</td>
|
||||
<td id="two">/</td>
|
||||
<td id="average">/</td>
|
||||
</tr>
|
||||
<tr id="impurities">
|
||||
<th scope="row">杂质总量</th>
|
||||
<td id="one"></td>
|
||||
<td id="two"></td>
|
||||
<td id="average"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div id="msgbox"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
127
views/equipment.html
Normal file
127
views/equipment.html
Normal file
@@ -0,0 +1,127 @@
|
||||
<!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="../statics/github.css">
|
||||
<link rel="stylesheet" href="../statics/theme.css">
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script src="./equipment.info.js"></script>
|
||||
<script>
|
||||
$(document).ready(() => {
|
||||
createTable(info)
|
||||
$("#keyword").attr("placeholder", "输入查询关键字(忽略大小写)")
|
||||
$("#search").click(() => {
|
||||
let keyword = $("#keyword").val()
|
||||
if (keyword == "") {
|
||||
createTable(info)
|
||||
return
|
||||
}
|
||||
let temp = []
|
||||
info.filter(value => {
|
||||
if (value.id.toLowerCase().includes(keyword.toLowerCase()) ||
|
||||
value.name.includes(keyword) ||
|
||||
value.where.includes(keyword) ||
|
||||
value.expir.includes(keyword)) {
|
||||
temp.push(value)
|
||||
}
|
||||
})
|
||||
|
||||
createTable(temp)
|
||||
})
|
||||
})
|
||||
|
||||
// 根据data创建表格
|
||||
function createTable(data) {
|
||||
let content = document.getElementById("content")
|
||||
content.innerHTML = ""
|
||||
let table = document.createElement("table")
|
||||
table.setAttribute("style", "font-size: small; width: 100%;")
|
||||
table.setAttribute("class", "pure-table")
|
||||
|
||||
// add header
|
||||
let tr = document.createElement("tr")
|
||||
let th_where = document.createElement("th")
|
||||
let th_name = document.createElement("th")
|
||||
let th_id = document.createElement("th")
|
||||
let th_expir = document.createElement("th")
|
||||
|
||||
th_where.innerText = "位置"
|
||||
th_name.innerText = "名称"
|
||||
th_id.innerText = "编号"
|
||||
th_expir.innerText = "有效期至"
|
||||
tr.appendChild(th_where)
|
||||
tr.appendChild(th_name)
|
||||
tr.appendChild(th_id)
|
||||
tr.appendChild(th_expir)
|
||||
table.appendChild(tr)
|
||||
|
||||
// add contents
|
||||
data.forEach((value) => {
|
||||
let tr = document.createElement("tr")
|
||||
let td_where = document.createElement("td")
|
||||
let td_name = document.createElement("td")
|
||||
let td_id = document.createElement("td")
|
||||
let td_expir = document.createElement("td")
|
||||
|
||||
td_where.innerText = value.where
|
||||
td_name.innerText = value.name
|
||||
td_id.innerText = value.id
|
||||
td_expir.innerHTML = expir(value.expir)
|
||||
|
||||
tr.appendChild(td_where)
|
||||
tr.appendChild(td_name)
|
||||
tr.appendChild(td_id)
|
||||
tr.appendChild(td_expir)
|
||||
table.appendChild(tr)
|
||||
})
|
||||
|
||||
content.appendChild(table)
|
||||
let num = document.createElement("span")
|
||||
num.innerText = `共 ${data.length} 条记录`
|
||||
content.appendChild(num)
|
||||
}
|
||||
|
||||
// 设置日期样式
|
||||
function expir(value) {
|
||||
let date = new Date()
|
||||
let array = value.split(".")
|
||||
date.setFullYear(array[0], array[1] - 1, array[2])
|
||||
|
||||
let day = (date - Date.now()) / 86400000
|
||||
|
||||
if (day <= 0) {
|
||||
return `<span style='color: red;'><s>${value}</s></span>`
|
||||
}
|
||||
|
||||
if (day <= 7) {
|
||||
return `<span style='color: red;'>${value}</span>`
|
||||
}
|
||||
|
||||
if (day <= 30) {
|
||||
return `<span style='color: darkorange;'>${value}</span>`
|
||||
}
|
||||
|
||||
return value
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div style="width: 100%; white-space: nowrap;">
|
||||
<input style="width: 80%;" type="text" id="keyword" placeholder="">
|
||||
<button style="width: 15%;" id="search" type="submit">搜索</button>
|
||||
</div>
|
||||
<div id="content"></div>
|
||||
<p>
|
||||
过期提醒:<br>
|
||||
<span style="color: darkorange;">黄色表示有效期剩余30天</span><br>
|
||||
<span style="color: red;">红色表示有效期剩余7天</span><br>
|
||||
<span style="color: red;"><s>红色加删除线表示已过期</s></span><br>
|
||||
</p>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
377
views/equipment.info.js
Normal file
377
views/equipment.info.js
Normal file
@@ -0,0 +1,377 @@
|
||||
let info = [
|
||||
// 天平室
|
||||
{
|
||||
"where": "天平室",
|
||||
"name": "天平",
|
||||
"id": "CAQ-14-011",
|
||||
"expir": "2023.04.17"
|
||||
},
|
||||
{
|
||||
"where": "天平室",
|
||||
"name": "天平",
|
||||
"id": "CAQ-14-012",
|
||||
"expir": "2023.12.06"
|
||||
},
|
||||
{
|
||||
"where": "天平室",
|
||||
"name": "天平",
|
||||
"id": "CAQ-14-014",
|
||||
"expir": "2023.07.10"
|
||||
},
|
||||
{
|
||||
"where": "天平室",
|
||||
"name": "天平",
|
||||
"id": "CAQ-14-015",
|
||||
"expir": "2023.07.10"
|
||||
},
|
||||
{
|
||||
"where": "分样间",
|
||||
"name": "天平",
|
||||
"id": "CAQ-14-009",
|
||||
"expir": "2023.12.06"
|
||||
},
|
||||
|
||||
// 水分室
|
||||
{
|
||||
"where": "水分室",
|
||||
"name": "水分仪",
|
||||
"id": "CAS-14-005",
|
||||
"expir": "2023.12.06"
|
||||
},
|
||||
{
|
||||
"where": "水分室",
|
||||
"name": "快干水分仪",
|
||||
"id": "CAS-14-006",
|
||||
"expir": "2024.01.08"
|
||||
},
|
||||
{
|
||||
"where": "水分室",
|
||||
"name": "水分仪",
|
||||
"id": "CAS-14-007",
|
||||
"expir": "2023.06.13"
|
||||
},
|
||||
{
|
||||
"where": "水分室",
|
||||
"name": "水分仪",
|
||||
"id": "CAS-14-008",
|
||||
"expir": "2023.07.10"
|
||||
},
|
||||
|
||||
// 高温室
|
||||
{
|
||||
"where": "高温室",
|
||||
"name": "鼓风干燥箱",
|
||||
"id": "CBA-14-001",
|
||||
"expir": "2023.12.11"
|
||||
},
|
||||
{
|
||||
"where": "高温室",
|
||||
"name": "马弗炉",
|
||||
"id": "CBB-14-001",
|
||||
"expir": "2023.12.11"
|
||||
},
|
||||
{
|
||||
"where": "高温室",
|
||||
"name": "马弗炉",
|
||||
"id": "CBB-14-002",
|
||||
"expir": "2023.06.13"
|
||||
},
|
||||
{
|
||||
"where": "高温室",
|
||||
"name": "真空干燥箱",
|
||||
"id": "CBC-14-001",
|
||||
"expir": "2023.12.11"
|
||||
},
|
||||
{
|
||||
"where": "高温室",
|
||||
"name": "真空干燥箱",
|
||||
"id": "CBC-14-002",
|
||||
"expir": "2023.06.13"
|
||||
},
|
||||
{
|
||||
"where": "高温室",
|
||||
"name": "真空干燥箱",
|
||||
"id": "CBC-14-003",
|
||||
"expir": "2023.04.17"
|
||||
},
|
||||
|
||||
// 液相室一
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-006",
|
||||
"expir": "2024.02.14"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-009",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-012",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-013",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-014",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-015",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-016",
|
||||
"expir": "2024.12.11"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-017",
|
||||
"expir": "2024.12.11"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-018",
|
||||
"expir": "2023.07.01"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-023",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-024",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-025",
|
||||
"expir": "2023.07.01"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-034",
|
||||
"expir": "2024.09.21"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-035",
|
||||
"expir": "2024.09.21"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-036",
|
||||
"expir": "2024.09.21"
|
||||
},
|
||||
{
|
||||
"where": "液相室一",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-037",
|
||||
"expir": "2024.09.21"
|
||||
},
|
||||
|
||||
// 液相室二
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-026",
|
||||
"expir": "2024.07.24"
|
||||
},
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-027",
|
||||
"expir": "2024.07.24"
|
||||
},
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-028",
|
||||
"expir": "2024.07.24"
|
||||
},
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-029",
|
||||
"expir": "2024.07.24"
|
||||
},
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-030",
|
||||
"expir": "2023.12.02"
|
||||
},
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-031",
|
||||
"expir": "2023.12.05"
|
||||
},
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-032",
|
||||
"expir": "2023.12.01"
|
||||
},
|
||||
{
|
||||
"where": "液相室二",
|
||||
"name": "液相色谱仪",
|
||||
"id": "CAA-14-033",
|
||||
"expir": "2023.12.01"
|
||||
},
|
||||
|
||||
// 气相室
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-001",
|
||||
"expir": "2024.02.14"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-002",
|
||||
"expir": "2024.12.11"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-004",
|
||||
"expir": "2024.12.11"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-007",
|
||||
"expir": "2024.06.13"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-008",
|
||||
"expir": "2023.06.30"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-009",
|
||||
"expir": "2023.12.01"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-010",
|
||||
"expir": "2023.12.01"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-011",
|
||||
"expir": "2023.12.01"
|
||||
},
|
||||
{
|
||||
"where": "气相室",
|
||||
"name": "气相色谱仪",
|
||||
"id": "CAB-14-012",
|
||||
"expir": "2024.09.22"
|
||||
},
|
||||
|
||||
// 综合仪器室二
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "质谱仪",
|
||||
"id": "DLZ-14-001",
|
||||
"expir": "2023.10.30"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "粒度仪",
|
||||
"id": "CAV-14-001",
|
||||
"expir": "2023.07.24"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "旋光仪",
|
||||
"id": "CAI-14-002",
|
||||
"expir": "2023.12.06"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "电导率仪",
|
||||
"id": "CAH-14-001",
|
||||
"expir": "2023.12.06"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "电导率仪",
|
||||
"id": "CAH-14-002",
|
||||
"expir": "2023.07.10"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "熔点仪",
|
||||
"id": "CAJ-14-002",
|
||||
"expir": "2023.12.11"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "pH 计",
|
||||
"id": "CAD-14-001",
|
||||
"expir": "2023.12.06"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "pH 计",
|
||||
"id": "CAD-14-003",
|
||||
"expir": "2023.10.27"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "红外光谱仪",
|
||||
"id": "CAP-14-002",
|
||||
"expir": "2023.06.13"
|
||||
},
|
||||
{
|
||||
"where": "仪器室二",
|
||||
"name": "衍射仪",
|
||||
"id": "XRD-14-001",
|
||||
"expir": "2024.07.31"
|
||||
},
|
||||
|
||||
// 综合仪器室三
|
||||
{
|
||||
"where": "仪器室三",
|
||||
"name": "电位滴定仪",
|
||||
"id": "DDY-14-002",
|
||||
"expir": "2023.06.13"
|
||||
},
|
||||
{
|
||||
"where": "仪器室三",
|
||||
"name": "紫外光度计",
|
||||
"id": "CAF-14-005",
|
||||
"expir": "2023.07.10"
|
||||
}
|
||||
];
|
||||
193
views/injection-sequence.html
Normal file
193
views/injection-sequence.html
Normal file
@@ -0,0 +1,193 @@
|
||||
<!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="../statics/github.css">
|
||||
<link rel="stylesheet" href="../statics/theme.css">
|
||||
<script src="../statics/modules/dayjs.min.js"></script>
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script type="module">
|
||||
import { Decimal } from "../statics/modules/decimal.mjs"
|
||||
|
||||
const decimal = Decimal.set({
|
||||
rounding: Decimal.ROUND_HALF_EVEN,
|
||||
precision: 12
|
||||
})
|
||||
|
||||
$(document).ready(() => {
|
||||
let tip = `
|
||||
<p>此功能用于计算批处理中每一针样品运行的时间。</p>
|
||||
<p>设置时间偏移量可以将每一针的结束时间提前,用于给查看样品图谱及现配现进等操作预留时间。</p>
|
||||
<p>仪器进样需要一定的时间,该部分时间虽然短,积累起来却不可忽视。<br>
|
||||
此功能以当前运行样品的时间为起点,再向前/向后计算其他针的时间。所以,越远离当前运行的样品,则误差越大。
|
||||
</p>`
|
||||
$("#output").append(tip)
|
||||
|
||||
$("#ok").click(() => {
|
||||
let allId = new Decimal($("#allId").val()).toNumber()
|
||||
let nowId = new Decimal($("#nowId").val()).toNumber()
|
||||
let time = new Decimal($("#time").val()).toNumber()
|
||||
let nowTime = new Decimal($("#nowTime").val()).toNumber()
|
||||
let offset = new Decimal($("#offset").val()).toNumber()
|
||||
let data = []
|
||||
|
||||
// 生成数据
|
||||
let array = genData(allId, nowId, time, nowTime, offset)
|
||||
let formatString = 'YYYY-MM-DD HH:mm'
|
||||
array.forEach((value, index) => {
|
||||
data.push({
|
||||
"id": index + 1,
|
||||
"startTime": value.format(formatString),
|
||||
"endTime": value.add(time, 'minute').format(formatString),
|
||||
"offsetTime": value.add(time - offset, 'minute').format(formatString)
|
||||
})
|
||||
})
|
||||
|
||||
// 未生成数据,不进行结果展示
|
||||
if (data.length == 0) return
|
||||
|
||||
$("#output").empty()
|
||||
$("#output").append(createTable(data))
|
||||
})
|
||||
|
||||
$("#clear").click(() => {
|
||||
$("#allId").val("")
|
||||
$("#nowId").val("")
|
||||
$("#time").val("")
|
||||
$("#nowTime").val("")
|
||||
$("#offset").val("")
|
||||
$("#output").empty()
|
||||
$("#output").append(tip)
|
||||
})
|
||||
|
||||
$("#new_page").click(() => {
|
||||
window.open(window.location.href, "_blank")
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
* 生成数据
|
||||
* @author <a href="mailto:3243430237@qq.com" target="_blank">hbk01</a>
|
||||
* @param {Number} allId 总针数(即需要计算多少条数据)
|
||||
* @param {Number} nowId 当前针数(当前仪器运行到第几针)
|
||||
* @param {Number} time 一针有多少分钟(包括后运行)
|
||||
* @param {Number} nowTime 当前这针已经运行了多少分钟
|
||||
* @param {Number} offset 每一针需偏移多少分钟
|
||||
* @return {Array} dayjs
|
||||
*/
|
||||
function genData(allId, nowId, time, nowTime, offset) {
|
||||
let array = new Array(allId)
|
||||
let now = new dayjs()
|
||||
// 将当前这针的开始时间先设置好
|
||||
array[nowId - 1] = now.subtract(nowTime, 'minute')
|
||||
// 计算当前这针前面的时间
|
||||
for (let index = nowId - 2; index >= 0; index--) {
|
||||
array[index] = array[index + 1].subtract(time, 'minute')
|
||||
}
|
||||
// 计算当前这针后面的时间
|
||||
for (let index = nowId; index < allId; index++) {
|
||||
array[index] = array[index - 1].add(time, 'minute')
|
||||
}
|
||||
return array
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建表格元素并将数据填入其中。
|
||||
*/
|
||||
function createTable(data) {
|
||||
let nowId = new Decimal($("#nowId").val()).toNumber()
|
||||
|
||||
let table = document.createElement("table")
|
||||
table.setAttribute("style", "width: 100%; text-align: center; font-size: smaller;")
|
||||
table.setAttribute("class", "pure-table")
|
||||
|
||||
let row = document.createElement("tr")
|
||||
let lineNum = document.createElement("th")
|
||||
let startTime = document.createElement("th")
|
||||
let endTime = document.createElement("th")
|
||||
let offset = document.createElement("th")
|
||||
lineNum.innerText = "序号"
|
||||
startTime.innerText = "开始时间"
|
||||
endTime.innerText = "结束时间"
|
||||
offset.innerText = "偏移后"
|
||||
row.appendChild(lineNum)
|
||||
row.appendChild(startTime)
|
||||
row.appendChild(endTime)
|
||||
// row.appendChild(offset)
|
||||
table.appendChild(row)
|
||||
let highlight = 'background-color: #ffffcc;'
|
||||
data.forEach(element => {
|
||||
let tr = document.createElement("tr")
|
||||
let td_id = document.createElement("td")
|
||||
let td_start_time = document.createElement("td")
|
||||
let td_end_time = document.createElement("td")
|
||||
let td_offset_time = document.createElement("td")
|
||||
|
||||
td_id.innerText = element.id
|
||||
td_start_time.innerText = element.startTime
|
||||
// td_end_time.innerText = element.endTime
|
||||
td_end_time.innerText = element.offsetTime
|
||||
td_offset_time.innerText = element.offsetTime
|
||||
|
||||
if (element.id == nowId) tr.style = highlight
|
||||
|
||||
tr.appendChild(td_id)
|
||||
tr.appendChild(td_start_time)
|
||||
tr.appendChild(td_end_time)
|
||||
// tr.appendChild(td_offset_time)
|
||||
table.appendChild(tr)
|
||||
})
|
||||
return table
|
||||
}
|
||||
|
||||
// 为 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 (let 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>
|
||||
<div class="input">
|
||||
<div class="inputbox">
|
||||
<input type="number" id="allId" placeholder="批处理中样品的总数" inputmode="decimal" autocomplete="off">
|
||||
<input type="number" id="time" placeholder="每一针的运行时间" inputmode="decimal" autocomplete="off">
|
||||
<input type="number" id="nowId" placeholder="当前运行到第几针" inputmode="decimal" autocomplete="off">
|
||||
<input type="number" id="nowTime" placeholder="现在这针运行多少分钟" inputmode="decimal" autocomplete="off">
|
||||
<input type="number" id="offset" placeholder="时间偏移量" inputmode="decimal" autocomplete="off">
|
||||
</div>
|
||||
<br>
|
||||
<div class="buttons">
|
||||
<button id="new_page">新开标签页</button>
|
||||
<button id="clear">清除内容</button>
|
||||
<button id="ok">计算</button>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
<div id="output"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
302
views/lod.html
Normal file
302
views/lod.html
Normal file
@@ -0,0 +1,302 @@
|
||||
<!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="../statics/github.css">
|
||||
<link rel="stylesheet" href="../statics/theme.css">
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script type="module">
|
||||
import { Decimal } from "../statics/modules/decimal.mjs"
|
||||
import { IO } from "../statics/modules/tools.js"
|
||||
|
||||
let io = new IO('lod')
|
||||
let debug = false
|
||||
let tip = `
|
||||
<br><b>操作过程:</b>
|
||||
<br> 1. 空瓶干燥 3 小时
|
||||
<br> 2. 冷却称重
|
||||
<br> 3. 干燥 1 小时
|
||||
<br> 4. 冷却称重(1) 并加样(2)
|
||||
<br> 5. 干燥 3 小时
|
||||
<br> 6. 冷却称重
|
||||
<br> 7. 干燥 1 小时
|
||||
<br> 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>
|
||||
249
views/roi.html
Normal file
249
views/roi.html
Normal file
@@ -0,0 +1,249 @@
|
||||
<!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="../statics/github.css">
|
||||
<link rel="stylesheet" href="../statics/theme.css">
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script type="module">
|
||||
import { Decimal } from "../statics/modules/decimal.mjs"
|
||||
import { IO } from "../statics/modules/tools.js"
|
||||
|
||||
let io = new IO('roi')
|
||||
let decimal = Decimal.set({
|
||||
rounding: Decimal.ROUND_HALF_EVEN,
|
||||
precision: 12
|
||||
})
|
||||
let debug = false
|
||||
|
||||
let tip = `
|
||||
<br>
|
||||
操作过程:
|
||||
空坩埚 -> 灼烧3小时 -> 冷却称重 -> 灼烧0.5小时 -> 冷却称重(1)
|
||||
-> 加样(2) -> 烧至无烟 -> 灼烧1小时 -> 冷却称重 -> 灼烧0.5小时 -> 冷却称重(3)
|
||||
<br>
|
||||
`
|
||||
|
||||
$(document).ready(() => {
|
||||
$(".msgbox").append(tip)
|
||||
loadSavedContentsList()
|
||||
|
||||
$("#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 = roi(m0l, m1l, m3l)
|
||||
let lod2 = roi(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> 第一组恒重后空坩埚+样 = ${checkNull(m0l, m1l, '0') ? '0' : decimal.add(m0l, m1l).toString()}
|
||||
<br> 第二组恒重后空坩埚+样 = ${checkNull(m0r, m1r, '0') ? '0' : decimal.add(m0r, m1r).toString()}
|
||||
`
|
||||
message(msg)
|
||||
})
|
||||
|
||||
$("#clear").click(() => {
|
||||
if (!window.confirm("所填写的数据将被清空,确定?")) return
|
||||
|
||||
$("#roi-name").val('')
|
||||
$("#m0l").val('')
|
||||
$("#m1l").val('')
|
||||
$("#m3l").val('')
|
||||
$("#m0r").val('')
|
||||
$("#m1r").val('')
|
||||
$("#m3r").val('')
|
||||
message(tip)
|
||||
})
|
||||
|
||||
$("#new_page").click(() => {
|
||||
window.open(window.location.href, "_blank")
|
||||
})
|
||||
|
||||
$("#remove").click(() => {
|
||||
let id = $("#roi-name").val()
|
||||
if (id.length == 0) {
|
||||
confirm("请输入或选择样品批号!")
|
||||
return
|
||||
}
|
||||
if (confirm(`确认删除 ${id} 的数据?`)) {
|
||||
io.remove(id)
|
||||
loadSavedContentsList()
|
||||
$("#clear").click()
|
||||
}
|
||||
})
|
||||
|
||||
$("#restore").click(() => {
|
||||
let id = $("#roi-name").val()
|
||||
if (id.length == 0) {
|
||||
confirm("请输入或选择样品批号!")
|
||||
return
|
||||
}
|
||||
let data = io.read(id)
|
||||
let roi = JSON.parse(data)
|
||||
importData(roi)
|
||||
})
|
||||
|
||||
$("#save").click(() => {
|
||||
let id = $("#roi-name").val()
|
||||
if (id.length == 0) {
|
||||
confirm("请输入或选择样品批号!")
|
||||
return
|
||||
}
|
||||
let data = JSON.stringify(exportData())
|
||||
io.write(id, data)
|
||||
loadSavedContentsList()
|
||||
})
|
||||
|
||||
if (debug) {
|
||||
document.getElementById("m0l").value = 18.34625
|
||||
document.getElementById("m1l").value = 1.04213
|
||||
document.getElementById("m3l").value = 19.38511
|
||||
}
|
||||
})
|
||||
|
||||
function message(msg) {
|
||||
$(".msgbox").empty()
|
||||
$(".msgbox").append(msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算炽灼残渣
|
||||
* @param m0 恒重后空坩埚重
|
||||
* @param m1 样品重
|
||||
* @param m3 干燥恒重后带样品重
|
||||
* @return 炽灼残渣(%)
|
||||
*/
|
||||
function roi(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)
|
||||
|
||||
// m3 - m0 / m1 * 100
|
||||
let d = decimal.sub(c, a)
|
||||
let e = d.div(b).mul(100)
|
||||
return e.toString()
|
||||
}
|
||||
|
||||
function checkNull(m0, m1, m3) {
|
||||
return m0 == '' || m1 == '' || m3 == ''
|
||||
}
|
||||
|
||||
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)).time
|
||||
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)
|
||||
})
|
||||
}
|
||||
|
||||
// 为 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
|
||||
}
|
||||
|
||||
function importData(data) {
|
||||
$("#roi-name").val(data.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 exportData() {
|
||||
let data = {
|
||||
"time": Date.now(),
|
||||
"id": $("#roi-name").val(),
|
||||
"m0l": $("#m0l").val(),
|
||||
"m1l": $("#m1l").val(),
|
||||
"m3l": $("#m3l").val(),
|
||||
"m0r": $("#m0r").val(),
|
||||
"m1r": $("#m1r").val(),
|
||||
"m3r": $("#m3r").val(),
|
||||
}
|
||||
return data
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h3>炽灼残渣</h3>
|
||||
<input type="text" name="roi-name" id="roi-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>
|
||||
|
||||
<button id="remove">删除</button>
|
||||
<button id="restore">恢复</button>
|
||||
<button id="save">保存</button>
|
||||
</div>
|
||||
|
||||
<div class="msgbox"></div>
|
||||
<datalist id="keys"></datalist>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
108
views/titer.html
Normal file
108
views/titer.html
Normal file
@@ -0,0 +1,108 @@
|
||||
<!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="../statics/github.css">
|
||||
<link rel="stylesheet" href="../statics/theme.css">
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||
<script type="module">
|
||||
import { Decimal } from "../statics/modules/decimal.mjs"
|
||||
import { Formula } from "../statics/modules/tools.js"
|
||||
|
||||
let debug = false
|
||||
let tip = `<br>
|
||||
请输入三次 F 值<br>
|
||||
公式:<br>
|
||||
F' = AVERAGE(F1, F2, F3)<br>
|
||||
RDx = [ Fx - F' ] / F' * 100`
|
||||
|
||||
let decimal = Decimal.set({
|
||||
rounding: Decimal.ROUND_HALF_EVEN,
|
||||
precision: 12
|
||||
})
|
||||
|
||||
$(document).ready(() => {
|
||||
message(tip)
|
||||
|
||||
$("#ok").click(() => {
|
||||
let m0 = $("#m0").val()
|
||||
let m1 = $("#m1").val()
|
||||
let m2 = $("#m2").val()
|
||||
let f = Formula.AVERAGE(m0, m1, m2).toFixed(4, Decimal.ROUND_HALF_EVEN)
|
||||
|
||||
let msg = `
|
||||
<br>
|
||||
F值平均值 = ${f}<br>
|
||||
RD1 = ${format(titer(f, m0))}<br>
|
||||
RD2 = ${format(titer(f, m1))}<br>
|
||||
RD3 = ${format(titer(f, m2))}<br>
|
||||
`
|
||||
message(msg)
|
||||
})
|
||||
|
||||
$("#clear").click(() => {
|
||||
$("#m0").val("")
|
||||
$("#m1").val("")
|
||||
$("#m2").val("")
|
||||
message(tip)
|
||||
})
|
||||
|
||||
$("#new_page").click(() => {
|
||||
window.open(window.location.href, "_blank")
|
||||
})
|
||||
|
||||
if (debug) {
|
||||
$("#m0").val(5.1183)
|
||||
$("#m1").val(5.1823)
|
||||
$("#m2").val(5.0926)
|
||||
}
|
||||
})
|
||||
|
||||
function message(msg) {
|
||||
$(".msgbox").empty()
|
||||
$(".msgbox").html(msg)
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算标水
|
||||
* @param f F值,为三次mg/mL值的平均值
|
||||
* @param m 该次mg/mL的值
|
||||
*/
|
||||
function titer(f, m) {
|
||||
let temp = decimal.sub(m, f)
|
||||
return temp.div(f).mul(100).toFixed(2, Decimal.ROUND_HALF_EVEN)
|
||||
}
|
||||
|
||||
function format(value, min = -1, max = 1) {
|
||||
if (value <= min || value >= max) {
|
||||
return `<span style='font-family: none; color: red;'>${value}</span>`
|
||||
}
|
||||
return `<span style='font-family: none;'>${value}</span>`
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h3>标水</h3>
|
||||
<div class="team">
|
||||
<input type="number" id="m0" class="m0" placeholder="F1" inputmode="decimal"><br>
|
||||
<input type="number" id="m1" class="m1" placeholder="F2" inputmode="decimal"><br>
|
||||
<input type="number" id="m2" class="m2" placeholder="F3" inputmode="decimal"><br>
|
||||
</div>
|
||||
<br>
|
||||
<div class="buttons">
|
||||
<button id="new_page">新开标签页</button>
|
||||
<button id="clear">清除内容</button>
|
||||
<button id="ok">计算</button>
|
||||
</div>
|
||||
|
||||
<div class="msgbox"></div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user