Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
so-manage-ui
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
smart-operation
so-manage-ui
Commits
e8660ffb
You need to sign in or sign up before continuing.
Commit
e8660ffb
authored
Jun 30, 2023
by
张俊
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev' of
https://cloud.wodcloud.com/git/smart-operation/so-manage-ui
into dev
parents
4f92a0d9
72566ef3
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
752 additions
and
295 deletions
+752
-295
src/components/warn-detail/info.vue
src/components/warn-detail/info.vue
+1
-1
src/page/main/forewarning/indicator-config/add/index.vue
src/page/main/forewarning/indicator-config/add/index.vue
+3
-1
src/page/main/forewarning/indicator-config/detail/index.vue
src/page/main/forewarning/indicator-config/detail/index.vue
+290
-3
src/page/main/forewarning/indicator-config/edit/index.vue
src/page/main/forewarning/indicator-config/edit/index.vue
+36
-59
src/page/main/forewarning/indicator-config/index.vue
src/page/main/forewarning/indicator-config/index.vue
+87
-85
src/page/main/forewarning/indicator-config/modules/add-form.vue
...ge/main/forewarning/indicator-config/modules/add-form.vue
+2
-2
src/page/main/forewarning/indicator-config/modules/interface.js
...ge/main/forewarning/indicator-config/modules/interface.js
+10
-10
src/page/main/forewarning/indicator-config/modules/slide.vue
src/page/main/forewarning/indicator-config/modules/slide.vue
+110
-71
src/page/main/forewarning/list/index.vue
src/page/main/forewarning/list/index.vue
+29
-15
src/page/main/forewarning/rule-set/detail/index.vue
src/page/main/forewarning/rule-set/detail/index.vue
+2
-2
src/page/main/forewarning/rule-set/index.vue
src/page/main/forewarning/rule-set/index.vue
+2
-2
src/page/main/forewarning/rule-set/modules/add-form.vue
src/page/main/forewarning/rule-set/modules/add-form.vue
+73
-22
src/page/main/forewarning/rule-set/modules/custom.vue
src/page/main/forewarning/rule-set/modules/custom.vue
+8
-9
src/page/main/forewarning/rule-set/modules/gateway.vue
src/page/main/forewarning/rule-set/modules/gateway.vue
+89
-7
src/page/main/forewarning/rule-set/modules/static.vue
src/page/main/forewarning/rule-set/modules/static.vue
+10
-6
No files found.
src/components/warn-detail/info.vue
View file @
e8660ffb
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
<span
class=
"status"
:class=
"`status-$
{valueData.status}`">
</span>
<span
class=
"status"
:class=
"`status-$
{valueData.status}`">
</span>
<span>
{{
STATUS_OBJ
[
valueData
[
item
.
prop
]]
}}
</span>
<span>
{{
STATUS_OBJ
[
valueData
[
item
.
prop
]]
}}
</span>
</span>
</span>
<span
v-else
:title=
"valueData[item.prop]"
>
{{
valueData
[
item
.
prop
]
}}
</span>
<span
v-else
:title=
"valueData[item.prop]"
>
{{
valueData
[
item
.
prop
]
||
"
-
"
}}
</span>
</span>
</span>
</div>
</div>
</div>
</div>
...
...
src/page/main/forewarning/indicator-config/add/index.vue
View file @
e8660ffb
...
@@ -27,7 +27,9 @@ const params = {};
...
@@ -27,7 +27,9 @@ const params = {};
const
SaveSubmit
=
async
()
=>
{
const
SaveSubmit
=
async
()
=>
{
let
res
=
await
add_form
.
value
.
Submit
();
let
res
=
await
add_form
.
value
.
Submit
();
if
(
!
res
)
return
;
if
(
!
res
)
return
;
Save
(
res
);
Save
(
res
,
{
id
,
class_id
},
()
=>
{
Cancle
();
});
};
};
const
Cancle
=
()
=>
{
const
Cancle
=
()
=>
{
router
.
go
(
-
1
);
router
.
go
(
-
1
);
...
...
src/page/main/forewarning/indicator-config/detail/index.vue
View file @
e8660ffb
<
template
>
<
template
>
<div>
指标配置详情
</div>
<div
class=
"detail_container"
>
<bg-breadcrumb></bg-breadcrumb>
<div
class=
"main_container bg-scroll"
>
<gap-title
:hasLine=
"true"
title=
"基本信息"
></gap-title>
<div
class=
"info"
>
<Info
:labelData=
"labelData"
:valueData=
"info"
>
<template
#status
="
{ item, valueData }">
<span
class=
"status-body"
>
<span
class=
"status"
:class=
"`status-$
{valueData.status}`">
</span>
<span>
{{
STATUS_OBJ
[
valueData
[
item
.
prop
]]
}}
</span>
</span>
</
template
>
<
template
#create_time
="{
valueData
}"
>
<span>
{{
valueData
.
create_time
?
valueData
.
create_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
</span>
</
template
>
<
template
#update_time
="{
valueData
}"
>
<span>
{{
valueData
.
update_time
?
valueData
.
update_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
</span>
</
template
>
</Info>
</div>
<gap-title
:hasLine=
"true"
title=
"指标表达式"
></gap-title>
<div
class=
"info"
>
<div
class=
"indicator-expression"
>
<bg-code-editor
v-model=
"info.indicator_expression"
disabled
></bg-code-editor>
</div>
</div>
<gap-title
:hasLine=
"true"
title=
"预警范围"
></gap-title>
<div
class=
"info"
>
<bg-table
border
ref=
"ruletable"
:headers=
"warningScopeHeaders"
:rows=
"warningScopeRows"
height=
"100%"
>
<
template
#metric
="{
row
}"
>
<span>
{{
row
.
metric_name
}}
/
{{
row
.
metric_label
}}
</span>
</
template
>
<
template
#is_required
="{
row
}"
>
<span>
{{
row
.
is_required
?
"
是
"
:
"
否
"
}}
</span>
</
template
>
<
template
#is_linked
="{
row
}"
>
<span>
{{
row
.
is_linked
?
"
是
"
:
"
否
"
}}
</span>
</
template
>
</bg-table>
</div>
<gap-title
:hasLine=
"true"
title=
"预警规则类型"
></gap-title>
<div
class=
"info"
>
<Info
:labelData=
"rule_label"
:valueData=
"rule_data"
>
<
template
#alert_rule_type
="{
valueData
}"
>
<span>
{{
ruleTypeOptions
[
valueData
.
alert_rule_type
]
}}
</span>
</
template
>
</Info>
</div>
<gap-title
:hasLine=
"true"
title=
"高级配置"
>
</gap-title>
<div
class=
"info"
>
<Info
:labelData=
"advanced_label"
:valueData=
"advanced_data"
></Info>
</div>
</div>
</div>
</template>
</template>
<
script
setup
></
script
>
<
script
setup
>
import
{
ref
,
onBeforeMount
}
from
"
vue
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
useRoute
}
from
"
vue-router
"
;
import
gapTitle
from
"
@/components/gap-title.vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
Info
from
"
@/components/warn-detail/info.vue
"
;
import
{
METHODS
}
from
"
@/components/manual-distribution/env.js
"
;
const
route
=
useRoute
();
const
{
id
,
type_name
,
target_name
}
=
route
.
query
;
const
STATUS_OBJ
=
{
1
:
"
启用
"
,
2
:
"
禁用
"
,
};
const
unitOptions
=
{
s
:
"
秒
"
,
m
:
"
分钟
"
,
h
:
"
小时
"
,
};
const
labelData
=
[
[
{
label
:
"
预警分类
"
,
prop
:
"
warning_target
"
,
},
{
label
:
"
预警对象
"
,
prop
:
"
warning_type
"
,
},
],
[
{
label
:
"
预警指标
"
,
prop
:
"
warning_index
"
,
},
{
label
:
"
启用状态
"
,
prop
:
"
status
"
,
},
],
[
{
label
:
"
创建人
"
,
prop
:
"
create_by
"
,
},
{
label
:
"
创建时间
"
,
prop
:
"
create_time
"
,
},
],
[
{
label
:
"
更新时间
"
,
prop
:
"
update_time
"
,
},
],
];
const
info
=
ref
({});
const
rule_label
=
[
[
{
prop
:
"
alert_rule_type
"
,
label
:
"
预警规则类型
"
,
},
],
];
const
rule_data
=
ref
({});
const
ruleTypeOptions
=
{
empty
:
"
空
"
,
1
:
"
百分比范围
"
,
2
:
"
毫秒范围
"
,
3
:
"
秒范围
"
,
4
:
"
个范围
"
,
5
:
"
温度范围
"
,
};
const
advanced_label
=
[
[
{
prop
:
"
duration
"
,
label
:
"
持续时间
"
,
},
],
[
{
prop
:
"
check_period
"
,
label
:
"
检查周期
"
,
},
],
];
const
advanced_data
=
ref
({});
const
warningScopeHeaders
=
[
{
prop
:
"
variable_name
"
,
label
:
"
变量名称
"
,
width
:
100
,
},
{
prop
:
"
metric
"
,
label
:
"
指标标签
"
,
},
{
prop
:
"
chinese_name
"
,
label
:
"
中文名称
"
,
},
{
prop
:
"
is_required
"
,
label
:
"
是否必填
"
,
width
:
150
,
},
{
prop
:
"
is_linked
"
,
label
:
"
是否联动
"
,
width
:
150
,
},
];
const
warningScopeRows
=
ref
([]);
const
getInfoData
=
()
=>
{
axios
.
get
(
"
/v1/api/metric_config
"
,
{
params
:
{
id
:
id
,
},
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
let
{
metric_name
,
is_enabled
,
expr
,
created_by
,
created_at
,
updated_at
,
alert_range
,
duration
,
duration_unit
,
check_period
,
alert_rule_type
,
}
=
res
.
data
.
data
;
info
.
value
=
{
warning_target
:
type_name
,
warning_type
:
target_name
,
warning_index
:
metric_name
,
status
:
is_enabled
,
indicator_expression
:
expr
,
created_by
:
created_by
,
create_time
:
created_at
,
update_time
:
updated_at
,
};
warningScopeRows
.
value
=
alert_range
||
[];
advanced_data
.
value
=
{
duration
:
duration
==
0
?
"
直接产生预警
"
:
duration
+
unitOptions
[
duration_unit
],
check_period
:
check_period
+
"
分钟
"
,
};
rule_data
.
value
=
{
// alert_rule_type: alert_rule_type,
alert_rule_type
:
"
1
"
,
};
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
}
});
};
onBeforeMount
(()
=>
{
getInfoData
();
});
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
<
style
lang=
"scss"
scoped
>
.detail_container
{
width
:
100%
;
height
:
calc
(
100vh
-
56px
);
padding
:
0
24px
;
min-height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
justify-content
:
flex-start
;
align-items
:
stretch
;
.main_container
{
height
:
100%
;
padding
:
24px
;
:deep
(
.gap-title
)
{
margin-bottom
:
16px
;
}
.info
{
max-width
:
1072px
;
width
:
100%
;
padding
:
0
8px
0
;
&
:not
(
:last-child
)
{
padding-bottom
:
24px
;
}
.push-lists
{
margin-top
:
16px
;
}
.indicator-expression
{
height
:
300px
;
width
:
100%
;
:deep
(
.vue-ace-editor
)
{
margin-top
:
0
;
}
}
}
:deep
(
.bg-table
)
{
th
>
.cell
,
td
>
.cell
{
line-height
:
20px
;
}
}
}
}
.status
{
display
:
inline-block
;
width
:
6px
;
height
:
6px
;
border-radius
:
50%
;
margin-right
:
8px
;
$statusObj
:
(
enabled
:
#48ad97
,
disabled
:
#9e9e9e
,
);
@each
$status
,
$color
in
$statusObj
{
&
-
#{
$status
}
{
background-color
:
$color
;
}
}
}
.status-body
{
display
:
flex
;
align-items
:
center
;
}
</
style
>
src/page/main/forewarning/indicator-config/edit/index.vue
View file @
e8660ffb
...
@@ -17,7 +17,8 @@
...
@@ -17,7 +17,8 @@
import
{
onBeforeMount
,
ref
}
from
"
vue
"
;
import
{
onBeforeMount
,
ref
}
from
"
vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
addForm
from
"
../modules/add-form.vue
"
;
import
addForm
from
"
../modules/add-form.vue
"
;
import
{
Save
,
URL
}
from
"
../modules/interface.js
"
;
import
{
Save
}
from
"
../modules/interface.js
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
{
useRouter
,
useRoute
}
from
"
vue-router
"
;
import
{
useRouter
,
useRoute
}
from
"
vue-router
"
;
const
router
=
useRouter
();
const
router
=
useRouter
();
...
@@ -34,53 +35,25 @@ const Cancle = () => {
...
@@ -34,53 +35,25 @@ const Cancle = () => {
router
.
go
(
-
1
);
router
.
go
(
-
1
);
};
};
const
getInfoData
=
()
=>
{
const
getInfoData
=
()
=>
{
// axios
axios
// .get(URL, {
.
get
(
"
/v1/api/metric_config
"
,
{
// params: {
params
:
{
// id: id,
id
:
id
,
// },
// })
// .then((res) => {
// if (res.data.code == 200) {
// console.log(res.data.data);
// } else {
// ElMessage.error(res.data.data);
// }
// });
let
res
=
{
id
:
"
20da8f87-628a-4f0c-bd9c-0ad176d18d59
"
,
class_id
:
101
,
metric_name
:
"
xx请求次数告警
"
,
expr
:
'
shttp_requests_total{method="GET",$pod$}
'
,
duration
:
5
,
duration_unit
:
"
m
"
,
check_period
:
3
,
is_enabled
:
1
,
alert_rule_type
:
"
9f1e6170-65e8-4e14-9c17-6a7b87a900a7
"
,
created_by
:
""
,
created_at
:
"
2023-06-28 17:28:29
"
,
updated_by
:
""
,
updated_at
:
"
2023-06-28 17:54:33
"
,
alert_range
:
[
{
variable_name
:
"
$pod$
"
,
metric_name
:
"
shttp_requests_total
"
,
metric_label
:
"
pod
"
,
chinese_name
:
"
demoString
"
,
is_required
:
true
,
is_linked
:
true
,
},
},
],
})
};
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
console
.
log
(
res
.
data
.
data
);
let
res_d
=
res
.
data
.
data
;
infoData
.
value
=
{
infoData
.
value
=
{
name
:
res
.
metric_name
,
name
:
res_d
.
metric_name
,
indicator_expression
:
res
.
expr
,
indicator_expression
:
res_d
.
expr
,
rule_type
:
res
.
alert_rule_type
,
rule_type
:
res_d
.
alert_rule_type
,
time
:
res
.
duration
,
time
:
res_d
.
duration
,
unit
:
res
.
duration_unit
,
unit
:
res_d
.
duration_unit
,
inspection_cycle
:
res
.
check_period
,
inspection_cycle
:
res_d
.
check_period
,
warningScopeRows
:
warningScopeRows
:
res
.
alert_range
.
map
((
e
)
=>
{
res_d
.
alert_range
.
map
((
e
)
=>
{
return
{
return
{
key
:
e
.
variable_name
,
key
:
e
.
variable_name
,
input_indicator_tag
:
e
.
metric_label
,
input_indicator_tag
:
e
.
metric_label
,
...
@@ -91,9 +64,13 @@ const getInfoData = () => {
...
@@ -91,9 +64,13 @@ const getInfoData = () => {
is_linkage
:
e
.
is_linked
?
1
:
0
,
is_linkage
:
e
.
is_linked
?
1
:
0
,
};
};
})
||
[],
})
||
[],
state
:
res
.
is_enabled
,
state
:
res_d
.
is_enabled
,
res
:
res
,
res
:
res_d
,
};
};
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
}
});
};
};
onBeforeMount
(()
=>
{
onBeforeMount
(()
=>
{
getInfoData
();
getInfoData
();
...
...
src/page/main/forewarning/indicator-config/index.vue
View file @
e8660ffb
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
<div
class=
"detail_container-main"
>
<div
class=
"detail_container-main"
>
<Slide
v-model=
"node"
/>
<Slide
v-model=
"node"
/>
<div
class=
"main-content"
>
<div
class=
"main-content"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.
search
"
placeholder=
"请输入指标名称"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.
metric_name
"
placeholder=
"请输入指标名称"
>
<template
v-slot:left_action
>
<template
v-slot:left_action
>
<div
class=
"apaas_button"
>
<div
class=
"apaas_button"
>
<el-button
type=
"primary"
@
click=
"addRule"
>
<el-button
type=
"primary"
@
click=
"addRule"
>
...
@@ -22,10 +22,10 @@
...
@@ -22,10 +22,10 @@
<div
class=
"left-filter filter_list"
>
<div
class=
"left-filter filter_list"
>
<div
class=
"filter_item"
>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
启用状态
</span>
<span
class=
"filter_title"
>
启用状态
</span>
<el-select
v-model=
"filter.
state
"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-select
v-model=
"filter.
is_enabled
"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
<el-option
v-for=
"(item, index) in
state
Options"
v-for=
"(item, index) in
isEnabled
Options"
:key=
"'
state
Options' + index"
:key=
"'
isEnabled
Options' + index"
:label=
"item.name"
:label=
"item.name"
:value=
"item.value"
>
:value=
"item.value"
>
</el-option>
</el-option>
...
@@ -60,25 +60,25 @@
...
@@ -60,25 +60,25 @@
:isIndex=
"true"
:isIndex=
"true"
:select=
"true"
:select=
"true"
:stripe=
"true"
>
:stripe=
"true"
>
<
template
v-slot:
indicator
_name=
"{ row }"
>
<
template
v-slot:
metric
_name=
"{ row }"
>
<span
class=
"can_click_text"
@
click=
"goDetail(row)"
>
<span
class=
"can_click_text"
@
click=
"goDetail(row)"
>
{{
row
.
indicator
_name
}}
{{
row
.
metric
_name
}}
</span>
</span>
</
template
>
</
template
>
<
template
#
state
="{
row
}"
>
<
template
#
is_enabled
="{
row
}"
>
<bg-switch
<bg-switch
@
click=
"stateChange(row)"
@
click=
"stateChange(row)"
:labels=
"['否', '是']"
:labels=
"['否', '是']"
:values=
"[
0
, 1]"
:values=
"[
2
, 1]"
v-model=
"row.
state
"
></bg-switch>
v-model=
"row.
is_enabled
"
></bg-switch>
</
template
>
</
template
>
<
template
v-slot:created_
time
=
"{ row }"
>
<
template
v-slot:created_
at
=
"{ row }"
>
{{
row
.
created_
time
?
row
.
created_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
row
.
created_
at
?
row
.
created_at
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
</
template
>
</
template
>
<
template
v-slot:action=
"{ row }"
>
<
template
v-slot:action=
"{ row }"
>
<bg-table-btns2
:limit=
"3"
:tableData=
"tableRows"
>
<bg-table-btns2
:limit=
"3"
:tableData=
"tableRows"
>
<bg-table-btn
:disabled=
"row.
state != 0
"
@
click=
"editRow(row)"
>
编辑
</bg-table-btn>
<bg-table-btn
:disabled=
"row.
is_enabled != 2
"
@
click=
"editRow(row)"
>
编辑
</bg-table-btn>
<bg-table-btn
:disabled=
"row.
state != 0
"
@
click=
"deleteRow(row)"
>
删除
</bg-table-btn>
<bg-table-btn
:disabled=
"row.
is_enabled != 2
"
@
click=
"deleteRow(row)"
>
删除
</bg-table-btn>
</bg-table-btns2>
</bg-table-btns2>
</
template
>
</
template
>
</bg-table>
</bg-table>
...
@@ -95,7 +95,7 @@
...
@@ -95,7 +95,7 @@
</div>
</div>
<!-- 删除 -->
<!-- 删除 -->
<el-dialog
class=
"dialog_box"
title=
"删除"
v-model=
"delDialog"
width=
"420px"
>
<el-dialog
class=
"dialog_box"
title=
"删除"
v-model=
"delDialog"
width=
"420px"
>
<div
style=
"padding: 20px 0"
>
确定要删除吗?
</div>
<div>
确定要删除吗?
</div>
<
template
v-slot:footer
>
<
template
v-slot:footer
>
<div
class=
"apaas_button"
>
<div
class=
"apaas_button"
>
<el-button
type=
"default"
@
click=
"delDialog = false"
>
取消
</el-button>
<el-button
type=
"default"
@
click=
"delDialog = false"
>
取消
</el-button>
...
@@ -118,13 +118,15 @@ const node = ref({});
...
@@ -118,13 +118,15 @@ const node = ref({});
watch
(
watch
(
()
=>
node
.
value
,
()
=>
node
.
value
,
(
n
)
=>
{
(
n
)
=>
{
console
.
log
(
n
);
if
(
n
?.
data
.
class_id
)
{
getTableRows
();
}
},
},
{
deep
:
true
}
{
deep
:
true
}
);
);
const
dataTable
=
ref
(
null
);
const
dataTable
=
ref
(
null
);
const
state
=
reactive
({
const
state
=
reactive
({
state
Options
:
[
isEnabled
Options
:
[
{
{
name
:
"
全部
"
,
name
:
"
全部
"
,
value
:
""
,
value
:
""
,
...
@@ -134,27 +136,27 @@ const state = reactive({
...
@@ -134,27 +136,27 @@ const state = reactive({
value
:
1
,
value
:
1
,
},
},
{
{
name
:
"
停
用
"
,
name
:
"
禁
用
"
,
value
:
2
,
value
:
2
,
},
},
],
// 状态
],
// 状态
headers
:
[
headers
:
[
{
{
label
:
"
指标名称
"
,
label
:
"
指标名称
"
,
prop
:
"
indicator
_name
"
,
prop
:
"
metric
_name
"
,
width
:
200
,
width
:
200
,
},
},
{
{
label
:
"
是否启用
"
,
label
:
"
是否启用
"
,
prop
:
"
state
"
,
prop
:
"
is_enabled
"
,
},
},
{
{
label
:
"
创建人
"
,
label
:
"
创建人
"
,
prop
:
"
created_
user
"
,
prop
:
"
created_
by
"
,
},
},
{
{
label
:
"
创建时间
"
,
label
:
"
创建时间
"
,
prop
:
"
created_
time
"
,
prop
:
"
created_
at
"
,
width
:
160
,
width
:
160
,
},
},
{
{
...
@@ -166,11 +168,11 @@ const state = reactive({
...
@@ -166,11 +168,11 @@ const state = reactive({
],
],
filter
:
{
filter
:
{
notice_method
:
""
,
// 通知方式
notice_method
:
""
,
// 通知方式
state
:
""
,
// 状态
is_enabled
:
""
,
// 状态
time
:
[],
time
:
[],
search
:
""
,
metric_name
:
""
,
page
:
1
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
},
},
tableRows
:
[],
// 表格数据
tableRows
:
[],
// 表格数据
selected
:
[],
//选择数据
selected
:
[],
//选择数据
...
@@ -184,11 +186,11 @@ const changePage = (page) => {
...
@@ -184,11 +186,11 @@ const changePage = (page) => {
getTableRows
();
getTableRows
();
};
// 改变页码
};
// 改变页码
const
changeSize
=
(
size
)
=>
{
const
changeSize
=
(
size
)
=>
{
state
.
filter
.
limit
=
size
;
state
.
filter
.
page_size
=
size
;
changePage
(
1
);
changePage
(
1
);
};
// 改变每页条数
};
// 改变每页条数
const
changeSearch
=
(
val
)
=>
{
const
changeSearch
=
(
val
)
=>
{
state
.
filter
.
search
=
val
;
state
.
filter
.
metric_name
=
val
;
changePage
(
1
);
changePage
(
1
);
};
};
const
filterAction
=
()
=>
{
const
filterAction
=
()
=>
{
...
@@ -196,50 +198,40 @@ const filterAction = () => {
...
@@ -196,50 +198,40 @@ const filterAction = () => {
};
};
const
filterClear
=
()
=>
{
const
filterClear
=
()
=>
{
state
.
filter
=
{
state
.
filter
=
{
state
:
""
,
// 状态
is_enabled
:
""
,
// 状态
time
:
[],
time
:
[],
search
:
""
,
metric_name
:
""
,
page
:
1
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
};
};
changePage
(
1
);
changePage
(
1
);
};
};
const
selectable
=
(
row
,
index
)
=>
{
const
selectable
=
(
row
,
index
)
=>
{
return
row
.
state
===
0
;
return
row
.
is_enabled
===
2
;
};
};
const
getTableRows
=
()
=>
{
const
getTableRows
=
()
=>
{
let
params
=
{
...
state
.
filter
};
let
params
=
{
...
state
.
filter
,
class_id
:
node
.
value
.
data
.
class_id
};
state
.
tableTotal
=
23
;
// axios.get("/v1/api/metric_config/list", { params }).then((res) => {
state
.
tableRows
=
[
axios
.
get
(
"
/v1/api/metric_config/list
"
).
then
((
res
)
=>
{
{
if
(
res
.
data
.
code
==
200
)
{
id
:
1
,
state
.
tableRows
=
indicator_name
:
"
磁盘使用率
"
,
res
.
data
.
data
?.
list
?.
map
((
e
)
=>
{
state
:
1
,
return
{
created_user
:
"
李四
"
,
...
e
,
created_time
:
"
2020-01-01 00:00:00
"
,
};
},
})
||
[];
{
state
.
tableTotal
=
res
.
data
.
data
.
total_count
;
id
:
2
,
}
indicator_name
:
"
磁盘使用率
"
,
});
state
:
0
,
created_user
:
"
李四
"
,
created_time
:
"
2020-01-01 00:00:00
"
,
},
{
id
:
3
,
indicator_name
:
"
磁盘使用率
"
,
state
:
1
,
created_user
:
"
李四
"
,
created_time
:
"
2020-01-01 00:00:00
"
,
},
];
};
};
const
goDetail
=
(
row
)
=>
{
const
goDetail
=
(
row
)
=>
{
router
.
push
({
router
.
push
({
path
:
"
/forewarning/
rule-set
/detail
"
,
path
:
"
/forewarning/
indicator-config
/detail
"
,
query
:
{
query
:
{
id
:
row
.
id
,
id
:
row
.
id
,
class_id
:
node
.
value
.
data
.
id
,
class_id
:
node
.
value
.
data
.
class_id
,
type_name
:
node
.
value
.
node
.
parent
.
data
.
class_name
,
target_name
:
node
.
value
.
data
.
class_name
,
},
},
});
});
};
// 查看详情
};
// 查看详情
...
@@ -250,10 +242,10 @@ const deleteRow = (row) => {
...
@@ -250,10 +242,10 @@ const deleteRow = (row) => {
state
.
actionRow
=
row
;
state
.
actionRow
=
row
;
state
.
delType
=
1
;
state
.
delType
=
1
;
state
.
delDialog
=
true
;
state
.
delDialog
=
true
;
console
.
log
(
"
删除
"
);
//
console.log("删除");
};
// 删除
};
// 删除
const
batchDelete
=
()
=>
{
const
batchDelete
=
()
=>
{
console
.
log
(
"
批量删除
"
);
//
console.log("批量删除");
if
(
!
state
.
selected
||
state
.
selected
.
length
==
0
)
{
if
(
!
state
.
selected
||
state
.
selected
.
length
==
0
)
{
ElMessage
.
error
(
"
请先勾选要删除的数据
"
);
ElMessage
.
error
(
"
请先勾选要删除的数据
"
);
return
;
return
;
...
@@ -270,53 +262,63 @@ const delConfirm = () => {
...
@@ -270,53 +262,63 @@ const delConfirm = () => {
return
e
.
id
;
return
e
.
id
;
});
});
}
}
console
.
log
(
ids
);
//
console.log(ids);
state
.
delDialog
=
false
;
state
.
delDialog
=
false
;
setTimeout
(()
=>
{
axios
clearSelected
();
.
delete
(
"
/v1/api/metric_config
"
,
{
data
:
{
ids
,
},
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
"
删除成功
"
);
changePage
(
1
);
changePage
(
1
);
},
200
);
clearSelected
();
}
else
{
ElMessage
.
error
(
res
.
data
.
msg
);
}
});
};
// 确定删除
};
// 确定删除
const
clearSelected
=
()
=>
{
const
clearSelected
=
()
=>
{
dataTable
.
value
.
clearTable
();
dataTable
.
value
.
clearTable
();
};
// 清空
};
// 清空
const
addRule
=
()
=>
{
const
addRule
=
()
=>
{
console
.
log
(
"
新增
"
);
//
console.log("新增");
router
.
push
({
router
.
push
({
path
:
`/forewarning/indicator-config/add`
,
path
:
`/forewarning/indicator-config/add`
,
query
:
{
query
:
{
class_id
:
node
.
value
.
data
.
id
,
class_id
:
node
.
value
.
data
.
class_
id
,
},
},
});
});
};
// 新增规则
};
// 新增规则
const
editRow
=
(
row
)
=>
{
const
editRow
=
(
row
)
=>
{
console
.
log
(
"
编辑
"
);
//
console.log("编辑");
router
.
push
({
router
.
push
({
path
:
`/forewarning/indicator-config/edit`
,
path
:
`/forewarning/indicator-config/edit`
,
query
:
{
query
:
{
id
:
row
.
id
,
id
:
row
.
id
,
class_id
:
node
.
value
.
data
.
id
,
class_id
:
node
.
value
.
data
.
class_
id
,
},
},
});
});
};
// 编辑
};
// 编辑
const
stateChange
=
(
row
)
=>
{
const
stateChange
=
async
(
row
)
=>
{
console
.
log
(
"
更改状态
"
);
await
nextTick
();
// axios
const
params
=
{
// .put(`/xxx/xxx?id=${row.id}&state=${row.state}`)
id
:
row
.
id
,
// .then((res) => {
is_enabled
:
row
.
is_enabled
,
// if (res.data.code == 200) {
};
// ElMessage.success(res.data.msg);
axios
.
put
(
"
/v1/api/metric_config
"
,
params
).
then
((
res
)
=>
{
// changePage(1);
if
(
res
.
data
.
code
==
200
)
{
// } else {
ElMessage
.
success
(
`状态更新成功`
);
// ElMessage.error(res.data.data);
// row.state = row.state == 0 ? 1 : 0;
// }
// });
};
onBeforeMount
(()
=>
{
getTableRows
();
getTableRows
();
});
}
else
{
const
{
headers
,
tableRows
,
tableTotal
,
filter
,
noticeTypes
,
stateOptions
,
delDialog
}
=
toRefs
(
state
);
row
.
is_enabled
=
row
.
is_enabled
==
1
?
2
:
1
;
ElMessage
.
error
(
res
.
data
.
msg
);
}
});
};
const
{
headers
,
tableRows
,
tableTotal
,
filter
,
noticeTypes
,
isEnabledOptions
,
delDialog
}
=
toRefs
(
state
);
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
...
src/page/main/forewarning/indicator-config/modules/add-form.vue
View file @
e8660ffb
...
@@ -150,7 +150,7 @@ const props = defineProps({
...
@@ -150,7 +150,7 @@ const props = defineProps({
const
tableSelOptions
=
[
"
否
"
,
"
是
"
];
const
tableSelOptions
=
[
"
否
"
,
"
是
"
];
const
ruleTypeOptions
=
{
const
ruleTypeOptions
=
{
empty
:
"
空
"
,
empty
:
"
空
"
,
1
:
"
百分比范围
"
,
"
9f1e6170-65e8-4e14-9c17-6a7b87a900a7
"
:
"
百分比范围
"
,
2
:
"
毫秒范围
"
,
2
:
"
毫秒范围
"
,
3
:
"
秒范围
"
,
3
:
"
秒范围
"
,
4
:
"
个范围
"
,
4
:
"
个范围
"
,
...
@@ -329,7 +329,7 @@ watch(
...
@@ -329,7 +329,7 @@ watch(
async
(
n
)
=>
{
async
(
n
)
=>
{
if
(
!
n
)
return
;
if
(
!
n
)
return
;
state
.
form
.
warningScopeRows
=
state
.
form
.
warningScopeRows
=
n
.
warningScopeRows
.
map
((
e
)
=>
{
n
.
warningScopeRows
?
.
map
((
e
)
=>
{
return
{
return
{
key
:
e
.
key
,
key
:
e
.
key
,
input_indicator_tag
:
e
.
input_indicator_tag
,
input_indicator_tag
:
e
.
input_indicator_tag
,
...
...
src/page/main/forewarning/indicator-config/modules/interface.js
View file @
e8660ffb
import
{
ElMessage
}
from
"
element-plus
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
const
setParams
=
(
res
,
{
id
,
class_id
})
=>
{
const
setParams
=
(
res
,
{
id
,
class_id
})
=>
{
let
params
=
{
let
params
=
{
class_id
,
class_id
,
...
@@ -25,15 +26,14 @@ const setParams = (res, { id, class_id }) => {
...
@@ -25,15 +26,14 @@ const setParams = (res, { id, class_id }) => {
}
}
return
params
;
return
params
;
}
}
export
const
URL
=
"
https://so.wodcloud.co/v1/api/metric_config
"
export
const
Save
=
(
res
,
p
,
cb
)
=>
{
export
const
Save
=
(
res
,
p
)
=>
{
let
params
=
setParams
(
res
,
p
);
let
params
=
setParams
(
res
,
p
);
console
.
log
(
"
params:
"
,
params
);
axios
[
p
.
id
?
'
put
'
:
'
post
'
](
'
/v1/api/metric_config
'
,
params
).
then
(
res
=>
{
// axios[id ? 'put' : 'post'](URL, params).then(res =>
{
if
(
res
.
data
.
code
==
200
)
{
// if(res.data.code == 200){
ElMessage
.
success
(
`
${
p
.
id
?
'
编辑
'
:
'
新增
'
}
成功`
)
// console.log('success');
cb
&&
cb
()
// }else
{
}
else
{
//
ElMessage.error(res.data.data)
ElMessage
.
error
(
res
.
data
.
data
)
//
}
}
//
})
})
}
}
\ No newline at end of file
src/page/main/forewarning/indicator-config/modules/slide.vue
View file @
e8660ffb
...
@@ -17,8 +17,9 @@
...
@@ -17,8 +17,9 @@
default-expand-all
default-expand-all
:data=
"slideTree"
:data=
"slideTree"
:current-node-key=
"selectId"
:current-node-key=
"selectId"
node-key=
"id"
node-key=
"
class_
id"
empty-text=
"暂无数据"
empty-text=
"暂无数据"
:props=
"treeProps"
:highlight-current=
"true"
:highlight-current=
"true"
:expand-on-click-node=
"false"
:expand-on-click-node=
"false"
:filter-node-method=
"filterNode"
:filter-node-method=
"filterNode"
...
@@ -69,7 +70,8 @@
...
@@ -69,7 +70,8 @@
<el-form
:model=
"state.form_target"
ref=
"add_warn_target_form"
:rules=
"state.target_rules"
label-width=
"80px"
>
<el-form
:model=
"state.form_target"
ref=
"add_warn_target_form"
:rules=
"state.target_rules"
label-width=
"80px"
>
<el-form-item
label=
"预警分类"
prop=
"type"
>
<el-form-item
label=
"预警分类"
prop=
"type"
>
<el-select
style=
"flex: 1"
v-model=
"state.form_target.type"
placeholder=
"请选择预警分类"
filterable
>
<el-select
style=
"flex: 1"
v-model=
"state.form_target.type"
placeholder=
"请选择预警分类"
filterable
>
<el-option
v-for=
"item in slideTree"
:key=
"item.id"
:label=
"item.label"
:value=
"item.id"
>
</el-option>
<el-option
v-for=
"item in slideTree"
:key=
"item.class_id"
:label=
"item.class_name"
:value=
"item.class_id"
>
</el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"预警对象"
prop=
"target"
>
<el-form-item
label=
"预警对象"
prop=
"target"
>
...
@@ -101,6 +103,8 @@
...
@@ -101,6 +103,8 @@
<
script
setup
>
<
script
setup
>
import
{
nextTick
,
onBeforeMount
,
reactive
,
ref
}
from
"
vue
"
;
import
{
nextTick
,
onBeforeMount
,
reactive
,
ref
}
from
"
vue
"
;
import
GapTitle
from
"
@/components/gap-title.vue
"
;
import
GapTitle
from
"
@/components/gap-title.vue
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
const
props
=
defineProps
({
const
props
=
defineProps
({
modelValue
:
{
modelValue
:
{
type
:
Object
,
type
:
Object
,
...
@@ -109,55 +113,35 @@ const props = defineProps({
...
@@ -109,55 +113,35 @@ const props = defineProps({
});
});
const
search
=
ref
(
""
);
const
search
=
ref
(
""
);
let
slideTree
=
ref
([]);
let
slideTree
=
ref
([]);
const
treeProps
=
{
// 组织树获取数据规则
children
:
"
children
"
,
label
:
"
class_name
"
,
};
const
treeRef
=
ref
(
null
);
const
treeRef
=
ref
(
null
);
const
selectId
=
ref
(
""
);
const
selectId
=
ref
(
""
);
const
getSlideTree
=
async
()
=>
{
const
getSlideTree
=
()
=>
{
slideTree
.
value
=
[
axios
.
get
(
"
/v1/api/alert_class/tree
"
).
then
(
async
(
res
)
=>
{
{
if
(
res
.
data
.
code
==
200
)
{
id
:
1
,
slideTree
.
value
=
res
.
data
.
data
;
label
:
"
容器云
"
,
try
{
children
:
[
slideTree
.
value
.
forEach
((
e
)
=>
{
{
if
(
e
.
children
&&
e
.
children
.
length
>
0
)
{
id
:
11
,
throw
e
.
children
[
0
];
label
:
"
容器集群
"
,
}
},
});
{
}
catch
(
item
)
{
id
:
12
,
label
:
"
容器节点
"
,
},
{
id
:
13
,
label
:
"
工作负载
"
,
},
{
id
:
4
,
label
:
"
网关
"
,
},
],
},
{
id
:
2
,
label
:
"
机房
"
,
},
{
id
:
3
,
label
:
"
机柜
"
,
},
{
id
:
4
,
label
:
"
服务器
"
,
},
{
id
:
5
,
label
:
"
数据库/达梦数据库
"
,
},
];
await
nextTick
();
await
nextTick
();
treeRef
.
value
.
setCurrentKey
(
slideTree
.
value
[
0
].
children
[
0
].
id
);
treeRef
.
value
.
setCurrentKey
(
item
.
class_id
);
setTimeout
(()
=>
{
const
node
=
treeRef
.
value
.
getNode
(
item
);
const
node
=
treeRef
.
value
.
getNode
(
slideTree
.
value
[
0
].
children
[
0
]);
if
(
node
)
{
treeNodeChoose
(
slideTree
.
value
[
0
].
children
[
0
],
node
);
treeNodeChoose
(
item
,
node
);
},
1000
);
}
}
}
else
{
ElMessage
.
error
(
res
.
data
.
msg
);
}
});
};
};
const
filterNode
=
(
value
,
data
)
=>
{
const
filterNode
=
(
value
,
data
)
=>
{
if
(
!
value
)
return
data
;
if
(
!
value
)
return
data
;
...
@@ -172,6 +156,7 @@ const Add = () => {
...
@@ -172,6 +156,7 @@ const Add = () => {
};
};
const
emits
=
defineEmits
([
"
undate:modelValue
"
]);
const
emits
=
defineEmits
([
"
undate:modelValue
"
]);
const
treeNodeChoose
=
(
data
,
node
)
=>
{
const
treeNodeChoose
=
(
data
,
node
)
=>
{
console
.
log
(
"
data, node:
"
,
data
,
node
);
if
(
node
.
level
==
1
)
return
;
if
(
node
.
level
==
1
)
return
;
emits
(
"
update:modelValue
"
,
{
data
,
node
});
emits
(
"
update:modelValue
"
,
{
data
,
node
});
};
};
...
@@ -209,8 +194,8 @@ const operations = {
...
@@ -209,8 +194,8 @@ const operations = {
label
:
()
=>
"
上移
"
,
label
:
()
=>
"
上移
"
,
disabled
:
(
node
,
data
)
=>
{
disabled
:
(
node
,
data
)
=>
{
let
arr
=
getBrotherNodes
(
node
);
let
arr
=
getBrotherNodes
(
node
);
let
id
=
data
.
id
;
let
id
=
data
.
class_
id
;
let
i
=
arr
.
findIndex
((
e
)
=>
e
.
id
==
id
);
let
i
=
arr
.
findIndex
((
e
)
=>
e
.
class_
id
==
id
);
return
0
==
i
;
return
0
==
i
;
},
},
},
},
...
@@ -218,8 +203,8 @@ const operations = {
...
@@ -218,8 +203,8 @@ const operations = {
label
:
()
=>
"
下移
"
,
label
:
()
=>
"
下移
"
,
disabled
:
(
node
,
data
)
=>
{
disabled
:
(
node
,
data
)
=>
{
let
arr
=
getBrotherNodes
(
node
);
let
arr
=
getBrotherNodes
(
node
);
let
id
=
data
.
id
;
let
id
=
data
.
class_
id
;
let
i
=
arr
.
findIndex
((
e
)
=>
e
.
id
==
id
);
let
i
=
arr
.
findIndex
((
e
)
=>
e
.
class_
id
==
id
);
return
arr
.
length
-
1
==
i
;
return
arr
.
length
-
1
==
i
;
},
},
},
},
...
@@ -240,38 +225,49 @@ const Operation = (key, node, data) => {
...
@@ -240,38 +225,49 @@ const Operation = (key, node, data) => {
if
(
node
.
level
==
1
)
{
if
(
node
.
level
==
1
)
{
addWarnType
.
value
=
true
;
addWarnType
.
value
=
true
;
await
nextTick
();
await
nextTick
();
state
.
form
.
name
=
data
.
label
;
state
.
form
.
name
=
data
.
class_name
;
}
else
{
}
else
{
addWarnTarget
.
value
=
true
;
addWarnTarget
.
value
=
true
;
await
nextTick
();
await
nextTick
();
state
.
form_target
.
type
=
activeTree
.
value
.
data
.
id
;
state
.
form_target
.
type
=
activeTree
.
value
.
data
.
class_
id
;
state
.
form_target
.
target
=
data
.
label
;
state
.
form_target
.
target
=
data
.
class_name
;
}
}
isEditWarnType
.
value
=
true
;
isEditWarnType
.
value
=
true
;
},
},
2
:
()
=>
{
2
:
()
=>
{
addWarnTarget
.
value
=
true
;
addWarnTarget
.
value
=
true
;
isEditWarnType
.
value
=
false
;
isEditWarnType
.
value
=
false
;
state
.
form_target
.
type
=
activeTree
.
value
.
data
.
id
;
state
.
form_target
.
type
=
activeTree
.
value
.
data
.
class_
id
;
},
},
3
:
()
=>
{
3
:
()
=>
{
delWarnType
.
value
=
true
;
delWarnType
.
value
=
true
;
},
},
4
:
()
=>
{
4
:
()
=>
{
let
arr
=
getBrotherNodes
(
node
);
move
(
data
.
class_id
,
"
up
"
);
let
id
=
data
.
id
;
let
i
=
arr
.
findIndex
((
e
)
=>
e
.
id
==
id
);
let
prev
=
arr
[
i
-
1
];
},
},
5
:
()
=>
{
5
:
()
=>
{
let
arr
=
getBrotherNodes
(
node
);
move
(
data
.
class_id
,
"
down
"
);
let
id
=
data
.
id
;
let
i
=
arr
.
findIndex
((
e
)
=>
e
.
id
==
id
);
let
next
=
arr
[
i
+
1
];
},
},
};
};
operation_handled_fn
[
key
]();
operation_handled_fn
[
key
]();
};
};
const
move
=
(
class_id
,
type
)
=>
{
const
params
=
{
class_id
,
};
axios
.
put
(
`/v1/api/alert_class/move/
${
type
}
`
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
let
text
=
{
up
:
"
上移
"
,
down
:
"
下移
"
,
};
ElMessage
.
success
(
`
${
text
[
type
]}
成功`
);
getSlideTree
();
}
else
{
ElMessage
.
error
(
res
.
data
.
msg
);
}
});
};
const
add_warn_type_form
=
ref
(
null
);
const
add_warn_type_form
=
ref
(
null
);
const
add_warn_target_form
=
ref
(
null
);
const
add_warn_target_form
=
ref
(
null
);
const
state
=
reactive
({
const
state
=
reactive
({
...
@@ -298,8 +294,23 @@ const Cancel = async () => {
...
@@ -298,8 +294,23 @@ const Cancel = async () => {
const
Save
=
()
=>
{
const
Save
=
()
=>
{
add_warn_type_form
.
value
.
validate
((
valid
)
=>
{
add_warn_type_form
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
console
.
log
(
state
.
form
);
const
params
=
{
class_name
:
state
.
form
.
name
,
parent_id
:
0
,
};
if
(
isEditWarnType
.
value
)
{
params
.
class_id
=
activeTree
.
value
.
own
.
class_id
;
}
let
method
=
isEditWarnType
.
value
?
"
put
"
:
"
post
"
;
axios
[
method
](
"
/v1/api/alert_class
"
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
"
预警分类新建成功
"
);
Cancel
();
Cancel
();
getSlideTree
();
}
else
{
ElMessage
.
error
(
res
.
data
.
msg
);
}
});
}
else
{
}
else
{
return
false
;
return
false
;
}
}
...
@@ -313,8 +324,23 @@ const CancelAddWarnTarget = async () => {
...
@@ -313,8 +324,23 @@ const CancelAddWarnTarget = async () => {
const
SaveAddWarnTarget
=
()
=>
{
const
SaveAddWarnTarget
=
()
=>
{
add_warn_target_form
.
value
.
validate
((
valid
)
=>
{
add_warn_target_form
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
if
(
valid
)
{
console
.
log
(
state
.
form_target
);
const
params
=
{
Cancel
();
class_name
:
state
.
form_target
.
target
,
parent_id
:
state
.
form_target
.
type
,
};
if
(
isEditWarnType
.
value
)
{
params
.
class_id
=
activeTree
.
value
.
own
.
class_id
;
}
let
method
=
isEditWarnType
.
value
?
"
put
"
:
"
post
"
;
axios
[
method
](
"
/v1/api/alert_class
"
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
"
预警对象新建成功
"
);
CancelAddWarnTarget
();
getSlideTree
();
}
else
{
ElMessage
.
error
(
res
.
data
.
msg
);
}
});
}
else
{
}
else
{
return
false
;
return
false
;
}
}
...
@@ -324,8 +350,21 @@ const CancelDel = () => {
...
@@ -324,8 +350,21 @@ const CancelDel = () => {
delWarnType
.
value
=
false
;
delWarnType
.
value
=
false
;
};
};
const
ConfirmDel
=
()
=>
{
const
ConfirmDel
=
()
=>
{
console
.
log
(
activeTree
.
value
.
own
);
axios
.
delete
(
"
/v1/api/alert_class
"
,
{
data
:
{
class_id
:
activeTree
.
value
.
own
.
class_id
,
},
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
"
删除成功
"
);
CancelDel
();
CancelDel
();
getSlideTree
();
}
else
{
ElMessage
.
error
(
res
.
data
.
msg
);
}
});
};
};
onBeforeMount
(()
=>
{
onBeforeMount
(()
=>
{
getSlideTree
();
getSlideTree
();
...
...
src/page/main/forewarning/list/index.vue
View file @
e8660ffb
...
@@ -155,6 +155,7 @@
...
@@ -155,6 +155,7 @@
v-model=
"closeWarningDialog"
v-model=
"closeWarningDialog"
width=
"400px"
width=
"400px"
:before-close=
"cancelCloseWarningDialog"
>
:before-close=
"cancelCloseWarningDialog"
>
<div
style=
"padding-top: 20px"
>
<el-form
ref=
"closeForm"
:model=
"closeFormData"
:rules=
"closeRules"
label-width=
"80px"
class=
"bg_form"
>
<el-form
ref=
"closeForm"
:model=
"closeFormData"
:rules=
"closeRules"
label-width=
"80px"
class=
"bg_form"
>
<el-form-item
label=
"关闭备注"
prop=
"close_notes"
>
<el-form-item
label=
"关闭备注"
prop=
"close_notes"
>
<el-input
<el-input
...
@@ -166,10 +167,14 @@
...
@@ -166,10 +167,14 @@
resize=
"vertical"
resize=
"vertical"
placeholder=
"请输入内容"
></el-input>
placeholder=
"请输入内容"
></el-input>
</el-form-item>
</el-form-item>
<el-form-item
label=
""
prop=
"close_remind"
style=
"margin-bottom: 0px"
>
<el-form-item
label=
""
class=
"no-el-label"
prop=
"close_remind"
style=
"margin-bottom: 0px"
>
<el-checkbox
v-model=
"closeFormData.close_remind"
label=
"三天内将不再推送该预警信息"
/>
<el-checkbox
v-model=
"closeFormData.close_remind"
>
<div>
三天内将不再自动推送该告警信息给处置人员,
</div>
<div>
可手动推送,但告警数据依然会出现
</div>
</el-checkbox>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
</div>
<
template
v-slot:footer
>
<
template
v-slot:footer
>
<div
class=
"apaas_button"
>
<div
class=
"apaas_button"
>
<el-button
type=
"default"
@
click=
"cancelCloseWarningDialog"
>
取消
</el-button>
<el-button
type=
"default"
@
click=
"cancelCloseWarningDialog"
>
取消
</el-button>
...
@@ -701,4 +706,13 @@ const {
...
@@ -701,4 +706,13 @@ const {
}
}
}
}
}
}
.no-el-label
{
:deep
(
.el-form-item__content
)
{
text-align
:
left
;
margin-left
:
10px
!
important
;
.el-checkbox__label
{
line-height
:
18px
;
}
}
}
</
style
>
</
style
>
src/page/main/forewarning/rule-set/detail/index.vue
View file @
e8660ffb
...
@@ -63,11 +63,11 @@ const labelData = [
...
@@ -63,11 +63,11 @@ const labelData = [
],
],
[
[
{
{
label
:
"
预警
对象
"
,
label
:
"
预警
分类
"
,
prop
:
"
warning_target
"
,
prop
:
"
warning_target
"
,
},
},
{
{
label
:
"
预警
分类
"
,
label
:
"
预警
对象
"
,
prop
:
"
warning_type
"
,
prop
:
"
warning_type
"
,
},
},
],
],
...
...
src/page/main/forewarning/rule-set/index.vue
View file @
e8660ffb
...
@@ -169,11 +169,11 @@ const state = reactive({
...
@@ -169,11 +169,11 @@ const state = reactive({
width
:
200
,
width
:
200
,
},
},
{
{
label
:
"
预警
对象
"
,
label
:
"
预警
分类
"
,
prop
:
"
warning_object
"
,
prop
:
"
warning_object
"
,
},
},
{
{
label
:
"
预警
分类
"
,
label
:
"
预警
对象
"
,
prop
:
"
warning_type_name
"
,
prop
:
"
warning_type_name
"
,
},
},
{
{
...
...
src/page/main/forewarning/rule-set/modules/add-form.vue
View file @
e8660ffb
...
@@ -28,20 +28,39 @@
...
@@ -28,20 +28,39 @@
<div
class=
"add-form-item"
>
<div
class=
"add-form-item"
>
<div
class=
"duration"
>
<div
class=
"duration"
>
<el-form-item
label=
"持续时间"
prop=
"time"
>
<el-form-item
label=
"持续时间"
prop=
"time"
>
<el-input
v-model=
"state.form.time"
placeholder=
"请输入持续时间"
@
input=
"inputNum"
>
<template
#prepend
>
<span>
当预警持续
</span>
<span>
当预警持续
</span>
<el-input
v-model=
"state.form.time"
placeholder=
"请输入持续时间"
@
input=
"inputNum"
></el-input>
</
template
>
</el-form-item>
<
template
#append
>
<el-form-item
label=
""
prop=
"time"
class=
"no-el-label"
>
<el-select
v-model=
"state.form.unit"
placeholder=
"请选择"
>
<el-select
v-model=
"state.form.unit"
placeholder=
"请选择"
>
<el-option
v-for=
"(value, key) in unitOptions"
:key=
"key"
:label=
"value.label"
:value=
"key"
>
</el-option>
<el-option
v-for=
"(value, key) in unitOptions"
:key=
"key"
:label=
"value.label"
:value=
"key"
>
</el-option>
</el-select>
</el-select>
<span>
时产生报警
</span>
</
template
>
</el-input>
<span
class=
"duration-append"
>
<span>
时产生报警
</span>
<el-popover
:width=
"300"
title=
""
content=
"大于等于0的正整数,等于0时代表直接报警"
trigger=
"hover"
placement=
"top-start"
>
<
template
#reference
>
<bg-icon
style=
"font-size: 12px; color: #a9b1c7; margin-left: 8px; vertical-align: middle"
icon=
"#bg-ic-s-circle-tips"
></bg-icon>
</
template
>
</el-popover>
</span>
</el-form-item>
</el-form-item>
</div>
</div>
<el-form-item
label=
"检查周期"
prop=
"inspection_cycle"
>
<el-form-item
label=
"检查周期"
prop=
"inspection_cycle"
>
<el-select
style=
"flex: 1"
v-model=
"state.form.inspection_cycle"
placeholder=
"请选择"
>
<el-select
class=
"cycle-select"
style=
"flex: 1"
v-model=
"state.form.inspection_cycle"
placeholder=
"请选择"
>
<el-option
v-for=
"item in inspectionCycleOptions"
:key=
"item"
:label=
"item"
:value=
"item"
>
</el-option>
<el-option
v-for=
"item in inspectionCycleOptions"
:key=
"item"
:label=
"item"
:value=
"item"
>
</el-option>
</el-select>
</el-select>
<div
class=
"cycle-unit"
>
分钟
</div>
</el-form-item>
</el-form-item>
</div>
</div>
<gap-title
:hasLine=
"true"
title=
"预警工单推送"
></gap-title>
<gap-title
:hasLine=
"true"
title=
"预警工单推送"
></gap-title>
...
@@ -205,25 +224,37 @@ defineExpose({
...
@@ -205,25 +224,37 @@ defineExpose({
}
}
}
}
.duration
{
.duration
{
flex
:
1
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
gap
:
8px
;
:deep
(
.el-form-item
)
{
:deep
(
.el-form-item__content
)
{
flex
:
1
;
display
:
flex
;
.el-input
{
align-items
:
center
;
margin-right
:
8px
;
gap
:
8px
;
>
.el-input
{
flex
:
1
;
flex
:
1
;
width
:
80px
;
}
}
.el-input-group__prepend
{
width
:
102px
;
border-radius
:
4px
;
border-top-right-radius
:
0
;
border-bottom-right-radius
:
0
;
}
}
.no-el-label
{
.el-input-group__append
{
:deep
(
.el-form-item__content
)
{
.el-select
{
width
:
80px
;
width
:
80px
;
border-radius
:
4px
;
border-top-left-radius
:
0
;
border-bottom-left-radius
:
0
;
}
}
}
}
}
// :deep(.el-form-item__content) {
// display: flex;
// align-items: center;
// gap: 8px;
// > .el-input {
// flex: 1;
// width: 80px;
// }
// }
}
}
:deep
(
.el-switch__inner
)
{
:deep
(
.el-switch__inner
)
{
.is-hide
{
.is-hide
{
...
@@ -235,6 +266,26 @@ defineExpose({
...
@@ -235,6 +266,26 @@ defineExpose({
border-top-left-radius
:
0
;
border-top-left-radius
:
0
;
border-bottom-left-radius
:
0
;
border-bottom-left-radius
:
0
;
}
}
.duration-append
{
display
:
flex
;
align-items
:
center
;
color
:
#404a62
;
}
.cycle-unit
{
width
:
60px
;
height
:
36px
;
background-color
:
#f7f7f9
;
border-radius
:
0px
4px
4px
0px
;
border
:
solid
1px
#dadee7
;
text-align
:
center
;
border-left
:
0
;
}
.cycle-select
{
:deep
(
.el-input__wrapper
)
{
border-top-right-radius
:
0
;
border-bottom-right-radius
:
0
;
}
}
}
}
}
}
.no-el-label
{
.no-el-label
{
...
...
src/page/main/forewarning/rule-set/modules/custom.vue
View file @
e8660ffb
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<el-form-item
label=
"预警对象"
prop=
"warn_target"
>
<el-form-item
label=
"预警对象"
prop=
"warn_target"
>
<el-input
<el-input
v-model=
"state.form.warn_target"
v-model=
"state.form.warn_target"
placeholder=
"请输入"
placeholder=
"请输入
预警对象
"
:disabled=
"isEdit"
:disabled=
"isEdit"
:maxlength=
"20"
:maxlength=
"20"
show-word-limit
show-word-limit
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
<el-form-item
label=
"预警分类"
prop=
"warn_type"
>
<el-form-item
label=
"预警分类"
prop=
"warn_type"
>
<el-input
<el-input
v-model=
"state.form.warn_type"
v-model=
"state.form.warn_type"
placeholder=
"请输入"
placeholder=
"请输入
预警分类
"
:disabled=
"isEdit"
:disabled=
"isEdit"
clearable
clearable
:maxlength=
"20"
:maxlength=
"20"
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
<el-form-item
label=
"预警指标"
prop=
"warn_indicator"
>
<el-form-item
label=
"预警指标"
prop=
"warn_indicator"
>
<el-input
<el-input
v-model=
"state.form.warn_indicator"
v-model=
"state.form.warn_indicator"
placeholder=
"请输入"
placeholder=
"请输入
预警指标
"
:disabled=
"isEdit"
:disabled=
"isEdit"
:maxlength=
"30"
:maxlength=
"30"
show-word-limit
show-word-limit
...
@@ -97,7 +97,7 @@
...
@@ -97,7 +97,7 @@
<el-select
<el-select
style=
"flex: 1"
style=
"flex: 1"
v-model=
"state.form.ruleRows[$index].risk_level"
v-model=
"state.form.ruleRows[$index].risk_level"
placeholder=
"请选择"
>
placeholder=
"请选择
风险程度
"
>
<el-option
<el-option
v-for=
"item in riskLevelOptions($index)"
v-for=
"item in riskLevelOptions($index)"
:key=
"item.id"
:key=
"item.id"
...
@@ -175,16 +175,15 @@ const state = reactive({
...
@@ -175,16 +175,15 @@ const state = reactive({
ruleRows
:
[],
ruleRows
:
[],
},
},
rules
:
{
rules
:
{
warn_target
:
[{
required
:
true
,
message
:
"
请输入
"
,
trigger
:
"
blur
"
}],
warn_target
:
[{
required
:
true
,
message
:
"
请输入
预警对象
"
,
trigger
:
"
blur
"
}],
warn_type
:
[{
required
:
true
,
message
:
"
请输入
"
,
trigger
:
"
blur
"
}],
warn_type
:
[{
required
:
true
,
message
:
"
请输入
预警分类
"
,
trigger
:
"
blur
"
}],
warn_indicator
:
[{
validator
:
validateWarnIndex
,
trigger
:
"
blur
"
}],
warn_indicator
:
[{
validator
:
validateWarnIndex
,
trigger
:
"
blur
"
}],
indicator_expression
:
[{
required
:
true
,
message
:
"
请输入
"
,
trigger
:
"
blur
"
}],
indicator_expression
:
[{
required
:
true
,
message
:
"
请输入预警指标
"
,
trigger
:
"
blur
"
}],
rule_type
:
[{
required
:
true
,
message
:
"
请选择
"
,
trigger
:
"
change
"
}],
},
},
tableRules
:
{
tableRules
:
{
from
:
[{
required
:
true
,
message
:
"
请输入
"
,
trigger
:
"
blur
"
}],
from
:
[{
required
:
true
,
message
:
"
请输入
"
,
trigger
:
"
blur
"
}],
to
:
[{
required
:
true
,
message
:
"
请输入
"
,
trigger
:
"
blur
"
}],
to
:
[{
required
:
true
,
message
:
"
请输入
"
,
trigger
:
"
blur
"
}],
risk_level
:
[{
required
:
true
,
message
:
"
请选择
"
,
trigger
:
"
change
"
}],
risk_level
:
[{
required
:
true
,
message
:
"
请选择
风险程度
"
,
trigger
:
"
change
"
}],
},
},
});
});
const
changeWarnCustomTarget
=
()
=>
{};
const
changeWarnCustomTarget
=
()
=>
{};
...
...
src/page/main/forewarning/rule-set/modules/gateway.vue
View file @
e8660ffb
...
@@ -21,8 +21,11 @@
...
@@ -21,8 +21,11 @@
style=
"flex: 1"
style=
"flex: 1"
v-model.number=
"state.form.ruleRows[$index].from"
v-model.number=
"state.form.ruleRows[$index].from"
placeholder=
"请输入"
placeholder=
"请输入"
@
input=
"changeWarningThresholdFrom($index)"
>
@
input=
"inputNum($index, 'from')"
<template
v-if=
"state.form.rule_type != 'empty'"
#append
>
ms
</
template
>
@
blur=
"changeWarningThresholdFrom($index)"
>
<template
v-if=
"state.form.rule_type != 'empty'"
#append
>
{{
ruleTypeOptions
[
props
.
rule_type
].
unit
}}
</
template
>
</el-input>
</el-input>
</el-form-item>
</el-form-item>
<span
class=
"to"
>
-
</span>
<span
class=
"to"
>
-
</span>
...
@@ -32,8 +35,11 @@
...
@@ -32,8 +35,11 @@
v-model.number=
"state.form.ruleRows[$index].to"
v-model.number=
"state.form.ruleRows[$index].to"
placeholder=
"请输入"
placeholder=
"请输入"
clearable
clearable
@
input=
"changeWarningThresholdTo($index)"
>
@
input=
"inputNum($index, 'to')"
<
template
v-if=
"state.form.rule_type != 'empty'"
#append
>
ms
</
template
>
@
blur=
"changeWarningThresholdTo($index)"
>
<
template
v-if=
"state.form.rule_type != 'empty'"
#append
>
{{
ruleTypeOptions
[
props
.
rule_type
].
unit
}}
</
template
>
</el-input>
</el-input>
</el-form-item>
</el-form-item>
</div>
</div>
...
@@ -77,13 +83,62 @@
...
@@ -77,13 +83,62 @@
<
script
setup
>
<
script
setup
>
import
{
computed
,
reactive
,
ref
,
watch
}
from
"
vue
"
;
import
{
computed
,
reactive
,
ref
,
watch
}
from
"
vue
"
;
import
gapTitle
from
"
@/components/gap-title.vue
"
;
import
gapTitle
from
"
@/components/gap-title.vue
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
const
props
=
defineProps
({
const
props
=
defineProps
({
form
:
{
form
:
{
type
:
Object
,
type
:
Object
,
default
:
null
,
default
:
null
,
},
},
rule_type
:
{
type
:
String
,
default
:
"
1
"
,
},
});
});
const
ruleTypeOptions
=
{
empty
:
{
label
:
"
空
"
,
},
1
:
{
label
:
"
百分比范围
"
,
unit
:
"
%
"
,
limit
:
{
down
:
0
,
up
:
100
,
},
},
2
:
{
label
:
"
毫秒范围
"
,
unit
:
"
ms
"
,
limit
:
{
down
:
0
,
up
:
""
,
},
},
3
:
{
label
:
"
秒范围
"
,
unit
:
"
s
"
,
limit
:
{
down
:
0
,
up
:
""
,
},
},
4
:
{
label
:
"
个范围
"
,
unit
:
"
个
"
,
limit
:
{
down
:
0
,
up
:
""
,
},
},
5
:
{
label
:
"
温度范围
"
,
unit
:
"
℃
"
,
limit
:
{
down
:
""
,
up
:
""
,
},
},
};
const
state
=
reactive
({
const
state
=
reactive
({
form
:
{
form
:
{
ruleRows
:
[],
ruleRows
:
[],
...
@@ -160,11 +215,26 @@ const setLimits = (index) => {
...
@@ -160,11 +215,26 @@ const setLimits = (index) => {
})
||
[]
})
||
[]
);
);
};
};
const
limit
=
computed
(()
=>
{
return
(
ruleTypeOptions
[
props
.
rule_type
].
limit
||
{
down
:
""
,
up
:
""
,
}
);
});
const
changeWarningThresholdFrom
=
(
index
)
=>
{
const
changeWarningThresholdFrom
=
(
index
)
=>
{
let
{
down
,
up
}
=
limit
.
value
;
let
{
down
,
up
}
=
limit
.
value
;
if
(
down
===
""
)
return
;
if
(
down
===
""
)
return
;
let
{
from
,
to
}
=
state
.
form
.
ruleRows
[
index
];
let
{
from
,
to
}
=
state
.
form
.
ruleRows
[
index
];
if
(
+
from
>
+
up
||
(
index
==
0
&&
+
from
<
+
down
)
||
+
from
>
+
to
)
{
if
(
+
from
>
+
up
||
(
index
==
0
&&
+
from
<
+
down
)
||
(
to
!=
""
&&
from
>
+
to
))
{
if
(
+
from
<
+
down
)
{
ElMessage
.
error
(
`下限不能小于
${
down
}
`
);
}
else
if
(
+
from
>
+
up
)
{
ElMessage
.
error
(
`上限不能超过
${
up
}
`
);
}
else
{
ElMessage
.
error
(
`下限不能大于上限`
);
}
state
.
form
.
ruleRows
[
index
].
from
=
""
;
state
.
form
.
ruleRows
[
index
].
from
=
""
;
return
;
return
;
}
}
...
@@ -177,14 +247,25 @@ const changeWarningThresholdFrom = (index) => {
...
@@ -177,14 +247,25 @@ const changeWarningThresholdFrom = (index) => {
}
}
});
});
}
catch
(
e
)
{
}
catch
(
e
)
{
ElMessage
.
error
(
`该范围已被设置`
);
state
.
form
.
ruleRows
[
index
].
from
=
""
;
state
.
form
.
ruleRows
[
index
].
from
=
""
;
}
}
};
};
const
inputNum
=
(
index
,
key
)
=>
{
state
.
form
.
ruleRows
[
index
][
key
]
=
state
.
form
.
ruleRows
[
index
][
key
].
replace
(
/
[^\d]
/g
,
""
);
};
const
changeWarningThresholdTo
=
(
index
)
=>
{
const
changeWarningThresholdTo
=
(
index
)
=>
{
let
{
down
,
up
}
=
limit
.
value
;
let
{
down
,
up
}
=
limit
.
value
;
if
(
up
===
""
)
return
;
if
(
up
===
""
)
return
;
let
{
from
,
to
}
=
state
.
form
.
ruleRows
[
index
];
let
{
from
,
to
}
=
state
.
form
.
ruleRows
[
index
];
if
((
index
==
0
&&
+
to
>
+
up
)
||
+
to
<
+
down
||
+
from
>
+
to
)
{
if
((
index
==
0
&&
+
to
>
+
up
)
||
+
to
<
+
down
||
(
from
!=
""
&&
+
from
>
+
to
))
{
if
(
+
to
>
+
up
)
{
ElMessage
.
error
(
`上限不能超过
${
up
}
`
);
}
else
if
(
+
to
<
+
down
)
{
ElMessage
.
error
(
`下限不能小于
${
down
}
`
);
}
else
{
ElMessage
.
error
(
`上限不能小于下限`
);
}
state
.
form
.
ruleRows
[
index
].
to
=
""
;
state
.
form
.
ruleRows
[
index
].
to
=
""
;
return
;
return
;
}
}
...
@@ -197,6 +278,7 @@ const changeWarningThresholdTo = (index) => {
...
@@ -197,6 +278,7 @@ const changeWarningThresholdTo = (index) => {
}
}
});
});
}
catch
(
e
)
{
}
catch
(
e
)
{
ElMessage
.
error
(
`该范围已被设置`
);
state
.
form
.
ruleRows
[
index
].
to
=
""
;
state
.
form
.
ruleRows
[
index
].
to
=
""
;
}
}
};
};
...
...
src/page/main/forewarning/rule-set/modules/static.vue
View file @
e8660ffb
...
@@ -52,7 +52,7 @@
...
@@ -52,7 +52,7 @@
<el-input
<el-input
class=
"warn-scpoe-input-value"
class=
"warn-scpoe-input-value"
v-model=
"state.form.warning_scpoe_form[index].value"
v-model=
"state.form.warning_scpoe_form[index].value"
placeholder=
"请输入
"
:placeholder=
"`请输入$
{item.chinese_name}`
"
v-if="!showSelect.includes(item.select)"
v-if="!showSelect.includes(item.select)"
:disabled="item.select == 1">
:disabled="item.select == 1">
</el-input>
</el-input>
...
@@ -60,7 +60,7 @@
...
@@ -60,7 +60,7 @@
class=
"warn-scpoe-input-value"
class=
"warn-scpoe-input-value"
v-else
v-else
v-model=
"item.value"
v-model=
"item.value"
placeholder=
"请选择
"
:placeholder=
"`请选择$
{item.chinese_name}`
"
filterable
filterable
:loading="item.loading"
:loading="item.loading"
remote
remote
...
@@ -83,7 +83,7 @@
...
@@ -83,7 +83,7 @@
</el-option>
</el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<Gateway
v-else
ref=
"warn_type_com"
/>
<Gateway
v-else
ref=
"warn_type_com"
:rule_type=
"alert_rule_type"
/>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -370,9 +370,9 @@ defineExpose({
...
@@ -370,9 +370,9 @@ defineExpose({
width
:
100%
;
width
:
100%
;
padding-left
:
8px
;
padding-left
:
8px
;
.warning-scope-main
{
.warning-scope-main
{
display
:
grid
;
//
display: grid;
grid-template-columns
:
1fr
1fr
;
//
grid-template-columns: 1fr 1fr;
grid-column-gap
:
16px
;
//
grid-column-gap: 16px;
:deep
(
.el-input-group__prepend
)
{
:deep
(
.el-input-group__prepend
)
{
border-radius
:
4px
;
border-radius
:
4px
;
border-top-right-radius
:
0
;
border-top-right-radius
:
0
;
...
@@ -385,9 +385,13 @@ defineExpose({
...
@@ -385,9 +385,13 @@ defineExpose({
.warn-scpoe-select
{
.warn-scpoe-select
{
width
:
114px
!
important
;
width
:
114px
!
important
;
:deep
(
.el-input__wrapper
)
{
:deep
(
.el-input__wrapper
)
{
background-color
:
#2b4695
;
border-radius
:
4px
;
border-radius
:
4px
;
border-top-right-radius
:
0
;
border-top-right-radius
:
0
;
border-bottom-right-radius
:
0
;
border-bottom-right-radius
:
0
;
.el-input__inner
{
color
:
#fff
;
}
}
}
}
}
.warn-scpoe-input-item
{
.warn-scpoe-input-item
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment