Преглед изворни кода

feat(hnyzConfiguratePage):换热,铁合金流程相关组件

HMY пре 9 месеци
родитељ
комит
e251115d25

+ 11 - 6
ui/src/components/HnyzDcs/ArrowComponent.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="arrow_default" :style="arrowStyle" @click="handleClick">
         <div class="arrow_text" :style="getFontSize" v-if="!props.iconFirst">{{ props.arrowText }}</div>
-        <i class="icon iconfont icon-rightArrow arrow_icon" :style="{ transform: getArrowRotation }"
+        <i class="icon iconfont icon-rightArrow arrow_icon" :style="arrowIconStyle"
             :class="{ can_click: !!props.linkUrl }"></i>
         <div class="arrow_text" :style="getFontSize" v-if="props.iconFirst">{{ props.arrowText }}</div>
     </div>
@@ -39,6 +39,11 @@ const props = defineProps({
         type: Number,
         default: 30,
     },
+    //图标大小
+    iconSize: {
+        type: Number,
+        default: 100,
+    },
 })
 
 // 箭头容器样式(flex布局)
@@ -50,15 +55,15 @@ const arrowStyle = computed(() => ({
 }))
 
 // 箭头方向转换
-const getArrowRotation = computed(() => {
-    const map = {
+const arrowIconStyle = computed(() => ({
+    fontSize: `${props.iconSize}px`,
+    transform: {
         up: 'rotate(-90deg)',
         down: 'rotate(90deg)',
         left: 'rotate(180deg)',
         right: 'rotate(0deg)',
-    }
-    return map[props.arrowDir] || 'rotate(0deg)'
-})
+    }[props.arrowDir] || 'rotate(0deg)',
+}))
 
 // 字体大小
 const getFontSize = computed(() => ({

+ 225 - 0
ui/src/components/HnyzDcs/ETypeTankValves3Component.vue

@@ -0,0 +1,225 @@
+<template>
+    <div class="tank_valves" :style="getTankBodyStyle">
+        <!-- 换热器 温度,搅拌-->
+        <ETypeTank :title="title" :tempValue="tempValue" :fanStatus="fanStatus" :iconWidth="iconWidth"
+            :iconHeight="iconHeight" :iconSize="iconSize" />
+        <!-- 阀门进度 -->
+        <div class="valve_progress">
+            <!-- 左1 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[0]" :pipeLength="490" :pipeLeftOffset="-310"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress1" />
+            <!--  左2 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[1]" :pipeLength="235" :pipeLeftOffset="-83"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress2" />
+            <!-- 左3  -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[2]" :pipeLength="260" :pipeLeftOffset="-50"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                :pipeReverse="true" class="valve_progress3" />
+            <!-- 右 1 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[3]" :pipeLength="336" :pipeLeftOffset="-136"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                :pipeReverse="true" class="valve_progress4" />
+            <!-- 右 2 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[4]" :pipeLength="265" :pipeLeftOffset="-110"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress5" />
+            <!-- 右 3 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[5]" :pipeLength="265" :pipeLeftOffset="-110"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress6" />
+            <!-- 右3-泵后面的阀门 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[6]" :pipeLength="385" :pipeLeftOffset="-205"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus" :rotateAngle="90"
+                class="valve_progress7 rotate_90" />
+        </div>
+        <!-- 泵进度 -->
+        <div class="pump_progress">
+            <PumpProgress :title="pumpNames[0]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :showPipe="true"
+                :pipeType="steam" pumpDirection="R" :pipeLength="120" class="pump_progress1" />
+            <PumpProgress :title="pumpNames[1]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :showPipe="true"
+                :pipeType="steam" pumpDirection="L" :pipeLength="157" class="pump_progress2" />
+            <PumpProgress :title="pumpNames[2]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :showPipe="true"
+                :pipeType="steam" pumpDirection="L" :pipeLength="60" class="pump_progress3" />
+        </div>
+        <!-- 拓展管道 -->
+        <div class="pipe_extend" v-if="pumpNames[2]">
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth" class="progress_steam progress_pos1" />
+        </div>
+    </div>
+</template>
+
+<script setup>
+import ETypeTank from '@/components/HnyzDcs/ETypeTankComponent.vue';
+import ValveProgress from '@/components/DCS/ValveProgressComponent.vue';
+import PumpProgress from '@/components/DCS/PumpComponent.vue';
+import Pipe from '@/components/HnyzDcs/PipeComponent.vue';
+
+import { computed } from 'vue'
+const initValveStatusArr = [true]
+const initPipeStatus = true
+const props = defineProps({
+    iconSize: {//图标大小
+        type: Number,
+        default: 200,
+    },
+    title: {//罐名
+        type: String,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+    tempValue: {//temp
+        type: Number,
+        default: null
+    },
+    fanStatus: {//风扇状态
+        type: Boolean,
+        default: undefined,
+    },
+})
+
+//默认阀门名称数组
+const defaultValveNames = new Array(6).fill('ACV_default')
+//泵默认名称
+const defaultPumpNames = new Array(3).fill('P_default')
+
+// 阀门名称映射表
+const valveNameArr = {
+    'E6002': ['ACV6101', 'ACV6102', 'ACV6103', 'ACV6104', 'ACV6105', ''],
+    'E6003': ['ACV6106', 'ACV6107', 'ACV6108', 'ACV6109', 'ACV6110', ''],
+    'E6004': ['ACV6114', 'ACV6113', '', 'ACV6117', 'ACV6118', 'ACV6119', 'ACV6120'],
+    'E6005': ['ACV6123', '', '', 'ACV6126', 'ACV6127', 'ACV6128', 'ACV6129'],
+    'E6006': ['ACV6132', '', '', 'ACV6135', 'ACV6136', 'ACV6137', 'ACV6138'],
+    'E6007': ['ACV6139', 'ACV6140', 'ACV6141', 'ACV6142', 'ACV6143', 'ACV6144'],
+    'E6008': ['', '', '', '', '', '']
+}
+//泵名称映射表
+const pumpNameArr = {
+    'E6002': ['P6106', 'P6102', ''],
+    'E6003': ['P6103', 'P6104', ''],
+    'E6004': ['', 'P6106', 'P6107'],
+    'E6005': ['', 'P6109', 'P6110'],
+    'E6006': ['', 'P6112', 'P6113'],
+    'E6007': ['P6114', 'P6115', 'P6116'],
+    'E6008': ['', '', '']
+}
+
+//阀门名称数组,根据罐名来匹配
+const valveNames = computed(() => {
+    return valveNameArr[props.title] || defaultValveNames
+})
+//泵名称
+const pumpNames = computed(() => {
+    return pumpNameArr[props.title] || defaultPumpNames
+})
+
+//罐体样式
+const getTankBodyStyle = computed(() => ({
+    width: `${props.iconWidth ?? props.iconSize}px`,
+    height: `${props.iconHeight ?? props.iconSize}px`,
+}))
+
+//阀门icon大小(罐子200-阀门37.5)
+const valveIconSize = computed(() => {
+    return (props.iconWidth ?? props.iconSize) * 0.18755;
+});
+
+//泵icon大小(罐子200-泵60)
+const pumpIconSize = computed(() => {
+    return (props.iconWidth ?? props.iconSize) * 0.3;
+});
+
+//管道宽度
+const pipeWidth = computed(() => {
+    return (props.iconWidth ?? props.iconSize) * 0.03;
+});
+</script>
+
+<style scoped lang="scss">
+.tank_valves {
+    position: relative;
+    z-index: 10;
+
+    .valve_progress {
+        .valve_progress1 {
+            position: absolute;
+            top: 3%;
+            left: 0%;
+        }
+
+        .valve_progress2 {
+            position: absolute;
+            top: 50.5%;
+            left: 0%;
+        }
+
+        .valve_progress3 {
+            position: absolute;
+            top: 83%;
+            left: 0%;
+        }
+
+        .valve_progress4 {
+            position: absolute;
+            top: 3%;
+            left: 95%;
+        }
+
+        .valve_progress5 {
+            position: absolute;
+            top: 41%;
+            left: 95%;
+        }
+
+        .valve_progress6 {
+            position: absolute;
+            top: 83%;
+            left: 95%;
+        }
+
+        .valve_progress7 {
+            position: absolute;
+            top: 118%;
+            left: 185%;
+        }
+    }
+
+    .pump_progress {
+        .pump_progress1 {
+            position: absolute;
+            top: 94.5%;
+            left: -36%;
+            transform: translate(-50%, -50%);
+        }
+
+        .pump_progress2 {
+            position: absolute;
+            top: 52.7%;
+            left: 134%;
+            transform: translate(-50%, -50%);
+        }
+
+        .pump_progress3 {
+            position: absolute;
+            top: 94.5%;
+            left: 134%;
+            transform: translate(-50%, -50%);
+        }
+    }
+
+    .pipe_extend {
+        .progress_pos1 {
+            position: absolute;
+            top: 70%;
+            left: 130%;
+            width: 53%;
+        }
+    }
+
+}
+</style>

+ 91 - 0
ui/src/components/HnyzDcs/GorXTypeTankValvesComponent.vue

@@ -0,0 +1,91 @@
+<template>
+    <!-- G或X型罐体 -->
+    <div class="tank_body">
+        <!-- 罐体 -->
+        <i class="icon iconfont-hnyz-colour icon-hnyz-colourheatExchanger tank" :style="getTankStyle">
+            <!-- 标题 -->
+            <div class="tank_title" :style="{ fontSize: `${iconSize * 0.15}px` }" v-if="title">{{ title }}</div>
+        </i>
+        <Pipe :pipeStatus="pipeStatus" :strokeWidth="strokeWidth" class="pipe_pos rotate_90 progress_steam" :style="{width: `${iconHeight * 1.35}px`}"/>
+    </div>
+</template>
+
+<script setup>
+import Pipe from '@/components/HnyzDcs/PipeComponent.vue'
+import { computed } from 'vue'
+
+const props = defineProps({
+    iconSize: {//图标大小
+        type: Number,
+        default: 200,
+    },
+    title: {//罐名
+        type: String,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+    pipeStatus: {//管道状态
+        type: Boolean,
+        default: false,
+    },
+    strokeWidth: {//管道宽度
+        type: Number,
+    }
+})
+//解构
+const { iconSize, title, iconWidth, iconHeight } = props
+
+// 罐子样式
+const getTankStyle = computed(() => {
+    const style = {
+        fontSize: iconSize + 'px',
+        display: 'block',
+        margin: '0 auto',
+    }
+    //根据传进来的iconWidth和iconHeight来控制图标的大小
+    const scaleX = iconWidth ? iconWidth / iconSize : 1
+    const scaleY = iconHeight ? iconHeight / iconSize : 1
+
+    if (scaleX !== 1 || scaleY !== 1) {
+        style.transform = `scale(${scaleX}, ${scaleY})`
+        style.transformOrigin = 'center center'
+    }
+
+    return style
+})
+
+</script>
+
+<style scoped lang="scss">
+//水位罐
+.tank_body {
+    text-align: center;
+    position: relative;
+
+    .tank {
+        position: relative;
+        z-index: 10;
+
+        //罐子名称
+        .tank_title {
+            position: absolute;
+            top: 80%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+            color: #e65100;
+            font-weight: bold;
+        }
+    }
+
+    .pipe_pos {
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        width: 200%;
+    }
+}
+</style>

+ 273 - 0
ui/src/components/HnyzDcs/GorXTypeTanksValvesComponent.vue

@@ -0,0 +1,273 @@
+<template>
+    <div class="tank_valves" :style="getTankBodyStyle">
+        <!-- G或X型罐体 -->
+        <div class="abreastTanks">
+            <GorXTypeTankValves :title="tankNames[0]" :iconWidth="iconWidth" :iconHeight="iconHeight"
+                :iconSize="iconSize" :strokeWidth="pipeWidth" :pipeStatus="initPipeStatus" />
+            <GorXTypeTankValves :title="tankNames[1]" :iconWidth="iconWidth" :pipeStatus="initPipeStatus"
+                :strokeWidth="pipeWidth" :iconHeight="iconHeight" :iconSize="iconSize" />
+            <GorXTypeTankValves :title="tankNames[2]" :iconWidth="iconWidth" :pipeStatus="initPipeStatus"
+                :strokeWidth="pipeWidth" :iconHeight="iconHeight" :iconSize="iconSize" />
+        </div>
+
+        <!-- 阀门进度 -->
+        <div class="valve_progress">
+            <!-- 左下 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[0]" :pipeLength="1000" :pipeLeftOffset="-223"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress1" />
+            <!-- 左上 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[1]" :pipeLength="460" :pipeLeftOffset="-223"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress2" />
+            <!-- 右下 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[2]" :pipeLength="250" :pipeLeftOffset="-52"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress3" />
+            <!-- 右上 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[3]" :pipeLength="250" :pipeLeftOffset="-52"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress4" />
+        </div>
+        <!-- 泵进度 -->
+        <div class="pump_progress">
+            <PumpProgress :title="pumpNames[0]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :showPipe="false"
+                :pipeType="steam" pumpDirection="L" :pipeLength="120" class="pump_progress1" />
+        </div>
+        <!-- 拓展管道 -->
+        <div class="pipe_extend">
+            <!-- 下方流进泵的拓展管道  -->
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth" class="progress_steam progress_pos1" />
+            <!-- 泵向上拓展管道  -->
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth"
+                class="progress_steam progress_pos2 rotate_90" />
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth" class="progress_steam progress_pos3 rotate_90"
+                v-if="valveNames[3]" />
+            <!-- 左上阀门联通管道 -->
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth"
+                class="progress_steam progress_pos4 rotate_270" />
+        </div>
+        <!-- 大箭头指向 -->
+        <div class="arrows">
+            <Arrow arrowDir="right" arrowText="人工降雨" :iconSize="65" :fontSize="10" class="arrow_pos1" />
+            <Arrow arrowDir="right" arrowText="人工降雨" :iconSize="65" :fontSize="10" class="arrow_pos2" v-if="valveNames[3]"/>
+            <Arrow arrowDir="right" arrowText="外排" :iconSize="65" :fontSize="10" class="arrow_pos3" v-if="valveNames[2]"/>
+        </div>
+    </div>
+</template>
+
+<script setup>
+import GorXTypeTankValves from '@/components/HnyzDcs/GorXTypeTankValvesComponent.vue';
+import ValveProgress from '@/components/DCS/ValveProgressComponent.vue';
+import PumpProgress from '@/components/DCS/PumpComponent.vue';
+import Pipe from '@/components/HnyzDcs/PipeComponent.vue';
+import Arrow from '@/components/HnyzDcs/ArrowComponent.vue';
+
+import { computed } from 'vue'
+const initValveStatusArr = [true]
+const initPipeStatus = true
+const props = defineProps({
+    iconSize: {//图标大小
+        type: Number,
+        default: 200,
+    },
+    title: {//罐名
+        type: String,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+    tempValue: {//temp
+        type: Number,
+        default: null
+    },
+    fanStatus: {//风扇状态
+        type: Boolean,
+        default: undefined,
+    },
+    tankType: {//罐型
+        type: String,
+        default: 'G'
+    },
+})
+
+//默认阀门名称数组
+const defaultValveNames = new Array(4).fill('ACV_default')
+//泵默认名称
+const defaultPumpNames = new Array(1).fill('P_default')
+
+// 阀门名称映射表
+const valveNameArr = {
+    'G': ['QQF1004', 'QQF1018', '', ''],
+    'X': ['QQF1005', 'QQF1019', 'QQF1006', 'QQF1007']
+
+}
+//泵名称映射表
+const pumpNameArr = {
+    'G': ['P1005'],
+    'X': ['P1006']
+}
+//罐子名称映射表
+const tankNameArr = {
+    'G': ['G1001', 'G1002', 'G1003'],
+    'X': ['X1001', 'X1002', 'X1003']
+}
+
+
+//阀门名称数组,根据罐名来匹配
+const valveNames = computed(() => {
+    return valveNameArr[props.tankType] || defaultValveNames
+})
+//泵名称
+const pumpNames = computed(() => {
+    return pumpNameArr[props.tankType] || defaultPumpNames
+})
+//罐名数组
+const tankNames = computed(() => {
+    return tankNameArr[props.tankType] || []
+})
+//罐体的宽高
+const tankBodyWidth = computed(() => {
+    return props.iconWidth ?? props.iconSize
+})
+const tankBodyHeight = computed(() => {
+    return props.iconHeight ?? props.iconSize
+})
+//罐体样式
+const getTankBodyStyle = computed(() => ({
+    width: `${tankBodyWidth.value * 3}px`,
+    height: `${tankBodyHeight.value}px`,
+}))
+
+//阀门icon大小(罐子150-阀门30)
+const valveIconSize = computed(() => {
+    return tankBodyHeight.value * 0.2;
+});
+
+//泵icon大小(罐子150-泵48)
+const pumpIconSize = computed(() => {
+    return tankBodyHeight.value * 0.32;
+});
+
+//管道宽度(罐子150-管道4.8)
+const pipeWidth = computed(() => {
+    return tankBodyHeight.value * 0.032;
+});
+</script>
+
+<style scoped lang="scss">
+.tank_valves {
+
+    position: relative;
+    z-index: 10;
+
+    .abreastTanks {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        width: 100%;
+        height: 100%;
+    }
+
+    .valve_progress {
+        .valve_progress1 {
+            position: absolute;
+            top: -29%;
+            left: 0%;
+        }
+
+        .valve_progress2 {
+            position: absolute;
+            top: -59%;
+            left: 0%;
+        }
+
+        .valve_progress3 {
+            position: absolute;
+            top: -29%;
+            left: 108%;
+        }
+
+        .valve_progress4 {
+            position: absolute;
+            top: -59%;
+            left: 108%;
+        }
+
+    }
+
+    .pump_progress {
+        .pump_progress1 {
+            position: absolute;
+            top: 116%;
+            left: 104%;
+            transform: translate(-50%, -50%);
+        }
+
+    }
+
+    .pipe_extend {
+        .progress_pos1 {
+            position: absolute;
+            top: 115%;
+            left: 5%;
+            width: 100%;
+        }
+
+        .progress_pos2 {
+            position: absolute;
+            top: 45%;
+            left: 102.5%;
+            width: 78%;
+        }
+
+        .progress_pos3 {
+            position: absolute;
+            top: -32%;
+            left: 102.5%;
+            width: 19%;
+        }
+
+        .progress_pos4 {
+            position: absolute;
+            top: -32%;
+            left: -27%;
+            width: 19%;
+        }
+    }
+
+    .arrows {
+        .arrow_pos1 {
+            position: absolute;
+            top: -47%;
+            left: 48%;
+            transform: translate(-50%, -50%);
+        }
+
+        .arrow_pos2 {
+            position: absolute;
+            top: -47%;
+            left: 146%;
+            transform: translate(-50%, -50%);
+        }
+
+        .arrow_pos3 {
+            position: absolute;
+            top: -16%;
+            left: 146%;
+            transform: translate(-50%, -50%);
+        }
+
+        .arrow_pos4 {
+            position: absolute;
+            top: 26%;
+            left: 90%;
+            transform: translate(-50%, -50%);
+        }
+    }
+
+}
+</style>

+ 90 - 0
ui/src/components/HnyzDcs/HeatExchangeWaterTankComponent.vue

@@ -0,0 +1,90 @@
+<template>
+    <!-- 换热器水罐 -->
+    <div class="tank_body" :style="getTankBodyStyle">
+        <!-- 罐体 -->
+        <i class="icon iconfont-hnyz-colour icon-hnyz-colourWaterTank tank" :style="getTankStyle">
+            <!-- 标题 -->
+            <div class="tank_title" :style="{ fontSize: `${iconSize * 0.15}px` }" v-if="title">{{ title }}</div>
+        </i>
+    </div>
+</template>
+
+<script setup>
+import { computed } from 'vue'
+
+const props = defineProps({
+    tempValue: {//temp
+        type: Number,
+        default: null
+    },
+    fanStatus: {//风扇状态
+        type: Boolean,
+    },
+    iconSize: {//图标大小
+        type: Number,
+        default: 200,
+    },
+    title: {//罐名
+        type: String,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+})
+//解构
+const { iconSize, title, iconWidth, iconHeight } = props
+
+const width = computed(() => props.iconWidth ?? props.iconSize)
+const height = computed(() => props.iconHeight ?? props.iconSize)
+
+//罐体样式
+const getTankBodyStyle = computed(() => ({
+    width: `${width.value}px`,
+    height: `${height.value}px`,
+    fontSize: `${iconSize}px`,
+}))
+
+
+// 罐子样式
+const getTankStyle = computed(() => {
+    const style = {
+        fontSize: iconSize + 'px',
+        display: 'inline-block'
+    }
+    //根据传进来的iconWidth和iconHeight来控制图标的大小
+    const scaleX = iconWidth ? iconWidth / iconSize : 1
+    const scaleY = iconHeight ? iconHeight / iconSize : 1
+
+    if (scaleX !== 1 || scaleY !== 1) {
+        style.transform = `scale(${scaleX}, ${scaleY})`
+    }
+    return style
+})
+
+</script>
+
+<style scoped lang="scss">
+//水位罐
+.tank_body {
+    text-align: center;
+    position: relative;
+
+    .tank {
+        position: relative;
+        z-index: 10;
+
+        //罐子名称
+        .tank_title {
+            position: absolute;
+            top: 50%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+            color: #e65100;
+            font-weight: bold;
+        }
+    }
+}
+</style>

+ 202 - 0
ui/src/components/HnyzDcs/HeatExchangeWaterTankValvesComponent.vue

@@ -0,0 +1,202 @@
+<template>
+    <div class="tank_valves" :style="getTankBodyStyle">
+        <!-- 换热器水箱 泵-->
+        <HeatExchangeWaterTank :title="title" :tempValue="tempValue" :fanStatus="fanStatus" :iconWidth="iconWidth"
+            :iconHeight="iconHeight" :iconSize="iconSize" />
+        <!-- 阀门进度 -->
+        <div class="valve_progress">
+            <!-- 左1 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[0]" :pipeLength="240" :pipeLeftOffset="-50"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress1" />
+            <!-- 下 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[1]" :pipeLength="400" :pipeLeftOffset="-50"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus" :rotateAngle="90"
+                :pipeReverse="true" class="valve_progress2 rotate_90" />
+            <!-- 右1  -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[2]" :pipeLength="200" :pipeLeftOffset="-50"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress3" />
+            <!-- 泵上阀门 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[3]" :rotateAngle="90" :pipeLength="200"
+                :pipeLeftOffset="-50" :valveStatusArr="initValveStatusArr" progressType="steam"
+                :pipeStatus="initPipeStatus" :pipeReverse="true" class="valve_progress4 rotate_90" />
+        </div>
+        <!-- 泵进度 -->
+        <div class="pump_progress">
+            <PumpProgress :title="pumpNames[0]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :pipeType="steam"
+                pumpDirection="L" class="pump_progress1" />
+        </div>
+        <!-- 拓展管道 -->
+        <div class="pipes">
+            <!-- 上 -->
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth"
+                class="progress_steam progress_pos1 rotate_90" />
+            <!-- 左  -->
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth"
+                class="progress_steam progress_pos2 rotate_270" />
+            <!-- 右上阀门拓展管道 -->
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth"
+                class="progress_steam progress_pos3 rotate_180" />
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="pipeWidth"
+                class="progress_steam progress_pos4 rotate_270" />
+
+        </div>
+    </div>
+</template>
+
+<script setup>
+import HeatExchangeWaterTank from '@/components/HnyzDcs/HeatExchangeWaterTankComponent.vue';
+import ValveProgress from '@/components/DCS/ValveProgressComponent.vue';
+import Pipe from '@/components/HnyzDcs/PipeComponent.vue';
+import PumpProgress from '@/components/DCS/PumpComponent.vue';
+import { computed } from 'vue'
+const initValveStatusArr = [true]
+const initPipeStatus = true
+const props = defineProps({
+    iconSize: {//图标大小
+        type: Number,
+        default: 200,
+    },
+    title: {//罐名
+        type: String,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+    tempValue: {//temp
+        type: Number,
+        default: null
+    },
+    fanStatus: {//风扇状态
+        type: Boolean,
+        default: undefined,
+    },
+})
+
+//默认阀门名称数组
+const defaultValveNames = new Array(4).fill('ACV_default')
+//泵默认名称
+const defaultPumpNames = new Array(1).fill('P_default')
+
+// 阀门名称映射表
+const valveNameArr = {
+    'V6102': ['ACV6111', 'ACV6112', 'ACV6115', 'ACV6116'],
+    'V6103': ['ACV6121', 'ACV6122', 'ACV6124', 'ACV6125'],
+    'V6106': ['ACV6130', 'ACV6131', 'ACV6133', 'ACV6134'],
+}
+//泵名称映射表
+const pumpNameArr = {
+    'V6102': ['P6105'],
+    'V6103': ['P6108'],
+    'V6106': ['P6111'],
+}
+
+//阀门名称数组,根据罐名来匹配
+const valveNames = computed(() => {
+    return valveNameArr[props.title] || defaultValveNames
+})
+//泵名称
+const pumpNames = computed(() => {
+    return pumpNameArr[props.title] || defaultPumpNames
+})
+
+//罐体样式
+const getTankBodyStyle = computed(() => ({
+    width: `${props.iconWidth ?? props.iconSize}px`,
+    height: `${props.iconHeight ?? props.iconSize}px`,
+}))
+
+//阀门icon大小(罐子100-阀门37.5)
+const valveIconSize = computed(() => {
+    return (props.iconWidth ?? props.iconSize) * 0.375;
+});
+
+//泵icon大小(罐子100-泵60)
+const pumpIconSize = computed(() => {
+    return (props.iconWidth ?? props.iconSize) * 0.6;
+});
+
+//管道宽度
+const pipeWidth = computed(() => {
+    return (props.iconWidth ?? props.iconSize) * 0.06;
+});
+
+</script>
+
+<style scoped lang="scss">
+.tank_valves {
+    position: relative;
+    z-index: 9;
+
+    .valve_progress {
+        .valve_progress1 {
+            position: absolute;
+            top: 35%;
+            left: -42%;
+        }
+
+        .valve_progress2 {
+            position: absolute;
+            top: 120%;
+            left: 60%;
+        }
+
+        .valve_progress3 {
+            position: absolute;
+            top: 60%;
+            left: 107%;
+        }
+
+        .valve_progress4 {
+            position: absolute;
+            top: 24%;
+            left: 185%;
+        }
+
+    }
+
+    .pump_progress {
+        .pump_progress1 {
+            position: absolute;
+            top: 83%;
+            left: 184%;
+            transform: translate(-50%, -50%);
+        }
+    }
+
+    .pipes {
+        .progress_pos1 {
+            position: absolute;
+            top: -18%;
+            left: 52%;
+            width: 200%;
+        }
+
+        .progress_pos2 {
+            position: absolute;
+            top: 184%;
+            left: -58%;
+            width: 254%;
+        }
+
+        .progress_pos3 {
+            position: absolute;
+            top: -14%;
+            left: 65%;
+            width: 116%;
+        }
+
+        .progress_pos4 {
+            position: absolute;
+            top: -63%;
+            left: 68%;
+            width: 110%;
+        }
+    }
+
+}
+</style>

+ 259 - 0
ui/src/components/HnyzDcs/SeparatorTowerValves2Component.vue

@@ -0,0 +1,259 @@
+<template>
+    <div class="tank_valves" :style="getTankBodyStyle">
+        <!-- 分离塔·(铁合金PID流程)  -->
+        <STypeTank :title="title" :iconSize="iconSize" :waterLevelValue="waterLevelValue" />
+        <div class="valve_progress">
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[0]" :rotateAngle="90" :pipeLength="520"
+                :pipeLeftOffset="-330" :valveStatusArr="initValveStatusArr" progressType="steam" :pipeReverse="true"
+                :pipeStatus="initPipeStatus" class="valve_progress1 rotate_90" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[1]" :pipeLength="335" :pipeLeftOffset="-172"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress2" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[2]" :pipeLength="393" :pipeLeftOffset="-116"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress3" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[3]" :pipeLength="472" :pipeLeftOffset="-51"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress4" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[4]" :pipeLength="200" :pipeLeftOffset="-50"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress5" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[5]" :pipeLength="800" :pipeLeftOffset="-510"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress6" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[6]" :rotateAngle="90" :pipeLength="846"
+                :pipeLeftOffset="-332" :valveStatusArr="initValveStatusArr" progressType="steam" :pipeReverse="true"
+                :pipeStatus="initPipeStatus" class="valve_progress7 rotate_90" />
+
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[7]" :pipeLength="180" :pipeLeftOffset="-31"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress8" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[8]" :pipeLength="300" :pipeLeftOffset="-50"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                class="valve_progress9" />
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[9]" :rotateAngle="90" :pipeLength="250"
+                :pipeLeftOffset="-65" :valveStatusArr="initValveStatusArr" progressType="steam"
+                :pipeStatus="initPipeStatus" class="valve_progress10 rotate_90" />
+        </div>
+        <!-- <div class="pump_progress">
+
+        </div> -->
+        <div class="pipes">
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="strokeWidth"
+                class="progress_steam progress_pos1 rotate_270"></Pipe>
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="strokeWidth"
+                class="progress_steam progress_pos2 rotate_270"></Pipe>
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="strokeWidth"
+                class="progress_steam progress_pos3 rotate_270"></Pipe>
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="strokeWidth"
+                class="progress_steam progress_pos4 rotate_270"></Pipe>
+            <Pipe :pipeStatus="initPipeStatus" :strokeWidth="strokeWidth"
+                class="progress_steam progress_pos4_1 rotate_90"></Pipe>
+        </div>
+        <div class="arrows">
+            <Arrow flexDir="column" :iconFirst="false" arrowDir="up" arrowText="排气" :iconSize="65" :fontSize="10"
+                class="arrow_pos1" />
+            <Arrow arrowDir="right" arrowText="预留" :iconSize="65" :fontSize="10" class="arrow_pos2" />
+            <Arrow flexDir="column" arrowDir="down" arrowText="产品" :iconSize="65" :fontSize="10" class="arrow_pos3" />
+        </div>
+    </div>
+</template>
+
+<script setup>
+import STypeTank from '@/components/HnyzDcs/STypeTankComponent.vue';
+import ValveProgress from '@/components/DCS/ValveProgressComponent.vue';
+import Pipe from '@/components/HnyzDcs/PipeComponent.vue';
+import Arrow from '@/components/HnyzDcs/ArrowComponent.vue';
+import Pump from '@/components/DCS/PumpComponent.vue';
+import { computed } from 'vue'
+const initValveStatusArr = [true]
+const initPipeStatus = true
+const props = defineProps({
+    iconSize: {
+        type: Number,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+    tempValue: {
+        type: Number,
+    },
+    waterLevelValue: {// 水位值
+        type: Number,
+        default: -1,// -1表示未传水位值
+    },
+    title: {//罐名
+        type: String,
+    },
+})
+
+//默认阀门名称数组
+const defaultValveNames = new Array(10).fill('ACV_default')
+
+// 阀门名称映射表
+const valveNameArr = {
+    'F1001': ['QQF1013', 'QQF1011', 'QQF1010', 'QQF1009', 'QQF1014', 'QQF1008', 'QQF1012', 'QQF1016', 'QQF1015', 'QQF1021'],
+}
+
+
+//阀门名称数组,根据罐名来匹配
+const valveNames = computed(() => {
+    return valveNameArr[props.title] || defaultValveNames
+})
+
+const width = computed(() => {
+    return props.iconWidth ?? props.iconSize
+})
+const height = computed(() => {
+    return props.iconHeight ?? props.iconSize
+})
+
+//罐体样式
+const getTankBodyStyle = computed(() => ({
+    width: `${width.value}px`,
+    height: `${height.value}px`,
+}))
+
+//阀门icon大小(罐体150-阀门30)
+const valveIconSize = computed(() => {
+    return width.value * 0.2;
+});
+
+//管道宽度(罐体150-管道4.8)
+const strokeWidth = computed(() => {
+    return width.value * 0.032;
+});
+
+</script>
+
+<style scoped lang="scss">
+.tank_valves {
+    position: relative;
+    z-index: 10;
+
+    .valve_progress {
+        .valve_progress1 {
+            position: absolute;
+            top: -20%;
+            left: 28%;
+        }
+
+        .valve_progress2 {
+            position: absolute;
+            top: -22%;
+            left: 107%;
+        }
+
+        .valve_progress3 {
+            position: absolute;
+            top: -42.6%;
+            left: 82%;
+        }
+
+        .valve_progress4 {
+            position: absolute;
+            top: -63.6%;
+            left: 53.4%;
+        }
+
+        .valve_progress5 {
+            position: absolute;
+            top: 10%;
+            left: -10%;
+        }
+
+        .valve_progress6 {
+            position: absolute;
+            top: -87%;
+            left: 82%;
+        }
+
+        .valve_progress7 {
+            position: absolute;
+            top: -100%;
+            left: 142%;
+        }
+
+        .valve_progress8 {
+            position: absolute;
+            top: 44%;
+            left: 88%;
+        }
+
+        .valve_progress9 {
+            position: absolute;
+            top: 68%;
+            left: -20%;
+        }
+
+        .valve_progress10 {
+            position: absolute;
+            top: 114%;
+            left: 54%;
+        }
+    }
+
+    .pipes {
+        .progress_pos1 {
+            position: absolute;
+            top: -20%;
+            left: 45%;
+            width: 64%;
+        }
+
+        .progress_pos2 {
+            width: 45%;
+            position: absolute;
+            top: -8%;
+            left: 60%;
+        }
+
+        .progress_pos3 {
+            width: 20%;
+            position: absolute;
+            top: 0%;
+            left: 74%;
+        }
+
+        .progress_pos4 {
+            width: 80%;
+            position: absolute;
+            top: -35%;
+            left: -18%;
+        }
+
+        .progress_pos4_1 {
+            width: 20%;
+            position: absolute;
+            top: 15%;
+            left: -18%;
+        }
+    }
+
+    .arrows {
+        .arrow_pos1 {
+            position: absolute;
+            top: -120%;
+            left: 24%;
+            transform: translate(-50%, -50%);
+        }
+
+        .arrow_pos2 {
+            position: absolute;
+            top: 56%;
+            left: 140%;
+            transform: translate(-50%, -50%);
+        }
+
+        .arrow_pos3 {
+            position: absolute;
+            top: 165%;
+            left: 50%;
+            transform: translate(-50%, -50%);
+        }
+    }
+}
+</style>

+ 10 - 8
ui/src/components/HnyzDcs/VTypeTank2Component.vue

@@ -2,18 +2,19 @@
     <!-- 储罐:水位 -->
     <div class="tank_body" :style="getTankBodyStyle">
         <!-- 罐体 -->
-        <i class="icon iconfont-hnyz-colour tank" :class="tankIconClass" :style="getTankStyle">
+        <i class="icon iconfont-hnyz-colour tank zIndex10" :class="tankIconClass" :style="getTankStyle">
             <!-- 标题 -->
             <div class="tank_title" v-if="title" :style="{ fontSize: `${iconSize * 0.15}px` }">{{ title }}</div>
             <!-- 水位 -->
-            <div v-if="waterLevelValue >= 0">
-                <dv-water-level-pond :config="waterLevelConfig" class="water_level water_level_pos3" />
-            </div>
+            <WaterLevelMap :waterLevelValue="waterLevelValue" :textSize="iconSize * 0.12"
+                class="water_level water_level_pos3" />
         </i>
     </div>
 </template>
 
 <script setup>
+import WaterLevelMap from '@/components/HnyzDcs/WaterLevelMapComponent.vue'
+
 import { computed } from 'vue'
 
 const props = defineProps({
@@ -98,15 +99,16 @@ const waterLevelConfig = computed(() => ({
 
         // 水位
         .water_level {
-            width: 0.4em;
-            height: 0.5em;
+            width: 58%;
+            height: 60%;
         }
 
         //水位图位置
         .water_level_pos3 {
+            z-index: -1;
             position: absolute;
-            top: 21%;
-            left: 30%;
+            top: 16%;
+            left: 22%;
         }
 
         .dv-water-pond-level :deep(canvas) {

+ 125 - 0
ui/src/components/HnyzDcs/VTypeTankValves3Component.vue

@@ -0,0 +1,125 @@
+<template>
+    <div class="tank_valves" :style="getTankBodyStyle">
+        <!-- 三连罐  搅拌-->
+        <VTypeTank :title="title" :iconWidth="iconWidth" :iconHeight="iconHeight" :iconSize="iconSize"
+            :fanStatus="fanStatus"></VTypeTank>
+        <div class="valve_progress">
+            <!-- 上右 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[0]" :rotateAngle="270" :pipeLength="205"
+                :pipeLeftOffset="-47" :valveStatusArr="initValveStatusArr" progressType="steam"
+                :pipeStatus="initPipeStatus" :pipeReverse="true" class="valve_progress1 rotate_270" />
+            <!-- 左下 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[1]" :pipeLength="200" :pipeLeftOffset="-60"
+                :valveStatusArr="initValveStatusArr" progressType="steam" :pipeStatus="initPipeStatus"
+                :pipeReverse="true" class="valve_progress2" />
+        </div>
+        <div class="pump_progress">
+            <!-- 左下  -->
+            <PumpProgress :title="pumpNames[0]" :pumpDataArr="[1, 10]" :iconSize="iconSize * 0.4" :showPipe="false"
+                :pipeType="steam" pumpDirection="R" class="pump_progress1" />
+        </div>
+    </div>
+</template>
+
+<script setup>
+import VTypeTank from '@/components/HnyzDcs/VTypeTankComponent.vue';
+import ValveProgress from '@/components/DCS/ValveProgressComponent.vue';
+import PumpProgress from '@/components/DCS/PumpComponent.vue';
+import { computed } from 'vue'
+const initValveStatusArr = [true]
+const initPipeStatus = true
+const props = defineProps({
+    iconSize: {//图标大小
+        type: Number,
+        default: 200,
+    },
+    title: {//罐名
+        type: String,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+    fanStatus: {//风扇状态
+        type: Boolean,
+        default: undefined,
+    },
+})
+//默认阀门名称数组
+const defaultValveNames = new Array(2).fill('ACV_default')
+//泵默认名称
+const defaultPumpNames = new Array(1).fill('P_default')
+
+// 阀门名称映射表
+const valveNameArr = {
+    'V6104': ['ACV6145', 'ACV6146'],
+    'V6105': ['ACV6147', 'ACV6148'],
+    'V6107': ['ACV6149', 'ACV6150'],
+    'V6108': ['ACV6151', 'ACV6152'],
+}
+//泵名称映射表
+const pumpNameArr = {
+    'V6104': ['P6117'],
+    'V6105': ['P6118'],
+    'V6107': ['P6119'],
+    'V6108': ['P6120'],
+}
+
+//阀门名称数组,根据罐名来匹配
+const valveNames = computed(() => {
+    return valveNameArr[props.title] || defaultValveNames
+})
+//泵名称
+const pumpNames = computed(() => {
+    return pumpNameArr[props.title] || defaultPumpNames
+})
+
+
+//罐体样式
+const getTankBodyStyle = computed(() => ({
+    width: `${props.iconWidth ?? props.iconSize}px`,
+    height: `${props.iconHeight ?? props.iconSize}px`,
+    // fontSize: `${props.iconSize}px`,
+}))
+
+
+//阀门icon大小(罐子200-阀门50)
+const valveIconSize = computed(() => {
+    return props.iconSize * 0.25;
+});
+
+</script>
+
+<style scoped lang="scss">
+.tank_valves {
+    position: relative;
+    z-index: 10;
+
+    .valve_progress {
+        .valve_progress1 {
+            position: absolute;
+            top: -15%;
+            left: 65%;
+        }
+
+        .valve_progress2 {
+            position: absolute;
+            top: 62%;
+            left: -6%;
+        }
+
+    }
+
+    .pump_progress {
+        .pump_progress1 {
+            position: absolute;
+            top: 77%;
+            left: -57%;
+            transform: translate(-50%, -50%);
+            z-index: 100;
+        }
+    }
+}
+</style>

+ 191 - 0
ui/src/components/HnyzDcs/VTypeTankValves4Component.vue

@@ -0,0 +1,191 @@
+<template>
+    <div class="tank_valves" :style="getTankBodyStyle">
+        <!-- 加药罐,集中水罐,静置水罐  水位 -->
+        <VTypeTank :title="title" :iconWidth="iconWidth" :iconHeight="iconHeight" :iconSize="iconSize"
+            :waterLevelValue="waterLevelValue"></VTypeTank>
+        <div class="valve_progress">
+            <!-- 上 -->
+            <ValveProgress :iconSize="valveIconSize" :title="valveNames[0]" :rotateAngle="270" :pipeLength="205"
+                :pipeLeftOffset="-47" :valveStatusArr="initValveStatusArr" progressType="steam"
+                :pipeStatus="initPipeStatus" :pipeReverse="true" class="valve_progress1 rotate_270" />
+        </div>
+        <div class="pump_progress">
+            <!-- 左上  -->
+            <PumpProgress :title="pumpNames[0]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :showPipe="true"
+                :pipeType="steam" pumpDirection="L" class="pump_progress1" />
+            <!-- 右1  -->
+            <PumpProgress :title="pumpNames[1]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :showPipe="false"
+                :pipeType="steam" pumpDirection="L" :pipeLength="144" class="pump_progress2" />
+            <!-- 右2  -->
+            <PumpProgress :title="pumpNames[2]" :pumpDataArr="[1, 10]" :iconSize="pumpIconSize" :showPipe="true"
+                :pipeType="steam" pumpDirection="L" class="pump_progress3" />
+        </div>
+        <div class="pipe_progress">
+            <!-- 右上  泵相关管道-->
+            <Pipe :pipeStatus="true" :strokeWidth="initPipeWidth" class="pipe_pos1 progress_steam"
+                v-if="pumpNames[1]" />
+            <!-- 右下  泵相关管道-->
+            <Pipe :pipeStatus="true" :strokeWidth="initPipeWidth" class="pipe_pos2 progress_steam"
+                v-if="pumpNames[2]" />
+            <!-- 左上 泵 相关管道 -->
+            <Pipe :pipeStatus="true" :strokeWidth="initPipeWidth" class="pipe_pos3 progress_steam"
+                v-if="pumpNames[0]" />
+            <Pipe :pipeStatus="true" :strokeWidth="initPipeWidth" class="pipe_pos4 progress_steam"
+                v-if="pumpNames[0]" />
+
+        </div>
+    </div>
+</template>
+
+<script setup>
+import VTypeTank from '@/components/HnyzDcs/VTypeTankComponent.vue';
+import ValveProgress from '@/components/DCS/ValveProgressComponent.vue';
+import PumpProgress from '@/components/DCS/PumpComponent.vue';
+import Pipe from '@/components/HnyzDcs/PipeComponent.vue';
+import { computed } from 'vue'
+const initValveStatusArr = [true]
+const initPipeStatus = true
+const props = defineProps({
+    iconSize: {//图标大小
+        type: Number,
+        default: 200,
+    },
+    title: {//罐名
+        type: String,
+    },
+    iconWidth: {//图标宽度
+        type: Number,
+    },
+    iconHeight: {//图标高度
+        type: Number,
+    },
+    waterLevelValue: {//水位值
+        type: Number,
+    },
+})
+//默认阀门名称数组
+const defaultValveNames = new Array(1).fill('ACV_default')
+//泵默认名称
+const defaultPumpNames = new Array(3).fill('P_default')
+
+// 阀门名称映射表
+const valveNameArr = {
+    'V1001': [''],
+    'V1002': ['QQF1001'],
+    'V1003': ['QQF1020'],
+    'V1004': [''],
+    'V1005': [''],
+    'V1006': ['QQF1017'],
+    'V1007': [''],
+}
+//泵名称映射表
+const pumpNameArr = {
+    'V1001': ['P1008', '', 'P1001'],
+    'V1002': ['', '', 'P1002'],
+    'V1003': ['', '', ''],
+    'V1004': ['', 'P1004', 'P1003'],
+    'V1005': ['', '', 'P1009'],
+    'V1006': ['', '', ''],
+    'V1007': ['', '', 'P1007'],
+}
+
+//阀门名称数组,根据罐名来匹配
+const valveNames = computed(() => {
+    return valveNameArr[props.title] || defaultValveNames
+})
+//泵名称
+const pumpNames = computed(() => {
+    return pumpNameArr[props.title] || defaultPumpNames
+})
+
+
+//罐体样式
+const getTankBodyStyle = computed(() => ({
+    width: `${props.iconWidth ?? props.iconSize}px`,
+    height: `${props.iconHeight ?? props.iconSize}px`,
+    // fontSize: `${props.iconSize}px`,
+}))
+
+
+//阀门icon大小(罐子120-阀门30)
+const valveIconSize = computed(() => {
+    return props.iconSize * 0.25;
+});
+//泵icon大小(120-泵48)
+const pumpIconSize = computed(() => {
+    return props.iconSize * 0.4;
+});
+//阀门管道宽度(120-泵4.8)
+const initPipeWidth = computed(() => {
+    return props.iconSize * 0.04;
+});
+
+</script>
+
+<style scoped lang="scss">
+.tank_valves {
+    position: relative;
+    z-index: 10;
+
+    .valve_progress {
+        .valve_progress1 {
+            position: absolute;
+            top: -15%;
+            left: 30%;
+        }
+    }
+
+    .pump_progress {
+        .pump_progress1 {
+            position: absolute;
+            top: 50%;
+            left: -30%;
+            transform: translate(-50%, -50%);
+        }
+
+        .pump_progress2 {
+            position: absolute;
+            top: 16%;
+            left: 110%;
+            transform: translate(-50%, -50%);
+        }
+
+        .pump_progress3 {
+            position: absolute;
+            top: 80%;
+            left: 110%;
+            transform: translate(-50%, -50%);
+        }
+    }
+
+    .pipe_progress {
+        .pipe_pos1 {
+            position: absolute;
+            top: 15.5%;
+            left: 43%;
+            width: 55%;
+        }
+
+        .pipe_pos2 {
+            position: absolute;
+            top: 79.5%;
+            left: 43%;
+            width: 55%;
+        }
+
+        .pipe_pos3 {
+            position: absolute;
+            top: 13%;
+            left: -35%;
+            width: 63%;
+        }
+
+        .pipe_pos4 {
+            position: absolute;
+            top: 49.5%;
+            left: -90%;
+            width: 50%;
+        }
+    }
+}
+</style>

+ 5 - 0
ui/src/router/index.js

@@ -193,6 +193,11 @@ export const constantRoutes = [
     component: () => import('@/views/hnyzConfiguratePage/HeatExchange/index'),
     name: 'HeatExchange',
   },
+  {
+    path:'/IronAlloy',//铁合金
+    component: () => import('@/views/hnyzConfiguratePage/IronAlloy/index'),
+    name: 'IronAlloy',
+  }
 ]
 
 // 动态路由,基于用户权限动态去加载