|
@@ -1,5 +1,5 @@
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
-import { onMounted, ref, useTemplateRef } from 'vue';
|
|
|
|
|
|
+import { computed, onMounted, ref, useTemplateRef } from 'vue';
|
|
import { message, Modal } from 'ant-design-vue';
|
|
import { message, Modal } from 'ant-design-vue';
|
|
import { debounce } from 'lodash-es';
|
|
import { debounce } from 'lodash-es';
|
|
|
|
|
|
@@ -12,12 +12,13 @@ import { DictCode } from '@/constants';
|
|
import CustomParams from './CustomParams.vue';
|
|
import CustomParams from './CustomParams.vue';
|
|
import SelectStandardParams from './SelectStandardParams.vue';
|
|
import SelectStandardParams from './SelectStandardParams.vue';
|
|
|
|
|
|
|
|
+import type { FormInstance } from 'ant-design-vue';
|
|
import type { DefaultOptionType, SelectValue } from 'ant-design-vue/es/select';
|
|
import type { DefaultOptionType, SelectValue } from 'ant-design-vue/es/select';
|
|
import type { Key } from 'ant-design-vue/es/table/interface';
|
|
import type { Key } from 'ant-design-vue/es/table/interface';
|
|
-import type { CheckedType, PageParams, ProtocolBaseInfo, ProtocolParamInfo } from '@/types';
|
|
|
|
|
|
+import type { CheckedType, FormRules, PageParams, ProtocolBaseInfo, ProtocolParamInfo } from '@/types';
|
|
|
|
|
|
interface Props {
|
|
interface Props {
|
|
- info: ProtocolBaseInfo;
|
|
|
|
|
|
+ info: Partial<ProtocolBaseInfo>;
|
|
}
|
|
}
|
|
|
|
|
|
const props = defineProps<Props>();
|
|
const props = defineProps<Props>();
|
|
@@ -29,6 +30,115 @@ const { dictData: readContinuousAddr, getDictData: getReadContinuousAddr } = use
|
|
const { dictData: byteOrderList, getDictData: getByteOrderList } = useDictData(DictCode.ByteOrder);
|
|
const { dictData: byteOrderList, getDictData: getByteOrderList } = useDictData(DictCode.ByteOrder);
|
|
const { dictData: addrOrderList, getDictData: getAddrOrderList } = useDictData(DictCode.AddrOrder);
|
|
const { dictData: addrOrderList, getDictData: getAddrOrderList } = useDictData(DictCode.AddrOrder);
|
|
|
|
|
|
|
|
+const formRef = ref<FormInstance>();
|
|
|
|
+
|
|
|
|
+const rules = computed<FormRules<ProtocolBaseInfo>>(() => {
|
|
|
|
+ return {
|
|
|
|
+ protocolName: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzEnter', { name: t('setupProtocol.protocolName') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ protocolType: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('setupProtocol.plzSelectProtocolType'),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ deviceType: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzSelect', { name: t('setupProtocol.deviceType') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ dataBit: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzSelect', { name: t('setupProtocol.dataBit') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ parityBit: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzSelect', { name: t('setupProtocol.parityBit') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ stopBit: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzSelect', { name: t('setupProtocol.stopBit') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ baudRate: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzSelect', { name: t('setupProtocol.baudRate') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ dataSendInterval: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzEnter', { name: t('setupProtocol.dataSendInterval') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ highFreqSendInterval: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzEnter', { name: t('setupProtocol.highFreqSendInterval') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ readTimeout: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzEnter', { name: t('setupProtocol.readTimeout') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ nextDataReadDelay: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzEnter', { name: t('setupProtocol.nextDataReadDelay') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ nextRoundDataReadDelay: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzEnter', { name: t('setupProtocol.nextRoundDataReadDelay') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ byteOrder: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzSelect', { name: t('setupProtocol.byteOrder') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ addrOrder: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: t('common.plzSelect', { name: t('setupProtocol.addrOrder') }),
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ };
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+const validateProtocolInfo = async () => {
|
|
|
|
+ await formRef.value?.validate();
|
|
|
|
+};
|
|
|
|
+
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
handleRequest(async () => {
|
|
handleRequest(async () => {
|
|
await getProtocolTypes();
|
|
await getProtocolTypes();
|
|
@@ -130,11 +240,15 @@ const deleteSelectedParams = () => {
|
|
|
|
|
|
const customParamsRef = useTemplateRef('customParams');
|
|
const customParamsRef = useTemplateRef('customParams');
|
|
const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
|
|
+
|
|
|
|
+defineExpose({
|
|
|
|
+ validateProtocolInfo,
|
|
|
|
+});
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<template>
|
|
<template>
|
|
<div>
|
|
<div>
|
|
- <AForm class="protocol-container" layout="vertical">
|
|
|
|
|
|
+ <AForm class="protocol-container" ref="formRef" :model="info" :rules="rules" layout="vertical">
|
|
<div class="protocol-label">{{ $t('common.basicInfo') }}</div>
|
|
<div class="protocol-label">{{ $t('common.basicInfo') }}</div>
|
|
<ARow>
|
|
<ARow>
|
|
<ACol :span="6">
|
|
<ACol :span="6">
|
|
@@ -210,6 +324,7 @@ const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="info.dataSendInterval"
|
|
v-model:value="info.dataSendInterval"
|
|
class="protocol-input"
|
|
class="protocol-input"
|
|
|
|
+ :placeholder="$t('common.plzEnter')"
|
|
addon-after="s"
|
|
addon-after="s"
|
|
:min="0"
|
|
:min="0"
|
|
:precision="0"
|
|
:precision="0"
|
|
@@ -221,6 +336,7 @@ const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="info.highFreqSendInterval"
|
|
v-model:value="info.highFreqSendInterval"
|
|
class="protocol-input"
|
|
class="protocol-input"
|
|
|
|
+ :placeholder="$t('common.plzEnter')"
|
|
addon-after="s"
|
|
addon-after="s"
|
|
:min="0"
|
|
:min="0"
|
|
:precision="0"
|
|
:precision="0"
|
|
@@ -232,6 +348,7 @@ const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="info.readTimeout"
|
|
v-model:value="info.readTimeout"
|
|
class="protocol-input"
|
|
class="protocol-input"
|
|
|
|
+ :placeholder="$t('common.plzEnter')"
|
|
addon-after="ms"
|
|
addon-after="ms"
|
|
:min="0"
|
|
:min="0"
|
|
:precision="0"
|
|
:precision="0"
|
|
@@ -243,6 +360,7 @@ const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="info.nextDataReadDelay"
|
|
v-model:value="info.nextDataReadDelay"
|
|
class="protocol-input"
|
|
class="protocol-input"
|
|
|
|
+ :placeholder="$t('common.plzEnter')"
|
|
addon-after="ms"
|
|
addon-after="ms"
|
|
:min="0"
|
|
:min="0"
|
|
:precision="0"
|
|
:precision="0"
|
|
@@ -254,6 +372,7 @@ const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="info.nextRoundDataReadDelay"
|
|
v-model:value="info.nextRoundDataReadDelay"
|
|
class="protocol-input"
|
|
class="protocol-input"
|
|
|
|
+ :placeholder="$t('common.plzEnter')"
|
|
addon-after="ms"
|
|
addon-after="ms"
|
|
:min="0"
|
|
:min="0"
|
|
:precision="0"
|
|
:precision="0"
|
|
@@ -277,6 +396,7 @@ const selectStandardParamsRef = useTemplateRef('selectStandardParams');
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="info.readContinuousAddrLength"
|
|
v-model:value="info.readContinuousAddrLength"
|
|
class="protocol-input"
|
|
class="protocol-input"
|
|
|
|
+ :placeholder="$t('common.plzEnter')"
|
|
:min="0"
|
|
:min="0"
|
|
:precision="0"
|
|
:precision="0"
|
|
/>
|
|
/>
|