设备管理画面

main
zhufu 3 months ago
parent a0a285a211
commit 110a57082b

@ -0,0 +1,72 @@
<template>
<BasicTable class="w-4/4 xl:w-5/5" @register="registerTable">
<template #toolbar>
<a-button type="primary">导出飞行器信息</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'ant-design:edit-outlined',
onClick: () => {
},
},
{
color: 'error',
icon: 'ant-design:delete-outlined',
onClick: () => {
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script setup lang="ts">
import { h, } from "vue"
import { EditOutlined } from '@ant-design/icons-vue'
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { columns, dataSource, searchFormSchema } from './utils'
const [registerTable, { reload, expandAll, getForm}] = useTable({
title: '飞行器',
// api: (params) => LoadCaseInfoLists(type,params),
dataSource,
columns,
rowKey: 'id',
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
striped: false,
//
showIndexColumn: false,
// 使
useSearchForm: true,
//
showTableSetting: true,
bordered: true,
beforeFetch(data) {
let params = {...data}
if(!params.nowStatus){
params.nowStatus = '复提待审核'
}
return params
},
afterFetch(data) {
console.log('afterFetch', data);
},
actionColumn: {
width: 100,
title: '操作',
dataIndex: 'action',
},
handleSearchInfoFn(info) {
return info;
},
});
</script>
<style lang="scss" scoped></style>

@ -0,0 +1,93 @@
import { BasicColumn, FormSchema } from '@/components/Table';
export const columns = [
{
title: '设备型号',
dataIndex: 'model',
},
{
title: '设备SN',
dataIndex: 'sn',
},
{
title: '设备名称',
dataIndex: 'name',
},
{
title: '固件版本',
dataIndex: 'version',
},
{
title: '在线状态',
dataIndex: 'status',
},
{
title: '所属项目',
dataIndex: 'project',
},
{
title: '加入组织时间',
dataIndex: 'join_time',
},
{
title: '在线时间',
dataIndex: 'online_time',
},
];
export const dataSource = [
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, status: 555, project: 666, join_time: 777, online_time: 888 },
]
export const searchFormSchema: FormSchema[] = [
{
field: 'project',
label: '项目',
component: 'Select',
componentProps: {
options: [
],
},
colProps: { span: 4 },
},
{
field: 'status',
label: '当前状态',
component: 'Select',
componentProps: {
options: [
{ label: '在线', value: '在线' },
{ label: '离线', value: '离线' },
],
},
colProps: { span: 4 },
},
{
field: 'model',
label: '设备型号',
component: 'Select',
componentProps: {
options: [
],
},
colProps: { span: 4 },
},
{
field: 'sn',
label: '设备SN',
component: 'Input',
colProps: { span: 6 },
},
];

@ -0,0 +1,40 @@
<template>
<div class="device-bind-content">
<p class="item-value">
请通过手机大疆行业 APP 或遥控器 DJI Pilot 2 的机场部署流程-云服务配置以组织ID和设备绑定码来绑定机场
</p>
<div class="show-item">
<div class="item-label">组织名称</div>
<div class="item-value">TEST</div>
</div>
<div class="show-item">
<div class="item-label">组织 ID</div>
<div class="item-value">XDX9VU</div>
</div>
<div class="show-item">
<div class="item-label">设备绑定码</div>
<div class="item-value">6473D312</div>
</div>
</div>
</template>
<script setup lang="ts">
import {} from "vue"
</script>
<style lang="scss" scoped>
.device-bind-content{
padding: 20px;
.item-value{
opacity: 0.7;
}
.show-item{
display: flex;
margin-bottom: 15px;
.item-label{
width: 150px;
text-align: left;
}
}
}
</style>

@ -0,0 +1,67 @@
<template>
<BasicTable class="w-4/4 xl:w-5/5" @register="registerTable">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'ant-design:file-search-outlined',
onClick: () => {
},
},
{
icon: 'carbon:calendar-tools',
onClick: () => {
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script setup lang="ts">
import {} from "vue"
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { columns, dataSource, searchFormSchema } from './utils'
const [registerTable, { reload, expandAll, getForm}] = useTable({
title: '设备定损',
// api: (params) => LoadCaseInfoLists(type,params),
dataSource,
columns,
rowKey: 'id',
formConfig: {
labelWidth: 100,
schemas: searchFormSchema,
},
striped: false,
//
showIndexColumn: false,
// 使
useSearchForm: true,
//
showTableSetting: true,
bordered: true,
beforeFetch(data) {
let params = {...data}
if(!params.nowStatus){
params.nowStatus = '复提待审核'
}
return params
},
afterFetch(data) {
console.log('afterFetch', data);
},
actionColumn: {
width: 100,
title: '操作',
dataIndex: 'action',
},
handleSearchInfoFn(info) {
return info;
},
});
</script>
<style lang="scss" scoped></style>

@ -0,0 +1,95 @@
import { BasicColumn, FormSchema } from '@/components/Table';
export const columns = [
{
title: '操作时间',
dataIndex: 'operate_time',
},
{
title: '定损类型',
dataIndex: 'problem_type',
},
{
title: '操作人',
dataIndex: 'user',
},
{
title: '设备型号',
dataIndex: 'model',
},
{
title: '设备SN',
dataIndex: 'sn',
},
{
title: '设备名称',
dataIndex: 'name',
},
{
title: '状态',
dataIndex: 'status',
},
];
export const dataSource = [
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
{ operate_time: 111, problem_type:222, user: 333, model: 444, sn:'1.0.0', name:'test', status: 555},
]
export const searchFormSchema: FormSchema[] = [
{
field: 'time',
component: 'RangePicker',
colProps: { span: 4 },
},
{
field: 'type',
label: '定损类型',
component: 'Select',
componentProps: {
options: [
{ label: '整机定损', value: '整机定损' },
{ label: '空调制冷模块定损', value: '空调制冷模块定损' },
{ label: '空调制热模块定损', value: '空调制热模块定损' },
{ label: '快速定损', value: '快速定损' },
],
},
colProps: { span: 4 },
},
{
field: 'user',
label: '操作员',
component: 'Select',
componentProps: {
options: [
],
},
colProps: { span: 4 },
},
{
field: 'status',
label: '状态',
component: 'Select',
componentProps: {
options: [
{ label: '待上传', value: '待上传' },
{ label: '数据处理', value: '数据处理' },
{ label: '上传中', value: '上传中' },
{ label: '上传完成', value: '上传完成' },
{ label: '上传失败', value: '上传失败' },
{ label: '已暂停', value: '已暂停' },
{ label: '已取消', value: '已取消' },
],
},
colProps: { span: 4 },
},
{
field: 'sn',
label: '设备SN',
component: 'Input',
colProps: { span: 6 },
},
];

@ -0,0 +1,67 @@
<template>
<BasicTable class="w-4/4 xl:w-5/5" @register="registerTable">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'ant-design:file-search-outlined',
onClick: () => {
},
},
{
icon: 'carbon:calendar-tools',
onClick: () => {
},
},
]"
/>
</template>
</template>
</BasicTable>
</template>
<script setup lang="ts">
import {} from "vue"
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { columns, dataSource, searchFormSchema } from './utils'
const [registerTable, { reload, expandAll, getForm}] = useTable({
title: '日志反馈',
// api: (params) => LoadCaseInfoLists(type,params),
dataSource,
columns,
rowKey: 'id',
formConfig: {
labelWidth: 100,
schemas: searchFormSchema,
},
striped: false,
//
showIndexColumn: false,
// 使
useSearchForm: true,
//
showTableSetting: true,
bordered: true,
beforeFetch(data) {
let params = {...data}
if(!params.nowStatus){
params.nowStatus = '复提待审核'
}
return params
},
afterFetch(data) {
console.log('afterFetch', data);
},
actionColumn: {
width: 100,
title: '操作',
dataIndex: 'action',
},
handleSearchInfoFn(info) {
return info;
},
});
</script>
<style lang="scss" scoped></style>

@ -0,0 +1,90 @@
import { BasicColumn, FormSchema } from '@/components/Table';
export const columns = [
{
title: '反馈时间',
dataIndex: 'feedback_time',
},
{
title: '反馈人',
dataIndex: 'feedback_user',
},
{
title: '设备型号',
dataIndex: 'model',
},
{
title: '设备SN',
dataIndex: 'sn',
},
{
title: '设备名称',
dataIndex: 'name',
},
{
title: '设备异常描述',
dataIndex: 'description',
},
{
title: '上传状态',
dataIndex: 'status',
},
];
export const dataSource = [
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
{ feedback_time: 111, feedback_user:222, model: 333, sn: 444, name:'1.0.0', description:'test', status: 555},
]
export const searchFormSchema: FormSchema[] = [
{
field: 'time',
component: 'RangePicker',
// componentProps: {
// options: [
// { label: '固件待升级', value: '固件待升级' },
// { label: '固件一致性升级', value: '固件一致性升级' },
// { label: '飞行安全数据库待升级', value: '飞行安全数据库待升级' },
// ],
// },
colProps: { span: 4 },
},
{
field: 'feedback_user',
label: '反馈人',
component: 'Select',
componentProps: {
options: [
],
},
colProps: { span: 4 },
},
{
field: 'status',
label: '状态',
component: 'Select',
componentProps: {
options: [
{ label: '待上传', value: '待上传' },
{ label: '数据处理', value: '数据处理' },
{ label: '上传中', value: '上传中' },
{ label: '上传完成', value: '上传完成' },
{ label: '上传失败', value: '上传失败' },
{ label: '已暂停', value: '已暂停' },
{ label: '已取消', value: '已取消' },
],
},
colProps: { span: 4 },
},
{
field: 'sn',
label: '设备SN',
component: 'Input',
colProps: { span: 6 },
},
];

@ -0,0 +1,20 @@
<template>
<a-tabs v-model:activeKey="activeKey" class="device-tabs">
<a-tab-pane key="log" tab="日志反馈">
<LogFeedback />
</a-tab-pane>
<a-tab-pane key="equipment" tab="设备定损">
<Equipment />
</a-tab-pane>
</a-tabs>
</template>
<script setup lang="ts">
import { ref } from "vue"
import LogFeedback from './LogFeedback/index.vue'
import Equipment from './Equipment/index.vue'
const activeKey = ref('log')
</script>
<style lang="scss" scoped></style>

@ -0,0 +1,101 @@
<template>
<BasicTable class="w-4/4 xl:w-5/5" @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="openFeedbackDrawer"></a-button>
<a-button type="primary" @click="openDeviceBindingModal"></a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'ant-design:file-search-outlined',
onClick: () => {
},
},
{
icon: 'carbon:calendar-tools',
onClick: () => {
},
},
]"
/>
</template>
</template>
</BasicTable>
<a-drawer class="feedback-drawer" v-model:open="feedbackDrawer" width="80%" :closable="false">
<FeedbackDrawer />
</a-drawer>
<a-modal v-model:open="deviceBindingModal" title="设备绑定码" @ok="handleOk">
<DeviceBindModal />
</a-modal>
</template>
<script setup lang="ts">
import { ref } from "vue"
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { columns, dataSource, searchFormSchema } from './utils'
import FeedbackDrawer from './FeedbackDrawer/index.vue'
import DeviceBindModal from './DeviceBindModal/index.vue'
const feedbackDrawer = ref(false)
const deviceBindingModal = ref(false)
const [registerTable, { reload, expandAll, getForm}] = useTable({
title: '机场',
// api: (params) => LoadCaseInfoLists(type,params),
dataSource,
columns,
rowKey: 'id',
formConfig: {
labelWidth: 100,
schemas: searchFormSchema,
},
striped: false,
//
showIndexColumn: false,
// 使
useSearchForm: true,
//
showTableSetting: true,
bordered: true,
beforeFetch(data) {
let params = {...data}
if(!params.nowStatus){
params.nowStatus = '复提待审核'
}
return params
},
afterFetch(data) {
console.log('afterFetch', data);
},
actionColumn: {
width: 100,
title: '操作',
dataIndex: 'action',
},
handleSearchInfoFn(info) {
return info;
},
});
const openFeedbackDrawer = () => {
feedbackDrawer.value = true
}
const openDeviceBindingModal = () => {
deviceBindingModal.value = true
}
</script>
<style lang="scss" scoped>
// .feedback-drawer{
// :deep(.ant-drawer-body){
// padding: 0px;
// }
// }
// </style>
// <style lang="scss">
// .feedback-drawer{
// .ant-drawer-body{
// padding: 0px;
// }
// }
</style>

@ -0,0 +1,119 @@
import { BasicColumn, FormSchema } from '@/components/Table';
export const columns = [
{
title: '设备型号',
dataIndex: 'model',
},
{
title: '设备SN',
dataIndex: 'sn',
},
{
title: '设备名称',
dataIndex: 'name',
},
{
title: '固件版本',
dataIndex: 'version',
},
{
title: '固件升级',
dataIndex: 'upgrade',
},
{
title: '飞行安全数据库',
dataIndex: 'database',
},
{
title: '工作状态',
dataIndex: 'status',
},
{
title: '所属项目',
dataIndex: 'project',
},
{
title: '加入组织时间',
dataIndex: 'join_time',
},
{
title: '在线时间',
dataIndex: 'online_time',
},
];
export const dataSource = [
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
{ model: 111, sn:222, name: 333, version: 444, upgrade:'1.0.0', database:'test', status: 555, project: 666, join_time: 777, online_time: 888 },
]
export const searchFormSchema: FormSchema[] = [
{
field: 'upgrade_status',
label: '升级状态',
component: 'Select',
componentProps: {
options: [
{ label: '固件待升级', value: '固件待升级' },
{ label: '固件一致性升级', value: '固件一致性升级' },
{ label: '飞行安全数据库待升级', value: '飞行安全数据库待升级' },
],
},
colProps: { span: 4 },
},
{
field: 'work_status',
label: '工作状态',
component: 'Select',
componentProps: {
options: [
{ label: '全部工作状态', value: '全部工作状态' },
{ label: '设备空闲中', value: '设备空闲中' },
{ label: '现场调试中', value: '现场调试中' },
{ label: '远程调试中', value: '远程调试中' },
{ label: '设备作业中', value: '设备作业中' },
{ label: '设备升级中', value: '设备升级中' },
{ label: '设备已离线', value: '设备已离线' },
{ label: '未标定', value: '未标定' },
],
},
colProps: { span: 4 },
},
{
field: 'project',
label: '项目',
component: 'Select',
componentProps: {
options: [
],
},
colProps: { span: 4 },
},
{
field: 'model',
label: '设备型号',
component: 'Select',
componentProps: {
options: [
],
},
colProps: { span: 4 },
},
{
field: 'sn',
label: '设备SN',
component: 'Input',
colProps: { span: 6 },
},
];

@ -0,0 +1,30 @@
<template>
<div class="device-page">
<a-tabs v-model:activeKey="activeKey" class="device-tabs">
<a-tab-pane key="airport" tab="机场">
<Airport />
</a-tab-pane>
<a-tab-pane key="aerocraft" tab="飞行器">
<Aerocraft />
</a-tab-pane>
</a-tabs>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue"
import Airport from './Airport/index.vue'
import Aerocraft from './Aerocraft/index.vue'
const activeKey = ref('airport')
</script>
<style lang="scss" scoped>
.device-page{
.device-tabs{
:deep(.ant-tabs-nav-wrap){
padding-left: 20px;
}
}
}
</style>
Loading…
Cancel
Save