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
49f78eb2
Commit
49f78eb2
authored
Jun 21, 2023
by
赵伟庚
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[feat](预警列表): 预警列表静态页面及弹窗交互完成
parent
c2cd7c2d
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
461 additions
and
160 deletions
+461
-160
src/assets/css/index.css
src/assets/css/index.css
+52
-71
src/page/main/forewarning/list/index.vue
src/page/main/forewarning/list/index.vue
+140
-89
src/page/main/forewarning/list/user-input-table.vue
src/page/main/forewarning/list/user-input-table.vue
+269
-0
No files found.
src/assets/css/index.css
View file @
49f78eb2
This diff is collapsed.
Click to expand it.
src/page/main/forewarning/list/index.vue
View file @
49f78eb2
...
@@ -123,75 +123,59 @@
...
@@ -123,75 +123,59 @@
</div>
</div>
</div>
</div>
<!-- todo: 推送提醒 -->
<!-- todo: 推送提醒 -->
<!-- <el-dialog
<el-dialog
title=
"推送提醒"
v-model=
"pushDialog"
width=
"780px"
:before-close=
"cancelPushDialog"
>
class="dialog_box"
<div
class=
"warning_info"
>
:title="addType == 1 ? '新增' : '编辑'"
<bg-icon
v-model="addDialog"
style=
"font-size: 12px; color: #a9b1c7; margin-right: 8px; vertical-align: middle"
width="758px">
icon=
"#bg-ic-s-circle-tips"
></bg-icon
<el-form ref="bgForm" :model="formData" :rules="rules" label-width="80px" class="bg_form">
>
该推送为临时推送,可调整推送人员,仅本次有效!如固定通知人员,则前往【预警规则设置】调整预警内容
<el-form-item label="名称" prop="name">
</div>
<el-input
<el-form
ref=
"pushForm"
:model=
"pushFormData"
:rules=
"pushRules"
label-width=
"120px"
class=
"bg_form"
>
v-model.trim="formData.name"
<el-form-item
label=
"预警工单推送"
prop=
"method"
style=
"margin-bottom: 24px"
>
show-word-limit
<el-checkbox-group
v-model=
"pushFormData.method"
>
:maxlength="
<el-checkbox
:label=
"1"
>
钉钉
</el-checkbox>
nodeClassifyId == 'eb9c7d70-c123-42b7-8e61-dde1b022b669'
<el-checkbox
:label=
"2"
>
短信
</el-checkbox>
? 6
</el-checkbox-group>
: nodeClassifyId == 'efd9ec3b-7f18-49e2-9d88-bcca022243bb'
? 4
: nodeClassifyId == '949a1138-4995-464e-97a9-424d097eb271'
? 2
: 20
"
placeholder="请输入名称"></el-input>
</el-form-item>
<el-form-item label="描述" prop="describe">
<el-input
v-model="formData.describe"
type="textarea"
:autosize="{ minRows: 5 }"
show-word-limit
maxlength="200"
resize="vertical"
placeholder="请输入描述"></el-input>
</el-form-item>
<el-form-item label="是否启用" prop="state" style="margin-bottom: 0px">
<el-switch
class="bg-switch-ele"
v-model="formData.state"
:active-value="1"
:inactive-value="0"
inline-prompt
active-text="是"
inactive-text="否" />
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<user-input-table
v-if=
"userTableFlag"
ref=
"userTable"
:data=
"userData"
@
change=
"changeData"
/>
<
template
v-slot:footer
>
<
template
v-slot:footer
>
<div
class=
"apaas_button"
>
<div
class=
"apaas_button"
>
<el-button type="default" @click="
addDialog = false">取
消</el-button>
<el-button
type=
"default"
@
click=
"
cancelPushDialog"
>
取
消
</el-button>
<el-button type="primary" @click="
addConfirm">保 存
</el-button>
<el-button
type=
"primary"
@
click=
"
pushConfirm"
>
确定
</el-button>
</div>
</div>
</
template
>
</
template
>
</el-dialog>
-->
</el-dialog>
<!--
todo:
关闭提醒 -->
<!-- 关闭提醒 -->
<
!-- <
el-dialog
<el-dialog
class=
"dialog_box"
class=
"dialog_box"
title="
提示
"
title=
"
关闭预警
"
v-model="
dialogDelete
"
v-model=
"
closeWarningDialog
"
width=
"400px"
width=
"400px"
:before-close="
:before-close=
"cancelCloseWarningDialog"
>
() => {
<el-form
ref=
"closeForm"
:model=
"closeFormData"
:rules=
"closeRules"
label-width=
"80px"
class=
"bg_form"
>
dialogDelete = false;
<el-form-item
label=
"关闭备注"
prop=
"close_notes"
>
}
<el-input
">
v-model=
"closeFormData.close_notes"
<div>确定要删除此字典值吗?</div>
type=
"textarea"
:autosize=
"{ minRows: 2 }"
show-word-limit
maxlength=
"30"
resize=
"vertical"
placeholder=
"请输入内容"
></el-input>
</el-form-item>
<el-form-item
label=
""
prop=
"close_remind"
style=
"margin-bottom: 0px"
>
<el-checkbox
v-model=
"closeFormData.close_remind"
label=
"三天内将不再推送该预警信息"
/>
</el-form-item>
</el-form>
<
template
v-slot:footer
>
<
template
v-slot:footer
>
<div
class=
"apaas_button"
>
<div
class=
"apaas_button"
>
<el-button type="default" @click="
dialogDelete = false">取
消</el-button>
<el-button
type=
"default"
@
click=
"
cancelCloseWarningDialog"
>
取
消
</el-button>
<el-button type="primary" @click="
deleteData">确
定</el-button>
<el-button
type=
"primary"
@
click=
"
confirmClose"
>
确
定
</el-button>
</div>
</div>
</
template
>
</
template
>
</el-dialog>
-->
</el-dialog>
</div>
</div>
</template>
</template>
...
@@ -201,11 +185,14 @@ import { ElMessage } from "element-plus";
...
@@ -201,11 +185,14 @@ import { ElMessage } from "element-plus";
import
axios
from
"
@/request/http.js
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
Search
}
from
"
@element-plus/icons-vue
"
;
import
{
Search
}
from
"
@element-plus/icons-vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
userInputTable
from
"
./user-input-table.vue
"
;
const
bgForm
=
ref
(
null
);
const
bgForm
=
ref
(
null
);
const
dataTable
=
ref
(
null
);
const
dataTable
=
ref
(
null
);
const
closeForm
=
ref
(
null
);
const
userTable
=
ref
(
null
);
const
pushForm
=
ref
(
null
);
const
state
=
reactive
({
const
state
=
reactive
({
bgForm
,
warningTypes
:
[
warningTypes
:
[
{
{
name
:
"
全部
"
,
name
:
"
全部
"
,
...
@@ -338,25 +325,28 @@ const state = reactive({
...
@@ -338,25 +325,28 @@ const state = reactive({
limit
:
10
,
limit
:
10
,
},
// 表格筛选项
},
// 表格筛选项
actionRow
:
null
,
// 当前操作的数据
actionRow
:
null
,
// 当前操作的数据
dialogDelete
:
false
,
// 删除弹窗
closeWarningDialog
:
false
,
// 删除弹窗
addType
:
0
,
//
closeFormData
:
{
addDialog
:
false
,
close_notes
:
""
,
formData
:
{
close_remind
:
false
,
name
:
""
,
},
describe
:
""
,
closeRules
:
{
state
:
1
,
close_notes
:
[{
required
:
true
,
message
:
"
请输入关闭备注
"
,
trigger
:
"
blur
"
}],
p_dict_id
:
""
,
},
pushDialog
:
false
,
userData
:
[],
pushFormData
:
{
method
:
[],
},
},
rules
:
{
pushRules
:
{
name
:
[{
required
:
true
,
message
:
"
请输入名称
"
,
trigger
:
"
blur
"
}],
method
:
[{
type
:
"
array
"
,
required
:
true
,
message
:
"
请最少选择一种推送方式
"
,
trigger
:
"
change
"
}],
describe
:
[
{
required
:
true
,
message
:
"
请输入描述
"
,
trigger
:
"
blur
"
},
{
max
:
200
,
message
:
"
描述最大为200字
"
,
trigger
:
"
blur
"
},
],
state
:
[{
required
:
true
,
message
:
"
请选择是否启用
"
,
trigger
:
"
change
"
}],
},
},
});
});
const
userTableFlag
=
computed
(()
=>
{
return
!!
state
.
pushDialog
;
});
const
selectRows
=
(
data
)
=>
{
const
selectRows
=
(
data
)
=>
{
state
.
selected
=
data
.
selection
;
state
.
selected
=
data
.
selection
;
};
};
...
@@ -424,7 +414,7 @@ const getTableRows = () => {
...
@@ -424,7 +414,7 @@ const getTableRows = () => {
notice_people_num
:
2
,
notice_people_num
:
2
,
push_times
:
2
,
push_times
:
2
,
last_push_time
:
"
2020-01-01 00:00:00
"
,
last_push_time
:
"
2020-01-01 00:00:00
"
,
state
:
1
,
state
:
0
,
},
},
{
{
id
:
2
,
id
:
2
,
...
@@ -474,19 +464,87 @@ const batchPush = () => {
...
@@ -474,19 +464,87 @@ const batchPush = () => {
const
pushWarning
=
(
row
)
=>
{
const
pushWarning
=
(
row
)
=>
{
state
.
actionRow
=
row
;
state
.
actionRow
=
row
;
console
.
log
(
"
推送提醒
"
);
console
.
log
(
"
推送提醒
"
);
state
.
userData
=
[
{
account
:
1
,
name
:
"
张一
"
,
mobile
:
"
13111111111
"
,
},
{
account
:
2
,
name
:
"
张二二
"
,
mobile
:
"
13222222222
"
,
},
{
account
:
4
,
name
:
"
张四三
"
,
mobile
:
"
13443434344
"
,
},
];
state
.
pushDialog
=
true
;
};
// 推送提醒
};
// 推送提醒
const
changeData
=
(
data
)
=>
{
state
.
userData
=
data
.
data
;
};
const
cancelPushDialog
=
()
=>
{
pushForm
.
value
.
resetFields
();
state
.
pushDialog
=
false
;
};
// 预警推送弹窗取消按钮:重置表单
const
pushConfirm
=
()
=>
{
pushForm
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
console
.
log
(
state
.
actionRow
.
id
,
state
.
userData
);
console
.
log
(
state
.
pushFormData
);
cancelPushDialog
();
}
});
};
const
closeWarning
=
(
row
)
=>
{
const
closeWarning
=
(
row
)
=>
{
state
.
actionRow
=
row
;
state
.
actionRow
=
row
;
state
.
closeWarningDialog
=
true
;
console
.
log
(
"
关闭预警
"
);
console
.
log
(
"
关闭预警
"
);
};
// 关闭预警
};
// 关闭预警
const
cancelCloseWarningDialog
=
()
=>
{
closeForm
.
value
.
resetFields
();
state
.
closeWarningDialog
=
false
;
};
// 关闭预警弹窗取消按钮:重置表单
const
confirmClose
=
()
=>
{
closeForm
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
console
.
log
(
state
.
actionRow
.
id
);
console
.
log
(
state
.
closeFormData
);
cancelCloseWarningDialog
();
}
});
};
// 关闭预警弹窗确定按钮:提交表单
onBeforeMount
(()
=>
{
onBeforeMount
(()
=>
{
getTableRows
();
getTableRows
();
});
});
const
{
headers
,
tableRows
,
tableTotal
,
filter
,
warningTypes
,
warningTargets
,
riskLevels
,
stateOptions
}
=
const
{
toRefs
(
state
);
headers
,
tableRows
,
tableTotal
,
filter
,
warningTypes
,
warningTargets
,
riskLevels
,
stateOptions
,
closeWarningDialog
,
closeFormData
,
closeRules
,
pushDialog
,
userData
,
pushFormData
,
pushRules
,
}
=
toRefs
(
state
);
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
@@ -548,7 +606,7 @@ const { headers, tableRows, tableTotal, filter, warningTypes, warningTargets, ri
...
@@ -548,7 +606,7 @@ const { headers, tableRows, tableTotal, filter, warningTypes, warningTargets, ri
width
:
100%
;
width
:
100%
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
.el-form-item
{
.el-form-item
{
margin-bottom
:
24
px
;
margin-bottom
:
16
px
;
:deep
()
.el-form-item__label
{
:deep
()
.el-form-item__label
{
line-height
:
36px
;
line-height
:
36px
;
height
:
36px
;
height
:
36px
;
...
@@ -557,26 +615,19 @@ const { headers, tableRows, tableTotal, filter, warningTypes, warningTargets, ri
...
@@ -557,26 +615,19 @@ const { headers, tableRows, tableTotal, filter, warningTypes, warningTargets, ri
width
:
100%
;
width
:
100%
;
.el-textarea
{
.el-textarea
{
:deep
()
.el-input__count
{
:deep
()
.el-input__count
{
bottom
:
-1
6px
;
bottom
:
6px
;
right
:
4px
;
right
:
4px
;
font-family
:
Roboto-Regular
;
font-family
:
Roboto-Regular
;
color
:
#a9b1c7
;
color
:
#a9b1c7
;
}
}
}
}
.bg-switch-ele
{
width
:
52px
;
height
:
24px
;
:deep
()
.el-switch__core
{
width
:
100%
;
height
:
24px
;
.el-switch__inner
,
.el-switch__action
{
top
:
3px
;
}
}
}
}
}
}
}
}
}
:deep
()
.dialog_box
{
.el-dialog__body
{
padding-bottom
:
0
;
}
}
}
}
</
style
>
</
style
>
src/page/main/forewarning/list/user-input-table.vue
0 → 100644
View file @
49f78eb2
<
template
>
<el-form
ref=
"ruleFormRef"
class=
"ruleForm"
:model=
"tableRows"
:size=
"formSize"
:rules=
"formRules"
>
<bg-table-pro
showIndex
:headers=
"headers"
:data=
"tableRows"
ref=
"input-table"
:border=
"true"
:stripe=
"false"
>
<template
v-slot:account=
"
{ row, index }">
<el-form-item
:prop=
"`[$
{index}].account`" :rules="formRules.account" style="width: 100%">
<el-select
v-model=
"row.account"
placeholder=
"请选择帐号"
style=
"width: 100%"
@
change=
"changeAccount(row)"
:disabled=
"disabled"
>
<el-option
v-for=
"(item, index) in userLists"
:key=
"'userItem' + index"
:disabled=
"item.disabled"
:label=
"item.account"
:value=
"item.id"
>
</el-option>
</el-select>
</el-form-item>
</
template
>
<
template
v-slot:name=
"{ row, index }"
>
<el-form-item
:prop=
"`[$
{index}].name`" :rules="formRules.name" style="width: 100%">
<el-input
@
change=
"changeName"
placeholder=
"请输入姓名"
:disabled=
"disabled"
v-model.trim=
"row.name"
/>
</el-form-item>
</
template
>
<
template
v-slot:mobile=
"{ row, index }"
>
<el-form-item
:prop=
"`[$
{index}].mobile`" :rules="formRules.mobile" style="width: 100%">
<el-input
@
change=
"changeMobile"
placeholder=
"请输入联系方式"
:disabled=
"disabled"
v-model.trim=
"row.mobile"
/>
</el-form-item>
</
template
>
<
template
v-slot:action=
"{ row, index }"
>
<bg-table-btn
:disabled=
"disabled || !canAdd"
:click=
"
() =>
{
addParam(index);
}
"
>增加
</bg-table-btn
>
<bg-table-btn
:disabled=
"disabled"
:click=
"
() =>
{
removeParam(row, index);
}
">
删除
</bg-table-btn>
</
template
>
</bg-table-pro>
</el-form>
</template>
<
script
setup
>
import
{
reactive
,
toRefs
,
onBeforeMount
,
onMounted
,
ref
,
getCurrentInstance
,
watch
,
computed
}
from
"
vue
"
;
import
{
v4
as
uuidv4
}
from
"
uuid
"
;
import
{
validatePhone
}
from
"
@/services/rules.js
"
;
const
props
=
defineProps
({
data
:
{
type
:
Array
,
default
:
()
=>
[],
},
disabled
:
{
type
:
Boolean
,
default
:
false
,
},
});
const
emit
=
defineEmits
([
"
change
"
]);
const
formSize
=
ref
(
"
default
"
);
const
ruleFormRef
=
ref
(
null
);
const
formRules
=
reactive
({
name
:
[
{
required
:
true
,
message
:
"
请输入键
"
,
trigger
:
"
blur
"
,
},
{
max
:
50
,
message
:
"
最多50个字符
"
,
trigger
:
"
blur
"
,
},
],
account
:
[
{
required
:
true
,
message
:
"
请选择帐号
"
,
trigger
:
"
change
"
,
},
],
mobile
:
[
{
required
:
true
,
message
:
"
请输入联系方式
"
,
trigger
:
"
blur
"
,
},
{
validator
:
validatePhone
,
trigger
:
"
blur
"
},
],
});
const
headers
=
reactive
([
{
label
:
"
帐号
"
,
prop
:
"
account
"
,
required
:
true
,
},
{
label
:
"
姓名
"
,
prop
:
"
name
"
,
required
:
true
,
},
{
label
:
"
联系方式
"
,
prop
:
"
mobile
"
,
required
:
true
,
},
{
label
:
"
操作
"
,
prop
:
"
action
"
,
width
:
120
,
},
]);
const
state
=
reactive
({
tableRows
:
[],
userLists
:
[
{
account
:
"
admin
"
,
id
:
1
,
name
:
"
张一
"
,
mobile
:
"
13111111111
"
,
},
{
account
:
"
ys-admin
"
,
id
:
2
,
name
:
"
张二
"
,
mobile
:
"
13222222222
"
,
},
{
account
:
"
yf-user
"
,
id
:
3
,
name
:
"
张三
"
,
mobile
:
"
13333333333
"
,
},
{
account
:
"
putong
"
,
id
:
4
,
name
:
"
张四
"
,
mobile
:
"
13444444444
"
,
},
],
});
watch
(
()
=>
state
.
tableRows
,
(
n
,
o
)
=>
{
let
list
=
state
.
tableRows
.
map
((
e
)
=>
{
return
e
.
account
;
});
state
.
userLists
.
forEach
((
e
)
=>
{
if
(
list
.
indexOf
(
e
.
id
)
>
-
1
)
{
e
.
disabled
=
true
;
}
else
{
e
.
disabled
=
false
;
}
});
},
{
deep
:
true
,
}
);
const
canAdd
=
computed
(()
=>
{
return
state
.
tableRows
.
length
>=
5
?
false
:
true
;
});
// 最多五条数据,控制下新增按钮的禁用
onBeforeMount
(()
=>
{
initTable
();
});
var
initTable
=
()
=>
{
if
(
props
.
data
&&
props
.
data
.
length
>=
1
)
{
state
.
tableRows
=
props
.
data
;
}
else
{
state
.
tableRows
=
[];
addParam
(
0
);
}
};
var
createRow
=
()
=>
{
return
{
id
:
uuidv4
(),
account
:
""
,
name
:
""
,
mobile
:
""
,
};
};
var
addParam
=
(
index
)
=>
{
state
.
tableRows
.
splice
(
index
+
1
,
0
,
createRow
());
};
var
removeParam
=
(
row
,
index
)
=>
{
state
.
tableRows
.
splice
(
index
,
1
);
if
(
state
.
tableRows
.
length
===
0
)
{
addParam
(
0
);
}
};
const
changeAccount
=
(
row
)
=>
{
state
.
userLists
.
forEach
((
e
)
=>
{
if
(
e
.
id
==
row
.
account
)
{
row
.
name
=
e
.
name
;
row
.
mobile
=
e
.
mobile
;
}
});
emit
(
"
change
"
,
{
type
:
"
account
"
,
data
:
state
.
tableRows
,
});
};
const
changeName
=
()
=>
{
emit
(
"
change
"
,
{
type
:
"
name
"
,
data
:
state
.
tableRows
,
});
};
const
changeMobile
=
()
=>
{
emit
(
"
change
"
,
{
type
:
"
mobile
"
,
data
:
state
.
tableRows
,
});
};
var
getInputData
=
()
=>
{
let
lastData
=
[];
let
tempObj
=
{};
state
.
tableRows
.
forEach
((
e
)
=>
{
tempObj
[
e
.
name
]
=
e
;
});
for
(
const
key
in
tempObj
)
{
if
(
key
&&
tempObj
[
key
].
value
)
{
lastData
.
push
(
tempObj
[
key
]);
}
}
return
lastData
;
};
const
{
tableRows
,
userLists
}
=
toRefs
(
state
);
//暴露获取数据方法
defineExpose
({
getInputData
,
initTable
,
});
</
script
>
<
style
scoped
></
style
>
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