This commit is contained in:
2025-05-24 18:23:11 +08:00
parent 2255649566
commit b62c715dfd
14 changed files with 696 additions and 100 deletions

View File

@@ -1,19 +1,52 @@
<script setup>
import {reactive} from 'vue';
import Api from "../../../api/index.js";
import {reactive, ref} from 'vue';
import XSelect from "../../../components/XSelect/index.vue";
import Api from "../../../api/index.js";
import {Message} from "@arco-design/web-vue";
const visible = defineModel('visible');
const form = reactive({
blackoutDuration: 1,
value: null,
blackoutValue: 50,
const {taskId} = defineProps({
taskId: {
type: Number,
default: null,
}
});
const emits = defineEmits(['success']);
const dayStatus = ref(1);
const form = reactive({
day: 1,
type: null,
remark: null,
});
const getSelect = async () => {
return {
data: [
{id: 1, name: '对方此账号不能接我任务'},
{id: 2, name: '对方所有账号不能接我任务'},
]
}
}
const success = async () => {
const {msg} = await Api.merchant.addTaskBlock({
...form,
id: taskId,
});
Message.success(msg);
visible.value = false;
emits('success');
}
</script>
<template>
<div @click="visible=true">
<slot></slot>
</div>
<a-modal
@click.stop
@ok="success"
:width="600"
ok-text="确认拉黑"
title-align="start"
@@ -23,16 +56,18 @@ const form = reactive({
<a-form-item label="拉黑时间">
<a-radio-group
type="button"
v-model:model-value="form.blackoutDuration">
@change="e=>form.day=e"
v-model:model-value="dayStatus">
<a-radio :value="1">1</a-radio>
<a-radio :value="2">3</a-radio>
<a-radio :value="3">7</a-radio>
<a-radio :value="4">30</a-radio>
<a-radio :value="5">永久</a-radio>
<a-radio :value="6">自定义</a-radio>
<a-radio :value="3">3</a-radio>
<a-radio :value="7">7</a-radio>
<a-radio :value="30">30</a-radio>
<a-radio :value="-1">永久</a-radio>
<a-radio :value="0">自定义</a-radio>
</a-radio-group>
<a-input-number
v-model:model-value="form.blackoutValue"
:disabled="dayStatus !== 0"
v-model:model-value="form.day"
default-value="50"
mode="button"
class="w-[150px]">
@@ -45,8 +80,8 @@ const form = reactive({
<a-form-item label="拉黑效果">
<XSelect
placeholder="请选择拉黑效果"
v-model:model-value="form.value"
:api="Api.system.getSelect">
v-model:model-value="form.type"
:api="getSelect">
</XSelect>
</a-form-item>
@@ -54,6 +89,7 @@ const form = reactive({
<a-textarea
show-word-limit
:max-length="100"
v-model:model-value="form.remark"
placeholder="请输入拉黑原因">
</a-textarea>
</a-form-item>

View File

@@ -0,0 +1,189 @@
<script setup>
import XImage from "../../../../../components/XImage/Index.vue";
import {reactive, ref, watch} from 'vue';
import Api from "../../../../../api/index.ts";
import {Message} from "@arco-design/web-vue";
import Comment from "../../../../../components/Comment/index.vue";
import AddMaterial from "../../../components/AddMaterial.vue";
import AddComment from "../../../components/AddComment.vue";
const emits = defineEmits(['success']);
const {task} = defineProps({
task: {
type: Object,
default: {},
}
});
const visible = ref(false);
const detail = reactive([]);
const activeKey = ref(0);
const getData = async () => {
Api.merchant.getTaskChildrenInfo(task.id).then(({data}) => {
detail.length = 0;
detail.push(...data);
console.log('我看看我看看', data);
});
}
watch(
() => visible.value,
(val) => {
if (val) getData();
},
{deep: true}
)
const passTaskChildren = async () => {
const {code, msg} = await Api.admin.passTaskChildren(task.id);
if (code === 1) Message.success(msg);
visible.value = false;
emits('success');
}
const refuseTaskChildren = async () => {
const {code, msg} = await Api.admin.refuseTaskChildren(task.id);
if (code === 1) Message.success(msg);
visible.value = false;
emits('success');
}
const update = async () => {
const {msg} = await Api.merchant.editChildrenMaterimal({
id: task.task_id,
data: detail.map(v => ({...v, tags: v.tags_arr})),
});
Message.success(msg);
emits('success');
}
</script>
<template>
<a-link v-if="!$slots.default" :hoverable="false" @click="visible=true">预览</a-link>
<div v-else @click="visible=true">
<slot></slot>
</div>
<a-modal
title-align="start"
title="预览"
v-model:visible="visible">
<a-tabs v-model:active-key="activeKey" type="rounded" v-if="detail && detail.length > 0">
<a-tab-pane v-for="(item, index) in detail" :title="`素材${index+1}`" :key="index">
<a-form
layout="vertical">
<a-form-item label="子任务状态">
<a-tag v-if="task.status === 0" color="red">待上传素材</a-tag>
<a-tag v-if="task.status === 1" color="orangered">素材审核中</a-tag>
<a-tag v-if="task.status === 2" color="orangered">重新上传素材</a-tag>
<a-tag v-if="task.status === 3" color="gray">待领取</a-tag>
<a-tag v-if="task.status === 4" color="green">已领取</a-tag>
<a-tag v-if="task.status === 5" color="green">已结算</a-tag>
<a-tag v-if="task.status === 6" color="arcoblue">已终止</a-tag>
</a-form-item>
<a-form-item label="标题">
<a-input v-model:model-value="item.title" :max-length="20" allow-clear
show-word-limit></a-input>
</a-form-item>
<a-form-item label="正文">
<a-textarea
:max-length="1000"
show-word-limit
v-model:model-value="item.content">
</a-textarea>
</a-form-item>
<a-form-item label="话题">
<div v-if="item.tags_arr.length > 0" id="tag-list"
class="w-full bg-[var(--color-neutral-2)] p-[4px]">
<a-tag v-for="v in item.tags_arr">{{ v }}</a-tag>
</div>
<div v-else>
暂无话题
</div>
</a-form-item>
<a-form-item label="素材">
<div v-if="item.material_arr.length > 0" class="flex flex-wrap gap-[16px]">
<x-image
v-for="(v, index) in item.material_arr"
:hide-delete="true"
:key="index"
width="60px"
height="60px"
:src="v">
</x-image>
<add-material
ref="AddMaterialRef"
@success="getData"
:id="task.task_id"
:material="item">
<div
class="size-[60px] bg-[#F2F3F5] flex justify-center items-center flex-col rounded-[8px] cursor-pointer">
<icon-plus/>
<div>添加</div>
</div>
</add-material>
</div>
<div v-else>
暂无话题
</div>
</a-form-item>
<a-form-item label="评论区内容" v-if="task.is_comment === 1">
<div class="flex-grow">
<div v-if="item.comment.length > 0" class="flex flex-col gap-[8px] w-full mb-[12px]">
<comment :data="item.comment" @success="getData"></comment>
</div>
<add-comment
@success="getData"
:material="task"
:item="item">
<a-button>
<icon-plus/>
<div>添加评论</div>
</a-button>
</add-comment>
</div>
</a-form-item>
</a-form>
</a-tab-pane>
</a-tabs>
<template #footer>
<div class="flex items-center gap-[8px]">
<!-- <a-checkbox-group>-->
<!-- <template v-for="(item, index) in detail.content" :key="item">-->
<!-- <a-checkbox v-show="activeKey === index" :value="item">选中</a-checkbox>-->
<!-- </template>-->
<!-- </a-checkbox-group>-->
<template v-if="detail.check_status === 0">
<a-button @click="passTaskChildren" type="primary" class="ml-auto">通过
</a-button>
<a-button @click="refuseTaskChildren">拒绝</a-button>
</template>
<template v-else>
<a-button @click="visible=false" class="ml-auto">关闭</a-button>
<a-button
:disabled="task.status !== 0 && task.status !== 2"
@click="update"
class="ml-[8px]"
type="primary">
确认修改
</a-button>
</template>
</div>
</template>
</a-modal>
</template>
<style lang="scss" scoped>
#tag-list {
:deep(.arco-tag) {
color: #000;
background-color: #fff;
border: 1px solid rgb(229, 230, 235);
box-sizing: border-box;
}
}
</style>

View File

@@ -1,18 +1,43 @@
<script setup>
import {ref, reactive} from "vue";
import {reactive, ref} from "vue";
import RefuseModalForm1 from "./refuse-modal-form1.vue";
import RefuseModalForm2 from "./refuse-modal-form2.vue";
import Api from "../../../../../api/index.js";
import {Message} from "@arco-design/web-vue";
const {task, taskId, disabled} = defineProps({
task: {
type: Object,
default: {}
},
taskId: {
type: Number,
default: null,
},
disabled: {
type: Boolean,
default: false
}
});
const emits = defineEmits(['success']);
const formRef = ref();
const form = reactive({});
const visible = ref(false);
const step = ref(1);
const next = () => {
const temp = formRef.value.success();
const next = async () => {
const temp = await formRef.value.success();
Object.assign(form, temp);
if (step.value === 2) {
console.log(task)
const {msg} = await Api.merchant.refundChildrenTask({
...form,
id: taskId,
task_backfill_id: task.back.id
});
Message.success(msg);
visible.value = false;
emits('success');
} else {
step.value++;
}
@@ -20,7 +45,7 @@ const next = () => {
</script>
<template>
<a-link :hoverable="false" status="danger" @click="visible = true">拒绝</a-link>
<a-link :hoverable="false" status="danger" @click="visible = true" :disabled="disabled">拒绝</a-link>
<a-modal
width="600px"

View File

@@ -0,0 +1,68 @@
<script setup>
import Api from "../../../../../api/index.js";
import {Message} from "@arco-design/web-vue";
import {onMounted, reactive} from 'vue';
const {taskId} = defineProps({
taskId: {
type: Number,
default: null,
}
});
const SettlementAfter = reactive([]);
const visible = defineModel('visible');
const emits = defineEmits(['success']);
const form = reactive({
ids: []
});
const success = async () => {
const {msg} = await Api.merchant.addEffect({
id: taskId,
...form,
});
Message.success(msg);
visible.value = false;
emits('success');
}
onMounted(() => {
Api.merchant.getSettlementAfter().then(({data}) => {
SettlementAfter.length = 0;
SettlementAfter.push(...data);
});
})
</script>
<template>
<a-modal
width="600px"
@ok="success"
ok-text="确定提交"
class="effect-management-modal"
v-model:visible="visible"
title-align="start"
title="效果管理">
<a-alert>
平台提示请勿虚假提交平台将人工一对一核实若虚假提交将扣除商家对应信用...
</a-alert>
<div class="px-[20px] py-[16px] pb-[100px]">
<div class="text-[#4E5969] text-[14px] mb-[16px]">结算之后</div>
<a-checkbox-group v-model:model-value="form.ids">
<a-checkbox v-for="v in SettlementAfter" :value="v.id">{{ v.name }}</a-checkbox>
</a-checkbox-group>
</div>
</a-modal>
</template>
<style lang="scss">
.effect-management-modal {
.arco-modal-body {
padding: 0;
}
}
</style>
<style scoped lang="scss">
</style>

View File

@@ -1,48 +1,107 @@
<script setup>
import {reactive} from 'vue';
import {onMounted, reactive, useTemplateRef} from 'vue';
import Api from "../../../../../api/index.js";
import XImage from "../../../../../components/XImage/Index.vue";
import UploadButton from "../../../../../components/upload/UploadButton.vue";
import {Message} from "@arco-design/web-vue";
const form = reactive({});
const form = reactive({
common_refund_ids: [],
diy_refund_ids: [],
refund_images: [],
other_refund: null,
});
const emits = defineEmits(['success']);
const formRef = useTemplateRef('formRef');
const rules = reactive({
refund_images: [{
required: true,
message: '其他原因截图不完整',
validator: (value, callback) => {
if (value.length === 0) {
callback('原因截图不能为空');
}
}
}],
});
const CommonRefund = reactive([]);
const DiyRefund = reactive([]);
const success = () => {
return form;
const success = async () => {
const res = await formRef.value.validate();
if (res) {
const firstKey = Object.keys(res)[0];
Message.warning(res[firstKey].message);
throw new Error(res[firstKey].message);
} else {
return form;
}
}
onMounted(() => {
Api.merchant.getCommonRefund().then(({data}) => {
CommonRefund.length = 0;
CommonRefund.push(...data);
});
Api.merchant.getDiyRefund().then(({data}) => {
DiyRefund.length = 0;
DiyRefund.push(...data);
});
});
defineExpose({
success,
});
</script>
<template>
<a-form layout="vertical">
<a-form layout="vertical" ref="formRef" :model="form" :rules="rules">
<a-form-item label="常见拒绝原因">
<a-checkbox-group>
<a-checkbox-group v-model:model-value="form.common_refund_ids">
<div class="grid grid-cols-3 gap-[10px]">
<a-checkbox>标题错误</a-checkbox>
<a-checkbox>评论区未见评论</a-checkbox>
<a-checkbox>素材发布错误</a-checkbox>
<a-checkbox>访问链接看不到作品</a-checkbox>
<a-checkbox>话题携带错误</a-checkbox>
<a-checkbox v-for="v in CommonRefund" :value="v.id">{{ v.name }}</a-checkbox>
</div>
</a-checkbox-group>
</a-form-item>
<a-form-item label="自定义拒绝原因">
<div class="grid grid-cols-3 gap-[10px]">
<a-checkbox>少结算或者不结算理由</a-checkbox>
<a-checkbox>当天发布任意广告</a-checkbox>
<a-checkbox>当天发布竞品广告</a-checkbox>
</div>
<a-checkbox-group v-model:model-value="form.diy_refund_ids">
<a-checkbox v-for="v in DiyRefund" :value="v.id">{{ v.name }}</a-checkbox>
</a-checkbox-group>
</a-form-item>
<a-form-item label="其他原因">
<a-textarea
show-word-limit
:max-length="300"
:auto-size="{minRows: 3}"
v-model:model-value="form.other_refund"
placeholder="在此输入拒绝的原因,方便达人理解">
</a-textarea>
</a-form-item>
<a-form-item label="其他原因">
<a-form-item label="其他原因截图" field="refund_images">
<div class="flex gap-[12px]">
<x-image
class="flex-shrink-0"
v-for="(v, index) in form.refund_images"
@delete="form.refund_images.splice(index, 1)"
:key="index"
width="60px"
height="60px"
:src="v">
</x-image>
<upload-button @success="v=>form.refund_images.push(v)" :api="Api.system.uploadFile2">
<template v-slot:upload-button>
<div
style="border: 1px dashed rgb(229, 230, 235)"
class="size-[60px] bg-[#F2F3F5] flex justify-center items-center flex-col rounded-[4px] cursor-pointer">
<icon-plus/>
<div>添加</div>
</div>
</template>
</upload-button>
</div>
</a-form-item>
</a-form>
</template>

View File

@@ -1,70 +1,145 @@
<script setup>
import {reactive} from 'vue';
import {onMounted, reactive, useTemplateRef} from 'vue';
import Api from "../../../../../api/index.js";
import XImage from "../../../../../components/XImage/Index.vue";
import UploadButton from "../../../../../components/upload/UploadButton.vue";
import {Message} from "@arco-design/web-vue";
const Suggestion = reactive([]);
const form = reactive({
isSuggestion: 1,
suggestion: 0,
is_suggestion: 1,
suggestion_id: 0,
other_suggestion: null,
is_backfill: 1,
back_time: null,
other_images: [],
back_content: null,
});
const formRef = useTemplateRef('formRef');
const rules = reactive({
is_backfill: {
required: true,
message: '其他原因截图不完整',
validator: (value, callback) => {
if (!form.back_time) {
callback('时间不能为空');
return;
}
if (value === 0 && !form.back_content) {
callback('回复内容不能为空');
}
}
}
});
const success = () => {
return form;
const success = async () => {
const res = await formRef.value.validate();
if (res) {
const firstKey = Object.keys(res)[0];
Message.warning(res[firstKey].message);
throw new Error(res[firstKey].message);
} else {
return form;
}
}
onMounted(() => {
Api.merchant.getSuggestion().then(({data}) => {
Suggestion.length = 0;
Suggestion.push(...data);
});
})
defineExpose({
success,
});
</script>
<template>
<a-form layout="vertical" :model="form">
<a-form layout="vertical" ref="formRef" :model="form" :rules="rules">
<a-form-item label="是否提供修改建议">
<a-radio-group v-model:model-value="form.isSuggestion">
<a-radio-group v-model:model-value="form.is_suggestion">
<a-radio :value="1"></a-radio>
<a-radio :value="0">拒绝达人本次回填也无需达人进行后续的回填</a-radio>
</a-radio-group>
</a-form-item>
<template v-if="form.isSuggestion===1">
<template v-if="form.is_suggestion===1">
<a-form-item label="修改建议">
<div class="w-full">
<a-radio-group v-model:model-value="form.suggestion" direction="vertical">
<a-radio :value="0">请截图账号主页截图证明发布了该素材</a-radio>
<a-radio :value="1">请删除后按要求重新发布素材</a-radio>
<a-radio :value="2">请删除现有评论按要求重新发布评论</a-radio>
<a-radio :value="3">其他</a-radio>
<a-radio-group v-model:model-value="form.suggestion_id" direction="vertical">
<a-radio v-for="v in Suggestion" :value="v.id">{{ v.name }}</a-radio>
<a-radio :value="0">其他</a-radio>
</a-radio-group>
<div v-if="form.suggestion === 3">
<div v-if="form.suggestion_id === 0">
<a-textarea
show-word-limit
:max-length="300"
:auto-size="{minRows: 3}"
v-model:model-value="form.other_suggestion"
placeholder="在此输入拒绝的原因,方便达人理解">
</a-textarea>
<a-upload>
</a-upload>
<div class="flex gap-[12px]">
<x-image
class="flex-shrink-0"
v-for="(v, index) in form.other_images"
@delete="form.other_images.splice(index, 1)"
:key="index"
width="60px"
height="60px"
:src="v">
</x-image>
<upload-button @success="v=>form.other_images.push(v)" :api="Api.system.uploadFile2">
<template v-slot:upload-button>
<div
style="border: 1px dashed rgb(229, 230, 235)"
class="size-[60px] bg-[#F2F3F5] flex justify-center items-center flex-col rounded-[4px] cursor-pointer">
<icon-plus/>
<div>添加</div>
</div>
</template>
</upload-button>
</div>
</div>
</div>
</a-form-item>
<a-form-item label="*是否要求达人重新回填当前《回填数据1》">
<a-radio-group>
<a-radio>
<a-form-item label="*是否要求达人重新回填当前《回填数据1》" field="is_backfill">
<a-radio-group v-model:model-value="form.is_backfill">
<a-radio :value="1">
&nbsp;&nbsp;&nbsp;请最晚于
<a-date-picker
v-if="form.is_backfill===1"
v-model="form.back_time"
format="YYYY-MM-DD HH:mm:ss"
show-time>
</a-date-picker>
<a-date-picker
v-else
format="YYYY-MM-DD HH:mm:ss"
show-time>
</a-date-picker>
之前完成重新回填
</a-radio>
<div class="info ml-[30px] mb-[15px]">如果给达人提供的修改建议导致回填数据有变动请点击此项</div>
<a-radio>
<a-radio :value="0">
<div class="flex whitespace-nowrap items-center gap-[4px]">
&nbsp;&nbsp;&nbsp;请最晚于
<a-date-picker
v-if="form.is_backfill===0"
v-model="form.back_time"
format="YYYY-MM-DD HH:mm:ss"
show-time>
</a-date-picker>
<a-date-picker
v-else
format="YYYY-MM-DD HH:mm:ss"
show-time>
</a-date-picker>
之前在我的回填中回复
<a-input class="w-auto" placeholder="请输入"></a-input>
<a-input v-model:model-value="form.back_content" class="w-auto"
placeholder="请输入"></a-input>
</div>
</a-radio>
</a-radio-group>

View File

@@ -1,16 +1,19 @@
<script setup>
import OriginTag from "../../../../components/OriginTag/index.vue";
import {reactive} from "vue";
import {reactive, ref} from "vue";
import useTableQuery from "../../../../hooks/useTableQuery.js";
import Api from "../../../../api/index.js";
import RefuseModal from "./components/RefuseModal.vue";
import openTerminateTask from "../../../../components/TerminateTask/TerminateTask.js";
import BlackjackExpertModal from "../../components/BlackjackExpertModal.vue";
import {useRoute} from "vue-router";
import {toPath} from "../../../../utils/index.js";
import PreviewTaskModal from "../../../../components/PreviewTaskModal/PreviewTaskModal.vue";
import {openUrl, toPath} from "../../../../utils/index.js";
import PreviewTaskMaterialModal from "./components/PreviewTaskMaterialModal.vue";
import {Message} from "@arco-design/web-vue";
import EffectManagementModal from "./components/effectManagementModal.vue";
const route = useRoute();
const taskId = ref(null);
const columns = [
{
title: '子任务编号',
@@ -23,7 +26,8 @@ const columns = [
},
{
title: '回传数据',
dataIndex: 'key',
dataIndex: 'content',
slotName: 'content',
},
{
title: '操作',
@@ -64,7 +68,8 @@ const columns = [
},
];
const state = reactive({
openBlackjackExpertModal: false
openBlackjackExpertModal: false,
openEffectManagementModal: false
})
const vo = reactive({
@@ -77,7 +82,7 @@ const po = reactive({
wd: null,
});
const {loading, pagination} = useTableQuery({
const {loading, pagination, fetchData} = useTableQuery({
parameter: po,
api: Api.merchant.getTaskChildrenList,
callback: (data) => {
@@ -85,6 +90,19 @@ const {loading, pagination} = useTableQuery({
console.log(vo);
}
});
const passTask = async (id, task_backfill_id) => {
const {msg} = await Api.merchant.passTask({
id: id,
task_backfill_id: task_backfill_id,
});
Message.success(msg);
await fetchData();
}
const confirmTask = async () => {
}
</script>
<template>
@@ -122,55 +140,94 @@ const {loading, pagination} = useTableQuery({
<a-tag v-if="record.status === 6" color="arcoblue">已终止</a-tag>
</template>
<template v-slot:action>
<div v-for="(item, index) in 2">
<div class="flex gap-[16px] justify-center items-center">
<a-link :hoverable="false" status="success">通过</a-link>
<template v-slot:content="{record}">
<div v-for="(item, index) in record?.task_content" class="flex flex-col">
<a-link v-for="v in item?.back?.content_arr" @click="openUrl(v)" :hoverable="false">
{{ v }}
</a-link>
<RefuseModal></RefuseModal>
</div>
<a-divider v-if="index+1 !== 2"></a-divider>
<a-divider v-if="index+1 !== record?.task_content.length"></a-divider>
</div>
</template>
<template v-slot:dataStatus>
<div v-for="(item, index) in 2">
<div>
<OriginTag color="rgb(var(--success-6))">已通过</OriginTag>
<OriginTag color="rgb(var(--orange-6))">在此之前完成审核</OriginTag>
<OriginTag color="rgb(var(--arcoblue-6))">等待回填</OriginTag>
<OriginTag color="var(--color-neutral-4)">/</OriginTag>
<template v-slot:action="{record}">
<div v-for="(item, index) in record.task_content">
<div class="flex gap-[16px] justify-center items-center">
<a-popconfirm content="确定通过吗?" @ok="passTask(record.id, item.back.id)">
<a-link :hoverable="false" status="success"
:disabled="!(item.back_status===2 || item.back_status===4)">通过
</a-link>
</a-popconfirm>
<RefuseModal :taskId="record.id" :task="item" @success="fetchData"
:disabled="!(item.back_status===2 || item.back_status===4)"></RefuseModal>
</div>
<a-divider v-if="index+1 !== 2"></a-divider>
<a-divider v-if="index+1 !== record.task_content.length"></a-divider>
</div>
</template>
<template v-slot:dataStatus="{record}">
<div v-for="(item, index) in record.task_content">
<div>
<OriginTag color="var(--color-neutral-4)" v-if="item.back_status === 0">
\
</OriginTag>
<OriginTag color="rgb(var(--arcoblue-6))" v-if="item.back_status === 1">
{{ item.back_status_text }}
</OriginTag>
<OriginTag color="rgb(var(--success-6))" v-if="item.back_status === 2">
{{ item.back_status_text }}
</OriginTag>
<OriginTag color="rgb(var(--orange-6))" v-if="item.back_status === 3">
{{ item.back_status_text }}
</OriginTag>
<OriginTag color="rgb(var(--danger-6))" v-if="item.back_status === 4">
{{ item.back_status_text }}
</OriginTag>
</div>
<a-divider v-if="index+1 !== record.task_content.length"></a-divider>
</div>
</template>
<template v-slot:callback>
<a-link :hoverable="false">
确认结算
沟通记录
</a-link>
</template>
<template v-slot:payStatus>
<a-link :hoverable="false" status="success">
<a-link :hoverable="false" status="success" @click="confirmTask">
确认结算
</a-link>
</template>
<template v-slot:action2>
<template v-slot:action2="{record}">
<div class="flex gap-[16px] justify-center items-center">
<PreviewTaskModal>
<PreviewTaskMaterialModal title="查看素材" :task="record">
<a-link :hoverable="false">查看素材</a-link>
</PreviewTaskModal>
<a-dropdown :hide-on-select="false">
</PreviewTaskMaterialModal>
<a-dropdown>
<a-link :hoverable="false">
更多
<icon-down/>
</a-link>
<template #content>
<a-doption>效果管理</a-doption>
<a-doption @click="openTerminateTask">终止子任务</a-doption>
<a-doption @click="state.openBlackjackExpertModal=true">拉黑达人</a-doption>
<a-doption @click="() => {state.openEffectManagementModal=true;taskId=record.id}">
效果管理
</a-doption>
<a-doption
@click="openTerminateTask({
Api: Api.merchant.stopTaskChildren,
status_text: record.stattus_text,
type: record.status === 6 || record.status === 4 ? 'warning' : 'success',
taskId: record.id,
callback: fetchData,
})">
终止子任务
</a-doption>
<a-doption @click="() => {state.openBlackjackExpertModal=true;taskId=record.id}">
拉黑达人
</a-doption>
</template>
</a-dropdown>
</div>
@@ -179,7 +236,17 @@ const {loading, pagination} = useTableQuery({
</div>
</a-card>
<BlackjackExpertModal v-model:visible="state.openBlackjackExpertModal"></BlackjackExpertModal>
<BlackjackExpertModal
:taskId="taskId"
v-model:visible="state.openBlackjackExpertModal"
@success="fetchData">
</BlackjackExpertModal>
<effect-management-modal
:taskId="taskId"
v-model:visible="state.openEffectManagementModal"
@success="fetchData">
</effect-management-modal>
</template>
<style scoped>