feat:区域回放摄像头

This commit is contained in:
dzc committed 2025-09-24 16:22:19 +08:00
1 parent 80d697a260
commit aa9dc26998
6 files changed
+66 -35

No files matched your search

+13 -13
View File
@@ -26,22 +26,22 @@ export const useUserInfo = defineStore('userInfo', {
* @param {Object} data - 登录数据
* @returns {Promise<Object>}
*/
async login(data:any) {
async login(data: any) {
data.grant_type = 'password';
data.scope = 'server';
return new Promise((resolve, reject) => {
login(data)
.then((res) => {
// 存储token 信息
Session.set('token', res.access_token);
Session.set('refresh_token', res.refresh_token);
resolve(res);
})
.catch((err) => {
useMessage().error(err?.msg || '系统异常请联系管理员');
reject(err);
});
return new Promise(async (resolve, reject) => {
try {
const res = await login(data)
console.log("登录成功res:", res)
// 存储token 信息
Session.set('token', res.access_token);
Session.set('refresh_token', res.refresh_token);
resolve(res);
} catch (err: any) {
useMessage().error(err?.msg || '系统异常请联系管理员');
reject(err);
}
});
},
+3 -2
View File
@@ -4,7 +4,7 @@ import Cookies from 'js-cookie';
* 打开大屏地址
* @param url 大屏地址
*/
export const openPlanUrl = (url: string): boolean => {
export const openPlanUrl = (url: string, replaceCurrentPage = false): boolean => {
try {
const token = Cookies.get("token")
const refreshToken = Cookies.get("refresh_token")
@@ -13,7 +13,8 @@ export const openPlanUrl = (url: string): boolean => {
}
if (url == null) throw new Error()
const fullUrl = `${url}?token=${token}&refresh_token=${refreshToken}`
window.open(fullUrl, '_blank');
const target = replaceCurrentPage ? '_self' : '_blank';
window.open(fullUrl, target);
return true
} catch (error: any) {
console.log("打开大屏地址错误:", error);
+22 -1
View File
@@ -58,7 +58,7 @@
<el-table-column prop="handleDate" label="处理时间" />
<el-table-column prop="alarmPicture" label="抓拍图片">
<template #default="{ row }">
<preview-image width="50px" height="50px" v-if="row.alarmPicture" :src="row.alarmPicture" />
<preview-image width="50px" height="50px" v-if="row.parseAlarmPicture" :src="row.parseAlarmPicture" />
<div v-else style="width: 50px; height: 50px;" />
</template>
</el-table-column>
@@ -83,6 +83,9 @@ import { BasicTableProps, useTable } from "/@/hooks/table";
import * as alarmRecordApi from "/@/api/alarm/alarmRecord";
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'));
@@ -121,6 +124,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()
}
})
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id);
+8 -2
View File
@@ -53,10 +53,16 @@
</el-table-column>
<el-table-column prop="memo" label="空间备注" show-overflow-tooltip />
<el-table-column prop="sortOrder" label="排序" show-overflow-tooltip />
<el-table-column label="操作" width="200">
<el-table-column label="操作" width="350">
<template #default="{ row }">
<el-button icon="OfficeBuilding" text type="primary" v-auth="'admin_areaManage_edit'"
@click="areaHouseTableDialogRef.openDialog(row.id)">房间</el-button>
@click="areaHouseTableDialogRef.openDialog(row.id)">
报警回放摄像头
</el-button>
<el-button icon="OfficeBuilding" text type="primary" v-auth="'admin_areaManage_edit'"
@click="areaHouseTableDialogRef.openDialog(row.id)">
房间
</el-button>
<el-button icon="edit-pen" text type="primary" v-auth="'admin_areaManage_edit'"
@click="formDialogRef.openDialog(row.id)">编辑</el-button>
<el-button icon="delete" text type="primary" v-auth="'admin_areaManage_del'"
+3 -8
View File
@@ -2,8 +2,7 @@
<div v-if="!autoTenantEnable">
<el-dropdown trigger="click" placement="bottom" @command="handleCommand">
<div
class="flex items-center justify-center w-48 px-3 py-2 mx-auto space-x-2 text-sm text-gray-600 transition-colors duration-200 rounded-lg cursor-pointer dark:text-slate-300 hover:bg-gray-100 dark:hover:bg-slate-700"
>
class="flex items-center justify-center w-48 px-3 py-2 mx-auto space-x-2 text-sm text-gray-600 transition-colors duration-200 rounded-lg cursor-pointer dark:text-slate-300 hover:bg-gray-100 dark:hover:bg-slate-700">
<el-icon>
<ele-OfficeBuilding class="text-gray-400 dark:text-slate-400" />
</el-icon>
@@ -14,12 +13,8 @@
</div>
<template #dropdown>
<el-dropdown-menu class="!p-2 !min-w-[12rem] dark:!bg-slate-800 dark:!border-slate-700">
<el-dropdown-item
v-for="item in tenantList"
:key="item.id"
:command="item"
class="!flex !items-center !space-x-2 !rounded !px-3 !text-gray-700 dark:!text-slate-300 hover:!bg-gray-100 dark:hover:!bg-slate-700"
>
<el-dropdown-item v-for="item in tenantList" :key="item.id" :command="item"
class="!flex !items-center !space-x-2 !rounded !px-3 !text-gray-700 dark:!text-slate-300 hover:!bg-gray-100 dark:hover:!bg-slate-700">
<el-icon>
<ele-OfficeBuilding class="text-gray-400 dark:text-slate-400" />
</el-icon>
+17 -9
View File
@@ -21,7 +21,7 @@
getThemeConfig.globalTitle }}</h1>
<!-- 租户选择 -->
<div class="mt-6">
<tenant class="shadow-sm" />
<tenant v-show="false" class="shadow-sm" />
</div>
</div>
@@ -67,6 +67,7 @@ import { useMessage } from '/@/hooks/message';
import { Session, Local } from '/@/utils/storage';
import { initBackEndControlRoutes } from '/@/router/backEnd';
import { LoginTypeEnum } from '/@/api/login';
import { openPlanUrl } from "/@/utils/plan"
// 引入组件
const Password = defineAsyncComponent(() => import('./component/password.vue'));
@@ -104,6 +105,12 @@ const getThemeConfig = computed(() => {
return themeConfig.value;
});
const jumpAdminPanel = () => {
const isDev = import.meta.env.MODE == "development"
const baseAdminUrl = isDev ? 'http://localhost:5173/device' : 'http://192.168.50.10:7001/device';
openPlanUrl(baseAdminUrl, true)
}
// 登录成功后的跳转处理事件
const signInSuccess = async () => {
const isNoPower = await initBackEndControlRoutes();
@@ -113,14 +120,15 @@ const signInSuccess = async () => {
} else {
// 初始化登录成功时间问候语
let currentTimeInfo = formatAxis(new Date());
if (route.query?.redirect) {
router.push({
path: <string>route.query?.redirect,
query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '',
});
} else {
router.push('/');
}
// if (route.query?.redirect) {
// router.push({
// path: <string>route.query?.redirect,
// query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '',
// });
// } else {
// router.push('/');
// }
jumpAdminPanel()
// 登录成功提示
const signInText = t('signInText');
useMessage().success(`${currentTimeInfo},${signInText}`);