DeviceAttrCpns.vue
2.8 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
108
109
110
111
112
113
114
<template>
<div
v-for="param in dynamicInput.params"
:key="param.key"
style="display: flex; margin-top: 0.25vh"
>
<a-input
:disabled="true"
v-model:value="param.device"
style="width: 38%; margin-bottom: 5px; margin-left: 1vh"
@change="emitChange"
/>
<Select
placeholder="请选择设备属性"
v-model:value="param.attribute"
style="width: 160px; margin-left: 1.8vw"
:options="selectOptions"
@change="emitChange"
allowClear
/>
</div>
</template>
<script lang="ts">
export default {
inheritAttrs: false,
};
</script>
<script lang="ts" setup>
import { reactive, UnwrapRef, watchEffect, ref } from 'vue';
import { propTypes } from '/@/utils/propTypes';
import { SelectTypes } from 'ant-design-vue/es/select';
import { Select } from 'ant-design-vue';
import { getAttribute } from '/@/api/ruleengine/ruleengineApi';
interface Params {
[x: string]: string;
attribute: string;
device: string;
}
const props = defineProps({
value: propTypes.array.def([]),
orgId: propTypes.string.def(''),
});
const emits = defineEmits(['change', 'update:value']);
const selectOptions = ref<SelectTypes['options']>([]);
//获取属性
const getAttr = async (orgId, deviceId) => {
const res = await getAttribute(orgId, deviceId.join(','));
selectOptions.value = res.map((o) => {
return {
label: o,
value: o,
};
});
};
//动态数据
const dynamicInput: UnwrapRef<{ params: Params[] }> = reactive({ params: [] });
//监听传入数据value
watchEffect(() => {
initVal();
});
/**
* 初始化数值
*/
async function initVal() {
dynamicInput.params = [];
if (props.value && props.orgId) {
let jsonObj = props.value;
const deviceId = jsonObj.map((m: any) => m.value);
await getAttr(props.orgId, deviceId);
jsonObj.forEach((item: any) => {
dynamicInput.params.push({
attribute: '',
device: item.label,
value: item.value,
});
});
}
}
/**
* 数值改变
*/
function emitChange() {
let obj: any = [];
if (dynamicInput.params.length > 0) {
dynamicInput.params.forEach((item: Params) => {
obj.push({
attribute: item.attribute,
device: item.value,
});
});
}
console.log('emitChange', obj);
emits('change', obj);
emits('update:value', obj);
}
//回显
const echoDynamicInputFunc = (o) => {
dynamicInput.params = [];
o.forEach((m: any) => {
dynamicInput.params.push({
device: m.name,
attribute: m.attribute,
value: m.device,
});
});
};
defineExpose({
echoDynamicInputFunc,
});
</script>
<style scoped lang="css">
@import './deviceAttrCpns.css';
</style>