无人机管理后台前端(已迁走)
rain
2025-06-12 2135b15e5af9d7218b1c4b18cde73bd2ae92a85a
工单导出数据优化
1 files modified
107 ■■■■ changed files
src/views/tickets/ticket.vue 107 ●●●● patch | view | raw | blame | history
src/views/tickets/ticket.vue
@@ -1944,89 +1944,16 @@
    },
    async exportData() {
      // 修改导出方法,添加选中数据的处理
      try {
        this.loading = true;
        // 如果有选中的数据,则只导出选中的数据
        let exportData = [];
        // 如果有选中的数据,则导出选中的数据
        if (this.selections.length > 0) {
          exportData = this.selections.map(item => ({
            工单编号: item.orderNumber || '',
            工单名称: item.orderName || '',
            所属单位: item.department || '',
            发起时间: item.startTime || '',
            关联算法: item.aiType || '',
            工单内容: item.address || '',
            工单类型: item.type || '',
            经纬度: item.location
              ? `${item.location[0].toFixed(6)}, ${item.location[1].toFixed(6)}`
              : '',
            创建人: item.creator || '',
            处理人: item.handler || '',
            工单状态: this.mapStatus(item.status),
          }));
          exportData = this.selections.map(item => this.formatExportItem(item));
        } else {
          // 原有的导出全部数据的逻辑
          const currentTab = this.tabs.find(tab => tab.name === this.activeTab);
          // 使用与查询列表相同的参数构造逻辑
          const params = {
            word_order_type: this.filters.type || undefined,
            status:
              currentTab?.name === 'myTickets'
                ? undefined
                : this.filters.status !== ''
                ? Number(this.filters.status)
                : currentTab?.value, // 使用当前tab的状态值
            keyword: this.filters.keyword || undefined,
            dept_id: this.filters.department || undefined,
            start_date: this.filters.dateRange?.[0]
              ? this.formatDate(this.filters.dateRange[0])
              : undefined,
            end_date: this.filters.dateRange?.[1]
              ? this.formatDate(this.filters.dateRange[1])
              : undefined,
            current: 1,
            size: 10,
          };
          const response = await getList(params);
          if (!response?.data?.data?.records) {
            throw new Error('接口返回数据格式不正确');
          }
          const { records } = response.data.data;
          // 使用与查询列表相同的过滤逻辑
          let filteredRecords = records;
          if (currentTab?.name === 'myTickets') {
            filteredRecords = records.filter(
              item => String(item.create_user_id) === String(item.user_id)
            );
          }
          exportData = filteredRecords.map(item => {
            const longitude = Number(item.longitude) || 0;
            const latitude = Number(item.latitude) || 0;
            return {
              工单编号: item.event_num || '',
              工单名称: item.event_name || '',
              所属单位: item.dept_name || '',
              发起时间: item.create_time || '',
              关联算法: item.ai_types || '',
              工单内容: item.address || '',
              工单类型:
                this.types.find(t => t.value === item.work_order_type_dict_key)?.label || '',
              经纬度:
                !isNaN(longitude) && !isNaN(latitude)
                  ? `${longitude.toFixed(6)}, ${latitude.toFixed(6)}`
                  : '',
              创建人: item.create_user || '',
              处理人: item.update_user || '',
              工单状态: this.mapStatus(Number(item.status || 0)),
            };
          });
          // 没有选中数据时,导出当前页面的数据
          exportData = this.tableData.map(item => this.formatExportItem(item));
        }
        if (exportData.length === 0) {
@@ -2045,18 +1972,40 @@
          '经纬度',
          '创建人',
          '处理人',
          '工单状态',
          '工单状态'
        ];
        export_json_to_excel(headers, exportData, '工单数据');
        this.$message.success('数据导出成功');
      } catch (error) {
        console.error('导出失败:', error);
        this.$message.error(error.message || '导出失败,请稍后重试');
      } finally {
        this.loading = false;
      }
    },
    formatExportItem(item) {
      const longitude = Number(item.longitude) || Number(item.location?.[0]) || 0;
      const latitude = Number(item.latitude) || Number(item.location?.[1]) || 0;
      return {
        工单编号: item.orderNumber || item.event_num || '',
        工单名称: item.orderName || item.event_name || '',
        所属单位: item.department || item.dept_name || '',
        发起时间: item.startTime || item.create_time || '',
        关联算法: item.aiType || item.ai_types || '',
        工单内容: item.address || item.content || '',
        工单类型: this.types.find(t => t.value === (item.type || item.work_order_type_dict_key))?.label || '',
        经纬度: (!isNaN(longitude) && !isNaN(latitude))
          ? `${longitude.toFixed(6)}, ${latitude.toFixed(6)}`
          : '',
        创建人: item.creator || item.create_user || '',
        处理人: item.handler || item.update_user || '',
        工单状态: this.mapStatus(Number(item.status || 0))
      };
    },
    handleDepartmentChange(deptId) {
      this.form.handler = '';
    },