new-ruoyi-geek/ruoyi-geek-app/pages_caltools/pages/main.vue

373 lines
7.7 KiB
Vue
Raw Permalink Normal View History

2025-11-17 15:20:25 +00:00
<template>
<view>
<view class="btn-container">
<button @click="btnCalc" type="primary" class="animated-button">{{ btnText }}</button>
</view>
<uni-segmented-control :current="current" :values="items" @clickItem="onClickItem" styleType="button"
activeColor="#4cd964"></uni-segmented-control>
<view class="content">
<view v-show="current === 0">
<meterPar v-model="parentMeterPar" :el-form-width="elFormItemWidth" />
</view>
<view v-show="current === 1">
<ngComponents v-model="parentMeterPar.dngComponents" :el-form-width="elFormItemWidthmin" />
</view>
<view v-show="current === 2">
<meterResult v-if="['0', '1', '2', '3'].includes(dMeterType)" :d-meter-type="dMeterType"
v-model="parentMeterResult" :el-form-width="elFormItemWidth" />
<NGResult v-if="['4', '5', '6', '7'].includes(dMeterType)" :d-meter-type="dMeterType"
v-model="parentNGResult" :el-form-width="elFormItemWidthmin"></NGResult>
</view>
</view>
<view v-if="isShowMessage" class="message-box">{{ message }}</view>
</view>
</template>
<script setup>
import {
ref,
onMounted,
onBeforeMount,
watch
} from 'vue';
import {
2025-11-19 14:30:38 +00:00
onLoad,onShow
2025-11-17 15:20:25 +00:00
} from '@dcloudio/uni-app';
import meterPar from '../components/meterPar';
import ngComponents from '../components/NGCom';
import meterResult from '../components/meterResult';
import NGResult from '../components/NGResult';
import {
calcNGPar,
calcFlow
} from '@/api/ngtools/NGCalcTools.js';
// 定义响应式数据
const items = ref(['工况参数', '组分数据', '计算结果'])
const current = ref(0)
const btnText = ref('');
const elFormItemWidth = ref(160);
2025-11-19 14:30:38 +00:00
const elFormItemWidthmin = ref(140);
2025-11-17 15:20:25 +00:00
const isShowMessage = ref(false);
const message = ref('');
const parentMeterPar = ref({
dFlowCalbz: '0',
dZcalbz: '0',
dCbtj: '0',
dpbM: 0,
dtbM: 0,
dpbE: 0,
dtbE: 0,
dPatm: 0.0981,
dPatmUnit: 2,
dngComponents: '',
dMeterType: '0',
dCoreType: '0',
dPtmode: '1',
dPipeType: '0',
dPipeD: 259.38,
dLenUnit: 3,
dPipeDtemp: 20,
dPileDtempU: 0,
dPipeMaterial: '11.16',
dOrificeD: 150.25,
dOrificeUnit: 3,
dOrificeDtemp: 0,
dOrificeDtempUnit: 0,
dOrificeMaterial: '16.6',
dOrificeSharpness: 0,
dOrificeRk: 0,
dOrificeRkLenU: 0,
dPf: 1.48,
dPfUnit: 2,
dPfType: '0',
dTf: 15,
dTfUnit: 0,
dDp: 12.5,
dDpUnit: 1,
dVFlowUnit: 0,
dVFlowWorkUnit: 0,
dMFlowUnit: 0,
dEFlowUnit: 6,
dCd: 0.9957,
dCdCalMethod: 0,
dMeterFactor: 2354,
dPulseNum: 12000,
dVFlowMax: 6,
dVFlowMin: 3,
dVFlowCon: 5,
dPfRangeMin: 0,
dPfRangeMax: 0,
dDpRangeMin: 0,
dDpRangeMax: 0,
dTfRangeMin: 0,
dTfRangeMax: 0,
dVGsc: 300,
dVGscUnit: 0,
dCalcType: 0, //0 流量 1 天然气 3 管束车
dBqdd: 0 //0 不计算1 计算 计算不确定度
});
const parentMeterResult = ref({
dE: 0,
dFG: 0,
dFT: 0,
dDViscosity: 0,
dDExpCoefficient: 0,
dRnPipe: 0,
dBk: 0,
dRoughNessPipe: 0,
dCdCorrect: 0,
dCdNozell: 0,
dVFlowb: 0,
dVFlowf: 0,
dVFlowUnit: 2,
dMFlowb: 0,
dMFlowUnit: 0,
dEFlowb: 0,
dEFlowUnit: 0,
dVelocityFlow: 0,
dVelocityUnit: 0,
dPressLost: 0,
dPressLostUnit: 0,
dBeta: 0,
dKappa: 0
});
const parentNGResult = ref({
dMrx: 0,
dZb: 0,
dZf: 0,
dFpv: 0,
dDb: 0,
dDf: 0,
dRhob: 0,
dRhof: 0,
dRD_Ideal: 0,
dRD_Real: 0,
dHo: 0,
dH: 0,
dS: 0,
dCpi: 0,
dCp: 0,
dCv: 0,
dk: 0,
dKappa: 0,
dSOS: 0,
dSOSUnit: 0,
dCstar: 0,
dHhvMol: 0,
dLhvMol: 0,
dHhvv: 0,
dLhvv: 0,
dHhvm: 0,
dLhvm: 0,
dZb11062: 0,
dRhob11062: 0,
dRhof11062: 0,
dRD_Ideal11062: 0,
dRD_Real11062: 0,
dWobbeIndex: 0,
dPc: 0,
dTC: 0,
dBzsx: 0,
dBzxx: 0,
dTotalC: 0,
dC2: 0,
dC2j: 0,
dC3j: 0,
dC4j: 0,
dC5j: 0,
dC6j: 0,
dC3C4: 0
});
const componentString = ref('');
const dMeterType = ref('0');
//在页面加载时获取参数
2025-11-19 14:30:38 +00:00
onLoad((options) => {
if (options.dMeterType) {
dMeterType.value = options.dMeterType;
parentMeterPar.value.dMeterType = dMeterType.value;
}
2025-11-17 15:20:25 +00:00
});
2025-11-19 14:30:38 +00:00
2025-11-17 15:20:25 +00:00
// 监听 dMeterType 的变化
watch(dMeterType, (newValue) => {
if (['0', '1', '2', '3'].includes(newValue)) {
btnText.value = '计算流量';
} else if (newValue === '4') {
btnText.value = '计算压缩因子';
} else if (newValue === '5') {
btnText.value = '计算声速';
} else if (newValue === '6') {
btnText.value = '计算发热量';
} else if (newValue === '7') {
btnText.value = '计算其他参数';
}
parentMeterPar.value.dMeterType = newValue;
console.log('dMeterType 变化后parentMeterPar:', parentMeterPar.value);
});
// 显示消息提示框
const showMessage = () => {
isShowMessage.value = true;
setTimeout(() => {
isShowMessage.value = false;
}, 1000); // 1 秒后自动消失
};
// 切换tab
const onClickItem = (e) => {
current.value = e.currentIndex
};
// 计算按钮点击事件
const btnCalc = () => {
if (['0', '1', '2', '3'].includes(dMeterType.value)) {
calcBtnFlow();
} else if (['4', '5', '6', '7'].includes(dMeterType.value)) {
calc();
}
};
// 计算天然气参数
const calc = async () => {
console.log(parentMeterPar.value);
if (parentMeterPar.value.dngComponents === '') {
message.value = '组分为空,请输入天然气组分!';
showMessage();
2025-11-19 14:30:38 +00:00
current.value = 1;
2025-11-17 15:20:25 +00:00
return;
}
// 清空 parentNGResult 的值
for (const key in parentNGResult.value) {
if (parentNGResult.value.hasOwnProperty(key)) {
parentNGResult.value[key] = 0;
}
}
try {
const res = await calcNGPar(parentMeterPar.value);
parentNGResult.value = res.data;
2025-11-19 14:30:38 +00:00
current.value = 2;
2025-11-17 15:20:25 +00:00
console.log('Response:', res);
} catch (error) {
console.error('Request error:', error);
uni.showToast({
title: '计算失败',
icon: 'none'
});
}
};
// 计算流量
const calcBtnFlow = async () => {
console.log(parentMeterPar.value);
if (parentMeterPar.value.dngComponents === '') {
message.value = '组分为空,请输入天然气组分!';
showMessage();
2025-11-19 14:30:38 +00:00
current.value = 1;
2025-11-17 15:20:25 +00:00
return;
}
// 清空 parentMeterResult 的值
for (const key in parentMeterResult.value) {
if (parentMeterResult.value.hasOwnProperty(key)) {
parentMeterResult.value[key] = 0;
}
}
try {
const res = await calcFlow(parentMeterPar.value);
parentMeterResult.value = res.data[0];
console.log('Response:', parentMeterResult.value);
2025-11-19 14:30:38 +00:00
current.value = 2;
2025-11-17 15:20:25 +00:00
} catch (error) {
console.error('Request error:', error);
uni.showToast({
title: '计算失败',
icon: 'none'
});
}
};
</script>
<style scoped>
.page-container {
width: 100%;
min-height: 100vh;
box-sizing: border-box;
}
.btn-container {
text-align: center;
margin: 20rpx 0;
padding: 0 20rpx;
}
.animated-button {
background-color: #007AFF;
color: white;
padding: 20rpx 40rpx;
border: none;
border-radius: 10rpx;
font-size: 32rpx;
transition: all 0.3s ease;
width: 100%;
max-width: 400rpx;
}
.animated-button:hover {
background-color: #0056b3;
transform: scale(1.05);
}
.animated-button:active {
transform: scale(0.95);
}
.content {
width: 100%;
padding: 20rpx;
box-sizing: border-box;
}
.tab-content {
width: 100%;
}
.message-box {
position: fixed;
top: 40rpx;
left: 50%;
transform: translateX(-50%);
background-color: #333;
color: white;
padding: 20rpx 40rpx;
border-radius: 10rpx;
z-index: 9999;
font-size: 28rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.3);
}
/* 确保分段控制器宽度正确 */
:deep(.uni-segmented-control) {
width: 100%;
padding: 0 20rpx;
box-sizing: border-box;
}
/* 移动端适配 */
@media (max-width: 750px) {
.animated-button {
padding: 24rpx 36rpx;
font-size: 30rpx;
}
.content {
padding: 15rpx;
}
}
</style>