Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
SatelliteDigital
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
nijiawen
SatelliteDigital
Commits
e79e30ac
提交
e79e30ac
authored
8月 22, 2025
作者:
刘佳星-公司
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
路由设置和文件对应方便后期修改
上级
92be75d4
显示空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
275 行增加
和
246 行删除
+275
-246
index.vue
src/layout/index.vue
+61
-67
index.js
src/router/index.js
+14
-14
showdetaildate.vue
src/views/areabuildmanage/components/showdetaildate.vue
+42
-39
index.vue
src/views/areabuildmanage/index.vue
+33
-27
index.vue
src/views/areabuildmanage/onefloor/index.vue
+3
-2
index.vue
src/views/areafiremanage/historyfire/index.vue
+52
-29
index.vue
src/views/dashboard/workbench/index.vue
+58
-33
index.vue
src/views/login/index.vue
+12
-35
没有找到文件。
src/layout/index.vue
浏览文件 @
e79e30ac
...
@@ -5,7 +5,8 @@
...
@@ -5,7 +5,8 @@
<div
class=
"tip2"
>
国际花园小区
</div>
<div
class=
"tip2"
>
国际花园小区
</div>
<div
class=
"avatar-container"
v-if=
"useAppStore.isCurUserLogin"
>
<div
class=
"avatar-container"
v-if=
"useAppStore.isCurUserLogin"
>
<el-dropdown>
<el-dropdown>
<el-avatar
shape=
"square"
size=
"large"
:src=
"useAppStoreInstance.userInfo.avatar?useAppStoreInstance.userInfo.avatar: useAppStoreInstance.showavatarUrl"
/>
<el-avatar
shape=
"square"
size=
"large"
:src=
"useAppStoreInstance.userInfo.avatar ? useAppStoreInstance.userInfo.avatar : useAppStoreInstance.showavatarUrl"
/>
<template
#
dropdown
>
<template
#
dropdown
>
<el-dropdown-menu>
<el-dropdown-menu>
<el-dropdown-item
@
click=
"toSatffManage"
>
人员管理
</el-dropdown-item>
<el-dropdown-item
@
click=
"toSatffManage"
>
人员管理
</el-dropdown-item>
...
@@ -20,11 +21,8 @@
...
@@ -20,11 +21,8 @@
<div
class=
"left1"
>
<div
class=
"left1"
>
<div
v-for=
"(item, index) in menuList"
:key=
"index"
class=
"menu-item-container"
>
<div
v-for=
"(item, index) in menuList"
:key=
"index"
class=
"menu-item-container"
>
<div
class=
"menu-wrapper"
>
<div
class=
"menu-wrapper"
>
<div
<div
class=
"submenu-title"
:class=
"isActive(item) ? 'active' : ''"
@
click=
"toggleSubMenu(index)"
>
class=
"submenu-title"
<el-icon
class=
"menu_left-icon"
>
:class=
"isActive(item) ? 'active' : ''"
@
click=
"toggleSubMenu(index)"
>
<el-icon
class=
"menu_left-icon"
>
<img
:src=
"item.icon"
alt=
""
>
<img
:src=
"item.icon"
alt=
""
>
</el-icon>
</el-icon>
<span
class=
"menu-text"
>
{{ item.name }}
</span>
<span
class=
"menu-text"
>
{{ item.name }}
</span>
...
@@ -36,13 +34,9 @@
...
@@ -36,13 +34,9 @@
<transition
name=
"submenu-slide"
>
<transition
name=
"submenu-slide"
>
<div
v-if=
"openMenus[index]"
class=
"submenu-list"
>
<div
v-if=
"openMenus[index]"
class=
"submenu-list"
>
<div
<div
class=
"submenu-item"
@
click=
"handleSubMenuClick(child)"
class=
"submenu-item"
:class=
"isSubMenuActive(child) ? 'active' : ''"
v-for=
"(child, childIndex) in item.children"
@
click=
"handleSubMenuClick(child)"
:key=
"childIndex"
>
:class=
"isSubMenuActive(child) ? 'active' : ''"
v-for=
"(child, childIndex) in item.children"
:key=
"childIndex"
>
{{ child.name }}
{{ child.name }}
</div>
</div>
</div>
</div>
...
@@ -55,9 +49,7 @@
...
@@ -55,9 +49,7 @@
<!-- 面包屑导航 -->
<!-- 面包屑导航 -->
<div
class=
"breadcrumb-container"
>
<div
class=
"breadcrumb-container"
>
<el-breadcrumb
separator=
">"
>
<el-breadcrumb
separator=
">"
>
<el-breadcrumb-item
v-for=
"(crumb, index) in breadcrumbs"
:key=
"index"
<el-breadcrumb-item
v-for=
"(crumb, index) in breadcrumbs"
:key=
"index"
>
>
{{ crumb.name }}
{{ crumb.name }}
</el-breadcrumb-item>
</el-breadcrumb-item>
</el-breadcrumb>
</el-breadcrumb>
...
@@ -65,21 +57,9 @@
...
@@ -65,21 +57,9 @@
<!-- 标签页 -->
<!-- 标签页 -->
<div
class=
"tabs-container"
>
<div
class=
"tabs-container"
>
<el-tabs
<el-tabs
v-model=
"activeTabKey"
type=
"card"
closable
@
tab-remove=
"removeTab"
@
tab-click=
"handleTabClick"
v-model=
"activeTabKey"
class=
"custom-tabs"
>
type=
"card"
<el-tab-pane
v-for=
"tab in tabs"
:key=
"tab.key"
:label=
"tab.label"
:name=
"tab.key"
>
closable
@
tab-remove=
"removeTab"
@
tab-click=
"handleTabClick"
class=
"custom-tabs"
>
<el-tab-pane
v-for=
"tab in tabs"
:key=
"tab.key"
:label=
"tab.label"
:name=
"tab.key"
>
</el-tab-pane>
</el-tab-pane>
</el-tabs>
</el-tabs>
</div>
</div>
...
@@ -87,7 +67,7 @@
...
@@ -87,7 +67,7 @@
<div
class=
"right-content"
>
<div
class=
"right-content"
>
<router-view
v-slot=
"{ Component, route }"
:key=
"$route.fullPath"
>
<router-view
v-slot=
"{ Component, route }"
:key=
"$route.fullPath"
>
<keep-alive>
<keep-alive>
<component
v-if=
"!route.meta.link"
:is=
"Component"
:key=
"route.path"
/>
<component
v-if=
"!route.meta.link"
:is=
"Component"
:key=
"route.path"
/>
</keep-alive>
</keep-alive>
</router-view>
</router-view>
</div>
</div>
...
@@ -115,8 +95,8 @@ const menuList = ref([
...
@@ -115,8 +95,8 @@ const menuList = ref([
path
:
'/analySisPage'
,
path
:
'/analySisPage'
,
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
children
:
[
children
:
[
{
name
:
'分析页'
,
id
:
'analysis'
,
path
:
'/
analysisPage
'
},
{
name
:
'分析页'
,
id
:
'analysis'
,
path
:
'/
dashboard/analysis
'
},
{
name
:
'工作台'
,
id
:
'workbench'
,
path
:
'/
workBenchPage
'
},
{
name
:
'工作台'
,
id
:
'workbench'
,
path
:
'/
dashboard/workbench
'
},
]
]
},
},
{
{
...
@@ -125,7 +105,7 @@ const menuList = ref([
...
@@ -125,7 +105,7 @@ const menuList = ref([
path
:
'/userManage'
,
path
:
'/userManage'
,
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
children
:
[
children
:
[
{
name
:
'用户管理'
,
id
:
'user'
,
path
:
'/
userm
anage'
},
{
name
:
'用户管理'
,
id
:
'user'
,
path
:
'/
systemmanage/staffM
anage'
},
]
]
},
},
{
{
...
@@ -143,8 +123,8 @@ const menuList = ref([
...
@@ -143,8 +123,8 @@ const menuList = ref([
path
:
'/uavDispatch'
,
path
:
'/uavDispatch'
,
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
children
:
[
children
:
[
{
name
:
'无人机调度'
,
id
:
'droneDispatch'
,
path
:
'/uav
dispatch
'
},
{
name
:
'无人机调度'
,
id
:
'droneDispatch'
,
path
:
'/uav
showdate
'
},
{
name
:
'无人机监控'
,
id
:
'droneMonitor'
,
path
:
'/uav
detaildat
e'
}
{
name
:
'无人机监控'
,
id
:
'droneMonitor'
,
path
:
'/uav
showdate/uavmanag
e'
}
]
]
},
},
{
{
...
@@ -154,9 +134,9 @@ const menuList = ref([
...
@@ -154,9 +134,9 @@ const menuList = ref([
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
icon
:
new
URL
(
'../static/image/huo.png'
,
import
.
meta
.
url
).
href
,
children
:
[
children
:
[
{
name
:
'当前火情'
,
id
:
'fireHistory'
,
path
:
'/historyfire'
},
{
name
:
'当前火情'
,
id
:
'fireHistory'
,
path
:
'/
areafiremanage/
historyfire'
},
{
name
:
'上报记录'
,
id
:
'fireRecord'
,
path
:
'/
recordfireinfo
'
},
{
name
:
'上报记录'
,
id
:
'fireRecord'
,
path
:
'/
areafiremanage/firerecord
'
},
{
name
:
'历史火情'
,
id
:
'fireMonitor'
,
path
:
'/firesurveillance'
},
{
name
:
'历史火情'
,
id
:
'fireMonitor'
,
path
:
'/
areafiremanage/
firesurveillance'
},
]
]
},
},
]);
]);
...
@@ -165,7 +145,7 @@ const openMenus = ref([]);
...
@@ -165,7 +145,7 @@ const openMenus = ref([]);
const
breadcrumbs
=
ref
([]);
const
breadcrumbs
=
ref
([]);
const
tabs
=
ref
([]);
const
tabs
=
ref
([]);
const
activeTabKey
=
ref
(
''
);
const
activeTabKey
=
ref
(
''
);
const
lastValidMenuPath
=
ref
(
'/historyfire'
);
// 记录最后一个有效的菜单路径
const
lastValidMenuPath
=
ref
(
'/
areafiremanage/
historyfire'
);
// 记录最后一个有效的菜单路径
// 获取菜单项名称
// 获取菜单项名称
const
getMenuNameByPath
=
(
path
)
=>
{
const
getMenuNameByPath
=
(
path
)
=>
{
...
@@ -271,7 +251,7 @@ const addTab = () => {
...
@@ -271,7 +251,7 @@ const addTab = () => {
const
existingTabIndex
=
tabs
.
value
.
findIndex
(
tab
=>
tab
.
key
===
path
);
const
existingTabIndex
=
tabs
.
value
.
findIndex
(
tab
=>
tab
.
key
===
path
);
const
preTabs
=
ref
(
tabs
.
value
);
const
preTabs
=
ref
(
tabs
.
value
);
console
.
log
(
"existingTabIndexpath----------------12121----------"
,
preTabs
,
"----------"
,
path
,
'----------'
,
tabs
.
value
)
console
.
log
(
"existingTabIndexpath----------------12121----------"
,
preTabs
,
"----------"
,
path
,
'----------'
,
tabs
.
value
)
if
(
existingTabIndex
===
-
1
)
{
if
(
existingTabIndex
===
-
1
)
{
// console.log("existingTabIndexpath--------------------------",tabs.value)
// console.log("existingTabIndexpath--------------------------",tabs.value)
tabs
.
value
.
push
({
tabs
.
value
.
push
({
...
@@ -279,12 +259,12 @@ const addTab = () => {
...
@@ -279,12 +259,12 @@ const addTab = () => {
label
:
getMenuNameByPath
(
path
),
label
:
getMenuNameByPath
(
path
),
path
:
path
path
:
path
});
});
}
else
{
}
else
{
tabs
.
value
=
preTabs
.
value
;
tabs
.
value
=
preTabs
.
value
;
}
}
activeTabKey
.
value
=
path
;
activeTabKey
.
value
=
path
;
console
.
log
(
"existingTabIndexpath---------56555555555555555555-----------------"
,
activeTabKey
.
value
)
console
.
log
(
"existingTabIndexpath---------56555555555555555555-----------------"
,
activeTabKey
.
value
)
};
};
// 初始化标签页
// 初始化标签页
...
@@ -300,13 +280,14 @@ const initTabs = () => {
...
@@ -300,13 +280,14 @@ const initTabs = () => {
// 保存菜单状态
// 保存菜单状态
const
saveMenuState
=
()
=>
{
const
saveMenuState
=
()
=>
{
console
.
log
(
'保存菜单状态'
,
router
.
options
.
history
.
state
.
back
)
console
.
log
(
'保存菜单状态'
,
router
.
options
.
history
.
state
.
back
)
if
(
router
.
options
.
history
.
state
.
back
!==
null
)
{
if
(
router
.
options
.
history
.
state
.
back
!==
null
)
{
const
menuState
=
{
const
menuState
=
{
openMenus
:
openMenus
.
value
,
openMenus
:
openMenus
.
value
,
lastValidMenuPath
:
isPathInMenu
(
router
.
options
.
history
.
state
.
back
)?
router
.
options
.
history
.
state
.
back
:
(
localStorage
.
getItem
(
'lastValidMenuPath'
)),
lastValidMenuPath
:
isPathInMenu
(
router
.
options
.
history
.
state
.
back
)
?
router
.
options
.
history
.
state
.
back
:
(
localStorage
.
getItem
(
'lastValidMenuPath'
)),
};
};
localStorage
.
setItem
(
'menuState'
,
JSON
.
stringify
(
menuState
));}
localStorage
.
setItem
(
'menuState'
,
JSON
.
stringify
(
menuState
));
}
};
};
// 移除标签页
// 移除标签页
...
@@ -361,7 +342,7 @@ const toSatffManage = () => {
...
@@ -361,7 +342,7 @@ const toSatffManage = () => {
const
noremoveItemFn
=
(
data
)
=>
{
const
noremoveItemFn
=
(
data
)
=>
{
const
valueToKeep
=
localStorage
.
getItem
(
data
);
const
valueToKeep
=
localStorage
.
getItem
(
data
);
console
.
log
(
"sdsadadddddd"
,
valueToKeep
)
console
.
log
(
"sdsadadddddd"
,
valueToKeep
)
localStorage
.
clear
();
localStorage
.
clear
();
if
(
valueToKeep
!==
null
)
{
if
(
valueToKeep
!==
null
)
{
localStorage
.
setItem
(
data
,
valueToKeep
);
localStorage
.
setItem
(
data
,
valueToKeep
);
...
@@ -381,9 +362,9 @@ const showavatarUrl = ref('https://cube.elemecdn.com/0/88/03b0d39583f48206768a75
...
@@ -381,9 +362,9 @@ const showavatarUrl = ref('https://cube.elemecdn.com/0/88/03b0d39583f48206768a75
// 初始化
// 初始化
onMounted
(()
=>
{
onMounted
(()
=>
{
nextTick
(()
=>
{
nextTick
(()
=>
{
useAppStoreInstance
.
initavatarUrlFn
()
useAppStoreInstance
.
initavatarUrlFn
()
})
})
// 初始化菜单展开状态
// 初始化菜单展开状态
...
@@ -397,14 +378,14 @@ onMounted(() => {
...
@@ -397,14 +378,14 @@ onMounted(() => {
try
{
try
{
const
parsedState
=
JSON
.
parse
(
savedState
);
const
parsedState
=
JSON
.
parse
(
savedState
);
openMenus
.
value
=
parsedState
.
openMenus
||
openMenus
.
value
;
openMenus
.
value
=
parsedState
.
openMenus
||
openMenus
.
value
;
lastValidMenuPath
.
value
=
parsedState
.
lastValidMenuPath
||
'/historyfire'
;
lastValidMenuPath
.
value
=
parsedState
.
lastValidMenuPath
||
'/
areafiremanage/
historyfire'
;
}
catch
(
e
)
{
}
catch
(
e
)
{
console
.
error
(
'Failed to parse menu state'
,
e
);
console
.
error
(
'Failed to parse menu state'
,
e
);
}
}
}
}
// console.log("currentDisplayPath.value--------------------------",isPathInMenu(route.path))
// console.log("currentDisplayPath.value--------------------------",isPathInMenu(route.path))
if
(
!
isPathInMenu
(
route
.
path
))
{
if
(
!
isPathInMenu
(
route
.
path
))
{
console
.
log
(
"currentDisplayPath.value--------------------------"
,
isPathInMenu
(
route
.
path
),
getCurrentValidPath
(),
JSON
.
parse
(
localStorage
.
getItem
(
'menuState'
)).
lastValidMenuPath
)
console
.
log
(
"currentDisplayPath.value--------------------------"
,
isPathInMenu
(
route
.
path
),
getCurrentValidPath
(),
JSON
.
parse
(
localStorage
.
getItem
(
'menuState'
)).
lastValidMenuPath
)
router
.
replace
(
JSON
.
parse
(
localStorage
.
getItem
(
'menuState'
)).
lastValidMenuPath
);
router
.
replace
(
JSON
.
parse
(
localStorage
.
getItem
(
'menuState'
)).
lastValidMenuPath
);
}
}
// console.log("currentDisplayPath.value--------------------------",isPathInMenu(route.path),getCurrentValidPath())
// console.log("currentDisplayPath.value--------------------------",isPathInMenu(route.path),getCurrentValidPath())
...
@@ -560,7 +541,8 @@ watch(route, () => {
...
@@ -560,7 +541,8 @@ watch(route, () => {
padding
:
0
5px
;
padding
:
0
5px
;
}
}
.menu
,
.submenu-title
{
.menu
,
.submenu-title
{
height
:
56px
;
height
:
56px
;
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
...
@@ -576,24 +558,27 @@ watch(route, () => {
...
@@ -576,24 +558,27 @@ watch(route, () => {
margin
:
0
5px
;
margin
:
0
5px
;
}
}
.menu_left-icon
img
{
.menu_left-icon
img
{
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
object-fit
:
cover
;
object-fit
:
cover
;
}
}
.menu
:hover
,
.submenu-title
:hover
{
.menu
:hover
,
.submenu-title
:hover
{
background
:
rgba
(
5
,
113
,
196
,
0.2
);
background
:
rgba
(
5
,
113
,
196
,
0.2
);
transform
:
translateX
(
3px
);
transform
:
translateX
(
3px
);
}
}
.menu.active
,
.submenu-title.active
{
.menu.active
,
.submenu-title.active
{
background
:
linear-gradient
(
90deg
,
rgba
(
6
,
176
,
225
,
0.25
)
0%
,
rgba
(
5
,
113
,
196
,
0.4
)
100%
);
background
:
linear-gradient
(
90deg
,
rgba
(
6
,
176
,
225
,
0.25
)
0%
,
rgba
(
5
,
113
,
196
,
0.4
)
100%
);
box-shadow
:
0
0
15px
rgba
(
6
,
176
,
225
,
0.25
),
inset
0
0
10px
rgba
(
6
,
176
,
225
,
0.1
);
box-shadow
:
0
0
15px
rgba
(
6
,
176
,
225
,
0.25
),
inset
0
0
10px
rgba
(
6
,
176
,
225
,
0.1
);
}
}
.menu.active
::before
,
.submenu-title.active
::before
{
.menu.active
::before
,
.submenu-title.active
::before
{
content
:
''
;
content
:
''
;
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
...
@@ -605,14 +590,16 @@ watch(route, () => {
...
@@ -605,14 +590,16 @@ watch(route, () => {
box-shadow
:
0
0
10px
rgba
(
6
,
176
,
225
,
0.5
);
box-shadow
:
0
0
10px
rgba
(
6
,
176
,
225
,
0.5
);
}
}
.menu
el-icon
,
.submenu-title
el-icon
{
.menu
el-icon
,
.submenu-title
el-icon
{
font-size
:
20px
;
font-size
:
20px
;
margin-right
:
12px
;
margin-right
:
12px
;
color
:
#9ec8e6
;
color
:
#9ec8e6
;
transition
:
all
0.3s
cubic-bezier
(
0.4
,
0
,
0.2
,
1
);
transition
:
all
0.3s
cubic-bezier
(
0.4
,
0
,
0.2
,
1
);
}
}
.menu
.menu-text
,
.submenu-title
.menu-text
{
.menu
.menu-text
,
.submenu-title
.menu-text
{
color
:
black
;
color
:
black
;
transition
:
all
0.3s
cubic-bezier
(
0.4
,
0
,
0.2
,
1
);
transition
:
all
0.3s
cubic-bezier
(
0.4
,
0
,
0.2
,
1
);
flex
:
1
;
flex
:
1
;
...
@@ -621,7 +608,8 @@ watch(route, () => {
...
@@ -621,7 +608,8 @@ watch(route, () => {
padding-left
:
10%
;
padding-left
:
10%
;
}
}
.menu.active
.menu-text
,
.submenu-title.active
.menu-text
{
.menu.active
.menu-text
,
.submenu-title.active
.menu-text
{
color
:
#ffffff
;
color
:
#ffffff
;
font-weight
:
500
;
font-weight
:
500
;
text-shadow
:
0
0
5px
rgba
(
6
,
176
,
225
,
0.5
);
text-shadow
:
0
0
5px
rgba
(
6
,
176
,
225
,
0.5
);
...
@@ -828,7 +816,8 @@ watch(route, () => {
...
@@ -828,7 +816,8 @@ watch(route, () => {
width
:
220px
;
width
:
220px
;
}
}
.menu
,
.submenu-title
{
.menu
,
.submenu-title
{
height
:
52px
;
height
:
52px
;
}
}
}
}
...
@@ -838,16 +827,19 @@ watch(route, () => {
...
@@ -838,16 +827,19 @@ watch(route, () => {
width
:
80px
;
width
:
80px
;
}
}
.menu-text
,
.arrow-icon
{
.menu-text
,
.arrow-icon
{
display
:
none
;
display
:
none
;
}
}
.menu
,
.submenu-title
{
.menu
,
.submenu-title
{
justify-content
:
center
;
justify-content
:
center
;
padding
:
0
;
padding
:
0
;
}
}
.menu
el-icon
,
.submenu-title
el-icon
{
.menu
el-icon
,
.submenu-title
el-icon
{
margin-right
:
0
;
margin-right
:
0
;
font-size
:
24px
;
font-size
:
24px
;
}
}
...
@@ -889,7 +881,8 @@ watch(route, () => {
...
@@ -889,7 +881,8 @@ watch(route, () => {
width
:
33.33%
;
width
:
33.33%
;
}
}
.menu
,
.submenu-title
{
.menu
,
.submenu-title
{
width
:
100%
;
width
:
100%
;
height
:
50px
;
height
:
50px
;
justify-content
:
center
;
justify-content
:
center
;
...
@@ -902,7 +895,8 @@ watch(route, () => {
...
@@ -902,7 +895,8 @@ watch(route, () => {
font-size
:
12px
;
font-size
:
12px
;
}
}
.menu
el-icon
,
.submenu-title
el-icon
{
.menu
el-icon
,
.submenu-title
el-icon
{
margin-right
:
5px
;
margin-right
:
5px
;
font-size
:
14px
;
font-size
:
14px
;
}
}
...
...
src/router/index.js
浏览文件 @
e79e30ac
...
@@ -103,19 +103,19 @@ export const constantRoutes = [
...
@@ -103,19 +103,19 @@ export const constantRoutes = [
meta
:
{
title
:
'人员管理'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'人员管理'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/
analysisPage
'
,
path
:
'/
dashboard/analysis
'
,
component
:
()
=>
import
(
'../views/dashboard/analysis/index.vue'
),
component
:
()
=>
import
(
'../views/dashboard/analysis/index.vue'
),
name
:
'analySisPage'
,
name
:
'analySisPage'
,
meta
:
{
title
:
'分析页面'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'分析页面'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/
workBenchPage
'
,
path
:
'/
dashboard/workbench
'
,
component
:
()
=>
import
(
'../views/dashboard/workbench/index.vue'
),
component
:
()
=>
import
(
'../views/dashboard/workbench/index.vue'
),
name
:
'WorkbenchPage'
,
name
:
'WorkbenchPage'
,
meta
:
{
title
:
'工作台'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'工作台'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/
userm
anage'
,
path
:
'/
systemmanage/staffM
anage'
,
component
:
()
=>
import
(
'../views/systemmanage/staffManage/index.vue'
),
component
:
()
=>
import
(
'../views/systemmanage/staffManage/index.vue'
),
name
:
'systemManage'
,
name
:
'systemManage'
,
meta
:
{
title
:
'人员管理'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'人员管理'
,
icon
:
'dashboard'
,
affix
:
true
}
...
@@ -127,51 +127,51 @@ export const constantRoutes = [
...
@@ -127,51 +127,51 @@ export const constantRoutes = [
meta
:
{
title
:
'建筑管理'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'建筑管理'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/uav
dispatch
'
,
path
:
'/uav
showdate
'
,
component
:
()
=>
import
(
'../views/uavshowdate/index.vue'
),
component
:
()
=>
import
(
'../views/uavshowdate/index.vue'
),
name
:
'uav
Dispatch
'
,
name
:
'uav
Showdate
'
,
meta
:
{
title
:
'无人机调度'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'无人机调度'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/firesurveillance'
,
path
:
'/
areafiremanage/
firesurveillance'
,
component
:
()
=>
import
(
'../views/areafiremanage/firesurveillance/index.vue'
),
component
:
()
=>
import
(
'../views/areafiremanage/firesurveillance/index.vue'
),
name
:
'fireSurveillance'
,
name
:
'fireSurveillance'
,
meta
:
{
title
:
'历史火情'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'历史火情'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/historyfire'
,
path
:
'/
areafiremanage/
historyfire'
,
component
:
()
=>
import
(
'../views/areafiremanage/historyfire/index.vue'
),
component
:
()
=>
import
(
'../views/areafiremanage/historyfire/index.vue'
),
name
:
'historyFire'
,
name
:
'historyFire'
,
meta
:
{
title
:
'当前火情'
,
icon
:
'dashboard'
,
affix
:
true
},
meta
:
{
title
:
'当前火情'
,
icon
:
'dashboard'
,
affix
:
true
},
},
},
{
{
path
:
'/floordetail
date
'
,
path
:
'/floordetail'
,
component
:
()
=>
import
(
'../views/areafiremanage/historyfire/components/floordetail.vue'
),
component
:
()
=>
import
(
'../views/areafiremanage/historyfire/components/floordetail.vue'
),
name
:
'floorDetail
Date
'
,
name
:
'floorDetail'
,
meta
:
{
title
:
'详细楼层火情'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'详细楼层火情'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/
building
detaildate'
,
path
:
'/
show
detaildate'
,
component
:
()
=>
import
(
'../views/areabuildmanage/components/showdetaildate.vue'
),
component
:
()
=>
import
(
'../views/areabuildmanage/components/showdetaildate.vue'
),
name
:
'
buildingDetailD
ate'
,
name
:
'
showDetaild
ate'
,
meta
:
{
title
:
'楼详细建筑数据'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'楼详细建筑数据'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/
onefloorbuildingdetaildate
'
,
path
:
'/
areabuildmanage/onefloor
'
,
component
:
()
=>
import
(
'../views/areabuildmanage/onefloor/index.vue'
),
component
:
()
=>
import
(
'../views/areabuildmanage/onefloor/index.vue'
),
name
:
'oneFloorBuildingDetailDate'
,
name
:
'oneFloorBuildingDetailDate'
,
meta
:
{
title
:
'层详细建筑数据'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'层详细建筑数据'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/uav
detaildat
e'
,
path
:
'/uav
showdate/uavmanag
e'
,
component
:
()
=>
import
(
'../views/uavshowdate/uavmanage/index.vue'
),
component
:
()
=>
import
(
'../views/uavshowdate/uavmanage/index.vue'
),
name
:
'uavDetailDate'
,
name
:
'uavDetailDate'
,
meta
:
{
title
:
'无人机管理'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'无人机管理'
,
icon
:
'dashboard'
,
affix
:
true
}
},
},
{
{
path
:
'/
recordfireinfo
'
,
path
:
'/
areafiremanage/firerecord
'
,
component
:
()
=>
import
(
'../views/areafiremanage/firerecord/index.vue'
),
component
:
()
=>
import
(
'../views/areafiremanage/firerecord/index.vue'
),
name
:
'recordFireInfo'
,
name
:
'recordFireInfo'
,
meta
:
{
title
:
'火情记录管理'
,
icon
:
'dashboard'
,
affix
:
true
}
meta
:
{
title
:
'火情记录管理'
,
icon
:
'dashboard'
,
affix
:
true
}
...
...
src/views/areabuildmanage/components/showdetaildate.vue
浏览文件 @
e79e30ac
...
@@ -19,8 +19,12 @@
...
@@ -19,8 +19,12 @@
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
>
导入
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
>
导入
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
>
导出
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
>
导出
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleAddInfoFn"
>
新增建筑
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleAddInfoFn"
>
新增建筑
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleRefreshInfoFn"
><el-icon
><RefreshRight
/></el-icon></el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleRefreshInfoFn"
><el-icon>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
><el-icon><FullScreen
/></el-icon></el-button>
<RefreshRight
/>
</el-icon></el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
><el-icon>
<FullScreen
/>
</el-icon></el-button>
</div>
</div>
</div>
</div>
<div
class=
"card-table"
>
<div
class=
"card-table"
>
...
@@ -36,17 +40,16 @@
...
@@ -36,17 +40,16 @@
</el-drawer>
</el-drawer>
<!-- 修改建筑抽屉 -->
<!-- 修改建筑抽屉 -->
<el-drawer
v-model=
"isBuildingEditDrawer"
title=
"修改建筑信息"
:with-header=
"false"
:before-close=
"beforeCloseAddBuildDrawer"
>
<el-drawer
v-model=
"isBuildingEditDrawer"
title=
"修改建筑信息"
:with-header=
"false"
:before-close=
"beforeCloseAddBuildDrawer"
>
<Flooraddbuilding
:rowData=
"rowData"
:isBuildingEditDrawer=
"isBuildingEditDrawer"
@
closeAddDrawer=
"closeBuildingEditDrawer"
@
tableDataRefresh=
"handleRefreshInfoFn"
></Flooraddbuilding>
<Flooraddbuilding
:rowData=
"rowData"
:isBuildingEditDrawer=
"isBuildingEditDrawer"
@
closeAddDrawer=
"closeBuildingEditDrawer"
@
tableDataRefresh=
"handleRefreshInfoFn"
></Flooraddbuilding>
</el-drawer>
</el-drawer>
<!-- 图片预览组件 -->
<!-- 图片预览组件 -->
<el-image-viewer
<el-image-viewer
v-if=
"previewVisible && previewVisibledialogDate.length > 0"
:url-list=
"previewVisibledialogDate"
v-if=
"previewVisible && previewVisibledialogDate.length > 0"
@
close=
"previewVisible = false"
/>
:url-list=
"previewVisibledialogDate"
@
close=
"previewVisible = false"
/>
</div>
</div>
...
@@ -60,15 +63,15 @@ import tabledata from '../../commentcomponents/tabledata/index.vue';
...
@@ -60,15 +63,15 @@ import tabledata from '../../commentcomponents/tabledata/index.vue';
import
useAppStore
from
'../../../store/module/app'
;
import
useAppStore
from
'../../../store/module/app'
;
import
router
from
'../../../router'
;
import
router
from
'../../../router'
;
import
Flooraddbuilding
from
'./flooraddbuilding.vue'
;
import
Flooraddbuilding
from
'./flooraddbuilding.vue'
;
import
{
useRoute
,
useRouter
}
from
'vue-router'
;
import
{
useRoute
,
useRouter
}
from
'vue-router'
;
import
{
floorPageAPI
,
floorRemoveAPI
,
floorGetFloorNoListAPI
}
from
'../../../api/floor'
;
import
{
floorPageAPI
,
floorRemoveAPI
,
floorGetFloorNoListAPI
}
from
'../../../api/floor'
;
const
route
=
useRoute
();
const
route
=
useRoute
();
const
useAppStoreInstance
=
useAppStore
();
const
useAppStoreInstance
=
useAppStore
();
// 搜索栏配置
// 搜索栏配置
const
searchShowData
=
ref
([
const
searchShowData
=
ref
([
{
label
:
'楼层描述'
,
placeholder
:
"请输入"
,
type
:
'input'
,
content
:
''
,
isShow
:
true
},
{
label
:
'楼层描述'
,
placeholder
:
"请输入"
,
type
:
'input'
,
content
:
''
,
isShow
:
true
},
{
label
:
'楼层号'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
click
:
"floorGetFloorNoListFn"
,
content
:
''
,
options
:
[]
,
isShow
:
true
}
{
label
:
'楼层号'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
click
:
"floorGetFloorNoListFn"
,
content
:
''
,
options
:
[],
isShow
:
true
}
]);
]);
...
@@ -101,10 +104,10 @@ const handleAddInfoFn = () => {
...
@@ -101,10 +104,10 @@ const handleAddInfoFn = () => {
const
handleRefreshInfoFn
=
()
=>
{
const
handleRefreshInfoFn
=
()
=>
{
console
.
log
(
"刷新数据"
);
console
.
log
(
"刷新数据"
);
initTableDateFn
({
currentPageNum
:
useAppStoreInstance
.
pageCountInfo
.
currentPageNum
,
currentPageSize
:
useAppStoreInstance
.
pageCountInfo
.
currentPageSize
})
initTableDateFn
({
currentPageNum
:
useAppStoreInstance
.
pageCountInfo
.
currentPageNum
,
currentPageSize
:
useAppStoreInstance
.
pageCountInfo
.
currentPageSize
})
}
}
const
closeAddDrawer
=
()
=>
{
const
closeAddDrawer
=
()
=>
{
console
.
log
(
"000000-------1-----0000000000"
,
isAddDrawer
.
value
)
console
.
log
(
"000000-------1-----0000000000"
,
isAddDrawer
.
value
)
isAddDrawer
.
value
=
false
;
isAddDrawer
.
value
=
false
;
}
}
...
@@ -118,7 +121,7 @@ const beforeCloseAddBuildDrawer = () => {
...
@@ -118,7 +121,7 @@ const beforeCloseAddBuildDrawer = () => {
const
oneBuildingSeeDetails
=
(
data
)
=>
{
const
oneBuildingSeeDetails
=
(
data
)
=>
{
console
.
log
(
"查看详情"
,
data
);
console
.
log
(
"查看详情"
,
data
);
router
.
push
({
router
.
push
({
path
:
'/
onefloorbuildingdetaildate'
,
path
:
'/
areabuildmanage/onefloor'
,
// params: { data: JSON.stringify(data) }
// params: { data: JSON.stringify(data) }
});
});
}
}
...
@@ -129,19 +132,19 @@ const oneBuildingDdeleteData = (data) => {
...
@@ -129,19 +132,19 @@ const oneBuildingDdeleteData = (data) => {
cancelButtonText
:
'取消'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
type
:
'warning'
,
}).
then
(()
=>
{
}).
then
(()
=>
{
console
.
log
(
"删除"
,
data
.
floorId
,
useAppStoreInstance
.
pageCountInfo
.
currentPageNum
);
console
.
log
(
"删除"
,
data
.
floorId
,
useAppStoreInstance
.
pageCountInfo
.
currentPageNum
);
floorRemoveAPI
({
floorId
:
data
.
floorId
}).
then
(
res
=>
{
floorRemoveAPI
({
floorId
:
data
.
floorId
}).
then
(
res
=>
{
console
.
log
(
"删除成功"
,
res
);
console
.
log
(
"删除成功"
,
res
);
})
})
initTableDateFn
({
currentPageNum
:
useAppStoreInstance
.
pageCountInfo
.
currentPageNum
,
currentPageSize
:
useAppStoreInstance
.
pageCountInfo
.
currentPageSize
})
initTableDateFn
({
currentPageNum
:
useAppStoreInstance
.
pageCountInfo
.
currentPageNum
,
currentPageSize
:
useAppStoreInstance
.
pageCountInfo
.
currentPageSize
})
ElMessage
.
success
(
'已删除'
);
ElMessage
.
success
(
'已删除'
);
}).
catch
((
err
)
=>
{
}).
catch
((
err
)
=>
{
ElMessage
.
info
(
'取消删除'
,
err
);
ElMessage
.
info
(
'取消删除'
,
err
);
});
});
}
}
const
oneResetBuildingShowInfo
=
(
data
)
=>
{
const
oneResetBuildingShowInfo
=
(
data
)
=>
{
console
.
log
(
"000000----我执行了oneResetBuildingShowInfo"
,
data
)
console
.
log
(
"000000----我执行了oneResetBuildingShowInfo"
,
data
)
isBuildingEditDrawer
.
value
=
true
;
isBuildingEditDrawer
.
value
=
true
;
rowData
.
value
=
data
;
rowData
.
value
=
data
;
rowData
.
value
.
isEdit
=
true
;
rowData
.
value
.
isEdit
=
true
;
...
@@ -159,10 +162,10 @@ const previewVisibledialogDate = ref([]);
...
@@ -159,10 +162,10 @@ const previewVisibledialogDate = ref([]);
const
seeBuildingFloorPlan
=
(
data
)
=>
{
const
seeBuildingFloorPlan
=
(
data
)
=>
{
console
.
log
(
"查看楼层平面图"
,
data
);
console
.
log
(
"查看楼层平面图"
,
data
);
previewVisible
.
value
=
true
;
previewVisible
.
value
=
true
;
if
(
data
.
floorPlan
)
{
if
(
data
.
floorPlan
)
{
previewVisibledialogDate
.
value
=
[
data
.
floorPlan
]
previewVisibledialogDate
.
value
=
[
data
.
floorPlan
]
return
;
return
;
}
else
{
}
else
{
previewVisibledialogDate
.
value
=
[]
previewVisibledialogDate
.
value
=
[]
ElMessage
.
warning
({
ElMessage
.
warning
({
message
:
'该层暂无楼层平面图'
,
message
:
'该层暂无楼层平面图'
,
...
@@ -175,13 +178,13 @@ const seeBuildingFloorPlan = (data) => {
...
@@ -175,13 +178,13 @@ const seeBuildingFloorPlan = (data) => {
// 表格数据
// 表格数据
const
tableShowData
=
ref
([{
const
tableShowData
=
ref
([{
tableHeader
:
[
tableHeader
:
[
{
label
:
'建筑编号'
,
prop
:
'buildCode'
},
{
label
:
'建筑编号'
,
prop
:
'buildCode'
},
{
label
:
'建筑名称'
,
prop
:
'buildName'
},
{
label
:
'建筑名称'
,
prop
:
'buildName'
},
{
label
:
'建筑层数'
,
prop
:
'floorNo'
},
{
label
:
'建筑层数'
,
prop
:
'floorNo'
},
{
label
:
'楼层平面图'
,
prop
:
'floorPlanSee'
},
{
label
:
'楼层平面图'
,
prop
:
'floorPlanSee'
},
{
label
:
'更新时间'
,
prop
:
'updateTime'
},
{
label
:
'更新时间'
,
prop
:
'updateTime'
},
{
label
:
'楼层描述'
,
prop
:
'description'
},
{
label
:
'楼层描述'
,
prop
:
'description'
},
{
label
:
'操作'
,
prop
:
'Operation'
}
{
label
:
'操作'
,
prop
:
'Operation'
}
],
],
tableBody
:
[]
tableBody
:
[]
}]);
}]);
...
@@ -191,14 +194,14 @@ const containerStyle = computed(() => ({
...
@@ -191,14 +194,14 @@ const containerStyle = computed(() => ({
'--card-spacing'
:
layoutConfig
.
cardSpacing
,
'--card-spacing'
:
layoutConfig
.
cardSpacing
,
}));
}));
const
Operation
=
ref
([
const
Operation
=
ref
([
{
label
:
'查看详情'
,
type
:
'primary'
,
icon
:
'Add'
,
click
:
oneBuildingSeeDetails
},
{
label
:
'查看详情'
,
type
:
'primary'
,
icon
:
'Add'
,
click
:
oneBuildingSeeDetails
},
{
label
:
'删除'
,
type
:
'danger'
,
icon
:
'Delete'
,
click
:
oneBuildingDdeleteData
},
{
label
:
'删除'
,
type
:
'danger'
,
icon
:
'Delete'
,
click
:
oneBuildingDdeleteData
},
{
label
:
'修改'
,
type
:
'primary'
,
icon
:
'EditPen'
,
click
:
oneResetBuildingShowInfo
}
{
label
:
'修改'
,
type
:
'primary'
,
icon
:
'EditPen'
,
click
:
oneResetBuildingShowInfo
}
]);
]);
const
floorPlanSee
=
ref
([
{
label
:
'查看'
,
type
:
'primary'
,
icon
:
'EditPen'
,
click
:
seeBuildingFloorPlan
},
]);
const
floorPlanSee
=
ref
([
{
label
:
'查看'
,
type
:
'primary'
,
icon
:
'EditPen'
,
click
:
seeBuildingFloorPlan
},
]);
const
initTableDateFn
=
(
parameter
)
=>
{
const
initTableDateFn
=
(
parameter
)
=>
{
let
submitData
=
{
currentPageNum
:
parameter
.
currentPageNum
,
currentPageSize
:
parameter
.
currentPageSize
,...
useAppStoreInstance
.
PUSHPARAMETER
};
let
submitData
=
{
currentPageNum
:
parameter
.
currentPageNum
,
currentPageSize
:
parameter
.
currentPageSize
,
...
useAppStoreInstance
.
PUSHPARAMETER
};
floorPageAPI
(
submitData
).
then
(
res
=>
{
floorPageAPI
(
submitData
).
then
(
res
=>
{
console
.
log
(
'获取建筑列表数据返回结果:'
,
res
);
console
.
log
(
'获取建筑列表数据返回结果:'
,
res
);
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
...
@@ -209,7 +212,7 @@ const initTableDateFn = (parameter) => {
...
@@ -209,7 +212,7 @@ const initTableDateFn = (parameter) => {
});
});
list
.
forEach
(
element
=>
{
list
.
forEach
(
element
=>
{
element
.
Operation
=
[...
Operation
.
value
]
element
.
Operation
=
[...
Operation
.
value
]
element
.
floorPlanSee
=
[...
floorPlanSee
.
value
]
element
.
floorPlanSee
=
[...
floorPlanSee
.
value
]
});
});
tableShowData
.
value
[
0
].
tableBody
=
list
tableShowData
.
value
[
0
].
tableBody
=
list
...
@@ -220,8 +223,8 @@ const initTableDateFn = (parameter) => {
...
@@ -220,8 +223,8 @@ const initTableDateFn = (parameter) => {
}
}
// 监听路由变化
// 监听路由变化
watch
(
route
,
()
=>
{
watch
(
route
,
()
=>
{
initTableDateFn
({
currentPageNum
:
1
,
currentPageSize
:
10
})
initTableDateFn
({
currentPageNum
:
1
,
currentPageSize
:
10
})
console
.
log
(
'新增组件已挂载'
,
useAppStoreInstance
.
setParameter
)
console
.
log
(
'新增组件已挂载'
,
useAppStoreInstance
.
setParameter
)
},
{
immediate
:
true
});
},
{
immediate
:
true
});
</
script
>
</
script
>
...
@@ -304,7 +307,7 @@ watch(route, () => {
...
@@ -304,7 +307,7 @@ watch(route, () => {
.card-table
{
.card-table
{
width
:
100%
;
width
:
100%
;
flex
:
1
;
flex
:
1
;
overflow
:
hidden
;
overflow
:
hidden
;
border-radius
:
8px
;
border-radius
:
8px
;
}
}
...
...
src/views/areabuildmanage/index.vue
浏览文件 @
e79e30ac
...
@@ -18,8 +18,12 @@
...
@@ -18,8 +18,12 @@
<div
class=
"card-actions"
>
<div
class=
"card-actions"
>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
>
导出
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
>
导出
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleAddInfoFn"
>
新增建筑
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleAddInfoFn"
>
新增建筑
</el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleRefreshInfoFn"
><el-icon
><RefreshRight
/></el-icon></el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
@
click=
"handleRefreshInfoFn"
><el-icon>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
><el-icon><FullScreen
/></el-icon></el-button>
<RefreshRight
/>
</el-icon></el-button>
<el-button
class=
"operation-button"
type=
"primary"
size=
"small"
><el-icon>
<FullScreen
/>
</el-icon></el-button>
</div>
</div>
</div>
</div>
<div
class=
"card-table"
>
<div
class=
"card-table"
>
...
@@ -35,9 +39,11 @@
...
@@ -35,9 +39,11 @@
</el-drawer>
</el-drawer>
<!-- 修改建筑抽屉 -->
<!-- 修改建筑抽屉 -->
<el-drawer
v-model=
"isBuildingEditDrawer"
title=
"修改用户信息"
:with-header=
"false"
:before-close=
"beforeCloseAddBuildDrawer"
>
<el-drawer
v-model=
"isBuildingEditDrawer"
title=
"修改用户信息"
:with-header=
"false"
:before-close=
"beforeCloseAddBuildDrawer"
>
<showResetBuildingInfo
:rowData=
"rowData"
:isBuildingEditDrawer=
"isBuildingEditDrawer"
@
closeEditDrawer=
"closeBuildingEditDrawer"
@
tableDataRefresh=
"handleRefreshInfoFn"
></showResetBuildingInfo>
<showResetBuildingInfo
:rowData=
"rowData"
:isBuildingEditDrawer=
"isBuildingEditDrawer"
@
closeEditDrawer=
"closeBuildingEditDrawer"
@
tableDataRefresh=
"handleRefreshInfoFn"
></showResetBuildingInfo>
</el-drawer>
</el-drawer>
</div>
</div>
...
@@ -51,17 +57,17 @@ import tabledata from '../commentcomponents/tabledata/index.vue';
...
@@ -51,17 +57,17 @@ import tabledata from '../commentcomponents/tabledata/index.vue';
import
showResetBuildingInfo
from
'./components/showResetBuildingInfo.vue'
;
import
showResetBuildingInfo
from
'./components/showResetBuildingInfo.vue'
;
import
Addbuild
from
'./components/addbuild.vue'
;
import
Addbuild
from
'./components/addbuild.vue'
;
import
router
from
'../../router'
;
import
router
from
'../../router'
;
import
{
buildingPageApi
,
buildingRemoveApi
,
buildingGetBuildCodeListApi
}
from
'../../api/build'
;
import
{
buildingPageApi
,
buildingRemoveApi
,
buildingGetBuildCodeListApi
}
from
'../../api/build'
;
import
{
useRoute
,
useRouter
}
from
'vue-router'
;
import
{
useRoute
,
useRouter
}
from
'vue-router'
;
import
useAppStore
from
'../../store/module/app'
;
import
useAppStore
from
'../../store/module/app'
;
const
useAppStoreInstance
=
useAppStore
();
const
useAppStoreInstance
=
useAppStore
();
const
route
=
useRoute
();
const
route
=
useRoute
();
// 搜索栏配置
// 搜索栏配置
const
searchShowData
=
ref
([
const
searchShowData
=
ref
([
{
label
:
'功能描述'
,
placeholder
:
"请输入"
,
type
:
'input'
,
content
:
''
,
isShow
:
true
},
{
label
:
'功能描述'
,
placeholder
:
"请输入"
,
type
:
'input'
,
content
:
''
,
isShow
:
true
},
{
label
:
'建筑编号'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
content
:
''
,
isShow
:
true
,
click
:
'buildingGetBuildCodeListApiFn'
,
options
:
[]
},
{
label
:
'建筑编号'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
content
:
''
,
isShow
:
true
,
click
:
'buildingGetBuildCodeListApiFn'
,
options
:
[]
},
{
label
:
'建筑层数'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
content
:
''
,
isShow
:
true
,
click
:
'buildingGetTotalFloorNumListFn'
,
options
:
[]
},
{
label
:
'建筑层数'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
content
:
''
,
isShow
:
true
,
click
:
'buildingGetTotalFloorNumListFn'
,
options
:
[]
},
{
label
:
'建筑名称'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
content
:
''
,
isShow
:
true
,
click
:
'buildingGetBuildNameListFn'
,
options
:
[]
},
{
label
:
'建筑名称'
,
placeholder
:
"请选择"
,
type
:
'autocomplete'
,
content
:
''
,
isShow
:
true
,
click
:
'buildingGetBuildNameListFn'
,
options
:
[]
},
]);
]);
...
@@ -101,10 +107,10 @@ const beforeCloseAddBuildDrawer = () => {
...
@@ -101,10 +107,10 @@ const beforeCloseAddBuildDrawer = () => {
const
buildingSeeDetails
=
(
data
)
=>
{
const
buildingSeeDetails
=
(
data
)
=>
{
console
.
log
(
"查看详情"
,
data
);
console
.
log
(
"查看详情"
,
data
);
router
.
push
({
router
.
push
({
path
:
'/
building
detaildate'
,
path
:
'/
show
detaildate'
,
});
});
useAppStoreInstance
.
setPushParameter
({
buildId
:
data
.
buildId
})
useAppStoreInstance
.
setPushParameter
({
buildId
:
data
.
buildId
})
}
}
const
buildingDdeleteData
=
(
data
)
=>
{
const
buildingDdeleteData
=
(
data
)
=>
{
...
@@ -116,7 +122,7 @@ const buildingDdeleteData = (data) => {
...
@@ -116,7 +122,7 @@ const buildingDdeleteData = (data) => {
.
then
(()
=>
{
.
then
(()
=>
{
try
{
try
{
// 用户点击「确认」
// 用户点击「确认」
const
{
buildId
,
buildName
}
=
data
;
const
{
buildId
,
buildName
}
=
data
;
buildingRemoveApi
({
buildId
:
buildId
})
buildingRemoveApi
({
buildId
:
buildId
})
.
then
(
res
=>
{
.
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
...
@@ -131,7 +137,7 @@ const buildingDdeleteData = (data) => {
...
@@ -131,7 +137,7 @@ const buildingDdeleteData = (data) => {
ElMessage
.
error
(
err
?.
message
||
'删除请求失败'
);
ElMessage
.
error
(
err
?.
message
||
'删除请求失败'
);
});
});
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
error
(
error
,
'API 请求失败'
);
console
.
error
(
error
,
'API 请求失败'
);
}
}
})
})
...
@@ -145,7 +151,7 @@ const resetBuildingShowInfo = (data) => {
...
@@ -145,7 +151,7 @@ const resetBuildingShowInfo = (data) => {
isBuildingEditDrawer
.
value
=
true
;
isBuildingEditDrawer
.
value
=
true
;
rowData
.
value
=
data
;
rowData
.
value
=
data
;
console
.
log
(
"000000------------0000000000"
,
rowData
.
value
)
console
.
log
(
"000000------------0000000000"
,
rowData
.
value
)
}
}
const
closeBuildingEditDrawer
=
()
=>
{
const
closeBuildingEditDrawer
=
()
=>
{
...
@@ -155,12 +161,12 @@ const closeBuildingEditDrawer = () => {
...
@@ -155,12 +161,12 @@ const closeBuildingEditDrawer = () => {
// 表格数据
// 表格数据
const
tableShowData
=
ref
([{
const
tableShowData
=
ref
([{
tableHeader
:
[
tableHeader
:
[
{
label
:
'建筑编号'
,
prop
:
'buildCode'
},
{
label
:
'建筑编号'
,
prop
:
'buildCode'
},
{
label
:
'建筑名称'
,
prop
:
'buildName'
},
{
label
:
'建筑名称'
,
prop
:
'buildName'
},
{
label
:
'建筑层数'
,
prop
:
'totalFloorNum'
},
{
label
:
'建筑层数'
,
prop
:
'totalFloorNum'
},
{
label
:
'火情次数'
,
prop
:
'fireNum'
},
{
label
:
'火情次数'
,
prop
:
'fireNum'
},
{
label
:
'更新时间'
,
prop
:
'updateTime'
},
{
label
:
'更新时间'
,
prop
:
'updateTime'
},
{
label
:
'操作'
,
prop
:
'Operation'
}
{
label
:
'操作'
,
prop
:
'Operation'
}
],
],
tableBody
:
[]
tableBody
:
[]
}]);
}]);
...
@@ -174,13 +180,13 @@ const Operation = ref([
...
@@ -174,13 +180,13 @@ const Operation = ref([
// });
// });
const
initTableDateFn
=
()
=>
{
const
initTableDateFn
=
()
=>
{
console
.
log
(
'初始化数据'
);
console
.
log
(
'初始化数据'
);
buildingPageApi
({
currentPageNum
:
1
,
currentPageSize
:
10
}).
then
(
res
=>
{
buildingPageApi
({
currentPageNum
:
1
,
currentPageSize
:
10
}).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
let
{
list
,
total
,
pageSize
}
=
res
.
data
;
let
{
list
,
total
,
pageSize
}
=
res
.
data
;
if
(
!
list
)
{
if
(
!
list
)
{
ElMessage
.
warning
(
'建筑列表暂无数据,请先添加建筑数据'
);
ElMessage
.
warning
(
'建筑列表暂无数据,请先添加建筑数据'
);
}
else
{
}
else
{
tableShowData
.
value
[
0
].
tableBody
=
[]
tableShowData
.
value
[
0
].
tableBody
=
[]
list
=
list
.
filter
(
element
=>
{
list
=
list
.
filter
(
element
=>
{
return
element
.
isDeleted
===
0
;
return
element
.
isDeleted
===
0
;
...
@@ -291,7 +297,7 @@ const containerStyle = computed(() => ({
...
@@ -291,7 +297,7 @@ const containerStyle = computed(() => ({
.card-table
{
.card-table
{
width
:
100%
;
width
:
100%
;
flex
:
1
;
flex
:
1
;
overflow
:
hidden
;
overflow
:
hidden
;
border-radius
:
8px
;
border-radius
:
8px
;
}
}
...
...
src/views/areabuildmanage/onefloor/index.vue
浏览文件 @
e79e30ac
...
@@ -10,7 +10,8 @@
...
@@ -10,7 +10,8 @@
<div
class=
"card-table"
>
<div
class=
"card-table"
>
<onefloorbuildingdetaildate></onefloorbuildingdetaildate>
<onefloorbuildingdetaildate>
</areabuildmanage
/onefloor
>
</div>
</div>
</div>
</div>
...
@@ -24,7 +25,7 @@
...
@@ -24,7 +25,7 @@
<
script
setup
>
<
script
setup
>
import
{
reactive
,
computed
,
ref
,
onMounted
}
from
'vue'
;
import
{
reactive
,
computed
,
ref
,
onMounted
}
from
'vue'
;
// import searchtop from '../../commentcomponents/searchtop/index.vue';
// import searchtop from '../../commentcomponents/searchtop/index.vue';
import
onefloorbuildingdetaildate
from
'../components/
onefloorbuildingdetaildate
.vue'
import
onefloorbuildingdetaildate
from
'../components/
areabuildmanage/onefloor
.vue'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
ElMessage
,
ElMessageBox
}
from
'element-plus'
import
{
staffGetPageInfoApi
}
from
"../../../api/staff.js"
import
{
staffGetPageInfoApi
}
from
"../../../api/staff.js"
...
...
src/views/areafiremanage/historyfire/index.vue
浏览文件 @
e79e30ac
...
@@ -9,10 +9,10 @@
...
@@ -9,10 +9,10 @@
<!-- 左侧下部分:统计区域 -->
<!-- 左侧下部分:统计区域 -->
<div
class=
"info-card stats-alerts"
>
<div
class=
"info-card stats-alerts"
>
<div
class=
"card-tong card-show"
>
<div
class=
"card-tong card-show"
>
<currentFire
:currentFireData=
"currentFireData"
></currentFire>
<currentFire
:currentFireData=
"currentFireData"
></currentFire>
</div>
</div>
<div
class=
"card-tong"
>
<div
class=
"card-tong"
>
</div>
</div>
...
@@ -29,7 +29,7 @@ import currentFire from './components/currentFirecard.vue';
...
@@ -29,7 +29,7 @@ import currentFire from './components/currentFirecard.vue';
// import uav from '../components/uav.vue';
// import uav from '../components/uav.vue';
// import meanList from '../components/menuList.vue';
// import meanList from '../components/menuList.vue';
import
useAppStore
from
'../../../store/module/app'
;
import
useAppStore
from
'../../../store/module/app'
;
import
{
useRouter
,
useRoute
}
from
'vue-router'
;
import
{
useRouter
,
useRoute
}
from
'vue-router'
;
const
useAppStoreInstance
=
useAppStore
();
const
useAppStoreInstance
=
useAppStore
();
const
curruserInfo
=
computed
(()
=>
(
useAppStoreInstance
.
userInfo
));
const
curruserInfo
=
computed
(()
=>
(
useAppStoreInstance
.
userInfo
));
...
@@ -93,28 +93,28 @@ const currentFireData = ref([
...
@@ -93,28 +93,28 @@ const currentFireData = ref([
// 定义一个uavRepairData的ref,里面包含了多个无人机维修数据
// 定义一个uavRepairData的ref,里面包含了多个无人机维修数据
const
uavRepairData
=
ref
([
const
uavRepairData
=
ref
([
// 第一个无人机维修数据,已经维修
// 第一个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第二个无人机维修数据,已经维修
// 第二个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第三个无人机维修数据,未维修
// 第三个无人机维修数据,未维修
{
isRepaid
:
false
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
false
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第四个无人机维修数据,已经维修
// 第四个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第五个无人机维修数据,未维修
// 第五个无人机维修数据,未维修
{
isRepaid
:
false
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
false
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第六个无人机维修数据,已经维修
// 第六个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
])
])
const
menuItems
=
ref
([
const
menuItems
=
ref
([
{
name
:
'首页'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
analysisPage
'
},
{
name
:
'首页'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
dashboard/analysis
'
},
{
name
:
'系统管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
userm
anage'
},
{
name
:
'系统管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
systemmanage/staffM
anage'
},
{
name
:
'建筑管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/areabuildmanage'
},
{
name
:
'建筑管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/areabuildmanage'
},
{
name
:
'无人机管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/uav
dispatch
'
},
{
name
:
'无人机管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/uav
showdate
'
},
{
name
:
'火情管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/firesurveillance'
},
{
name
:
'火情管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
areafiremanage/
firesurveillance'
},
{
name
:
'数字孪生管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/digital-twin'
},
{
name
:
'数字孪生管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/digital-twin'
},
{
name
:
'个人信息'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
userm
anage'
}
{
name
:
'个人信息'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
systemmanage/staffM
anage'
}
]);
]);
// 响应式配置
// 响应式配置
const
layoutConfig
=
reactive
({
const
layoutConfig
=
reactive
({
...
@@ -131,7 +131,7 @@ const containerStyle = computed(() => ({
...
@@ -131,7 +131,7 @@ const containerStyle = computed(() => ({
}));
}));
onMounted
(()
=>
{
onMounted
(()
=>
{
nextTick
(()
=>
{
nextTick
(()
=>
{
useAppStoreInstance
.
initavatarUrlFn
()
useAppStoreInstance
.
initavatarUrlFn
()
})
})
});
});
...
@@ -171,7 +171,8 @@ watch(route, () => {
...
@@ -171,7 +171,8 @@ watch(route, () => {
.left-top
{
.left-top
{
display
:
flex
;
display
:
flex
;
height
:
auto
;
/* 取消固定高度,改为内容自适应 */
height
:
auto
;
/* 取消固定高度,改为内容自适应 */
}
}
/* 通用卡片样式 */
/* 通用卡片样式 */
...
@@ -186,7 +187,8 @@ watch(route, () => {
...
@@ -186,7 +187,8 @@ watch(route, () => {
/* 用户信息卡片 */
/* 用户信息卡片 */
.region-overview
{
.region-overview
{
flex
:
1
;
flex
:
1
;
min-width
:
200px
;
/* 确保最小宽度 */
min-width
:
200px
;
/* 确保最小宽度 */
}
}
/* 用户信息布局 */
/* 用户信息布局 */
...
@@ -208,8 +210,9 @@ watch(route, () => {
...
@@ -208,8 +210,9 @@ watch(route, () => {
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
center
;
justify-content
:
center
;
min-width
:
150px
;
/* 确保最小宽度 */
min-width
:
150px
;
background-color
:
rgba
(
100
,
149
,
237
,
0.30
);
/* 确保最小宽度 */
background-color
:
rgba
(
100
,
149
,
237
,
0.30
);
}
}
...
@@ -218,12 +221,27 @@ watch(route, () => {
...
@@ -218,12 +221,27 @@ watch(route, () => {
}
}
@keyframes
infiniteRotate
{
@keyframes
infiniteRotate
{
0
%
{
transform
:
rotate
(
0deg
);
}
0
%
{
25
%
{
transform
:
rotate
(
45deg
);
}
transform
:
rotate
(
0deg
);
50
%
{
transform
:
rotate
(
0deg
);
}
}
75
%
{
transform
:
rotate
(
-45deg
);
}
100
%
{
transform
:
rotate
(
0deg
);
}
25
%
{
transform
:
rotate
(
45deg
);
}
50
%
{
transform
:
rotate
(
0deg
);
}
75
%
{
transform
:
rotate
(
-45deg
);
}
100
%
{
transform
:
rotate
(
0deg
);
}
}
}
.region-map
span
{
.region-map
span
{
margin-left
:
0.5rem
;
margin-left
:
0.5rem
;
font-weight
:
500
;
font-weight
:
500
;
...
@@ -246,12 +264,14 @@ watch(route, () => {
...
@@ -246,12 +264,14 @@ watch(route, () => {
box-shadow
:
2px
0
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
2px
0
rgba
(
0
,
0
,
0
,
0.1
);
overflow
:
auto
;
overflow
:
auto
;
}
}
.card-show
{
.card-show
{
flex
:
0.5
;
flex
:
0.5
;
}
}
.card-tong-large
{
.card-tong-large
{
flex
:
2
;
/* 第三个方块宽度是其他两个的两倍 */
flex
:
2
;
/* 第三个方块宽度是其他两个的两倍 */
}
}
/* 响应式适配 */
/* 响应式适配 */
...
@@ -260,7 +280,8 @@ watch(route, () => {
...
@@ -260,7 +280,8 @@ watch(route, () => {
flex-direction
:
column
;
flex-direction
:
column
;
}
}
.region-overview
,
.region-map
{
.region-overview
,
.region-map
{
width
:
100%
;
width
:
100%
;
flex
:
none
;
flex
:
none
;
}
}
...
@@ -273,7 +294,8 @@ watch(route, () => {
...
@@ -273,7 +294,8 @@ watch(route, () => {
.card-tong-large
{
.card-tong-large
{
flex
:
none
;
flex
:
none
;
height
:
150px
;
/* 在移动端保持高度 */
height
:
150px
;
/* 在移动端保持高度 */
}
}
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/dashboard/workbench/index.vue
浏览文件 @
e79e30ac
...
@@ -9,31 +9,34 @@
...
@@ -9,31 +9,34 @@
<!-- 区域信息概览 -->
<!-- 区域信息概览 -->
<div
class=
"info-card region-overview"
>
<div
class=
"info-card region-overview"
>
<div
class=
"info-grid"
>
<div
class=
"info-grid"
>
<el-avatar
shape=
"square"
size=
"large"
:src=
"useAppStoreInstance.userInfo.avatar?useAppStoreInstance.userInfo.avatar: useAppStoreInstance.showavatarUrl"
/>
<el-avatar
shape=
"square"
size=
"large"
:src=
"useAppStoreInstance.userInfo.avatar ? useAppStoreInstance.userInfo.avatar : useAppStoreInstance.showavatarUrl"
/>
<div
class=
"info-item"
>
<div
class=
"info-item"
>
<span>
{{
useAppStoreInstance
.
userInfo
.
name
}}
</span>
<span>
{{
useAppStoreInstance
.
userInfo
.
name
}}
</span>
<span>
{{
useAppStoreInstance
.
position
[
useAppStoreInstance
.
userInfo
.
role
]
}}
</span>
<span>
{{
useAppStoreInstance
.
position
[
useAppStoreInstance
.
userInfo
.
role
]
}}
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 待办事项卡片 -->
<!-- 待办事项卡片 -->
<div
class=
"info-card region-map"
>
<div
class=
"info-card region-map"
>
<el-icon
class=
"menu_left-icon"
style=
"color: #6495ed;"
size=
"20"
><BellFilled
/></el-icon>
<el-icon
class=
"menu_left-icon"
style=
"color: #6495ed;"
size=
"20"
>
<BellFilled
/>
</el-icon>
<span>
12 待办事项
</span>
<span>
12 待办事项
</span>
</div>
</div>
</div>
</div>
<!-- 左侧下部分:统计区域 -->
<!-- 左侧下部分:统计区域 -->
<div
class=
"info-card stats-alerts"
>
<div
class=
"info-card stats-alerts"
>
<div
class=
"card-tong"
>
<div
class=
"card-tong"
>
<currentFire
:currentFireData=
"currentFireData"
></currentFire>
<currentFire
:currentFireData=
"currentFireData"
></currentFire>
</div>
</div>
<div
class=
"card-tong"
>
<div
class=
"card-tong"
>
<uav
:uavRepairData=
"uavRepairData"
></uav>
<uav
:uavRepairData=
"uavRepairData"
></uav>
</div>
</div>
<div
class=
"card-tong card-tong-large"
>
<div
class=
"card-tong card-tong-large"
>
<meanList
:menuItems=
"menuItems"
></meanList>
<meanList
:menuItems=
"menuItems"
></meanList>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -48,7 +51,7 @@ import currentFire from '../components/currentFire.vue';
...
@@ -48,7 +51,7 @@ import currentFire from '../components/currentFire.vue';
import
uav
from
'../components/uav.vue'
;
import
uav
from
'../components/uav.vue'
;
import
meanList
from
'../components/menuList.vue'
;
import
meanList
from
'../components/menuList.vue'
;
import
useAppStore
from
'../../../store/module/app'
;
import
useAppStore
from
'../../../store/module/app'
;
import
{
useRouter
,
useRoute
}
from
'vue-router'
;
import
{
useRouter
,
useRoute
}
from
'vue-router'
;
const
useAppStoreInstance
=
useAppStore
();
const
useAppStoreInstance
=
useAppStore
();
const
curruserInfo
=
computed
(()
=>
(
useAppStoreInstance
.
userInfo
));
const
curruserInfo
=
computed
(()
=>
(
useAppStoreInstance
.
userInfo
));
...
@@ -118,28 +121,28 @@ const currentFireData = ref([
...
@@ -118,28 +121,28 @@ const currentFireData = ref([
// 定义一个uavRepairData的ref,里面包含了多个无人机维修数据
// 定义一个uavRepairData的ref,里面包含了多个无人机维修数据
const
uavRepairData
=
ref
([
const
uavRepairData
=
ref
([
// 第一个无人机维修数据,已经维修
// 第一个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第二个无人机维修数据,已经维修
// 第二个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第三个无人机维修数据,未维修
// 第三个无人机维修数据,未维修
{
isRepaid
:
false
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
false
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第四个无人机维修数据,已经维修
// 第四个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第五个无人机维修数据,未维修
// 第五个无人机维修数据,未维修
{
isRepaid
:
false
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
false
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
// 第六个无人机维修数据,已经维修
// 第六个无人机维修数据,已经维修
{
isRepaid
:
true
,
uavRepairSetailData
:[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},{
label
:
"型号"
,
value
:
'小型无人机'
},{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
{
isRepaid
:
true
,
uavRepairSetailData
:
[{
label
:
"无人机编号"
,
value
:
'无人机1号'
},
{
label
:
"上报时间"
,
value
:
'2025年8月7日 11:14'
},
{
label
:
"型号"
,
value
:
'小型无人机'
},
{
label
:
"维护类型"
,
value
:
'更换电池'
}]
},
])
])
const
menuItems
=
ref
([
const
menuItems
=
ref
([
{
name
:
'首页'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
analysisPage
'
},
{
name
:
'首页'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
dashboard/analysis
'
},
{
name
:
'系统管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
userm
anage'
},
{
name
:
'系统管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
systemmanage/staffM
anage'
},
{
name
:
'建筑管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/areabuildmanage'
},
{
name
:
'建筑管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/areabuildmanage'
},
{
name
:
'无人机管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/uav
dispatch
'
},
{
name
:
'无人机管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/uav
showdate
'
},
{
name
:
'火情管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/firesurveillance'
},
{
name
:
'火情管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
areafiremanage/
firesurveillance'
},
{
name
:
'数字孪生管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/digital-twin'
},
{
name
:
'数字孪生管理'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/digital-twin'
},
{
name
:
'个人信息'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
userm
anage'
}
{
name
:
'个人信息'
,
icon
:
new
URL
(
'../../../static/image/huo.png'
,
import
.
meta
.
url
),
path
:
'/
systemmanage/staffM
anage'
}
]);
]);
// 响应式配置
// 响应式配置
const
layoutConfig
=
reactive
({
const
layoutConfig
=
reactive
({
...
@@ -156,7 +159,7 @@ const containerStyle = computed(() => ({
...
@@ -156,7 +159,7 @@ const containerStyle = computed(() => ({
}));
}));
onMounted
(()
=>
{
onMounted
(()
=>
{
nextTick
(()
=>
{
nextTick
(()
=>
{
useAppStoreInstance
.
initavatarUrlFn
()
useAppStoreInstance
.
initavatarUrlFn
()
})
})
});
});
...
@@ -196,7 +199,8 @@ watch(route, () => {
...
@@ -196,7 +199,8 @@ watch(route, () => {
.left-top
{
.left-top
{
display
:
flex
;
display
:
flex
;
height
:
auto
;
/* 取消固定高度,改为内容自适应 */
height
:
auto
;
/* 取消固定高度,改为内容自适应 */
}
}
/* 通用卡片样式 */
/* 通用卡片样式 */
...
@@ -211,7 +215,8 @@ watch(route, () => {
...
@@ -211,7 +215,8 @@ watch(route, () => {
/* 用户信息卡片 */
/* 用户信息卡片 */
.region-overview
{
.region-overview
{
flex
:
1
;
flex
:
1
;
min-width
:
200px
;
/* 确保最小宽度 */
min-width
:
200px
;
/* 确保最小宽度 */
}
}
/* 用户信息布局 */
/* 用户信息布局 */
...
@@ -233,8 +238,9 @@ watch(route, () => {
...
@@ -233,8 +238,9 @@ watch(route, () => {
display
:
flex
;
display
:
flex
;
align-items
:
center
;
align-items
:
center
;
justify-content
:
center
;
justify-content
:
center
;
min-width
:
150px
;
/* 确保最小宽度 */
min-width
:
150px
;
background-color
:
rgba
(
100
,
149
,
237
,
0.30
);
/* 确保最小宽度 */
background-color
:
rgba
(
100
,
149
,
237
,
0.30
);
}
}
...
@@ -243,12 +249,27 @@ watch(route, () => {
...
@@ -243,12 +249,27 @@ watch(route, () => {
}
}
@keyframes
infiniteRotate
{
@keyframes
infiniteRotate
{
0
%
{
transform
:
rotate
(
0deg
);
}
0
%
{
25
%
{
transform
:
rotate
(
45deg
);
}
transform
:
rotate
(
0deg
);
50
%
{
transform
:
rotate
(
0deg
);
}
}
75
%
{
transform
:
rotate
(
-45deg
);
}
100
%
{
transform
:
rotate
(
0deg
);
}
25
%
{
transform
:
rotate
(
45deg
);
}
50
%
{
transform
:
rotate
(
0deg
);
}
75
%
{
transform
:
rotate
(
-45deg
);
}
100
%
{
transform
:
rotate
(
0deg
);
}
}
}
.region-map
span
{
.region-map
span
{
margin-left
:
0.5rem
;
margin-left
:
0.5rem
;
font-weight
:
500
;
font-weight
:
500
;
...
@@ -273,7 +294,8 @@ watch(route, () => {
...
@@ -273,7 +294,8 @@ watch(route, () => {
}
}
.card-tong-large
{
.card-tong-large
{
flex
:
2
;
/* 第三个方块宽度是其他两个的两倍 */
flex
:
2
;
/* 第三个方块宽度是其他两个的两倍 */
}
}
/* 响应式适配 */
/* 响应式适配 */
...
@@ -282,7 +304,8 @@ watch(route, () => {
...
@@ -282,7 +304,8 @@ watch(route, () => {
flex-direction
:
column
;
flex-direction
:
column
;
}
}
.region-overview
,
.region-map
{
.region-overview
,
.region-map
{
width
:
100%
;
width
:
100%
;
flex
:
none
;
flex
:
none
;
}
}
...
@@ -295,7 +318,8 @@ watch(route, () => {
...
@@ -295,7 +318,8 @@ watch(route, () => {
.card-tong-large
{
.card-tong-large
{
flex
:
none
;
flex
:
none
;
height
:
150px
;
/* 在移动端保持高度 */
height
:
150px
;
/* 在移动端保持高度 */
}
}
}
}
</
style
>
</
style
>
\ No newline at end of file
src/views/login/index.vue
浏览文件 @
e79e30ac
...
@@ -18,33 +18,15 @@
...
@@ -18,33 +18,15 @@
<h2
class=
"welcome-text"
>
欢迎回来
</h2>
<h2
class=
"welcome-text"
>
欢迎回来
</h2>
<p
class=
"login-desc"
>
请输入您的账号和密码登录
</p>
<p
class=
"login-desc"
>
请输入您的账号和密码登录
</p>
<el-form
<el-form
ref=
"formref"
:model=
"form"
:rules=
"rules"
class=
"login-form"
>
ref=
"formref"
:model=
"form"
:rules=
"rules"
class=
"login-form"
>
<el-form-item
prop=
"phone"
>
<el-form-item
prop=
"phone"
>
<el-input
<el-input
v-model=
"form.phone"
placeholder=
"输入手机号码"
prefix-icon=
"Phone"
clearable
class=
"custom-input"
v-model=
"form.phone"
@
keyup
.
enter=
"commit"
/>
placeholder=
"输入手机号码"
prefix-icon=
"Phone"
clearable
class=
"custom-input"
@
keyup
.
enter=
"commit"
/>
</el-form-item>
</el-form-item>
<el-form-item
prop=
"password"
>
<el-form-item
prop=
"password"
>
<el-input
<el-input
v-model=
"form.password"
placeholder=
"输入密码"
type=
"password"
prefix-icon=
"Lock"
clearable
v-model=
"form.password"
class=
"custom-input"
@
keyup
.
enter=
"commit"
/>
placeholder=
"输入密码"
type=
"password"
prefix-icon=
"Lock"
clearable
class=
"custom-input"
@
keyup
.
enter=
"commit"
/>
</el-form-item>
</el-form-item>
<div
class=
"form-options"
>
<div
class=
"form-options"
>
...
@@ -52,12 +34,7 @@
...
@@ -52,12 +34,7 @@
<el-button
type=
"text"
class=
"forgot-password"
>
忘记密码?
</el-button>
<el-button
type=
"text"
class=
"forgot-password"
>
忘记密码?
</el-button>
</div>
</div>
<el-button
<el-button
type=
"primary"
class=
"login-button"
@
click=
"commit"
:loading=
"loginLoading"
>
type=
"primary"
class=
"login-button"
@
click=
"commit"
:loading=
"loginLoading"
>
登录
登录
</el-button>
</el-button>
</el-form>
</el-form>
...
@@ -112,14 +89,14 @@ const commit = () => {
...
@@ -112,14 +89,14 @@ const commit = () => {
console
.
log
(
res
,
'测试'
);
console
.
log
(
res
,
'测试'
);
if
(
res
.
code
===
200
)
{
if
(
res
.
code
===
200
)
{
setToken
(
res
.
data
.
token
);
setToken
(
res
.
data
.
token
);
let
{
phone
,
id
,
name
,
avatarUrl
,
role
,
status
}
=
res
.
data
.
user
;
let
{
phone
,
id
,
name
,
avatarUrl
,
role
,
status
}
=
res
.
data
.
user
;
// console.log('phone, id,name,avatarUrl ,role',useAppStoreInstance.userInfo);
// console.log('phone, id,name,avatarUrl ,role',useAppStoreInstance.userInfo);
localStorage
.
setItem
(
'user'
,
JSON
.
stringify
({
phone
,
id
,
name
,
avatarUrl
,
role
,
status
}));
localStorage
.
setItem
(
'user'
,
JSON
.
stringify
({
phone
,
id
,
name
,
avatarUrl
,
role
,
status
}));
useAppStoreInstance
.
userInfo
=
(
{
phone
,
id
,
name
,
avatarUrl
,
role
,
status
})
useAppStoreInstance
.
userInfo
=
(
{
phone
,
id
,
name
,
avatarUrl
,
role
,
status
})
console
.
log
(
'phone, id,name,avatarUrl ,role'
,
useAppStoreInstance
.
userInfo
);
console
.
log
(
'phone, id,name,avatarUrl ,role'
,
useAppStoreInstance
.
userInfo
);
localStorage
.
setItem
(
'lastValidMenuPath'
,
'/home'
)
localStorage
.
setItem
(
'lastValidMenuPath'
,
'/home'
)
// localStorage.setItem('saveMenuState',JSON.stringify({lastValidMenuPath:'/home',openMenus:[true,null,null,null,null]}))
// localStorage.setItem('saveMenuState',JSON.stringify({lastValidMenuPath:'/home',openMenus:[true,null,null,null,null]}))
if
(
rememberMe
.
value
)
{
if
(
rememberMe
.
value
)
{
localStorage
.
setItem
(
'rememberedAccount'
,
form
.
phone
);
localStorage
.
setItem
(
'rememberedAccount'
,
form
.
phone
);
...
@@ -127,7 +104,7 @@ const commit = () => {
...
@@ -127,7 +104,7 @@ const commit = () => {
localStorage
.
removeItem
(
'rememberedAccount'
);
localStorage
.
removeItem
(
'rememberedAccount'
);
}
}
localStorage
.
setItem
(
'menu'
,
1
);
// 默认选中工作台
localStorage
.
setItem
(
'menu'
,
1
);
// 默认选中工作台
router
.
replace
({
path
:
'/
analysisPage
'
});
router
.
replace
({
path
:
'/
dashboard/analysis
'
});
ElMessage
.
success
(
'登录成功!'
);
ElMessage
.
success
(
'登录成功!'
);
}
else
{
}
else
{
ElMessage
.
error
(
res
.
message
||
'登录失败,请检查账号密码'
);
ElMessage
.
error
(
res
.
message
||
'登录失败,请检查账号密码'
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论