fix: 设备工单

master
李小林 8 months ago
parent c12893d077
commit ff7c3acc58
  1. 20
      src/api/order/index.ts
  2. 13
      src/api/order/types.ts
  3. 9
      src/api/remote/types.ts
  4. 13
      src/router/index.ts
  5. 27
      src/views/family/operate/order/components/OrderInfoEdit.vue
  6. 203
      src/views/family/operate/remote-operation/components/DeviceOrder.vue
  7. 18
      src/views/family/operate/remote-operation/components/DeviceStatus.vue
  8. 59
      src/views/family/operate/remote-operation/components/RemoteOperateInfo.vue
  9. 4
      src/views/family/operate/remote-operation/index.vue

@ -1,8 +1,10 @@
import { AxiosPromise } from "axios";
import {
DeviceOrderQuery, MapDev,
ModifyOrderForm,
OrderInfoServicePageResult,
OrderInfoVO, OrderLogPageResult,
OrderInfoVO,
OrderLogPageResult,
OrderPageResult,
OrderServicePageResult,
OrderServiceVO
@ -99,3 +101,19 @@ export function bindingOuiSno(orderId: number, devOuiSno: string) {
method: "PUT",
});
}
export function deviceOderTablePage(
data: DeviceOrderQuery
): AxiosPromise<OrderPageResult> {
return request({
url: "/api/order/v1/device-order/page",
method: "POST",
data,
});
}
export function checkDeviceExits(devSnoOui): AxiosPromise<MapDev> {
return request({
url: `/api/order/v1/check-dev/${devSnoOui}`,
method: "GET",
});
}

@ -113,3 +113,16 @@ export interface DevOuiSnoSearchForm extends PageQuery {
devOuiSno?: string;
}
export type DevOuiSnoPageResult = PageResult<string[]>;
export interface DeviceOrderQuery extends PageQuery {
devSno?: string;
devOui?: string;
pppoeAccount?: string;
}
export interface MapDev {
devId?: number;
typeAndVerId?: number;
}

@ -37,6 +37,10 @@ export interface RemoteDevInfoVO {
devOnlineTime?: string;
devCreateTime?: string;
devOnline?: string;
devAccessType?: string;
devTypeNameDetail?: string;
@ -53,3 +57,8 @@ export interface UnBindingForm {
devVendorOui?: string;
devRemark4?: string;
}
export interface DeviceInfo {
devOnline?: string;
devOnlineTime?: string;
devCreateTime?: string;
}

@ -230,6 +230,19 @@ export const constantRoutes: RouteRecordRaw[] = [
title: "远程操作详情",
},
},
{
path: "/resources/remote-info/order/:devId",
name: "DeviceOrder",
component: () =>
import(
"@/views/family/operate/remote-operation/components/DeviceOrder.vue"
),
meta: {
hidden: true,
keepAlive: true,
title: "设备工单",
},
},
],
},
];

@ -30,7 +30,7 @@
</el-popconfirm>
<el-button type="primary" @click="skipModifyOrder">修改</el-button>
<el-button type="primary">设备操作维护</el-button>
<el-button type="primary" @click="skipOperate">设备操作维护</el-button>
<el-button type="primary" @click="openOrderLog">工单日志</el-button>
</div>
<el-card shadow="never" v-loading="loading">
@ -351,6 +351,7 @@
<script setup lang="ts">
import { OrderInfoServiceVO, OrderInfoVO } from "@/api/order/types";
import {
checkDeviceExits,
executeOrder,
findOrderInfoById,
findOrderInfoServicePage,
@ -428,6 +429,30 @@ const openOrderLog = () => {
const openBindingDev = () => {
bindingDevRef.value.open(orderId);
};
const skipOperate = () => {
const devSnoOui = orderInfo.value.devSnoOui;
if (devSnoOui == null || devSnoOui.length == 0) {
ElMessage({
message: "设备不存在",
duration: 2000,
type: "error",
});
return;
}
checkDeviceExits(devSnoOui)
.then(({ data }) => {
router.push({
path: `/resources/remote-info/${data.devId}/${data.typeAndVerId}`,
});
})
.catch(() => {
ElMessage({
message: "设备不存在",
duration: 2000,
type: "error",
});
});
};
onMounted(() => {
getData();
getOrderInfoServiceList();

@ -0,0 +1,203 @@
<template>
<div class="app-container">
<el-card shadow="never">
<template #header>
<div style="display: flex; justify-content: space-between">
<div style="font-weight: 700; line-height: 32px; font-size: 14px">
设备工单
</div>
<table-bar :columns="columns" @change-columns="changeColumns" />
</div>
</template>
<div class="any-table">
<el-table v-loading="loading" :data="tableData" max-height="380">
<el-table-column
label="工单序号"
align="center"
fixed
width="250"
prop="receivedOrderId"
v-if="columns[0].show"
>
<template #default="scope">
<el-button
type="primary"
@click="skipOrderEdit(scope.row.orderId)"
link
>{{ scope.row.receivedOrderId }}
</el-button>
</template>
</el-table-column>
<el-table-column
label="受理号"
align="center"
width="180"
prop="receivedOrderLhs"
v-if="columns[1].show"
/>
<el-table-column
label="开工单日期"
align="center"
prop="orderDate"
width="180"
v-if="columns[2].show"
/>
<el-table-column
label="AD编号"
align="center"
prop="adNo"
width="180"
v-if="columns[3].show"
/>
<el-table-column
label="工单状态"
align="center"
prop="orderStatus"
v-if="columns[4].show"
/>
<el-table-column
label="操作类型"
align="center"
prop="orderRemark"
v-if="columns[5].show"
/>
<el-table-column
label="工单业务类型"
align="center"
width="180"
prop="orderServiceType"
v-if="columns[6].show"
/>
<el-table-column
label="业务类型"
align="center"
width="180"
prop="operRemark"
v-if="columns[7].show"
/>
<el-table-column
label="端口"
align="center"
prop="port"
v-if="columns[8].show"
/>
<el-table-column
label="PPPoe账号"
align="center"
prop="pppoeAccount"
width="180"
v-if="columns[9].show"
/>
<el-table-column
label="电话号码"
align="center"
width="180"
prop="telNum"
v-if="columns[10].show"
/>
<el-table-column
label="系统管理域"
align="center"
prop="domain"
width="180"
v-if="columns[11].show"
/>
<el-table-column
label="是否定制终端"
align="center"
prop="remark3"
width="180"
v-if="columns[12].show"
>
<template #default="scope">
<span v-if="scope.row.remark3 === '1'">非定制终端</span>
<span v-else>定制终端</span>
</template>
</el-table-column>
<el-table-column
label="工单接收日期"
align="center"
prop="receivedDate"
width="180"
v-if="columns[13].show"
/>
<el-table-column
label="设备上线状态"
align="center"
width="180"
prop="devOnLineStatus"
v-if="columns[14].show"
/>
</el-table>
</div>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryForm.pageNum"
v-model:limit="queryForm.pageSize"
@pagination="getData"
/>
</el-card>
</div>
</template>
<script setup lang="ts">
import { DeviceOrderQuery, OrderTableVO } from "@/api/order/types";
import { deviceOderTablePage } from "@/api/order";
const route = useRoute();
const router = useRouter();
let devId: number = parseInt(<string>route.params.devId);
let devOui: string = <string>route.query.devOui;
let devSno: string = <string>route.query.devSno;
let pppoe: string = <string>route.query.pppoeAccount;
const queryForm = ref<DeviceOrderQuery>({
pageNum: 1,
pageSize: 10,
});
const loading = ref<boolean>(false);
const total = ref<number>(0);
const tableData = ref<OrderTableVO[]>([]);
const columns = ref<TableColumns[]>([
{ name: "工单序号", show: true },
{ name: "受理号", show: true },
{ name: "开工单日期", show: true },
{ name: "AD编号", show: true },
{ name: "工单状态", show: true },
{ name: "操作类型", show: false },
{ name: "工单业务类型", show: false },
{ name: "业务类型", show: true },
{ name: "端口", show: true },
{ name: "PPPoe账号", show: true },
{ name: "电话号码", show: true },
{ name: "系统管理域", show: true },
{ name: "是否定制终端", show: false },
{ name: "工单接收日期", show: false },
{ name: "设备上线状态", show: false },
]);
const changeColumns = (newColumns: TableColumns[]) => {
columns.value = newColumns;
};
const skipOrderEdit = (orderId: number) => {
router.push({ path: `/resources/order-info-edit/${orderId}` });
};
const getData = async () => {
loading.value = true;
queryForm.value.devSno = devSno;
queryForm.value.devOui = devOui;
queryForm.value.pppoeAccount = pppoe;
await deviceOderTablePage(queryForm.value)
.then(({ data }) => {
tableData.value = data.list;
total.value = data.total;
})
.finally(() => {
loading.value = false;
});
};
onMounted(() => {
getData();
});
</script>
<style scoped></style>

@ -10,7 +10,11 @@
label-class-name="my-label"
class-name="my-content"
width="150px"
/>
>
<div v-loading="loading">
<el-button type="primary" link>{{ data.devOnline }}</el-button>
</div>
</el-descriptions-item>
<el-descriptions-item
label="设备在线时间"
label-align="left"
@ -18,7 +22,9 @@
label-class-name="my-label"
class-name="my-content"
width="150px"
/>
>
{{ data.devOnlineTime }}
</el-descriptions-item>
<el-descriptions-item
label="设备创建时间"
label-align="left"
@ -26,18 +32,22 @@
label-class-name="my-label"
class-name="my-content"
width="150px"
/>
>
{{ data.devCreateTime }}
</el-descriptions-item>
</el-descriptions>
<device-ability :type-and-ver-id="typeAndVerId" />
</template>
<script setup lang="ts">
import DeviceAbility from "@/views/family/operate/remote-operation/components/DeviceAbility.vue";
import { DeviceInfo } from "@/api/remote/types";
const prop = defineProps<{
devId: number;
typeAndVerId: number;
}>();
const data = inject("dynamic") as DeviceInfo;
const loading = ref<boolean>(false);
</script>
<style scoped></style>

@ -206,8 +206,8 @@
</div>
<div v-hasPerm="['family:remote:ping:test']">
<el-dropdown-item divided
>设备Ping测试</el-dropdown-item
>
>设备Ping测试
</el-dropdown-item>
</div>
<div v-hasPerm="['family:remote:profiles:upload']">
<el-dropdown-item divided
@ -224,8 +224,8 @@
</div>
<div v-hasPerm="['family:remote:dev:reload']">
<el-dropdown-item divided
>设备远程重启</el-dropdown-item
>
>设备远程重启
</el-dropdown-item>
</div>
<div v-hasPerm="['family:remote:profiles:issued']">
<el-dropdown-item divided
@ -271,13 +271,13 @@
</div>
<div v-hasPerm="['family:remote:reset:graphs']">
<el-dropdown-item divided
>终端重置数图</el-dropdown-item
>
>终端重置数图
</el-dropdown-item>
</div>
<div v-hasPerm="['family:remote:iptv:multicast']">
<el-dropdown-item divided
>重置IPTV组播</el-dropdown-item
>
>重置IPTV组播
</el-dropdown-item>
</div>
<div v-hasPerm="['family:remote:node:customize']">
<el-dropdown-item divided
@ -316,8 +316,8 @@
</div>
<div v-hasPerm="['family:remote:info:update']">
<el-dropdown-item divided
>通用信息修改</el-dropdown-item
>
>通用信息修改
</el-dropdown-item>
</div>
</el-scrollbar>
</el-dropdown-menu>
@ -328,12 +328,26 @@
<el-descriptions-item
label="其他操作"
label-align="left"
align="center"
align="left"
label-class-name="my-label"
class-name="my-content"
width="150px"
>
{{ remote.devTypeNameDetail }}
<div>
<el-dropdown split-button placement="right">
其他操作列表
<template #dropdown>
<el-dropdown-menu>
<el-scrollbar height="300">
<el-dropdown-item @click="skipDevOrder"
>设备工单</el-dropdown-item
>
<el-dropdown-item divided>设备任务列表</el-dropdown-item>
</el-scrollbar>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</el-descriptions-item>
</el-descriptions>
</el-card>
@ -343,28 +357,37 @@
</template>
<script setup lang="ts">
import { RemoteDevInfoVO, UnBindingForm } from "@/api/remote/types";
import { DeviceInfo, RemoteDevInfoVO, UnBindingForm } from "@/api/remote/types";
import { remoteDevInfo, remoteUnbindingLogicId } from "@/api/remote";
import { InfoFilled } from "@element-plus/icons-vue";
import OperateTabs from "@/views/family/operate/remote-operation/components/OperateTabs.vue";
const route = useRoute();
const router = useRouter();
let devId: number = parseInt(<string>route.params.devId);
let typeAndVerId: number = parseInt(<string>route.params.typeAndVerId);
const remote = ref<RemoteDevInfoVO>({});
const unbindingForm = ref<UnBindingForm>({});
const loading = ref<boolean>(false);
const dynamic = ref<DeviceInfo>({});
provide("dynamic", dynamic);
const getData = () => {
loading.value = true;
remoteDevInfo(devId)
.then(({ data }) => {
remote.value = data;
dynamic.value = {
devOnline: data.devOnline,
devOnlineTime: data.devOnlineTime,
devCreateTime: data.devCreateTime,
};
})
.finally(() => {
loading.value = false;
});
};
const unbindingLogicId = () => {
let { devId, devAdNo, devSno, devVendorOui, devRemark4 } = remote.value;
unbindingForm.value = {
@ -390,6 +413,16 @@ const unbindingLogicId = () => {
loading.value = false;
});
};
//
const skipDevOrder = () => {
let devOui = remote.value.devVendorOui;
let devSno = remote.value.devSno;
let pppoeAccount = remote.value.devPppoe;
router.push({
path: `/resources/remote-info/order/${remote.value.devId}`,
query: { devOui, devSno, pppoeAccount },
});
};
onMounted(() => {
getData();
});

@ -221,7 +221,9 @@ const handleQuery = () => {
});
};
const skipRemoteInfo = (row: RemoteEquipmentTable) => {
router.push({ path: `/resources/remote-info/${row.devId}/${row.typeAndVerId}` });
router.push({
path: `/resources/remote-info/${row.devId}/${row.typeAndVerId}`,
});
};
</script>

Loading…
Cancel
Save