feat:人员管理页面跳转
This commit is contained in:
1 parent
ddc7465294
commit
8b6f39e880
9 files changed
+130
-60
No files matched your search
@@ -1,8 +1,9 @@
|
||||
<template>
|
||||
<div class="h100" v-show="!isTagsViewCurrenFull">
|
||||
<div v-if="!isFromPanel" class="h100" v-show="!isTagsViewCurrenFull">
|
||||
<el-aside class="layout-aside" :class="setCollapseStyle" v-if="setShowAside">
|
||||
<Logo v-if="setShowLogo" />
|
||||
<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef" @mouseenter="onAsideEnterLeave(true)" @mouseleave="onAsideEnterLeave(false)">
|
||||
<el-scrollbar class="flex-auto" ref="layoutAsideScrollbarRef" @mouseenter="onAsideEnterLeave(true)"
|
||||
@mouseleave="onAsideEnterLeave(false)">
|
||||
<Vertical :menuList="state.menuList" />
|
||||
</el-scrollbar>
|
||||
</el-aside>
|
||||
@@ -10,15 +11,16 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="layoutAside">
|
||||
import {computed, defineAsyncComponent, onBeforeMount, reactive, ref, watch} from 'vue';
|
||||
import {storeToRefs} from 'pinia';
|
||||
import { computed, defineAsyncComponent, onBeforeMount, reactive, ref, watch } from 'vue';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import pinia from '/@/stores/index';
|
||||
import {useRoutesList} from '/@/stores/routesList';
|
||||
import {useThemeConfig} from '/@/stores/themeConfig';
|
||||
import {useTagsViewRoutes} from '/@/stores/tagsViewRoutes';
|
||||
import { useRoutesList } from '/@/stores/routesList';
|
||||
import { useThemeConfig } from '/@/stores/themeConfig';
|
||||
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
|
||||
import mittBus from '/@/utils/mitt';
|
||||
import {useI18n} from 'vue-i18n';
|
||||
import {useRoute} from "vue-router";
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRoute } from "vue-router";
|
||||
import { usePanel } from "/@/stores/panel"
|
||||
|
||||
// 引入组件
|
||||
const Logo = defineAsyncComponent(() => import('/@/layout/logo/index.vue'));
|
||||
@@ -37,6 +39,9 @@ const state = reactive<AsideState>({
|
||||
clientWidth: 0,
|
||||
});
|
||||
|
||||
const storesPanel = usePanel()
|
||||
const { isFromPanel } = storeToRefs(storesPanel);
|
||||
|
||||
// 设置菜单展开/收起时的宽度
|
||||
const setCollapseStyle = computed(() => {
|
||||
const { layout, isCollapse, menuBar } = themeConfig.value;
|
||||
@@ -64,13 +69,13 @@ const setCollapseStyle = computed(() => {
|
||||
? isCollapse
|
||||
? 'layout-aside-pc-1'
|
||||
: locale.value === 'en'
|
||||
? 'layout-aside-pc-250'
|
||||
: 'layout-aside-pc-220'
|
||||
? 'layout-aside-pc-250'
|
||||
: 'layout-aside-pc-220'
|
||||
: isCollapse
|
||||
? 'layout-aside-pc-64'
|
||||
: locale.value === 'en'
|
||||
? 'layout-aside-pc-250'
|
||||
: 'layout-aside-pc-220',
|
||||
? 'layout-aside-pc-64'
|
||||
: locale.value === 'en'
|
||||
? 'layout-aside-pc-250'
|
||||
: 'layout-aside-pc-220',
|
||||
];
|
||||
}
|
||||
});
|
||||
@@ -78,12 +83,12 @@ const setCollapseStyle = computed(() => {
|
||||
const route = useRoute();
|
||||
// 设置是否显示左侧菜单栏
|
||||
const setShowAside = computed(() => {
|
||||
let { layout } = themeConfig.value;
|
||||
if(layout !== 'classic'){
|
||||
return true
|
||||
}
|
||||
// 首页不显示侧边栏
|
||||
return route.path !== '/home'
|
||||
let { layout } = themeConfig.value;
|
||||
if (layout !== 'classic') {
|
||||
return true
|
||||
}
|
||||
// 首页不显示侧边栏
|
||||
return route.path !== '/home'
|
||||
});
|
||||
|
||||
// 设置显示/隐藏 logo
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-header class="layout-header" v-show="!isTagsViewCurrenFull">
|
||||
<el-header v-if="!isFromPanel" class="layout-header" v-show="!isTagsViewCurrenFull">
|
||||
<NavBarsIndex />
|
||||
</el-header>
|
||||
</template>
|
||||
@@ -8,6 +8,7 @@
|
||||
import { defineAsyncComponent } from 'vue';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
|
||||
import { usePanel } from "/@/stores/panel"
|
||||
|
||||
// 引入组件
|
||||
const NavBarsIndex = defineAsyncComponent(() => import('/@/layout/navBars/index.vue'));
|
||||
@@ -15,4 +16,7 @@ const NavBarsIndex = defineAsyncComponent(() => import('/@/layout/navBars/index.
|
||||
// 定义变量内容
|
||||
const storesTagsViewRoutes = useTagsViewRoutes();
|
||||
const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
|
||||
|
||||
const storesPanel = usePanel()
|
||||
const { isFromPanel } = storeToRefs(storesPanel);
|
||||
</script>
|
||||
@@ -1,16 +1,13 @@
|
||||
<template>
|
||||
<el-main class="layout-main" :style="isFixedHeader ? `height: calc(100% - ${setMainHeight})` : `minHeight: calc(100% - ${setMainHeight})`">
|
||||
<el-scrollbar
|
||||
ref="layoutMainScrollbarRef"
|
||||
class="layout-main-scroll layout-backtop-header-fixed"
|
||||
wrap-class="layout-main-scroll"
|
||||
view-class="layout-main-scroll"
|
||||
>
|
||||
<el-main class="layout-main"
|
||||
:style="!isFromPanel ? (isFixedHeader ? `height: calc(100% - ${setMainHeight})` : `minHeight: calc(100% - ${setMainHeight})`) : 'height:100%;'">
|
||||
<el-scrollbar ref="layoutMainScrollbarRef" class="layout-main-scroll layout-backtop-header-fixed"
|
||||
wrap-class="layout-main-scroll" view-class="layout-main-scroll">
|
||||
<LayoutParentView />
|
||||
</el-scrollbar>
|
||||
<el-backtop :target="setBacktopClass" />
|
||||
<check-token />
|
||||
<chat/>
|
||||
<chat />
|
||||
</el-main>
|
||||
</template>
|
||||
|
||||
@@ -18,6 +15,7 @@
|
||||
import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';
|
||||
import { useThemeConfig } from '/@/stores/themeConfig';
|
||||
import { NextLoading } from '/@/utils/loading';
|
||||
import { usePanel } from "/@/stores/panel"
|
||||
|
||||
// 引入组件
|
||||
const LayoutParentView = defineAsyncComponent(() => import('/@/layout/routerView/parent.vue'));
|
||||
@@ -32,6 +30,9 @@ const storesThemeConfig = useThemeConfig();
|
||||
const { themeConfig } = storeToRefs(storesThemeConfig);
|
||||
const { isTagsViewCurrenFull } = storeToRefs(storesTagsViewRoutes);
|
||||
|
||||
const storesPanel = usePanel()
|
||||
const { isFromPanel } = storeToRefs(storesPanel);
|
||||
|
||||
// 设置 header 固定
|
||||
const isFixedHeader = computed(() => {
|
||||
return themeConfig.value.isFixedHeader;
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
import { defineStore } from 'pinia';
|
||||
|
||||
export const usePanel = defineStore('panel', {
|
||||
state: () => ({
|
||||
isFromPanel: false,
|
||||
}),
|
||||
actions: {
|
||||
openFromPanel() {
|
||||
this.isFromPanel = true;
|
||||
},
|
||||
closeFromPanel() {
|
||||
this.isFromPanel = false;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -10,7 +10,7 @@
|
||||
</el-form-item>
|
||||
<el-form :model="state.queryForm" ref="queryRef" :inline="true" @keyup.enter="getDataList">
|
||||
<el-form-item style="width: 350px;" label="抓拍时间" prop="swingTimeList">
|
||||
<el-date-picker v-model="state.queryForm.swingTimeList" value-format="YYYY-MM-DD"
|
||||
<el-date-picker v-model="state.queryForm.swingTimeList" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
<dict-select v-model="state.queryForm.alarmType" :options="door_alarm_type"
|
||||
placeholder="请选择报警类型" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 350px;" label="抓拍时间" prop="swingTimeList">
|
||||
<el-form-item style="width: 450px;" label="抓拍时间" prop="swingTimeList">
|
||||
<el-date-picker v-model="state.queryForm.swingTimeList" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange" />
|
||||
type="datetimerange" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="search" type="primary" @click="getDataList">
|
||||
@@ -136,6 +136,9 @@ import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { useDict } from '/@/hooks/dict';
|
||||
import { parseTime } from "/@/utils/formatTime"
|
||||
import { usePanel } from "/@/stores/panel"
|
||||
|
||||
const storesPanel = usePanel()
|
||||
|
||||
import * as DoorRecordApi from "/@/api/door/doorRecord";
|
||||
|
||||
@@ -181,6 +184,25 @@ const resetQuery = () => {
|
||||
getDataList()
|
||||
}
|
||||
|
||||
onBeforeMount(() => {
|
||||
const query: any = useRoute().query
|
||||
if (query && query.action == 'panel') {
|
||||
if (query.params) {
|
||||
Object.assign(state.queryForm, JSON.parse(query.params))
|
||||
getDataList()
|
||||
}
|
||||
storesPanel.openFromPanel()
|
||||
}
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
const query = useRoute().query
|
||||
if (query && query.action == 'panel') {
|
||||
storesPanel.closeFromPanel()
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/door/doorRecord/export', Object.assign(state.queryForm, { ids: selectObjs }), 'doorRecord.xlsx')
|
||||
|
||||
@@ -138,7 +138,7 @@ const getSummaries = (param: any) => {
|
||||
|
||||
function openDoorTableDialogRef(row: any) {
|
||||
const query = {
|
||||
swingTimeList: [row.time, addDays(row.time, 1)],
|
||||
swingTimeList: [row.time + " 00:00:00", addDays(row.time, 1) + " 00:00:00"],
|
||||
openTypeList: ['61', '62'],
|
||||
}
|
||||
doorTableDialogRef.value.openDialog(query)
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
<el-form-item style="width: 250px;" label="开门类型" prop="openType">
|
||||
<dict-select v-model="state.queryForm.openType" :options="dh_door_open_type" placeholder="请选择进开门类型" />
|
||||
</el-form-item>
|
||||
<el-form-item style="width: 350px;" label="抓拍时间" prop="swingTimeList">
|
||||
<el-form-item style="width: 450px;" label="抓拍时间" prop="swingTimeList">
|
||||
<el-date-picker v-model="state.queryForm.swingTimeList" value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange" />
|
||||
type="datetimerange" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button icon="search" type="primary" @click="getDataList">
|
||||
@@ -122,6 +122,9 @@ import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||
import { fetchList, delObjs } from "/@/api/door/doorRecord";
|
||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { useDict } from '/@/hooks/dict';
|
||||
import { usePanel } from "/@/stores/panel"
|
||||
|
||||
const storesPanel = usePanel()
|
||||
|
||||
// 引入组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||
@@ -161,6 +164,24 @@ const resetQuery = () => {
|
||||
getDataList()
|
||||
}
|
||||
|
||||
onBeforeMount(() => {
|
||||
const query: any = useRoute().query
|
||||
if (query && query.action == 'panel') {
|
||||
if (query.params) {
|
||||
Object.assign(state.queryForm, JSON.parse(query.params))
|
||||
getDataList()
|
||||
}
|
||||
storesPanel.openFromPanel()
|
||||
}
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
const query = useRoute().query
|
||||
if (query && query.action == 'panel') {
|
||||
storesPanel.closeFromPanel()
|
||||
}
|
||||
})
|
||||
|
||||
// 导出excel
|
||||
const exportExcel = () => {
|
||||
downBlobFile('/door/doorRecord/export', Object.assign(state.queryForm, { ids: selectObjs }), 'doorRecord.xlsx')
|
||||
|
||||
@@ -17,29 +17,22 @@
|
||||
<el-empty description="没有部件啦" :image-size="280"></el-empty>
|
||||
</div>
|
||||
<el-row :gutter="2">
|
||||
<el-col :gutter="2" v-for="(item, index) in grid.layout" v-bind:key="index" :md="item" :xs="24">
|
||||
<draggable
|
||||
v-model="grid.copmsList[index]"
|
||||
animation="200"
|
||||
handle=".customize-overlay"
|
||||
group="people"
|
||||
item-key="com"
|
||||
dragClass="aaaaa"
|
||||
force-fallback
|
||||
fallbackOnBody
|
||||
class="draggable-box"
|
||||
>
|
||||
<el-col :gutter="2" v-for="(item, index) in grid.layout" v-bind:key="index" :md="item"
|
||||
:xs="24">
|
||||
<draggable v-model="grid.copmsList[index]" animation="200" handle=".customize-overlay"
|
||||
group="people" item-key="com" dragClass="aaaaa" force-fallback fallbackOnBody
|
||||
class="draggable-box">
|
||||
<template #item="{ element }">
|
||||
<div class="widgets-item">
|
||||
<component :is="allComps[element]"></component>
|
||||
<div v-if="customizing" class="customize-overlay">
|
||||
<el-button class="close" type="danger" plain icon="Close" size="small" @click="remove(element)"></el-button>
|
||||
<el-button class="close" type="danger" plain icon="Close" size="small"
|
||||
@click="remove(element)"></el-button>
|
||||
<label>
|
||||
<el-icon>
|
||||
<component :is="allComps[element].icon" />
|
||||
</el-icon>
|
||||
{{ allComps[element].title }}</label
|
||||
>
|
||||
{{ allComps[element].title }}</label>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -54,26 +47,32 @@
|
||||
<el-header>
|
||||
<div class="widgets-aside-title">添加部件</div>
|
||||
<div class="widgets-aside-close" @click="close()">
|
||||
<el-icon><Close /></el-icon>
|
||||
<el-icon>
|
||||
<Close />
|
||||
</el-icon>
|
||||
</div>
|
||||
</el-header>
|
||||
<el-header style="height: auto">
|
||||
<div class="selectLayout">
|
||||
<div class="selectLayout-item item01" :class="{ active: grid.layout.join(',') === '12,6,6' }" @click="setLayout([12, 6, 6])">
|
||||
<div class="selectLayout-item item01"
|
||||
:class="{ active: grid.layout.join(',') === '12,6,6' }" @click="setLayout([12, 6, 6])">
|
||||
<el-row :gutter="2">
|
||||
<el-col :span="7"><span></span></el-col>
|
||||
<el-col :span="7"><span></span></el-col>
|
||||
<el-col :span="10"><span></span></el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="selectLayout-item item02" :class="{ active: grid.layout.join(',') === '24,16,8' }" @click="setLayout([24, 16, 8])">
|
||||
<div class="selectLayout-item item02"
|
||||
:class="{ active: grid.layout.join(',') === '24,16,8' }"
|
||||
@click="setLayout([24, 16, 8])">
|
||||
<el-row :gutter="2">
|
||||
<el-col :span="24"><span></span></el-col>
|
||||
<el-col :span="16"><span></span></el-col>
|
||||
<el-col :span="8"><span></span></el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="selectLayout-item item03" :class="{ active: grid.layout.join(',') === '24' }" @click="setLayout([24])">
|
||||
<div class="selectLayout-item item03" :class="{ active: grid.layout.join(',') === '24' }"
|
||||
@click="setLayout([24])">
|
||||
<el-row :gutter="2">
|
||||
<el-col :span="24"><span></span></el-col>
|
||||
<el-col :span="24"><span></span></el-col>
|
||||
@@ -98,7 +97,8 @@
|
||||
<p>{{ item.description }}</p>
|
||||
</div>
|
||||
<div class="item-actions">
|
||||
<el-button type="primary" icon="el-icon-plus" size="small" @click="push(item)"></el-button>
|
||||
<el-button type="primary" icon="el-icon-plus" size="small"
|
||||
@click="push(item)"></el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -124,7 +124,7 @@ const defaultGrid = ref({
|
||||
copmsList: [
|
||||
['current-user', 'flow-data', 'audit-log', 'sys-log-line'],
|
||||
['news', 'sys-log', 'demo-chart1'],
|
||||
['calendar', 'favorite-menu','favorite-flow', 'demo-chart2'],
|
||||
['calendar', 'favorite-menu', 'favorite-flow', 'demo-chart2'],
|
||||
],
|
||||
});
|
||||
const customizing = ref(false);
|
||||
@@ -209,8 +209,8 @@ const backDefaul = () => {
|
||||
widgets.value.style.removeProperty('transform');
|
||||
grid.value = defaultGrid.value;
|
||||
Local.remove(widgetsKey.value);
|
||||
// 重新加载页面
|
||||
window.location.reload();
|
||||
// 重新加载页面
|
||||
window.location.reload();
|
||||
};
|
||||
|
||||
const close = () => {
|
||||
@@ -306,7 +306,7 @@ onMounted(() => {
|
||||
|
||||
.customizing .widgets-wrapper {
|
||||
margin-right: -360px;
|
||||
width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.customizing .widgets-wrapper .el-col {
|
||||
@@ -470,6 +470,7 @@ onMounted(() => {
|
||||
.customizing .widgets {
|
||||
transform: scale(1) !important;
|
||||
}
|
||||
|
||||
.customizing .widgets-aside {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
@@ -477,6 +478,7 @@ onMounted(() => {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.customizing .widgets-wrapper {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user