Add weight conversion to unit conversion tool.
This commit is contained in:
parent
5131b9396b
commit
1146f3b180
@ -1,5 +1,8 @@
|
|||||||
---
|
---
|
||||||
import DataUnitConversion from "./DataUnitConversion.vue";
|
import DataUnitConversion from "./DataUnitConversion.vue";
|
||||||
|
import WeightConversion from "./WeightConversion.vue";
|
||||||
---
|
---
|
||||||
|
|
||||||
<DataUnitConversion client:load />
|
<DataUnitConversion client:load />
|
||||||
|
|
||||||
|
<WeightConversion client:load />
|
||||||
|
147
src/components/tool/unit_conversion/WeightConversion.vue
Normal file
147
src/components/tool/unit_conversion/WeightConversion.vue
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
<script setup>
|
||||||
|
import { computed, ref } from 'vue';
|
||||||
|
import BigNumber from "bignumber.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {string} UnitNameStr
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @enum {UnitNameStr}
|
||||||
|
*/
|
||||||
|
const twToMetricUnitName = Object.freeze({
|
||||||
|
JIN: "jin",
|
||||||
|
LIANG: "liang",
|
||||||
|
QIAN: "qian",
|
||||||
|
FEN: "fen",
|
||||||
|
GRAM: "gram",
|
||||||
|
KILOGRAM: "kilogram"
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @enum {number}
|
||||||
|
*/
|
||||||
|
const twToMetricUnitNameToWeight = Object.freeze({
|
||||||
|
[twToMetricUnitName.JIN]: 600,
|
||||||
|
[twToMetricUnitName.LIANG]: 600 / 16,
|
||||||
|
[twToMetricUnitName.QIAN]: 600 / 16 / 10,
|
||||||
|
[twToMetricUnitName.FEN]: 600 / 16 / 10 / 10,
|
||||||
|
[twToMetricUnitName.GRAM]: 1,
|
||||||
|
[twToMetricUnitName.KILOGRAM]: 1 * 1000,
|
||||||
|
})
|
||||||
|
|
||||||
|
const weight = ref({
|
||||||
|
[twToMetricUnitName.JIN]: '',
|
||||||
|
[twToMetricUnitName.LIANG]: '',
|
||||||
|
[twToMetricUnitName.QIAN]: '',
|
||||||
|
[twToMetricUnitName.FEN]: '',
|
||||||
|
[twToMetricUnitName.GRAM]: '',
|
||||||
|
[twToMetricUnitName.KILOGRAM]: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change ref variable when user inputs some characters.
|
||||||
|
* @param {UnitNameStr} unitName
|
||||||
|
* @returns {void}
|
||||||
|
*/
|
||||||
|
function weightChanged(unitName) {
|
||||||
|
/**
|
||||||
|
* @type {object.<UnitNameStr, string>}
|
||||||
|
*/
|
||||||
|
let result = {};
|
||||||
|
// assign 0 to current input if nothing is passed
|
||||||
|
if (weight.value[unitName].length === 0) result[unitName] = '0';
|
||||||
|
let inputedGram = new BigNumber(twToMetricUnitNameToWeight[unitName]).multipliedBy(weight.value[unitName]);
|
||||||
|
for (const key in twToMetricUnitNameToWeight) {
|
||||||
|
result[key] = inputedGram.div(twToMetricUnitNameToWeight[key]).toString();
|
||||||
|
}
|
||||||
|
result[unitName] = weight.value[unitName];
|
||||||
|
for (const key in twToMetricUnitNameToWeight) {
|
||||||
|
if (result[key] !== 'NaN') {
|
||||||
|
weight.value[key] = result[key];
|
||||||
|
} else if (result[key] === 'NaN') {
|
||||||
|
weight.value[key] = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<h1>重量换算</h1>
|
||||||
|
<div class="unit-conversion-computation-area metric">
|
||||||
|
<p>公制重量:</p>
|
||||||
|
<div class="unit-conversion-computation-node">
|
||||||
|
<input class="size-text" :id="twToMetricUnitName.KILOGRAM" type="text"
|
||||||
|
v-model="weight[twToMetricUnitName.KILOGRAM]" @input="weightChanged(twToMetricUnitName.KILOGRAM)">
|
||||||
|
<span class="unit-name">千克</span>
|
||||||
|
</div>
|
||||||
|
<div class="unit-conversion-computation-node">
|
||||||
|
<input class="size-text" :id="twToMetricUnitName.GRAM" type="text" v-model="weight[twToMetricUnitName.GRAM]"
|
||||||
|
@input="weightChanged(twToMetricUnitName.GRAM)">
|
||||||
|
<span class="unit-name">克</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="unit-conversion-computation-area tw">
|
||||||
|
<p>台湾制重量:</p>
|
||||||
|
<div class="unit-conversion-computation-node">
|
||||||
|
<input class="size-text" :id="twToMetricUnitName.JIN" type="text" v-model="weight[twToMetricUnitName.JIN]"
|
||||||
|
@input="weightChanged(twToMetricUnitName.JIN)">
|
||||||
|
<span class="unit-name">斤</span>
|
||||||
|
</div>
|
||||||
|
<div class="unit-conversion-computation-node">
|
||||||
|
<input class="size-text" :id="twToMetricUnitName.LIANG" type="text" v-model="weight[twToMetricUnitName.LIANG]"
|
||||||
|
@input="weightChanged(twToMetricUnitName.LIANG)">
|
||||||
|
<span class="unit-name">两</span>
|
||||||
|
</div>
|
||||||
|
<div class="unit-conversion-computation-node">
|
||||||
|
<input class="size-text" :id="twToMetricUnitName.QIAN" type="text" v-model="weight[twToMetricUnitName.QIAN]"
|
||||||
|
@input="weightChanged(twToMetricUnitName.QIAN)">
|
||||||
|
<span class="unit-name">钱</span>
|
||||||
|
</div>
|
||||||
|
<div class="unit-conversion-computation-node">
|
||||||
|
<input class="size-text" :id="twToMetricUnitName.FEN" type="text" v-model="weight[twToMetricUnitName.FEN]"
|
||||||
|
@input="weightChanged(twToMetricUnitName.FEN)">
|
||||||
|
<span class="unit-name">分</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
h1,
|
||||||
|
p,
|
||||||
|
.unit-conversion-computation-node {
|
||||||
|
margin: 0.5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.unit-conversion-computation-node {
|
||||||
|
float: left;
|
||||||
|
width: 170px;
|
||||||
|
margin: 0 8px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size-text {
|
||||||
|
margin: 0 6px 0 0;
|
||||||
|
width: 115px
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 395px) {
|
||||||
|
.unit-conversion-computation-node {
|
||||||
|
width: 130px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size-text {
|
||||||
|
width: 85px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.unit-conversion-computation-area::after {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.unit-conversion-computation-result {
|
||||||
|
margin: 0.5em 0 0.5em 0;
|
||||||
|
height: 1em;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user