husq
2023-09-13 5ac4e22d4c590216734fb4f9b93881a92a1f2f4e
英文转中文
6 files modified
102 ■■■■ changed files
src/components/MediaPanel.vue 40 ●●●● patch | view | raw | blame | history
src/components/common/sidebar.vue 23 ●●●● patch | view | raw | blame | history
src/components/common/topbar.vue 2 ●●● patch | view | raw | blame | history
src/pages/page-web/projects/devices.vue 22 ●●●● patch | view | raw | blame | history
src/pages/page-web/projects/layer.vue 9 ●●●●● patch | view | raw | blame | history
src/store/index.ts 6 ●●●● patch | view | raw | blame | history
src/components/MediaPanel.vue
@@ -1,5 +1,5 @@
<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"
@@ -40,40 +40,40 @@
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' }
  }
]
src/components/common/sidebar.vue
@@ -16,8 +16,8 @@
    </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>
@@ -53,12 +53,12 @@
  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) {
@@ -66,14 +66,15 @@
      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,
    }
  }
})
src/components/common/topbar.vue
@@ -27,7 +27,7 @@
          <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>
src/pages/page-web/projects/devices.vue
@@ -2,10 +2,10 @@
<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">
@@ -139,10 +139,10 @@
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),
@@ -150,10 +150,10 @@
    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',
@@ -172,10 +172,10 @@
      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',
src/pages/page-web/projects/layer.vue
@@ -3,7 +3,7 @@
    <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>
@@ -18,7 +18,7 @@
    />
    </div>
    <a-drawer
      title="Map Element"
      title="地图元素"
      placement="right"
      :closable="true"
      v-model:visible="visible"
@@ -104,8 +104,7 @@
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[]>([])
@@ -135,7 +134,7 @@
async function getAllElement () {
  getElementGroups('init')
  setTimeout(() => {
    useGMapCoverHook = useGMapCover()
    // useGMapCoverHook = useGMapCover()
    initMapCover()
  }, 1000)
}
src/store/index.ts
@@ -8,12 +8,12 @@
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: [],
@@ -22,7 +22,7 @@
      type: 1
    },
    {
      name: 'share',
      name: '共享',
      id: '',
      is_distributed: true,
      elements: [],