Commit 13166608105874fe4420a798fb50a85ad2f3d4a0

Authored by fengtao
1 parent 19a8e628

feat:联通数据转换接口中的kafka的启用和禁用状态,fix:修改数据管理部分样式问题

... ... @@ -4,6 +4,7 @@
4 4 v-bind="$attrs"
5 5 @register="registerDrawer"
6 6 showFooter
  7 + :title="getTitle"
7 8 width="1000px"
8 9 @ok="handleSubmit"
9 10 >
... ... @@ -32,10 +33,10 @@
32 33 defineComponent,
33 34 reactive,
34 35 ref,
35   - nextTick,
36 36 computed,
37 37 unref,
38 38 getCurrentInstance,
  39 + onMounted,
39 40 } from 'vue';
40 41 import { BasicModal, useModalInner } from '/@/components/Modal';
41 42 import { Steps } from 'ant-design-vue';
... ... @@ -64,6 +65,11 @@
64 65 const getTypeObj = reactive({
65 66 type: '',
66 67 });
  68 + const additionalInfoV = {
  69 + additionalInfo: {
  70 + description: '',
  71 + },
  72 + };
67 73 const getSonFormValue = ref({});
68 74 const getModeSonFormValue = ref({});
69 75 const refTransferConfigParams = ref(null);
... ... @@ -80,9 +86,15 @@
80 86 if (!unref(isUpdate)) {
81 87 try {
82 88 proxy.$refs.refTransferConfigMode.customResetStepOneFunc();
83   - // nextTick(() => {
  89 + // if (data.record.type == 'org.thingsboard.rule.engine.kafka.TbKafkaNode') {
  90 + // proxy.$refs.refTransferConfigParams.clearSonValueDataFunc();
  91 + // } else if (data.record.type == 'org.thingsboard.rule.engine.mqtt.TbMqttNode') {
  92 + // proxy.$refs.refTransferConfigParams.clearSonValueDataFunc();
  93 + // } else if (data.record.type == 'org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode') {
  94 + // proxy.$refs.refTransferConfigParams.clearSonValueDataFunc();
  95 + // } else if (data.record.type == 'org.thingsboard.rule.engine.rest.TbRestApiCallNode') {
84 96 // proxy.$refs.refTransferConfigParams.clearSonValueDataFunc();
85   - // });
  97 + // }
86 98 } catch (e) {
87 99 return e;
88 100 }
... ... @@ -120,57 +132,71 @@
120 132 const handleNext = (args) => {
121 133 current.value++;
122 134 getModeSelectVal.value = args;
123   - if (!unref(isUpdate)) return;
124   - // try {
125   -
126   - // });
127   - // setTimeout(() => {
128   - // proxy.$refs.refTransferConfigParams.clearSonValueDataFunc();
129   - // }, 100);
130   - // } catch (e) {
131   - // return e;
132   - // }
  135 + if (!unref(isUpdate)) {
  136 + proxy.$refs.refTransferConfigParams?.clearSonValueDataFunc();
  137 + console.log('add clear');
  138 + // proxy.$refs.refTransferConfigParams.clearSonValueDataFunc();
  139 + }
133 140 };
134 141 const handlePrev = () => {
135 142 current.value--;
136 143 };
  144 +
  145 + const commonFunc = () => {
  146 + try {
  147 + additionalInfoV.additionalInfo.description =
  148 + getSonFormValue.value.configuration.description;
  149 + delete getSonFormValue.value.configuration.description;
  150 + delete getSonFormValue.value.configuration.type;
  151 + delete getSonFormValue.value?.configuration?.name;
  152 + } catch (e) {
  153 + return e;
  154 + }
  155 + };
137 156 const addOrEditFunc = async () => {
138 157 getModeSonFormValue.value = await proxy.$refs.refTransferConfigMode.getSonValueFunc();
139 158 getSonFormValue.value = await proxy.$refs.refTransferConfigParams.getSonValueDataFunc();
140 159 if (getModeSonFormValue.value?.type == 'KafKA') {
141 160 getTypeObj.type = 'org.thingsboard.rule.engine.kafka.TbKafkaNode';
142 161 getNameObj.name = getSonFormValue.value?.configuration?.name;
143   - delete getSonFormValue.value?.configuration?.name;
  162 + commonFunc();
144 163 } else if (getModeSonFormValue.value?.type == 'MQTT') {
145 164 getTypeObj.type = 'org.thingsboard.rule.engine.mqtt.TbMqttNode';
146 165 getNameObj.name = getSonFormValue.value?.configuration?.name;
147   - delete getSonFormValue.value?.configuration?.name;
  166 + commonFunc();
148 167 } else if (getModeSonFormValue.value?.type == 'RabbitMq') {
149 168 getTypeObj.type = 'org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode';
150 169 getNameObj.name = getSonFormValue.value?.configuration?.name;
151   - delete getSonFormValue.value?.configuration?.name;
  170 + commonFunc();
152 171 } else if (getModeSonFormValue.value?.type == 'Api') {
153 172 getTypeObj.type = 'org.thingsboard.rule.engine.rest.TbRestApiCallNode';
154 173 getNameObj.name = getSonFormValue.value?.configuration?.name;
155   - delete getSonFormValue.value?.configuration?.name;
  174 + commonFunc();
156 175 }
157 176 const id: any = {
158 177 id: unref(isUpdate) ? editPostId.value : '',
159 178 };
160   - Object.assign(allPostForm, getTypeObj, getSonFormValue.value, getNameObj, id);
  179 + Object.assign(
  180 + allPostForm,
  181 + getTypeObj,
  182 + getSonFormValue.value,
  183 + getNameObj,
  184 + id,
  185 + additionalInfoV
  186 + );
161 187 if (!unref(isUpdate)) {
162 188 delete allPostForm.id;
163 189 }
164 190 };
165 191 const handleSubmit = async () => {
166 192 if (!unref(isUpdate)) {
167   - addOrEditFunc();
  193 + await addOrEditFunc();
168 194 await postAddConvertApi(allPostForm);
169 195 createMessage.success('数据转换新增成功');
170 196 emit('success');
171 197 closeModal();
172 198 } else {
173   - addOrEditFunc();
  199 + await addOrEditFunc();
174 200 await postAddConvertApi(allPostForm);
175 201 createMessage.success('数据转换编辑成功');
176 202 emit('success');
... ...
1 1 import { BasicColumn, FormSchema } from '/@/components/Table';
  2 +import { h } from 'vue';
  3 +import { Tag } from 'ant-design-vue';
2 4
3 5 export const columns: BasicColumn[] = [
4 6 {
... ... @@ -10,6 +12,35 @@ export const columns: BasicColumn[] = [
10 12 title: '途径',
11 13 dataIndex: 'type',
12 14 width: 200,
  15 + customRender: ({ record }) => {
  16 + const status = record.type;
  17 + const enable =
  18 + status === 'org.thingsboard.rule.engine.kafka.TbKafkaNode'
  19 + ? 'KafKA'
  20 + : record.type === 'org.thingsboard.rule.engine.mqtt.TbMqttNode'
  21 + ? 'MQTT'
  22 + : record.type === 'org.thingsboard.rule.engine.rabbitmq.TbRabbitMqNode'
  23 + ? 'RabbitMq'
  24 + : 'Api';
  25 + const color =
  26 + enable == 'KafKA'
  27 + ? 'grey'
  28 + : enable == 'MQTT'
  29 + ? 'red'
  30 + : enable == 'RabbitMq'
  31 + ? 'yellow'
  32 + : 'green';
  33 + const text =
  34 + enable == 'KafKA'
  35 + ? 'KafKA'
  36 + : enable == 'MQTT'
  37 + ? 'MQTT'
  38 + : enable == 'RabbitMq'
  39 + ? 'RabbitMq'
  40 + : 'Api';
  41 + return h(Tag, { color: color }, () => text);
  42 + },
  43 +
13 44 format: (_text: string, record: Recordable) => {
14 45 return record.type === 'org.thingsboard.rule.engine.kafka.TbKafkaNode'
15 46 ? 'KafKA'
... ... @@ -24,10 +55,17 @@ export const columns: BasicColumn[] = [
24 55 title: '状态',
25 56 dataIndex: 'status',
26 57 width: 120,
  58 + customRender: ({ record }) => {
  59 + const status = record.status;
  60 + const enable = ~~status === 1;
  61 + const color = enable ? 'blue' : 'red';
  62 + const text = enable ? '启用' : '禁用';
  63 + return h(Tag, { color: color }, () => text);
  64 + },
27 65 },
28 66 {
29 67 title: '描述',
30   - dataIndex: 'description',
  68 + dataIndex: 'configuration.description',
31 69 width: 200,
32 70 },
33 71 {
... ...
1 1 import { FormSchema } from '/@/components/Form';
2 2
3 3 export enum CredentialsEnum {
4   - IS_ANONYMOUS = 'Anonymous',
5   - IS_BASIC = 'Basic',
6   - IS_PEM = 'PEM',
  4 + IS_ANONYMOUS = 'anonymous',
  5 + IS_BASIC = 'basic',
  6 + IS_PEM = 'pem',
7 7 }
8 8
9 9 export const isBasic = (type: string) => {
... ... @@ -57,6 +57,31 @@ export const modeKafkaInseretKeyAndValueForm: FormSchema[] = [
57 57 },
58 58 ];
59 59
  60 +export const modeApiInseretKeyAndValueForm: FormSchema[] = [
  61 + {
  62 + field: 'key',
  63 + label: 'Header',
  64 + colProps: { span: 12 },
  65 + required: true,
  66 + component: 'Input',
  67 + componentProps: {
  68 + maxLength: 255,
  69 + placeholder: '请输入Header',
  70 + },
  71 + },
  72 + {
  73 + field: 'value',
  74 + label: 'Value',
  75 + colProps: { span: 12 },
  76 + required: true,
  77 + component: 'Input',
  78 + componentProps: {
  79 + maxLength: 255,
  80 + placeholder: '请输入Value',
  81 + },
  82 + },
  83 +];
  84 +
60 85 export const modeKafkaForm: FormSchema[] = [
61 86 {
62 87 field: 'name',
... ... @@ -75,6 +100,7 @@ export const modeKafkaForm: FormSchema[] = [
75 100 colProps: { span: 12 },
76 101 required: true,
77 102 component: 'Input',
  103 + defaultValue: 'my-topic',
78 104 componentProps: {
79 105 maxLength: 255,
80 106 placeholder: '请输入Topic pattern',
... ... @@ -85,9 +111,11 @@ export const modeKafkaForm: FormSchema[] = [
85 111 label: 'Bootstrap',
86 112 colProps: { span: 12 },
87 113 component: 'Input',
  114 + defaultValue: 'localhost:9092',
  115 + required: true,
88 116 componentProps: {
89 117 maxLength: 255,
90   - placeholder: 'localhost',
  118 + placeholder: 'localhost:9092',
91 119 },
92 120 },
93 121 {
... ... @@ -139,6 +167,7 @@ export const modeKafkaForm: FormSchema[] = [
139 167 component: 'Select',
140 168 label: 'Acks',
141 169 colProps: { span: 12 },
  170 + defaultValue: '-1',
142 171 componentProps: {
143 172 placeholder: '请选择Number of acknowledgments',
144 173 options: [
... ... @@ -193,6 +222,7 @@ export const modeKafkaForm: FormSchema[] = [
193 222 label: 'Charset',
194 223 required: true,
195 224 colProps: { span: 12 },
  225 + defaultValue: 'UTF-8',
196 226 componentProps: {
197 227 placeholder: '请选择Charset encoding',
198 228 options: [
... ... @@ -204,7 +234,7 @@ export const modeKafkaForm: FormSchema[] = [
204 234 { label: 'UTF-16', value: 'UTF-16' },
205 235 ],
206 236 },
207   - show: ({ values }) => {
  237 + ifShow: ({ values }) => {
208 238 return !!values.addMetadataKeyValuesAsKafkaHeaders;
209 239 },
210 240 },
... ... @@ -250,6 +280,7 @@ export const modeMqttForm: FormSchema[] = [
250 280 colProps: { span: 12 },
251 281 component: 'Input',
252 282 required: true,
  283 + defaultValue: 'localhost',
253 284 componentProps: {
254 285 maxLength: 255,
255 286 placeholder: '请输入Host',
... ... @@ -259,7 +290,8 @@ export const modeMqttForm: FormSchema[] = [
259 290 field: 'port',
260 291 label: 'Port',
261 292 colProps: { span: 12 },
262   - component: 'Input',
  293 + component: 'InputNumber',
  294 + defaultValue: 1883,
263 295 required: true,
264 296 componentProps: {
265 297 maxLength: 255,
... ... @@ -270,7 +302,8 @@ export const modeMqttForm: FormSchema[] = [
270 302 field: 'connectTimeoutSec',
271 303 label: 'Connection',
272 304 colProps: { span: 12 },
273   - component: 'Input',
  305 + component: 'InputNumber',
  306 + defaultValue: 10,
274 307 required: true,
275 308 componentProps: {
276 309 maxLength: 255,
... ... @@ -309,9 +342,9 @@ export const modeMqttForm: FormSchema[] = [
309 342 componentProps: {
310 343 placeholder: '请选择Credentials',
311 344 options: [
312   - { label: 'Anonymous', value: 'Anonymous' },
313   - { label: 'Basic', value: 'Basic' },
314   - { label: 'PEM', value: 'PEM' },
  345 + { label: 'Anonymous', value: 'anonymous' },
  346 + { label: 'Basic', value: 'basic' },
  347 + { label: 'PEM', value: 'pem' },
315 348 ],
316 349 },
317 350 },
... ... @@ -440,6 +473,7 @@ export const modeRabbitMqForm: FormSchema[] = [
440 473 colProps: { span: 12 },
441 474 component: 'Input',
442 475 required: true,
  476 + defaultValue: 'localhost',
443 477 componentProps: {
444 478 maxLength: 255,
445 479 placeholder: 'localhost',
... ... @@ -449,7 +483,8 @@ export const modeRabbitMqForm: FormSchema[] = [
449 483 field: 'port',
450 484 label: 'Port',
451 485 colProps: { span: 12 },
452   - component: 'Input',
  486 + component: 'InputNumber',
  487 + defaultValue: 5672,
453 488 required: true,
454 489 componentProps: {
455 490 maxLength: 255,
... ... @@ -461,6 +496,7 @@ export const modeRabbitMqForm: FormSchema[] = [
461 496 label: 'Virtual',
462 497 colProps: { span: 12 },
463 498 component: 'Input',
  499 + defaultValue: '/',
464 500 componentProps: {
465 501 maxLength: 255,
466 502 placeholder: '/',
... ... @@ -471,6 +507,7 @@ export const modeRabbitMqForm: FormSchema[] = [
471 507 label: 'Username',
472 508 colProps: { span: 12 },
473 509 component: 'Input',
  510 + defaultValue: 'guest',
474 511 componentProps: {
475 512 maxLength: 255,
476 513 placeholder: '请输入Username',
... ... @@ -481,6 +518,7 @@ export const modeRabbitMqForm: FormSchema[] = [
481 518 label: 'Password',
482 519 colProps: { span: 12 },
483 520 component: 'Input',
  521 + defaultValue: 'guest',
484 522 componentProps: {
485 523 maxLength: 255,
486 524 placeholder: '请输入Password',
... ... @@ -497,7 +535,8 @@ export const modeRabbitMqForm: FormSchema[] = [
497 535 field: 'connectionTimeout',
498 536 label: 'Connection',
499 537 colProps: { span: 12 },
500   - component: 'Input',
  538 + component: 'InputNumber',
  539 + defaultValue: 60000,
501 540 componentProps: {
502 541 maxLength: 255,
503 542 placeholder: '请输入Connection timeout (ms)',
... ... @@ -507,7 +546,8 @@ export const modeRabbitMqForm: FormSchema[] = [
507 546 field: 'handshakeTimeout',
508 547 label: 'Handshake',
509 548 colProps: { span: 12 },
510   - component: 'Input',
  549 + component: 'InputNumber',
  550 + defaultValue: 10000,
511 551 componentProps: {
512 552 maxLength: 255,
513 553 placeholder: '请输入Handshake timeout (ms)',
... ... @@ -550,6 +590,7 @@ export const modeApiForm: FormSchema[] = [
550 590 label: 'Endpoint',
551 591 colProps: { span: 12 },
552 592 required: true,
  593 + defaultValue: 'http://localhost/api',
553 594 component: 'Input',
554 595 componentProps: {
555 596 maxLength: 255,
... ... @@ -561,6 +602,7 @@ export const modeApiForm: FormSchema[] = [
561 602 component: 'Select',
562 603 label: 'Request',
563 604 colProps: { span: 12 },
  605 + defaultValue: 'POST',
564 606 componentProps: {
565 607 placeholder: '请选择Request method',
566 608 options: [
... ... @@ -589,7 +631,7 @@ export const modeApiForm: FormSchema[] = [
589 631 maxLength: 255,
590 632 placeholder: 'http或者https开头',
591 633 },
592   - show: ({ values }) => {
  634 + ifShow: ({ values }) => {
593 635 return !!values.enableProxy;
594 636 },
595 637 },
... ... @@ -598,12 +640,13 @@ export const modeApiForm: FormSchema[] = [
598 640 label: 'Port',
599 641 colProps: { span: 12 },
600 642 required: true,
601   - component: 'Input',
  643 + component: 'InputNumber',
  644 + defaultValue: 0,
602 645 componentProps: {
603 646 maxLength: 255,
604 647 placeholder: 'http或者https开头',
605 648 },
606   - show: ({ values }) => {
  649 + ifShow: ({ values }) => {
607 650 return !!values.enableProxy;
608 651 },
609 652 },
... ... @@ -617,7 +660,7 @@ export const modeApiForm: FormSchema[] = [
617 660 maxLength: 255,
618 661 placeholder: '请输入Proxy user',
619 662 },
620   - show: ({ values }) => {
  663 + ifShow: ({ values }) => {
621 664 return !!values.enableProxy;
622 665 },
623 666 },
... ... @@ -631,7 +674,7 @@ export const modeApiForm: FormSchema[] = [
631 674 maxLength: 255,
632 675 placeholder: '请输入Proxy password',
633 676 },
634   - show: ({ values }) => {
  677 + ifShow: ({ values }) => {
635 678 return !!values.enableProxy;
636 679 },
637 680 },
... ... @@ -648,12 +691,13 @@ export const modeApiForm: FormSchema[] = [
648 691 label: 'Max',
649 692 colProps: { span: 12 },
650 693 required: true,
651   - component: 'Input',
  694 + component: 'InputNumber',
  695 + defaultValue: 0,
652 696 componentProps: {
653 697 maxLength: 255,
654 698 placeholder: '请输入Max number of paraller requests',
655 699 },
656   - show: ({ values }) => {
  700 + ifShow: ({ values }) => {
657 701 return !!values.useSystemProxyProperties;
658 702 },
659 703 },
... ... @@ -669,12 +713,13 @@ export const modeApiForm: FormSchema[] = [
669 713 label: 'Read',
670 714 colProps: { span: 12 },
671 715 required: true,
672   - component: 'Input',
  716 + component: 'InputNumber',
  717 + defaultValue: 0,
673 718 componentProps: {
674 719 maxLength: 255,
675 720 placeholder: '请输入Read timeout in times',
676 721 },
677   - show: ({ values }) => {
  722 + ifShow: ({ values }) => {
678 723 return !values.useSystemProxyProperties;
679 724 },
680 725 },
... ... @@ -683,16 +728,41 @@ export const modeApiForm: FormSchema[] = [
683 728 label: 'Max',
684 729 colProps: { span: 12 },
685 730 required: true,
686   - component: 'Input',
  731 + component: 'InputNumber',
  732 + defaultValue: 0,
687 733 componentProps: {
688 734 maxLength: 255,
689 735 placeholder: '请输入Max number of paraller requests',
690 736 },
691   - show: ({ values }) => {
  737 + ifShow: ({ values }) => {
692 738 return !values.useSystemProxyProperties;
693 739 },
694 740 },
695 741 {
  742 + field: 'Header',
  743 + label: 'Header',
  744 + colProps: { span: 12 },
  745 + required: true,
  746 + component: 'Input',
  747 + defaultValue: 'Content-Type',
  748 + componentProps: {
  749 + maxLength: 255,
  750 + placeholder: 'Content-Type',
  751 + },
  752 + },
  753 + {
  754 + field: 'Value',
  755 + label: 'Value',
  756 + colProps: { span: 12 },
  757 + required: true,
  758 + component: 'Input',
  759 + defaultValue: 'application/json',
  760 + componentProps: {
  761 + maxLength: 255,
  762 + placeholder: 'application/json',
  763 + },
  764 + },
  765 + {
696 766 field: '1',
697 767 label: '',
698 768 colProps: { span: 24 },
... ... @@ -713,7 +783,7 @@ export const modeApiForm: FormSchema[] = [
713 783 colProps: { span: 12 },
714 784 component: 'Checkbox',
715 785 renderComponentContent: 'Trim redis queue',
716   - show: ({ values }) => {
  786 + ifShow: ({ values }) => {
717 787 return !!values.useRedisQueueForMsgPersistence;
718 788 },
719 789 },
... ... @@ -722,12 +792,13 @@ export const modeApiForm: FormSchema[] = [
722 792 label: 'Redis',
723 793 colProps: { span: 12 },
724 794 required: true,
725   - component: 'Input',
  795 + component: 'InputNumber',
  796 + defaultValue: 0,
726 797 componentProps: {
727 798 maxLength: 255,
728 799 placeholder: '请输入Redis queue max size',
729 800 },
730   - show: ({ values }) => {
  801 + ifShow: ({ values }) => {
731 802 return !!values.useRedisQueueForMsgPersistence;
732 803 },
733 804 },
... ... @@ -740,9 +811,9 @@ export const modeApiForm: FormSchema[] = [
740 811 componentProps: {
741 812 placeholder: '请选择Number of acknowledgments',
742 813 options: [
743   - { label: 'Anonymous', value: 'Anonymous' },
744   - { label: 'Basic', value: 'Basic' },
745   - { label: 'PEM', value: 'PEM' },
  814 + { label: 'Anonymous', value: 'anonymous' },
  815 + { label: 'Basic', value: 'basic' },
  816 + { label: 'PEM', value: 'pem' },
746 817 ],
747 818 },
748 819 },
... ... @@ -763,6 +834,7 @@ export const modeApiForm: FormSchema[] = [
763 834 label: 'Password',
764 835 colProps: { span: 12 },
765 836 component: 'Input',
  837 + required: true,
766 838 componentProps: {
767 839 maxLength: 255,
768 840 placeholder: '请输入Password',
... ...
... ... @@ -121,10 +121,13 @@
121 121 <script lang="ts">
122 122 import { defineComponent, ref, reactive } from 'vue';
123 123 import { BasicForm, useForm } from '/@/components/Form';
124   - import { modeApiForm, modeKafkaInseretKeyAndValueForm } from '../config';
  124 + import { modeApiForm, modeApiInseretKeyAndValueForm } from '../config';
125 125 import { InboxOutlined } from '@ant-design/icons-vue';
126 126 import { Alert, Divider, Descriptions, Upload } from 'ant-design-vue';
127   -
  127 + interface IKeyAndValue {
  128 + key: string;
  129 + value: string;
  130 + }
128 131 export default defineComponent({
129 132 components: {
130 133 BasicForm,
... ... @@ -139,6 +142,21 @@
139 142 setup(_, { emit }) {
140 143 const fileList = ref<[]>([]);
141 144 const keyAndValueArr = ref<[]>([]);
  145 + const temp = ref({});
  146 + let tempObj = ref({});
  147 + const otherPropertiesValues = reactive({
  148 + headers: {},
  149 + });
  150 + const credentialsV = reactive({
  151 + credentials: {
  152 + type: '',
  153 + },
  154 + });
  155 + const keyAndValueArrTemp = ref<[]>([]);
  156 + const keyAndValueObj = reactive<IKeyAndValue>({
  157 + key: '',
  158 + value: '',
  159 + });
142 160 const sonValues = reactive({
143 161 configuration: {},
144 162 });
... ... @@ -156,15 +174,18 @@
156 174 submitFunc: customSubmitFunc,
157 175 });
158 176
159   - const [registerKeyAndValue] = useForm({
  177 + const [registerKeyAndValue, { validate: validateKeyAndValue }] = useForm({
160 178 labelWidth: 80,
161   - schemas: modeKafkaInseretKeyAndValueForm,
  179 + schemas: modeApiInseretKeyAndValueForm,
162 180 actionColOptions: {
163 181 span: 14,
164 182 },
165 183 });
166   - const setStepTwoFieldsValueFunc = (v) => {
  184 + const setStepTwoFieldsValueFunc = (v, v1) => {
167 185 setFieldsValue(v);
  186 + setFieldsValue({
  187 + name: v1,
  188 + });
168 189 };
169 190 const customClearStepTwoValueFunc = () => {
170 191 resetFields();
... ... @@ -180,21 +201,26 @@
180 201 } finally {
181 202 }
182 203 }
183   - const defaultAddKeyAndValueFunc = () => {
184   - if (keyAndValueArr.value.length == 0) {
185   - keyAndValueArr.value.push({
186   - key: 1,
187   - value: 1,
188   - });
189   - }
  204 + const tempGetKeyAndVal = async () => {
  205 + temp.value = await validateKeyAndValue();
190 206 };
191   - defaultAddKeyAndValueFunc();
  207 + // const defaultAddKeyAndValueFunc = () => {
  208 + // if (keyAndValueArr.value.length == 0) {
  209 + // keyAndValueArr.value.push(keyAndValueObj as never);
  210 + // }
  211 + // };
  212 + // defaultAddKeyAndValueFunc();
192 213
193   - const addKeyAndValueFunc = () => {
194   - keyAndValueArr.value.push({
195   - key: 1,
196   - value: 1,
197   - });
  214 + const getDefaultValue = async () => {
  215 + await tempGetKeyAndVal();
  216 + keyAndValueArrTemp.value.push(temp.value as never);
  217 + };
  218 +
  219 + const addKeyAndValueFunc = async () => {
  220 + keyAndValueArr.value.push(keyAndValueObj as never);
  221 + await tempGetKeyAndVal();
  222 + tempObj.value = temp.value;
  223 + keyAndValueArrTemp.value.push(tempObj.value as never);
198 224 };
199 225 const removeKeyAndValueFunc = () => {
200 226 keyAndValueArr.value.splice(0, 1);
... ... @@ -203,6 +229,18 @@
203 229
204 230 const getSonValueFunc = async () => {
205 231 sonValues.configuration = await validate();
  232 + if (keyAndValueArrTemp.value.length != 0) {
  233 + await getDefaultValue();
  234 + }
  235 + credentialsV.credentials.type = sonValues.configuration.type;
  236 + const kong = {};
  237 + let kongTemp = {};
  238 + keyAndValueArrTemp.value.map((item) => {
  239 + kong[item.key] = item.value;
  240 + });
  241 + kongTemp = JSON.parse(JSON.stringify(kong));
  242 + otherPropertiesValues.headers = kongTemp;
  243 + Object.assign(sonValues.configuration, otherPropertiesValues, credentialsV);
206 244 return sonValues;
207 245 };
208 246 return {
... ...
... ... @@ -6,14 +6,16 @@
6 6 <span style="display: none">{{ field }}</span>
7 7 <div>
8 8 <div>
9   - <template v-for="(item, index) in keyAndValueArr" :key="index">
10   - <span style="display: none">{{ item + index }}</span>
11   - <BasicForm
12   - :showResetButton="false"
13   - :showSubmitButton="false"
14   - @register="registerKeyAndValue"
15   - />
16   - </template>
  9 + <div v-if="keyAndValueArr.length > 0">
  10 + <template v-for="(item, index) in keyAndValueArr" :key="index">
  11 + <span style="display: none">{{ item + index }}</span>
  12 + <BasicForm
  13 + :showResetButton="false"
  14 + :showSubmitButton="false"
  15 + @register="registerKeyAndValue"
  16 + />
  17 + </template>
  18 + </div>
17 19 <div
18 20 style="
19 21 width: 5vw;
... ... @@ -78,7 +80,7 @@
78 80 </template>
79 81 <script lang="ts">
80 82 import { defineComponent, ref, reactive } from 'vue';
81   - import { BasicForm, useForm } from '/@/components/Form';
  83 + import { BasicForm, useForm, FormActionType } from '/@/components/Form';
82 84 import { modeKafkaForm, modeKafkaInseretKeyAndValueForm } from '../config';
83 85 import { Alert, Divider, Descriptions } from 'ant-design-vue';
84 86
... ... @@ -101,6 +103,7 @@
101 103 let tempObj = ref({});
102 104 const keyAndValueArr = ref<[]>([]);
103 105 const keyAndValueArrTemp = ref<[]>([]);
  106 + const vType = ref('');
104 107 const keyAndValueObj = reactive<IKeyAndValue>({
105 108 key: '',
106 109 value: '',
... ... @@ -111,7 +114,8 @@
111 114 const otherPropertiesValues = reactive({
112 115 otherProperties: {},
113 116 });
114   - const [register, { validate, setFieldsValue, resetFields }] = useForm({
  117 +
  118 + const [register, { validate, setFieldsValue }] = useForm({
115 119 labelWidth: 80,
116 120 schemas: modeKafkaForm,
117 121 actionColOptions: {
... ... @@ -123,7 +127,7 @@
123 127 resetFunc: customResetFunc,
124 128 });
125 129
126   - const [registerKeyAndValue, { validate: validateKeyAndValue }] = useForm({
  130 + const [registerKeyAndValue, { validate: validateKeyAndValue, resetFields }] = useForm({
127 131 labelWidth: 80,
128 132 schemas: modeKafkaInseretKeyAndValueForm,
129 133 actionColOptions: {
... ... @@ -132,14 +136,17 @@
132 136 });
133 137
134 138 const setStepTwoFieldsValueFunc = (v, v1) => {
135   - console.log(v);
136 139 setFieldsValue(v);
  140 + vType.value = v1;
137 141 setFieldsValue({
138 142 name: v1,
139 143 });
140 144 };
141 145 const customClearStepTwoValueFunc = () => {
142   - resetFields();
  146 + console.log('clear');
  147 + setTimeout(() => {
  148 + resetFields();
  149 + }, 100);
143 150 };
144 151 async function customResetFunc() {
145 152 emit('prev');
... ... @@ -148,35 +155,46 @@
148 155 const tempGetKeyAndVal = async () => {
149 156 temp.value = await validateKeyAndValue();
150 157 };
151   - const defaultAddKeyAndValueFunc = () => {
152   - if (keyAndValueArr.value.length == 0) {
153   - keyAndValueArr.value.push(keyAndValueObj as never);
154   - }
155   - };
156   - defaultAddKeyAndValueFunc();
  158 + // const defaultAddKeyAndValueFunc = () => {
  159 + // if (keyAndValueArr.value.length == 0) {
  160 + // keyAndValueArr.value.push(keyAndValueObj as never);
  161 + // }
  162 + // };
  163 + // defaultAddKeyAndValueFunc();
157 164
158   - const getDefaultValue = () => {
159   - tempGetKeyAndVal();
  165 + const getDefaultValue = async () => {
  166 + await tempGetKeyAndVal();
160 167 keyAndValueArrTemp.value.push(temp.value as never);
161 168 };
162 169
163   - const addKeyAndValueFunc = () => {
  170 + const addKeyAndValueFunc = async () => {
164 171 keyAndValueArr.value.push(keyAndValueObj as never);
165   - tempGetKeyAndVal();
  172 + await tempGetKeyAndVal();
166 173 tempObj.value = temp.value;
167 174 keyAndValueArrTemp.value.push(tempObj.value as never);
168   - console.log(keyAndValueArrTemp.value);
169 175 };
170 176 const removeKeyAndValueFunc = () => {
171 177 keyAndValueArr.value.splice(0, 1);
172 178 };
173 179
174 180 const getSonValueFunc = async () => {
175   - sonValues.configuration = await validate();
176   - getDefaultValue();
177   - console.log(sonValues.configuration);
178   - console.log(otherPropertiesValues.otherProperties);
179   - return sonValues;
  181 + try {
  182 + sonValues.configuration = await validate();
  183 + if (keyAndValueArrTemp.value.length != 0) {
  184 + await getDefaultValue();
  185 + }
  186 + const kong = {};
  187 + let kongTemp = {};
  188 + keyAndValueArrTemp.value.map((item) => {
  189 + kong[item.key] = item.value;
  190 + });
  191 + kongTemp = JSON.parse(JSON.stringify(kong));
  192 + otherPropertiesValues.otherProperties = kongTemp;
  193 + Object.assign(sonValues.configuration, otherPropertiesValues);
  194 + return sonValues;
  195 + } catch (e) {
  196 + return e;
  197 + }
180 198 };
181 199 return {
182 200 getSonValueFunc,
... ... @@ -198,6 +216,7 @@
198 216 border: 1px solid #bfbfbf;
199 217 display: flex;
200 218 margin-top: 1vh;
  219 + border-radius: 8px;
201 220 .root-form {
202 221 width: 44vw;
203 222 margin: 1vh 1vw;
... ...
... ... @@ -83,6 +83,11 @@
83 83 emits: ['next', 'prev', 'register'],
84 84 setup(_, { emit }) {
85 85 const fileList = ref<[]>([]);
  86 + const credentialsV = reactive({
  87 + credentials: {
  88 + type: '',
  89 + },
  90 + });
86 91 const sonValues = reactive({
87 92 configuration: {},
88 93 });
... ... @@ -99,8 +104,11 @@
99 104 resetFunc: customResetFunc,
100 105 submitFunc: customSubmitFunc,
101 106 });
102   - const setStepTwoFieldsValueFunc = (v) => {
  107 + const setStepTwoFieldsValueFunc = (v, v1) => {
103 108 setFieldsValue(v);
  109 + setFieldsValue({
  110 + name: v1,
  111 + });
104 112 };
105 113 const customClearStepTwoValueFunc = () => {
106 114 resetFields();
... ... @@ -119,6 +127,8 @@
119 127 const handleChange = () => {};
120 128 const getSonValueFunc = async () => {
121 129 sonValues.configuration = await validate();
  130 + credentialsV.credentials.type = sonValues.configuration.type;
  131 + Object.assign(sonValues.configuration, credentialsV);
122 132 return sonValues;
123 133 };
124 134 return {
... ...
... ... @@ -65,9 +65,12 @@
65 65 import { defineComponent, ref, reactive } from 'vue';
66 66 import { BasicForm, useForm } from '/@/components/Form';
67 67 import { modeRabbitMqForm, modeKafkaInseretKeyAndValueForm } from '../config';
68   -
69 68 import { Alert, Divider, Descriptions } from 'ant-design-vue';
70 69
  70 + interface IKeyAndValue {
  71 + key: string;
  72 + value: string;
  73 + }
71 74 export default defineComponent({
72 75 components: {
73 76 BasicForm,
... ... @@ -78,6 +81,17 @@
78 81 },
79 82 emits: ['next', 'prev', 'register'],
80 83 setup(_, { emit }) {
  84 + const temp = ref({});
  85 + let tempObj = ref({});
  86 + const otherPropertiesValues = reactive({
  87 + clientProperties: {},
  88 + });
  89 +
  90 + const keyAndValueArrTemp = ref<[]>([]);
  91 + const keyAndValueObj = reactive<IKeyAndValue>({
  92 + key: '',
  93 + value: '',
  94 + });
81 95 const keyAndValueArr = ref<[]>([]);
82 96 const sonValues = reactive({
83 97 configuration: {},
... ... @@ -97,7 +111,7 @@
97 111 submitFunc: customSubmitFunc,
98 112 });
99 113
100   - const [registerKeyAndValue] = useForm({
  114 + const [registerKeyAndValue, { validate: validateKeyAndValue }] = useForm({
101 115 labelWidth: 80,
102 116 schemas: modeKafkaInseretKeyAndValueForm,
103 117 actionColOptions: {
... ... @@ -105,8 +119,11 @@
105 119 },
106 120 });
107 121
108   - const setStepTwoFieldsValueFunc = (v) => {
  122 + const setStepTwoFieldsValueFunc = (v, v1) => {
109 123 setFieldsValue(v);
  124 + setFieldsValue({
  125 + name: v1,
  126 + });
110 127 };
111 128 const customClearStepTwoValueFunc = () => {
112 129 resetFields();
... ... @@ -122,27 +139,43 @@
122 139 } finally {
123 140 }
124 141 }
125   - const defaultAddKeyAndValueFunc = () => {
126   - if (keyAndValueArr.value.length == 0) {
127   - keyAndValueArr.value.push({
128   - key: 1,
129   - value: 1,
130   - });
131   - }
  142 + const tempGetKeyAndVal = async () => {
  143 + temp.value = await validateKeyAndValue();
132 144 };
133   - defaultAddKeyAndValueFunc();
  145 + // const defaultAddKeyAndValueFunc = () => {
  146 + // if (keyAndValueArr.value.length == 0) {
  147 + // keyAndValueArr.value.push(keyAndValueObj as never);
  148 + // }
  149 + // };
  150 + // defaultAddKeyAndValueFunc();
134 151
135   - const addKeyAndValueFunc = () => {
136   - keyAndValueArr.value.push({
137   - key: 1,
138   - value: 1,
139   - });
  152 + const getDefaultValue = async () => {
  153 + await tempGetKeyAndVal();
  154 + keyAndValueArrTemp.value.push(temp.value as never);
  155 + };
  156 +
  157 + const addKeyAndValueFunc = async () => {
  158 + keyAndValueArr.value.push(keyAndValueObj as never);
  159 + await tempGetKeyAndVal();
  160 + tempObj.value = temp.value;
  161 + keyAndValueArrTemp.value.push(tempObj.value as never);
140 162 };
141 163 const removeKeyAndValueFunc = () => {
142 164 keyAndValueArr.value.splice(0, 1);
143 165 };
144 166 const getSonValueFunc = async () => {
145 167 sonValues.configuration = await validate();
  168 + if (keyAndValueArrTemp.value.length != 0) {
  169 + await getDefaultValue();
  170 + }
  171 + const kong = {};
  172 + let kongTemp = {};
  173 + keyAndValueArrTemp.value.map((item) => {
  174 + kong[item.key] = item.value;
  175 + });
  176 + kongTemp = JSON.parse(JSON.stringify(kong));
  177 + otherPropertiesValues.clientProperties = kongTemp;
  178 + Object.assign(sonValues.configuration, otherPropertiesValues);
146 179 return sonValues;
147 180 };
148 181
... ...
... ... @@ -46,6 +46,7 @@
46 46 const refTransferConfigRabbitMq = ref(null);
47 47 const refTransferConfigApi = ref(null);
48 48 const isWhereComp = ref('');
  49 +
49 50 const editSonData = reactive({
50 51 type: '',
51 52 configuration: {},
... ... @@ -61,19 +62,23 @@
61 62 }
62 63 );
63 64 const clearSonValueDataFunc = () => {
64   - try {
65   - if (isWhereComp.value == 'KafKA') {
66   - proxy.$refs.refTransferConfigKafka.customClearStepTwoValueFunc();
67   - } else if (isWhereComp.value == 'MQTT') {
68   - proxy.$refs.refTransferConfigMqtt.customClearStepTwoValueFunc();
69   - } else if (isWhereComp.value == 'RabbitMq') {
70   - proxy.$refs.refTransferConfigRabbitMq.customClearStepTwoValueFunc();
71   - } else if (isWhereComp.value == 'Api') {
72   - proxy.$refs.refTransferConfigApi.customClearStepTwoValueFunc();
73   - }
74   - } catch (e) {
75   - return e;
76   - }
  65 + proxy.$refs.refTransferConfigKafka.customClearStepTwoValueFunc();
  66 +
  67 + // try {
  68 + // if (isWhereComp.value == 'KafKA') {
  69 + // onMounted(() => {
  70 + // proxy.$refs.refTransferConfigKafka.customClearStepTwoValueFunc();
  71 + // });
  72 + // } else if (isWhereComp.value == 'MQTT') {
  73 + // proxy.$refs.refTransferConfigMqtt.customClearStepTwoValueFunc();
  74 + // } else if (isWhereComp.value == 'RabbitMq') {
  75 + // proxy.$refs.refTransferConfigRabbitMq.customClearStepTwoValueFunc();
  76 + // } else if (isWhereComp.value == 'Api') {
  77 + // proxy.$refs.refTransferConfigApi.customClearStepTwoValueFunc();
  78 + // }
  79 + // } catch (e) {
  80 + // return e;
  81 + // }
77 82 };
78 83 const getSonValueDataFunc = () => {
79 84 if (isWhereComp.value == 'KafKA') {
... ...
... ... @@ -14,6 +14,13 @@
14 14 >
15 15 <span style="color: white">批量删除</span>
16 16 </a-button>
  17 + <a-button
  18 + @click="handleMutiuteDisable"
  19 + style="background-color: rgba(128, 128, 128.2)"
  20 + type="default"
  21 + >
  22 + <span style="color: white">批量禁用</span>
  23 + </a-button>
17 24 </template>
18 25 <template #action="{ record }">
19 26 <TableAction
... ... @@ -21,7 +28,11 @@
21 28 {
22 29 label: '编辑',
23 30 icon: 'clarity:note-edit-line',
  31 + color: 'success',
24 32 onClick: handleEdit.bind(null, record),
  33 + ifShow: (_action) => {
  34 + return record.status == 0;
  35 + },
25 36 },
26 37
27 38 {
... ... @@ -32,27 +43,32 @@
32 43 title: '是否确认删除',
33 44 confirm: handleSingleDelete.bind(null, record),
34 45 },
  46 + ifShow: (_action) => {
  47 + return record.status == 0;
  48 + },
35 49 },
36   - ]"
37   - :dropDownActions="[
38 50 {
39 51 label: '启用',
  52 + icon: 'ant-design:check-circle-outlined',
  53 + color: 'warning',
40 54 popConfirm: {
41 55 title: '是否启用?',
42 56 confirm: handleEnableOrDisable.bind(null, record),
43 57 },
44 58 ifShow: (_action) => {
45   - return record.status !== 'enable'; // 根据业务控制是否显示: 非enable状态的不显示启用按钮
  59 + return record.status == 0;
46 60 },
47 61 },
48 62 {
49 63 label: '禁用',
  64 + icon: 'ant-design:check-circle-outlined',
  65 + color: 'warning',
50 66 popConfirm: {
51 67 title: '是否禁用?',
52   - confirm: handleEnableOrDisable.bind(null, record),
  68 + confirm: handleDisable.bind(null, record),
53 69 },
54   - ifShow: () => {
55   - return record.status === 'enable'; // 根据业务控制是否显示: enable状态的显示禁用按钮
  70 + ifShow: (_action) => {
  71 + return record.status == 1;
56 72 },
57 73 },
58 74 ]"
... ... @@ -65,7 +81,7 @@
65 81 </div>
66 82 </template>
67 83 <script lang="ts">
68   - import { defineComponent, reactive } from 'vue';
  84 + import { defineComponent, reactive, ref } from 'vue';
69 85 import { BasicTable, useTable, TableAction } from '/@/components/Table';
70 86 import { columns, searchFormSchema } from './config';
71 87 import { useModal } from '/@/components/Modal';
... ... @@ -86,9 +102,10 @@
86 102 status: 0,
87 103 });
88 104 const { createMessage } = useMessage();
89   - let selectedRowKeys: Array<string> = [];
  105 + let selectedRowKeys: any = ref([]);
  106 + let getSelectRowsArr: any = ref([]);
90 107 const [registerModal, { openModal }] = useModal();
91   - const [registerTable, { reload, getSelectRowKeys }] = useTable({
  108 + const [registerTable, { reload, getSelectRowKeys, getSelectRows }] = useTable({
92 109 title: '数据转换列表',
93 110 clickToRowSelect: false,
94 111 columns,
... ... @@ -132,16 +149,26 @@
132 149 }, 10);
133 150 };
134 151 const handleEnableOrDisable = async (record: Recordable) => {
  152 + enableObj.convertIds.length = 0;
135 153 enableObj.status = record.status;
136   - if (enableObj.status == 1) return;
137   - if (enableObj.convertIds.length == 0) {
138   - enableObj.convertIds.push(record.id as never);
139   - }
  154 + enableObj.convertIds.push(record.id as never);
140 155 if (enableObj.status == 0) {
141 156 enableObj.status = 1;
142 157 }
143 158 await isEnableOrDisableApi(enableObj as never);
144 159 createMessage.success('转换配置启用成功');
  160 + reload();
  161 + };
  162 + const handleDisable = async (record: Recordable) => {
  163 + enableObj.convertIds.length = 0;
  164 + enableObj.status = record.status;
  165 + enableObj.convertIds.push(record.id as never);
  166 + if (enableObj.status == 1) {
  167 + enableObj.status = 0;
  168 + }
  169 + await isEnableOrDisableApi(enableObj as never);
  170 + createMessage.success('转换配置禁用成功');
  171 + reload();
145 172 };
146 173 const handleSingleDelete = async (record: Recordable) => {
147 174 try {
... ... @@ -154,14 +181,26 @@
154 181 }
155 182 };
156 183 const useSelectionChange = () => {
157   - selectedRowKeys = getSelectRowKeys();
  184 + selectedRowKeys.value = getSelectRowKeys();
158 185 };
159 186
160 187 const handleDelete = async () => {
161   - await deleteConvertApi(selectedRowKeys);
  188 + await deleteConvertApi(selectedRowKeys.value);
162 189 createMessage.success('删除成功');
163 190 reload();
164 191 };
  192 + const handleMutiuteDisable = async () => {
  193 + getSelectRowsArr.value = getSelectRows();
  194 + getSelectRowsArr.value.forEach((f) => {
  195 + if (f.id) {
  196 + enableObj.status = 0;
  197 + enableObj.convertIds.push(f.id as never);
  198 + }
  199 + });
  200 + await isEnableOrDisableApi(enableObj as never);
  201 + createMessage.success('转换配置多项禁用成功');
  202 + reload();
  203 + };
165 204
166 205 return {
167 206 registerTable,
... ... @@ -173,6 +212,8 @@
173 212 handleEnableOrDisable,
174 213 handleSingleDelete,
175 214 useSelectionChange,
  215 + handleMutiuteDisable,
  216 + handleDisable,
176 217 };
177 218 },
178 219 });
... ...