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
| <template>
| <el-tabs v-model="activeName" type="border-card" @tab-change="tabChange">
| <el-tab-pane
| v-for="item in tabDataList"
| :key="item.title"
| :label="item.title"
| :name="item.title"
| >
| <!-- <div> -->
| <el-space wrap>
| <ItemMonitorObj v-for="obj in item.children" :key="obj.movid" :item="obj">
| <template #default="{ item }">
| <!-- <slot :item="item"></slot> -->
| <el-button v-if="showDelete" size="small" type="danger" @click="deleteMov(item)"
| >移除</el-button
| >
| </template>
| </ItemMonitorObj>
| </el-space>
| <!-- </div> -->
| </el-tab-pane>
| </el-tabs>
| </template>
|
| <script>
| const defaultTabName = '全部';
| export default {
| props: {
| data: {
| type: Array,
| default: () => []
| },
| // 是否添加默认的全部选项
| allOption: Boolean,
| showDelete: Boolean
| },
| emits: ['tabChange'],
| data() {
| return {
| activeName: defaultTabName
| };
| },
| computed: {
| tabDataList() {
| const itemMap = new Map();
| this.data.forEach((t) => {
| itemMap.has(t.sceneType) ? itemMap.get(t.sceneType).push(t) : itemMap.set(t.sceneType, [t]);
| });
| const list = [];
| if (this.allOption) {
| list.push({
| title: defaultTabName,
| children: this.data
| });
| }
| for (const [key, value] of itemMap) {
| list.push({
| title: key,
| children: value
| });
| }
| return list;
| }
| },
| watch: {
| tabDataList: {
| handler(nV, oV) {
| if (nV != oV && nV.length > 0) {
| this.activeName = nV[0].title;
| this.tabChange(this.activeName);
| }
| },
| immediate: true
| }
| },
| methods: {
| tabChange(tabName) {
| this.$emit('tabChange', tabName);
| },
| deleteMov(item) {
| const tab = this.tabDataList.find((v) => {
| return v.title == this.activeName;
| });
| const i = tab.children.indexOf(item);
| tab.children.splice(i, 1);
| }
| }
| };
| </script>
|
| <style scoped></style>
|
|