| | |
| | | <script setup> |
| | | import { ref, onMounted, reactive, nextTick, watch } from "vue"; |
| | | import { ref, onMounted, reactive, nextTick, watch, onBeforeUnmount } from "vue"; |
| | | import { getSiteList } from "@/api/common"; |
| | | import { formatAreaTree } from "@/utils/tree"; |
| | | import { format } from "echarts"; |
| | | |
| | | import useWebSocket from "@/hooks/useWebsocket.js"; |
| | | const { sendData, message: listMessage } = useWebSocket("leftStation"); |
| | | |
| | | import { useRoute, useRouter } from "vue-router"; |
| | | const route = useRoute(); |
| | | const router = useRouter(); |
| | |
| | | const currentId = ref(); |
| | | |
| | | onMounted(() => { |
| | | getTree(); |
| | | // getTree(); |
| | | }); |
| | | |
| | | watch( |
| | |
| | | return null; |
| | | } |
| | | |
| | | async function getTree() { |
| | | try { |
| | | const res = await getSiteList(); |
| | | watch( |
| | | () => listMessage.value, |
| | | async () => { |
| | | let _data = []; |
| | | if (res.code === 1 && res.data) { |
| | | _data = res.data2; |
| | | if (listMessage.value) { |
| | | _data = JSON.parse(listMessage.value)?.data2; |
| | | } |
| | | console.log('_data', _data, '============='); |
| | | |
| | | const treeList = formatAreaTree(_data); |
| | | console.log(treeList, "treeList"); |
| | | data.value = treeList; |
| | | await nextTick(); |
| | | const firstLeafId = currentId.value || findFirstLeafNode(treeList); |
| | |
| | | // treeRef.value.setCurrentNode(node); |
| | | |
| | | handleNodeClick(node.data, node, treeRef.value); |
| | | } |
| | | } |
| | | ); |
| | | |
| | | // handleNodeClick(node.data); |
| | | } |
| | | } catch (e) { |
| | | console.log(e); |
| | | } |
| | | } |
| | | // async function getTree() { |
| | | // try { |
| | | // const res = await getSiteList(); |
| | | // let _data = []; |
| | | // if (res.code === 1 && res.data) { |
| | | // _data = res.data2; |
| | | // } |
| | | // console.log('_data', _data, '============='); |
| | | |
| | | // const treeList = formatAreaTree(_data); |
| | | // console.log(treeList, "treeList"); |
| | | // data.value = treeList; |
| | | // await nextTick(); |
| | | // const firstLeafId = currentId.value || findFirstLeafNode(treeList); |
| | | |
| | | // if (firstLeafId) { |
| | | // const node = treeRef.value.getNode(firstLeafId); |
| | | // expandParentNodes(firstLeafId); |
| | | // treeRef.value.setCurrentKey(firstLeafId); |
| | | // // treeRef.value.setCurrentNode(node); |
| | | |
| | | // handleNodeClick(node.data, node, treeRef.value); |
| | | |
| | | // // handleNodeClick(node.data); |
| | | // } |
| | | // } catch (e) { |
| | | // console.log(e); |
| | | // } |
| | | // } |
| | | |
| | | |
| | | const expandParentNodes = (nodeId) => { |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | defineExpose({ setCurrent }); |
| | | |
| | | </script> |
| | |
| | | */ |
| | | function hasPermission(roles, route) { |
| | | console.trace('hasPermission'); |
| | | console.log('hasPermission', roles, route, '============='); |
| | | debugger; |
| | | // console.log('hasPermission', roles, route, '============='); |
| | | // debugger; |
| | | if (route.meta && route.meta.roles) { |
| | | const rolesArr = route.meta.roles; |
| | | return roles.some(role => rolesArr.includes(role)); |
| | |
| | | } |
| | | function generateRoutes(roles) { |
| | | let accessedRoutes; |
| | | debugger; |
| | | // debugger; |
| | | if (roles.includes('admin')) { |
| | | console.log('1', '============='); |
| | | |
| | |
| | | uname.value = name; |
| | | setUname(name); |
| | | let _token = 'someone'; |
| | | debugger; |
| | | // debugger; |
| | | if (response.data2.uid && response.data2.uid <= 10000) { |
| | | _token = 'manager'; |
| | | if (response.data2.uid <= 100) { |
| | |
| | | } |
| | | |
| | | async function changeRoles(role) { |
| | | debugger; |
| | | // debugger; |
| | | const _token = role + '-token'; |
| | | |
| | | token.value = _token; |
| | |
| | | import { storeToRefs } from "pinia"; |
| | | import pinia from '@/utils/pinia'; |
| | | import { useUserStore } from "@/store/user"; |
| | | debugger; |
| | | const userStore = useUserStore(pinia); |
| | | const { roles } = storeToRefs(userStore); |
| | | |
| | |
| | | <script setup name="KeyManage"> |
| | | import { ref, onMounted, reactive, computed, watchEffect, nextTick } from 'vue'; |
| | | import { ref, onActivated, reactive, computed, watchEffect, nextTick } from 'vue'; |
| | | import addEdit from './addEdit.vue'; |
| | | import { storeToRefs } from "pinia"; |
| | | import useElement from "@/hooks/useElement.js"; |
| | |
| | | sendMessage(); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | sendMessage(); |
| | | }); |
| | | </script> |
| | |
| | | stationName2: formLock.stationName2, |
| | | stationName3: formLock.stationName3, |
| | | stationName4: formLock.stationName4, |
| | | lockId: formLock.lockId, |
| | | lockIp: formLock.lockIp, |
| | | longitude: formLock.longitude || 0, |
| | | latitude: formLock.latitude || 0, |
| | |
| | | <script setup name="LockManage"> |
| | | import { ref, onMounted, reactive, computed, watchEffect, nextTick } from "vue"; |
| | | import { ref, onActivated, reactive, computed, watchEffect, nextTick } from "vue"; |
| | | import useStation from "@/hooks/useStationList.js"; |
| | | const { stationName1, stationName2, stationName3, stationName4, |
| | | stationList1, stationList2, stationList3, stationList4, |
| | |
| | | // 是否有控制权限 |
| | | let isCanControl = isHasPermit("control_permit", permits.value); |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | // setTimeout(() => { |
| | | // console.log('onMounted', stationName1, stationName2, stationName3, stationName4, '============='); |
| | | |
| | |
| | | <script setup name="LockTask"> |
| | | import { ref, onMounted, reactive, computed, watchEffect, nextTick } from "vue"; |
| | | import { ref, onActivated, reactive, computed, watchEffect, nextTick } from "vue"; |
| | | import addTask from "./addTask.vue"; |
| | | import { |
| | | getLockBl, |
| | |
| | | getList(); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | getList(); |
| | | }); |
| | | </script> |
| | |
| | | |
| | | tree.value.setCurrent(baojiId.value + '-' + stationId.value); |
| | | } |
| | | |
| | | sendMessage(); |
| | | // console.log('baojiId, stationId', baojiId.value, stationId.value, '=============real'); |
| | | |
| | | }) |
| | |
| | | <script setup name="threadManage"> |
| | | import { ref, onMounted, reactive, computed, watchEffect } from "vue"; |
| | | import { ref, onActivated, reactive, computed, watchEffect } from "vue"; |
| | | import useWebSocket from "@/hooks/useWebsocket.js"; |
| | | import formatSeconds from '@/utils/formatSeconds'; |
| | | |
| | |
| | | dialogVisible.value = true; |
| | | } |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | sendMessage(); |
| | | }); |
| | | |
| | |
| | | <script setup name="alarmHis"> |
| | | import { ref, reactive, onMounted, watchEffect, nextTick } from "vue"; |
| | | import { ref, reactive, onActivated, watchEffect, nextTick } from "vue"; |
| | | import useWebSocket from "@/hooks/useWebsocket.js"; |
| | | import useElement from "@/hooks/useElement.js"; |
| | | import { confirmAlm, cancelAlm, delAlm } from '@/api/alarm.js'; |
| | |
| | | }); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | endTime.value = moment().format('YYYY-MM-DD'); |
| | | getList(); |
| | | }); |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">省:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName1" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName1" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList1" :key="'province_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">市:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName2" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName2" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList2" :key="'city_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">区县:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName3" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName3" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList3" :key="'list2_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">机房:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName4" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName4" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList4" :key="'list3_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">锁具名称:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="lockName" clearable filterable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="lockName" clearable filterable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in lockList" :key="'list3_' + idx" :label="item.lockName" :value="item.lockName" /> |
| | | </el-select> |
| | |
| | | <script setup name="alarmRt"> |
| | | import { ref, reactive, onMounted, watchEffect, nextTick } from "vue"; |
| | | import { ref, reactive, onActivated, watchEffect, nextTick } from "vue"; |
| | | import useWebSocket from "@/hooks/useWebsocket.js"; |
| | | import useElement from "@/hooks/useElement.js"; |
| | | import { confirmAlm, cancelAlm, delAlm } from '@/api/alarm.js'; |
| | |
| | | }); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | sendMessage(); |
| | | }); |
| | | </script> |
| | |
| | | <script setup name="LogManage"> |
| | | import { ref, onMounted } from 'vue'; |
| | | import { ref, onActivated } from 'vue'; |
| | | import { getLockLog } from "@/api/loginfo"; |
| | | import { getLinfById } from '@/api/lockManager.js'; |
| | | import { getUinfById } from '@/api/user'; |
| | |
| | | getList(); |
| | | } |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | getList(); |
| | | }); |
| | | |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">省:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName1" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName1" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList1" :key="'province_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">市:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName2" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName2" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList2" :key="'city_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">区县:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName3" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName3" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList3" :key="'list2_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <div class="tools-filter-item"> |
| | | <div class="filter-label">机房:</div> |
| | | <div class="filter-content"> |
| | | <el-select v-model="stationName4" clearable placeholder="请选择" @change="() => nextTick(() => sendMessage())" size="small" |
| | | <el-select v-model="stationName4" clearable placeholder="请选择" @change="() => nextTick(() => getList())" size="small" |
| | | style="width: 180px"> |
| | | <el-option v-for="(item, idx) in stationList4" :key="'list3_' + idx" :label="item" :value="item" /> |
| | | </el-select> |
| | |
| | | <script setup> |
| | | import { ref, onMounted } from "vue"; |
| | | import { ref, onActivated } from "vue"; |
| | | import { getBaojiUserByUid } from "@/api/user"; |
| | | import { getAreaUserLock } from '@/api/lockManager.js'; |
| | | |
| | |
| | | userList.value = _list; |
| | | } |
| | | |
| | | onMounted(() => { |
| | | onActivated(() => { |
| | | getUsers(); |
| | | getTypeList(); |
| | | getList(); |