完成液面深度计算功能

This commit is contained in:
liaodeyun 2025-12-04 15:19:14 +08:00
parent 067d3cdc2e
commit 3a57b926fd
4 changed files with 288 additions and 252 deletions

View File

@ -3,7 +3,8 @@
<!-- <div>当前 dMeterType 的值: {{ dMeterType }}</div> <!-- <div>当前 dMeterType 的值: {{ dMeterType }}</div>
<div>NGResult 数据: {{ NGResult }}</div> --> <div>NGResult 数据: {{ NGResult }}</div> -->
<h3 v-if="dMeterType === '4'">GB/T 17747</h3> <h3 v-if="dMeterType === '4'">GB/T 17747</h3>
<el-form v-if="dMeterType === '4'" :model="NGResult" label-position="top" ref="queryRef" size="small" :inline="false" label-width="160px" class="flex-form"> <el-form v-if="dMeterType === '4'" :model="NGResult" label-position="top" ref="queryRef" size="small"
:inline="false" label-width="160px" class="flex-form">
<el-form-item :style="{ width: selectWidth + 'px' }" label="分子量" prop="dMrx"> <el-form-item :style="{ width: selectWidth + 'px' }" label="分子量" prop="dMrx">
<el-input readonly v-model="NGResult.dMrx" placeholder="请输入分子量" /> <el-input readonly v-model="NGResult.dMrx" placeholder="请输入分子量" />
</el-form-item> </el-form-item>
@ -37,7 +38,8 @@
</el-form> </el-form>
<h3 v-if="dMeterType === '5'">AGA No10</h3> <h3 v-if="dMeterType === '5'">AGA No10</h3>
<el-form v-if="dMeterType === '5'" :model="NGResult" label-position="top" ref="queryRef" size="small" :inline="false" label-width="160px" class="flex-form"> <el-form v-if="dMeterType === '5'" :model="NGResult" label-position="top" ref="queryRef" size="small"
:inline="false" label-width="160px" class="flex-form">
<el-form-item :style="{ width: selectWidth + 'px' }" label="理想气体的比焓" prop="dHo"> <el-form-item :style="{ width: selectWidth + 'px' }" label="理想气体的比焓" prop="dHo">
<el-input readonly v-model="NGResult.dHo" placeholder="请输入理想气体的比焓" /> <el-input readonly v-model="NGResult.dHo" placeholder="请输入理想气体的比焓" />
</el-form-item> </el-form-item>
@ -63,15 +65,8 @@
<el-input readonly v-model="NGResult.dKappa" placeholder="请输入等熵指数" /> <el-input readonly v-model="NGResult.dKappa" placeholder="请输入等熵指数" />
</el-form-item> </el-form-item>
<el-form-item :style="{ width: selectWidth + 'px' }" label="声速" prop="dSOS"> <el-form-item :style="{ width: selectWidth + 'px' }" label="声速" prop="dSOS">
<unit-converter <unit-converter v-model="NGResult.dSOS" :unit-type="'speed'" v-model:unit-order="NGResult.dSOSUnit"
v-model="NGResult.dSOS" :show-english-only="true" :decimal-places="5" :input-disable="true" :width="selectWidth" />
:unit-type="'speed'"
v-model:unit-order="NGResult.dSOSUnit"
:show-english-only="true"
:decimal-places="5"
:input-disable="true"
:width="selectWidth"
/>
<!-- <el-input readonly v-model="NGResult.dSOS" placeholder="请输入声速" /> --> <!-- <el-input readonly v-model="NGResult.dSOS" placeholder="请输入声速" /> -->
</el-form-item> </el-form-item>
<el-form-item :style="{ width: selectWidth + 'px' }" label="临界流函数" prop="dCstar"> <el-form-item :style="{ width: selectWidth + 'px' }" label="临界流函数" prop="dCstar">
@ -80,7 +75,8 @@
</el-form> </el-form>
<h3 v-if="dMeterType === '6'">GB/T 11062</h3> <h3 v-if="dMeterType === '6'">GB/T 11062</h3>
<el-form v-if="dMeterType === '6'" :model="NGResult" label-position="top" ref="queryRef" size="small" :inline="false" label-width="160px" class="flex-form"> <el-form v-if="dMeterType === '6'" :model="NGResult" label-position="top" ref="queryRef" size="small"
:inline="false" label-width="160px" class="flex-form">
<el-form-item :style="{ width: selectWidth + 'px' }" label="摩尔高位发热量" prop="dHhvMol"> <el-form-item :style="{ width: selectWidth + 'px' }" label="摩尔高位发热量" prop="dHhvMol">
<el-input readonly v-model="NGResult.dHhvMol" placeholder="请输入摩尔高位发热量" /> <el-input readonly v-model="NGResult.dHhvMol" placeholder="请输入摩尔高位发热量" />
</el-form-item> </el-form-item>
@ -120,7 +116,8 @@
</el-form> </el-form>
<h3 v-if="dMeterType === '7'">其他</h3> <h3 v-if="dMeterType === '7'">其他</h3>
<el-form v-if="dMeterType === '7'" :model="NGResult" label-position="top" ref="queryRef" size="small" :inline="false" label-width="160px" class="flex-form"> <el-form v-if="dMeterType === '7'" :model="NGResult" label-position="top" ref="queryRef" size="small"
:inline="false" label-width="160px" class="flex-form">
<el-form-item :style="{ width: selectWidth + 'px' }" label="临界压力" prop="dPc"> <el-form-item :style="{ width: selectWidth + 'px' }" label="临界压力" prop="dPc">
<el-input readonly v-model="NGResult.dPc" placeholder="请输入临界压力" /> <el-input readonly v-model="NGResult.dPc" placeholder="请输入临界压力" />
</el-form-item> </el-form-item>
@ -158,169 +155,202 @@
<el-input readonly v-model="NGResult.dC3C4" placeholder="请输入C3C4组分含量(kg/m3)" /> <el-input readonly v-model="NGResult.dC3C4" placeholder="请输入C3C4组分含量(kg/m3)" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<h3 v-if="dMeterType === '20'">井下液面深度</h3>
<el-form v-if="dMeterType === '20'" :model="NGResult" label-position="top" ref="queryRef" size="small"
:inline="false" label-width="160px" class="flex-form">
<el-form-item :style="{ width: selectWidth + 'px' }" label="井口声速(m/s)" prop="dPc">
<el-input readonly v-model="NGResult.initialSOS" placeholder="井口声速" />
</el-form-item>
<el-form-item :style="{ width: selectWidth + 'px' }" label="粗算深度(m)" prop="dPc">
<el-input readonly v-model="NGResult.initialEstimate" placeholder="粗算深度" />
</el-form-item>
<el-form-item :style="{ width: selectWidth + 'px' }" label="修正深度(m)" prop="dTC">
<el-input readonly v-model="NGResult.correctedDepth" placeholder="修正深度" />
</el-form-item>
<el-form-item :style="{ width: selectWidth + 'px' }" label="迭代次数" prop="dBzsx">
<el-input readonly v-model="NGResult.iterations" placeholder="迭代次数" />
</el-form-item>
</el-form>
<ul>
<view v-for="item,index in NGResult.dataSegment" style="width: 100%;">
<li>{{item}}</li>
</view>
</ul>
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, watch, onMounted } from 'vue'; import {
import unitConverter from '@/components/inputValueUnit/index'; ref,
watch,
onMounted
} from 'vue';
import unitConverter from '@/components/inputValueUnit/index';
// props // props
const props = defineProps({ const props = defineProps({
elFormWidth: { elFormWidth: {
type: Number, type: Number,
default: 180 default: 180
}, },
dMeterType: { dMeterType: {
type: String, type: String,
default: 0 default: '0'
}, },
modelValue: { modelValue: {
type: Object, type: Object,
default: () => ({ default: () => ({
dMrx: 0, dMrx: 0,
dZb: 0, dZb: 0,
dZf: 0, dZf: 0,
dFpv: 0, dFpv: 0,
dDb: 0, dDb: 0,
dDf: 0, dDf: 0,
dRhob: 0, dRhob: 0,
dRhof: 0, dRhof: 0,
dRD_Ideal: 0, dRD_Ideal: 0,
dRD_Real: 0, dRD_Real: 0,
dHo: 0, dHo: 0,
dH: 0, dH: 0,
dS: 0, dS: 0,
dCpi: 0, dCpi: 0,
dCp: 0, dCp: 0,
dCv: 0, dCv: 0,
dk: 0, dk: 0,
dKappa: 0, dKappa: 0,
dSOS: 0, dSOS: 0,
dCstar: 0, dCstar: 0,
dHhvMol: 0, dHhvMol: 0,
dLhvMol: 0, dLhvMol: 0,
dHhvv: 0, dHhvv: 0,
dLhvv: 0, dLhvv: 0,
dHhvm: 0, dHhvm: 0,
dLhvm: 0, dLhvm: 0,
dZb11062: 0, dZb11062: 0,
dRhob11062: 0, dRhob11062: 0,
dRhof11062: 0, dRhof11062: 0,
dRD_Ideal11062: 0, dRD_Ideal11062: 0,
dRD_Real11062: 0, dRD_Real11062: 0,
dWobbeIndex: 0, dWobbeIndex: 0,
dPc: 0, dPc: 0,
dTC: 0, dTC: 0,
dBzsx: 0, dBzsx: 0,
dBzxx: 0, dBzxx: 0,
dTotalC: 0, dTotalC: 0,
dC2: 0, dC2: 0,
dC2j: 0, dC2j: 0,
dC3j: 0, dC3j: 0,
dC4j: 0, dC4j: 0,
dC5j: 0, dC5j: 0,
dC6j: 0, dC6j: 0,
dC3C4: 0 dC3C4: 0
}) })
} }
}); });
// //
const NGResult = ref({ const NGResult = ref({
dMrx: 0, dMrx: 0,
dZb: 0, dZb: 0,
dZf: 0, dZf: 0,
dFpv: 0, dFpv: 0,
dDb: 0, dDb: 0,
dDf: 0, dDf: 0,
dRhob: 0, dRhob: 0,
dRhof: 0, dRhof: 0,
dRD_Ideal: 0, dRD_Ideal: 0,
dRD_Real: 0, dRD_Real: 0,
dHo: 0, dHo: 0,
dH: 0, dH: 0,
dS: 0, dS: 0,
dCpi: 0, dCpi: 0,
dCp: 0, dCp: 0,
dCv: 0, dCv: 0,
dk: 0, dk: 0,
dKappa: 0, dKappa: 0,
dSOS: 0, dSOS: 0,
dSOSUnit: 0, dSOSUnit: 0,
dCstar: 0, dCstar: 0,
dHhvMol: 0, dHhvMol: 0,
dLhvMol: 0, dLhvMol: 0,
dHhvv: 0, dHhvv: 0,
dLhvv: 0, dLhvv: 0,
dHhvm: 0, dHhvm: 0,
dLhvm: 0, dLhvm: 0,
dZb11062: 0, dZb11062: 0,
dRhob11062: 0, dRhob11062: 0,
dRhof11062: 0, dRhof11062: 0,
dRD_Ideal11062: 0, dRD_Ideal11062: 0,
dRD_Real11062: 0, dRD_Real11062: 0,
dWobbeIndex: 0, dWobbeIndex: 0,
dPc: 0, dPc: 0,
dTC: 0, dTC: 0,
dBzsx: 0, dBzsx: 0,
dBzxx: 0, dBzxx: 0,
dTotalC: 0, dTotalC: 0,
dC2: 0, dC2: 0,
dC2j: 0, dC2j: 0,
dC3j: 0, dC3j: 0,
dC4j: 0, dC4j: 0,
dC5j: 0, dC5j: 0,
dC6j: 0, dC6j: 0,
dC3C4: 0 dC3C4: 0
}); });
const selectWidth = ref(180); const selectWidth = ref(180);
// elFormWidth // elFormWidth
watch( watch(
() => props.elFormWidth, () => props.elFormWidth,
(newVal) => { (newVal) => {
selectWidth.value = newVal; selectWidth.value = newVal;
}, }, {
{ deep: true } deep: true
); }
);
// value // value
watch( watch(
() => props.modelValue, () => props.modelValue,
(newVal) => { (newVal) => {
console.log(newVal); console.log(newVal);
const processedValue = { ...newVal }; const processedValue = {
for (const key in processedValue) { ...newVal
if (processedValue.hasOwnProperty(key)) { };
const value = processedValue[key]; for (const key in processedValue) {
// if (processedValue.hasOwnProperty(key)) {
if (typeof value === 'number' && !isNaN(value) && isFinite(value)) { const value = processedValue[key];
// 使 toFixed //
processedValue[key] = parseFloat(value.toFixed(6)); if (typeof value === 'number' && !isNaN(value) && isFinite(value)) {
// 使 toFixed
processedValue[key] = parseFloat(value.toFixed(6));
}
} }
} }
NGResult.value = JSON.parse(JSON.stringify(processedValue));
}, {
deep: true
} }
NGResult.value = JSON.parse(JSON.stringify(processedValue)); );
},
{ deep: true }
);
// selectWidth // selectWidth
onMounted(() => { onMounted(() => {
selectWidth.value = props.elFormWidth; selectWidth.value = props.elFormWidth;
}); });
</script> </script>
<style scoped> <style scoped>
/* 可按需添加样式 */ /* 可按需添加样式 */
.app-container { .app-container {
height: 100%; height: 100%;
} }
.flex-form {
display: grid; .flex-form {
/* 优化后的自适应规则 */ display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); /* 优化后的自适应规则 */
gap: 5px; grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr));
} gap: 5px;
</style> }
</style>

View File

@ -186,9 +186,9 @@
<!-- 液面深度计算 --> <!-- 液面深度计算 -->
<el-form-item v-if="meterPar.dMeterType === '20'" :style="{ width: selectWidth + 'px' }" label="常温层深度" <el-form-item v-if="meterPar.dMeterType === '20'" :style="{ width: selectWidth + 'px' }" label="常温层深度"
prop="dVFlowMax"> prop="dVFlowMax">
<unit-converter v-model="meterPar.dVFlowMax" :unit-type="'length'" <unit-converter v-model="meterPar.dVFlowMax" :unit-type="'user'" v-model:unit-order="meterPar.dVGscUnit"
v-model:unit-order="meterPar.dVFlowUnit" :show-english-only="false" :decimal-places="5" :show-english-only="false" :decimal-places="5" :user-defined="true" :user-definedunit-name="'米'"
:width="selectWidth" /> :enable-convert="false" :width="selectWidth" />
</el-form-item> </el-form-item>
<el-form-item v-if="meterPar.dMeterType === '20'" :style="{ width: selectWidth + 'px' }" label="测量时间" <el-form-item v-if="meterPar.dMeterType === '20'" :style="{ width: selectWidth + 'px' }" label="测量时间"
prop="dVFlowMin"> prop="dVFlowMin">

View File

@ -94,9 +94,9 @@
dCdCalMethod: 0, dCdCalMethod: 0,
dMeterFactor: 2354, dMeterFactor: 2354,
dPulseNum: 12000, dPulseNum: 12000,
dVFlowMax: 50, dVFlowMax: 30,
dVFlowMin: 8, dVFlowMin: 12,
dVFlowCon: 0.025, dVFlowCon: 0.03,
dPfRangeMin: 0, dPfRangeMin: 0,
dPfRangeMax: 0, dPfRangeMax: 0,
dDpRangeMin: 0, dDpRangeMin: 0,
@ -233,8 +233,7 @@
calcBtnFlow(); calcBtnFlow();
} else if (['4', '5', '6', '7', ].includes(dMeterType.value)) { } else if (['4', '5', '6', '7', ].includes(dMeterType.value)) {
calc(); calc();
} } else if (['20'].includes(dMeterType.value)) {
else if ([ '20'].includes(dMeterType.value)) {
calcBtnWaterDeep(); calcBtnWaterDeep();
} }
}; };
@ -259,7 +258,7 @@
try { try {
console.log(parentMeterPar.value) console.log(parentMeterPar.value)
console.log(dMeterType.value) console.log(dMeterType.value)
const res = await calcNGPar(parentMeterPar.value); const res = await calcNGPar(parentMeterPar.value);
parentNGResult.value = res.data; parentNGResult.value = res.data;
activeTab.value = 'meterresult'; activeTab.value = 'meterresult';
console.log('Response:', res); console.log('Response:', res);
@ -268,7 +267,7 @@
} }
}; };
// //
const calcBtnWaterDeep = async () => { const calcBtnWaterDeep = async () => {
console.log(parentMeterPar.value); console.log(parentMeterPar.value);
if (parentMeterPar.value.dngComponents === '') { if (parentMeterPar.value.dngComponents === '') {
@ -286,8 +285,8 @@
try { try {
console.log(parentMeterPar.value) console.log(parentMeterPar.value)
console.log(dMeterType.value) console.log(dMeterType.value)
const res = await calcWaterDeep(parentMeterPar.value); const res = await calcWaterDeep(parentMeterPar.value);
parentNGResult.value = res.data; parentNGResult.value = res.data;

View File

@ -1,79 +1,86 @@
import { defineConfig, loadEnv } from 'vite' import {
defineConfig,
loadEnv
} from 'vite'
import path from 'path' import path from 'path'
import createVitePlugins from './vite/plugins' import createVitePlugins from './vite/plugins'
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig(({ mode, command }) => { export default defineConfig(({
const env = loadEnv(mode, process.cwd()) mode,
const { VITE_APP_ENV, VITE_BASE_ROUTER } = env command
return { }) => {
// 部署生产环境和开发环境下的URL。 const env = loadEnv(mode, process.cwd())
// 默认情况下vite 会假设你的应用是被部署在一个域名的根路径上 const {
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 VITE_APP_ENV,
base: VITE_APP_ENV === 'production' ? VITE_BASE_ROUTER : VITE_BASE_ROUTER, VITE_BASE_ROUTER
plugins: createVitePlugins(env, command === 'build'), } = env
resolve: { return {
// https://cn.vitejs.dev/config/#resolve-alias // 部署生产环境和开发环境下的URL。
alias: { // 默认情况下vite 会假设你的应用是被部署在一个域名的根路径上
// 设置路径 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
'~': path.resolve(__dirname, './'), base: VITE_APP_ENV === 'production' ? VITE_BASE_ROUTER : VITE_BASE_ROUTER,
// 设置别名 plugins: createVitePlugins(env, command === 'build'),
'@': path.resolve(__dirname, './src'), resolve: {
'@lib': path.resolve(__dirname, './lib'), // https://cn.vitejs.dev/config/#resolve-alias
}, alias: {
// https://cn.vitejs.dev/config/#resolve-extensions // 设置路径
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'] '~': path.resolve(__dirname, './'),
}, // 设置别名
// vite 相关配置 '@': path.resolve(__dirname, './src'),
server: { '@lib': path.resolve(__dirname, './lib'),
port: 80, },
host: true, // https://cn.vitejs.dev/config/#resolve-extensions
open: false, // 启动时是否启动自动打开浏览器 extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
proxy: { },
// https://cn.vitejs.dev/config/#server-proxy // vite 相关配置
'/dev-api': { server: {
port: 80,
target: 'http://192.168.3.19:9999', host: true,
changeOrigin: true, open: false, // 启动时是否启动自动打开浏览器
rewrite: (p) => p.replace(/^\/dev-api/, '') proxy: {
}, // https://cn.vitejs.dev/config/#server-proxy
'/v3': { '/dev-api': {
target: 'http://ngtools.cn:9999',
changeOrigin: true, target: 'http://10.75.166.198:9999',
rewrite: (p) => p.replace(/^\/dev-api/, '') changeOrigin: true,
} rewrite: (p) => p.replace(/^\/dev-api/, '')
} },
}, '/v3': {
//fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file target: 'http://ngtools.cn:9999',
css: { changeOrigin: true,
preprocessorOptions: { rewrite: (p) => p.replace(/^\/dev-api/, '')
scss: { }
api: 'modern-compiler' }
} },
}, //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file
postcss: { css: {
plugins: [ preprocessorOptions: {
{ scss: {
postcssPlugin: 'internal:charset-removal', api: 'modern-compiler'
AtRule: { }
charset: (atRule) => { },
if (atRule.name === 'charset') { postcss: {
atRule.remove(); plugins: [{
} postcssPlugin: 'internal:charset-removal',
} AtRule: {
} charset: (atRule) => {
} if (atRule.name === 'charset') {
] atRule.remove();
} }
}, }
optimizeDeps: { }
include: [ }]
'@lib/vform/designer.umd.js', }
] },
}, optimizeDeps: {
build: { include: [
commonjsOptions: { '@lib/vform/designer.umd.js',
include: /node_modules|lib/ ]
} },
} build: {
} commonjsOptions: {
}) include: /node_modules|lib/
}
}
}
})