提交 e79e30ac authored 作者: 刘佳星-公司's avatar 刘佳星-公司

路由设置和文件对应方便后期修改

上级 92be75d4
差异被折叠。
......@@ -103,19 +103,19 @@ export const constantRoutes = [
meta: { title: '人员管理', icon: 'dashboard', affix: true }
},
{
path: '/analysisPage',
path: '/dashboard/analysis',
component: () => import('../views/dashboard/analysis/index.vue'),
name: 'analySisPage',
meta: { title: '分析页面', icon: 'dashboard', affix: true }
},
{
path: '/workBenchPage',
path: '/dashboard/workbench',
component: () => import('../views/dashboard/workbench/index.vue'),
name: 'WorkbenchPage',
meta: { title: '工作台', icon: 'dashboard', affix: true }
},
{
path: '/usermanage',
path: '/systemmanage/staffManage',
component: () => import('../views/systemmanage/staffManage/index.vue'),
name: 'systemManage',
meta: { title: '人员管理', icon: 'dashboard', affix: true }
......@@ -127,51 +127,51 @@ export const constantRoutes = [
meta: { title: '建筑管理', icon: 'dashboard', affix: true }
},
{
path: '/uavdispatch',
path: '/uavshowdate',
component: () => import('../views/uavshowdate/index.vue'),
name: 'uavDispatch',
name: 'uavShowdate',
meta: { title: '无人机调度', icon: 'dashboard', affix: true }
},
{
path: '/firesurveillance',
path: '/areafiremanage/firesurveillance',
component: () => import('../views/areafiremanage/firesurveillance/index.vue'),
name: 'fireSurveillance',
meta: { title: '历史火情', icon: 'dashboard', affix: true }
},
{
path: '/historyfire',
path: '/areafiremanage/historyfire',
component: () => import('../views/areafiremanage/historyfire/index.vue'),
name: 'historyFire',
meta: { title: '当前火情', icon: 'dashboard', affix: true },
},
{
path: '/floordetaildate',
path: '/floordetail',
component: () => import('../views/areafiremanage/historyfire/components/floordetail.vue'),
name: 'floorDetailDate',
name: 'floorDetail',
meta: { title: '详细楼层火情', icon: 'dashboard', affix: true }
},
{
path: '/buildingdetaildate',
path: '/showdetaildate',
component: () => import('../views/areabuildmanage/components/showdetaildate.vue'),
name: 'buildingDetailDate',
name: 'showDetaildate',
meta: { title: '楼详细建筑数据', icon: 'dashboard', affix: true }
},
{
path: '/onefloorbuildingdetaildate',
path: '/areabuildmanage/onefloor',
component: () => import('../views/areabuildmanage/onefloor/index.vue'),
name: 'oneFloorBuildingDetailDate',
meta: { title: '层详细建筑数据', icon: 'dashboard', affix: true }
},
{
path: '/uavdetaildate',
path: '/uavshowdate/uavmanage',
component: () => import('../views/uavshowdate/uavmanage/index.vue'),
name: 'uavDetailDate',
meta: { title: '无人机管理', icon: 'dashboard', affix: true }
},
{
path: '/recordfireinfo',
path: '/areafiremanage/firerecord',
component: () => import('../views/areafiremanage/firerecord/index.vue'),
name: 'recordFireInfo',
meta: { title: '火情记录管理', icon: 'dashboard', affix: true }
......
......@@ -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" @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"><el-icon><FullScreen /></el-icon></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"><el-icon>
<FullScreen />
</el-icon></el-button>
</div>
</div>
<div class="card-table">
......@@ -36,17 +40,16 @@
</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-image-viewer
v-if="previewVisible && previewVisibledialogDate.length > 0"
:url-list="previewVisibledialogDate"
@close="previewVisible = false"
/>
<el-image-viewer v-if="previewVisible && previewVisibledialogDate.length > 0" :url-list="previewVisibledialogDate"
@close="previewVisible = false" />
</div>
......@@ -60,15 +63,15 @@ import tabledata from '../../commentcomponents/tabledata/index.vue';
import useAppStore from '../../../store/module/app';
import router from '../../../router';
import Flooraddbuilding from './flooraddbuilding.vue';
import { useRoute,useRouter } from 'vue-router';
import { floorPageAPI,floorRemoveAPI,floorGetFloorNoListAPI} from '../../../api/floor';
import { useRoute, useRouter } from 'vue-router';
import { floorPageAPI, floorRemoveAPI, floorGetFloorNoListAPI } from '../../../api/floor';
const route = useRoute();
const useAppStoreInstance = useAppStore();
// 搜索栏配置
const searchShowData = ref([
{ label: '楼层描述', placeholder: "请输入", type: 'input', content: '',isShow: true },
{ label: '楼层号', placeholder: "请选择", type: 'autocomplete',click:"floorGetFloorNoListFn", content: '', options: [] ,isShow: true}
{ label: '楼层描述', placeholder: "请输入", type: 'input', content: '', isShow: true },
{ label: '楼层号', placeholder: "请选择", type: 'autocomplete', click: "floorGetFloorNoListFn", content: '', options: [], isShow: true }
]);
......@@ -101,10 +104,10 @@ const handleAddInfoFn = () => {
const handleRefreshInfoFn = () => {
console.log("刷新数据");
initTableDateFn({currentPageNum:useAppStoreInstance.pageCountInfo.currentPageNum,currentPageSize:useAppStoreInstance.pageCountInfo.currentPageSize})
initTableDateFn({ currentPageNum: useAppStoreInstance.pageCountInfo.currentPageNum, currentPageSize: useAppStoreInstance.pageCountInfo.currentPageSize })
}
const closeAddDrawer = () => {
console.log("000000-------1-----0000000000",isAddDrawer.value)
console.log("000000-------1-----0000000000", isAddDrawer.value)
isAddDrawer.value = false;
}
......@@ -118,7 +121,7 @@ const beforeCloseAddBuildDrawer = () => {
const oneBuildingSeeDetails = (data) => {
console.log("查看详情", data);
router.push({
path: '/onefloorbuildingdetaildate',
path: '/areabuildmanage/onefloor',
// params: { data: JSON.stringify(data) }
});
}
......@@ -129,19 +132,19 @@ const oneBuildingDdeleteData = (data) => {
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
console.log("删除", data.floorId,useAppStoreInstance.pageCountInfo.currentPageNum);
floorRemoveAPI({floorId:data.floorId}).then(res => {
console.log("删除", data.floorId, useAppStoreInstance.pageCountInfo.currentPageNum);
floorRemoveAPI({ floorId: data.floorId }).then(res => {
console.log("删除成功", res);
})
initTableDateFn({currentPageNum:useAppStoreInstance.pageCountInfo.currentPageNum,currentPageSize:useAppStoreInstance.pageCountInfo.currentPageSize})
initTableDateFn({ currentPageNum: useAppStoreInstance.pageCountInfo.currentPageNum, currentPageSize: useAppStoreInstance.pageCountInfo.currentPageSize })
ElMessage.success('已删除');
}).catch((err) => {
ElMessage.info('取消删除',err);
ElMessage.info('取消删除', err);
});
}
const oneResetBuildingShowInfo = (data) => {
console.log("000000----我执行了oneResetBuildingShowInfo",data)
console.log("000000----我执行了oneResetBuildingShowInfo", data)
isBuildingEditDrawer.value = true;
rowData.value = data;
rowData.value.isEdit = true;
......@@ -159,10 +162,10 @@ const previewVisibledialogDate = ref([]);
const seeBuildingFloorPlan = (data) => {
console.log("查看楼层平面图", data);
previewVisible.value = true;
if(data.floorPlan) {
if (data.floorPlan) {
previewVisibledialogDate.value = [data.floorPlan]
return;
}else {
} else {
previewVisibledialogDate.value = []
ElMessage.warning({
message: '该层暂无楼层平面图',
......@@ -175,13 +178,13 @@ const seeBuildingFloorPlan = (data) => {
// 表格数据
const tableShowData = ref([{
tableHeader: [
{label: '建筑编号', prop: 'buildCode'},
{label: '建筑名称', prop: 'buildName'},
{label: '建筑层数', prop: 'floorNo'},
{label: '楼层平面图', prop: 'floorPlanSee'},
{label: '更新时间', prop: 'updateTime'},
{label: '楼层描述', prop: 'description'},
{label: '操作', prop: 'Operation'}
{ label: '建筑编号', prop: 'buildCode' },
{ label: '建筑名称', prop: 'buildName' },
{ label: '建筑层数', prop: 'floorNo' },
{ label: '楼层平面图', prop: 'floorPlanSee' },
{ label: '更新时间', prop: 'updateTime' },
{ label: '楼层描述', prop: 'description' },
{ label: '操作', prop: 'Operation' }
],
tableBody: []
}]);
......@@ -191,14 +194,14 @@ const containerStyle = computed(() => ({
'--card-spacing': layoutConfig.cardSpacing,
}));
const Operation = ref([
{label:'查看详情', type:'primary', icon:'Add', click: oneBuildingSeeDetails},
{label:'删除', type:'danger', icon:'Delete', click: oneBuildingDdeleteData},
{label:'修改', type:'primary', icon:'EditPen', click: oneResetBuildingShowInfo}
{ label: '查看详情', type: 'primary', icon: 'Add', click: oneBuildingSeeDetails },
{ label: '删除', type: 'danger', icon: 'Delete', click: oneBuildingDdeleteData },
{ 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) => {
let submitData = {currentPageNum: parameter.currentPageNum, currentPageSize: parameter.currentPageSize,...useAppStoreInstance.PUSHPARAMETER};
let submitData = { currentPageNum: parameter.currentPageNum, currentPageSize: parameter.currentPageSize, ...useAppStoreInstance.PUSHPARAMETER };
floorPageAPI(submitData).then(res => {
console.log('获取建筑列表数据返回结果:', res);
if (res.code === 200) {
......@@ -209,7 +212,7 @@ const initTableDateFn = (parameter) => {
});
list.forEach(element => {
element.Operation = [...Operation.value]
element.floorPlanSee =[...floorPlanSee.value]
element.floorPlanSee = [...floorPlanSee.value]
});
tableShowData.value[0].tableBody = list
......@@ -220,8 +223,8 @@ const initTableDateFn = (parameter) => {
}
// 监听路由变化
watch(route, () => {
initTableDateFn({currentPageNum: 1, currentPageSize: 10})
console.log('新增组件已挂载',useAppStoreInstance.setParameter)
initTableDateFn({ currentPageNum: 1, currentPageSize: 10 })
console.log('新增组件已挂载', useAppStoreInstance.setParameter)
}, { immediate: true });
</script>
......@@ -304,7 +307,7 @@ watch(route, () => {
.card-table {
width: 100%;
flex:1;
flex: 1;
overflow: hidden;
border-radius: 8px;
}
......
......@@ -18,8 +18,12 @@
<div class="card-actions">
<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="handleRefreshInfoFn"><el-icon ><RefreshRight /></el-icon></el-button>
<el-button class="operation-button" type="primary" size="small"><el-icon><FullScreen /></el-icon></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"><el-icon>
<FullScreen />
</el-icon></el-button>
</div>
</div>
<div class="card-table">
......@@ -35,9 +39,11 @@
</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>
</div>
......@@ -51,17 +57,17 @@ import tabledata from '../commentcomponents/tabledata/index.vue';
import showResetBuildingInfo from './components/showResetBuildingInfo.vue';
import Addbuild from './components/addbuild.vue';
import router from '../../router';
import { buildingPageApi,buildingRemoveApi,buildingGetBuildCodeListApi } from '../../api/build';
import { useRoute,useRouter } from 'vue-router';
import { buildingPageApi, buildingRemoveApi, buildingGetBuildCodeListApi } from '../../api/build';
import { useRoute, useRouter } from 'vue-router';
import useAppStore from '../../store/module/app';
const useAppStoreInstance = useAppStore();
const route = useRoute();
// 搜索栏配置
const searchShowData = ref([
{ 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:'buildingGetTotalFloorNumListFn', options: [] },
{ label: '建筑名称', placeholder: "请选择", type: 'autocomplete', content: '',isShow: true, click:'buildingGetBuildNameListFn', options: [] },
{ 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: 'buildingGetTotalFloorNumListFn', options: [] },
{ label: '建筑名称', placeholder: "请选择", type: 'autocomplete', content: '', isShow: true, click: 'buildingGetBuildNameListFn', options: [] },
]);
......@@ -101,10 +107,10 @@ const beforeCloseAddBuildDrawer = () => {
const buildingSeeDetails = (data) => {
console.log("查看详情", data);
router.push({
path: '/buildingdetaildate',
path: '/showdetaildate',
});
useAppStoreInstance.setPushParameter({buildId:data.buildId})
useAppStoreInstance.setPushParameter({ buildId: data.buildId })
}
const buildingDdeleteData = (data) => {
......@@ -116,7 +122,7 @@ const buildingDdeleteData = (data) => {
.then(() => {
try {
// 用户点击「确认」
const {buildId,buildName} = data;
const { buildId, buildName } = data;
buildingRemoveApi({ buildId: buildId })
.then(res => {
if (res.code === 200) {
......@@ -131,7 +137,7 @@ const buildingDdeleteData = (data) => {
ElMessage.error(err?.message || '删除请求失败');
});
} catch (error) {
console.error(error,'API 请求失败');
console.error(error, 'API 请求失败');
}
})
......@@ -145,7 +151,7 @@ const resetBuildingShowInfo = (data) => {
isBuildingEditDrawer.value = true;
rowData.value = data;
console.log("000000------------0000000000",rowData.value)
console.log("000000------------0000000000", rowData.value)
}
const closeBuildingEditDrawer = () => {
......@@ -155,12 +161,12 @@ const closeBuildingEditDrawer = () => {
// 表格数据
const tableShowData = ref([{
tableHeader: [
{label: '建筑编号', prop: 'buildCode'},
{label: '建筑名称', prop: 'buildName'},
{label: '建筑层数', prop: 'totalFloorNum'},
{label: '火情次数', prop: 'fireNum'},
{label: '更新时间', prop: 'updateTime'},
{label: '操作', prop: 'Operation'}
{ label: '建筑编号', prop: 'buildCode' },
{ label: '建筑名称', prop: 'buildName' },
{ label: '建筑层数', prop: 'totalFloorNum' },
{ label: '火情次数', prop: 'fireNum' },
{ label: '更新时间', prop: 'updateTime' },
{ label: '操作', prop: 'Operation' }
],
tableBody: []
}]);
......@@ -174,13 +180,13 @@ const Operation = ref([
// });
const initTableDateFn = () => {
console.log('初始化数据');
buildingPageApi({currentPageNum: 1, currentPageSize: 10}).then(res => {
if(res.code === 200){
buildingPageApi({ currentPageNum: 1, currentPageSize: 10 }).then(res => {
if (res.code === 200) {
let {list ,total,pageSize} = res.data;
if(!list){
let { list, total, pageSize } = res.data;
if (!list) {
ElMessage.warning('建筑列表暂无数据,请先添加建筑数据');
}else{
} else {
tableShowData.value[0].tableBody = []
list = list.filter(element => {
return element.isDeleted === 0;
......@@ -291,7 +297,7 @@ const containerStyle = computed(() => ({
.card-table {
width: 100%;
flex:1;
flex: 1;
overflow: hidden;
border-radius: 8px;
}
......
......@@ -10,7 +10,8 @@
<div class="card-table">
<onefloorbuildingdetaildate></onefloorbuildingdetaildate>
<onefloorbuildingdetaildate>
</areabuildmanage /onefloor>
</div>
</div>
......@@ -24,7 +25,7 @@
<script setup>
import { reactive, computed, ref, onMounted } from '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 { staffGetPageInfoApi } from "../../../api/staff.js"
......
......@@ -9,10 +9,10 @@
<!-- 左侧下部分:统计区域 -->
<div class="info-card stats-alerts">
<div class="card-tong card-show" >
<currentFire :currentFireData="currentFireData" ></currentFire>
<div class="card-tong card-show">
<currentFire :currentFireData="currentFireData"></currentFire>
</div>
<div class="card-tong" >
<div class="card-tong">
</div>
......@@ -29,7 +29,7 @@ import currentFire from './components/currentFirecard.vue';
// import uav from '../components/uav.vue';
// import meanList from '../components/menuList.vue';
import useAppStore from '../../../store/module/app';
import { useRouter,useRoute } from 'vue-router';
import { useRouter, useRoute } from 'vue-router';
const useAppStoreInstance = useAppStore();
const curruserInfo = computed(() => (useAppStoreInstance.userInfo));
......@@ -93,28 +93,28 @@ const currentFireData = ref([
// 定义一个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([
{ 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: '/usermanage' },
{ 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: '/systemmanage/staffManage' },
{ 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: '/uavdispatch' },
{ 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: '/uavshowdate' },
{ 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: '/usermanage' }
{ name: '个人信息', icon: new URL('../../../static/image/huo.png', import.meta.url), path: '/systemmanage/staffManage' }
]);
// 响应式配置
const layoutConfig = reactive({
......@@ -131,7 +131,7 @@ const containerStyle = computed(() => ({
}));
onMounted(() => {
nextTick (()=>{
nextTick(() => {
useAppStoreInstance.initavatarUrlFn()
})
});
......@@ -171,7 +171,8 @@ watch(route, () => {
.left-top {
display: flex;
height: auto; /* 取消固定高度,改为内容自适应 */
height: auto;
/* 取消固定高度,改为内容自适应 */
}
/* 通用卡片样式 */
......@@ -186,7 +187,8 @@ watch(route, () => {
/* 用户信息卡片 */
.region-overview {
flex: 1;
min-width: 200px; /* 确保最小宽度 */
min-width: 200px;
/* 确保最小宽度 */
}
/* 用户信息布局 */
......@@ -208,8 +210,9 @@ watch(route, () => {
display: flex;
align-items: center;
justify-content: center;
min-width: 150px; /* 确保最小宽度 */
background-color: rgba(100,149,237,0.30);
min-width: 150px;
/* 确保最小宽度 */
background-color: rgba(100, 149, 237, 0.30);
}
......@@ -218,12 +221,27 @@ watch(route, () => {
}
@keyframes infiniteRotate {
0% { transform: rotate(0deg); }
25% { transform: rotate(45deg); }
50% { transform: rotate(0deg); }
75% { transform: rotate(-45deg); }
100% { transform: rotate(0deg); }
0% {
transform: rotate(0deg);
}
25% {
transform: rotate(45deg);
}
50% {
transform: rotate(0deg);
}
75% {
transform: rotate(-45deg);
}
100% {
transform: rotate(0deg);
}
}
.region-map span {
margin-left: 0.5rem;
font-weight: 500;
......@@ -246,12 +264,14 @@ watch(route, () => {
box-shadow: 2px 0 rgba(0, 0, 0, 0.1);
overflow: auto;
}
.card-show{
.card-show {
flex: 0.5;
}
.card-tong-large {
flex: 2; /* 第三个方块宽度是其他两个的两倍 */
flex: 2;
/* 第三个方块宽度是其他两个的两倍 */
}
/* 响应式适配 */
......@@ -260,7 +280,8 @@ watch(route, () => {
flex-direction: column;
}
.region-overview, .region-map {
.region-overview,
.region-map {
width: 100%;
flex: none;
}
......@@ -273,7 +294,8 @@ watch(route, () => {
.card-tong-large {
flex: none;
height: 150px; /* 在移动端保持高度 */
height: 150px;
/* 在移动端保持高度 */
}
}
</style>
\ No newline at end of file
......@@ -9,31 +9,34 @@
<!-- 区域信息概览 -->
<div class="info-card region-overview">
<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">
<span>{{useAppStoreInstance.userInfo.name}}</span>
<span>{{useAppStoreInstance.position[useAppStoreInstance.userInfo.role]}}</span>
<span>{{ useAppStoreInstance.userInfo.name }}</span>
<span>{{ useAppStoreInstance.position[useAppStoreInstance.userInfo.role] }}</span>
</div>
</div>
</div>
<!-- 待办事项卡片 -->
<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>
</div>
</div>
<!-- 左侧下部分:统计区域 -->
<div class="info-card stats-alerts">
<div class="card-tong" >
<div class="card-tong">
<currentFire :currentFireData="currentFireData"></currentFire>
</div>
<div class="card-tong" >
<div class="card-tong">
<uav :uavRepairData="uavRepairData"></uav>
</div>
<div class="card-tong card-tong-large" >
<meanList :menuItems="menuItems" ></meanList>
<div class="card-tong card-tong-large">
<meanList :menuItems="menuItems"></meanList>
</div>
</div>
</div>
......@@ -48,7 +51,7 @@ import currentFire from '../components/currentFire.vue';
import uav from '../components/uav.vue';
import meanList from '../components/menuList.vue';
import useAppStore from '../../../store/module/app';
import { useRouter,useRoute } from 'vue-router';
import { useRouter, useRoute } from 'vue-router';
const useAppStoreInstance = useAppStore();
const curruserInfo = computed(() => (useAppStoreInstance.userInfo));
......@@ -118,28 +121,28 @@ const currentFireData = ref([
// 定义一个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([
{ 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: '/usermanage' },
{ 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: '/systemmanage/staffManage' },
{ 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: '/uavdispatch' },
{ 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: '/uavshowdate' },
{ 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: '/usermanage' }
{ name: '个人信息', icon: new URL('../../../static/image/huo.png', import.meta.url), path: '/systemmanage/staffManage' }
]);
// 响应式配置
const layoutConfig = reactive({
......@@ -156,7 +159,7 @@ const containerStyle = computed(() => ({
}));
onMounted(() => {
nextTick (()=>{
nextTick(() => {
useAppStoreInstance.initavatarUrlFn()
})
});
......@@ -196,7 +199,8 @@ watch(route, () => {
.left-top {
display: flex;
height: auto; /* 取消固定高度,改为内容自适应 */
height: auto;
/* 取消固定高度,改为内容自适应 */
}
/* 通用卡片样式 */
......@@ -211,7 +215,8 @@ watch(route, () => {
/* 用户信息卡片 */
.region-overview {
flex: 1;
min-width: 200px; /* 确保最小宽度 */
min-width: 200px;
/* 确保最小宽度 */
}
/* 用户信息布局 */
......@@ -233,8 +238,9 @@ watch(route, () => {
display: flex;
align-items: center;
justify-content: center;
min-width: 150px; /* 确保最小宽度 */
background-color: rgba(100,149,237,0.30);
min-width: 150px;
/* 确保最小宽度 */
background-color: rgba(100, 149, 237, 0.30);
}
......@@ -243,12 +249,27 @@ watch(route, () => {
}
@keyframes infiniteRotate {
0% { transform: rotate(0deg); }
25% { transform: rotate(45deg); }
50% { transform: rotate(0deg); }
75% { transform: rotate(-45deg); }
100% { transform: rotate(0deg); }
0% {
transform: rotate(0deg);
}
25% {
transform: rotate(45deg);
}
50% {
transform: rotate(0deg);
}
75% {
transform: rotate(-45deg);
}
100% {
transform: rotate(0deg);
}
}
.region-map span {
margin-left: 0.5rem;
font-weight: 500;
......@@ -273,7 +294,8 @@ watch(route, () => {
}
.card-tong-large {
flex: 2; /* 第三个方块宽度是其他两个的两倍 */
flex: 2;
/* 第三个方块宽度是其他两个的两倍 */
}
/* 响应式适配 */
......@@ -282,7 +304,8 @@ watch(route, () => {
flex-direction: column;
}
.region-overview, .region-map {
.region-overview,
.region-map {
width: 100%;
flex: none;
}
......@@ -295,7 +318,8 @@ watch(route, () => {
.card-tong-large {
flex: none;
height: 150px; /* 在移动端保持高度 */
height: 150px;
/* 在移动端保持高度 */
}
}
</style>
\ No newline at end of file
......@@ -18,33 +18,15 @@
<h2 class="welcome-text">欢迎回来</h2>
<p class="login-desc">请输入您的账号和密码登录</p>
<el-form
ref="formref"
:model="form"
:rules="rules"
class="login-form"
>
<el-form ref="formref" :model="form" :rules="rules" class="login-form">
<el-form-item prop="phone">
<el-input
v-model="form.phone"
placeholder="输入手机号码"
prefix-icon="Phone"
clearable
class="custom-input"
@keyup.enter="commit"
/>
<el-input v-model="form.phone" placeholder="输入手机号码" prefix-icon="Phone" clearable class="custom-input"
@keyup.enter="commit" />
</el-form-item>
<el-form-item prop="password">
<el-input
v-model="form.password"
placeholder="输入密码"
type="password"
prefix-icon="Lock"
clearable
class="custom-input"
@keyup.enter="commit"
/>
<el-input v-model="form.password" placeholder="输入密码" type="password" prefix-icon="Lock" clearable
class="custom-input" @keyup.enter="commit" />
</el-form-item>
<div class="form-options">
......@@ -52,12 +34,7 @@
<el-button type="text" class="forgot-password">忘记密码?</el-button>
</div>
<el-button
type="primary"
class="login-button"
@click="commit"
:loading="loginLoading"
>
<el-button type="primary" class="login-button" @click="commit" :loading="loginLoading">
登录
</el-button>
</el-form>
......@@ -112,14 +89,14 @@ const commit = () => {
console.log(res, '测试');
if (res.code === 200) {
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);
localStorage.setItem('user', JSON.stringify({ phone, id,name,avatarUrl ,role,status}));
useAppStoreInstance.userInfo = ( {phone, id,name,avatarUrl ,role,status})
console.log('phone, id,name,avatarUrl ,role',useAppStoreInstance.userInfo);
localStorage.setItem('user', JSON.stringify({ phone, id, name, avatarUrl, role, status }));
useAppStoreInstance.userInfo = ({ phone, id, name, avatarUrl, role, status })
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]}))
if (rememberMe.value) {
localStorage.setItem('rememberedAccount', form.phone);
......@@ -127,7 +104,7 @@ const commit = () => {
localStorage.removeItem('rememberedAccount');
}
localStorage.setItem('menu', 1); // 默认选中工作台
router.replace({ path: '/analysisPage' });
router.replace({ path: '/dashboard/analysis' });
ElMessage.success('登录成功!');
} else {
ElMessage.error(res.message || '登录失败,请检查账号密码');
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论