|
@@ -146,9 +146,8 @@
|
|
|
|
|
|
|
|
<a-table row-key="id" :loading="loading" :pagination="pagination"
|
|
<a-table row-key="id" :loading="loading" :pagination="pagination"
|
|
|
:columns="(cloneColumns as TableColumnData[])" :data="renderData" :bordered="{ headerCell: true }"
|
|
:columns="(cloneColumns as TableColumnData[])" :data="renderData" :bordered="{ headerCell: true }"
|
|
|
- :size="size" @page-change="onPageChange" :scroll="{ x: 1700, y: tableHeight }"
|
|
|
|
|
- v-model:selectedKeys="selectedRowKeys"
|
|
|
|
|
- :row-selection="{
|
|
|
|
|
|
|
+ :size="size" @page-change="onPageChange" :scroll="{ x: 1700, y: tableHeight }"
|
|
|
|
|
+ v-model:selectedKeys="selectedRowKeys" :row-selection="{
|
|
|
type: 'checkbox',
|
|
type: 'checkbox',
|
|
|
showCheckedAll: true
|
|
showCheckedAll: true
|
|
|
}">
|
|
}">
|
|
@@ -190,29 +189,51 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
<template #request_metrics="{ record }">
|
|
<template #request_metrics="{ record }">
|
|
|
- <div>请求量: <template v-if="record.req_count == 0 || record.req_count == null">-</template><a-tag v-else color="green">{{ record.req_count }}</a-tag></div>
|
|
|
|
|
- <div>DP转链: <template v-if="record.dp_transition_succ_count == 0 || record.dp_transition_succ_count == null">-</template><a-tag v-else color="green">{{ record.dp_transition_succ_count }}</a-tag></div>
|
|
|
|
|
- <div>商业转链: <template v-if="record.transition_succ_count == 0 || record.transition_succ_count == null">-</template><a-tag v-else color="green">{{ record.transition_succ_count }}</a-tag></div>
|
|
|
|
|
|
|
+ <div>请求量: <template v-if="record.req_count == 0 || record.req_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.req_count }}</a-tag></div>
|
|
|
|
|
+ <div>DP转链: <template
|
|
|
|
|
+ v-if="record.dp_transition_succ_count == 0 || record.dp_transition_succ_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.dp_transition_succ_count }}</a-tag></div>
|
|
|
|
|
+ <div>商业转链: <template
|
|
|
|
|
+ v-if="record.transition_succ_count == 0 || record.transition_succ_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.transition_succ_count }}</a-tag></div>
|
|
|
</template>
|
|
</template>
|
|
|
<template #expose_metrics="{ record }">
|
|
<template #expose_metrics="{ record }">
|
|
|
- <div>曝光PV: <template v-if="record.expose_count == 0 || record.expose_count == null">-</template><a-tag v-else color="green">{{ record.expose_count }}</a-tag></div>
|
|
|
|
|
- <div>曝光UV: <template v-if="record.expose_user_count == 0 || record.expose_user_count == null">-</template><a-tag v-else color="green">{{ record.expose_user_count }}</a-tag></div>
|
|
|
|
|
|
|
+ <div>曝光PV: <template
|
|
|
|
|
+ v-if="record.expose_count == 0 || record.expose_count == null">-</template><a-tag v-else
|
|
|
|
|
+ color="green">{{ record.expose_count }}</a-tag></div>
|
|
|
|
|
+ <div>曝光UV: <template
|
|
|
|
|
+ v-if="record.expose_user_count == 0 || record.expose_user_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.expose_user_count }}</a-tag></div>
|
|
|
</template>
|
|
</template>
|
|
|
<template #click_metrics="{ record }">
|
|
<template #click_metrics="{ record }">
|
|
|
- <div>点击PV: <template v-if="record.click_count == 0 || record.click_count == null">-</template><a-tag v-else color="green">{{ record.click_count }}</a-tag></div>
|
|
|
|
|
- <div>点击UV: <template v-if="record.click_user_count == 0 || record.click_user_count == null">-</template><a-tag v-else color="green">{{ record.click_user_count }}</a-tag></div>
|
|
|
|
|
|
|
+ <div>点击PV: <template v-if="record.click_count == 0 || record.click_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.click_count }}</a-tag></div>
|
|
|
|
|
+ <div>点击UV: <template
|
|
|
|
|
+ v-if="record.click_user_count == 0 || record.click_user_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.click_user_count }}</a-tag></div>
|
|
|
</template>
|
|
</template>
|
|
|
<template #app_metrics="{ record }">
|
|
<template #app_metrics="{ record }">
|
|
|
- <div>唤端PV: <template v-if="record.app_open_count == 0 || record.app_open_count == null">-</template><a-tag v-else color="green">{{ record.app_open_count }}</a-tag></div>
|
|
|
|
|
- <div>唤端UV: <template v-if="record.app_open_user_count == 0 || record.app_open_user_count == null">-</template><a-tag v-else color="green">{{ record.app_open_user_count }}</a-tag></div>
|
|
|
|
|
|
|
+ <div>唤端PV: <template
|
|
|
|
|
+ v-if="record.app_open_count == 0 || record.app_open_count == null">-</template><a-tag v-else
|
|
|
|
|
+ color="green">{{ record.app_open_count }}</a-tag></div>
|
|
|
|
|
+ <div>唤端UV: <template
|
|
|
|
|
+ v-if="record.app_open_user_count == 0 || record.app_open_user_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.app_open_user_count }}</a-tag></div>
|
|
|
</template>
|
|
</template>
|
|
|
<template #order_metrics="{ record }">
|
|
<template #order_metrics="{ record }">
|
|
|
- <div>订单PV: <template v-if="record.order_count == 0 || record.order_count == null">-</template><a-tag v-else color="green">{{ record.order_count }}</a-tag></div>
|
|
|
|
|
- <div>订单UV: <template v-if="record.order_user_count == 0 || record.order_user_count == null">-</template><a-tag v-else color="green">{{ record.order_user_count }}</a-tag></div>
|
|
|
|
|
|
|
+ <div>订单PV: <template v-if="record.order_count == 0 || record.order_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.order_count }}</a-tag></div>
|
|
|
|
|
+ <div>订单UV: <template
|
|
|
|
|
+ v-if="record.order_user_count == 0 || record.order_user_count == null">-</template><a-tag
|
|
|
|
|
+ v-else color="green">{{ record.order_user_count }}</a-tag></div>
|
|
|
</template>
|
|
</template>
|
|
|
<template #income_metrics="{ record }">
|
|
<template #income_metrics="{ record }">
|
|
|
- <div>GMV: <template v-if="record.gmv == 0 || record.gmv == null">-</template><a-tag v-else color="green">{{ record.gmv }}元</a-tag></div>
|
|
|
|
|
- <div>预估收入: <template v-if="record.income == 0 || record.income == null">-</template><a-tag v-else color="green">{{ record.income }}元</a-tag></div>
|
|
|
|
|
|
|
+ <div>GMV: <template v-if="record.gmv == 0 || record.gmv == null">-</template><a-tag v-else
|
|
|
|
|
+ color="green">{{ record.gmv }}元</a-tag></div>
|
|
|
|
|
+ <div>预估收入: <template v-if="record.income == 0 || record.income == null">-</template><a-tag v-else
|
|
|
|
|
+ color="green">{{
|
|
|
|
|
+ record.income }}元</a-tag></div>
|
|
|
</template>
|
|
</template>
|
|
|
<template #settlement="{ record }">
|
|
<template #settlement="{ record }">
|
|
|
<a-tag :color="record.is_settlement ? 'green' : 'orange'" bordered>
|
|
<a-tag :color="record.is_settlement ? 'green' : 'orange'" bordered>
|
|
@@ -364,15 +385,9 @@
|
|
|
</a-form>
|
|
</a-form>
|
|
|
</a-modal>
|
|
</a-modal>
|
|
|
|
|
|
|
|
- <a-modal
|
|
|
|
|
- v-model:visible="batchPushModalVisible"
|
|
|
|
|
- :title="batchPushModalLoading ? '推送中' : '推送完成'"
|
|
|
|
|
- :mask-closable="false"
|
|
|
|
|
- :closable="!batchPushModalLoading"
|
|
|
|
|
- @before-ok="handleBatchPushComplete"
|
|
|
|
|
- ok-text="完成"
|
|
|
|
|
- :ok-button-props="{ disabled: batchPushModalLoading }"
|
|
|
|
|
- :cancel-button-props="{ disabled: true }">
|
|
|
|
|
|
|
+ <a-modal v-model:visible="batchPushModalVisible" :title="batchPushModalLoading ? '推送中' : '推送完成'"
|
|
|
|
|
+ :mask-closable="false" :closable="!batchPushModalLoading" @before-ok="handleBatchPushComplete" ok-text="完成"
|
|
|
|
|
+ :ok-button-props="{ disabled: batchPushModalLoading }" :cancel-button-props="{ disabled: true }">
|
|
|
<div style="text-align: center; padding: 20px 0;">
|
|
<div style="text-align: center; padding: 20px 0;">
|
|
|
<div v-if="batchPushModalLoading">
|
|
<div v-if="batchPushModalLoading">
|
|
|
<a-spin />
|
|
<a-spin />
|
|
@@ -595,6 +610,9 @@ const subTypeOptions = computed(() => {
|
|
|
case 1:
|
|
case 1:
|
|
|
baseOptions.push({ label: '口令', value: 100000 });
|
|
baseOptions.push({ label: '口令', value: 100000 });
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case 2:
|
|
|
|
|
+ baseOptions.push({ label: '应用内优惠券', value: 100001 });
|
|
|
|
|
+ break;
|
|
|
case 3:
|
|
case 3:
|
|
|
baseOptions.push({ label: '应用建议卡', value: 300001 });
|
|
baseOptions.push({ label: '应用建议卡', value: 300001 });
|
|
|
break;
|
|
break;
|
|
@@ -715,7 +733,7 @@ const fetchData = async (
|
|
|
renderData.value = data.list;
|
|
renderData.value = data.list;
|
|
|
pagination.current = data.page;
|
|
pagination.current = data.page;
|
|
|
pagination.total = data.count;
|
|
pagination.total = data.count;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// Clear selection when data is refreshed
|
|
// Clear selection when data is refreshed
|
|
|
selectedRowKeys.value = [];
|
|
selectedRowKeys.value = [];
|
|
|
selectedRows.value = [];
|
|
selectedRows.value = [];
|
|
@@ -1002,6 +1020,8 @@ watch(
|
|
|
(newType) => {
|
|
(newType) => {
|
|
|
if (newType === 1) {
|
|
if (newType === 1) {
|
|
|
editForm.value.sub_type = 100000;
|
|
editForm.value.sub_type = 100000;
|
|
|
|
|
+ } else if (newType === 2) {
|
|
|
|
|
+ editForm.value.sub_type = 100001;
|
|
|
} else if (newType === 3) {
|
|
} else if (newType === 3) {
|
|
|
editForm.value.sub_type = 300001;
|
|
editForm.value.sub_type = 300001;
|
|
|
} else if (newType === 7) {
|
|
} else if (newType === 7) {
|
|
@@ -1125,7 +1145,7 @@ const onBatchPush = async () => {
|
|
|
batchPushFail.value = 0;
|
|
batchPushFail.value = 0;
|
|
|
batchPushModalLoading.value = true;
|
|
batchPushModalLoading.value = true;
|
|
|
batchPushModalVisible.value = true;
|
|
batchPushModalVisible.value = true;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 处理每条数据
|
|
// 处理每条数据
|
|
|
for (let i = 0; i < selectedRowKeys.value.length; i += 1) {
|
|
for (let i = 0; i < selectedRowKeys.value.length; i += 1) {
|
|
|
const id = Number(selectedRowKeys.value[i]);
|
|
const id = Number(selectedRowKeys.value[i]);
|
|
@@ -1140,15 +1160,15 @@ const onBatchPush = async () => {
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
batchPushFail.value += 1;
|
|
batchPushFail.value += 1;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 更新进度
|
|
// 更新进度
|
|
|
batchPushProgress.value = i + 1;
|
|
batchPushProgress.value = i + 1;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 使用 nextTick 确保界面刷新
|
|
// 使用 nextTick 确保界面刷新
|
|
|
// eslint-disable-next-line no-await-in-loop
|
|
// eslint-disable-next-line no-await-in-loop
|
|
|
await nextTick();
|
|
await nextTick();
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 任务完成
|
|
// 任务完成
|
|
|
batchPushModalLoading.value = false;
|
|
batchPushModalLoading.value = false;
|
|
|
},
|
|
},
|
|
@@ -1208,7 +1228,7 @@ const onBatchDelete = () => {
|
|
|
onOk: async () => {
|
|
onOk: async () => {
|
|
|
let successCount = 0;
|
|
let successCount = 0;
|
|
|
let failCount = 0;
|
|
let failCount = 0;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 创建进度弹窗
|
|
// 创建进度弹窗
|
|
|
const progressModal = Modal.info({
|
|
const progressModal = Modal.info({
|
|
|
title: '删除中',
|
|
title: '删除中',
|
|
@@ -1219,7 +1239,7 @@ const onBatchDelete = () => {
|
|
|
closable: false,
|
|
closable: false,
|
|
|
maskClosable: false
|
|
maskClosable: false
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 依次删除每条数据
|
|
// 依次删除每条数据
|
|
|
for (let i = 0; i < selectedRowKeys.value.length; i += 1) {
|
|
for (let i = 0; i < selectedRowKeys.value.length; i += 1) {
|
|
|
const id = Number(selectedRowKeys.value[i]);
|
|
const id = Number(selectedRowKeys.value[i]);
|
|
@@ -1234,16 +1254,16 @@ const onBatchDelete = () => {
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
failCount += 1;
|
|
failCount += 1;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 更新进度信息
|
|
// 更新进度信息
|
|
|
progressModal.update({
|
|
progressModal.update({
|
|
|
content: `${i + 1}/${selectedRowKeys.value.length}条数据已处理,成功:${successCount},失败:${failCount},请稍候...`
|
|
content: `${i + 1}/${selectedRowKeys.value.length}条数据已处理,成功:${successCount},失败:${failCount},请稍候...`
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 关闭进度弹窗
|
|
// 关闭进度弹窗
|
|
|
progressModal.close();
|
|
progressModal.close();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
// 显示结果
|
|
// 显示结果
|
|
|
Modal.success({
|
|
Modal.success({
|
|
|
title: '删除完成',
|
|
title: '删除完成',
|
|
@@ -1338,22 +1358,22 @@ export default {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
:deep(.arco-checkbox) {
|
|
:deep(.arco-checkbox) {
|
|
|
- z-index: 1;
|
|
|
|
|
- pointer-events: auto !important;
|
|
|
|
|
|
|
+ z-index: 1;
|
|
|
|
|
+ pointer-events: auto !important;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
:deep(.arco-table-th-item .arco-checkbox),
|
|
:deep(.arco-table-th-item .arco-checkbox),
|
|
|
:deep(.arco-table-td .arco-checkbox) {
|
|
:deep(.arco-table-td .arco-checkbox) {
|
|
|
- pointer-events: auto !important;
|
|
|
|
|
|
|
+ pointer-events: auto !important;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
:deep(.arco-modal-body) {
|
|
:deep(.arco-modal-body) {
|
|
|
- font-size: 14px;
|
|
|
|
|
- line-height: 1.5;
|
|
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ line-height: 1.5;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
:deep(.arco-modal-title) {
|
|
:deep(.arco-modal-title) {
|
|
|
- font-weight: bold;
|
|
|
|
|
- color: var(--color-text-1);
|
|
|
|
|
|
|
+ font-weight: bold;
|
|
|
|
|
+ color: var(--color-text-1);
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|