From 20be1a99fd0f78ac87cebfba99829b4ffa8a1495 Mon Sep 17 00:00:00 2001 From: qin <a@163.com> Date: 星期一, 31 三月 2025 15:38:16 +0800 Subject: [PATCH] 计算工具 --- src/assets/icons/3.png | 0 src/components/AppHeader.vue | 1 src/views/GB19762-2025.vue | 427 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/assets/icons/1.png | 0 src/assets/pdf/GB19762-2025.pdf | 0 src/assets/icons/2.png | 0 src/router/index.ts | 5 7 files changed, 433 insertions(+), 0 deletions(-) diff --git a/src/assets/icons/1.png b/src/assets/icons/1.png new file mode 100644 index 0000000..fcdf086 --- /dev/null +++ b/src/assets/icons/1.png Binary files differ diff --git a/src/assets/icons/2.png b/src/assets/icons/2.png new file mode 100644 index 0000000..00432cc --- /dev/null +++ b/src/assets/icons/2.png Binary files differ diff --git a/src/assets/icons/3.png b/src/assets/icons/3.png new file mode 100644 index 0000000..55db835 --- /dev/null +++ b/src/assets/icons/3.png Binary files differ diff --git a/src/assets/pdf/GB19762-2025.pdf b/src/assets/pdf/GB19762-2025.pdf new file mode 100644 index 0000000..cd146e5 --- /dev/null +++ b/src/assets/pdf/GB19762-2025.pdf Binary files differ diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue index 74f36e6..e38f385 100644 --- a/src/components/AppHeader.vue +++ b/src/components/AppHeader.vue @@ -18,6 +18,7 @@ <el-menu-item index="/eec-label-search" class="!px-4">璇佷功鏌ヨ</el-menu-item> <el-menu-item index="/news-detail/99" class="!px-4">鏀跨瓥鏂囦欢</el-menu-item> <el-menu-item index="/select-selpara" class="!px-4" @click="linkClick">娉甸�夊瀷</el-menu-item> + <el-menu-item index="/gb19762-2025" class="!px-4">璁$畻宸ュ叿</el-menu-item> </el-menu> </nav> diff --git a/src/router/index.ts b/src/router/index.ts index 9c698ec..2b8073a 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -93,6 +93,11 @@ name: 'cart', component: () => import('../views/CartPage.vue'), }, + { + path: '/gb19762-2025', + name: 'gb19762-2025', + component: () => import('../views/GB19762-2025.vue'), + }, ], }); router.beforeEach((to, from, next) => { diff --git a/src/views/GB19762-2025.vue b/src/views/GB19762-2025.vue new file mode 100644 index 0000000..0ba8919 --- /dev/null +++ b/src/views/GB19762-2025.vue @@ -0,0 +1,427 @@ +<template> + <!-- <div class="detail-container">{{ Math.pow(Math.log(60), 2) }} + </div> --> + <div class="container mx-auto px-4 py-8 bg-white industrial-soft-style" style="margin-top: 20px; padding-top: 15px"> + <div class="w-100 h-100" style="background-color: #fff"> + <!-- 椤堕儴鍒嗙被鑿滃崟 --> + <div class="rounded-lg shadow" style="background-color: #f6f7f9; margin-bottom: 10px"> + <div class="border-b p-4 border-bottom-dashed-1 box-border" style="padding: 10px"> + <div class="flex items-center"> + <span class="text-gray-500">绂诲績娉电被鍨嬶細</span> + <div class="flex flex-1"> + <span v-for="item in pumptype" class="ant-tag !px-2" + :class="pumpSelect === item.id ? 'ant-tag-checked' : ''" :key="item.id" + @click="changeSelectPumpType(item.id)" + :type="pumpSelect === item.id ? 'primary' : 'default'" size="small"> + {{ item.name }} + </span> + </div> + </div> + </div> + <div class="border-b p-4 border-bottom-dashed-1 box-border" style="padding: 10px"> + <div class="flex items-center"> + <span class="text-gray-500">姘存车绫诲瀷锛�</span> + <div class="flex flex-1"> + <span v-for="item in type.filter((c) => { return c.pumpid == pumpSelect })" + class="ant-tag !px-2" :class="typeSelect === item.tag ? 'ant-tag-checked' : ''" + :key="item.tag" @click="changeSelectType(item.tag)" + :type="typeSelect === item.tag ? 'primary' : 'default'" size="small"> + {{ item.name }} + </span> + </div> + </div> + </div> + <div class="border-b p-4 border-bottom-dashed-1 box-border" style="padding: 10px"> + <div class="flex items-center"> + <span class="text-gray-500">鏈�楂樻晥鐜囩偣娴侀噺(m鲁/h)锛�</span> + <div class="flex flex-1"> + <el-input v-model="MaxFlow" placeholder="璇疯緭鍏ユ渶楂樻晥鐜囩偣娴侀噺" class="!w-[300px]" clearable> + </el-input> + </div> + </div> + </div> + <div class="border-b p-4 border-bottom-dashed-1 box-border" style="padding: 10px"> + <div class="flex items-center"> + <span class="text-gray-500">鏈�楂樻晥鐜囩偣鎵▼(m)锛�</span> + <div class="flex flex-1"> + <el-input v-model="MaxHead" placeholder="璇疯緭鍏ユ渶楂樻晥鐜囩偣鎵▼" class="!w-[300px]" clearable> + </el-input> + </div> + </div> + </div> + <div class="border-b p-4 border-bottom-dashed-1 box-border" style="padding: 10px"> + <div class="flex items-center"> + <span class="text-gray-500">姘存车杞��(r/min)锛�</span> + <div class="flex flex-1"> + <el-input v-model="Speed" placeholder="璇疯緭鍏ユ按娉佃浆閫�" class="!w-[300px]" clearable> + </el-input> + </div> + </div> + </div> + <div class="border-b p-4 border-bottom-dashed-1 box-border" style="padding: 10px"> + <div class="flex items-center"> + <span class="text-gray-500" style="color:blue">姘存车鏁堢巼(%)锛�</span> + <div class="flex flex-1"> + <el-input v-model="Efficiency" placeholder="璇疯緭鍏ユ晥鐜�" class="!w-[300px]" clearable> + </el-input> + </div> + </div> + </div> + <div class="border-b p-4 border-bottom-dashed-1 box-border" style="padding: 10px"> + <div class="flex items-center"> + <el-button type="primary" @click="Calc">璁$畻</el-button> + <el-button @click="clear" type="info">娓呯┖</el-button> + <span style="margin-left: 85px;">鍙傝�冨浗鏍囨枃浠讹細</span> + <span style="color:dodgerblue;cursor: pointer;font-weight: bold;"> + <a href="/src/assets/pdf/GB19762-2025.pdf" target="_blank"> + 绂诲績娉佃兘鏁堥檺瀹氬�煎強鑳芥晥绛夌骇 GB+19762-2025</a> + </span> + </div> + </div> + </div> + + <div class="grid grid-cols-4 gap-4" style="padding: 15px 10px; min-height: 30px"> + <img style="width:78px;height: 30px;" v-if="calcResult != null" :src="getImgUrl()"> + </div> + </div> + </div> +</template> +<script setup lang="ts"> +import { onMounted, ref, computed } from 'vue'; +import { useRouter, useRoute } from 'vue-router'; +import { ElMessage } from 'element-plus'; + +const router = useRouter(); +const route = useRoute(); + +const pumptype = [ + { name: '娓呮按绂诲績娉�', id: 1 }, + { name: '鐭虫补鍖栧伐绂诲績娉�', id: 2 }, +] + +const type = [ + { + name: '鍗曠骇鍗曞惛娓呮按绂诲績娉�', isdouble: false, issingle: true, pumpid: 1, tag: 1, contant: [ + { minFlow: 5, maxFlow: 300, c1: 162.33, c2: 163.33, c3: 168.33 }, + { minFlow: 300, maxFlow: 10000, c1: 161.33, c2: 163.33, c3: 168.33 }, + ] + }, + { + name: '鍗曠骇鍙屽惛娓呮按绂诲績娉�', isdouble: true, issingle: true, pumpid: 1, tag: 2, contant: [ + { minFlow: 50, maxFlow: 600, c1: 162.33, c2: 163.33, c3: 168.33 }, + { minFlow: 600, maxFlow: 20000, c1: 161.33, c2: 163.33, c3: 168.33 }, + ] + }, + { + name: '绠¢亾娓呮按绂诲績娉�', isdouble: false, issingle: true, pumpid: 1, tag: 3, contant: [ + { minFlow: 5, maxFlow: 300, c1: 164.33, c2: 165.33, c3: 171.33 }, + { minFlow: 300, maxFlow: 3000, c1: 163.33, c2: 165.33, c3: 171.33 }, + ] + }, + { + name: '澶氱骇娓呮按绂诲績娉�', isdouble: false, issingle: false, pumpid: 1, tag: 4, contant: [ + { minFlow: 5, maxFlow: 100, c1: 140.33, c2: 142.33, c3: 150.33 }, + { minFlow: 100, maxFlow: 3000, c1: 139.33, c2: 142.33, c3: 150.33 }, + ] + }, + { + name: '杞诲瀷澶氱骇娓呮按绂诲績娉�(绔嬪紡)', isdouble: false, issingle: false, pumpid: 1, tag: 5, contant: [ + { minFlow: 5, maxFlow: 300, c1: 137.33, c2: 139.33, c3: 144.33 }, + ] + }, + { + name: '杞诲瀷澶氱骇娓呮按绂诲績娉�(鍗у紡)', isdouble: false, issingle: false, pumpid: 1, tag: 6, contant: [ + { minFlow: 5, maxFlow: 300, c1: 140.33, c2: 142.33, c3: 147.33 }, + ] + }, + { + name: '鍗曠骇鍗曞惛鐭虫补鍖栧伐绂诲績娉�', isdouble: false, issingle: true, pumpid: 2, tag: 7, contant: [ + { + minFlow: 6, maxFlow: 300, speed: [ + { min: 20, max: 59, c1: 10, c2: 5, c3: -4 }, + { min: 60, max: 119, c1: 4, c2: 1, c3: -6 }, + { min: 120, max: 210, c1: 3, c2: 1, c3: -6 }, + { min: 211, max: 300, c1: 3, c2: 1, c3: -6 }, + ] + }, + { + minFlow: 301, maxFlow: 30000, speed: [ + { min: 20, max: 59, c1: 11, c2: 5, c3: -5 }, + { min: 60, max: 119, c1: 5, c2: 1, c3: -5 }, + { min: 120, max: 210, c1: 3, c2: 2, c3: -5 }, + { min: 211, max: 300, c1: 3, c2: 2, c3: -5 }, + ] + }, + ] + }, + { + name: '鍗曠骇鍙屽惛鐭虫补鍖栧伐绂诲績娉�', isdouble: true, issingle: true, pumpid: 2, tag: 8, contant: [ + { + minFlow: 6, maxFlow: 300, speed: [ + { min: 20, max: 59, c1: 10, c2: 5, c3: -4 }, + { min: 60, max: 119, c1: 4, c2: 1, c3: -6 }, + { min: 120, max: 210, c1: 3, c2: 1, c3: -6 }, + { min: 211, max: 300, c1: 3, c2: 1, c3: -6 }, + ] + }, + { + minFlow: 301, maxFlow: 30000, speed: [ + { min: 20, max: 59, c1: 11, c2: 5, c3: -5 }, + { min: 60, max: 119, c1: 5, c2: 1, c3: -5 }, + { min: 120, max: 210, c1: 3, c2: 2, c3: -5 }, + { min: 211, max: 300, c1: 3, c2: 2, c3: -5 }, + ] + }, + ] + }, + { + name: '澶氱骇鐭虫补鍖栧伐绂诲績娉�', isdouble: false, issingle: false, pumpid: 2, tag: 9, contant: [ + { + minFlow: 6, maxFlow: 300, speed: [ + { min: 20, max: 59, c1: 5, c2: 3, c3: -5 }, + { min: 60, max: 119, c1: 6, c2: 4, c3: -4 }, + { min: 120, max: 210, c1: 1, c2: -1, c3: -5 }, + { min: 211, max: 300, c1: 1, c2: -1, c3: -5 }, + ] + }, + { + minFlow: 301, maxFlow: 30000, speed: [ + { min: 20, max: 59, c1: 3, c2: 1, c3: -4 }, + { min: 60, max: 119, c1: 3, c2: 1, c3: -4 }, + { min: 120, max: 210, c1: 1, c2: -1, c3: -5 }, + { min: 211, max: 300, c1: 1, c2: -1, c3: -5 }, + ] + }, + ] + }, +]; +const clear = () => { + MaxFlow.value = 0; + MaxHead.value = 0; + Speed.value = 0; + Efficiency.value = 0; + typeSelect.value = 1; + calcResult.value = null; +} + +const getImgUrl = () => { + return "/src/assets/icons/" + calcResult.value + ".png"; +} +// 璁$畻 +const Calc = () => { + let pump = type.filter((c) => { return c.tag == typeSelect.value }) + if (pump[0].pumpid == 1) + CalcClearWaterPump(pump[0]) + else + CalcPetrochemicalPump(pump[0]) +} +//娓呮按绂诲績娉佃绠� +const CalcClearWaterPump = (pump) => { + let speedrate = SpeedRate(Speed.value, MaxFlow.value, MaxHead.value, pump.issingle, pump.isdouble) + let c1V, c2V, c3V = 0; + let cv = pump.contant.filter((c) => { return c.minFlow <= MaxFlow.value && c.maxFlow >= MaxFlow.value }); + if (pump.issingle) { + c1V = -8.44 * Math.pow(Math.log(speedrate), 2) - 0.48 * Math.pow(Math.log(MaxFlow.value), 2) + 0.09 * Math.log(speedrate) * Math.log(MaxFlow.value) + + 84.63 * Math.log(speedrate) + 8.5 * Math.log(MaxFlow.value) - cv[0].c1; + + c2V = -8.44 * Math.pow(Math.log(speedrate), 2) - 0.48 * Math.pow(Math.log(MaxFlow.value), 2) + 0.09 * Math.log(speedrate) * Math.log(MaxFlow.value) + + 84.63 * Math.log(speedrate) + 8.5 * Math.log(MaxFlow.value) - cv[0].c2; + + c3V = -8.44 * Math.pow(Math.log(speedrate), 2) - 0.48 * Math.pow(Math.log(MaxFlow.value), 2) + 0.09 * Math.log(speedrate) * Math.log(MaxFlow.value) + + 84.63 * Math.log(speedrate) + 8.5 * Math.log(MaxFlow.value) - cv[0].c3; + } + else { + c1V = -6.93 * Math.pow(Math.log(speedrate), 2) - 0.19 * Math.pow(Math.log(MaxFlow.value), 2) - 0.4 * Math.log(speedrate) * Math.log(MaxFlow.value) + + 72.67 * Math.log(speedrate) + 8.73 * Math.log(MaxFlow.value) - cv[0].c1; + + c2V = -6.93 * Math.pow(Math.log(speedrate), 2) - 0.19 * Math.pow(Math.log(MaxFlow.value), 2) - 0.4 * Math.log(speedrate) * Math.log(MaxFlow.value) + + 72.67 * Math.log(speedrate) + 8.73 * Math.log(MaxFlow.value) - cv[0].c2; + + c3V = -6.93 * Math.pow(Math.log(speedrate), 2) - 0.19 * Math.pow(Math.log(MaxFlow.value), 2) - 0.4 * Math.log(speedrate) * Math.log(MaxFlow.value) + + 72.67 * Math.log(speedrate) + 8.73 * Math.log(MaxFlow.value) - cv[0].c3; + + } + let level = GetEnergyLevel(c1V, c2V, c3V); + calcResult.value = level; +} + +const GetEnergyLevel = (c1V: number, c2V: number, c3V: number) => { + let levelDic = [ + { level: 1, min: c1V, max: 100 }, + { level: 2, min: c2V, max: c1V }, + { level: 3, min: c3V, max: c2V } + ] + let level = 5; + for (const range of levelDic) { + if (Efficiency.value >= range.min && Efficiency.value <= range.max) { + level = range.level; + } + } + return level; +} + +//鐭虫补鍖栧伐绂诲績娉佃绠� +const CalcPetrochemicalPump = (pump) => { + let speedrate = SpeedRate(Speed.value, MaxFlow.value, MaxHead.value, pump.issingle, pump.isdouble) + console.log(speedrate) + + let jzV = 0; + let jzFlow = MaxFlow.value; + if (MaxFlow.value > 3000) + jzFlow = 3000 + if (pump.issingle) { + jzV = 4.7057338 * Math.pow(10, -5) * Math.pow(Math.log(jzFlow), 6) - 6.6320555 * Math.pow(10, -3) * Math.pow(Math.log(jzFlow), 5) + + 1.5115754 * Math.pow(10, -1) * Math.pow(Math.log(jzFlow), 4) - 1.4023278 * Math.pow(Math.log(jzFlow), 3) + + 5.5234828 * Math.pow(Math.log(jzFlow), 2) - 8.3298912 * Math.pow(10, -1) * Math.log(jzFlow) + + 4.1951745 * 10; + } else { + jzV = 5.5836234 * Math.pow(10, -4) * Math.pow(Math.log(jzFlow), 6) - 1.2499816 * Math.pow(10, -2) * Math.pow(Math.log(jzFlow), 5) + + 9.9576618 * Math.pow(10, -2) * Math.pow(Math.log(jzFlow), 4) - 4.6811292 * Math.pow(10, -1) * Math.pow(Math.log(jzFlow), 3) + + 1.9459872 * Math.pow(Math.log(jzFlow), 2) + 1.4371144 * Math.log(jzFlow) + + 4.1467097 * 10; + } + + let xzV = 0; + if (speedrate > 210 && speedrate <= 300) { + xzV = -1.1111111 * Math.pow(10, -10) * Math.pow(speedrate, 6) + 1.6769231 * Math.pow(10, -7) * Math.pow(speedrate, 5) - + 1.0507265 * Math.pow(10, -4) * Math.pow(speedrate, 4) + 3.4987040 * Math.pow(10, -2) * Math.pow(speedrate, 3) - + 6.5298720 * Math.pow(speedrate, 2) + 6.4773909 * Math.pow(10, 2) * speedrate - + 2.6684155 * Math.pow(10, 4); + } else if (speedrate >= 20 && speedrate < 120) { + xzV = 3.7873403 * Math.pow(10, -10) * Math.pow(speedrate, 6) - 1.7898913 * Math.pow(10, -7) * Math.pow(speedrate, 5) + + 3.4269717 * Math.pow(10, -5) * Math.pow(speedrate, 4) - 3.4148047 * Math.pow(10, -3) * Math.pow(speedrate, 3) + + 1.9050630 * Math.pow(speedrate, 2) * Math.pow(10, -1) - 6.0391904 * speedrate + + 9.8970658 * 10; + } else xzV = 0; + + let oV = 0; + if (speedrate >= 120 && speedrate <= 210) + oV = jzV + else oV = jzV - xzV + + let conV = pump.contant.filter((c) => { return c.minFlow <= MaxFlow.value && c.maxFlow >= MaxFlow.value }); + let cv = conV[0].speed.filter((c) => { + return c.min <= speedrate && c.max >= speedrate + }) + let c1V, c2V, c3V = 0; + c1V = oV + cv[0].c1; + c2V = oV + cv[0].c2; + c3V = oV + cv[0].c3; + let level = GetEnergyLevel(c1V, c2V, c3V); + calcResult.value = level; +} + +//issingle: 鏄惁鍗曠骇,isdouble: 鏄惁鍙屽惛 +const SpeedRate = (speed: number, q: number, h: number, issingle: boolean, isdouble: boolean) => { + let singleV = 1; + let doubleV = 1; + if (!issingle) + singleV = 5; + if (isdouble) + doubleV = 2; + return 3.65 * speed * Math.pow(q / 3600 / doubleV, 0.5) / Math.pow(h / singleV, 0.75) +} +// 閫変腑鐘舵�� +const typeSelect = ref(1); +const pumpSelect = ref(1); +const MaxFlow = ref(0); +const MaxHead = ref(0) +const Speed = ref(0); +const Efficiency = ref(0); +const calcResult = ref(null); +//鐩戝惉绫诲瀷閫夋嫨绛涢�� +const changeSelectType = (tag: number) => { + typeSelect.value = tag; + MaxFlow.value = 0; + MaxHead.value = 0; + Speed.value = 0; + Efficiency.value = 0; +}; +const changeSelectPumpType = (tag: number) => { + pumpSelect.value = tag; + typeSelect.value = type.filter((c) => { return c.pumpid == tag })[0].tag; + MaxFlow.value = 0; + MaxHead.value = 0; + Speed.value = 0; + Efficiency.value = 0; +}; +</script> +<style lang="scss" scoped> +.w-100 { + width: 100%; +} + +.text-gray-500 { + display: inline-block; + width: 150px; +} + +.h-100 { + height: 100%; +} + +.industrial-soft-style { + position: relative; +} + +.border-bottom-dashed-1 { + // border-bottom: 1px dashed #e2e8f0; +} + +.box-border { + box-sizing: border-box; +} + +.industrial-soft-style::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 3px; + background-color: #38ca94; + background-image: linear-gradient(90deg, #9bc864, #40cb8f 21%, #00c7c4 47%, #00bcef 74%, #0af); +} + +.ant-tag { + box-sizing: border-box; + color: rgba(0, 0, 0, 0.65); + font-variant: tabular-nums; + line-height: 1.5; + list-style: none; + font-feature-settings: 'tnum'; + display: inline-block; + height: auto; + margin: 0 4px 0 0; + padding: 2px 2px; + line-height: 20px; + white-space: nowrap; + cursor: default; + opacity: 1; + transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); + margin-right: 5px; + font-size: 14px; +} + +.ant-tag:hover { + color: #1c97b7; + cursor: pointer; +} + +.ant-tag-checked { + background-color: #1c97b7; + color: #fff; +} + +.ant-tag-checked:hover { + color: #fff; +} + + +:deep(.el-button--default) { + --el-button-bg-color: transparent; + --el-button-border-color: transparent; + --el-button-hover-bg-color: var(--el-color-primary-light-9); + --el-button-hover-border-color: transparent; +} +</style> \ No newline at end of file -- Gitblit v1.9.3