st-comp 0.0.209 → 0.0.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/CustomFunction.cjs +1 -1
- package/es/CustomFunction.js +5 -5
- package/es/FactorWarning.cjs +1 -1
- package/es/FactorWarning.js +4 -4
- package/es/VarietySearch.cjs +15 -15
- package/es/VarietySearch.js +2759 -2388
- package/es/style.css +1 -1
- package/lib/bundle.js +1 -1
- package/lib/bundle.umd.cjs +202 -202
- package/lib/{index-e158c3d6.js → index-3eaf4b5a.js} +30562 -30192
- package/lib/{python-57033756.js → python-a46505d9.js} +1 -1
- package/lib/style.css +1 -1
- package/package.json +1 -1
- package/packages/VarietySearch/components/CommonIndicator/index.vue +9 -8
- package/packages/VarietySearch/components/CompositeOrder/index.vue +243 -0
- package/packages/VarietySearch/components/FactorScreen/index.vue +207 -10
- package/packages/VarietySearch/config.js +16 -7
- package/packages/VarietySearch/index.vue +140 -125
- package/src/pages/VarietySearch/index.vue +101 -8
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<script setup name="VarietySearch">
|
|
2
|
-
import { watch, computed } from "vue";
|
|
2
|
+
import { watch, computed, provide } from "vue";
|
|
3
3
|
import defaultConfig from "./config.js";
|
|
4
4
|
import FactorScreen from "./components/FactorScreen/index.vue";
|
|
5
5
|
import CommonIndicator from "./components/CommonIndicator/index.vue";
|
|
6
|
+
import CompositeOrder from "./components/CompositeOrder/index.vue";
|
|
6
7
|
|
|
7
8
|
const props = defineProps({ config: { type: Object, default: {} } });
|
|
8
9
|
const searchData = defineModel("searchData");
|
|
9
|
-
|
|
10
10
|
searchData.value = Object.assign(searchData.value, {
|
|
11
11
|
// 品种市场
|
|
12
12
|
varietyMarket: null,
|
|
@@ -26,10 +26,12 @@ searchData.value = Object.assign(searchData.value, {
|
|
|
26
26
|
list: [],
|
|
27
27
|
sqlEnable: 0,
|
|
28
28
|
sqlValue: null,
|
|
29
|
-
factorSelectExpr:
|
|
29
|
+
factorSelectExpr: "",
|
|
30
30
|
},
|
|
31
31
|
// 常用指标
|
|
32
32
|
commonIndicator: [],
|
|
33
|
+
// 组合排序
|
|
34
|
+
compositeOrder: [],
|
|
33
35
|
});
|
|
34
36
|
|
|
35
37
|
// 合并配置项
|
|
@@ -43,6 +45,7 @@ const config = computed(() => {
|
|
|
43
45
|
});
|
|
44
46
|
return result;
|
|
45
47
|
});
|
|
48
|
+
|
|
46
49
|
// 选项数据源: 品种市场
|
|
47
50
|
const varietyMarketDict = computed(() => {
|
|
48
51
|
return config.value.varietyMarket.options;
|
|
@@ -115,7 +118,7 @@ const clearRow = (key) => {
|
|
|
115
118
|
list: [],
|
|
116
119
|
sqlEnable: 0,
|
|
117
120
|
sqlValue: null,
|
|
118
|
-
factorSelectExpr:
|
|
121
|
+
factorSelectExpr: "",
|
|
119
122
|
};
|
|
120
123
|
break;
|
|
121
124
|
}
|
|
@@ -123,6 +126,10 @@ const clearRow = (key) => {
|
|
|
123
126
|
searchData.value[key] = [];
|
|
124
127
|
break;
|
|
125
128
|
}
|
|
129
|
+
case "compositeOrder": {
|
|
130
|
+
searchData.value[key] = [];
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
126
133
|
default: {
|
|
127
134
|
searchData.value[key] = null;
|
|
128
135
|
break;
|
|
@@ -155,6 +162,7 @@ watch(
|
|
|
155
162
|
}
|
|
156
163
|
);
|
|
157
164
|
|
|
165
|
+
provide("clearRow", clearRow);
|
|
158
166
|
defineExpose({
|
|
159
167
|
// 生成接口传参结构的数据
|
|
160
168
|
formatData: (data) => {
|
|
@@ -438,6 +446,10 @@ defineExpose({
|
|
|
438
446
|
};
|
|
439
447
|
}
|
|
440
448
|
}
|
|
449
|
+
// 8.组合分析
|
|
450
|
+
if (data.compositeOrder?.length) {
|
|
451
|
+
params.compositeOrder = data.compositeOrder.map(({ name, value }) => ({ name, value }));
|
|
452
|
+
}
|
|
441
453
|
console.log("%c[st-varietySearch]: 接口传参数据生成完毕", "color: green", params);
|
|
442
454
|
return params;
|
|
443
455
|
},
|
|
@@ -462,10 +474,12 @@ defineExpose({
|
|
|
462
474
|
list: [],
|
|
463
475
|
sqlEnable: 0,
|
|
464
476
|
sqlValue: null,
|
|
465
|
-
factorSelectExpr:
|
|
477
|
+
factorSelectExpr: "",
|
|
466
478
|
},
|
|
467
479
|
// 常用指标
|
|
468
480
|
commonIndicator: [],
|
|
481
|
+
// 组合排序
|
|
482
|
+
compositeOrder: [],
|
|
469
483
|
};
|
|
470
484
|
},
|
|
471
485
|
});
|
|
@@ -474,137 +488,131 @@ defineExpose({
|
|
|
474
488
|
<template>
|
|
475
489
|
<div class="variety-search">
|
|
476
490
|
<!-- 品种市场 -->
|
|
477
|
-
<
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
<
|
|
491
|
+
<template v-if="config.varietyMarket?.show">
|
|
492
|
+
<div class="variety-search-row">
|
|
493
|
+
<div class="title">
|
|
494
|
+
<span>品种市场: </span>
|
|
495
|
+
<span @click="clearRow('varietyMarket')">不限</span>
|
|
496
|
+
</div>
|
|
497
|
+
<el-radio-group
|
|
498
|
+
v-model="searchData.varietyMarket"
|
|
499
|
+
size="small"
|
|
500
|
+
>
|
|
501
|
+
<el-radio
|
|
502
|
+
v-for="{ label, value } in varietyMarketDict"
|
|
503
|
+
:label="label"
|
|
504
|
+
:value="value"
|
|
505
|
+
:key="value"
|
|
506
|
+
/>
|
|
507
|
+
</el-radio-group>
|
|
484
508
|
</div>
|
|
485
|
-
|
|
486
|
-
v-model="searchData.varietyMarket"
|
|
487
|
-
size="small"
|
|
488
|
-
>
|
|
489
|
-
<el-radio
|
|
490
|
-
v-for="{ label, value } in varietyMarketDict"
|
|
491
|
-
:label="label"
|
|
492
|
-
:value="value"
|
|
493
|
-
:key="value"
|
|
494
|
-
/>
|
|
495
|
-
</el-radio-group>
|
|
496
|
-
</div>
|
|
509
|
+
</template>
|
|
497
510
|
<!-- 常用选项 -->
|
|
498
|
-
<
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
<
|
|
511
|
+
<template v-if="config.commonOption?.show && commonOptionDict.length">
|
|
512
|
+
<div class="variety-search-row">
|
|
513
|
+
<div class="title">
|
|
514
|
+
<span>常用选项: </span>
|
|
515
|
+
<span @click="clearRow('commonOption')">不限</span>
|
|
516
|
+
</div>
|
|
517
|
+
<el-checkbox-group
|
|
518
|
+
v-model="searchData.commonOption"
|
|
519
|
+
size="small"
|
|
520
|
+
>
|
|
521
|
+
<el-checkbox
|
|
522
|
+
v-for="{ label, value } in commonOptionDict"
|
|
523
|
+
:label="label"
|
|
524
|
+
:value="value"
|
|
525
|
+
:key="value"
|
|
526
|
+
/>
|
|
527
|
+
</el-checkbox-group>
|
|
505
528
|
</div>
|
|
506
|
-
|
|
507
|
-
v-model="searchData.commonOption"
|
|
508
|
-
size="small"
|
|
509
|
-
>
|
|
510
|
-
<el-checkbox
|
|
511
|
-
v-for="{ label, value } in commonOptionDict"
|
|
512
|
-
:label="label"
|
|
513
|
-
:value="value"
|
|
514
|
-
:key="value"
|
|
515
|
-
/>
|
|
516
|
-
</el-checkbox-group>
|
|
517
|
-
</div>
|
|
529
|
+
</template>
|
|
518
530
|
<!-- 上市板块 -->
|
|
519
|
-
<
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
<
|
|
531
|
+
<template v-if="config.marketIds?.show && marketIdsOptionDict.length">
|
|
532
|
+
<div class="variety-search-row">
|
|
533
|
+
<div class="title">
|
|
534
|
+
<span>上市板块: </span>
|
|
535
|
+
<span @click="clearRow('marketIds')">不限</span>
|
|
536
|
+
</div>
|
|
537
|
+
<el-checkbox-group
|
|
538
|
+
v-model="searchData.marketIds"
|
|
539
|
+
size="small"
|
|
540
|
+
>
|
|
541
|
+
<el-checkbox
|
|
542
|
+
v-for="{ label, value } in marketIdsOptionDict"
|
|
543
|
+
:label="label"
|
|
544
|
+
:value="value"
|
|
545
|
+
:key="value"
|
|
546
|
+
/>
|
|
547
|
+
</el-checkbox-group>
|
|
526
548
|
</div>
|
|
527
|
-
|
|
528
|
-
v-model="searchData.marketIds"
|
|
529
|
-
size="small"
|
|
530
|
-
>
|
|
531
|
-
<el-checkbox
|
|
532
|
-
v-for="{ label, value } in marketIdsOptionDict"
|
|
533
|
-
:label="label"
|
|
534
|
-
:value="value"
|
|
535
|
-
:key="value"
|
|
536
|
-
/>
|
|
537
|
-
</el-checkbox-group>
|
|
538
|
-
</div>
|
|
549
|
+
</template>
|
|
539
550
|
<!-- 自定标签 -->
|
|
540
|
-
<
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
<
|
|
551
|
+
<template v-if="config.customTag?.show && customTagDict.length">
|
|
552
|
+
<div class="variety-search-row">
|
|
553
|
+
<div class="title">
|
|
554
|
+
<span>自定标签: </span>
|
|
555
|
+
<span @click="clearRow('customTag')">不限</span>
|
|
556
|
+
</div>
|
|
557
|
+
<el-checkbox-group
|
|
558
|
+
v-model="searchData.customTag"
|
|
559
|
+
size="small"
|
|
560
|
+
>
|
|
561
|
+
<el-checkbox
|
|
562
|
+
v-for="{ label, value } in customTagDict"
|
|
563
|
+
:label="label"
|
|
564
|
+
:value="value"
|
|
565
|
+
:key="value"
|
|
566
|
+
/>
|
|
567
|
+
</el-checkbox-group>
|
|
547
568
|
</div>
|
|
548
|
-
|
|
549
|
-
v-model="searchData.customTag"
|
|
550
|
-
size="small"
|
|
551
|
-
>
|
|
552
|
-
<el-checkbox
|
|
553
|
-
v-for="{ label, value } in customTagDict"
|
|
554
|
-
:label="label"
|
|
555
|
-
:value="value"
|
|
556
|
-
:key="value"
|
|
557
|
-
/>
|
|
558
|
-
</el-checkbox-group>
|
|
559
|
-
</div>
|
|
569
|
+
</template>
|
|
560
570
|
<!-- 价差转换 -->
|
|
561
|
-
<
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
<
|
|
571
|
+
<template v-if="config.jcTranslate?.show">
|
|
572
|
+
<div class="variety-search-row">
|
|
573
|
+
<div class="title">
|
|
574
|
+
<span>价差转换: </span>
|
|
575
|
+
<span @click="clearRow('jcTranslate')">不限</span>
|
|
576
|
+
</div>
|
|
577
|
+
<el-radio-group
|
|
578
|
+
v-model="searchData.jcTranslate.type"
|
|
579
|
+
size="small"
|
|
580
|
+
>
|
|
581
|
+
<el-radio :value="2">价差转品种</el-radio>
|
|
582
|
+
<el-radio :value="1">品种转价差</el-radio>
|
|
583
|
+
</el-radio-group>
|
|
584
|
+
<el-select
|
|
585
|
+
v-show="searchData.jcTranslate.type === 1"
|
|
586
|
+
v-model="searchData.jcTranslate.jcList"
|
|
587
|
+
size="small"
|
|
588
|
+
multiple
|
|
589
|
+
collapse-tags
|
|
590
|
+
collapse-tags-tooltip
|
|
591
|
+
placeholder="请选择价差品种"
|
|
592
|
+
style="width: 140px"
|
|
593
|
+
>
|
|
594
|
+
<el-option
|
|
595
|
+
v-for="item in jcOptions"
|
|
596
|
+
:key="item.value"
|
|
597
|
+
:label="item.label"
|
|
598
|
+
:value="item.value"
|
|
599
|
+
/>
|
|
600
|
+
</el-select>
|
|
568
601
|
</div>
|
|
569
|
-
|
|
570
|
-
v-model="searchData.jcTranslate.type"
|
|
571
|
-
size="small"
|
|
572
|
-
>
|
|
573
|
-
<el-radio :value="2">价差转品种</el-radio>
|
|
574
|
-
<el-radio :value="1">品种转价差</el-radio>
|
|
575
|
-
</el-radio-group>
|
|
576
|
-
<el-select
|
|
577
|
-
v-show="searchData.jcTranslate.type === 1"
|
|
578
|
-
v-model="searchData.jcTranslate.jcList"
|
|
579
|
-
size="small"
|
|
580
|
-
multiple
|
|
581
|
-
collapse-tags
|
|
582
|
-
collapse-tags-tooltip
|
|
583
|
-
placeholder="请选择价差品种"
|
|
584
|
-
style="width: 140px"
|
|
585
|
-
>
|
|
586
|
-
<el-option
|
|
587
|
-
v-for="item in jcOptions"
|
|
588
|
-
:key="item.value"
|
|
589
|
-
:label="item.label"
|
|
590
|
-
:value="item.value"
|
|
591
|
-
/>
|
|
592
|
-
</el-select>
|
|
593
|
-
</div>
|
|
602
|
+
</template>
|
|
594
603
|
<!-- 因子筛选 -->
|
|
595
|
-
<
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
<
|
|
604
|
+
<template v-if="config.factorScreen?.show">
|
|
605
|
+
<div class="variety-search-row">
|
|
606
|
+
<div class="title">
|
|
607
|
+
<span>因子筛选: </span>
|
|
608
|
+
<span @click="clearRow('factorScreen')">不限</span>
|
|
609
|
+
</div>
|
|
610
|
+
<FactorScreen
|
|
611
|
+
v-model:data="searchData.factorScreen"
|
|
612
|
+
:config="config.factorScreen"
|
|
613
|
+
/>
|
|
602
614
|
</div>
|
|
603
|
-
|
|
604
|
-
v-model:data="searchData.factorScreen"
|
|
605
|
-
:config="config.factorScreen"
|
|
606
|
-
/>
|
|
607
|
-
</div>
|
|
615
|
+
</template>
|
|
608
616
|
<!-- 常用指标 -->
|
|
609
617
|
<CommonIndicator
|
|
610
618
|
v-model:data="searchData.commonIndicator"
|
|
@@ -612,6 +620,13 @@ defineExpose({
|
|
|
612
620
|
:commonOption="searchData.commonOption"
|
|
613
621
|
:config="config.commonIndicator"
|
|
614
622
|
/>
|
|
623
|
+
<!-- 组合排序 -->
|
|
624
|
+
<CompositeOrder
|
|
625
|
+
v-model:data="searchData.compositeOrder"
|
|
626
|
+
:varietyMarket="searchData.varietyMarket"
|
|
627
|
+
:commonOption="searchData.commonOption"
|
|
628
|
+
:config="config.compositeOrder"
|
|
629
|
+
/>
|
|
615
630
|
</div>
|
|
616
631
|
</template>
|
|
617
632
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import axios from "axios";
|
|
3
|
-
import { inject, ref, onMounted, computed } from "vue";
|
|
3
|
+
import { inject, ref, onMounted, computed, watch } from "vue";
|
|
4
4
|
import { getAlarDict, getAlarFreq, getAlarFactor } from "./api.js";
|
|
5
5
|
|
|
6
6
|
const { request } = inject("stConfig"); // 组件库全局配置
|
|
7
7
|
|
|
8
|
+
const searchData = ref({});
|
|
9
|
+
|
|
8
10
|
const varietySearchRef = ref(null);
|
|
9
11
|
const varietySearchData = ref({
|
|
10
12
|
varietyMarket: null,
|
|
@@ -21,21 +23,87 @@ const varietySearchData = ref({
|
|
|
21
23
|
sqlValue: null,
|
|
22
24
|
},
|
|
23
25
|
commonIndicator: [],
|
|
26
|
+
compositeOrder: [],
|
|
24
27
|
});
|
|
25
28
|
const varietySearchConfig = ref({});
|
|
26
29
|
|
|
27
30
|
const data = ref();
|
|
31
|
+
const multipleTableRef = ref();
|
|
32
|
+
const orderByInfo = ref({ code: "asc" });
|
|
33
|
+
const sortable = ref("tableHeader");
|
|
28
34
|
|
|
29
35
|
// 前端筛选条件格式化成API接口入参
|
|
30
36
|
const apiParams = computed(() => {
|
|
31
37
|
return { ...(varietySearchRef.value?.formatData(varietySearchData.value) ?? {}) };
|
|
32
38
|
});
|
|
33
39
|
|
|
34
|
-
//
|
|
35
|
-
const
|
|
36
|
-
const
|
|
40
|
+
// 表格: 获取表格数据
|
|
41
|
+
const getTableData = async () => {
|
|
42
|
+
const params = {
|
|
43
|
+
...apiParams.value,
|
|
44
|
+
pageNum: 1,
|
|
45
|
+
pageSize: 20,
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* @description: 根据用户最后一次操作交互的时机, 决定排序使用哪个维度
|
|
49
|
+
* 常规排序字段: orderByInfo
|
|
50
|
+
* 表头的orderByInfo和预警组的orderByInfo为顺序互斥, 谁最后操作就用谁
|
|
51
|
+
*
|
|
52
|
+
* 组合排序字段: compositeOrder
|
|
53
|
+
* 表头的orderByInfo与compositeOrder为顺序互斥, 谁最后操作就用谁
|
|
54
|
+
* 预警组的orderByInfo与compositeOrder为强制互斥, compositeOrder有值就一定优先使用compositeOrder
|
|
55
|
+
*/
|
|
56
|
+
switch (sortable.value) {
|
|
57
|
+
case "tableHeader": {
|
|
58
|
+
delete params.compositeOrder; // 删除组合排序参数
|
|
59
|
+
params.orderByInfo = orderByInfo.value; // 传入常规排序参数
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "alarmGroup": {
|
|
63
|
+
// 1. 如果存在组合排序, 那就直接使用组合排序
|
|
64
|
+
if (params.compositeOrder && params.compositeOrder.length) {
|
|
65
|
+
// 不进行额外处理
|
|
66
|
+
}
|
|
67
|
+
// 2. 如果不存在组合排序, 预警组选项存在
|
|
68
|
+
else if (searchData.value.groupId) {
|
|
69
|
+
orderByInfo.value = { orderByIndex: "asc" };
|
|
70
|
+
params.orderByInfo = orderByInfo.value;
|
|
71
|
+
}
|
|
72
|
+
// 3. 如果不存在组合排序, 预警组选项也不存在, 就传递常规排序初始值
|
|
73
|
+
else {
|
|
74
|
+
orderByInfo.value = { code: "asc" };
|
|
75
|
+
params.orderByInfo = orderByInfo.value;
|
|
76
|
+
multipleTableRef.value.clearSort();
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case "compositeOrder": {
|
|
81
|
+
multipleTableRef.value.clearSort(); // 清除表头排序样式
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
console.log(params);
|
|
86
|
+
const { body } = await request.post("/common/qt/getFeatureInfosByPage", params);
|
|
37
87
|
data.value = body.list;
|
|
38
88
|
};
|
|
89
|
+
// 表格: 排序
|
|
90
|
+
const sortChange = ({ column, prop, order }) => {
|
|
91
|
+
const sortValueMap = new Map([
|
|
92
|
+
["ascending", "asc"],
|
|
93
|
+
["descending", "desc"],
|
|
94
|
+
]);
|
|
95
|
+
if (order !== null) {
|
|
96
|
+
orderByInfo.value = {
|
|
97
|
+
[prop]: sortValueMap.get(order),
|
|
98
|
+
};
|
|
99
|
+
} else {
|
|
100
|
+
orderByInfo.value = {
|
|
101
|
+
code: "asc", //默认值
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
sortable.value = "tableHeader";
|
|
105
|
+
getTableData();
|
|
106
|
+
};
|
|
39
107
|
|
|
40
108
|
onMounted(async () => {
|
|
41
109
|
const dicAlar = await getAlarDict();
|
|
@@ -100,8 +168,21 @@ onMounted(async () => {
|
|
|
100
168
|
commonIndicator: {
|
|
101
169
|
show: true,
|
|
102
170
|
},
|
|
171
|
+
// 组合排序 [选项: 组合默认]
|
|
172
|
+
compositeOrder: {
|
|
173
|
+
show: true,
|
|
174
|
+
},
|
|
103
175
|
};
|
|
104
176
|
});
|
|
177
|
+
watch(
|
|
178
|
+
() => varietySearchData.value.compositeOrder,
|
|
179
|
+
(newValue) => {
|
|
180
|
+
sortable.value = "compositeOrder";
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
deep: true,
|
|
184
|
+
}
|
|
185
|
+
);
|
|
105
186
|
</script>
|
|
106
187
|
|
|
107
188
|
<template>
|
|
@@ -111,10 +192,15 @@ onMounted(async () => {
|
|
|
111
192
|
v-model:searchData="varietySearchData"
|
|
112
193
|
:config="varietySearchConfig"
|
|
113
194
|
/>
|
|
114
|
-
<
|
|
115
|
-
<
|
|
116
|
-
|
|
117
|
-
|
|
195
|
+
<div>品种池组件接口参数: {{ apiParams }}</div>
|
|
196
|
+
<el-button
|
|
197
|
+
size="small"
|
|
198
|
+
type="primary"
|
|
199
|
+
@click="getTableData"
|
|
200
|
+
style="margin: 10px 0"
|
|
201
|
+
>
|
|
202
|
+
查询测试
|
|
203
|
+
</el-button>
|
|
118
204
|
<el-table
|
|
119
205
|
class="alarm"
|
|
120
206
|
ref="multipleTableRef"
|
|
@@ -122,6 +208,7 @@ onMounted(async () => {
|
|
|
122
208
|
:stripe="true"
|
|
123
209
|
:border="true"
|
|
124
210
|
:data="data"
|
|
211
|
+
@sort-change="sortChange"
|
|
125
212
|
>
|
|
126
213
|
<el-table-column
|
|
127
214
|
type="selection"
|
|
@@ -157,3 +244,9 @@ onMounted(async () => {
|
|
|
157
244
|
</el-table>
|
|
158
245
|
</div>
|
|
159
246
|
</template>
|
|
247
|
+
|
|
248
|
+
<style lang="scss" scoped>
|
|
249
|
+
.alarm {
|
|
250
|
+
height: calc(100vh - 400px);
|
|
251
|
+
}
|
|
252
|
+
</style>
|