feat: 设备链路信息

master
李小林 8 months ago
parent f834675398
commit 19668bc2d6
  1. 6
      src/api/operate-log/types.ts
  2. 4
      src/api/order/index.ts
  3. 6
      src/api/order/types.ts
  4. 30
      src/api/remote/index.ts
  5. 4
      src/api/remote/types.ts
  6. 20
      src/views/family/operate/order/components/OrderInfoEdit.vue
  7. 1
      src/views/family/operate/remote-operation/components/DeviceAbility.vue
  8. 85
      src/views/family/operate/remote-operation/components/DeviceLinkInfo.vue
  9. 16
      src/views/family/operate/remote-operation/components/DeviceOrder.vue
  10. 41
      src/views/family/operate/remote-operation/components/DeviceStatus.vue
  11. 6
      src/views/family/operate/remote-operation/components/DeviceTaskTable.vue
  12. 8
      src/views/family/operate/remote-operation/components/RemoteOperateInfo.vue
  13. 2
      src/views/system/user/components/dept-tree.vue

@ -11,3 +11,9 @@ export interface ParamInfo {
actualValue?: string; actualValue?: string;
remarks?: string; remarks?: string;
} }
export interface DeviceLinkVO {
title?: string;
list?: ParamInfo[];
}

@ -111,9 +111,9 @@ export function deviceOderTablePage(
}); });
} }
export function checkDeviceExits(devSnoOui: string): AxiosPromise<MapDev> { export function checkDeviceExits(adNo: string): AxiosPromise<MapDev> {
return request({ return request({
url: `/api/order/v1/check-dev/${devSnoOui}`, url: `/api/order/v1/check-dev/${adNo}`,
method: "GET", method: "GET",
}); });
} }

@ -115,11 +115,7 @@ export interface DevOuiSnoSearchForm extends PageQuery {
export type DevOuiSnoPageResult = PageResult<string[]>; export type DevOuiSnoPageResult = PageResult<string[]>;
export interface DeviceOrderQuery extends PageQuery { export interface DeviceOrderQuery extends PageQuery {
devSno?: string; devAdNo?: string;
devOui?: string;
pppoeAccount?: string;
} }
export interface MapDev { export interface MapDev {
devId?: number; devId?: number;

@ -1,6 +1,11 @@
import request from "@/utils/request"; import request from "@/utils/request";
import { AxiosPromise } from "axios"; import { AxiosPromise } from "axios";
import { RemoteDevInfoVO, UnBindingForm } from "@/api/remote/types"; import {
RemoteDevInfoVO,
RemoteOperateResult,
UnBindingForm,
} from "@/api/remote/types";
import { DeviceLinkVO } from "@/api/operate-log/types";
export function remoteDevInfo(devId: number): AxiosPromise<RemoteDevInfoVO> { export function remoteDevInfo(devId: number): AxiosPromise<RemoteDevInfoVO> {
return request({ return request({
@ -21,3 +26,26 @@ export function deleteProfile(fileId?: number, devId?: number) {
method: "DELETE", method: "DELETE",
}); });
} }
export function checkDevOnline(
devId?: number
): AxiosPromise<RemoteOperateResult> {
return request({
url: `/api/equipment/v1/remote/check-dev-online/${devId}`,
method: "GET",
});
}
export function getDeviceLinkInfo(devId: number): AxiosPromise<DeviceLinkVO[]> {
return request({
url: `/api/operate-result-args/v1/device-link-info/${devId}`,
method: "GET",
});
}
export function remoteDeviceLinkInfo(
devId: number
): AxiosPromise<DeviceLinkVO[]> {
return request({
url: `/api/equipment/v1/remote/device-link-info/${devId}`,
method: "GET",
});
}

@ -62,3 +62,7 @@ export interface DeviceInfo {
devOnlineTime?: string; devOnlineTime?: string;
devCreateTime?: string; devCreateTime?: string;
} }
export interface RemoteOperateResult {
resultState?: string;
resultCode?: string;
}

@ -430,8 +430,8 @@ const openBindingDev = () => {
bindingDevRef.value.open(orderId); bindingDevRef.value.open(orderId);
}; };
const skipOperate = () => { const skipOperate = () => {
const devSnoOui = orderInfo.value.devSnoOui; let adNo = orderInfo.value.adNo;
if (devSnoOui == null || devSnoOui.length == 0) { if (adNo == null || adNo.length == 0) {
ElMessage({ ElMessage({
message: "设备不存在", message: "设备不存在",
duration: 2000, duration: 2000,
@ -439,19 +439,11 @@ const skipOperate = () => {
}); });
return; return;
} }
checkDeviceExits(devSnoOui) checkDeviceExits(adNo).then(({ data }) => {
.then(({ data }) => { router.push({
router.push({ path: `/resources/remote-info/${data.devId}/${data.typeAndVerId}`,
path: `/resources/remote-info/${data.devId}/${data.typeAndVerId}`,
});
})
.catch(() => {
ElMessage({
message: "设备不存在",
duration: 2000,
type: "error",
});
}); });
});
}; };
onMounted(() => { onMounted(() => {
getData(); getData();

@ -133,6 +133,7 @@
label-class-name="my-label" label-class-name="my-label"
class-name="my-content" class-name="my-content"
width="180px" width="180px"
v-if="ability.reboot == null"
> >
{{ ability.reboot }} {{ ability.reboot }}
</el-descriptions-item> </el-descriptions-item>

@ -0,0 +1,85 @@
<template>
<div class="mt-4">
<el-card shadow="never">
<template #header>
<div class="head-parent-right">
<el-button type="primary" @click="loadRemoteDeviceLinkInfo"
>获取设备链路信息</el-button
>
</div>
</template>
<el-empty
description="暂无数据"
v-loading="loading"
v-if="tableData.length === 0"
/>
<el-card
class="any-table"
v-for="(item, index) in tableData"
:key="index"
shadow="never"
v-loading="loading"
>
<template #header>
<span style="font-size: 14px; font-weight: 700">{{
item.title
}}</span>
</template>
<el-table :data="item.list" highlight-current-row>
<el-table-column
label="参数名称"
align="left"
width="400"
prop="parameterName"
/>
<el-table-column
label="实际值"
align="left"
width="200"
prop="actualValue"
/>
<el-table-column label="备注" align="left" prop="remarks" />
</el-table>
</el-card>
</el-card>
</div>
</template>
<script setup lang="ts">
import { DeviceLinkVO } from "@/api/operate-log/types";
import { getDeviceLinkInfo, remoteDeviceLinkInfo } from "@/api/remote";
const prop = defineProps<{
devId: number;
}>();
const loading = ref<boolean>(false);
const tableData = ref<DeviceLinkVO[]>([]);
const loadDeviceLinkInfo = () => {
loading.value = true;
getDeviceLinkInfo(prop.devId)
.then(({ data }) => {
tableData.value = data;
})
.finally(() => {
loading.value = false;
});
};
const loadRemoteDeviceLinkInfo = () => {
loading.value = true;
remoteDeviceLinkInfo(prop.devId)
.then(({ data }) => {
tableData.value = data;
})
.finally(() => {
loading.value = false;
});
};
onMounted(() => {
loadDeviceLinkInfo();
});
</script>
<style scoped>
:deep(.el-card__body) {
padding: 0 0 0 0;
}
</style>

@ -10,7 +10,7 @@
</div> </div>
</template> </template>
<div class="any-table"> <div class="any-table">
<el-table v-loading="loading" :data="tableData" max-height="380"> <el-table v-loading="loading" :data="tableData" max-height="400">
<el-table-column <el-table-column
label="工单序号" label="工单序号"
align="center" align="center"
@ -148,9 +148,7 @@ import { deviceOderTablePage } from "@/api/order";
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
let devId: number = parseInt(<string>route.params.devId); let devId: number = parseInt(<string>route.params.devId);
let devOui: string = <string>route.query.devOui; let devAdNo: string = <string>route.query.devAdNo;
let devSno: string = <string>route.query.devSno;
let pppoe: string = <string>route.query.pppoeAccount;
const queryForm = ref<DeviceOrderQuery>({ const queryForm = ref<DeviceOrderQuery>({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
@ -183,9 +181,7 @@ const skipOrderEdit = (orderId: number) => {
}; };
const getData = async () => { const getData = async () => {
loading.value = true; loading.value = true;
queryForm.value.devSno = devSno; queryForm.value.devAdNo = devAdNo;
queryForm.value.devOui = devOui;
queryForm.value.pppoeAccount = pppoe;
await deviceOderTablePage(queryForm.value) await deviceOderTablePage(queryForm.value)
.then(({ data }) => { .then(({ data }) => {
tableData.value = data.list; tableData.value = data.list;
@ -200,4 +196,8 @@ onMounted(() => {
}); });
</script> </script>
<style scoped></style> <style scoped>
:deep(.el-card__body) {
padding: 10px 0 0 0;
}
</style>

@ -1,8 +1,5 @@
<template> <template>
<el-descriptions title="设备状态" :column="3" border> <el-descriptions title="设备状态" :column="3" border>
<template #extra>
<el-button type="primary">获取设备链路信息</el-button>
</template>
<el-descriptions-item <el-descriptions-item
label="设备在线状态" label="设备在线状态"
label-align="left" label-align="left"
@ -12,7 +9,13 @@
width="150px" width="150px"
> >
<div v-loading="loading"> <div v-loading="loading">
<el-button type="primary" link>{{ data.devOnline }}</el-button> <el-button
type="primary"
:disabled="loading"
@click="loadDevOnline"
link
>{{ deviceInfo.devOnline }}</el-button
>
</div> </div>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item <el-descriptions-item
@ -23,7 +26,7 @@
class-name="my-content" class-name="my-content"
width="150px" width="150px"
> >
{{ data.devOnlineTime }} {{ deviceInfo.devOnlineTime }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item <el-descriptions-item
label="设备创建时间" label="设备创建时间"
@ -33,21 +36,45 @@
class-name="my-content" class-name="my-content"
width="150px" width="150px"
> >
{{ data.devCreateTime }} {{ deviceInfo.devCreateTime }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<device-ability :type-and-ver-id="typeAndVerId" /> <device-ability :type-and-ver-id="typeAndVerId" />
<device-link-info :dev-id="devId" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import DeviceAbility from "@/views/family/operate/remote-operation/components/DeviceAbility.vue"; import DeviceAbility from "@/views/family/operate/remote-operation/components/DeviceAbility.vue";
import { DeviceInfo } from "@/api/remote/types"; import { DeviceInfo } from "@/api/remote/types";
import { checkDevOnline } from "@/api/remote";
import DeviceLinkInfo from "@/views/family/operate/remote-operation/components/DeviceLinkInfo.vue";
const prop = defineProps<{ const prop = defineProps<{
devId: number; devId: number;
typeAndVerId: number; typeAndVerId: number;
}>(); }>();
const data = inject("dynamic") as DeviceInfo; const deviceInfo = ref<DeviceInfo>(inject("dynamic") as DeviceInfo);
const loading = ref<boolean>(false); const loading = ref<boolean>(false);
const loadDevOnline = () => {
loading.value = true;
checkDevOnline(prop.devId)
.then(({ data }) => {
let resultCode = data.resultCode;
let resultState = data.resultState;
if ("2" === resultState) {
if (resultCode === "401") {
deviceInfo.value.devOnline = "离线";
} else {
deviceInfo.value.devOnline = "在线";
}
} else {
deviceInfo.value.devOnline = "离线";
}
})
.finally(() => {
loading.value = false;
});
};
</script> </script>
<style scoped></style> <style scoped></style>

@ -1,10 +1,12 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="any-table"> <div class="any-table">
<el-table :data="tableData" v-loading="loading"> <el-table :data="tableData" v-loading="loading" max-height="500">
<el-table-column label="任务编号" prop="operTaskId" align="center"> <el-table-column label="任务编号" prop="operTaskId" align="center">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link>{{ scope.row.operTaskId }}</el-button> <el-button type="primary" link>{{
scope.row.operTaskId
}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="AD编号" prop="devAdNo" align="center" /> <el-table-column label="AD编号" prop="devAdNo" align="center" />

@ -358,7 +358,7 @@
>SOAP包日志</el-dropdown-item >SOAP包日志</el-dropdown-item
> >
<el-dropdown-item divided @click="skipDevTypeVerLog" <el-dropdown-item divided @click="skipDevTypeVerLog"
>软件版本对外接口调用信息</el-dropdown-item >软件版本对外接口调用信息</el-dropdown-item
> >
</el-scrollbar> </el-scrollbar>
</el-dropdown-menu> </el-dropdown-menu>
@ -432,12 +432,10 @@ const unbindingLogicId = () => {
}; };
// //
const skipDevOrder = () => { const skipDevOrder = () => {
let devOui = remote.value.devVendorOui; let devAdNo = remote.value.devAdNo;
let devSno = remote.value.devSno;
let pppoeAccount = remote.value.devPppoe;
router.push({ router.push({
path: `/resources/remote-info/order/${remote.value.devId}`, path: `/resources/remote-info/order/${remote.value.devId}`,
query: { devOui, devSno, pppoeAccount }, query: { devAdNo },
}); });
}; };
const skipDevTask2 = () => { const skipDevTask2 = () => {

@ -1,7 +1,7 @@
<!-- 部门树 --> <!-- 部门树 -->
<template> <template>
<el-card shadow="never"> <el-card shadow="never">
<el-input v-model="deptName" placeholder="部门名称" clearable> <el-input v-model="deptName" style="padding: 10px 10px 0 10px" placeholder="部门名称" clearable>
<template #prefix> <template #prefix>
<i-ep-search /> <i-ep-search />
</template> </template>

Loading…
Cancel
Save