无人机管理后台前端(已迁走)
张含笑
2025-12-01 4c097c91f19fc70b408b0d1e45c5fefc67b574ac
Merge remote-tracking branch 'origin/feature/v8.0/8.0.4' into feature/v8.0/8.0.4
6 files modified
99 ■■■■ changed files
src/api/home/index.js 8 ●●●●● patch | view | raw | blame | history
src/utils/date.js 27 ●●●●● patch | view | raw | blame | history
src/views/tickets/orderLog.vue 15 ●●●●● patch | view | raw | blame | history
src/views/tickets/ticket.vue 5 ●●●● patch | view | raw | blame | history
src/views/wel/components/backlog.vue 2 ●●●●● patch | view | raw | blame | history
src/views/wel/components/proportionStatic.vue 42 ●●●● patch | view | raw | blame | history
src/api/home/index.js
@@ -6,6 +6,14 @@
    method: 'get',
  });
};
// 大屏首页=>事件状态数量
export const getEventStatusNum = data => {
  return request({
    url: '/drone-device-core/jobEvent/eventStatusNum',
    method: 'post',
    data,
  })
}
// 事件概况分类数
export const getJobEventByStatus = data => {
  return request({
src/utils/date.js
@@ -1,3 +1,11 @@
import dayjs from 'dayjs'
import 'dayjs/locale/zh-cn'
import weekday from 'dayjs/plugin/weekday'
// 配置 dayjs
dayjs.locale('zh-cn')
dayjs.extend(weekday)
export const calcDate = (date1, date2) => {
  let date3 = date2 - date1;
@@ -56,3 +64,22 @@
export function dateNow() {
  return dateFormat(new Date(), 'yyyyMMddhhmmss');
}
export const getDateRange = (unit, formatStr = 'YYYY-MM-DD HH:mm:ss') => {
  const todayDate = dayjs()
  let returnArr = [dayjs(), todayDate]
  if (unit === 'today') {
    returnArr = [dayjs(), todayDate]
  }
  if (unit === 'week') {
    returnArr = [dayjs().weekday(0), todayDate]
  }
  if (unit === 'month') {
    returnArr = [dayjs().startOf('month'), todayDate]
  }
  if (unit === 'year') {
    returnArr = [dayjs().startOf('year'), todayDate]
  }
  returnArr = [returnArr[0].startOf('day').format(formatStr), returnArr[1].endOf('day').format(formatStr)]
  return returnArr
}
src/views/tickets/orderLog.vue
@@ -91,19 +91,14 @@
import AddEditDetails from './component/AddEditDetails.vue'
import NProgress from 'nprogress'
import { useStore } from 'vuex'
import { useRoute } from 'vue-router'
import { downloadXls } from '@/utils/util'
import {
  getList,
  saveUpdateOrderLog,
  orderLogDetails,
  orderLogRecall,
  orderLogReject,
  orderLogPass,
  orderLogExport,
  jobStatusNum,
  userPublish,
  deleteOrderLog,
  getWaylineMaxTerrainHeight
} from '@/api/tickets/orderLog'
import { newGetWorkspacesPage } from '@/api/resource/wayline'
import { getDictionaryByCode } from '@/api/system/dictbiz'
@@ -116,11 +111,10 @@
import { aiImagesPage } from '@/api/dataCenter/dataCenter';
const store = useStore()
const route = useRoute()
const userInfo = computed(() => store.state.user.userInfo)
const permission = computed(() => store.state.user.permission);
console.log(userInfo,permission, '8888')
const isShowAddEditDetails = ref(false)
@@ -150,7 +144,6 @@
  activeTab.value = tabsList.value[0].name
  // tab值传
  orderListParams.status = tabsList.value[0].value
  console.log('8878797', tabsList.value)
  // tabsList.value
  //   .map(tab => {
  //     if (tab.name === 'all') {
@@ -334,7 +327,6 @@
      ...cloneDeep(orderListParams.searchParams)
    }
    const res = await orderLogExport(apiParams)
    console.log(res, '导出')
    downloadXls(res.data, `智飞工单${dayjs().format('YYYY-MM-DD')}.xlsx`)
    ElMessage.success('导出成功')
@@ -447,6 +439,9 @@
  filteredTabs()
  getTableList()
  updateGlobalCounts()
  if (route.query.id) {
    route.query.status === '1' ? handleCheckDetail({ id:  route.query.id}, '工单审核') : handleCheckDetail({ id:  route.query.id}, '工单详情')
  }
})
</script>
src/views/tickets/ticket.vue
@@ -891,7 +891,10 @@
  try {
    const response = await getstatusCount(params)
    const statusCount = response.data.data || {}
    const totalCount = Object.values(statusCount).reduce((sum, count) => sum + (count || 0), 0)
      const totalCount = Object.entries(statusCount).reduce((sum, [key, count]) => {
            if (key === '6') return sum
            return sum + (count || 0)
        }, 0)
    tabs.value.forEach(tab => {
      if (tab.name === 'all') {
        tab.count = totalCount
src/views/wel/components/backlog.vue
@@ -155,11 +155,13 @@
const jumporder = val => {
  if (checked.value === '智飞工单') {
    const id = val.id
    const status = val.status
    getaddOrderRecord(id)
    router.replace({
      path: `/tickets/orderLog`,
      query: {
        id,
        status,
      },
    })
  } else {
src/views/wel/components/proportionStatic.vue
@@ -46,22 +46,32 @@
<script setup>
import useEchartsResize from '@/hooks/useEchartsResize';
import { getJobEventByStatus } from '@/api/home/index';
import { getJobEventByStatus, getEventStatusNum } from '@/api/home/index';
import { getDateRange } from '@/utils/date'
import overviewImg2 from '@/assets/images/workbench/tc2.svg';
import overviewImg3 from '@/assets/images/workbench/tc3.svg';
import overviewImg4 from '@/assets/images/workbench/tc4.svg';
import overviewImg5 from '@/assets/images/workbench/tc5.svg';
import { useRouter } from 'vue-router'
import _ from 'lodash'
const router = useRouter()
let checked = ref('CURRENT_YEAR');
let timeListStr = ['本周', '本月', '本年'];
let timeListEnum = ['CURRENT_WEEK', 'CURRENT_MONTH', 'CURRENT_YEAR'];
const dateRanges = {
  today: getDateRange('today'),
  week: getDateRange('week'),
  month: getDateRange('month'),
  year: getDateRange('year'),
}
const params = ref({
  date_enum: 'CURRENT_YEAR',
  // date_enum: 'CURRENT_YEAR',
  device_sn: '',
  end_date: undefined,
  start_date: undefined,
   source:1,//数据来源
  end_date: dateRanges['year'][1], // undefined,
  start_date: dateRanges['year'][0], // undefined,
  source:1,//数据来源
});
const dateSelect = ref('CURRENT_YEAR');
const eventTypeList = ref([
@@ -72,13 +82,14 @@
]);
//  工单统计
const getTypeData = () => {
  getJobEventByStatus(params.value).then(res => {
  getEventStatusNum(params.value).then(res => {
    const resList = res?.data?.data || [];
    let totalNum = resList.reduce((sum, item) => sum + (item.num || 0), 0) - resList[0].num;
    resList.forEach(item => {
      eventTypeList.value.forEach(item1 => {
        if (item1.name === item.name) {
          item1.value = item.num;
          item1.rate = item.rate;
          item1.rate = _.round((item.num/totalNum)*100, 1);
        }
      });
    });
@@ -94,7 +105,18 @@
let timeClick = (item, index) => {
  checked.value = item;
  params.value.date_enum = item;
  // params.value.date_enum = item;
  if(item === 'CURRENT_WEEK') {
    params.value.start_date = dateRanges['week'][0]
    params.value.end_date = dateRanges['week'][1]
  } else if(item === 'CURRENT_MONTH') {
    params.value.start_date = dateRanges['month'][0]
    params.value.end_date = dateRanges['month'][1]
  } else {
    params.value.start_date = dateRanges['year'][0]
    params.value.end_date = dateRanges['year'][1]
  }
  dateSelect.value = item;
  getTypeData();
};
@@ -110,7 +132,7 @@
const echartsRef = ref(null);
let { chart } = useEchartsResize(echartsRef);
const initChart = val => {
  const totalNum = val.reduce((sum, item) => sum + item.num, 0);
  let totalNum = val.reduce((sum, item) => sum + item.num, 0);
  const data = {
    total: {
      title: '总计',
@@ -119,7 +141,7 @@
    data: val.map(item => ({
      value: item.num,
      name: item.name,
      rate: item.rate,
      rate: _.round((item.num/totalNum)*100, 1),
    })),
  };
  const containerWidth = chart.value.clientWidth;