<script lang="ts" setup>
|
import { reactive, ref } from 'vue';
|
|
import { useVbenModal } from '@vben/common-ui';
|
import { $t } from '@vben/locales';
|
|
import {
|
Button,
|
Descriptions,
|
DescriptionsItem,
|
InputNumber,
|
message,
|
Select,
|
Tabs,
|
} from 'ant-design-vue';
|
|
import {
|
calcCtcAngle,
|
calcCtcResistance,
|
calcCtcReel,
|
} from '#/api/mes/pd/ctc';
|
|
const emit = defineEmits<{
|
angle: [value: { wrappingAngle: number }];
|
resistance: [value: { resistance20c: number }];
|
reel: [value: { capacityKm: number }];
|
}>();
|
|
/** 绕包角度计算表单 */
|
const angleForm = reactive<{
|
conductorThickness?: number;
|
conductorWidth?: number;
|
cornerRadius?: number;
|
insulationThickness?: number;
|
tapeWidth?: number;
|
overlapWidth?: number;
|
}>({});
|
const angleResult = ref<{
|
circumference?: number;
|
wrappingAngle?: number;
|
wrappingPitch?: number;
|
}>();
|
|
/** 直流电阻计算表单 */
|
const resistanceForm = reactive<{
|
conductorThickness?: number;
|
conductorWidth?: number;
|
temperature?: number;
|
material?: string;
|
}>({ temperature: 75, material: 'copper' });
|
const resistanceResult = ref<{
|
crossSection?: number;
|
resistance20cKm?: number;
|
resistanceAtTemp?: number;
|
resistanceAtTempKm?: number;
|
}>();
|
|
/** 盘具容量计算表单 */
|
const reelForm = reactive<{
|
reelOuterDiameter?: number;
|
reelInnerDiameter?: number;
|
reelWidth?: number;
|
ctcThickness?: number;
|
ctcWidth?: number;
|
}>({});
|
const reelResult = ref<{
|
capacityMeter?: number;
|
capacityKm?: number;
|
}>();
|
|
/** 绕包角度计算 */
|
async function handleCalcAngle() {
|
const data = await calcCtcAngle(angleForm);
|
angleResult.value = data;
|
}
|
|
/** 直流电阻计算 */
|
async function handleCalcResistance() {
|
const data = await calcCtcResistance(resistanceForm);
|
resistanceResult.value = data;
|
}
|
|
/** 盘具容量计算 */
|
async function handleCalcReel() {
|
const data = await calcCtcReel(reelForm);
|
reelResult.value = data;
|
}
|
|
/** 回填绕包角度 */
|
function handleFillAngle() {
|
if (angleResult.value?.wrappingAngle == null) {
|
message.warning('请先执行绕包角度计算');
|
return;
|
}
|
emit('angle', { wrappingAngle: angleResult.value.wrappingAngle });
|
message.success($t('ui.actionMessage.operationSuccess'));
|
}
|
|
/** 回填直流电阻 */
|
function handleFillResistance() {
|
if (resistanceResult.value?.resistance20cKm == null) {
|
message.warning('请先执行直流电阻计算');
|
return;
|
}
|
emit('resistance', { resistance20c: resistanceResult.value.resistance20cKm });
|
message.success($t('ui.actionMessage.operationSuccess'));
|
}
|
|
/** 回填盘具容量 */
|
function handleFillReel() {
|
if (reelResult.value?.capacityKm == null) {
|
message.warning('请先执行盘具容量计算');
|
return;
|
}
|
emit('reel', { capacityKm: reelResult.value.capacityKm });
|
message.success($t('ui.actionMessage.operationSuccess'));
|
}
|
|
const [Modal, modalApi] = useVbenModal({
|
onOpenChange(isOpen: boolean) {
|
if (!isOpen) {
|
angleResult.value = undefined;
|
resistanceResult.value = undefined;
|
reelResult.value = undefined;
|
}
|
},
|
});
|
</script>
|
|
<template>
|
<Modal title="换位导线计算工具" class="w-2/3">
|
<Tabs>
|
<Tabs.TabPane key="angle" tab="绕包角度">
|
<div class="grid grid-cols-3 gap-4">
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">导体厚度(mm)</span>
|
<InputNumber
|
v-model:value="angleForm.conductorThickness"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 19.08"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">导体宽度(mm)</span>
|
<InputNumber
|
v-model:value="angleForm.conductorWidth"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 12.6"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">圆角半径(mm)</span>
|
<InputNumber
|
v-model:value="angleForm.cornerRadius"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 1"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">绝缘厚度(mm)</span>
|
<InputNumber
|
v-model:value="angleForm.insulationThickness"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 0.75"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">纸带宽度(mm)</span>
|
<InputNumber
|
v-model:value="angleForm.tapeWidth"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 22"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">重叠宽度(mm)</span>
|
<InputNumber
|
v-model:value="angleForm.overlapWidth"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 2"
|
/>
|
</div>
|
</div>
|
<div class="mt-4 flex gap-2">
|
<Button type="primary" @click="handleCalcAngle">计算</Button>
|
<Button @click="handleFillAngle">回填绕包角度</Button>
|
</div>
|
<Descriptions v-if="angleResult" class="mt-4" :column="3" bordered>
|
<DescriptionsItem label="导线周长(mm)">
|
{{ angleResult.circumference }}
|
</DescriptionsItem>
|
<DescriptionsItem label="绕包角度(°)">
|
{{ angleResult.wrappingAngle }}
|
</DescriptionsItem>
|
<DescriptionsItem label="绕包节距(mm)">
|
{{ angleResult.wrappingPitch }}
|
</DescriptionsItem>
|
</Descriptions>
|
</Tabs.TabPane>
|
|
<Tabs.TabPane key="resistance" tab="直流电阻">
|
<div class="grid grid-cols-3 gap-4">
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">导体厚度(mm)</span>
|
<InputNumber
|
v-model:value="resistanceForm.conductorThickness"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 1.27"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">导体宽度(mm)</span>
|
<InputNumber
|
v-model:value="resistanceForm.conductorWidth"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 5.7"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">计算温度(℃)</span>
|
<InputNumber
|
v-model:value="resistanceForm.temperature"
|
class="!flex-1"
|
:min="0"
|
:precision="0"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">导体材质</span>
|
<Select
|
v-model:value="resistanceForm.material"
|
class="!flex-1"
|
:options="[
|
{ label: '铜', value: 'copper' },
|
{ label: '铝', value: 'aluminum' },
|
]"
|
/>
|
</div>
|
</div>
|
<div class="mt-4 flex gap-2">
|
<Button type="primary" @click="handleCalcResistance">计算</Button>
|
<Button @click="handleFillResistance">回填20℃电阻</Button>
|
</div>
|
<Descriptions v-if="resistanceResult" class="mt-4" :column="2" bordered>
|
<DescriptionsItem label="截面积(mm²)">
|
{{ resistanceResult.crossSection }}
|
</DescriptionsItem>
|
<DescriptionsItem label="20℃电阻(Ω/km)">
|
{{ resistanceResult.resistance20cKm }}
|
</DescriptionsItem>
|
<DescriptionsItem label="计算温度电阻(Ω/m)">
|
{{ resistanceResult.resistanceAtTemp }}
|
</DescriptionsItem>
|
<DescriptionsItem label="计算温度电阻(Ω/km)">
|
{{ resistanceResult.resistanceAtTempKm }}
|
</DescriptionsItem>
|
</Descriptions>
|
</Tabs.TabPane>
|
|
<Tabs.TabPane key="reel" tab="盘具容量">
|
<div class="grid grid-cols-3 gap-4">
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">盘具外径 d1(mm)</span>
|
<InputNumber
|
v-model:value="reelForm.reelOuterDiameter"
|
class="!flex-1"
|
:min="0"
|
:precision="0"
|
placeholder="如 1600"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">盘芯内径 d2(mm)</span>
|
<InputNumber
|
v-model:value="reelForm.reelInnerDiameter"
|
class="!flex-1"
|
:min="0"
|
:precision="0"
|
placeholder="如 1100"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">盘宽 l2(mm)</span>
|
<InputNumber
|
v-model:value="reelForm.reelWidth"
|
class="!flex-1"
|
:min="0"
|
:precision="0"
|
placeholder="如 500"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">CTC高度(mm)</span>
|
<InputNumber
|
v-model:value="reelForm.ctcThickness"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 19.08"
|
/>
|
</div>
|
<div class="flex items-center gap-2">
|
<span class="w-28 text-right">CTC宽度(mm)</span>
|
<InputNumber
|
v-model:value="reelForm.ctcWidth"
|
class="!flex-1"
|
:min="0"
|
:precision="2"
|
placeholder="如 12.6"
|
/>
|
</div>
|
</div>
|
<div class="mt-4 flex gap-2">
|
<Button type="primary" @click="handleCalcReel">计算</Button>
|
<Button @click="handleFillReel">回填最大容量</Button>
|
</div>
|
<Descriptions v-if="reelResult" class="mt-4" :column="2" bordered>
|
<DescriptionsItem label="每盘长度(m)">
|
{{ reelResult.capacityMeter }}
|
</DescriptionsItem>
|
<DescriptionsItem label="每盘长度(km)">
|
{{ reelResult.capacityKm }}
|
</DescriptionsItem>
|
</Descriptions>
|
</Tabs.TabPane>
|
</Tabs>
|
</Modal>
|
</template>
|