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
35f720d7
Commit
35f720d7
authored
Jul 10, 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
14418db1
215579d7
Changes
39
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
707 additions
and
2306 deletions
+707
-2306
src/components/env.js
src/components/env.js
+6
-1
src/components/login-by-account.vue
src/components/login-by-account.vue
+2
-6
src/components/login-by-code.vue
src/components/login-by-code.vue
+2
-2
src/components/menu.js
src/components/menu.js
+0
-1372
src/components/warn-detail/env.js
src/components/warn-detail/env.js
+2
-2
src/components/warn-detail/index.vue
src/components/warn-detail/index.vue
+6
-2
src/components/warn-detail/tab.vue
src/components/warn-detail/tab.vue
+7
-3
src/main.js
src/main.js
+2
-7
src/page/login/index.vue
src/page/login/index.vue
+4
-12
src/page/main/forewarning/indicator-config/detail/index.vue
src/page/main/forewarning/indicator-config/detail/index.vue
+3
-7
src/page/main/forewarning/indicator-config/index.vue
src/page/main/forewarning/indicator-config/index.vue
+2
-1
src/page/main/forewarning/indicator-config/modules/add-form.vue
...ge/main/forewarning/indicator-config/modules/add-form.vue
+1
-1
src/page/main/forewarning/indicator-config/modules/warning-scope.vue
...in/forewarning/indicator-config/modules/warning-scope.vue
+48
-22
src/page/main/forewarning/list/detail/index.vue
src/page/main/forewarning/list/detail/index.vue
+31
-40
src/page/main/forewarning/list/index.vue
src/page/main/forewarning/list/index.vue
+23
-20
src/page/main/forewarning/list/user-input-table.vue
src/page/main/forewarning/list/user-input-table.vue
+0
-269
src/page/main/forewarning/rule-set/index.vue
src/page/main/forewarning/rule-set/index.vue
+2
-1
src/page/main/system-admin/log/system-log/index.vue
src/page/main/system-admin/log/system-log/index.vue
+18
-18
src/page/main/system-admin/log/userAccount/index.vue
src/page/main/system-admin/log/userAccount/index.vue
+12
-44
src/page/main/system-admin/log/userBehavior/detail/index.vue
src/page/main/system-admin/log/userBehavior/detail/index.vue
+1
-6
src/page/main/system-admin/log/userBehavior/index.vue
src/page/main/system-admin/log/userBehavior/index.vue
+14
-52
src/page/main/system-admin/menu/index.vue
src/page/main/system-admin/menu/index.vue
+5
-5
src/page/main/system-admin/menu/menu-form.vue
src/page/main/system-admin/menu/menu-form.vue
+16
-4
src/page/main/system-admin/preference/authorityForm.vue
src/page/main/system-admin/preference/authorityForm.vue
+19
-10
src/page/main/system-admin/preference/index.vue
src/page/main/system-admin/preference/index.vue
+33
-67
src/page/main/system-admin/preference/loginPageForm.vue
src/page/main/system-admin/preference/loginPageForm.vue
+55
-40
src/page/main/system-admin/preference/registerForm.vue
src/page/main/system-admin/preference/registerForm.vue
+85
-60
src/page/main/system-admin/preference/secureForm.vue
src/page/main/system-admin/preference/secureForm.vue
+19
-10
src/page/main/system-admin/visit-control/add/index.vue
src/page/main/system-admin/visit-control/add/index.vue
+17
-14
src/page/main/system-admin/visit-control/edit/index.vue
src/page/main/system-admin/visit-control/edit/index.vue
+19
-16
src/page/main/system-admin/visit-control/index.vue
src/page/main/system-admin/visit-control/index.vue
+14
-15
src/page/main/ticket/business-ticket-list/detail/index.vue
src/page/main/ticket/business-ticket-list/detail/index.vue
+4
-3
src/page/main/ticket/business-ticket-list/index.vue
src/page/main/ticket/business-ticket-list/index.vue
+4
-2
src/page/main/ticket/business-ticket-manage/detail/index.vue
src/page/main/ticket/business-ticket-manage/detail/index.vue
+11
-19
src/page/main/ticket/business-ticket-manage/index.vue
src/page/main/ticket/business-ticket-manage/index.vue
+2
-1
src/page/main/ticket/my-business-ticket/detail/index.vue
src/page/main/ticket/my-business-ticket/detail/index.vue
+4
-3
src/page/main/ticket/my-business-ticket/index.vue
src/page/main/ticket/my-business-ticket/index.vue
+4
-2
src/page/main/ticket/my-warn-ticket/detail/index.vue
src/page/main/ticket/my-warn-ticket/detail/index.vue
+126
-43
src/page/main/ticket/my-warn-ticket/index.vue
src/page/main/ticket/my-warn-ticket/index.vue
+84
-104
No files found.
src/components/env.js
View file @
35f720d7
...
...
@@ -38,3 +38,8 @@ export const Empty = (key, Obj) => {
let
item
=
Obj
[
key
]
return
!
item
||
item
.
label
==
'
空
'
}
export
const
dateStringToDate
=
(
str
)
=>
{
if
(
!
str
||
typeof
str
!=
'
string
'
)
return
str
||
"
-
"
;
return
str
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
}
export
const
delay
=
(
time
=
1000
)
=>
new
Promise
((
resolve
,
reject
)
=>
setTimeout
(
resolve
,
time
))
\ No newline at end of file
src/components/login-by-account.vue
View file @
35f720d7
...
...
@@ -60,7 +60,6 @@ import axios from "@/request/http.js";
import
{
Encrypt
}
from
"
@/services/secret.js
"
;
import
{
useStore
}
from
"
vuex
"
;
import
{
useRouter
}
from
"
vue-router
"
;
import
{
menuData
}
from
"
./menu
"
;
const
router
=
useRouter
();
...
...
@@ -126,13 +125,10 @@ const getUserInfo = () => {
return
axios
.
get
(
`/v1/api/user/getUserInfo`
);
};
const
getMenu
=
(
search
)
=>
{
// return axios.get(`/apaas/system/v5/menu/user/tree?search=${search}`);
return
new
Promise
((
resolve
,
reject
)
=>
{
resolve
(
menuData
);
});
return
axios
.
get
(
`/v1/api/menu/user/tree?search=
${
search
}
`
);
};
const
getUser
=
()
=>
{
Promise
.
all
([
getUserInfo
(),
getMenu
(
"
79a8f214-db78-4db7-9c28-db66276b4be2
"
)]).
then
((
res
)
=>
{
Promise
.
all
([
getUserInfo
(),
getMenu
(
"
1e99371c-187f-4966-94cf-32f116f42ce6
"
)]).
then
((
res
)
=>
{
console
.
log
(
"
res
"
,
res
);
if
(
res
[
0
].
data
.
code
==
200
&&
res
[
1
].
data
.
code
==
200
)
{
let
data
=
(
res
[
1
].
data
.
data
&&
res
[
1
].
data
.
data
[
0
].
children
)
||
[];
...
...
src/components/login-by-code.vue
View file @
35f720d7
...
...
@@ -145,10 +145,10 @@ const getUserInfo = () => {
return
axios
.
get
(
`/v1/api/user/getUserInfo`
);
};
const
getMenu
=
(
search
)
=>
{
return
axios
.
get
(
`/
apaas/system/v5
/menu/user/tree?search=
${
search
}
`
);
return
axios
.
get
(
`/
v1/api
/menu/user/tree?search=
${
search
}
`
);
};
const
getUser
=
()
=>
{
Promise
.
all
([
getUserInfo
(),
getMenu
(
"
79a8f214-db78-4db7-9c28-db66276b4be2
"
)]).
then
((
res
)
=>
{
Promise
.
all
([
getUserInfo
(),
getMenu
(
"
1e99371c-187f-4966-94cf-32f116f42ce6
"
)]).
then
((
res
)
=>
{
if
(
res
[
0
].
data
.
code
==
200
&&
res
[
1
].
data
.
code
==
200
)
{
let
data
=
(
res
[
1
].
data
.
data
&&
res
[
1
].
data
.
data
[
0
].
children
)
||
[];
store
.
commit
(
"
setUserInfo
"
,
res
[
0
].
data
.
data
);
...
...
src/components/menu.js
deleted
100644 → 0
View file @
14418db1
This diff is collapsed.
Click to expand it.
src/components/warn-detail/env.js
View file @
35f720d7
export
const
STATUS_OBJ
=
{
success
:
"
已恢复
"
,
error
:
'
未恢复
'
1
:
"
已恢复
"
,
2
:
'
未恢复
'
}
export
const
PUSH_STATUS
=
{
1
:
'
成功
'
,
...
...
src/components/warn-detail/index.vue
View file @
35f720d7
...
...
@@ -8,7 +8,7 @@
</Info>
</div>
<div
class=
"tabs"
>
<Tab
:
tabs=
"tab
s"
/>
<Tab
:
labels=
"tabLabels"
:data=
"tabData
s"
/>
</div>
</div>
</template>
...
...
@@ -27,10 +27,14 @@ const props = defineProps({
type
:
Object
,
default
:
()
=>
({}),
},
tabs
:
{
tab
Label
s
:
{
type
:
Array
,
default
:
()
=>
[],
},
tabDatas
:
{
type
:
Object
,
default
:
()
=>
({}),
},
});
</
script
>
...
...
src/components/warn-detail/tab.vue
View file @
35f720d7
<
template
>
<el-tabs
v-model=
"activeTab"
tab-position=
"top"
>
<el-tab-pane
v-for=
"item in
tab
s"
:key=
"item.prop"
:label=
"item.label"
:name=
"item.prop"
>
<el-tab-pane
v-for=
"item in
label
s"
:key=
"item.prop"
:label=
"item.label"
:name=
"item.prop"
>
<bg-table
ref=
"listtable"
:headers=
"headers[item.prop]"
:rows=
"
item.lists
"
:rows=
"
data[item.prop]
"
height=
"100%"
:isIndex=
"true"
:stripe=
"true"
>
...
...
@@ -31,10 +31,14 @@ import { STATUS_OBJ, PUSH_STATUS } from "./env.js";
import
{
METHODS
}
from
"
@/components/manual-distribution/env.js
"
;
const
activeTab
=
ref
(
"
push
"
);
const
props
=
defineProps
({
tab
s
:
{
label
s
:
{
type
:
Array
,
default
:
()
=>
[],
},
data
:
{
type
:
Object
,
default
:
()
=>
({}),
},
methodLists
:
{
type
:
Object
,
default
:
METHODS
,
...
...
src/main.js
View file @
35f720d7
...
...
@@ -33,8 +33,6 @@ import axios from "./request/http.js";
import
api
from
"
./request/api.js
"
;
import
config
from
"
../package.json
"
;
import
{
menuData
}
from
"
@/components/menu.js
"
;
const
createVue
=
createApp
(
App
);
// createVue.use(ElementPlus, { locale });
...
...
@@ -72,10 +70,7 @@ function getUser() {
//获取用户菜单信息
function
getMenu
(
search
)
{
// return axios.get(`/apaas/system/v5/menu/user/tree?search=${search}`);
return
new
Promise
((
resolve
,
reject
)
=>
{
resolve
(
menuData
);
});
return
axios
.
get
(
`/v1/api/menu/user/tree?search=
${
search
}
`
);
}
//处理菜单成为对象
...
...
@@ -89,7 +84,7 @@ function getMenuObj(menu, parentRowPath, menuObj) {
});
}
store
.
commit
(
"
setWhiteList
"
,
[
"
/login
"
,
"
/register
"
,
"
/password
"
]);
Promise
.
all
([
getUser
(),
getMenu
(
"
79a8f214-db78-4db7-9c28-db66276b4be2
"
)])
Promise
.
all
([
getUser
(),
getMenu
(
"
1e99371c-187f-4966-94cf-32f116f42ce6
"
)])
.
then
((
res
)
=>
{
if
(
res
[
0
].
data
.
code
==
200
&&
res
[
1
].
data
.
code
==
200
)
{
//已登录则记录菜单和用户信息
...
...
src/page/login/index.vue
View file @
35f720d7
...
...
@@ -3,9 +3,7 @@
class=
"login-container"
:style=
"
{
'background-image': `url(${
configOptions.backgroundUrl
? JSON.parse(configOptions.backgroundUrl)[0].url
: getImageUrl('bg.png')
configOptions.backgroundUrl ? JSON.parse(configOptions.backgroundUrl)[0].url : getImageUrl('bg.png')
})`,
}">
<el-alert
v-if=
"showValidityDays"
class=
"bg-warning"
:title=
"validityTips"
type=
"warning"
/>
...
...
@@ -15,11 +13,7 @@
</div>
-->
<div
class=
"bg-content"
>
<bg-tabs
class=
"login-tab"
v-model=
"loginTab"
style=
"width: 480px"
v-if=
"pageType === 'login'"
>
<bg-tabs
class=
"login-tab"
v-model=
"loginTab"
style=
"width: 480px"
v-if=
"pageType === 'login'"
>
<bg-tab
label=
"账号密码登录"
name=
"account"
>
<LoginByAccount
@
register=
"switchPageType('account')"
@
password=
"password"
/>
</bg-tab>
...
...
@@ -33,9 +27,7 @@
<div
class=
"bg-msg"
>
<p
v-if=
"configOptions && configOptions.patent"
>
{{
configOptions
.
patent
}}
</p>
<p
v-if=
"configOptions"
>
<span
class=
"can_click_text"
@
click=
"open(configOptions.icpUrl)"
>
{{
configOptions
.
icpFiling
}}
|
</span>
<span
class=
"can_click_text"
@
click=
"open(configOptions.icpUrl)"
>
{{
configOptions
.
icpFiling
}}
|
</span>
<span
class=
"can_click_text"
@
click=
"open(configOptions.publicSecurityUrl)"
>
{{
configOptions
.
publicSecurityFiling
}}
</span>
...
...
@@ -104,7 +96,7 @@ const getLoginPageConfig = () => {
};
//获取首选项配置
const
getSysOptions
=
()
=>
{
axios
.
get
(
`/
apaas/system/v5
/sysOptions`
).
then
((
res
)
=>
{
axios
.
get
(
`/
v1/api
/sysOptions`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
const
result
=
res
.
data
.
data
||
{};
if
(
result
.
license_dead_date
&&
result
.
license_inform_day
)
{
...
...
src/page/main/forewarning/indicator-config/detail/index.vue
View file @
35f720d7
...
...
@@ -12,14 +12,10 @@
</span>
</
template
>
<
template
#create_time
="{
valueData
}"
>
<span>
{{
valueData
.
create_time
?
valueData
.
create_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
</span>
<span>
{{
dateStringToDate
(
valueData
.
create_time
)
}}
</span>
</
template
>
<
template
#update_time
="{
valueData
}"
>
<span>
{{
valueData
.
update_time
?
valueData
.
update_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
</span>
<span>
{{
dateStringToDate
(
valueData
.
update_time
)
}}
</span>
</
template
>
</Info>
</div>
...
...
@@ -70,7 +66,7 @@ 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
"
;
import
{
GetRuleTypeOptions
,
Empty
}
from
"
@/components/env.js
"
;
import
{
GetRuleTypeOptions
,
Empty
,
dateStringToDate
}
from
"
@/components/env.js
"
;
const
route
=
useRoute
();
const
{
id
,
type_name
,
target_name
}
=
route
.
query
;
const
STATUS_OBJ
=
{
...
...
src/page/main/forewarning/indicator-config/index.vue
View file @
35f720d7
...
...
@@ -73,7 +73,7 @@
v-model=
"row.is_enabled"
></bg-switch>
</
template
>
<
template
v-slot:created_at=
"{ row }"
>
{{
row
.
created_at
?
row
.
created_at
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
created_at
)
}}
</
template
>
<
template
v-slot:action=
"{ row }"
>
<bg-table-btns2
:limit=
"3"
:tableData=
"tableRows"
>
...
...
@@ -113,6 +113,7 @@ import Slide from "./modules/slide.vue";
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
useRouter
}
from
"
vue-router
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
router
=
useRouter
();
const
node
=
ref
({});
watch
(
...
...
src/page/main/forewarning/indicator-config/modules/add-form.vue
View file @
35f720d7
<
template
>
<div
class=
"add-form"
>
<el-form
:model=
"state.form"
ref=
"form_ref"
:rules=
"state.rules"
label-width=
"1
0
0px"
>
<el-form
:model=
"state.form"
ref=
"form_ref"
:rules=
"state.rules"
label-width=
"1
2
0px"
>
<div
class=
"add-form-item"
>
<el-form-item
label=
"指标名称"
prop=
"name"
>
<el-input
v-model=
"state.form.name"
:disabled=
"isEdit"
placeholder=
"请输入指标名称"
></el-input>
...
...
src/page/main/forewarning/indicator-config/modules/warning-scope.vue
View file @
35f720d7
...
...
@@ -28,27 +28,33 @@
@focus="inputLabel($index, false)"
@input="inputLabel($index, true)">
</el-input>
</
template
>
<div
class=
"filter-first-tree-lists"
>
<div
class=
"filter-first-tree-lists"
@
mousedown.prevent=
""
>
<ul
class=
"bg-scroll"
v-show=
"dataTree($index).length > 0"
>
<li
v-for=
"
data
in dataTree($index)"
v-for=
"
(data, i)
in dataTree($index)"
:key=
"data"
:class=
"{ active: state.form.warningScopeRows[$index].indicator_scope == data.label }"
>
<div
class=
"first-label-main"
@
click=
"chooseTreeFirst($index, data)"
>
<div
class=
"tree-label"
>
{{ data.label }}
</div>
<div
class=
"first-label-main"
@
click=
"chooseTreeFirst($index, data
, i
)"
>
<div
class=
"tree-label"
v-html=
"data.label_html"
>
</div>
<div
class=
"tree-icon"
>
<bg-icon
style=
"font-size: 1
6
px; color: #404a62"
style=
"font-size: 1
5
px; color: #404a62"
class=
"is-loading"
:class=
"{ 'loading-show': data.isLoading }"
icon=
"#bg-ic-loading"
></bg-icon>
<bg-icon
style=
"font-size: 1
4
px; color: #404a62"
icon=
"#bg-ic-arrow-right"
></bg-icon>
<bg-icon
style=
"font-size: 1
3
px; color: #404a62"
icon=
"#bg-ic-arrow-right"
></bg-icon>
</div>
</div>
</li>
</ul>
<ul
v-show=
"dataTree($index).length == 0"
>
<li
class=
"no-data"
>
未查询到相关指标范围数据
</li>
<li
class=
"no-data"
>
{{
state.form.warningScopeRows[$index].input_indicator_tag
? "未查询到相关指标范围数据"
: "请输入查询"
}}
</li>
</ul>
<ul
class=
"bg-scroll"
v-show=
"state.form.warningScopeRows[$index].lastOptions?.length > 0"
>
<li
...
...
@@ -59,6 +65,13 @@
{{ child }}
</li>
</ul>
<ul
v-show=
"
state.form.warningScopeRows[$index].indicator_scope &&
state.form.warningScopeRows[$index].lastOptions?.length == 0
"
>
<li
class=
"no-data"
>
未查询到相关指标标签
</li>
</ul>
</div>
</el-popover>
</div>
...
...
@@ -99,6 +112,7 @@
import
{
reactive
,
watch
,
nextTick
,
computed
,
ref
,
onMounted
}
from
"
vue
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
delay
}
from
"
@/components/env
"
;
const
props
=
defineProps
({
indicator_expression
:
{
...
...
@@ -162,13 +176,19 @@ const dataTree = computed(() => {
return
(
index
)
=>
{
const
{
firstOptions
,
input_indicator_tag
,
oldQuery
}
=
state
.
form
.
warningScopeRows
[
index
];
let
query
=
isInput
.
value
?
input_indicator_tag
:
oldQuery
;
if
(
!
query
)
return
firstOptions
;
// if (!query) return firstOptions;
if
(
!
query
)
return
[];
let
arr
=
firstOptions
.
filter
((
e
)
=>
e
.
label
.
includes
(
query
));
if
(
arr
==
""
)
{
if
(
arr
==
[]
)
{
state
.
form
.
warningScopeRows
[
index
].
lastOptions
=
[];
state
.
form
.
warningScopeRows
[
index
].
indicator_scope
=
""
;
}
return
arr
;
return
arr
.
map
((
e
)
=>
{
return
{
...
e
,
label_html
:
e
.
label
.
replaceAll
(
input_indicator_tag
,
`<span class='mate-str'>
${
input_indicator_tag
}
</span>`
),
};
});
};
});
// 监听父组件传过来的指标表达式
...
...
@@ -230,9 +250,10 @@ watch(
// 选择第一级,获取第二级数据
const
chooseTreeFirst
=
(
index
,
data
)
=>
{
inputRef
.
value
[
index
].
focus
();
let
i
=
state
.
form
.
warningScopeRows
[
index
].
firstOptions
.
findIndex
((
e
)
=>
e
.
label
==
data
.
label
);
state
.
form
.
warningScopeRows
[
index
].
firstOptions
[
i
].
isLoading
=
true
;
state
.
form
.
warningScopeRows
[
activeIndex
.
value
].
indicator_tag
=
""
;
state
.
form
.
warningScopeRows
[
index
].
indicator_scope
=
data
.
label
;
data
.
isLoading
=
true
;
state
.
form
.
warningScopeRows
[
index
].
lastOptions
=
[];
const
params
=
{
label_name
:
data
.
label
,
...
...
@@ -247,7 +268,7 @@ const chooseTreeFirst = (index, data) => {
}
})
.
finally
(()
=>
{
data
.
isLoading
=
false
;
state
.
form
.
warningScopeRows
[
index
].
firstOptions
[
i
]
.
isLoading
=
false
;
});
};
// 获取第一级数据
...
...
@@ -268,34 +289,35 @@ const getDataTreeLevelFirst = () => {
};
let
timer
=
null
;
// 输入模糊查询数据
const
inputLabel
=
(
index
,
type
)
=>
{
state
.
form
.
warningScopeRows
[
index
].
visible
=
true
;
const
inputLabel
=
async
(
index
,
type
)
=>
{
activeIndex
.
value
=
index
;
// 用户输入节流
timer
&&
clearTimeout
(
timer
);
timer
=
setTimeout
(()
=>
{
state
.
form
.
warningScopeRows
[
index
].
visible
=
true
;
isInput
.
value
=
type
;
if
(
state
.
form
.
warningScopeRows
[
index
].
input_indicator_tag
==
""
)
{
state
.
form
.
warningScopeRows
[
index
].
lastOptions
=
[];
}
// 用户输入节流
timer
&&
clearTimeout
(
timer
);
timer
=
setTimeout
(()
=>
{
if
(
type
)
{
state
.
form
.
warningScopeRows
[
index
].
oldQuery
=
state
.
form
.
warningScopeRows
[
index
].
input_indicator_tag
;
state
.
form
.
warningScopeRows
[
index
].
indicator_scope
=
""
;
state
.
form
.
warningScopeRows
[
index
].
indicator_tag
=
""
;
state
.
form
.
warningScopeRows
[
index
].
lastOptions
=
[];
}
},
2
00
);
},
5
00
);
};
// 失去焦点是隐藏popper
const
blurInput
=
(
index
)
=>
{
state
.
form
.
warningScopeRows
[
index
].
visible
=
false
;
};
// 选择范围中的属性
const
chooseTreeLast
=
(
last
,
index
,
type
)
=>
{
const
chooseTreeLast
=
async
(
last
,
index
,
type
)
=>
{
isInput
.
value
=
type
;
state
.
form
.
warningScopeRows
[
activeIndex
.
value
].
input_indicator_tag
=
last
;
state
.
form
.
warningScopeRows
[
activeIndex
.
value
].
indicator_tag
=
last
;
await
delay
(
500
);
blurInput
(
index
);
};
// form表单元素
const
form_ref
=
ref
(
null
);
...
...
@@ -347,6 +369,7 @@ defineExpose({
.filter-first-tree-lists
{
height
:
240px
;
display
:
flex
;
min-width
:
100%
;
ul
{
min-width
:
180px
;
height
:
100%
;
...
...
@@ -356,7 +379,7 @@ defineExpose({
li
{
padding-left
:
20px
;
line-height
:
34px
;
max-width
:
400px
;
//
max-width: 400px;
word-break
:
break-all
;
transition
:
all
300ms
;
&
:hover
{
...
...
@@ -415,4 +438,7 @@ defineExpose({
}
}
}
.mate-str
{
font-weight
:
bold
;
}
</
style
>
src/page/main/forewarning/list/detail/index.vue
View file @
35f720d7
...
...
@@ -4,7 +4,7 @@
<bg-breadcrumb
/>
</div>
<div
class=
"content bg-scroll"
>
<warn-detail
:label-data=
"labelData"
:value-data=
"info"
:tab
s=
"tab
s"
>
<warn-detail
:label-data=
"labelData"
:value-data=
"info"
:tab
Labels=
"tabLabels"
:tabDatas=
"tabData
s"
>
<template
#status
="
{ item, valueData }">
<span
class=
"status-body"
>
<span
class=
"status"
:class=
"`status-$
{valueData.status}`">
</span>
...
...
@@ -23,6 +23,7 @@ import { useRoute } from "vue-router";
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
ref
,
onBeforeMount
}
from
"
vue
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
route
=
useRoute
();
const
{
id
}
=
route
.
query
;
const
ruleTypeOptions
=
ref
({});
...
...
@@ -80,31 +81,21 @@ const labelData = [
],
];
const
info
=
ref
({});
const
tab
s
=
ref
(
[
const
tab
Labels
=
[
{
label
:
"
推送记录
"
,
prop
:
"
push
"
,
lists
:
[],
},
{
label
:
"
处置记录
"
,
prop
:
"
dispose
"
,
lists
:
[
{
status
:
"
error
"
,
feedback
:
"
暂时无法处理,需要时间
"
,
feedback_time
:
"
2022-07-29 10:23:59
"
,
feedback_person
:
"
张三
"
,
},
{
status
:
"
success
"
,
feedback
:
"
暂时无法处理,需要时间
"
,
feedback_time
:
"
2022-07-29 10:23:59
"
,
feedback_person
:
"
张三
"
,
},
],
},
]);
];
const
tabDatas
=
ref
({});
const
pushType
=
{
1
:
"
自动推送
"
,
2
:
"
手动推送
"
,
};
const
getInfo
=
()
=>
{
const
params
=
{
id
,
...
...
@@ -122,7 +113,28 @@ const getInfo = () => {
ruleTypeOptions
.
value
[
data
.
alert_rule_type
]?.
unit
||
""
}
-
$
{
data
.
alert_condition
.
thresholds_max
}
$
{
ruleTypeOptions
.
value
[
data
.
alert_rule_type
]?.
unit
||
""
}
`,
current_alarm_value: data.current_value + (ruleTypeOptions.value[data.alert_rule_type]?.unit || ""),
warning_time: data.alert_time?.split("+")[0].replace("T", " ").replace("Z", " ") || "-",
warning_time: dateStringToDate(data.alert_time),
};
tabDatas.value = {
push:
data.push_records?.map((e) => {
return {
method: e.notify_method,
person: e.system_account,
push_time: dateStringToDate(e.push_time),
push_type: pushType[e.push_type],
status: e.status,
};
}) || [],
dispose:
data.disposed_list?.map((e) => {
return {
status: e.is_disposed,
feedback: e.disposal_content,
feedback_time: dateStringToDate(e.disposal_time),
feedback_person: e.disposal_user,
};
}) || [],
};
}
});
...
...
@@ -146,29 +158,8 @@ const GetRuleTypeOptions = () => {
}
});
};
const pushType = {
1: "自动推送",
2: "手动推送",
};
const getPushLog = () => {
axios.get("/v1/api/push_record/list", { params: { alert_list_id: id } }).then((res) => {
if (res.data.code == 200) {
tabs.value[0].lists =
res.data.data.list?.map((e) => {
return {
method: e.notify_method,
person: e.system_account,
push_time: e.push_time?.split("+")[0].replace("T", " ").replace("Z", " ") || "-",
push_type: pushType[e.push_type],
status: e.status,
};
}) || [];
}
});
};
onBeforeMount(() => {
GetRuleTypeOptions();
getPushLog();
});
</
script
>
...
...
src/page/main/forewarning/list/index.vue
View file @
35f720d7
...
...
@@ -2,7 +2,7 @@
<div
class=
"detail_container"
>
<bg-breadcrumb></bg-breadcrumb>
<div
class=
"main_container"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.
search
"
placeholder=
"请输入预警点/分类/指标"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.
keyword
"
placeholder=
"请输入预警点/分类/指标"
>
<template
v-slot:left_action
>
<div
class=
"apaas_button"
>
<el-button
type=
"primary"
@
click=
"batchPush"
>
...
...
@@ -43,10 +43,10 @@
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
预警时间
</span>
<el-date-picker
style=
"width:
3
00px"
style=
"width:
4
00px"
v-model=
"filter.time"
type=
"daterange"
value-format=
"
yyyy-MM-DD
"
type=
"date
time
range"
value-format=
"
YYYY-MM-DD HH:mm:ss
"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
/>
...
...
@@ -86,17 +86,17 @@
{{
row
.
alert_condition
.
thresholds_max
}}{{
ruleTypeOptions
[
row
.
alert_rule_type
]?.
unit
||
""
}}
</
template
>
<
template
v-slot:alert_time=
"{ row }"
>
{{
row
.
alert_time
?
row
.
alert_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
alert_time
)
}}
</
template
>
<
template
v-slot:last_push_time=
"{ row }"
>
{{
row
.
last_push_time
?
row
.
last_push_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
last_push_time
)
}}
</
template
>
<
template
#status
="{
row
}"
>
<span
:class=
"`circle status-$
{row.status}`">
</span>
{{
statusOptions
[
row
.
status
]
}}
</
template
>
<
template
v-slot:action=
"{ row }"
>
<bg-table-btns2
:
limit
=
"3"
:tableData=
"tableRows"
>
<bg-table-btns2
:
page_size
=
"3"
:tableData=
"tableRows"
>
<bg-table-btn
:disabled=
"row.status != 2"
@
click=
"pushWarning(row)"
>
推送提醒
</bg-table-btn>
<bg-table-btn
:disabled=
"row.status != 2"
@
click=
"closeWarning(row)"
>
关闭预警
</bg-table-btn>
</bg-table-btns2>
...
...
@@ -146,7 +146,7 @@
v-model=
"closeFormData.close_notes"
type=
"textarea"
:autosize=
"{ minRows: 2 }"
show-word-
limit
show-word-
page_size
maxlength=
"30"
resize=
"vertical"
placeholder=
"请输入内容"
></el-input>
...
...
@@ -174,10 +174,9 @@ import { ElMessage } from "element-plus";
import
axios
from
"
@/request/http.js
"
;
import
{
Search
}
from
"
@element-plus/icons-vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
userInputTable
from
"
./user-input-table.vue
"
;
import
{
useRouter
}
from
"
vue-router
"
;
import
ManualDistributionForm
from
"
@/components/manual-distribution/form.vue
"
;
import
{
GetRuleTypeOptions
}
from
"
@/components/env.js
"
;
import
{
GetRuleTypeOptions
,
dateStringToDate
}
from
"
@/components/env
"
;
const
router
=
useRouter
();
...
...
@@ -264,14 +263,12 @@ const state = reactive({
selected
:
[],
//选择数据
tableTotal
:
0
,
// 表格数据条数
filter
:
{
warning_type
:
""
,
// 预警类型
warning_target
:
""
,
// 预警指标
risk_level
:
""
,
// 风险等级
status
:
""
,
// 状态
time
:
[],
search
:
""
,
keyword
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
},
// 表格筛选项
actionRow
:
null
,
// 当前操作的数据
closeWarningDialog
:
false
,
// 删除弹窗
...
...
@@ -314,7 +311,7 @@ const goDetail = (row) => {
};
// 查看详情
const
changeSearch
=
(
val
)
=>
{
state
.
filter
.
search
=
val
;
state
.
filter
.
keyword
=
val
;
changePage
(
1
);
};
// 表格关键字筛选
...
...
@@ -328,10 +325,10 @@ const filterClear = () => {
warning_target
:
""
,
// 预警指标
risk_level
:
""
,
// 风险等级
status
:
""
,
// 状态
time
:
""
,
search
:
""
,
time
:
[]
,
keyword
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
};
changePage
(
1
);
};
// 重置筛选项
...
...
@@ -339,7 +336,13 @@ const selectable = (row, index) => {
return
row
.
status
===
2
;
};
const
getTableRows
=
()
=>
{
let
params
=
{
...
state
.
filter
};
let
[
start_time
=
""
,
end_time
=
""
]
=
state
.
filter
.
time
||
[];
let
params
=
{
...
state
.
filter
,
start_time
,
end_time
,
};
Reflect
.
deleteProperty
(
params
,
"
time
"
);
axios
.
get
(
"
/v1/api/alert_list/list
"
,
{
params
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
let
{
list
,
total_count
}
=
res
.
data
.
data
;
...
...
@@ -357,7 +360,7 @@ const changePage = (page) => {
};
// 改变页码
const
changeSize
=
(
size
)
=>
{
state
.
filter
.
limit
=
size
;
state
.
filter
.
page_size
=
size
;
changePage
(
1
);
};
// 改变每页条数
...
...
src/page/main/forewarning/list/user-input-table.vue
deleted
100644 → 0
View file @
14418db1
<
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"
: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
>
src/page/main/forewarning/rule-set/index.vue
View file @
35f720d7
...
...
@@ -92,7 +92,7 @@
v-model=
"row.is_enabled"
></bg-switch>
</
template
>
<
template
v-slot:created_at=
"{ row }"
>
{{
row
.
created_at
?
row
.
created_at
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
created_at
)
}}
</
template
>
<
template
v-slot:action=
"{ row }"
>
<bg-table-btns2
:limit=
"3"
:tableData=
"tableRows"
>
...
...
@@ -131,6 +131,7 @@ import axios from "@/request/http.js";
import
{
Search
}
from
"
@element-plus/icons-vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
{
useRouter
}
from
"
vue-router
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
METHODS
=
{
dingtalk
:
"
钉钉
"
,
sms
:
"
短信
"
,
...
...
src/page/main/system-admin/log/system-log/index.vue
View file @
35f720d7
...
...
@@ -8,7 +8,7 @@
style=
"width: 100%"
type=
"date"
value-format=
"YYYY-MM-DD"
v-model=
"
dat
e"
v-model=
"
logTim
e"
placeholder=
"请选择日期"
/>
<div
class=
"type_station bg-scroll"
>
...
...
@@ -18,8 +18,8 @@
@click="nodeClick(item)"
v-for="(item, index) in containerList"
:key="index"
:title="item
.name
">
{{
item
.
name
}}
:title="item">
{{
item
}}
</div>
</div>
</div>
...
...
@@ -28,10 +28,10 @@
<div
class=
"form-filter"
>
<el-form
:model=
"filterForm"
inline
>
<el-form-item
label=
"级别"
>
<el-select
placeholder=
"全部"
style=
"width: 160px"
v-model=
"filterForm.level"
>
<el-option
label=
"
info"
value=
"info
"
>
</el-option>
<el-option
label=
"
warning"
value=
"warning
"
>
</el-option>
<el-option
label=
"
error"
value=
"error
"
>
</el-option>
<el-select
placeholder=
"全部"
style=
"width: 160px"
v-model=
"filterForm.l
ogL
evel"
>
<el-option
label=
"
INFO"
value=
"INFO
"
>
</el-option>
<el-option
label=
"
WARNING"
value=
"WARNING
"
>
</el-option>
<el-option
label=
"
ERROR"
value=
"ERROR
"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"关键字"
>
...
...
@@ -63,37 +63,37 @@ import { ElMessage } from "element-plus";
import
axios
from
"
@/request/http.js
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
const
state
=
reactive
({
dat
e
:
""
,
logTim
e
:
""
,
containerList
:
[],
// 容器数据
selectedNodeContainer
:
""
,
filterForm
:
{
level
:
""
,
l
ogL
evel
:
""
,
search
:
""
,
},
logList
:
[],
});
watch
(
()
=>
state
.
dat
e
,
()
=>
state
.
logTim
e
,
(
val
)
=>
{
state
.
selectedNodeContainer
=
""
;
getContainerList
();
}
);
const
nodeClick
=
(
item
)
=>
{
state
.
selectedNodeContainer
=
item
.
value
;
state
.
selectedNodeContainer
=
item
;
reset
();
};
// 获取容器列表
const
getContainerList
=
()
=>
{
let
params
=
{
date
:
state
.
dat
e
,
logTime
:
state
.
logTim
e
,
};
axios
.
get
(
"
/
apaas/system/v5/log/system/tree
"
,
{
params
})
.
get
(
"
/
v1/api/log/system/list
"
,
{
params
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
containerList
=
res
.
data
.
data
||
[];
state
.
selectedNodeContainer
=
state
.
containerList
.
length
?
state
.
containerList
[
0
]
.
value
:
""
;
state
.
selectedNodeContainer
=
state
.
containerList
.
length
?
state
.
containerList
[
0
]
:
""
;
state
.
selectedNodeContainer
?
reset
()
:
(
state
.
logList
=
[]);
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
...
...
@@ -106,11 +106,11 @@ const getContainerList = () => {
//查询
const
search
=
()
=>
{
let
params
=
{
index
:
state
.
selectedNodeContainer
,
name
:
state
.
selectedNodeContainer
,
...
state
.
filterForm
,
};
axios
.
get
(
"
/
apaas/system/v5
/log/system/log
"
,
{
params
})
.
get
(
"
/
v1/api
/log/system/log
"
,
{
params
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
logList
=
(
res
.
data
.
data
||
[]).
map
((
item
)
=>
JSON
.
stringify
(
item
));
...
...
@@ -126,7 +126,7 @@ const search = () => {
//重置
const
reset
=
()
=>
{
state
.
filterForm
=
{
level
:
""
,
l
ogL
evel
:
""
,
search
:
""
,
};
search
();
...
...
@@ -135,7 +135,7 @@ onBeforeMount(() => {
getContainerList
();
});
const
{
dat
e
,
containerList
,
selectedNodeContainer
,
filterForm
,
logList
}
=
toRefs
(
state
);
const
{
logTim
e
,
containerList
,
selectedNodeContainer
,
filterForm
,
logList
}
=
toRefs
(
state
);
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
src/page/main/system-admin/log/userAccount/index.vue
View file @
35f720d7
...
...
@@ -2,16 +2,11 @@
<div
class=
"page_container"
>
<bg-breadcrumb></bg-breadcrumb>
<div
class=
"main_container"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<template
v-slot:left_action
>
<div
class=
"apaas_button"
>
<el-button
type=
"primary"
@
click=
"exportFile"
>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
导出
</el-button>
<el-popconfirm
...
...
@@ -36,17 +31,6 @@
<
template
v-slot:filter_group
>
<div
class=
"left-filter filter_list"
>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
用户类型
</span>
<el-select
v-model=
"filter.is_admin"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in userTypeList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
上次访问时间
</span>
<el-date-picker
...
...
@@ -61,22 +45,14 @@
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
活跃度
</span>
<el-select
v-model=
"filter.active"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in activeOptions"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
<el-option
v-for=
"(item, index) in activeOptions"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
密码强度
</span>
<el-select
v-model=
"filter.pwd_level"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in pwdLevelList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
<el-option
v-for=
"(item, index) in pwdLevelList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
...
...
@@ -137,7 +113,7 @@
</bg-table>
<bg-pagination
:page=
"filter.page"
:size=
"filter.
limit
"
:size=
"filter.
page_size
"
:total=
"filter.total"
@
change-page=
"changePage"
@
change-size=
"changeSize"
>
...
...
@@ -168,12 +144,11 @@ const accountTable = ref(null);
const
state
=
reactive
({
filter
:
{
search
:
""
,
is_admin
:
""
,
time
:
[],
active
:
0
,
pwd_level
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
activeOptions
:
[
...
...
@@ -200,11 +175,6 @@ const state = reactive({
prop
:
"
contact_phone
"
,
// minWidth: 360,
},
{
label
:
"
用户类型
"
,
prop
:
"
is_admin
"
,
// width: 200,
},
{
label
:
"
所属组织
"
,
prop
:
"
name
"
,
...
...
@@ -252,14 +222,13 @@ const exportFile = () => {
params
.
end_at
=
params
.
time
?
params
.
time
[
1
]
||
""
:
""
;
delete
params
.
time
;
axios
.
get
(
`/
apaas/system/v5
/log/userAccountAudit/list/export`
,
{
.
get
(
`/
v1/api
/log/userAccountAudit/list/export`
,
{
params
,
responseType
:
"
blob
"
,
})
.
then
((
res
)
=>
{
if
(
res
.
status
===
200
)
{
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
downloadBlob
(
res
.
data
,
type
);
}
else
{
ElMessage
.
error
(
res
.
statusText
);
...
...
@@ -273,7 +242,7 @@ const forceModifyPwd = () => {
const
selectedRows
=
Object
.
values
(
selectedObj
);
if
(
!
selectedRows
.
length
)
return
ElMessage
.
warning
(
"
请先选择修改项
"
);
const
ids
=
selectedRows
.
map
((
item
)
=>
item
.
id
);
axios
.
post
(
"
/
apaas/system/v5/user/resetp
wd
"
,
{
ids
}).
then
((
res
)
=>
{
axios
.
post
(
"
/
v1/api/user/resetP
wd
"
,
{
ids
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
===
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
cleanSelected
();
...
...
@@ -301,7 +270,7 @@ const getTableRows = () => {
params
.
end_at
=
params
.
time
?
params
.
time
[
1
]
||
""
:
""
;
delete
params
.
time
;
axios
.
get
(
`/
apaas/system/v5
/log/userAccountAudit/list`
,
{
.
get
(
`/
v1/api
/log/userAccountAudit/list`
,
{
params
,
})
.
then
((
res
)
=>
{
...
...
@@ -317,18 +286,17 @@ const filterAction = () => {
changePage
(
1
);
};
const
changeSize
=
(
size
)
=>
{
state
.
filter
.
limit
=
size
;
state
.
filter
.
page_size
=
size
;
changePage
(
1
);
};
const
filterClear
=
()
=>
{
state
.
filter
=
{
search
:
""
,
is_admin
:
""
,
time
:
[],
active
:
0
,
pwd_level
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
};
changePage
(
1
);
...
...
src/page/main/system-admin/log/userBehavior/detail/index.vue
View file @
35f720d7
...
...
@@ -45,11 +45,6 @@ const instanceData = reactive({
label
:
"
手机号
"
,
value
:
""
,
},
{
key
:
"
user_type
"
,
label
:
"
用户类型
"
,
value
:
""
,
},
{
key
:
"
org_name
"
,
label
:
"
所属组织
"
,
...
...
@@ -121,7 +116,7 @@ onBeforeMount(() => {
});
const
getDetailInfo
=
()
=>
{
axios
.
get
(
`/
apaas/system/v5
/log/userBehavior/detail/
${
route
.
query
.
id
}
`
)
.
get
(
`/
v1/api
/log/userBehavior/detail/
${
route
.
query
.
id
}
`
)
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
const
result
=
res
.
data
.
data
||
{};
...
...
src/page/main/system-admin/log/userBehavior/index.vue
View file @
35f720d7
...
...
@@ -2,16 +2,11 @@
<div
class=
"page_container"
>
<bg-breadcrumb></bg-breadcrumb>
<div
class=
"main_container"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.search"
placeholder=
"请输入账号、手机号和所属组织"
>
<template
v-slot:left_action
>
<div
class=
"apaas_button"
>
<el-button
type=
"primary"
@
click=
"exportFile"
>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
<bg-icon
style=
"font-size: 12px; color: #fff; margin-right: 8px"
icon=
"#bg-ic-file-send"
></bg-icon>
导出
</el-button>
<el-button
@
click=
"deleteBatch"
>
批量删除
</el-button>
...
...
@@ -25,17 +20,6 @@
<
template
v-slot:filter_group
>
<div
class=
"left-filter filter_list"
>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
用户类型
</span>
<el-select
v-model=
"filter.is_admin"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in userTypeList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
操作时间
</span>
<el-date-picker
...
...
@@ -61,11 +45,7 @@
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
请求方式
</span>
<el-select
v-model=
"filter.req_method"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in reqMethodList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
<el-option
v-for=
"(item, index) in reqMethodList"
:key=
"index"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
...
...
@@ -88,16 +68,7 @@
</
template
>
</bg-filter-group>
<div
class=
"table_container"
>
<bg-table
ref=
"userTable"
:headers=
"headers"
:rows=
"tableRows"
:stripe=
"true"
select
@
selectAc=
"selectChange"
>
<
template
v-slot:is_admin=
"{ row }"
>
<span>
{{
userTypeConfig
[
row
.
is_admin
]
}}
</span>
</
template
>
<bg-table
ref=
"userTable"
:headers=
"headers"
:rows=
"tableRows"
:stripe=
"true"
select
@
selectAc=
"selectChange"
>
<
template
v-slot:operate_type=
"{ row }"
>
<span>
{{
filterOperateType
(
row
.
operate_type
)
}}
</span>
</
template
>
...
...
@@ -118,7 +89,7 @@
</bg-table>
<bg-pagination
:page=
"filter.page"
:size=
"filter.
limit
"
:size=
"filter.
page_size
"
:total=
"filter.total"
@
change-page=
"changePage"
@
change-size=
"changeSize"
>
...
...
@@ -163,13 +134,12 @@ const userTypeList = computed(() => {
const
state
=
reactive
({
filter
:
{
search
:
""
,
is_admin
:
""
,
time
:
[],
operate_type
:
""
,
req_method
:
""
,
operate_status
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
operateStatusList
:
[
...
...
@@ -184,11 +154,6 @@ const state = reactive({
prop
:
"
system_account
"
,
// minWidth: 280,
},
{
label
:
"
用户类型
"
,
prop
:
"
is_admin
"
,
// minWidth: 360,
},
{
label
:
"
系统模块
"
,
prop
:
"
system_module
"
,
...
...
@@ -259,8 +224,7 @@ const state = reactive({
deleteTips
:
""
,
});
const
{
filter
,
operateStatusList
,
headers
,
selectedNum
,
tableRows
,
deleteDialog
,
deleteTips
}
=
toRefs
(
state
);
const
{
filter
,
operateStatusList
,
headers
,
selectedNum
,
tableRows
,
deleteDialog
,
deleteTips
}
=
toRefs
(
state
);
//导出
const
exportFile
=
()
=>
{
let
params
=
{
...
state
.
filter
};
...
...
@@ -269,14 +233,13 @@ const exportFile = () => {
delete
params
.
time
;
delete
params
.
total
;
axios
.
get
(
`/
apaas/system/v5
/log/userBehavior/list/export`
,
{
.
get
(
`/
v1/api
/log/userBehavior/list/export`
,
{
params
,
responseType
:
"
blob
"
,
})
.
then
((
res
)
=>
{
if
(
res
.
status
===
200
)
{
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
const
type
=
"
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
"
;
downloadBlob
(
res
.
data
,
type
);
}
else
{
ElMessage
.
error
(
res
.
statusText
);
...
...
@@ -316,7 +279,7 @@ const deleteCurrent = (row) => {
const
confirmDelete
=
()
=>
{
const
ids
=
state
.
selectedRows
.
map
((
item
)
=>
item
.
id
);
axios
.
delete
(
`/
apaas/system/v5
/log/userBehavior/delete?ids=
${
ids
.
join
(
"
,
"
)}
`
)
.
delete
(
`/
v1/api
/log/userBehavior/delete?ids=
${
ids
.
join
(
"
,
"
)}
`
)
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
===
200
)
{
ElMessage
.
success
(
res
.
data
.
data
);
...
...
@@ -348,7 +311,7 @@ const getTableRows = () => {
params
.
end_at
=
params
.
time
?
params
.
time
[
1
]
||
""
:
""
;
delete
params
.
time
;
axios
.
get
(
`/
apaas/system/v5
/log/userBehavior/list`
,
{
.
get
(
`/
v1/api
/log/userBehavior/list`
,
{
params
,
})
.
then
((
res
)
=>
{
...
...
@@ -364,19 +327,18 @@ const filterAction = () => {
changePage
(
1
);
};
const
changeSize
=
(
size
)
=>
{
state
.
filter
.
limit
=
size
;
state
.
filter
.
page_size
=
size
;
changePage
(
1
);
};
const
filterClear
=
()
=>
{
state
.
filter
=
{
search
:
""
,
is_admin
:
""
,
time
:
[],
operate_type
:
""
,
req_method
:
""
,
operate_status
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
};
changePage
(
1
);
...
...
@@ -384,7 +346,7 @@ const filterClear = () => {
const
goDetail
=
(
row
)
=>
{
router
.
push
({
path
:
"
/log/userBehavior/detail
"
,
path
:
"
/
system-admin/
log/userBehavior/detail
"
,
query
:
{
id
:
row
.
id
,
},
...
...
src/page/main/system-admin/menu/index.vue
View file @
35f720d7
...
...
@@ -155,7 +155,7 @@ watch(
);
// 树形搜索值
const
getMenuTree
=
(
type
,
id
)
=>
{
axios
.
get
(
`/
apaas/system/v5
/menu/tree`
).
then
((
res
)
=>
{
axios
.
get
(
`/
v1/api
/menu/tree`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
data
=
res
.
data
.
data
||
[];
nextTick
().
then
(()
=>
{
...
...
@@ -409,7 +409,7 @@ const fileAction = (val, data, parent, disabled = false) => {
const
deleteData
=
()
=>
{
if
(
state
.
selectData
.
id
)
{
axios
.
delete
(
`/
apaas/system/v5
/menu/
${
state
.
selectData
.
id
}
`
).
then
((
res
)
=>
{
axios
.
delete
(
`/
v1/api
/menu/
${
state
.
selectData
.
id
}
`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
state
.
selectData
=
null
;
...
...
@@ -446,7 +446,7 @@ const changeSort = (data, nextObj) => {
sort
:
data
.
sort
,
},
];
axios
.
put
(
`/
apaas/system/v5
/menu/sort`
,
params
).
then
((
res
)
=>
{
axios
.
put
(
`/
v1/api
/menu/sort`
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
getMenuTree
();
...
...
@@ -477,7 +477,7 @@ const saveMenu = (el, type) => {
};
if
(
state
.
selectData
.
id
)
{
// 编辑
axios
.
put
(
`/
apaas/system/v5
/menu/
${
state
.
selectData
.
id
}
`
,
params
).
then
((
res
)
=>
{
axios
.
put
(
`/
v1/api
/menu/
${
state
.
selectData
.
id
}
`
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
getMenuTree
();
...
...
@@ -500,7 +500,7 @@ const saveMenu = (el, type) => {
// 新增下级
params
.
p_menu_id
=
state
.
selectParentData
.
menu_id
;
}
axios
.
post
(
`/
apaas/system/v5
/menu/add`
,
params
).
then
((
res
)
=>
{
axios
.
post
(
`/
v1/api
/menu/add`
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
state
.
selectData
=
null
;
...
...
src/page/main/system-admin/menu/menu-form.vue
View file @
35f720d7
...
...
@@ -19,7 +19,7 @@
</el-form-item>
<el-form-item
label=
"分组"
prop=
"dict_group_id"
v-if=
"!topLevel"
>
<el-select
v-model=
"menuForm.dict_group_id"
:disabled=
"groupFlag"
placeholder=
"请选择分组"
>
<el-option
v-for=
"item in groupList"
:key=
"item.
dict_id"
:label=
"item.dict_name"
:value=
"item.dict_
id"
/>
<el-option
v-for=
"item in groupList"
:key=
"item.
id"
:label=
"item.name"
:value=
"item.
id"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"跳转方式"
prop=
"new_window"
v-if=
"menuForm.menu_type != 0"
>
...
...
@@ -33,7 +33,7 @@
</el-form-item>
<el-form-item
label=
"系统类型"
prop=
"system_type"
v-if=
"topLevel"
>
<el-select
v-model=
"menuForm.system_type"
placeholder=
"请选择系统类型"
>
<el-option
v-for=
"item in systemGroupList"
:key=
"item.
dict_id"
:label=
"item.dict_name"
:value=
"item.dict_
id"
/>
<el-option
v-for=
"item in systemGroupList"
:key=
"item.
id"
:label=
"item.name"
:value=
"item.
id"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"是否启用"
prop=
"state"
>
...
...
@@ -140,7 +140,13 @@ const state = reactive({
const
getGroupList
=
()
=>
{
axios
.
get
(
`/apaas/system/v5/menu/group/dict`
)
.
get
(
`/v1/api/dict`
,
{
params
:
{
class
:
5
,
page
:
1
,
page_size
:
100
,
},
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
groupList
=
res
.
data
.
data
||
[];
...
...
@@ -155,7 +161,13 @@ const getGroupList = () => {
const
getSystemGroup
=
()
=>
{
axios
.
get
(
`/apaas/system/v5/menu/system/dict`
)
.
get
(
`/v1/api/dict`
,
{
params
:
{
class
:
4
,
page
:
1
,
page_size
:
100
,
},
})
.
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
systemGroupList
=
res
.
data
.
data
||
[];
...
...
src/page/main/system-admin/preference/authorityForm.vue
View file @
35f720d7
...
...
@@ -41,13 +41,15 @@ import { reactive, toRefs, ref } from "vue";
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
const
props
=
defineProps
({
const
state
=
reactive
({
authorizeFormData
:
{
type
:
Object
,
default
:
()
=>
({}),
id
:
""
,
system_version
:
""
,
system_user
:
""
,
license
:
""
,
license_dead_date
:
""
,
license_inform_day
:
""
,
},
});
const
state
=
reactive
({
authorizeRules
:
{
license_inform_day
:
[{
type
:
"
number
"
,
min
:
0
,
max
:
90
,
message
:
"
请输入0~90的整数
"
,
trigger
:
"
blur
"
}],
},
...
...
@@ -57,7 +59,7 @@ const authorizeFormRef = ref(null);
const
getLicenseInfo
=
()
=>
{
if
(
!
state
.
authorizeFormData
.
license
)
return
;
axios
.
post
(
"
/
apaas/system/v5
/sysOptions/getLicenseInfo
"
,
{
.
post
(
"
/
v1/api
/sysOptions/getLicenseInfo
"
,
{
license
:
state
.
authorizeFormData
.
license
,
})
.
then
((
res
)
=>
{
...
...
@@ -70,14 +72,20 @@ const getLicenseInfo = () => {
}
});
};
//设置表单数据
const
setFormData
=
(
data
)
=>
{
Object
.
keys
(
state
.
authorizeFormData
).
forEach
((
item
)
=>
{
state
.
authorizeFormData
[
item
]
=
data
[
item
];
});
};
//保存
const
save
=
()
=>
{
authorizeFormRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
params
=
{
...
props
.
authorizeFormData
,
let
params
=
{
...
state
.
authorizeFormData
,
};
axios
.
post
(
"
/
apaas/system/v5
/sysOptions/licenseOpts
"
,
params
).
then
((
res
)
=>
{
axios
.
post
(
"
/
v1/api
/sysOptions/licenseOpts
"
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
}
else
{
...
...
@@ -87,8 +95,9 @@ const save = () => {
}
});
};
const
{
authorizeRules
}
=
toRefs
(
state
);
const
{
authorize
FormData
,
authorize
Rules
}
=
toRefs
(
state
);
defineExpose
({
setFormData
,
save
,
});
</
script
>
src/page/main/system-admin/preference/index.vue
View file @
35f720d7
...
...
@@ -20,19 +20,13 @@
</div>
<div
class=
"right_container bgc_white"
>
<!-- license授权表单 -->
<authorityForm
ref=
"authorityFormRef"
v-if=
"activeIndex == 1"
:authorizeFormData=
"authorizeFormData"
></authorityForm>
<authorityForm
ref=
"authorityFormRef"
v-if=
"activeIndex == 1"
></authorityForm>
<loginPageForm
ref=
"loginPageFormRef"
v-if=
"activeIndex == 2"
:loginPageFormData=
"loginPageFormData"
></loginPageForm>
<loginPageForm
ref=
"loginPageFormRef"
v-if=
"activeIndex == 2"
></loginPageForm>
<!-- 安全相关表单 -->
<secureForm
ref=
"secureFormRef"
v-if=
"activeIndex == 3"
:secureFormData=
"secureFormData"
></secureForm>
<secureForm
ref=
"secureFormRef"
v-if=
"activeIndex == 3"
></secureForm>
<!-- 登录注册配置表单 -->
<registerForm
ref=
"registerFormRef"
v-if=
"activeIndex == 4"
:registerFormData=
"registerFormData"
></registerForm>
<registerForm
ref=
"registerFormRef"
v-if=
"activeIndex == 4"
></registerForm>
<div
class=
"operate_btns"
>
<el-button
type=
"primary"
@
click=
"save"
>
保存
</el-button>
</div>
...
...
@@ -51,7 +45,7 @@
</template>
<
script
setup
>
import
{
reactive
,
toRefs
,
onBeforeMount
,
ref
}
from
"
vue
"
;
import
{
reactive
,
toRefs
,
onBeforeMount
,
ref
,
nextTick
}
from
"
vue
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
authorityForm
from
"
./authorityForm.vue
"
;
...
...
@@ -65,73 +59,45 @@ const loginPageFormRef = ref(null);
const
secureFormRef
=
ref
(
null
);
const
registerFormRef
=
ref
(
null
);
const
state
=
reactive
({
//授权信息表单
authorizeFormData
:
{
id
:
""
,
system_version
:
""
,
system_user
:
""
,
license
:
""
,
license_dead_date
:
""
,
license_inform_day
:
""
,
},
//登录页表单
loginPageFormData
:
{
logoUrl
:
[],
backgroundUrl
:
[],
patent
:
""
,
icpFiling
:
""
,
icpUrl
:
""
,
publicSecurityFiling
:
""
,
publicSecurityUrl
:
""
,
legalStatementUrl
:
""
,
privacyPolicyUrl
:
""
,
},
//安全相关信息表单
secureFormData
:
{
id
:
""
,
min_pwd_level
:
""
,
force_update_state
:
0
,
pwd_validity
:
""
,
session_validity
:
""
,
access_rule_state
:
""
,
},
//登录注册配置表单
registerFormData
:
{
id
:
""
,
login_config_state
:
0
,
login_limit_time
:
""
,
login_pwd_error
:
""
,
login_lock_time
:
""
,
register_config_state
:
0
,
},
//选中项索引
activeIndex
:
1
,
restoreDialog
:
false
,
//首选项配置数据
sysOptions
:
{},
});
const
{
authorizeFormData
,
loginPageFormData
,
secureFormData
,
registerFormData
,
activeIndex
,
restoreDialog
}
=
toRefs
(
state
);
const
{
activeIndex
,
restoreDialog
}
=
toRefs
(
state
);
onBeforeMount
(()
=>
{
getPreferenceConfig
();
});
//切换菜单选项
const
switchMenu
=
(
index
)
=>
{
state
.
activeIndex
=
index
;
nextTick
(()
=>
{
switch
(
index
)
{
case
"
1
"
:
authorityFormRef
.
value
.
setFormData
(
state
.
sysOptions
);
break
;
case
"
2
"
:
loginPageFormRef
.
value
.
setFormData
(
state
.
sysOptions
);
break
;
case
"
3
"
:
secureFormRef
.
value
.
setFormData
(
state
.
sysOptions
);
break
;
case
"
4
"
:
registerFormRef
.
value
.
setFormData
(
state
.
sysOptions
);
break
;
default
:
break
;
}
});
};
//获取首选项配置
const
getPreferenceConfig
=
()
=>
{
axios
.
get
(
"
/
apaas/system/v5
/sysOptions
"
).
then
((
res
)
=>
{
axios
.
get
(
"
/
v1/api
/sysOptions
"
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
let
data
=
res
.
data
.
data
;
Object
.
keys
(
state
.
authorizeFormData
).
forEach
((
item
)
=>
{
state
.
authorizeFormData
[
item
]
=
data
[
item
];
});
Object
.
keys
(
state
.
secureFormData
).
forEach
((
item
)
=>
{
state
.
secureFormData
[
item
]
=
data
[
item
];
});
Object
.
keys
(
state
.
registerFormData
).
forEach
((
item
)
=>
{
state
.
registerFormData
[
item
]
=
data
[
item
];
});
state
.
sysOptions
=
data
;
authorityFormRef
.
value
.
setFormData
(
data
);
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
}
...
...
@@ -141,16 +107,16 @@ const getPreferenceConfig = () => {
//保存表单项
const
save
=
()
=>
{
switch
(
state
.
activeIndex
)
{
case
1
:
case
"
1
"
:
authorityFormRef
.
value
.
save
();
break
;
case
2
:
case
"
2
"
:
loginPageFormRef
.
value
.
save
();
break
;
case
3
:
case
"
3
"
:
secureFormRef
.
value
.
save
();
break
;
case
4
:
case
"
4
"
:
registerFormRef
.
value
.
save
();
break
;
default
:
...
...
src/page/main/system-admin/preference/loginPageForm.vue
View file @
35f720d7
...
...
@@ -6,9 +6,9 @@
:rules=
"loginPageRules"
label-width=
"96px"
class=
"registerForm"
>
<el-form-item
label=
"LOGO"
prop=
"logo
Url
"
>
<el-form-item
label=
"LOGO"
prop=
"logo"
>
<bg-upload-image
v-model=
"loginPageFormData.logo
Url
"
v-model=
"loginPageFormData.logo"
:showTips=
"true"
customTips=
"请选择图片上传:支持jpg、png等格式,图片需小于500KB"
:fileSize=
"500"
...
...
@@ -18,9 +18,9 @@
@
change=
"changeLogo"
:accept=
"['.jpg', '.jpeg', '.png']"
></bg-upload-image>
</el-form-item>
<el-form-item
label=
"登录背景图"
prop=
"b
ackgroundUrl
"
>
<el-form-item
label=
"登录背景图"
prop=
"b
g_image
"
>
<bg-upload-image
v-model=
"loginPageFormData.b
ackgroundUrl
"
v-model=
"loginPageFormData.b
g_image
"
:fileSize=
"2"
:showTips=
"true"
customTips=
"请选择图片上传:大小1920 * 1026像素支持jpg、png等格式,图片需小于2MB"
...
...
@@ -30,41 +30,37 @@
:accept=
"['.jpg', '.jpeg', '.png']"
></bg-upload-image>
</el-form-item>
<bg-form-gap
title=
"底部所有权内容"
></bg-form-gap>
<el-form-item
label=
"内容"
prop=
"
patent
"
>
<el-form-item
label=
"内容"
prop=
"
bottom_title
"
>
<el-input
v-model.trim=
"loginPageFormData.
patent
"
v-model.trim=
"loginPageFormData.
bottom_title
"
placeholder=
"例如:Copyright © 某某大数据, All Rights Reserved."
></el-input>
</el-form-item>
<bg-form-gap
title=
"底部ICP备案"
></bg-form-gap>
<el-form-item
label=
"内容"
prop=
"icp
Filing
"
>
<el-input
placeholder=
"请输入"
v-model.trim=
"loginPageFormData.icp
Filing
"
></el-input>
<el-form-item
label=
"内容"
prop=
"icp"
>
<el-input
placeholder=
"请输入"
v-model.trim=
"loginPageFormData.icp"
></el-input>
</el-form-item>
<el-form-item
label=
"跳转连接"
prop=
"icp
U
rl"
>
<el-input
placeholder=
"例如:https://...或http://..."
v-model.trim=
"loginPageFormData.icp
U
rl"
></el-input>
<el-form-item
label=
"跳转连接"
prop=
"icp
_u
rl"
>
<el-input
placeholder=
"例如:https://...或http://..."
v-model.trim=
"loginPageFormData.icp
_u
rl"
></el-input>
</el-form-item>
<bg-form-gap
title=
"底部公安网备案"
></bg-form-gap>
<el-form-item
label=
"内容"
prop=
"p
ublicSecurityFiling
"
>
<el-input
placeholder=
"请输入"
v-model.trim=
"loginPageFormData.p
ublicSecurityFiling
"
></el-input>
<el-form-item
label=
"内容"
prop=
"p
olice
"
>
<el-input
placeholder=
"请输入"
v-model.trim=
"loginPageFormData.p
olice
"
></el-input>
</el-form-item>
<el-form-item
label=
"跳转连接"
prop=
"publicSecurityUrl"
>
<el-input
placeholder=
"例如:https://...或http://..."
v-model.trim=
"loginPageFormData.publicSecurityUrl"
></el-input>
<el-form-item
label=
"跳转连接"
prop=
"police_url"
>
<el-input
placeholder=
"例如:https://...或http://..."
v-model.trim=
"loginPageFormData.police_url"
></el-input>
</el-form-item>
<bg-form-gap
title=
"法律声明"
></bg-form-gap>
<el-form-item
label=
"跳转连接"
prop=
"legalStatementUrl"
>
<el-input
placeholder=
"例如:https://...或http://..."
v-model.trim=
"loginPageFormData.legalStatementUrl"
></el-input>
<el-form-item
label=
"跳转连接"
prop=
"legal_notice"
>
<el-input
placeholder=
"例如:https://...或http://..."
v-model.trim=
"loginPageFormData.legal_notice"
></el-input>
</el-form-item>
<bg-form-gap
title=
"隐私政策"
></bg-form-gap>
<el-form-item
label=
"跳转连接"
prop=
"privacy
PolicyUrl
"
>
<el-form-item
label=
"跳转连接"
prop=
"privacy
_policy
"
>
<el-input
placeholder=
"例如:https://...或http://..."
v-model.trim=
"loginPageFormData.privacy
PolicyUrl
"
></el-input>
v-model.trim=
"loginPageFormData.privacy
_policy
"
></el-input>
</el-form-item>
</el-form>
</div>
...
...
@@ -76,41 +72,59 @@ import { ElMessage } from "element-plus";
import
{
validateLink
}
from
"
@/services/rules.js
"
;
import
axios
from
"
@/request/http.js
"
;
const
props
=
defineProps
({
loginPageFormData
:
{
type
:
Object
,
default
:
()
=>
({}),
},
});
const
loginPageRef
=
ref
(
null
);
const
state
=
reactive
({
loginPageFormData
:
{
id
:
""
,
logo
:
[],
bg_image
:
[],
bottom_title
:
""
,
icp
:
""
,
icp_url
:
""
,
police
:
""
,
police_url
:
""
,
legal_notice
:
""
,
privacy_policy
:
""
,
},
loginPageRules
:
{
logo
Url
:
[{
required
:
true
,
message
:
"
请上传Logo
"
,
trigger
:
"
change
"
}],
b
ackgroundUrl
:
[{
required
:
true
,
message
:
"
请上传背景图
"
,
trigger
:
"
change
"
}],
icp
U
rl
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
p
ublicSecurityU
rl
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
legal
StatementUrl
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
privacy
PolicyUrl
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
logo
:
[{
required
:
true
,
message
:
"
请上传Logo
"
,
trigger
:
"
change
"
}],
b
g_image
:
[{
required
:
true
,
message
:
"
请上传背景图
"
,
trigger
:
"
change
"
}],
icp
_u
rl
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
p
olice_u
rl
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
legal
_notice
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
privacy
_policy
:
[{
validator
:
validateLink
,
trigger
:
"
blur
"
}],
},
});
const
changeLogo
=
(
value
)
=>
{
if
(
value
&&
value
.
length
>
0
)
{
loginPageRef
.
value
.
clearValidate
(
"
logo
Url
"
);
loginPageRef
.
value
.
clearValidate
(
"
logo
"
);
}
};
const
changeBanner
=
(
value
)
=>
{
if
(
value
&&
value
.
length
>
0
)
{
refForm
.
value
.
clearValidate
(
"
backgroundUrl
"
);
loginPageRef
.
value
.
clearValidate
(
"
bg_image
"
);
}
};
//设置表单数据
const
setFormData
=
(
data
)
=>
{
Object
.
keys
(
state
.
loginPageFormData
).
forEach
((
item
)
=>
{
if
([
"
bg_image
"
,
"
logo
"
].
includes
(
item
))
{
state
.
loginPageFormData
[
item
]
=
data
[
item
]
?
JSON
.
parse
(
data
[
item
])
:
[];
return
;
}
state
.
loginPageFormData
[
item
]
=
data
[
item
];
});
};
//保存
const
save
=
()
=>
{
loginPageRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
params
=
{
...
props
.
loginPageFormData
,
let
params
=
{
...
state
.
loginPageFormData
,
};
axios
.
post
(
"
/apaas/system/v5/sysOptions/licenseOpts
"
,
params
).
then
((
res
)
=>
{
params
.
logo
=
JSON
.
stringify
(
params
.
logo
);
params
.
bg_image
=
JSON
.
stringify
(
params
.
bg_image
);
axios
.
post
(
"
/v1/api/sysOptions/loginPageOpts
"
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
}
else
{
...
...
@@ -120,8 +134,9 @@ const save = () => {
}
});
};
const
{
loginPageRules
}
=
toRefs
(
state
);
const
{
loginPage
FormData
,
loginPage
Rules
}
=
toRefs
(
state
);
defineExpose
({
setFormData
,
save
,
});
</
script
>
...
...
src/page/main/system-admin/preference/registerForm.vue
View file @
35f720d7
<
template
>
<div>
<el-form
ref=
"registerFormRef"
:model=
"registerFormData"
...
...
@@ -42,14 +43,17 @@
<div
class=
"tip-image"
></div>
</el-tooltip>
</div>
<bg-form-gap
title=
"注册配置"
></bg-form-gap>
<el-form-item
label=
"允许注册"
prop=
"register_config_state"
>
<el-radio-group
v-model=
"registerFormData.register_config_state"
>
<el-radio
:label=
"1"
>
是
</el-radio>
<el-radio
:label=
"0"
>
否
</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<el-dialog
class=
"dialog_box"
title=
"提示"
v-model=
"restoreDialog"
width=
"420px"
>
<div>
该操作将还原所有锁定账号和输错次数,是否继续?
</div>
<
template
v-slot:footer
>
<div
class=
"apaas_button"
>
<el-button
type=
"default"
@
click=
"restoreDialog = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"confirm"
>
确 定
</el-button>
</div>
</
template
>
</el-dialog>
</div>
</template>
<
script
setup
>
...
...
@@ -58,14 +62,15 @@ import { ElMessage } from "element-plus";
import
axios
from
"
@/request/http.js
"
;
const
registerFormRef
=
ref
(
null
);
const
props
=
defineProps
({
registerFormData
:
{
type
:
Object
,
default
:
()
=>
({}),
},
});
const
state
=
reactive
({
registerFormData
:
{
id
:
""
,
login_config_state
:
0
,
login_limit_time
:
""
,
login_pwd_error
:
""
,
login_lock_time
:
""
,
},
registerRules
:
{
login_limit_time
:
[
{
...
...
@@ -92,20 +97,39 @@ const state = reactive({
},
],
},
//一键还原受限弹框
restoreDialog
:
false
,
});
//设置表单数据
const
setFormData
=
(
data
)
=>
{
Object
.
keys
(
state
.
registerFormData
).
forEach
((
item
)
=>
{
state
.
registerFormData
[
item
]
=
data
[
item
];
});
};
//一键还原受限确定
const
confirm
=
()
=>
{
axios
.
post
(
`/v1/api/sysOptions/reStartConfig`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
state
.
restoreDialog
=
false
;
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
}
});
};
//保存
const
save
=
()
=>
{
registerFormRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
params
=
{
...
props
.
registerFormData
,
let
params
=
{
...
state
.
registerFormData
,
};
if
(
params
.
login_config_state
==
0
)
{
params
.
login_limit_time
=
0
;
params
.
login_pwd_error
=
0
;
params
.
login_lock_time
=
0
;
}
axios
.
post
(
"
/
apaas/system/v5
/sysOptions/loginOpts
"
,
params
).
then
((
res
)
=>
{
axios
.
post
(
"
/
v1/api
/sysOptions/loginOpts
"
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
}
else
{
...
...
@@ -115,8 +139,9 @@ const save = () => {
}
});
};
const
{
register
Rules
}
=
toRefs
(
state
);
const
{
register
FormData
,
registerRules
,
restoreDialog
}
=
toRefs
(
state
);
defineExpose
({
setFormData
,
save
,
});
</
script
>
src/page/main/system-admin/preference/secureForm.vue
View file @
35f720d7
...
...
@@ -79,15 +79,17 @@ import { ElMessage } from "element-plus";
import
axios
from
"
@/request/http.js
"
;
const
secureFormRef
=
ref
(
null
);
const
props
=
defineProps
({
secureFormData
:
{
type
:
Object
,
default
:
()
=>
({
}
),
}
,
}
);
const
session_validity_max
=
window
.
defaultConfig
.
session_validity_max
;
const
state
=
reactive
({
secureFormData
:
{
id
:
""
,
min_pwd_level
:
""
,
force_update_state
:
0
,
pwd_validity
:
""
,
session_validity
:
""
,
access_rule_state
:
""
,
}
,
//安全相关表单校验规则
secureRules
:
{
pwd_validity
:
[
...
...
@@ -108,14 +110,20 @@ const state = reactive({
],
}
,
}
);
//设置表单数据
const
setFormData
=
(
data
)
=>
{
Object
.
keys
(
state
.
secureFormData
).
forEach
((
item
)
=>
{
state
.
secureFormData
[
item
]
=
data
[
item
];
}
);
}
;
//保存
const
save
=
()
=>
{
secureFormRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
params
=
{
...
props
.
secureFormData
,
let
params
=
{
...
state
.
secureFormData
,
}
;
axios
.
post
(
"
/
apaas/system/v5
/sysOptions/safeOpts
"
,
params
).
then
((
res
)
=>
{
axios
.
post
(
"
/
v1/api
/sysOptions/safeOpts
"
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
}
else
{
...
...
@@ -125,9 +133,10 @@ const save = () => {
}
}
);
}
;
const
{
secureRules
}
=
toRefs
(
state
);
const
{
secure
FormData
,
secure
Rules
}
=
toRefs
(
state
);
defineExpose
({
setFormData
,
save
,
}
);
<
/script
>
src/page/main/system-admin/visit-control/add/index.vue
View file @
35f720d7
...
...
@@ -44,7 +44,7 @@
</bg-table>
<bg-pagination
:page=
"pageConfig.page"
:size=
"pageConfig.
limit
"
:size=
"pageConfig.
page_size
"
:total=
"pageConfig.total"
@
change-page=
"changePage"
@
change-size=
"changeSize"
>
...
...
@@ -96,7 +96,7 @@
ref=
"dialogBgTable"
height=
"430"
select
rowKey=
"
systemI
d"
rowKey=
"
user_i
d"
:headers=
"detailHeaders"
:rows=
"dialogTableRows"
:stripe=
"true"
...
...
@@ -107,7 +107,7 @@
</bg-table>
<bg-pagination
:page=
"dialogPageConfig.page"
:size=
"dialogPageConfig.
limit
"
:size=
"dialogPageConfig.
page_size
"
:total=
"dialogPageConfig.total"
@
change-page=
"dialogChangePage"
@
change-size=
"dialogChangeSize"
>
...
...
@@ -196,13 +196,13 @@ const state = reactive({
},
pageConfig
:
{
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
//弹框中表格分页配置项
dialogPageConfig
:
{
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
//表格数据
...
...
@@ -269,7 +269,7 @@ const userMaintain = () => {
};
//获取所属组织级联数据
const
getOrgTree
=
()
=>
{
axios
.
get
(
`/
apaas/system/v5
/org/tree`
).
then
((
res
)
=>
{
axios
.
get
(
`/
v1/api
/org/tree`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
const
orgDataTemp
=
res
.
data
.
data
||
[];
state
.
orgData
=
orgDataTemp
;
...
...
@@ -280,11 +280,14 @@ const getOrgTree = () => {
};
const
changePage
=
(
page
)
=>
{
state
.
pageConfig
.
page
=
page
;
state
.
tableRows
=
state
.
selectedRows
.
slice
((
page
-
1
)
*
state
.
pageConfig
.
limit
,
page
*
state
.
pageConfig
.
limit
);
state
.
tableRows
=
state
.
selectedRows
.
slice
(
(
page
-
1
)
*
state
.
pageConfig
.
page_size
,
page
*
state
.
pageConfig
.
page_size
);
};
const
changeSize
=
(
size
)
=>
{
state
.
pageConfig
.
limit
=
size
;
state
.
pageConfig
.
page_size
=
size
;
changePage
(
1
);
};
const
dialogChangePage
=
(
page
)
=>
{
...
...
@@ -293,19 +296,19 @@ const dialogChangePage = (page) => {
};
const
dialogChangeSize
=
(
size
)
=>
{
state
.
dialogPageConfig
.
limit
=
size
;
state
.
dialogPageConfig
.
page_size
=
size
;
dialogChangePage
(
1
);
};
//获取用户维护数据
const
getTableList
=
()
=>
{
const
params
=
{
limit
:
state
.
dialogPageConfig
.
limit
,
page_size
:
state
.
dialogPageConfig
.
page_size
,
page
:
state
.
dialogPageConfig
.
page
,
disp
:
1
,
...
state
.
dialogFilterData
,
};
axios
.
get
(
"
/
apaas/system/v5
/accessRule/listRuleUser
"
,
{
params
}).
then
((
res
)
=>
{
axios
.
get
(
"
/
v1/api
/accessRule/listRuleUser
"
,
{
params
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
dialogTableRows
=
res
.
data
.
data
||
[];
state
.
dialogPageConfig
.
total
=
res
.
data
.
total
||
0
;
...
...
@@ -335,17 +338,17 @@ const save = () => {
const
res
=
dialogBgTable
.
value
.
dealSelectData
();
state
.
selectedRows
=
Object
.
values
(
res
);
state
.
formData
.
userScope
=
state
.
selectedRows
.
map
((
item
)
=>
({
systemId
:
item
.
systemI
d
,
user_id
:
item
.
user_i
d
,
}));
state
.
pageConfig
.
total
=
state
.
formData
.
userScope
.
length
;
changePage
(
1
);
};
//提交
const
submit
=
()
=>
{
axios
.
post
(
"
/
apaas/system/v5
/accessRule/addAccessRule
"
,
state
.
formData
).
then
((
res
)
=>
{
axios
.
post
(
"
/
v1/api
/accessRule/addAccessRule
"
,
state
.
formData
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
"
添加成功
"
);
router
.
push
(
"
/
config/accessRule
"
);
router
.
push
(
"
/
system-admin/visit-control
"
);
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
}
...
...
src/page/main/system-admin/visit-control/edit/index.vue
View file @
35f720d7
...
...
@@ -44,7 +44,7 @@
</bg-table>
<bg-pagination
:page=
"pageConfig.page"
:size=
"pageConfig.
limit
"
:size=
"pageConfig.
page_size
"
:total=
"pageConfig.total"
@
change-page=
"changePage"
@
change-size=
"changeSize"
>
...
...
@@ -96,7 +96,7 @@
ref=
"dialogBgTable"
height=
"430"
select
rowKey=
"
systemI
d"
rowKey=
"
user_i
d"
:headers=
"detailHeaders"
:rows=
"dialogTableRows"
:originSelectedData=
"selectedRows"
...
...
@@ -108,7 +108,7 @@
</bg-table>
<bg-pagination
:page=
"dialogPageConfig.page"
:size=
"dialogPageConfig.
limit
"
:size=
"dialogPageConfig.
page_size
"
:total=
"dialogPageConfig.total"
@
change-page=
"dialogChangePage"
@
change-size=
"dialogChangeSize"
>
...
...
@@ -198,13 +198,13 @@ const state = reactive({
},
pageConfig
:
{
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
//弹框中表格分页配置项
dialogPageConfig
:
{
page
:
1
,
limit
:
10
,
page_size
:
10
,
total
:
0
,
},
//表格数据
...
...
@@ -282,7 +282,7 @@ const userMaintain = () => {
};
//获取所属组织级联数据
const
getOrgTree
=
()
=>
{
axios
.
get
(
`/
apaas/system/v5
/org/tree`
).
then
((
res
)
=>
{
axios
.
get
(
`/
v1/api
/org/tree`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
const
orgDataTemp
=
res
.
data
.
data
||
[];
state
.
orgData
=
orgDataTemp
;
...
...
@@ -293,11 +293,14 @@ const getOrgTree = () => {
};
const
changePage
=
(
page
)
=>
{
state
.
pageConfig
.
page
=
page
;
state
.
tableRows
=
state
.
selectedRows
.
slice
((
page
-
1
)
*
state
.
pageConfig
.
limit
,
page
*
state
.
pageConfig
.
limit
);
state
.
tableRows
=
state
.
selectedRows
.
slice
(
(
page
-
1
)
*
state
.
pageConfig
.
page_size
,
page
*
state
.
pageConfig
.
page_size
);
};
const
changeSize
=
(
size
)
=>
{
state
.
pageConfig
.
limit
=
size
;
state
.
pageConfig
.
page_size
=
size
;
changePage
(
1
);
};
const
dialogChangePage
=
(
page
)
=>
{
...
...
@@ -306,18 +309,18 @@ const dialogChangePage = (page) => {
};
const
dialogChangeSize
=
(
size
)
=>
{
state
.
dialogPageConfig
.
limit
=
size
;
state
.
dialogPageConfig
.
page_size
=
size
;
dialogChangePage
(
1
);
};
//编辑时回显用户范围数据
const
getUserScopeList
=
()
=>
{
const
params
=
{
limit
:
10000
,
page_size
:
10000
,
page
:
1
,
id
:
route
.
query
.
id
,
disp
:
0
,
};
axios
.
get
(
"
/
apaas/system/v5
/accessRule/listRuleUser
"
,
{
params
}).
then
((
res
)
=>
{
axios
.
get
(
"
/
v1/api
/accessRule/listRuleUser
"
,
{
params
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
selectedRows
=
res
.
data
.
data
||
[];
state
.
pageConfig
.
total
=
state
.
selectedRows
.
length
;
...
...
@@ -331,12 +334,12 @@ const getUserScopeList = () => {
//获取用户维护数据
const
getTableList
=
()
=>
{
const
params
=
{
limit
:
state
.
dialogPageConfig
.
limit
,
page_size
:
state
.
dialogPageConfig
.
page_size
,
page
:
state
.
dialogPageConfig
.
page
,
disp
:
1
,
...
state
.
dialogFilterData
,
};
axios
.
get
(
"
/
apaas/system/v5
/accessRule/listRuleUser
"
,
{
params
}).
then
((
res
)
=>
{
axios
.
get
(
"
/
v1/api
/accessRule/listRuleUser
"
,
{
params
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
dialogTableRows
=
res
.
data
.
data
||
[];
state
.
dialogPageConfig
.
total
=
res
.
data
.
total
||
0
;
...
...
@@ -366,7 +369,7 @@ const save = () => {
const
res
=
dialogBgTable
.
value
.
dealSelectData
();
state
.
selectedRows
=
Object
.
values
(
res
);
state
.
formData
.
userScope
=
state
.
selectedRows
.
map
((
item
)
=>
({
systemId
:
item
.
systemI
d
,
user_id
:
item
.
user_i
d
,
}));
state
.
pageConfig
.
total
=
state
.
formData
.
userScope
.
length
;
changePage
(
1
);
...
...
@@ -377,10 +380,10 @@ const submit = () => {
ruleId
:
route
.
query
.
ruleId
,
...
state
.
formData
,
};
axios
.
put
(
"
/
apaas/system/v5
/accessRule/updateAccessRule
"
,
params
).
then
((
res
)
=>
{
axios
.
put
(
"
/
v1/api
/accessRule/updateAccessRule
"
,
params
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
"
更新成功
"
);
router
.
push
(
"
/
config/accessRule
"
);
router
.
push
(
"
/
system-admin/visit-control
"
);
}
else
{
ElMessage
.
error
(
res
.
data
.
data
);
}
...
...
src/page/main/system-admin/visit-control/index.vue
View file @
35f720d7
...
...
@@ -74,7 +74,7 @@
</bg-table>
<bg-pagination
:page=
"filter.page"
:size=
"filter.
limit
"
:size=
"filter.
page_size
"
:total=
"tableTotal"
@
change-page=
"changePage"
@
change-size=
"changeSize"
>
...
...
@@ -133,7 +133,7 @@
</bg-table>
<bg-pagination
:page=
"userFilter.page"
:size=
"userFilter.
limit
"
:size=
"userFilter.
page_size
"
:total=
"userTableTotal"
@
change-page=
"changeUserPage"
@
change-size=
"changeUserSize"
>
...
...
@@ -171,7 +171,7 @@ const state = reactive({
filter
:
{
search
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
time
:
[],
},
headers
:
[
...
...
@@ -214,7 +214,7 @@ const state = reactive({
dialogDetail
:
false
,
userFilter
:
{
page
:
1
,
limit
:
10
,
page_size
:
10
,
search
:
""
,
isAdmin
:
""
,
organizationId
:
""
,
...
...
@@ -269,7 +269,7 @@ const state = reactive({
});
const
getOrgList
=
()
=>
{
axios
.
get
(
`/
apaas/system/v5
/org/tree`
).
then
((
res
)
=>
{
axios
.
get
(
`/
v1/api
/org/tree`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
orgList
=
res
.
data
.
data
||
[];
}
else
{
...
...
@@ -287,7 +287,7 @@ const changePage = (page) => {
getTableRows
();
};
// 改变页码
const
changeSize
=
(
size
)
=>
{
state
.
filter
.
limit
=
size
;
state
.
filter
.
page_size
=
size
;
changePage
(
1
);
};
// 改变每页条数
const
filterAction
=
()
=>
{
...
...
@@ -297,7 +297,7 @@ const filterClear = () => {
state
.
filter
=
{
search
:
""
,
page
:
1
,
limit
:
10
,
page_size
:
10
,
time
:
[],
};
changePage
(
1
);
...
...
@@ -308,7 +308,7 @@ const getTableRows = () => {
params
.
updatedTimeTo
=
params
.
time
?
params
.
time
[
1
]
||
""
:
""
;
delete
params
.
time
;
axios
.
get
(
`/
apaas/system/v5
/accessRule/listAccessRule`
,
{
.
get
(
`/
v1/api
/accessRule/listAccessRule`
,
{
params
,
})
.
then
((
res
)
=>
{
...
...
@@ -323,6 +323,7 @@ const getTableRows = () => {
const
selectRows
=
(
data
)
=>
{
state
.
selectedNum
=
data
.
allLength
;
stateChange
;
state
.
selection
=
data
.
selection
;
};
...
...
@@ -337,7 +338,7 @@ const cleanSelected = () => {
// 改变规则状态
const
stateChange
=
(
row
)
=>
{
axios
.
put
(
`/
apaas/system/v5
/accessRule/updateState?id=
${
row
.
id
}
&state=
${
row
.
state
}
`
).
then
((
res
)
=>
{
axios
.
put
(
`/
v1/api
/accessRule/updateState?id=
${
row
.
id
}
&state=
${
row
.
state
}
`
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
ElMessage
.
success
(
res
.
data
.
msg
);
changePage
(
1
);
...
...
@@ -347,7 +348,6 @@ const stateChange = (row) => {
}
});
};
// 打开用户弹窗
const
openUserDialog
=
(
row
)
=>
{
state
.
dialogDetail
=
true
;
...
...
@@ -363,7 +363,7 @@ const searchUsers = () => {
const
clearAction
=
()
=>
{
state
.
userFilter
=
{
page
:
1
,
limit
:
10
,
page_size
:
10
,
search
:
""
,
isAdmin
:
""
,
organizationId
:
""
,
...
...
@@ -379,7 +379,7 @@ const changeUserPage = (page) => {
};
const
changeUserSize
=
(
size
)
=>
{
state
.
userFilter
.
limit
=
size
;
state
.
userFilter
.
page_size
=
size
;
changeUserPage
(
1
);
};
...
...
@@ -389,7 +389,7 @@ const getUserTableRows = () => {
...
state
.
userFilter
,
id
:
state
.
actionRow
.
id
,
};
axios
.
get
(
`/
apaas/system/v5
/accessRule/listRuleUser`
,
{
params
}).
then
((
res
)
=>
{
axios
.
get
(
`/
v1/api
/accessRule/listRuleUser`
,
{
params
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
state
.
userTableRows
=
res
.
data
.
data
||
[];
state
.
userTableTotal
=
res
.
data
.
total
;
...
...
@@ -434,7 +434,7 @@ const openDeleteDialog = (type, row) => {
//确定删除
const
confimDelete
=
()
=>
{
axios
.
delete
(
"
/
apaas/system/v5
/accessRule/delAccessRule
"
,
{
.
delete
(
"
/
v1/api
/accessRule/delAccessRule
"
,
{
data
:
{
ruleId
:
state
.
deleteDialogConfig
.
ruleId
,
},
...
...
@@ -465,7 +465,6 @@ const {
userFilter
,
userTypeList
,
orgList
,
selection
,
dialogDelete
,
deleteDialogConfig
,
}
=
toRefs
(
state
);
...
...
src/page/main/ticket/business-ticket-list/detail/index.vue
View file @
35f720d7
...
...
@@ -48,6 +48,7 @@ import { ORDER_METHODS } from "@/components/manual-distribution/env.js";
import
{
useRoute
}
from
"
vue-router
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
route
=
useRoute
();
const
{
id
}
=
route
.
query
;
const
ticketLevelOptions
=
[
""
,
"
紧急任务
"
,
"
重要任务
"
,
"
一般任务
"
];
...
...
@@ -131,8 +132,8 @@ const getInfo = () => {
ticket_level
:
ticketLevelOptions
[
data
.
order_level
],
create_by
:
data
.
create_user
,
description
:
data
.
order_desc
,
create_time
:
dat
a
.
create_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
finish_time
:
dat
a
.
complete_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
create_time
:
dat
eStringToDate
(
data
.
create_time
)
,
finish_time
:
dat
eStringToDate
(
data
.
complete_time
)
,
notification_method
:
data
.
push_obj
.
push_method
==
"
3
"
?
[
"
1
"
,
"
2
"
]
:
[
data
.
push_obj
.
push_method
],
};
rows
.
value
=
data
.
push_obj
.
user_obj
?.
map
((
e
)
=>
{
...
...
@@ -147,7 +148,7 @@ const getInfo = () => {
status
:
e
.
order_state
,
target
:
e
.
system_account
,
feedback
:
e
.
result_feedback
,
time
:
e
.
complete_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
time
:
dateStringToDate
(
e
.
complete_time
)
,
};
});
}
...
...
src/page/main/ticket/business-ticket-list/index.vue
View file @
35f720d7
...
...
@@ -75,10 +75,10 @@
</span>
</
template
>
<
template
#create_time
="{
row
}"
>
{{
row
.
create_time
?
row
.
create_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
create_time
)
}}
</
template
>
<
template
#complete_time
="{
row
}"
>
{{
row
.
complete_time
?
row
.
complete_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
complete_time
)
}}
</
template
>
<
template
#operation
="{
row
}"
>
<el-button
type=
"primary"
:disabled=
"row.order_state != 1"
link
size=
"small"
@
click=
"operation(row)"
>
...
...
@@ -110,6 +110,7 @@ import CloseTicket from "./close-ticket.vue";
import
{
useRouter
}
from
"
vue-router
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
router
=
useRouter
();
const
filter
=
reactive
({
order_level
:
0
,
...
...
@@ -176,6 +177,7 @@ let headers = reactive([
prop
:
"
operation
"
,
align
:
"
left
"
,
width
:
"
80px
"
,
fixed
:
"
right
"
,
},
]);
let
rows
=
ref
([]);
...
...
src/page/main/ticket/business-ticket-manage/detail/index.vue
View file @
35f720d7
...
...
@@ -9,8 +9,8 @@
<Info
:labelData=
"labelData"
:valueData=
"info"
>
<template
#status
="
{ item, valueData }">
<span
class=
"status-body"
>
<span
class=
"status"
:class=
"`status
-
$
{valueData.status}`">
</span>
<span>
{{
status
Options
[
valueData
[
item
.
prop
]]
}}
</span>
<span
class=
"status"
:class=
"`status
_
$
{valueData.status}`">
</span>
<span>
{{
timeState
Options
[
valueData
[
item
.
prop
]]
}}
</span>
</span>
</
template
>
</Info>
...
...
@@ -64,10 +64,10 @@
</span>
</
template
>
<
template
#create_time
="{
row
}"
>
{{
row
.
create_time
?
row
.
create_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
create_time
)
}}
</
template
>
<
template
#complete_time
="{
row
}"
>
{{
row
.
complete_time
?
row
.
complete_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
complete_time
)
}}
</
template
>
<
template
#operation
="{
row
}"
>
<div
class=
"table-operation"
>
...
...
@@ -99,11 +99,13 @@ import { TIMEING_RULES } from "@/components/env.js";
import
{
useRouter
,
useRoute
}
from
"
vue-router
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
route
=
useRoute
();
const
{
id
}
=
route
.
query
;
const
router
=
useRouter
();
const
ticketLevelOptions
=
[
""
,
"
紧急任务
"
,
"
重要任务
"
,
"
一般任务
"
];
const
statusOptions
=
[
""
,
"
待处置
"
,
"
已完成
"
,
"
已关闭
"
];
const
timeStateOptions
=
[
"
禁用
"
,
"
启用
"
];
const
weekDayOptions
=
{
1
:
"
周一
"
,
2
:
"
周二
"
,
...
...
@@ -120,7 +122,7 @@ const labelData = [
prop
:
"
ticket_name
"
,
},
{
label
:
"
状态
"
,
label
:
"
定时是否启用
"
,
prop
:
"
status
"
,
},
],
...
...
@@ -139,16 +141,10 @@ const labelData = [
label
:
"
工单描述
"
,
prop
:
"
description
"
,
},
],
[
{
label
:
"
创建时间
"
,
prop
:
"
create_time
"
,
},
{
label
:
"
完成时间
"
,
prop
:
"
finish_time
"
,
},
],
];
const
info
=
ref
({});
...
...
@@ -251,8 +247,8 @@ const getInfoData = () => {
ticket_level
:
ticketLevelOptions
[
data
.
order_level
],
create_by
:
data
.
create_user
,
description
:
data
.
order_desc
,
create_time
:
dat
a
.
create_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
finish_time
:
dat
a
.
create_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
create_time
:
dat
eStringToDate
(
data
.
create_time
)
,
finish_time
:
dat
eStringToDate
(
data
.
create_time
)
,
notification_method
:
data
.
push_obj
.
push_method
==
3
?
[
"
1
"
,
"
2
"
]
:
[
`
${
data
.
push_obj
.
push_method
}
`
],
timing_rules
:
+
data
.
timing_type
,
};
...
...
@@ -361,13 +357,9 @@ onBeforeMount(() => {
height
:
6px
;
border-radius
:
50%
;
margin-right
:
8px
;
$statusObj
:
(
2
:
#48ad97
,
3
:
#9e9e9e
,
1
:
#3759be
,
);
$statusObj
:
(
-2
:
#48ad97
,
-3
:
#9e9e9e
,
-1
:
#3759be
,
_0
:
#d75138
,
_1
:
#48ad97
);
@each
$status
,
$color
in
$statusObj
{
&
-
#{
$status
}
{
&
#{
$status
}
{
background-color
:
$color
;
}
}
...
...
src/page/main/ticket/business-ticket-manage/index.vue
View file @
35f720d7
...
...
@@ -95,7 +95,7 @@
<span>
{{
ruleOptions
[
row
.
timing_type
]
}}
</span>
</
template
>
<
template
#create_time
="{
row
}"
>
{{
row
.
create_time
?
row
.
create_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
create_time
)
}}
</
template
>
<
template
#timing_state
="{
row
}"
>
<el-switch
...
...
@@ -156,6 +156,7 @@ import ManualDistribution from "@/components/manual-distribution/index.vue";
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
useRouter
}
from
"
vue-router
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
router
=
useRouter
();
const
filter
=
reactive
({
order_level
:
""
,
...
...
src/page/main/ticket/my-business-ticket/detail/index.vue
View file @
35f720d7
...
...
@@ -48,6 +48,7 @@ import { ORDER_METHODS } from "@/components/manual-distribution/env.js";
import
{
useRoute
}
from
"
vue-router
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
route
=
useRoute
();
const
{
id
}
=
route
.
query
;
const
ticketLevelOptions
=
[
""
,
"
紧急任务
"
,
"
重要任务
"
,
"
一般任务
"
];
...
...
@@ -132,8 +133,8 @@ const getInfo = () => {
ticket_level
:
ticketLevelOptions
[
data
.
order_level
],
create_by
:
data
.
create_user
,
description
:
data
.
order_desc
,
create_time
:
dat
a
.
create_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
finish_time
:
dat
a
.
complete_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
create_time
:
dat
eStringToDate
(
data
.
create_time
)
,
finish_time
:
dat
eStringToDate
(
data
.
complete_time
)
,
notification_method
:
data
.
push_obj
.
push_method
==
"
3
"
?
[
"
1
"
,
"
2
"
]
:
[
data
.
push_obj
.
push_method
],
};
rows
.
value
=
data
.
push_obj
.
user_obj
.
map
((
e
)
=>
{
...
...
@@ -148,7 +149,7 @@ const getInfo = () => {
status
:
e
.
order_state
,
target
:
e
.
system_account
,
feedback
:
e
.
result_feedback
,
time
:
e
.
complete_time
?.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
||
"
-
"
,
time
:
dateStringToDate
(
e
.
complete_time
)
,
};
});
}
...
...
src/page/main/ticket/my-business-ticket/index.vue
View file @
35f720d7
...
...
@@ -74,10 +74,10 @@
</span>
</
template
>
<
template
#create_time
="{
row
}"
>
{{
row
.
create_time
?
row
.
create_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
create_time
)
}}
</
template
>
<
template
#complete_time
="{
row
}"
>
{{
row
.
complete_time
?
row
.
complete_time
.
split
(
"
+
"
)[
0
].
replace
(
"
T
"
,
"
"
).
replace
(
"
Z
"
,
"
"
)
:
"
-
"
}}
{{
dateStringToDate
(
row
.
complete_time
)
}}
</
template
>
<
template
#operation
="{
row
}"
>
<el-button
type=
"primary"
:disabled=
"row.order_state != 1"
link
size=
"small"
@
click=
"operation(row)"
>
...
...
@@ -108,6 +108,7 @@ import FeedBack from "../modules/feedback.vue";
import
{
useRouter
}
from
"
vue-router
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
router
=
useRouter
();
const
filter
=
reactive
({
order_level
:
0
,
...
...
@@ -174,6 +175,7 @@ let headers = reactive([
prop
:
"
operation
"
,
align
:
"
left
"
,
width
:
"
80px
"
,
fixed
:
"
right
"
,
},
]);
let
rows
=
ref
([]);
...
...
src/page/main/ticket/my-warn-ticket/detail/index.vue
View file @
35f720d7
...
...
@@ -3,8 +3,15 @@
<div
class=
"breadcrumb"
>
<bg-breadcrumb
/>
</div>
<div
class=
"content"
>
<warn-detail
:label-data=
"labelData"
:value-data=
"info"
:tabs=
"tabs"
></warn-detail>
<div
class=
"content bg-scroll"
>
<warn-detail
:label-data=
"labelData"
:value-data=
"info"
:tabLabels=
"tabLabels"
:tabDatas=
"tabDatas"
>
<template
#status
="
{ item, valueData }">
<span
class=
"status-body"
>
<span
class=
"status"
:class=
"`status-$
{valueData.status}`">
</span>
<span>
{{
statusOptions
[
valueData
[
item
.
prop
]]
}}
</span>
</span>
</
template
>
</warn-detail>
</div>
</div>
</template>
...
...
@@ -12,12 +19,35 @@
<
script
setup
>
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
warnDetail
from
"
@/components/warn-detail/index.vue
"
;
import
{
useRoute
}
from
"
vue-router
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
{
ref
,
onBeforeMount
}
from
"
vue
"
;
import
{
dateStringToDate
}
from
"
@/components/env
"
;
const
route
=
useRoute
();
const
{
id
}
=
route
.
query
;
const
ruleTypeOptions
=
ref
({});
const
statusOptions
=
{
1
:
"
已恢复
"
,
2
:
"
未恢复
"
,
3
:
"
已关闭
"
,
};
const
riskLevels
=
{
1
:
"
低风险
"
,
2
:
"
一般风险
"
,
3
:
"
较大风险
"
,
4
:
"
重大风险
"
,
};
const
labelData
=
[
[
{
label
:
"
预警点
"
,
prop
:
"
warning_point
"
,
},
{
label
:
"
预警分类
"
,
prop
:
"
warning_type
"
,
},
],
[
{
...
...
@@ -35,7 +65,7 @@ const labelData = [
prop
:
"
status
"
,
},
{
label
:
"
预警
阀
值
"
,
label
:
"
预警
阈
值
"
,
prop
:
"
warning_threshold
"
,
},
],
...
...
@@ -50,55 +80,87 @@ const labelData = [
},
],
];
const
info
=
{
warning_point
:
"
SaaS层/数据治理系统
"
,
warning_index
:
"
响应时间超时
"
,
risk_level
:
"
一般风险
"
,
status
:
"
success
"
,
warning_threshold
:
"
10ms
"
,
current_alarm_value
:
"
16ms
"
,
warning_time
:
"
2020-01-01 00:00:00
"
,
};
const
tabs
=
[
const
info
=
ref
({});
const
tabLabels
=
[
{
label
:
"
推送记录
"
,
prop
:
"
push
"
,
lists
:
[
{
method
:
"
短信
"
,
person
:
[
11
,
22
,
33
,
44
],
push_time
:
"
2022-07-29 10:23:59
"
,
push_type
:
"
自动推送
"
,
status
:
"
success
"
,
},
{
method
:
"
钉钉
"
,
person
:
[
11
,
33
,
44
],
push_time
:
"
2022-07-29 10:23:59
"
,
push_type
:
"
自动推送
"
,
status
:
"
error
"
,
},
],
},
{
label
:
"
处置记录
"
,
prop
:
"
dispose
"
,
lists
:
[
{
status
:
"
error
"
,
feedback
:
"
暂时无法处理,需要时间
"
,
feedback_time
:
"
2022-07-29 10:23:59
"
,
feedback_person
:
"
张三
"
,
},
{
status
:
"
success
"
,
feedback
:
"
暂时无法处理,需要时间
"
,
feedback_time
:
"
2022-07-29 10:23:59
"
,
feedback_person
:
"
张三
"
,
},
],
},
];
const
tabDatas
=
ref
({});
const
pushType
=
{
1
:
"
自动推送
"
,
2
:
"
手动推送
"
,
};
const
getInfo
=
()
=>
{
const
params
=
{
id
,
};
axios
.
get
(
"
/v1/api/alert_list
"
,
{
params
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
const
{
data
}
=
res
.
data
;
info
.
value
=
{
warning_point
:
data
.
alert_point
,
warning_type
:
data
.
class_parent_name
,
warning_index
:
data
.
class_name
,
risk_level
:
riskLevels
[
data
.
risk_level
],
status
:
data
.
status
,
warning_threshold
:
`
${
data
.
alert_condition
.
thresholds_min
}${
ruleTypeOptions
.
value
[
data
.
alert_rule_type
]?.
unit
||
""
}
-
$
{
data
.
alert_condition
.
thresholds_max
}
$
{
ruleTypeOptions
.
value
[
data
.
alert_rule_type
]?.
unit
||
""
}
`,
current_alarm_value: data.current_value + (ruleTypeOptions.value[data.alert_rule_type]?.unit || ""),
warning_time: dateStringToDate(data.alert_time),
};
tabDatas.value = {
push:
data.push_records?.map((e) => {
return {
method: e.notify_method,
person: e.system_account,
push_time: dateStringToDate(e.push_time),
push_type: pushType[e.push_type],
status: e.status,
};
}) || [],
dispose:
data.disposed_list?.map((e) => {
return {
status: e.is_disposed,
feedback: e.disposal_content,
feedback_time: dateStringToDate(e.disposal_time),
feedback_person: e.disposal_user,
};
}) || [],
};
}
});
};
const GetRuleTypeOptions = () => {
const params = {
page: 1,
page_size: 10000000000000,
class: 3,
};
axios.get(`
/
v1
/
api
/
dict
`, { params }).then((res) => {
if (res.data.code == 200) {
res.data.data?.forEach((e) => {
let isEmptyOption = e.name == "空";
ruleTypeOptions.value[e.id] = {
label: e.name,
unit: isEmptyOption ? "" : e.unit,
};
});
getInfo();
}
});
};
onBeforeMount(() => {
GetRuleTypeOptions();
});
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -117,6 +179,27 @@ const tabs = [
box-shadow
:
0px
1px
4px
0px
rgba
(
0
,
7
,
101
,
0
.15
);
border-radius
:
6px
;
padding
:
32px
;
.status
{
display
:
inline-block
;
width
:
6px
;
height
:
6px
;
border-radius
:
50%
;
margin-right
:
8px
;
$statusObj
:
(
1
:
#48ad97
,
3
:
#9e9e9e
,
2
:
#3759be
,
);
@each
$status
,
$color
in
$statusObj
{
&
-
#{
$status
}
{
background-color
:
$color
;
}
}
}
.status-body
{
display
:
flex
;
align-items
:
center
;
}
}
}
</
style
>
src/page/main/ticket/my-warn-ticket/index.vue
View file @
35f720d7
...
...
@@ -4,39 +4,17 @@
<bg-breadcrumb
/>
</div>
<div
class=
"content"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.key
_word"
placeholder=
"请输入角色名称
"
>
<bg-filter-group
@
search=
"changeSearch"
v-model=
"filter.key
word"
placeholder=
"请输入预警点/分类/指标
"
>
<template
v-slot:filter_group
>
<div
class=
"left-filter filter_list"
>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
预警分类
</span>
<el-select
v-model=
"filter.warning_type"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in wainingTypeOptions"
:key=
"'pushOptions' + index"
:label=
"item.name"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
预警指标
</span>
<el-select
v-model=
"filter.warning_index"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(item, index) in wainingIndexOptions"
:key=
"'warning_index_options' + index"
:label=
"item.name"
:value=
"item.value"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
风险等级
</span>
<el-select
v-model=
"filter.risk_level"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(
item, index) in riskLevelOption
s"
:key=
"'risk
_level_option
s' + index"
:label=
"
item.nam
e"
:value=
"
item.id
"
>
v-for=
"(
value, key, index) in riskLevel
s"
:key=
"'risk
Level
s' + index"
:label=
"
valu
e"
:value=
"
key
"
>
</el-option>
</el-select>
</div>
...
...
@@ -44,17 +22,18 @@
<span
class=
"filter_title"
>
状态
</span>
<el-select
v-model=
"filter.status"
placeholder=
"请选择"
style=
"width: 300px"
>
<el-option
v-for=
"(
item
, index) in statusOptions"
:key=
"'stat
us
Options' + index"
:label=
"
item
"
:value=
"
index
"
>
v-for=
"(
value, key
, index) in statusOptions"
:key=
"'stat
e
Options' + index"
:label=
"
value
"
:value=
"
key
"
>
</el-option>
</el-select>
</div>
<div
class=
"filter_item"
>
<span
class=
"filter_title"
>
预警时段
</span>
<el-date-picker
v-model=
"filter.date"
v-model=
"filter.time"
style=
"width: 400px"
type=
"datetimerange"
value-format=
"YYYY-MM-DD HH:mm:ss"
range-separator=
"-"
...
...
@@ -72,11 +51,34 @@
<div
class=
"table_container"
>
<div
class=
"table"
>
<bg-table
ref=
"listtable"
:headers=
"headers"
:rows=
"rows"
height=
"100%"
:isIndex=
"true"
:stripe=
"true"
>
<
template
#alert_point
="{
row
}"
>
<div
class=
"href"
@
click=
"goTo(row)"
>
{{
row
.
alert_point
||
"
-
"
}}
</div>
<
template
v-slot:alert_point=
"{ row }"
>
<span
class=
"can_click_text"
@
click=
"goDetail(row)"
>
{{
row
.
alert_point
}}
</span>
</
template
>
<
template
v-slot:risk_level=
"{ row }"
>
{{
riskLevels
[
row
.
risk_level
]
}}
</
template
>
<
template
v-slot:current_value=
"{ row }"
>
{{
row
.
current_value
}}{{
ruleTypeOptions
[
row
.
alert_rule_type
]?.
unit
||
""
}}
</
template
>
<
template
v-slot:warn_threshold=
"{ row }"
>
{{
row
.
alert_condition
.
thresholds_min
}}{{
ruleTypeOptions
[
row
.
alert_rule_type
]?.
unit
||
""
}}
-
{{
row
.
alert_condition
.
thresholds_max
}}{{
ruleTypeOptions
[
row
.
alert_rule_type
]?.
unit
||
""
}}
</
template
>
<
template
v-slot:alert_time=
"{ row }"
>
{{
dateStringToDate
(
row
.
alert_time
)
}}
</
template
>
<
template
v-slot:last_push_time=
"{ row }"
>
{{
dateStringToDate
(
row
.
last_push_time
)
}}
</
template
>
<
template
#status
="{
row
}"
>
<span
:class=
"`circle status-$
{row.status}`">
</span>
{{
statusOptions
[
row
.
status
]
}}
</
template
>
<
template
#operation
="{
row
}"
>
<el-button
type=
"primary"
:disabled=
"row.
order_state !
= 1"
link
size=
"small"
@
click=
"operation(row)"
>
<el-button
type=
"primary"
:disabled=
"row.
is_disposed =
= 1"
link
size=
"small"
@
click=
"operation(row)"
>
处置反馈
</el-button>
</
template
>
...
...
@@ -98,87 +100,63 @@
</template>
<
script
setup
>
import
{
ref
,
reactive
,
onMounted
,
nextTick
}
from
"
vue
"
;
import
{
reactive
,
ref
,
onBeforeMount
,
toRefs
,
computed
,
watch
,
nextTick
,
watchEffect
}
from
"
vue
"
;
import
{
ElMessage
}
from
"
element-plus
"
;
import
axios
from
"
@/request/http.js
"
;
import
bgBreadcrumb
from
"
@/components/bg-breadcrumb.vue
"
;
import
FeedBack
from
"
../modules/feedback.vue
"
;
import
{
useRouter
}
from
"
vue-router
"
;
import
{
GetRuleTypeOptions
,
dateStringToDate
}
from
"
@/components/env.js
"
;
const
router
=
useRouter
();
const
filter
=
reactive
({
warning_type
:
""
,
key_word
:
""
,
warning_index
:
""
,
risk_level
:
""
,
status
:
""
,
date
:
[],
risk_level
:
""
,
// 风险等级
status
:
""
,
// 状态
time
:
[],
keyword
:
""
,
page
:
1
,
page_size
:
10
,
});
const
tableTotal
=
ref
(
0
);
const
ruleTypeOptions
=
ref
({});
const
filterClear
=
()
=>
{
filter
.
warning_type
=
""
;
filter
.
key_word
=
""
;
filter
.
warning_index
=
""
;
filter
.
risk_level
=
""
;
filter
.
status
=
""
;
filter
.
dat
e
=
[];
filter
.
tim
e
=
[];
filter
.
page_size
=
10
;
filter
.
page
=
1
;
changePage
(
1
);
};
// 重置筛选项
const
statusOptions
=
[
"
全部
"
,
"
待处置
"
,
"
已完成
"
,
"
已关闭
"
];
const
wainingTypeOptions
=
ref
([
{
value
:
""
,
name
:
"
全部
"
,
},
]);
const
wainingIndexOptions
=
ref
([
{
value
:
""
,
name
:
"
全部
"
,
},
]);
const
riskLevelOptions
=
ref
([
{
id
:
""
,
name
:
"
全部
"
,
},
{
id
:
4
,
name
:
"
重大风险
"
,
},
{
id
:
3
,
name
:
"
较大风险
"
,
},
{
id
:
2
,
name
:
"
一般风险
"
,
},
{
id
:
1
,
name
:
"
低风险
"
,
},
]);
// const disposedOptions = ["", "已处置", "已处置"];
const
riskLevels
=
{
""
:
"
全部
"
,
1
:
"
低风险
"
,
2
:
"
一般风险
"
,
3
:
"
较大风险
"
,
4
:
"
重大风险
"
,
};
let
headers
=
reactive
([
{
label
:
"
预警点
"
,
prop
:
"
alert_point
"
,
align
:
"
left
"
,
width
:
180
,
},
{
label
:
"
预警时间
"
,
prop
:
"
alert_
point
"
,
prop
:
"
alert_
time
"
,
align
:
"
left
"
,
width
:
160
,
},
{
label
:
"
预警分类
"
,
prop
:
"
warning_typ
e
"
,
prop
:
"
class_parent_nam
e
"
,
align
:
"
left
"
,
},
{
label
:
"
预警指标
"
,
prop
:
"
warning_index
"
,
prop
:
"
class_name
"
,
align
:
"
left
"
,
},
{
...
...
@@ -188,42 +166,40 @@ let headers = reactive([
},
{
label
:
"
当前报警值
"
,
prop
:
"
current_
alarm_
value
"
,
prop
:
"
current_value
"
,
align
:
"
left
"
,
},
{
label
:
"
预警阀值
"
,
prop
:
"
warn
ing
_threshold
"
,
prop
:
"
warn_threshold
"
,
align
:
"
left
"
,
},
{
label
:
"
推送次数
"
,
prop
:
"
push_
num
"
,
prop
:
"
push_
count
"
,
align
:
"
left
"
,
},
{
label
:
"
最近推送时间
"
,
prop
:
"
push_time
"
,
prop
:
"
last_
push_time
"
,
align
:
"
left
"
,
width
:
160
,
},
{
label
:
"
状态
"
,
prop
:
"
status
"
,
align
:
"
left
"
,
width
:
90
,
},
{
label
:
"
操作
"
,
prop
:
"
operation
"
,
align
:
"
left
"
,
width
:
"
80px
"
,
},
]);
let
rows
=
ref
([
{
alert_point
:
1
,
id
:
1
,
width
:
80
,
fixed
:
"
right
"
,
},
]);
let
rows
=
ref
([]);
const
changeSize
=
(
size
)
=>
{
filter
.
page_size
=
size
;
changePage
(
1
);
...
...
@@ -234,26 +210,23 @@ const changePage = (page) => {
getTableRows
();
};
const
changeSearch
=
(
val
)
=>
{
filter
.
key
_
word
=
val
;
filter
.
keyword
=
val
;
changePage
(
1
);
};
// 表格关键字筛选
const
filterAction
=
()
=>
{
changePage
(
1
);
};
// 查询按钮
onMounted
(()
=>
{
getTableRows
();
});
const
getTableRows
=
async
()
=>
{
let
[
start
Time
=
""
,
endTime
=
""
]
=
filter
.
dat
e
||
[];
let
urlP
arams
=
{
let
[
start
_time
=
""
,
end_time
=
""
]
=
filter
.
tim
e
||
[];
let
p
arams
=
{
...
filter
,
start
T
ime
,
end
T
ime
,
start
_t
ime
,
end
_t
ime
,
};
Reflect
.
deleteProperty
(
urlParams
,
"
dat
e
"
);
axios
.
get
(
"
/v1/api/alert_list/list
"
,
{
params
:
urlParams
}).
then
((
res
)
=>
{
Reflect
.
deleteProperty
(
params
,
"
tim
e
"
);
axios
.
get
(
"
/v1/api/alert_list/list
"
,
{
params
}).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
let
{
list
,
total_count
}
=
res
.
data
.
data
;
rows
.
value
=
list
||
[];
...
...
@@ -270,7 +243,7 @@ const operation = (row) => {
active_row
.
value
=
row
;
visible
.
value
=
true
;
};
const
go
To
=
({
id
})
=>
{
const
go
Detail
=
({
id
})
=>
{
router
.
push
({
path
:
"
/ticket/my-warn-ticket/detail
"
,
query
:
{
...
...
@@ -278,6 +251,13 @@ const goTo = ({ id }) => {
},
});
};
const
getRuleTypeOptions
=
async
()
=>
{
ruleTypeOptions
.
value
=
await
GetRuleTypeOptions
();
getTableRows
();
};
onBeforeMount
(()
=>
{
getRuleTypeOptions
();
});
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
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