| | |
| | | <template> |
| | | <div class="header">Media Files</div> |
| | | <div class="header">媒体文件</div> |
| | | <a-spin :spinning="loading" :delay="1000" tip="downloading" size="large"> |
| | | <div class="media-panel-wrapper"> |
| | | <a-table class="media-table" :columns="columns" :data-source="mediaData.data" row-key="fingerprint" |
| | |
| | | |
| | | const columns = [ |
| | | { |
| | | title: 'File Name', |
| | | title: '文件名称', |
| | | dataIndex: 'file_name', |
| | | ellipsis: true, |
| | | slots: { customRender: 'name' } |
| | | }, |
| | | { |
| | | title: 'File Path', |
| | | dataIndex: 'file_path', |
| | | ellipsis: true, |
| | | slots: { customRender: 'path' } |
| | | }, |
| | | // { |
| | | // title: 'FileSize', |
| | | // dataIndex: 'size', |
| | | // title: '文件路径', |
| | | // dataIndex: 'file_path', |
| | | // ellipsis: true, |
| | | // slots: { customRender: 'path' } |
| | | // }, |
| | | { |
| | | title: 'Drone', |
| | | dataIndex: 'drone' |
| | | }, |
| | | { |
| | | title: 'Payload Type', |
| | | title: '拍摄负载', |
| | | dataIndex: 'payload' |
| | | }, |
| | | { |
| | | title: 'Original', |
| | | dataIndex: 'is_original', |
| | | slots: { customRender: 'original' } |
| | | title: '大小', |
| | | dataIndex: 'size', |
| | | }, |
| | | // { |
| | | // title: '拍摄负载', |
| | | // dataIndex: 'drone' |
| | | // }, |
| | | // { |
| | | // title: 'Original', |
| | | // dataIndex: 'is_original', |
| | | // slots: { customRender: 'original' } |
| | | // }, |
| | | { |
| | | title: 'Created', |
| | | title: '创建时间', |
| | | dataIndex: 'create_time' |
| | | }, |
| | | { |
| | | title: 'Action', |
| | | title: '操作', |
| | | slots: { customRender: 'action' } |
| | | } |
| | | ] |
| | |
| | | </router-link> |
| | | </div> |
| | | <div class="mb20 flex-display flex-column flex-align-center flex-justify-between"> |
| | | <a-tooltip title="Back to home" placement="right"> |
| | | <a @click="goHome"> <Icon icon="ImportOutlined" style="font-size: 22px; color: white"/></a> |
| | | <a-tooltip title="返回项目列表" placement="right"> |
| | | <a @click="goBack"> <Icon icon="ImportOutlined" style="font-size: 22px; color: white"/></a> |
| | | </a-tooltip> |
| | | </div> |
| | | </div> |
| | |
| | | setup () { |
| | | const root = getRoot() |
| | | const options = [ |
| | | { key: 0, label: 'Tsa', path: '/' + ERouterName.TSA, icon: 'TeamOutlined' }, |
| | | { key: 1, label: 'Livestream', path: '/' + ERouterName.LIVESTREAM, icon: 'VideoCameraOutlined' }, |
| | | { key: 2, label: 'Annotations', path: '/' + ERouterName.LAYER, icon: 'EnvironmentOutlined' }, |
| | | { key: 3, label: 'Media Files', path: '/' + ERouterName.MEDIA, icon: 'PictureOutlined' }, |
| | | { key: 4, label: 'Flight Route Library', path: '/' + ERouterName.WAYLINE, icon: 'NodeIndexOutlined' }, |
| | | { key: 5, label: 'Task Plan Library', path: '/' + ERouterName.TASK, icon: 'CalendarOutlined' } |
| | | { key: 0, label: '团队', path: '/' + ERouterName.TSA, icon: 'TeamOutlined' }, |
| | | { key: 1, label: '直播', path: '/' + ERouterName.LIVESTREAM, icon: 'VideoCameraOutlined' }, |
| | | { key: 2, label: '标注', path: '/' + ERouterName.LAYER, icon: 'EnvironmentOutlined' }, |
| | | { key: 3, label: '媒体库', path: '/' + ERouterName.MEDIA, icon: 'PictureOutlined' }, |
| | | { key: 4, label: '航线库', path: '/' + ERouterName.WAYLINE, icon: 'NodeIndexOutlined' }, |
| | | { key: 5, label: '计划库', path: '/' + ERouterName.TASK, icon: 'CalendarOutlined' } |
| | | ] |
| | | |
| | | function selectedRoute (item: IOptions) { |
| | |
| | | return root.$route.path?.indexOf(path) === 0 |
| | | } |
| | | |
| | | function goHome () { |
| | | root.$router.push('/' + ERouterName.MEMBERS) |
| | | function goBack () { |
| | | root.$router.go(-1) |
| | | // root.$router.push('/' + ERouterName.MEMBERS) |
| | | } |
| | | |
| | | return { |
| | | options, |
| | | selectedRoute, |
| | | goHome, |
| | | goBack, |
| | | } |
| | | } |
| | | }) |
| | |
| | | <a-menu theme="dark" class="flex-column flex-justify-between flex-align-center"> |
| | | <a-menu-item> |
| | | <span class="mr10" style="font-size: 16px;"><ExportOutlined /></span> |
| | | <span @click="logout">Log Out</span> |
| | | <span @click="logout">退出登录</span> |
| | | </a-menu-item> |
| | | </a-menu> |
| | | </template> |
| | |
| | | <template> |
| | | <a-menu v-model:selectedKeys="current" mode="horizontal" @select="select"> |
| | | <a-menu-item :key="EDeviceTypeName.Aircraft" class="ml20"> |
| | | Aircraft |
| | | 飞行器 |
| | | </a-menu-item> |
| | | <a-menu-item :key="EDeviceTypeName.Dock"> |
| | | Dock |
| | | 机场 |
| | | </a-menu-item> |
| | | </a-menu> |
| | | <div class="device-table-wrap table flex-display flex-column"> |
| | |
| | | const deleteTip = ref<boolean>(false) |
| | | const deleteSn = ref<string>() |
| | | const columns: ColumnProps[] = [ |
| | | { title: 'Model', dataIndex: 'device_name', width: 100, className: 'titleStyle' }, |
| | | { title: 'SN', dataIndex: 'device_sn', width: 100, className: 'titleStyle', ellipsis: true, slots: { customRender: 'sn' } }, |
| | | { title: '设备型号', dataIndex: 'device_name', width: 100, className: 'titleStyle' }, |
| | | { title: '设备SN', dataIndex: 'device_sn', width: 100, className: 'titleStyle', ellipsis: true, slots: { customRender: 'sn' } }, |
| | | { |
| | | title: 'Name', |
| | | title: '设备组织名称', |
| | | dataIndex: 'nickname', |
| | | width: 100, |
| | | sorter: (a: Device, b: Device) => a.nickname.localeCompare(b.nickname), |
| | |
| | | ellipsis: true, |
| | | slots: { customRender: 'nickname' } |
| | | }, |
| | | { title: 'Firmware Version', dataIndex: 'firmware_version', width: 150, className: 'titleStyle', slots: { customRender: 'firmware_version' } }, |
| | | { title: 'Status', dataIndex: 'status', width: 100, className: 'titleStyle', slots: { customRender: 'status' } }, |
| | | { title: '固件版本', dataIndex: 'firmware_version', width: 150, className: 'titleStyle', slots: { customRender: 'firmware_version' } }, |
| | | { title: '在线状态', dataIndex: 'status', width: 100, className: 'titleStyle', slots: { customRender: 'status' } }, |
| | | { |
| | | title: 'Workspace', |
| | | title: '所属项目', |
| | | dataIndex: 'workspace_name', |
| | | width: 100, |
| | | className: 'titleStyle', |
| | |
| | | return obj |
| | | } |
| | | }, |
| | | { title: 'Joined', dataIndex: 'bound_time', width: 150, sorter: (a: Device, b: Device) => a.bound_time.localeCompare(b.bound_time), className: 'titleStyle' }, |
| | | { title: 'Last Online', dataIndex: 'login_time', width: 150, sorter: (a: Device, b: Device) => a.login_time.localeCompare(b.login_time), className: 'titleStyle' }, |
| | | { title: '加入组织时间', dataIndex: 'bound_time', width: 150, sorter: (a: Device, b: Device) => a.bound_time.localeCompare(b.bound_time), className: 'titleStyle' }, |
| | | { title: '在线时间', dataIndex: 'login_time', width: 150, sorter: (a: Device, b: Device) => a.login_time.localeCompare(b.login_time), className: 'titleStyle' }, |
| | | { |
| | | title: 'Actions', |
| | | title: '操作', |
| | | dataIndex: 'actions', |
| | | width: 100, |
| | | className: 'titleStyle', |
| | |
| | | <div style="height: 50px; line-height: 50px; border-bottom: 1px solid #4f4f4f; font-weight: 450;"> |
| | | <a-row> |
| | | <a-col :span="1"></a-col> |
| | | <a-col :span="22">Annotations</a-col> |
| | | <a-col :span="22">标注</a-col> |
| | | <a-col :span="1"></a-col> |
| | | </a-row> |
| | | </div> |
| | |
| | | /> |
| | | </div> |
| | | <a-drawer |
| | | title="Map Element" |
| | | title="地图元素" |
| | | placement="right" |
| | | :closable="true" |
| | | v-model:visible="visible" |
| | |
| | | |
| | | const root = getRoot() |
| | | const store = useMyStore() |
| | | let useGMapCoverHook = useGMapCover(store) |
| | | console.log('store', store) |
| | | const useGMapCoverHook = useGMapCover(store) |
| | | const mapLayers = ref(store.state.Layers) |
| | | const checkedKeys = ref<string[]>([]) |
| | | const selectedKeys = ref<string[]>([]) |
| | |
| | | async function getAllElement () { |
| | | getElementGroups('init') |
| | | setTimeout(() => { |
| | | useGMapCoverHook = useGMapCover() |
| | | // useGMapCoverHook = useGMapCover() |
| | | initMapCover() |
| | | }, 1000) |
| | | } |
| | |
| | | import getter from './getters' |
| | | import { DevicesCmdExecuteInfo } from '/@/types/device-cmd' |
| | | import map from './map' |
| | | import common from "/@/store/common"; |
| | | import common from '/@/store/common' |
| | | |
| | | const initStateFunc = () => ({ |
| | | Layers: [ |
| | | { |
| | | name: 'default', |
| | | name: '默认', |
| | | id: '', |
| | | is_distributed: true, |
| | | elements: [], |
| | |
| | | type: 1 |
| | | }, |
| | | { |
| | | name: 'share', |
| | | name: '共享', |
| | | id: '', |
| | | is_distributed: true, |
| | | elements: [], |