Merge remote-tracking branch 'origin/master'
# Conflicts:
# src/views/system/userinfo.vue
7 files modified
2 files added
| | |
| | | */ |
| | | export const setThermalCurrentPaletteStyle = (deviceSn, workspaceId, param) => { |
| | | return request({ |
| | | // /manage/api/v1/devices/selectDevicePage |
| | | // url: `/localApi/manage/api/v1/devices/${workspaceId}/devices/${deviceSn}/setThermalCurrentPaletteStyle`, |
| | | url: `/drone-device-core/manage/api/v1/devices/${workspaceId}/devices/${deviceSn}/setThermalCurrentPaletteStyle`, |
| | | method: 'put', |
| | | data: param, |
| | | }) |
| | | } |
| | | /** |
| | | * 照片存储设置 |
| | | * @param {机场编码} sn |
| | | * @param {*} body |
| | | * @returns |
| | | */ |
| | | export const setPhotoStorageSet = (sn, param) => { |
| | | return request({ |
| | | // url: `/localApi/control/api/v1/devices/${sn}/payload/photoStorageSet`, |
| | | url: `/drone-device-core/control/api/v1/devices/${sn}/payload/photoStorageSet`, |
| | | method: 'post', |
| | | data: param, |
| | | }) |
| | | } |
| | | /** |
| | | * 视频存储设置 |
| | | * @param {机场编码} sn |
| | | * @param {*} body |
| | | * @returns |
| | | */ |
| | | export const setVideoStorageSet = (sn, param) => { |
| | | return request({ |
| | | // url: `/localApi/control/api/v1/devices/${sn}/payload/videoStorageSet`, |
| | | url: `/drone-device-core/control/api/v1/devices/${sn}/payload/videoStorageSet`, |
| | | method: 'post', |
| | | data: param |
| | | , |
| | | }) |
| | | } |
| | | // 获取live_status |
| | | export const getLiveStatus = (sn) => { |
| | | return request({ |
| | | url: `/drone-device-core/manage/api/v1/live/getLiveStatus/${sn}`, |
| | | method: 'get', |
| | | }) |
| | | } |
| | | |
| | | // 视频流设置方法 |
| | | export const setStreamsSwitch = (param) => { |
| | | return request({ |
| | | url: `/drone-device-core/manage/api/v1/live/streams/switch`, |
| | | method: 'post', |
| | | data: param |
| | | }) |
| | | } |
| | | // 控制台-云台拍照录像动作 |
| | | export const photoAndVideoCmd = (droneSn,mode) => { |
| | | return request({ |
| | | url: `/drone-device-core/droneAirport/liveStreamApi/switch/vedioMode`, |
| | | method: 'get', |
| | | params: { |
| | | droneSn, |
| | | mode |
| | | } |
| | | }) |
| | | } |
| | |
| | | export default { |
| | | tabs: true, |
| | | tabsActive: 1, |
| | | // 全局禁用自动填充 |
| | | formAttrs: { |
| | | autocomplete: 'off' |
| | | }, |
| | | group: [ |
| | | { |
| | | label: '个人信息', |
| | |
| | | span: 12, |
| | | row: true, |
| | | prop: 'realName', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '姓名不能为空', |
| | | trigger: 'blur' |
| | | } |
| | | ], |
| | | required: true |
| | | |
| | | }, |
| | | { |
| | | label: '手机号', |
| | | span: 12, |
| | | row: true, |
| | | prop: 'phone', |
| | | |
| | | }, |
| | | { |
| | | slot: true, |
| | | label: '邮箱', |
| | | prop: 'email', |
| | | span: 12, |
| New file |
| | |
| | | /* |
| | | * @Author: GuLiMmo 2820890765@qq.com |
| | | * @Date: 2024-08-23 10:51:53 |
| | | * @LastEditors: GuLiMmo 2820890765@qq.com |
| | | * @LastEditTime: 2024-08-29 14:10:56 |
| | | * @FilePath: /drone-web-manage/src/permission.js |
| | | * @Description: |
| | | * Copyright (c) 2024 by GuLiMmo, All Rights Reserved. |
| | | */ |
| | | import router from './router/' |
| | | import store from './store' |
| | | import { getToken } from '@/utils/auth' |
| | | import { getUrlParams } from './utils/validate' |
| | | import NProgress from 'nprogress' // progress bar |
| | | import 'nprogress/nprogress.css' // progress bar style |
| | | NProgress.configure({ showSpinner: false }) |
| | | const lockPage = '/lock' //锁屏页 |
| | | const urlParams = getUrlParams(window.location.href) |
| | | |
| | | router.beforeEach((to, from, next) => { |
| | | const meta = to.meta || {} |
| | | const isMenu = meta.menu === undefined ? to.query.menu : meta.menu |
| | | store.commit('SET_IS_MENU', isMenu === undefined) |
| | | if (getToken()) { |
| | | if (store.getters.isLock && to.path !== lockPage) { |
| | | //如果系统激活锁屏,全部跳转到锁屏页 |
| | | next({ path: lockPage }) |
| | | } else if (to.path === '/login') { |
| | | //如果登录成功访问登录页跳转到主页 |
| | | next({ path: '/' }) |
| | | } else { |
| | | const systemToken = store.getters.token || urlParams?.token |
| | | if (systemToken === 0) { |
| | | store.dispatch('FedLogOut').then(() => { |
| | | next({ path: '/login' }) |
| | | }) |
| | | } else { |
| | | const meta = to.meta || {} |
| | | const query = to.query || {} |
| | | if (meta.target) { |
| | | window.open(query.url.replace(/#/g, '&')) |
| | | return |
| | | } else if (meta.isTab !== false) { |
| | | store.commit('ADD_TAG', { |
| | | name: query.name || to.name, |
| | | path: to.path, |
| | | fullPath: to.path, |
| | | params: to.params, |
| | | query: to.query, |
| | | meta: meta, |
| | | }) |
| | | } |
| | | next() |
| | | } |
| | | } |
| | | } else { |
| | | //判断是否需要认证,没有登录访问去登录页 |
| | | if (meta.isAuth === false) { |
| | | next() |
| | | } else { |
| | | next('/login') |
| | | } |
| | | } |
| | | }) |
| | | |
| | | router.afterEach(to => { |
| | | NProgress.done() |
| | | let title = router.$avueRouter.generateTitle(to, { label: 'name' }) |
| | | router.$avueRouter.setTitle(title) |
| | | store.commit('SET_IS_SEARCH', false) |
| | | }) |
| New file |
| | |
| | | /* |
| | | * @Author: GuLiMmo 2820890765@qq.com |
| | | * @Date: 2024-08-23 10:51:53 |
| | | * @LastEditors: GuLiMmo 2820890765@qq.com |
| | | * @LastEditTime: 2024-08-29 14:10:56 |
| | | * @FilePath: /drone-web-manage/src/permission.js |
| | | * @Description: |
| | | * Copyright (c) 2024 by GuLiMmo, All Rights Reserved. |
| | | */ |
| | | |
| | | import { getStore } from '@/utils/store' |
| | | import router from './router/' |
| | | import store from './store' |
| | | import { getToken } from '@/utils/auth' |
| | | import { getUrlParams } from './utils/validate' |
| | | import NProgress from 'nprogress' // progress bar |
| | | import 'nprogress/nprogress.css' // progress bar style |
| | | NProgress.configure({ showSpinner: false }) |
| | | const lockPage = '/lock' //锁屏页 |
| | | const urlParams = getUrlParams(window.location.href) |
| | | |
| | | function findRouteByPath (routes, targetPath) { |
| | | // 遍历数组中的每个路由对象 |
| | | for (const route of routes) { |
| | | // 如果当前路由的path匹配目标路径,直接返回 |
| | | if (route.path === targetPath) { |
| | | return route |
| | | } |
| | | |
| | | // 如果有子路由,递归查找 |
| | | if (route.children && route.children.length > 0) { |
| | | const foundInChildren = findRouteByPath(route.children, targetPath) |
| | | if (foundInChildren) { |
| | | return foundInChildren |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 遍历完所有路由都没找到,返回null |
| | | return null |
| | | } |
| | | |
| | | router.beforeEach((to, from, next) => { |
| | | const meta = to.meta || {} |
| | | const isMenu = meta.menu === undefined ? to.query.menu : meta.menu |
| | | store.commit('SET_IS_MENU', isMenu === undefined) |
| | | |
| | | const menuAll = getStore({ name: 'menuAll' }) |
| | | |
| | | if (!menuAll) { |
| | | store.dispatch('GetMenu').then(data => { |
| | | if (data.length !== 0) { |
| | | router.$avueRouter.formatRoutes(data, true) |
| | | |
| | | let newMenu = getStore({ name: 'menuAll' }) |
| | | |
| | | let firstMenu = newMenu[0] |
| | | |
| | | let toMenu = findRouteByPath(newMenu, to.path) |
| | | |
| | | store.commit('ADD_TAG', { |
| | | name: firstMenu.name, |
| | | path: firstMenu.path, |
| | | fullPath: firstMenu.path, |
| | | params: firstMenu.params || {}, |
| | | query: firstMenu.query || {}, |
| | | meta: firstMenu.meta || {}, |
| | | }) |
| | | |
| | | store.commit('ADD_TAG', { |
| | | name: toMenu.name, |
| | | path: toMenu.path, |
| | | fullPath: toMenu.path, |
| | | params: toMenu.params || {}, |
| | | query: toMenu.query || {}, |
| | | meta: toMenu.meta || {}, |
| | | }) |
| | | |
| | | next(to.fullPath) |
| | | } |
| | | }) |
| | | |
| | | return |
| | | } |
| | | |
| | | if (getToken()) { |
| | | if (store.getters.isLock && to.path !== lockPage) { |
| | | //如果系统激活锁屏,全部跳转到锁屏页 |
| | | next({ path: lockPage }) |
| | | } else if (to.path === '/login') { |
| | | //如果登录成功访问登录页跳转到主页 |
| | | next({ path: '/' }) |
| | | } else { |
| | | const systemToken = store.getters.token || urlParams?.token |
| | | if (systemToken === 0) { |
| | | store.dispatch('FedLogOut').then(() => { |
| | | next({ path: '/login' }) |
| | | }) |
| | | } else { |
| | | const meta = to.meta || {} |
| | | const query = to.query || {} |
| | | if (meta.target) { |
| | | window.open(query.url.replace(/#/g, '&')) |
| | | return |
| | | } else if (meta.isTab !== false) { |
| | | store.commit('ADD_TAG', { |
| | | name: query.name || to.name, |
| | | path: to.path, |
| | | fullPath: to.path, |
| | | params: to.params, |
| | | query: to.query, |
| | | meta: meta, |
| | | }) |
| | | } |
| | | next() |
| | | } |
| | | } |
| | | } else { |
| | | //判断是否需要认证,没有登录访问去登录页 |
| | | if (meta.isAuth === false) { |
| | | next() |
| | | } else { |
| | | next('/login') |
| | | } |
| | | } |
| | | }) |
| | | |
| | | router.afterEach(to => { |
| | | NProgress.done() |
| | | let title = router.$avueRouter.generateTitle(to, { label: 'name' }) |
| | | router.$avueRouter.setTitle(title) |
| | | store.commit('SET_IS_SEARCH', false) |
| | | }) |
| | |
| | | * @Description: |
| | | * Copyright (c) 2024 by GuLiMmo, All Rights Reserved. |
| | | */ |
| | | |
| | | import { getStore } from '@/utils/store' |
| | | import router from './router/' |
| | | import store from './store' |
| | | import { getToken } from '@/utils/auth' |
| | |
| | | const lockPage = '/lock' //锁屏页 |
| | | const urlParams = getUrlParams(window.location.href) |
| | | |
| | | function findRouteByPath (routes, targetPath) { |
| | | // 遍历数组中的每个路由对象 |
| | | for (const route of routes) { |
| | | // 如果当前路由的path匹配目标路径,直接返回 |
| | | if (route.path === targetPath) { |
| | | return route |
| | | } |
| | | |
| | | // 如果有子路由,递归查找 |
| | | if (route.children && route.children.length > 0) { |
| | | const foundInChildren = findRouteByPath(route.children, targetPath) |
| | | if (foundInChildren) { |
| | | return foundInChildren |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 遍历完所有路由都没找到,返回null |
| | | return null |
| | | } |
| | | |
| | | router.beforeEach((to, from, next) => { |
| | | const meta = to.meta || {} |
| | | const isMenu = meta.menu === undefined ? to.query.menu : meta.menu |
| | | store.commit('SET_IS_MENU', isMenu === undefined) |
| | | |
| | | const menuAll = getStore({ name: 'menuAll' }) |
| | | |
| | | if (!menuAll) { |
| | | store.dispatch('GetMenu').then(data => { |
| | | if (data.length !== 0) { |
| | | router.$avueRouter.formatRoutes(data, true) |
| | | |
| | | let newMenu = getStore({ name: 'menuAll' }) |
| | | |
| | | let firstMenu = newMenu[0] |
| | | |
| | | let toMenu = findRouteByPath(newMenu, to.path) |
| | | |
| | | store.commit('ADD_TAG', { |
| | | name: firstMenu.name, |
| | | path: firstMenu.path, |
| | | fullPath: firstMenu.path, |
| | | params: firstMenu.params || {}, |
| | | query: firstMenu.query || {}, |
| | | meta: firstMenu.meta || {}, |
| | | }) |
| | | |
| | | store.commit('ADD_TAG', { |
| | | name: toMenu.name, |
| | | path: toMenu.path, |
| | | fullPath: toMenu.path, |
| | | params: toMenu.params || {}, |
| | | query: toMenu.query || {}, |
| | | meta: toMenu.meta || {}, |
| | | }) |
| | | |
| | | next(to.fullPath) |
| | | } |
| | | }) |
| | | |
| | | return |
| | | } |
| | | |
| | | if (getToken()) { |
| | | if (store.getters.isLock && to.path !== lockPage) { |
| | | //如果系统激活锁屏,全部跳转到锁屏页 |
| | |
| | | token: getStore({ name: 'token' }) || '', |
| | | refreshToken: getStore({ name: 'refreshToken' }) || '', |
| | | parentDeptInfo: getStore({ name: 'parentDeptInfo' }) || '', |
| | | defaultAva: defaultAva, // 将图片路径存入 state(可选) |
| | | |
| | | }, |
| | | actions: { |
| | | //根据用户名登录 |
| | |
| | | <div class="item-status">{{ cmdItem.status }}</div> |
| | | </div> |
| | | <div class="control-cmd-item-right"> |
| | | <el-button :disabled="!debugStatus || cmdItem.disabled" :loading="cmdItem.loading" size="small" type="primary" |
| | | @click="sendControlCmd(cmdItem, index)"> |
| | | <el-button :disabled="!debugStatus || cmdItem.disabled" :loading="cmdItem.loading" size="small" |
| | | type="primary" @click="sendControlCmd(cmdItem, index)"> |
| | | {{ cmdItem.operateText }} |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <el-divider v-if="deviceInfo">无人机设置</el-divider> |
| | | <!-- 设置 0:白热,1:黑热,2:描红,3:医疗,5:彩虹 1,6:铁红,8:北极,11:熔岩,12:热铁,13:彩虹 2 --> |
| | | <div class="control-cmd-box"> |
| | | <div class="control-cmd-item" v-for="(item, index) in cameras"> |
| | | <div class="control-cmd-item-left">调色盘样式 {{ item.payload_index }}</div> |
| | | <div class="control-cmd-item-right"> |
| | | <div class="control-cmd-box" v-for="(item, index) in cameras"> |
| | | <div> |
| | | <el-form-item label="摄像头设置"> |
| | | <el-select @change="cameraSettings($event, item)" v-model="videoValue" placeholder="请选择"> |
| | | <el-option v-for="item in videoType" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="调色盘样式" v-if="videoValue == 'ir'"> |
| | | <el-select @change="changs($event, item)" v-model="valueStyle" placeholder="请选择"> |
| | | <el-option v-for="item in paletteOptions" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | </el-form-item> |
| | | </div> |
| | | |
| | | <div> |
| | | <el-form-item label="相机模式"> |
| | | <el-select @change="photoAndVideoCmdSettings($event, item)" v-model="cameraModeValue" placeholder="请选择"> |
| | | <el-option v-for="item in cameraMode" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="照片存储设置" v-if="cameraModeValue == 0"> |
| | | <el-select v-model="item.photo_storage_settings" collapse-tags @change="photoStorageTypeChang($event, item)" |
| | | multiple placeholder="请选择"> |
| | | <el-option v-for="item in photoStorageType" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="视频存储设置" v-if="cameraModeValue == 1"> |
| | | <el-select v-model="item.video_storage_settings" collapse-tags @change="videoStorageTypeChang($event, item)" |
| | | multiple placeholder="请选择"> |
| | | <el-option v-for="item in photoStorageType" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ElMessage } from 'element-plus'; |
| | | import EventBus from '@/event-bus' |
| | | import { EBizCode, ELocalStorageKey, ERouterName } from '@/types' |
| | | import { useConnectWebSocket } from '@/hooks/use-connect-websocket' |
| | |
| | | import { useDockControl } from './use-dock-control' |
| | | import { EDockModeCode } from '@/types/device' |
| | | import { updateDeviceCmdInfoByOsd, updateDeviceCmdInfoByExecuteInfo } from '@/utils/device-cmd' |
| | | import { setThermalCurrentPaletteStyle } from '@/api/device-setting' |
| | | import { setThermalCurrentPaletteStyle, setPhotoStorageSet, setVideoStorageSet, getLiveStatus, setStreamsSwitch, photoAndVideoCmd } from '@/api/device-setting' |
| | | |
| | | import Store from '@/store' |
| | | |
| | | const valueStyle = ref(0) |
| | | const cameraModeValue = ref(0) |
| | | const videoValue = ref("zoom") |
| | | |
| | | // 定义一个数据videoList |
| | | const videoList = reactive([]) |
| | | // 摄像头信息 |
| | | let cameras = reactive([]) |
| | | // let cameras = reactive([ |
| | | // { |
| | | // camera_mode: 0, |
| | | // liveview_world_region: { |
| | | // bottom: 0.5515424609184265, |
| | | // left: 0.42740535736083984, |
| | | // right: 0.5581043362617493, |
| | | // top: 0.42277535796165466 |
| | | // }, |
| | | // payload_index: "81-0-0", |
| | | // photo_state: 0, |
| | | // record_time: 0, |
| | | // recording_state: 0, |
| | | // remain_photo_num: 3931, |
| | | // remain_record_duration: 0, |
| | | // zoom_factor: 6.9999943, |
| | | // ir_zoom_factor: 2, |
| | | // photo_storage_settings: [ |
| | | // "vision", |
| | | // "ir" |
| | | // ], |
| | | // video_storage_settings: [ |
| | | // "vision" |
| | | // ] |
| | | // } |
| | | // ]) |
| | | |
| | | // 无人机信息 |
| | | let deviceInfo = ref() |
| | | |
| | | // camera_mode {"0":"拍照","1":"录像","2":"智能低光","3":"全景拍照","-1":"不支持的模式"} |
| | | const cameraMode = [ |
| | | { label: '拍照', value: 0 }, |
| | | { label: '录像', value: 1 }, |
| | | { label: '智能低光', value: 2 }, |
| | | { label: '全景拍照', value: 3 }, |
| | | // { label: '不支持的模式', value: -1 }, |
| | | ] |
| | | |
| | | // 调色盘选项数据 |
| | | const paletteOptions = [ |
| | |
| | | { label: '熔岩', value: 11 }, |
| | | { label: '热铁', value: 12 }, |
| | | { label: '彩虹2', value: 13 }, |
| | | ] |
| | | // 视频类型 ZOOM("zoom"), WIDE("wide"), THERMAL("thermal"), NORMAL("normal"), IR("ir"); |
| | | const videoType = [ |
| | | { label: '变焦', value: 'zoom' }, |
| | | { label: '广角', value: 'wide' }, |
| | | // { label: '热红外', value: 'thermal' }, |
| | | // { label: '正常', value: 'normal' }, |
| | | { label: '红外', value: 'ir' }, |
| | | ] |
| | | // 拍照存储类型{current, wide, zoom, ir},可多选 |
| | | const photoStorageType = [ |
| | | { label: '当前', value: 'current' }, |
| | | { label: '广角', value: 'wide' }, |
| | | { label: '变焦', value: 'zoom' }, |
| | | { label: '可见光', value: 'vision' }, |
| | | { label: '红外', value: 'ir' }, |
| | | ] |
| | | |
| | | const props = defineProps(['sn', 'deviceInfo']) |
| | |
| | | watch( |
| | | () => Store.state.device.videoSurveillance, |
| | | newObj => { |
| | | console.log('视频类型监听中', newObj) |
| | | // console.log('视频类型监听中', newObj) |
| | | if (newObj && newObj.live_status && newObj.live_status.length) { |
| | | let arr = newObj.live_status || [] |
| | | if (videoList.length == arr.length) { |
| | |
| | | arr.forEach(element => { |
| | | let video_id = element.video_id |
| | | element.payIndex = video_id.split('/')[1].split('-')[1] |
| | | if (props.deviceInfo.child_sn == video_id.split('/')[0]) { |
| | | if (element.video_type == 'normal' || element.video_type == 'thermal') { |
| | | videoValue.value = 'wide' |
| | | } else { |
| | | videoValue.value = element.video_type |
| | | } |
| | | } |
| | | }) |
| | | // videoList.length = 0 // 清空数组 |
| | | videoList.push(...arr) // 添加新元素 |
| | | } |
| | | }, |
| | |
| | | devices['dock'] = value.dockInfo[props.deviceInfo.device_sn] |
| | | devices['gateway'] = value.gatewayInfo |
| | | let cameraList = value.deviceInfo[props.deviceInfo.child_sn]?.cameras || [] |
| | | cameras = reactive([...cameraList]) |
| | | cameras = cameraList |
| | | // console.log('设备osd.cameras信息变化', cameras) |
| | | // 判断cameras列表长度是否为0,如果为0,则不执行后续操作 |
| | | if (cameras.length > 0) { |
| | | cameraModeValue.value = cameras[0].camera_mode |
| | | } |
| | | deviceInfo = ref(value.deviceInfo[props.deviceInfo.child_sn]) |
| | | updateDeviceCmdInfoByOsd(cmdList.value, devices) |
| | | } |
| | |
| | | deep: true, |
| | | } |
| | | ) |
| | | onMounted(() => { |
| | | getLiveStatuss() |
| | | }); |
| | | |
| | | async function getLiveStatuss() { |
| | | let result = await getLiveStatus(props.sn) |
| | | result.data.data.live_status.forEach(item => { |
| | | if (props.deviceInfo.child_sn == item.video_id.split('/')[0]) { |
| | | if (item.video_type == 'normal' || item.video_type == 'thermal') { |
| | | videoValue.value = 'wide' |
| | | } else { |
| | | videoValue.value = item.video_type |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | |
| | | // 远程控制开关 |
| | | async function onDeviceStatusChange (status) { |
| | | async function onDeviceStatusChange(status) { |
| | | let result = false |
| | | if (status) { |
| | | result = await dockDebugOnOff(props.sn, true) |
| | |
| | | |
| | | const { sendDockControlCmd, dockDebugOnOff } = useDockControl() |
| | | |
| | | async function sendControlCmd (cmdItem, index) { |
| | | async function sendControlCmd(cmdItem, index) { |
| | | const params = { |
| | | sn: props.sn, |
| | | cmd: cmdItem.cmdKey, |
| | |
| | | useConnectWebSocket(messageHandler, webSorketUrl) |
| | | |
| | | // 添加 changs 方法 |
| | | async function changs (value, item) { |
| | | async function changs(value, item) { |
| | | const payload = { |
| | | [item.payload_index]: { |
| | | thermal_current_palette_style: value |
| | |
| | | } |
| | | console.log('payload', payload) |
| | | let data = await setThermalCurrentPaletteStyle(props.sn, props.deviceInfo.workspace_id, payload) |
| | | if (data.code === 0) { |
| | | message.success('修改成功') |
| | | if (data.data.code === 0) { |
| | | ElMessage.success('修改成功'); |
| | | } |
| | | } |
| | | // 摄像头设置 |
| | | async function cameraSettings(value, item) { |
| | | const payload = { |
| | | // 1581F6Q8D245U00G57GJ/81-0-0/normal-0 |
| | | video_id: props.deviceInfo.child_sn + '/' + item.payload_index + '/normal-0', |
| | | video_type: value |
| | | } |
| | | let data = await setStreamsSwitch(payload) |
| | | if (data.data.code === 0) { |
| | | ElMessage.success('修改成功'); |
| | | } |
| | | } |
| | | // 相机模式设置 |
| | | async function photoAndVideoCmdSettings(value, item) { |
| | | // photo 0 video_start 1 video_stop |
| | | item.camera_mode = value |
| | | let data = await photoAndVideoCmd(props.deviceInfo.child_sn, value) |
| | | if (data.data.code == 0) { |
| | | ElMessage.success('修改成功'); |
| | | } |
| | | } |
| | | // 照片存储设置 |
| | | async function photoStorageTypeChang(value, item) { |
| | | // value 不能为空 |
| | | if (!value) { |
| | | ElMessage.error('请选择存储方式'); |
| | | return; |
| | | } |
| | | const payload = { |
| | | payload_index: item.payload_index, |
| | | photo_storage_settings: value |
| | | } |
| | | item.photo_storage_settings = value |
| | | let data = await setPhotoStorageSet(props.sn, payload) |
| | | if (data.data.code == 0) { |
| | | ElMessage.success('修改成功'); |
| | | } |
| | | } |
| | | // 视频存储设置 |
| | | async function videoStorageTypeChang(value, item) { |
| | | if (!value) { |
| | | ElMessage.error('请选择存储方式'); |
| | | return; |
| | | } |
| | | const payload = { |
| | | payload_index: item.payload_index, |
| | | video_storage_settings: value |
| | | } |
| | | item.video_storage_settings = value |
| | | let data = await setVideoStorageSet(props.sn, payload) |
| | | if (data.data.code == 0) { |
| | | ElMessage.success('修改成功'); |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <div> |
| | | <basic-container> |
| | | <avue-form |
| | | ref="form" |
| | | :option="option" |
| | | v-model="form" |
| | | @tab-click="handleTabClick" |
| | | @submit="handleSubmit" |
| | | ></avue-form> |
| | | |
| | | > |
| | | <template #email="{ disabled, size }"> |
| | | <el-input |
| | | id="adfsdafdsf" |
| | | type="text" |
| | | :disabled="disabled" |
| | | :size="size" |
| | | v-model="form.email" |
| | | placeholder="请输入邮箱" |
| | | :readonly="readonly" |
| | | @focus="readonly = false" |
| | | > |
| | | </el-input> |
| | | </template> |
| | | </avue-form> |
| | | </basic-container> |
| | | </div> |
| | | </template> |
| | |
| | | import md5 from 'js-md5'; |
| | | import func from '@/utils/func'; |
| | | import { validatenull } from '@/utils/validate'; |
| | | import router from '@/router'; |
| | | |
| | | import defaultAva from '@/assets/images/defaultava.png'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | index: 0, |
| | | option: option, |
| | | form: {}, |
| | | form: { }, |
| | | readonly: true |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | methods: { |
| | | handleSubmit(form, done) { |
| | | if (this.index === 0) { |
| | | form.name = form.realName |
| | | form.name = form.realName; |
| | | updateInfo(form).then( |
| | | res => { |
| | | if (res.data.success) { |
| | |
| | | const user = res.data.data; |
| | | this.form = { |
| | | id: user.id, |
| | | avatar: user.avatar, |
| | | avatar: user.avatar ? user.avatar :defaultAva, |
| | | name: user.name, |
| | | realName: user.realName, |
| | | phone: user.phone, |
| | | email: user.email, |
| | | }; |
| | | |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | handleTabClick(tabs) { |
| | | if (validatenull(tabs.index)) { |
| | | return; |
| | |
| | | |
| | | this.detailVisible = true; |
| | | |
| | | // 更新航线列表,追加 wayline_file_region_vo 数据 |
| | | if (data.wayline_file_region_vo) { |
| | | const newWayline = data.wayline_file_region_vo; |
| | | |
| | | // 检查是否已经存在于 this.wayLineList 中 |
| | | const isDuplicate = this.wayLineList.some( |
| | | (item) => item.wayline_id === newWayline.wayline_id |
| | | ); |
| | | |
| | | if (!isDuplicate) { |
| | | this.wayLineList.push(newWayline); |
| | | } |
| | | } |
| | | |
| | | this.initMapLine(data.device_map_infos); |
| | | }, |
| | | async handleCheckDetail(row) { |
| | |
| | | this.form = { |
| | | ...data, |
| | | }; |
| | | // 更新航线列表,追加 wayline_file_region_vo 数据 |
| | | // 更新航线列表,追加 wayline_file_region_vo 数据 |
| | | if (data.wayline_file_region_vo) { |
| | | const newWayline = data.wayline_file_region_vo; |
| | | |
| | | // 检查是否已经存在于 this.wayLineList 中 |
| | | const isDuplicate = this.wayLineList.some( |
| | | (item) => item.wayline_id === newWayline.wayline_id |
| | | ); |
| | | |
| | | if (!isDuplicate) { |
| | | this.wayLineList.push(newWayline); |
| | | } |
| | | } |
| | | // 更新机巢列表 |
| | | this.device_sns = data.device_list; |
| | | this.detailVisibleCopy = true; |