+ 炽灼残渣新增保存功能

+ 格式化代码
This commit is contained in:
2022-11-20 00:19:56 +08:00
parent 0cff88322b
commit c120bf3fdd
9 changed files with 481 additions and 398 deletions

View File

@@ -5,18 +5,20 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <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"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>L014-1 相关物质计算</title> <title>L014-1 相关物质</title>
<link rel="stylesheet" href="./github.css"> <link rel="stylesheet" href="./github.css">
<link rel="stylesheet" href="./theme.css"> <link rel="stylesheet" href="./theme.css">
<script src="./decimal.js"></script> <script src="./decimal.js"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> <script>
var decimal = Decimal.set({ let decimal = Decimal.set({
rounding: Decimal.ROUND_HALF_EVEN, rounding: Decimal.ROUND_HALF_EVEN,
precision: 12 precision: 12
}) })
$(document).ready(() => { $(document).ready(() => {
const DEBUG = false
// 2.2-Dimer 最大值 // 2.2-Dimer 最大值
const DIMER_MAX = 2.5 const DIMER_MAX = 2.5
// 2-乙酰噻吩 最大值 // 2-乙酰噻吩 最大值
@@ -32,30 +34,40 @@
const AT_RRF = 2.06 const AT_RRF = 2.06
// 计算精度 // 计算精度
var PRECISION = new Decimal(12).toNumber() let PRECISION = new Decimal(3).toNumber()
var clear_list = [ if (DEBUG) {
$("#one-dimer"), $("#one-dimer").val(247427)
$("#one-at"), $("#one-at").val(65863)
$("#one-014-1"), $("#one-014-1").val(11511879)
$("#one-all"), $("#one-all").val(11888859)
$("#two-dimer"),
$("#two-at"), $("#two-dimer").val(249299)
$("#two-014-1"), $("#two-at").val(66682)
$("#two-all"), $("#two-014-1").val(11563139)
$("#msgbox") $("#two-all").val(11943432)
] }
$("#precision").on('input', event => { $("#precision").on('input', event => {
let p = $("#precision").val() let p = $("#precision").val()
$("#precision-text").text(p) $("#precision-text").text(p)
PRECISION = new Decimal(p).toNumber() PRECISION = new Decimal(p).toNumber()
}) })
$("#new_page").click(() => window.open(window.location.href, '_BLANK')) $("#new_page").click(() => window.open(window.location.href, '_BLANK'))
$("#clear").click(() => clear_list.forEach(v => {
v.val("") $("#clear").click(() => {
v.empty() $("#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").empty()
})
$("#ok").click(() => { $("#ok").click(() => {
let one_dimer = $("#one-dimer").val() let one_dimer = $("#one-dimer").val()
let one_at = $("#one-at").val() let one_at = $("#one-at").val()
@@ -124,13 +136,14 @@
return decimal.mul(y, 100).toFixed(PRECISION, Decimal.ROUND_HALF_EVEN) return decimal.mul(y, 100).toFixed(PRECISION, Decimal.ROUND_HALF_EVEN)
} }
// TODO: 解决总杂计算不准的问题
let func_impurities = (dimer, at, l014_1, all) => { let func_impurities = (dimer, at, l014_1, all) => {
if (dimer == '' || at == '' || l014_1 == '' || all == '') return 0 if (dimer == '' || at == '' || l014_1 == '' || all == '') return 0
// x = all - dimer - at - l014_1 // x = all - dimer - at - l014_1
// y = (x / all) * 100 // y = (x / all) * 100
// impurities% = y + dimer% + at% // impurities% = y + dimer% + at%
let x = decimal.sub(all, dimer).sub(at).sub(l014_1) let x = decimal.sub(all, dimer).sub(at).sub(l014_1)
let y = decimal.div(x, all).mul(100) let y = decimal.div(x, all).mul(100).toFixed(PRECISION)
let z = decimal.add(y, func_dimer(dimer, all)).add(func_at(at, all)) let z = decimal.add(y, func_dimer(dimer, all)).add(func_at(at, all))
return z.toFixed(PRECISION, Decimal.ROUND_HALF_EVEN) return z.toFixed(PRECISION, Decimal.ROUND_HALF_EVEN)
} }
@@ -156,12 +169,12 @@
</head> </head>
<body> <body>
<h3>L014-1 相关物质计算</h3> <h3>L014-1 相关物质</h3>
<strong>* 此功能未经详细测试,计算结果仅供参考。</strong> <strong>* 此功能未经详细测试,计算结果仅供参考。</strong>
<br><br> <br><br>
<label for="precision">计算精度:</label><span id="precision-text">12</span> <label for="precision">计算精度:</label><span id="precision-text">3</span>
<input type="range" id="precision" value="12" min="0" max="12"> <input type="range" id="precision" value="3" min="0" max="12">
<div class="one"> <div class="one">
第一组<br> 第一组<br>
<input type="number" name="one-dimer" id="one-dimer" inputmode="numeric" placeholder="2.2-Dimer 峰面积"> <input type="number" name="one-dimer" id="one-dimer" inputmode="numeric" placeholder="2.2-Dimer 峰面积">

View File

@@ -11,27 +11,27 @@
<script src="./decimal.js"></script> <script src="./decimal.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> <script>
var debug = false let debug = false
// 校正因子 // 校正因子
var F_L414_3 = new Decimal(0.80) let F_L414_3 = new Decimal(0.80)
var F_L414_5_IM = new Decimal(1.48) let F_L414_5_IM = new Decimal(1.48)
// 计算精度 // 计算精度
var PRECISION = 3 let PRECISION = 3
// 操规允许的最大值 // 操规允许的最大值
var MAX_L414_3 = 0.3 let MAX_L414_3 = 0.3
var MAX_L414_5_IM = 1.0 let MAX_L414_5_IM = 1.0
var MAX_TOTAL_IMPURITIES = 2.0 let MAX_TOTAL_IMPURITIES = 2.0
var MIN_PURITY = 98.0 let MIN_PURITY = 98.0
// 默认的消息提示 // 默认的消息提示
var tips = `计算 L414-3、L414-5-IM、杂质总量、纯度` let tips = `计算 L414-3、L414-5-IM、杂质总量、纯度`
var decimal = Decimal.set({ let decimal = Decimal.set({
rounding: Decimal.ROUND_HALF_EVEN, rounding: Decimal.ROUND_HALF_EVEN,
precision: 12 precision: 12
}); })
$(document).ready(() => { $(document).ready(() => {
let one_all = $("#one-all") let one_all = $("#one-all")
@@ -55,9 +55,9 @@
two_all.val(24409434) two_all.val(24409434)
} }
setCheckInputEvent()
$("#msgbox").html(tips) $("#msgbox").html(tips)
$("#new_page").click(() => window.open(window.location.href, "_BLANK")) $("#new_page").click(() => window.open(window.location.href, "_BLANK"))
$("#clear").click(() => { $("#clear").click(() => {
one_all.val("") one_all.val("")
two_all.val("") two_all.val("")
@@ -71,6 +71,7 @@
$("#msgbox").html(tips) $("#msgbox").html(tips)
$("#table").hide() $("#table").hide()
}) })
$("#ok").click(() => { $("#ok").click(() => {
let one_414_3_cf = correctionFactor(one_414_3.val(), one_all.val(), F_L414_3) 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 one_414_5_im_cf = correctionFactor(one_414_5_im.val(), one_all.val(), F_L414_5_IM)
@@ -148,20 +149,6 @@
$("#purity>#average").html(data.average.purity) $("#purity>#average").html(data.average.purity)
} }
function setCheckInputEvent() {
let checkInput = (event) => {
event.target.value = event.target.value.replace(/[\D]/g, '')
}
$("#one-all").on("input", checkInput)
$("#one-414-3").on("input", checkInput)
$("#one-414-5-im").on("input", checkInput)
$("#one-414-5").on("input", checkInput)
$("#two-all").on("input", checkInput)
$("#two-414-3").on("input", checkInput)
$("#two-414-5-im").on("input", checkInput)
$("#two-414-5").on("input", checkInput)
}
/** /**
* 代入校正因子进行计算 * 代入校正因子进行计算
*/ */

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-cmn-Hans">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
@@ -11,101 +11,101 @@
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="./equipment.info.js"></script> <script src="./equipment.info.js"></script>
<script> <script>
$(document).ready(function () { $(document).ready(() => {
createTable(info); createTable(info)
$("#keyword").attr("placeholder", "输入查询关键字(忽略大小写)"); $("#keyword").attr("placeholder", "输入查询关键字(忽略大小写)")
$("#search").click(() => { $("#search").click(() => {
var keyword = $("#keyword").val(); let keyword = $("#keyword").val()
if (keyword == "") { if (keyword == "") {
createTable(info); createTable(info)
return; return
} }
var temp = []; let temp = []
info.filter(value => { info.filter(value => {
if (value.id.toLowerCase().includes(keyword.toLowerCase()) || if (value.id.toLowerCase().includes(keyword.toLowerCase()) ||
value.name.includes(keyword) || value.name.includes(keyword) ||
value.where.includes(keyword) || value.where.includes(keyword) ||
value.expir.includes(keyword)) { value.expir.includes(keyword)) {
temp.push(value); temp.push(value)
} }
}); })
createTable(temp); createTable(temp)
}); })
}); })
// 根据data创建表格 // 根据data创建表格
function createTable(data) { function createTable(data) {
var content = document.getElementById("content"); let content = document.getElementById("content")
content.innerHTML = ""; content.innerHTML = ""
var table = document.createElement("table"); let table = document.createElement("table")
table.setAttribute("style", "font-size: small; width: 100%;"); table.setAttribute("style", "font-size: small; width: 100%;")
table.setAttribute("class", "pure-table"); table.setAttribute("class", "pure-table")
// add header // add header
var tr = document.createElement("tr"); let tr = document.createElement("tr")
var th_where = document.createElement("th"); let th_where = document.createElement("th")
var th_name = document.createElement("th"); let th_name = document.createElement("th")
var th_id = document.createElement("th"); let th_id = document.createElement("th")
var th_expir = document.createElement("th"); let th_expir = document.createElement("th")
th_where.innerText = "位置"; th_where.innerText = "位置"
th_name.innerText = "名称"; th_name.innerText = "名称"
th_id.innerText = "编号"; th_id.innerText = "编号"
th_expir.innerText = "有效期至"; th_expir.innerText = "有效期至"
tr.appendChild(th_where); tr.appendChild(th_where)
tr.appendChild(th_name); tr.appendChild(th_name)
tr.appendChild(th_id); tr.appendChild(th_id)
tr.appendChild(th_expir); tr.appendChild(th_expir)
table.appendChild(tr); table.appendChild(tr)
// add contents // add contents
data.forEach(function (value) { data.forEach((value) => {
var tr = document.createElement("tr"); let tr = document.createElement("tr")
var td_where = document.createElement("td"); let td_where = document.createElement("td")
var td_name = document.createElement("td"); let td_name = document.createElement("td")
var td_id = document.createElement("td"); let td_id = document.createElement("td")
var td_expir = document.createElement("td"); let td_expir = document.createElement("td")
td_where.innerText = value.where; td_where.innerText = value.where
td_name.innerText = value.name; td_name.innerText = value.name
td_id.innerText = value.id; td_id.innerText = value.id
td_expir.innerHTML = expir(value.expir); td_expir.innerHTML = expir(value.expir)
tr.appendChild(td_where); tr.appendChild(td_where)
tr.appendChild(td_name); tr.appendChild(td_name)
tr.appendChild(td_id); tr.appendChild(td_id)
tr.appendChild(td_expir); tr.appendChild(td_expir)
table.appendChild(tr); table.appendChild(tr)
}); })
content.appendChild(table); content.appendChild(table)
let num = document.createElement("span"); let num = document.createElement("span")
num.innerText = "共 " + data.length + " 条记录"; num.innerText = `${data.length} 条记录`
content.appendChild(num); content.appendChild(num)
} }
// 设置日期样式 // 设置日期样式
function expir(value) { function expir(value) {
var date = new Date(); let date = new Date()
var array = value.split("."); let array = value.split(".")
date.setFullYear(array[0], array[1] - 1, array[2]); date.setFullYear(array[0], array[1] - 1, array[2])
var day = (date - Date.now()) / 86400000; let day = (date - Date.now()) / 86400000
if (day <= 0) { if (day <= 0) {
return "<span style='color: red;'><s>" + value + "</s></span><br>" + day + "天"; return `<span style='color: red;'><s>${value}</s></span>`
} }
if (day <= 7) { if (day <= 7) {
return "<span style='color: red;'>" + value + "</span><br>" + day + "天"; return `<span style='color: red;'>${value}</span>`
} }
if (day <= 30) { if (day <= 30) {
return "<span style='color: darkorange;'>" + value + "</span><br>" + day + "天"; return `<span style='color: darkorange;'>${value}</span>`
} }
return value; return value
} }
</script> </script>
</head> </head>

View File

@@ -8,7 +8,8 @@
<link rel="stylesheet" href="./theme.css"> <link rel="stylesheet" href="./theme.css">
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> <script>
let url = "https://api.github.com/repos/hbk01/hbk01.github.io/commits?per_page=10"; let page = 10
let url = `https://api.github.com/repos/hbk01/hbk01.github.io/commits?per_page=${page}`
let functions = [ let functions = [
{ {
@@ -32,22 +33,22 @@
"location": "./equipment.html" "location": "./equipment.html"
}, },
{ {
"name": "L414-5KR 相关物质计算", "name": "L414-5KR 相关物质",
"location": "./L414-5KR-impurities.html" "location": "./L414-5KR-impurities.html"
}, },
{ {
"name": "L014-1 相关物质计算", "name": "L014-1 相关物质",
"location": "./L014-1-impurities.html" "location": "./L014-1-impurities.html"
} }
]; ]
$(document).ready(() => { $(document).ready(() => {
// var getRandomColor = () => '#' + (Math.random() * 0xffffff << 0).toString(16) // var getRandomColor = () => '#' + (Math.random() * 0xffffff << 0).toString(16)
// 加载功能列表 // 加载功能列表
functions.forEach(value => { functions.forEach(value => {
let div = `<div class="item" onclick="window.location.href='${value.location}'">${value.name}</div>`; let div = `<div class="item" onclick="window.location.href='${value.location}'">${value.name}</div>`
$(".list").append(div); $(".list").append(div)
}); })
// 加载最近的 commit 记录 // 加载最近的 commit 记录
$.getJSON(url, data => { $.getJSON(url, data => {
@@ -55,34 +56,35 @@
let color2 = '#f3f3f3' let color2 = '#f3f3f3'
let changeColor = false let changeColor = false
data.forEach(element => { data.forEach(element => {
let hash = element.sha.slice(0, 7)
let verified = element.commit.verification.verified
let html_url = element.html_url
// 处理换行和+号 // 处理换行和+号
let message = element.commit.message.replaceAll("\n", "<br>"); let message = element.commit.message.replaceAll("\n", "<br>")
if (message.startsWith("+")) { if (message.startsWith("+")) {
message = message.replace("+", "<br>&nbsp;&nbsp;<strong>&bull;</strong>"); message = message.replace("+", "<br>&nbsp;&nbsp;<strong>&bull;</strong>")
} }
message = message.replaceAll("+", "&nbsp;&nbsp;<strong>&bull;</strong>") message = message.replaceAll("+", "&nbsp;&nbsp;<strong>&bull;</strong>")
// 处理提交的日期
let date = new Date(element.commit.committer.date) // "2022-10-08T10:54:36Z" let date = new Date(element.commit.committer.date) // "2022-10-08T10:54:36Z"
date = new Date(+ new Date(date) + 28800000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '') date = new Date(+ new Date(date) + 28800000).toISOString()
date = date.replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
// 组装标题信息
let verifiedString = "<span style='color: green;'><strong>Verified</strong></span>"
let hash = `<a href='${element.html_url}'>${element.sha.slice(0, 7)}</a>`
let verified = `${element.commit.verification.verified ? verifiedString : ""}`
let header = `${hash} ${date} ${verified}`
changeColor = !changeColor changeColor = !changeColor
let header = ` let color = `${changeColor ? color1 : color2}`
${date}
(<a href='${html_url}'>${hash}</a>${verified ? ", <span style='color: green'><strong>Verified</strong></span>" : ""})`
let msg = ` let msg = `
<div style="background-color: ${changeColor ? color1 : color2}; padding: 5px 0px 5px 10px"> <div style="background-color: ${color}; padding: 5px 0px 5px 10px">
${header} ${header}
${message} ${message}
</div>` </div>`
$(".changelog").append(msg); $(".changelog").append(msg)
}); })
}); })
}); })
</script> </script>
<title>QC TOOL</title> <title>QC TOOL</title>
</head> </head>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-CN"> <html lang="zh-cmn-Hans">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
@@ -11,104 +11,95 @@
<script src="./decimal.js"></script> <script src="./decimal.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> <script>
var decimal = Decimal.set( let decimal = Decimal.set({
{
rounding: Decimal.ROUND_HALF_EVEN, rounding: Decimal.ROUND_HALF_EVEN,
precision: 12 precision: 12
} })
); $(document).ready(() => {
$(document).ready(function () { let tip = `
var output = document.getElementById("output"); 计算每一针走完的时间。<br>
// 设置时间提前量可以将每针的时间提前,用于给看样及配样等操作留时间。`
var tip = "计算每一针走完的时间。<br>" $("#output").append(tip)
+ "设置时间提前量可以将每针的时间提前,用于给看样及配样等操作留时间。";
output.innerHTML = tip;
$("#ok").click(function () { $("#ok").click(() => {
$("#output").empty(); let time = $("#time").val()
var time = document.getElementById("time").value; let num = $("#num").val()
var num = document.getElementById("num").value; let ptime = $("#ptime").val()
var ptime = document.getElementById("ptime").value; let stime = $("#stime").val()
var stime = document.getElementById("stime").value; let data = []
var data = [];
// 生成数据 // 生成数据
for (var i = 1; i <= num; i++) { for (let i = 1; i <= num; i++) {
var t = InjectionSequenceToDate(time, ptime, stime, i); let t = injectionSequenceToDate(time, ptime, stime, i)
data.push({ data.push({
"id": i, "id": i,
"time": t "time": t
}); })
} }
if (data.length == 0) {
// 未生成数据,不进行结果展示 // 未生成数据,不进行结果展示
return; if (data.length == 0) return
} $("#output").empty()
output.appendChild(createTable(data)); $("#output").append(createTable(data))
}); })
$("#clear").click(function () { $("#clear").click(() => {
time.value = ""; $("#time").val("")
num.value = ""; $("#num").val("")
ptime.value = ""; $("#ptime").val("")
stime.value = ""; $("#stime").val("")
$("#output").empty(); $("#output").empty()
}); $("#output").append(tip)
})
$("#new_page").click(function () { $("#new_page").click(() => {
window.open(window.location.href, "_blank"); window.open(window.location.href, "_blank")
}); })
}); })
/** /**
* 计算进样时间,返回 yyyy-MM-dd hh:mm 格式的字符串 * 计算进样时间,返回 yyyy-MM-dd hh:mm 格式的字符串
*/ */
function InjectionSequenceToDate(time, ptime, stime, num) { function injectionSequenceToDate(time, ptime, stime, num) {
var t = InjectionSequence(time, ptime, stime, num); let t = injectionSequence(time, ptime, stime, num)
var t_hour = Math.floor(Math.abs(t) / 60); let t_hour = Math.floor(Math.abs(t) / 60)
var t_min = t % 60; let t_min = t % 60
var date = new Date(); let date = new Date()
var dateAfter = new Date(date.getFullYear(), date.getMonth(), date.getDate(), let dateAfter = new Date(date.getFullYear(), date.getMonth(), date.getDate(),
date.getHours() + t_hour, date.getMinutes() + t_min).format("yyyy-MM-dd hh:mm"); date.getHours() + t_hour, date.getMinutes() + t_min).format("yyyy-MM-dd hh:mm")
return dateAfter; return dateAfter
} }
/** /**
* 创建表格元素并将数据填入其中。 * 创建表格元素并将数据填入其中。
*/ */
function createTable(data) { function createTable(data) {
var table = document.createElement("table"); let table = document.createElement("table")
table.setAttribute("style", "width: 100%;"); table.setAttribute("style", "width: 100%; text-align: center;")
table.setAttribute("class", "pure-table"); table.setAttribute("class", "pure-table")
var row = document.createElement("tr"); let row = document.createElement("tr")
var th1 = document.createElement("th"); let th1 = document.createElement("th")
var th2 = document.createElement("th"); let th2 = document.createElement("th")
th1.innerText = "第几针"; th1.innerText = "第几针"
th2.innerText = "进样时间"; th2.innerText = "进样时间"
row.appendChild(th1); row.appendChild(th1)
row.appendChild(th2); row.appendChild(th2)
table.appendChild(row); table.appendChild(row)
data.forEach(element => { data.forEach(element => {
var tr = document.createElement("tr"); let tr = document.createElement("tr")
let td_id = document.createElement("td")
let td_time = document.createElement("td")
if (element.id % 2 == 1) { td_id.innerText = element.id
tr.className = "pure-table-odd"; td_time.innerText = element.time
}
var td_id = document.createElement("td"); tr.appendChild(td_id)
var td_time = document.createElement("td"); tr.appendChild(td_time)
table.appendChild(tr)
td_id.innerText = element.id; })
td_time.innerText = element.time; return table
tr.appendChild(td_id);
tr.appendChild(td_time);
table.appendChild(tr);
});
return table;
} }
/** /**
@@ -118,20 +109,18 @@
* @param stime 现在这针运行多少分钟 * @param stime 现在这针运行多少分钟
* @param num 计算第n针后的时间 * @param num 计算第n针后的时间
*/ */
function InjectionSequence(time, ptime, stime, num) { function injectionSequence(time, ptime, stime, num) {
// formal: InjectionSequence = time * num - ptime - stime // formal: InjectionSequence = time * num - ptime - stime
var t = new Decimal(time); let t = new Decimal(time)
var p = new Decimal(ptime); let p = new Decimal(ptime)
var s = new Decimal(stime); let s = new Decimal(stime)
var n = new Decimal(num); let n = new Decimal(num)
return decimal.mul(t, n).sub(p).sub(s).toString()
var time = decimal.mul(t, n).sub(p).sub(s);
return time.toString();
} }
// 为 Date 创建日期格式化方法 // 为 Date 创建日期格式化方法
Date.prototype.format = function (fmt) { Date.prototype.format = function (fmt) {
var o = { let o = {
"M+": this.getMonth() + 1, //月份 "M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日 "d+": this.getDate(), //日
"h+": this.getHours(), //小时 "h+": this.getHours(), //小时
@@ -139,16 +128,16 @@
"s+": this.getSeconds(), //秒 "s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度 "q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒 "S": this.getMilliseconds() //毫秒
}; }
if (/(y+)/.test(fmt)) { if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length))
} }
for (var k in o) { for (let k in o) {
if (new RegExp("(" + k + ")").test(fmt)) { if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)))
} }
} }
return fmt; return fmt
} }
</script> </script>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh_CN"> <html lang="zh-cmn-Hans">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
@@ -10,10 +10,11 @@
<link rel="stylesheet" href="./theme.css"> <link rel="stylesheet" href="./theme.css">
<script src="./decimal.js"></script> <script src="./decimal.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> <script type="module">
var debug = false import { IO } from './modules/tools.js'
var localStorageSupport = storageAvailable("localStorage") let io = new IO('lod')
var tip = ` let debug = false
let tip = `
<br> <br>
操作过程: 操作过程:
<br> <br>
@@ -27,26 +28,16 @@
恢复:输入或选择样品批号,点击恢复,此时将读取对应数据并自动填入输入框。 恢复:输入或选择样品批号,点击恢复,此时将读取对应数据并自动填入输入框。
<br> <br>
删除:输入或选择样品批号,点击删除,此时将从已存储的数据中删除对应数据。 删除:输入或选择样品批号,点击删除,此时将从已存储的数据中删除对应数据。
<br>
若保存、恢复、删除按钮均未显示,则表明您的浏览器不支持此功能。
` `
var decimal = Decimal.set({ let decimal = Decimal.set({
rounding: Decimal.ROUND_HALF_EVEN, rounding: Decimal.ROUND_HALF_EVEN,
precision: 12 precision: 12
}) })
$(document).ready(() => { $(document).ready(() => {
$(".msgbox").append(tip) $(".msgbox").append(tip)
loadSavedContentsList()
if (!localStorageSupport) {
$("#remove").hide()
$("#restore").hide()
$("#save").hide()
$("#lod-name").removeAttr("list")
}
if (localStorageSupport) loadSavedContentsList()
// 若有前面页面的传值,则导入传入的值 // 若有前面页面的传值,则导入传入的值
if (window.location.search.startsWith('?data')) { if (window.location.search.startsWith('?data')) {
@@ -70,10 +61,15 @@
// TODO 可能干燥失重不应该使用 RSD 值来判断是否平行,可尝试使用 RD 或 RAD 判断 // TODO 可能干燥失重不应该使用 RSD 值来判断是否平行,可尝试使用 RD 或 RAD 判断
// let rsd = RSD(lod1, lod2) // let rsd = RSD(lod1, lod2)
let format = (value) => {
if (value <= 0) return `<span style="color: red;">${value}</span>`
return value
}
var msg = ` var msg = `
第一组干燥失重 = ${lod1 <= 0 ? `<span style='color: red;'>${lod1}</span>` : lod1}<br> 第一组干燥失重 = ${format(lod1)}<br>
第二组干燥失重 = ${lod2 <= 0 ? `<span style='color: red;'>${lod2}</span>` : lod2}<br> 第二组干燥失重 = ${format(lod2)}<br>
两组干燥失重平均值 = ${average}<br> 两组干燥失重平均值 = ${format(average)}<br>
${m0l != '' && m1l != '' ? `第一组恒重后空瓶+样 = ${decimal.add(m0l, m1l).toString()}` : ''}<br> ${m0l != '' && m1l != '' ? `第一组恒重后空瓶+样 = ${decimal.add(m0l, m1l).toString()}` : ''}<br>
${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1r).toString()}` : ''}<br> ${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1r).toString()}` : ''}<br>
` `
@@ -108,10 +104,8 @@ ${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1
return return
} }
// save data to localStorage
let lod = exportData() let lod = exportData()
lod['time'] = Date.now() io.write(id, JSON.stringify(lod))
localStorage.setItem(id, JSON.stringify(lod))
loadSavedContentsList() loadSavedContentsList()
}) })
@@ -122,7 +116,7 @@ ${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1
return return
} }
let lod = JSON.parse(localStorage.getItem(id)) let lod = JSON.parse(io.read(id))
$("#m0l").val(lod.m0l) $("#m0l").val(lod.m0l)
$("#m1l").val(lod.m1l) $("#m1l").val(lod.m1l)
$("#m3l").val(lod.m3l) $("#m3l").val(lod.m3l)
@@ -138,9 +132,8 @@ ${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1
return return
} }
if (confirm("确认删除 " + id + " 的数据?")) { if (confirm("确认删除 " + id + " 的数据?")) {
localStorage.removeItem(id) io.remove(id)
loadSavedContentsList() loadSavedContentsList()
$("#lod-name").val("")
$("#clear").click() $("#clear").click()
} }
}) })
@@ -158,6 +151,7 @@ ${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1
// 需要传递给新页面的数据 // 需要传递给新页面的数据
function exportData() { function exportData() {
let data = { let data = {
"time": Date.now(),
"id": $("#lod-name").val(), "id": $("#lod-name").val(),
"m0l": $("#m0l").val(), "m0l": $("#m0l").val(),
"m1l": $("#m1l").val(), "m1l": $("#m1l").val(),
@@ -241,14 +235,9 @@ ${m0r != '' && m1r != '' ? `第二组恒重后空瓶+样 = ${decimal.add(m0r, m1
function loadSavedContentsList() { function loadSavedContentsList() {
// load data from localStorage to input. // load data from localStorage to input.
let keys = [] let keys = io.listKeys().sort()
$("#keys").empty()
for (const key in localStorage) {
if (Object.hasOwnProperty.call(localStorage, key)) keys.push(key)
}
keys.sort()
keys.forEach(key => { keys.forEach(key => {
let timestamp = JSON.parse(localStorage.getItem(key)).time let timestamp = JSON.parse(io.read(key)).time
let time = new Date(timestamp).format("yyyy-MM-dd hh:mm") let time = new Date(timestamp).format("yyyy-MM-dd hh:mm")
let option = document.createElement("option") let option = document.createElement("option")
$(option).attr("value", key) $(option).attr("value", key)

34
modules/tools.js Normal file
View File

@@ -0,0 +1,34 @@
class IO {
constructor(scope) {
this.scope = scope
}
read(id) {
let key = `${this.scope}/${id}`
return localStorage.getItem(key)
}
write(id, data) {
let key = `${this.scope}/${id}`
localStorage.setItem(key, data)
}
remove(id) {
let key = `${this.scope}/${id}`
localStorage.removeItem(key)
}
listKeys() {
let keys = []
for (const key in localStorage) {
if (Object.hasOwnProperty.call(localStorage, key) &&
key.startsWith(this.scope)) {
let i = key.indexOf('/') + 1
keys.push(key.slice(i))
}
}
return keys
}
}
export { IO }

246
roi.html
View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh_CN"> <html lang="zh-cmn-Hans">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
@@ -10,97 +10,114 @@
<link rel="stylesheet" href="./theme.css"> <link rel="stylesheet" href="./theme.css">
<script src="./decimal.js"></script> <script src="./decimal.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> <script type="module">
var debug = false; import { IO } from './modules/tools.js'
var tip = `
<br>
操作过程:
空坩埚 -> 灼烧3小时 -> 冷却称重 -> 灼烧0.5小时 -> 冷却称重(1) -> 加样(2) -> 烧至无烟 -> 灼烧1小时 -> 冷却称重 -> 灼烧0.5小时 -> 冷却称重(3)
<br>
<br>
`;
var decimal = Decimal.set( let io = new IO('roi')
{ let decimal = Decimal.set({
rounding: Decimal.ROUND_HALF_EVEN, rounding: Decimal.ROUND_HALF_EVEN,
precision: 12 precision: 12
} })
); let debug = false
let tip = `
<br>
操作过程:
空坩埚 -> 灼烧3小时 -> 冷却称重 -> 灼烧0.5小时 -> 冷却称重(1)
-> 加样(2) -> 烧至无烟 -> 灼烧1小时 -> 冷却称重 -> 灼烧0.5小时 -> 冷却称重(3)
<br>
`
$(document).ready(function () { $(document).ready(() => {
var input_m0l = document.getElementById("m0l");
var input_m1l = document.getElementById("m1l");
var input_m3l = document.getElementById("m3l");
var input_m0r = document.getElementById("m0r");
var input_m1r = document.getElementById("m1r");
var input_m3r = document.getElementById("m3r");
$(".msgbox").append(tip) $(".msgbox").append(tip)
loadSavedContentsList()
$("#ok").click(function () { $("#ok").click(() => {
var m0l = input_m0l.value; let m0l = $("#m0l").val()
var m1l = input_m1l.value; let m1l = $("#m1l").val()
var m3l = input_m3l.value; let m3l = $("#m3l").val()
let m0r = $("#m0r").val()
let m1r = $("#m1r").val()
let m3r = $("#m3r").val()
var m0r = input_m0r.value; let lod1 = roi(m0l, m1l, m3l)
var m1r = input_m1r.value; let lod2 = roi(m0r, m1r, m3r)
var m3r = input_m3r.value; let average = decimal.add(lod1, lod2).div(2).toString()
var lod1 = lod(m0l, m1l, m3l) let format = (value) => {
var lod2 = lod(m0r, m1r, m3r) if (value <= 0) return `<span style="color: red;">${value}</span>`
var average = decimal.add(lod1, lod2).div(2).toString(); return value
var msg = `
<br>
第一组炽灼残渣 = ${lod1 <= 0 ? '<span style="color: red;">' + lod1 + '</span>' : lod1}
<br>
第二组炽灼残渣 = ${lod2 <= 0 ? '<span style="color: red;">' + lod2 + '</span>' : lod2}
<br>
两组炽灼残渣平均值 = ${average <= 0 ? '<span style="color: red;">' + average + '</span>' : average}
<br>
`;
if (m0l != '' && m1l != '') {
msg += "第一组恒重后空坩埚+样 = " + decimal.add(m0l, m1l).toString() + "<br>";
} }
if (m0r != '' && m1r != '') { let msg = `
msg += "第二组恒重后空坩埚+样 = " + decimal.add(m0r, m1r).toString() + "<br>"; <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
} }
io.remove(id)
loadSavedContentsList()
})
message(msg); $("#restore").click(() => {
}); let id = $("#roi-name").val()
if (id.length == 0) {
$("#clear").click(function () { confirm("请输入或选择样品批号!")
var confirm = window.confirm("所填写的数据(不包括批号)将被清空,确定?"); return
if (!confirm) {
return;
} }
input_m0l.value = ""; let data = io.read(id)
input_m1l.value = ""; let roi = JSON.parse(data)
input_m3l.value = ""; importData(roi)
input_m0r.value = ""; })
input_m1r.value = "";
input_m3r.value = "";
message(tip); $("#save").click(() => {
}); let id = $("#roi-name").val()
if (id.length == 0) {
$("#new_page").click(function () { confirm("请输入或选择样品批号!")
window.open(window.location.href, "_blank"); return
}); }
let data = JSON.stringify(exportData())
io.write(id, data)
loadSavedContentsList()
})
if (debug) { if (debug) {
document.getElementById("m0l").value = 18.34625; document.getElementById("m0l").value = 18.34625
document.getElementById("m1l").value = 1.04213; document.getElementById("m1l").value = 1.04213
document.getElementById("m3l").value = 19.38511; document.getElementById("m3l").value = 19.38511
} }
}); })
function message(msg) { function message(msg) {
$(".msgbox").empty(); $(".msgbox").empty()
$(".msgbox").append(msg); $(".msgbox").append(msg)
} }
/** /**
@@ -110,31 +127,87 @@
* @param m3 干燥恒重后带样品重 * @param m3 干燥恒重后带样品重
* @return 炽灼残渣(% * @return 炽灼残渣(%
*/ */
function lod(m0, m1, m3) { function roi(m0, m1, m3) {
if (checkNull(m0, m1, m3)) { if (checkNull(m0, m1, m3)) return "0"
return "0";
}
var a = new Decimal(m0); let a = new Decimal(m0)
var b = new Decimal(m1); let b = new Decimal(m1)
var c = new Decimal(m3); let c = new Decimal(m3)
// m3 - m0 / m1 * 100 // m3 - m0 / m1 * 100
var d = decimal.sub(c, a) let d = decimal.sub(c, a)
var e = d.div(b).mul(100); let e = d.div(b).mul(100)
return e.toString(); return e.toString()
} }
function checkNull(m0, m1, m3) { function checkNull(m0, m1, m3) {
return m0 == '' || m1 == '' || m3 == ''; return m0 == '' || m1 == '' || m3 == ''
} }
function loadSavedContentsList() {
// load data from localStorage to input.
let keys = io.listKeys()
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> </script>
</head> </head>
<body> <body>
<h3>炽灼残渣</h3> <h3>炽灼残渣</h3>
<input type="text" name="lod-name" id="lod-name" placeholder="样品批号"><br><br> <input type="text" name="roi-name" id="roi-name" list="keys" placeholder="样品批号"><br><br>
<div class="one-team"> <div class="one-team">
第一组<br> 第一组<br>
@@ -158,9 +231,14 @@
<button id="new_page">新开标签页</button> <button id="new_page">新开标签页</button>
<button id="clear">清除内容</button> <button id="clear">清除内容</button>
<button id="ok">计算</button> <button id="ok">计算</button>
<button id="remove">删除</button>
<button id="restore">恢复</button>
<button id="save">保存</button>
</div> </div>
<div class="msgbox"></div> <div class="msgbox"></div>
<datalist id="keys"></datalist>
</body> </body>

View File

@@ -1,5 +1,5 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh_CN"> <html lang="zh-cmn-Hans">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
@@ -11,67 +11,58 @@
<script src="./decimal.js"></script> <script src="./decimal.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script> <script>
var debug = false; let debug = false
var tip = "<br>" + let tip = `<br>
"请输入三次 F 值" + 请输入三次 F 值<br>
"<br>" + 公式:<br>
"公式:" + F' = AVERAGE(F1, F2, F3)<br>
"<br>" + RDx = [ Fx - F' ] / F' * 100`
"F' = AVERAGE(F1, F2, F3)" + "<br>" +
"RDx = [ Fx - F' ] / F' * 100"; let decimal = Decimal.set({
var decimal = Decimal.set(
{
rounding: Decimal.ROUND_HALF_EVEN, rounding: Decimal.ROUND_HALF_EVEN,
precision: 12 precision: 12
} })
);
$(document).ready(function () {
var input_m0 = document.getElementById("m0");
var input_m1 = document.getElementById("m1");
var input_m2 = document.getElementById("m2");
$(document).ready(() => {
$(".msgbox").append(tip) $(".msgbox").append(tip)
$("#ok").click(function () { $("#ok").click(() => {
var m0 = input_m0.value; let m0 = $("#m0").val()
var m1 = input_m1.value; let m1 = $("#m1").val()
var m2 = input_m2.value; let m2 = $("#m2").val()
f = average(m0, m1, m2)
f = average(m0, m1, m2); let msg = `
<br>
F值平均值 = ${f}<br>
RD1 = ${titer(f, m0)}<br>
RD2 = ${titer(f, m1)}<br>
RD3 = ${titer(f, m2)}<br>
`
message(msg)
})
var msg = "<br>" + $("#clear").click(() => {
"F值平均值 = " + f + "<br>" + $("#m0").val("")
"RD1 = " + titer(f, m0) + "<br>" + $("#m1").val("")
"RD2 = " + titer(f, m1) + "<br>" + $("#m2").val("")
"RD3 = " + titer(f, m2) + "<br>"; message(tip)
})
message(msg); $("#new_page").click(() => {
}); window.open(window.location.href, "_blank")
})
$("#clear").click(function () {
input_m0.value = "";
input_m1.value = "";
input_m2.value = "";
message(tip);
});
$("#new_page").click(function () {
window.open(window.location.href, "_blank");
});
if (debug) { if (debug) {
document.getElementById("m0").value = 2; $("#m0").val(2)
document.getElementById("m1").value = 3; $("#m1").val(3)
document.getElementById("m2").value = 4; $("#m2").val(4)
} }
}); })
function message(msg) { function message(msg) {
$(".msgbox").empty(); $(".msgbox").empty()
$(".msgbox").append(msg); $(".msgbox").append(msg)
} }
/** /**
@@ -81,16 +72,16 @@
*/ */
function titer(f, m) { function titer(f, m) {
temp = decimal.sub(m, f) temp = decimal.sub(m, f)
return temp.div(f).mul(100); return temp.div(f).mul(100)
} }
function average(a, b, c) { function average(a, b, c) {
var sum = Decimal(a).add(Decimal(b)).add(Decimal(c)); let sum = Decimal(a).add(Decimal(b)).add(Decimal(c))
return decimal.div(sum, 3); return decimal.div(sum, 3)
} }
function checkNull(m0, m1, m2) { function checkNull(m0, m1, m2) {
return m0 == '' || m1 == '' || m2 == ''; return m0 == '' || m1 == '' || m2 == ''
} }
</script> </script>