|
|
@@ -80,6 +80,12 @@
|
|
|
</template>
|
|
|
批量推送 ({{ selectedRowKeys.length }})
|
|
|
</a-button>
|
|
|
+ <a-button type="danger" :disabled="selectedRowKeys.length === 0" @click="onBatchDelete">
|
|
|
+ <template #icon>
|
|
|
+ <icon-delete />
|
|
|
+ </template>
|
|
|
+ 批量删除 ({{ selectedRowKeys.length }})
|
|
|
+ </a-button>
|
|
|
</a-space>
|
|
|
</a-col>
|
|
|
<a-col :span="12" style="
|
|
|
@@ -165,7 +171,7 @@
|
|
|
<template #status="{ record }">
|
|
|
<div>
|
|
|
<a-tag :color="getStatusColor(record.status)" bordered>
|
|
|
- {{ record.status === 1 ? '已推送' : getStatusText(record.status, record.last_push_time) }}
|
|
|
+ {{ getStatusText(record.status) }}
|
|
|
</a-tag>
|
|
|
<div class="status-extra-info" v-if="record.last_push_time || record.request_id">
|
|
|
<div v-if="record.request_id" class="text-ellipsis">
|
|
|
@@ -216,10 +222,13 @@
|
|
|
<template #command="{ record }">
|
|
|
<a-space>
|
|
|
<a-button type="primary" @click="onEdit(record)">
|
|
|
- 更新数据
|
|
|
+ 编辑
|
|
|
+ </a-button>
|
|
|
+ <a-button status="danger" @click="onDelete(record)">
|
|
|
+ 删除
|
|
|
</a-button>
|
|
|
<a-button status="success" @click="onPush(record)">
|
|
|
- 推送数据
|
|
|
+ 推送
|
|
|
</a-button>
|
|
|
</a-space>
|
|
|
</template>
|
|
|
@@ -337,6 +346,20 @@
|
|
|
allow-search :filter-option="filterPlatformOption" />
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
|
+ <a-col :span="12">
|
|
|
+ <a-form-item label="推送状态">
|
|
|
+ <a-select v-model="editForm.status" :options="[
|
|
|
+ { label: '未推送', value: 0 },
|
|
|
+ { label: '推送成功', value: 1 },
|
|
|
+ { label: '推送失败', value: 2 },
|
|
|
+ { label: '手动推送', value: 3 }
|
|
|
+ ]">
|
|
|
+ <template #label="{ data }">
|
|
|
+ <span :style="{ color: getStatusColor(data.value) }">{{ data.label }}</span>
|
|
|
+ </template>
|
|
|
+ </a-select>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
</a-row>
|
|
|
</a-form>
|
|
|
</a-modal>
|
|
|
@@ -393,7 +416,7 @@ import type { TableColumnData } from '@arco-design/web-vue/es/table/interface';
|
|
|
import cloneDeep from 'lodash/cloneDeep';
|
|
|
import Sortable from 'sortablejs';
|
|
|
import {
|
|
|
- PushDataReportParams, PushDataReportRecord, queryReportList, saveReport, pushReport
|
|
|
+ PushDataReportParams, PushDataReportRecord, queryReportList, saveReport, pushReport, deleteReport
|
|
|
} from '@/api/dataReport';
|
|
|
import { platformList, getPlatformNameById } from '@/constants/pushPlatform';
|
|
|
|
|
|
@@ -487,13 +510,17 @@ const statusOptions = computed<SelectOptionData[]>(() => [
|
|
|
value: 0,
|
|
|
},
|
|
|
{
|
|
|
- label: '已推送',
|
|
|
+ label: '推送成功',
|
|
|
value: 1,
|
|
|
},
|
|
|
{
|
|
|
label: '推送失败',
|
|
|
value: 2,
|
|
|
},
|
|
|
+ {
|
|
|
+ label: '手动推送',
|
|
|
+ value: 3,
|
|
|
+ },
|
|
|
]);
|
|
|
|
|
|
// 结算状态选项
|
|
|
@@ -664,7 +691,7 @@ const columns = computed<TableColumnData[]>(() => [
|
|
|
{
|
|
|
title: '操作',
|
|
|
slotName: 'command',
|
|
|
- width: 180,
|
|
|
+ width: 240,
|
|
|
fixed: 'right',
|
|
|
},
|
|
|
]);
|
|
|
@@ -990,19 +1017,16 @@ const onTypeOrDateChange = () => {
|
|
|
search();
|
|
|
};
|
|
|
|
|
|
-const getStatusText = (status: number, lastPushTime?: Date) => {
|
|
|
+const getStatusText = (status: number) => {
|
|
|
switch (status) {
|
|
|
case 0:
|
|
|
return '未推送';
|
|
|
case 1:
|
|
|
- if (lastPushTime) {
|
|
|
- return `${dayjs(lastPushTime).format('MM-DD HH:mm')} 已推送`;
|
|
|
- }
|
|
|
- return '已推送';
|
|
|
+ return '推送成功';
|
|
|
case 2:
|
|
|
- return '推送中';
|
|
|
- case -1:
|
|
|
return '推送失败';
|
|
|
+ case 3:
|
|
|
+ return '手动推送';
|
|
|
default:
|
|
|
return `未知(${status})`;
|
|
|
}
|
|
|
@@ -1015,9 +1039,9 @@ const getStatusColor = (status: number) => {
|
|
|
case 1:
|
|
|
return 'green';
|
|
|
case 2:
|
|
|
- return 'blue';
|
|
|
- case -1:
|
|
|
return 'red';
|
|
|
+ case 3:
|
|
|
+ return 'blue';
|
|
|
default:
|
|
|
return '';
|
|
|
}
|
|
|
@@ -1142,6 +1166,98 @@ const handleBatchPushComplete = (done: () => void) => {
|
|
|
search();
|
|
|
done(); // 关闭对话框
|
|
|
};
|
|
|
+
|
|
|
+// 添加删除方法
|
|
|
+const onDelete = (record: PushDataReportRecord) => {
|
|
|
+ Modal.confirm({
|
|
|
+ title: '确认删除',
|
|
|
+ content: `确定要删除 ID 为 ${record.id} 的数据记录吗?此操作不可恢复。`,
|
|
|
+ okText: '删除',
|
|
|
+ okButtonProps: { status: 'danger' },
|
|
|
+ cancelText: '取消',
|
|
|
+ onOk: async () => {
|
|
|
+ try {
|
|
|
+ const response = await deleteReport(record.id);
|
|
|
+ if (response.data.success) {
|
|
|
+ Message.success(response.data.msg || '删除成功');
|
|
|
+ // 刷新数据列表
|
|
|
+ search();
|
|
|
+ } else {
|
|
|
+ Message.error(response.data.msg || '删除失败');
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ Message.error('删除请求失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+// 批量删除方法
|
|
|
+const onBatchDelete = () => {
|
|
|
+ if (selectedRowKeys.value.length === 0) {
|
|
|
+ Message.warning('请选择要删除的数据');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Modal.confirm({
|
|
|
+ title: '批量删除确认',
|
|
|
+ content: `确定要删除选中的 ${selectedRowKeys.value.length} 条数据吗?此操作不可恢复。`,
|
|
|
+ okText: '删除',
|
|
|
+ okButtonProps: { status: 'danger' },
|
|
|
+ cancelText: '取消',
|
|
|
+ onOk: async () => {
|
|
|
+ let successCount = 0;
|
|
|
+ let failCount = 0;
|
|
|
+
|
|
|
+ // 创建进度弹窗
|
|
|
+ const progressModal = Modal.info({
|
|
|
+ title: '删除中',
|
|
|
+ content: `0/${selectedRowKeys.value.length}条数据已处理,请稍候...`,
|
|
|
+ okButtonProps: { disabled: true },
|
|
|
+ cancelButtonProps: { disabled: true },
|
|
|
+ footer: false,
|
|
|
+ closable: false,
|
|
|
+ maskClosable: false
|
|
|
+ });
|
|
|
+
|
|
|
+ // 依次删除每条数据
|
|
|
+ for (let i = 0; i < selectedRowKeys.value.length; i += 1) {
|
|
|
+ const id = Number(selectedRowKeys.value[i]);
|
|
|
+ try {
|
|
|
+ // eslint-disable-next-line no-await-in-loop
|
|
|
+ const response = await deleteReport(id);
|
|
|
+ if (response.data && response.data.success) {
|
|
|
+ successCount += 1;
|
|
|
+ } else {
|
|
|
+ failCount += 1;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ failCount += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新进度信息
|
|
|
+ progressModal.update({
|
|
|
+ content: `${i + 1}/${selectedRowKeys.value.length}条数据已处理,成功:${successCount},失败:${failCount},请稍候...`
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 关闭进度弹窗
|
|
|
+ progressModal.close();
|
|
|
+
|
|
|
+ // 显示结果
|
|
|
+ Modal.success({
|
|
|
+ title: '删除完成',
|
|
|
+ content: `已完成所有数据删除,成功:${successCount},失败:${failCount}`,
|
|
|
+ onOk: () => {
|
|
|
+ // 清空选择并刷新数据
|
|
|
+ selectedRowKeys.value = [];
|
|
|
+ selectedRows.value = [];
|
|
|
+ search();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<script lang="ts">
|