createSpeed.vue
2.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<script lang="ts" setup>
import { Card, Tag } from 'ant-design-vue';
import CreateSpeedModel from './createSpeedModel.vue';
import { ref, watch, unref } from 'vue';
import { useModal } from '/@/components/Modal';
import { PlusCircleOutlined } from '@ant-design/icons-vue';
import { generateUUID } from '/@/hooks/web/useGenerateUUID';
const props = withDefaults(
defineProps<{
value: any;
title?: string;
}>(),
{
title: '编辑传输租户消息速率配置',
}
);
const emit = defineEmits(['update:value']);
const speedData = ref<{ value: string | number; second: string | number; uuid?: string }[]>([]);
const handleSuccess = (values) => {
if (!values?.length) {
speedData.value = [];
emit('update:value', []);
return;
}
speedData.value = values;
const items = values.map((item) => `${item.value}:${item.second}`).join(',');
emit('update:value', items);
};
const handleOpenCreate = () => {
openModal(true, {
title: props.title,
data: unref(speedData),
});
};
const objectArray = (values) => {
return values?.map((item) => {
const [value, second] = item.split(':');
return {
value: parseInt(value, 10),
second: parseInt(second || value, 10),
uuid: generateUUID(),
};
});
};
watch(
() => props.value,
(target) => {
if (target && typeof target === 'string' && target !== '0') {
const values = target.split(',');
speedData.value = objectArray(values);
}
},
{ immediate: true }
);
// watch(
// () => speedData,
// () => {
// emit('update:value', unref(speedData));
// }
// );
const [registerModal, { openModal }] = useModal();
</script>
<template>
<section class="!flex items-center">
<div class="flex flex-col justify-start items-start w-4/5">
<Card class="w-full">
<div
class="flex flex-col"
v-if="speedData && speedData.length >= 1 && speedData?.[0].value && speedData?.[0].second"
>
<div v-for="(item, index) in speedData" :key="item.value">
<Tag color="blue" v-if="index === 0 && item.value && item.second"
>{{ item.value }}条消息每{{ item.second }}秒</Tag
>
<Tag color="blue" v-else v-show="item.value && item.second"
>但小于{{ item.value }}条消息每{{ item.second }}秒</Tag
>
</div>
</div>
<div v-else>
<span class="font-bold">未配置</span>
</div>
</Card>
</div>
<PlusCircleOutlined
class="ml-2"
style="color: #377dff; font-size: 24px"
@click="handleOpenCreate"
/>
<CreateSpeedModel @register="registerModal" @success="handleSuccess" />
</section>
</template>
<style lang="less" scoped>
:deep(.ant-card-body) {
padding: 12px;
max-height: 110px;
overflow-y: auto;
}
</style>