update
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -10,6 +10,7 @@ lerna-debug.log*
|
|||||||
node_modules
|
node_modules
|
||||||
dist
|
dist
|
||||||
dist-ssr
|
dist-ssr
|
||||||
|
dist.zip
|
||||||
*.local
|
*.local
|
||||||
|
|
||||||
# Editor directories and files
|
# Editor directories and files
|
||||||
|
|||||||
@@ -315,7 +315,77 @@ const merchant = {
|
|||||||
method: Method.POST,
|
method: Method.POST,
|
||||||
data: data
|
data: data
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
getTaskChildrenInfo: async (id) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/getTaskChildrenInfo',
|
||||||
|
method: Method.POST,
|
||||||
|
data: {id}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
passTask: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/passTask',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getCommonRefund: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/getCommonRefund',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getDiyRefund: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/getDiyRefund',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getSuggestion: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/getSuggestion',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
refundChildrenTask: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/refundChildrenTask',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
stopTaskChildren: async (id) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/stopTaskChildren',
|
||||||
|
method: Method.POST,
|
||||||
|
data: {id}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addTaskBlock: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/addTaskBlock',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addEffect: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/addEffect',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
confirmTask: async (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/index/task/confirmTask',
|
||||||
|
method: Method.POST,
|
||||||
|
data: data
|
||||||
|
});
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export default merchant;
|
export default merchant;
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ const refuseTaskChildren = async () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<a-link :hoverable="false" @click="visible=true">预览</a-link>
|
<a-link v-if="!$slots.default" :hoverable="false" @click="visible=true">预览</a-link>
|
||||||
<div @click="visible=true">
|
<div v-else @click="visible=true">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import {Message, Modal, Tag} from "@arco-design/web-vue";
|
import {Message, Modal, Tag} from "@arco-design/web-vue";
|
||||||
import {h} from 'vue';
|
import {h} from 'vue';
|
||||||
import Api from "../../api/index.js";
|
|
||||||
|
|
||||||
const ModalContent = {
|
const ModalContent = {
|
||||||
props: {
|
props: {
|
||||||
@@ -40,13 +39,13 @@ const ModalContent = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const openTerminateTask = ({type = 'none', status_text = '待上传素材', taskId}) => {
|
const openTerminateTask = ({type = 'none', status_text = '待上传素材', taskId, Api = Api.admin.stopTask, callback}) => {
|
||||||
const status = type;
|
const status = type;
|
||||||
|
|
||||||
Modal.warning({
|
Modal.warning({
|
||||||
title: '确认终止子任务',
|
title: '确认终止子任务',
|
||||||
draggable: true,
|
draggable: true,
|
||||||
hideCancel: false,
|
hideCancel: status === 'warning',
|
||||||
content: () =>
|
content: () =>
|
||||||
h(
|
h(
|
||||||
ModalContent,
|
ModalContent,
|
||||||
@@ -60,9 +59,12 @@ const openTerminateTask = ({type = 'none', status_text = '待上传素材', task
|
|||||||
},
|
},
|
||||||
okText: status === 'success' ? '确认终止' : '确认',
|
okText: status === 'success' ? '确认终止' : '确认',
|
||||||
onOk: async () => {
|
onOk: async () => {
|
||||||
const {code, msg} = await Api.admin.stopTask(taskId);
|
if (status !== 'warning') {
|
||||||
|
const {code, msg} = await Api(taskId);
|
||||||
if (code === 1) Message.success(msg);
|
if (code === 1) Message.success(msg);
|
||||||
}
|
}
|
||||||
|
callback && callback();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,52 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {reactive} from 'vue';
|
import {reactive, ref} from 'vue';
|
||||||
import Api from "../../../api/index.js";
|
|
||||||
import XSelect from "../../../components/XSelect/index.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 visible = defineModel('visible');
|
||||||
|
const {taskId} = defineProps({
|
||||||
const form = reactive({
|
taskId: {
|
||||||
blackoutDuration: 1,
|
type: Number,
|
||||||
value: null,
|
default: null,
|
||||||
blackoutValue: 50,
|
}
|
||||||
});
|
});
|
||||||
|
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>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
<div @click="visible=true">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
|
||||||
<a-modal
|
<a-modal
|
||||||
|
@click.stop
|
||||||
|
@ok="success"
|
||||||
:width="600"
|
:width="600"
|
||||||
ok-text="确认拉黑"
|
ok-text="确认拉黑"
|
||||||
title-align="start"
|
title-align="start"
|
||||||
@@ -23,16 +56,18 @@ const form = reactive({
|
|||||||
<a-form-item label="拉黑时间">
|
<a-form-item label="拉黑时间">
|
||||||
<a-radio-group
|
<a-radio-group
|
||||||
type="button"
|
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="1">1天</a-radio>
|
||||||
<a-radio :value="2">3天</a-radio>
|
<a-radio :value="3">3天</a-radio>
|
||||||
<a-radio :value="3">7天</a-radio>
|
<a-radio :value="7">7天</a-radio>
|
||||||
<a-radio :value="4">30天</a-radio>
|
<a-radio :value="30">30天</a-radio>
|
||||||
<a-radio :value="5">永久</a-radio>
|
<a-radio :value="-1">永久</a-radio>
|
||||||
<a-radio :value="6">自定义</a-radio>
|
<a-radio :value="0">自定义</a-radio>
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
<a-input-number
|
<a-input-number
|
||||||
v-model:model-value="form.blackoutValue"
|
:disabled="dayStatus !== 0"
|
||||||
|
v-model:model-value="form.day"
|
||||||
default-value="50"
|
default-value="50"
|
||||||
mode="button"
|
mode="button"
|
||||||
class="w-[150px]">
|
class="w-[150px]">
|
||||||
@@ -45,8 +80,8 @@ const form = reactive({
|
|||||||
<a-form-item label="拉黑效果">
|
<a-form-item label="拉黑效果">
|
||||||
<XSelect
|
<XSelect
|
||||||
placeholder="请选择拉黑效果"
|
placeholder="请选择拉黑效果"
|
||||||
v-model:model-value="form.value"
|
v-model:model-value="form.type"
|
||||||
:api="Api.system.getSelect">
|
:api="getSelect">
|
||||||
</XSelect>
|
</XSelect>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
@@ -54,6 +89,7 @@ const form = reactive({
|
|||||||
<a-textarea
|
<a-textarea
|
||||||
show-word-limit
|
show-word-limit
|
||||||
:max-length="100"
|
:max-length="100"
|
||||||
|
v-model:model-value="form.remark"
|
||||||
placeholder="请输入拉黑原因">
|
placeholder="请输入拉黑原因">
|
||||||
</a-textarea>
|
</a-textarea>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -1,18 +1,43 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {ref, reactive} from "vue";
|
import {reactive, ref} from "vue";
|
||||||
import RefuseModalForm1 from "./refuse-modal-form1.vue";
|
import RefuseModalForm1 from "./refuse-modal-form1.vue";
|
||||||
import RefuseModalForm2 from "./refuse-modal-form2.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 formRef = ref();
|
||||||
const form = reactive({});
|
const form = reactive({});
|
||||||
const visible = ref(false);
|
const visible = ref(false);
|
||||||
const step = ref(1);
|
const step = ref(1);
|
||||||
|
|
||||||
const next = () => {
|
const next = async () => {
|
||||||
const temp = formRef.value.success();
|
const temp = await formRef.value.success();
|
||||||
Object.assign(form, temp);
|
Object.assign(form, temp);
|
||||||
if (step.value === 2) {
|
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 {
|
} else {
|
||||||
step.value++;
|
step.value++;
|
||||||
}
|
}
|
||||||
@@ -20,7 +45,7 @@ const next = () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<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
|
<a-modal
|
||||||
width="600px"
|
width="600px"
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -1,48 +1,107 @@
|
|||||||
<script setup>
|
<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 = () => {
|
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;
|
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({
|
defineExpose({
|
||||||
success,
|
success,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<a-form layout="vertical">
|
<a-form layout="vertical" ref="formRef" :model="form" :rules="rules">
|
||||||
<a-form-item label="常见拒绝原因">
|
<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]">
|
<div class="grid grid-cols-3 gap-[10px]">
|
||||||
<a-checkbox>标题错误</a-checkbox>
|
<a-checkbox v-for="v in CommonRefund" :value="v.id">{{ v.name }}</a-checkbox>
|
||||||
<a-checkbox>评论区未见评论</a-checkbox>
|
|
||||||
<a-checkbox>素材发布错误</a-checkbox>
|
|
||||||
<a-checkbox>访问链接看不到作品</a-checkbox>
|
|
||||||
<a-checkbox>话题携带错误</a-checkbox>
|
|
||||||
</div>
|
</div>
|
||||||
</a-checkbox-group>
|
</a-checkbox-group>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item label="自定义拒绝原因">
|
<a-form-item label="自定义拒绝原因">
|
||||||
<div class="grid grid-cols-3 gap-[10px]">
|
<a-checkbox-group v-model:model-value="form.diy_refund_ids">
|
||||||
<a-checkbox>少结算或者不结算理由</a-checkbox>
|
<a-checkbox v-for="v in DiyRefund" :value="v.id">{{ v.name }}</a-checkbox>
|
||||||
<a-checkbox>当天发布任意广告</a-checkbox>
|
</a-checkbox-group>
|
||||||
<a-checkbox>当天发布竞品广告</a-checkbox>
|
|
||||||
</div>
|
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item label="其他原因">
|
<a-form-item label="其他原因">
|
||||||
<a-textarea
|
<a-textarea
|
||||||
|
show-word-limit
|
||||||
|
:max-length="300"
|
||||||
:auto-size="{minRows: 3}"
|
:auto-size="{minRows: 3}"
|
||||||
|
v-model:model-value="form.other_refund"
|
||||||
placeholder="在此输入拒绝的原因,方便达人理解">
|
placeholder="在此输入拒绝的原因,方便达人理解">
|
||||||
</a-textarea>
|
</a-textarea>
|
||||||
</a-form-item>
|
</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-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,70 +1,145 @@
|
|||||||
<script setup>
|
<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({
|
const form = reactive({
|
||||||
isSuggestion: 1,
|
is_suggestion: 1,
|
||||||
suggestion: 0,
|
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 = () => {
|
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;
|
return form;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
Api.merchant.getSuggestion().then(({data}) => {
|
||||||
|
Suggestion.length = 0;
|
||||||
|
Suggestion.push(...data);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
success,
|
success,
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<a-form layout="vertical" :model="form">
|
<a-form layout="vertical" ref="formRef" :model="form" :rules="rules">
|
||||||
<a-form-item label="是否提供修改建议">
|
<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="1">是</a-radio>
|
||||||
<a-radio :value="0">否(拒绝达人本次回填,也无需达人进行后续的回填)</a-radio>
|
<a-radio :value="0">否(拒绝达人本次回填,也无需达人进行后续的回填)</a-radio>
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<template v-if="form.isSuggestion===1">
|
<template v-if="form.is_suggestion===1">
|
||||||
<a-form-item label="修改建议">
|
<a-form-item label="修改建议">
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<a-radio-group v-model:model-value="form.suggestion" direction="vertical">
|
<a-radio-group v-model:model-value="form.suggestion_id" direction="vertical">
|
||||||
<a-radio :value="0">请截图账号主页截图,证明发布了该素材</a-radio>
|
<a-radio v-for="v in Suggestion" :value="v.id">{{ v.name }}</a-radio>
|
||||||
<a-radio :value="1">请删除后,按要求重新发布素材</a-radio>
|
<a-radio :value="0">其他</a-radio>
|
||||||
<a-radio :value="2">请删除现有评论,按要求重新发布评论</a-radio>
|
|
||||||
<a-radio :value="3">其他</a-radio>
|
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
|
|
||||||
<div v-if="form.suggestion === 3">
|
<div v-if="form.suggestion_id === 0">
|
||||||
<a-textarea
|
<a-textarea
|
||||||
|
show-word-limit
|
||||||
|
:max-length="300"
|
||||||
:auto-size="{minRows: 3}"
|
:auto-size="{minRows: 3}"
|
||||||
|
v-model:model-value="form.other_suggestion"
|
||||||
placeholder="在此输入拒绝的原因,方便达人理解">
|
placeholder="在此输入拒绝的原因,方便达人理解">
|
||||||
</a-textarea>
|
</a-textarea>
|
||||||
<a-upload>
|
<div class="flex gap-[12px]">
|
||||||
</a-upload>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
|
||||||
<a-form-item label="*是否要求达人重新回填当前《回填数据1》">
|
<a-form-item label="*是否要求达人重新回填当前《回填数据1》" field="is_backfill">
|
||||||
<a-radio-group>
|
<a-radio-group v-model:model-value="form.is_backfill">
|
||||||
<a-radio>
|
<a-radio :value="1">
|
||||||
是 请最晚于
|
是 请最晚于
|
||||||
<a-date-picker
|
<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"
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
show-time>
|
show-time>
|
||||||
</a-date-picker>
|
</a-date-picker>
|
||||||
之前,完成重新回填
|
之前,完成重新回填
|
||||||
</a-radio>
|
</a-radio>
|
||||||
<div class="info ml-[30px] mb-[15px]">如果给达人提供的修改建议导致回填数据有变动,请点击此项</div>
|
<div class="info ml-[30px] mb-[15px]">如果给达人提供的修改建议导致回填数据有变动,请点击此项</div>
|
||||||
<a-radio>
|
<a-radio :value="0">
|
||||||
<div class="flex whitespace-nowrap items-center gap-[4px]">
|
<div class="flex whitespace-nowrap items-center gap-[4px]">
|
||||||
否 请最晚于
|
否 请最晚于
|
||||||
<a-date-picker
|
<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"
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
show-time>
|
show-time>
|
||||||
</a-date-picker>
|
</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>
|
</div>
|
||||||
</a-radio>
|
</a-radio>
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
|
|||||||
@@ -1,16 +1,19 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import OriginTag from "../../../../components/OriginTag/index.vue";
|
import OriginTag from "../../../../components/OriginTag/index.vue";
|
||||||
import {reactive} from "vue";
|
import {reactive, ref} from "vue";
|
||||||
import useTableQuery from "../../../../hooks/useTableQuery.js";
|
import useTableQuery from "../../../../hooks/useTableQuery.js";
|
||||||
import Api from "../../../../api/index.js";
|
import Api from "../../../../api/index.js";
|
||||||
import RefuseModal from "./components/RefuseModal.vue";
|
import RefuseModal from "./components/RefuseModal.vue";
|
||||||
import openTerminateTask from "../../../../components/TerminateTask/TerminateTask.js";
|
import openTerminateTask from "../../../../components/TerminateTask/TerminateTask.js";
|
||||||
import BlackjackExpertModal from "../../components/BlackjackExpertModal.vue";
|
import BlackjackExpertModal from "../../components/BlackjackExpertModal.vue";
|
||||||
import {useRoute} from "vue-router";
|
import {useRoute} from "vue-router";
|
||||||
import {toPath} from "../../../../utils/index.js";
|
import {openUrl, toPath} from "../../../../utils/index.js";
|
||||||
import PreviewTaskModal from "../../../../components/PreviewTaskModal/PreviewTaskModal.vue";
|
import PreviewTaskMaterialModal from "./components/PreviewTaskMaterialModal.vue";
|
||||||
|
import {Message} from "@arco-design/web-vue";
|
||||||
|
import EffectManagementModal from "./components/effectManagementModal.vue";
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
const taskId = ref(null);
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: '子任务编号',
|
title: '子任务编号',
|
||||||
@@ -23,7 +26,8 @@ const columns = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '回传数据',
|
title: '回传数据',
|
||||||
dataIndex: 'key',
|
dataIndex: 'content',
|
||||||
|
slotName: 'content',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '操作',
|
title: '操作',
|
||||||
@@ -64,7 +68,8 @@ const columns = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
openBlackjackExpertModal: false
|
openBlackjackExpertModal: false,
|
||||||
|
openEffectManagementModal: false
|
||||||
})
|
})
|
||||||
|
|
||||||
const vo = reactive({
|
const vo = reactive({
|
||||||
@@ -77,7 +82,7 @@ const po = reactive({
|
|||||||
wd: null,
|
wd: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
const {loading, pagination} = useTableQuery({
|
const {loading, pagination, fetchData} = useTableQuery({
|
||||||
parameter: po,
|
parameter: po,
|
||||||
api: Api.merchant.getTaskChildrenList,
|
api: Api.merchant.getTaskChildrenList,
|
||||||
callback: (data) => {
|
callback: (data) => {
|
||||||
@@ -85,6 +90,19 @@ const {loading, pagination} = useTableQuery({
|
|||||||
console.log(vo);
|
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>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -122,55 +140,94 @@ const {loading, pagination} = useTableQuery({
|
|||||||
<a-tag v-if="record.status === 6" color="arcoblue">已终止</a-tag>
|
<a-tag v-if="record.status === 6" color="arcoblue">已终止</a-tag>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:action>
|
<template v-slot:content="{record}">
|
||||||
<div v-for="(item, index) in 2">
|
<div v-for="(item, index) in record?.task_content" class="flex flex-col">
|
||||||
<div class="flex gap-[16px] justify-center items-center">
|
<a-link v-for="v in item?.back?.content_arr" @click="openUrl(v)" :hoverable="false">
|
||||||
<a-link :hoverable="false" status="success">通过</a-link>
|
{{ v }}
|
||||||
|
</a-link>
|
||||||
|
|
||||||
<RefuseModal></RefuseModal>
|
<a-divider v-if="index+1 !== record?.task_content.length"></a-divider>
|
||||||
</div>
|
|
||||||
<a-divider v-if="index+1 !== 2"></a-divider>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:dataStatus>
|
<template v-slot:action="{record}">
|
||||||
<div v-for="(item, index) in 2">
|
<div v-for="(item, index) in record.task_content">
|
||||||
<div>
|
<div class="flex gap-[16px] justify-center items-center">
|
||||||
<OriginTag color="rgb(var(--success-6))">已通过</OriginTag>
|
<a-popconfirm content="确定通过吗?" @ok="passTask(record.id, item.back.id)">
|
||||||
<OriginTag color="rgb(var(--orange-6))">在此之前完成审核</OriginTag>
|
<a-link :hoverable="false" status="success"
|
||||||
<OriginTag color="rgb(var(--arcoblue-6))">等待回填</OriginTag>
|
:disabled="!(item.back_status===2 || item.back_status===4)">通过
|
||||||
<OriginTag color="var(--color-neutral-4)">/</OriginTag>
|
</a-link>
|
||||||
|
</a-popconfirm>
|
||||||
|
|
||||||
|
<RefuseModal :taskId="record.id" :task="item" @success="fetchData"
|
||||||
|
:disabled="!(item.back_status===2 || item.back_status===4)"></RefuseModal>
|
||||||
</div>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:callback>
|
<template v-slot:callback>
|
||||||
<a-link :hoverable="false">
|
<a-link :hoverable="false">
|
||||||
确认结算
|
沟通记录
|
||||||
</a-link>
|
</a-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:payStatus>
|
<template v-slot:payStatus>
|
||||||
<a-link :hoverable="false" status="success">
|
<a-link :hoverable="false" status="success" @click="confirmTask">
|
||||||
确认结算
|
确认结算
|
||||||
</a-link>
|
</a-link>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template v-slot:action2>
|
<template v-slot:action2="{record}">
|
||||||
<div class="flex gap-[16px] justify-center items-center">
|
<div class="flex gap-[16px] justify-center items-center">
|
||||||
<PreviewTaskModal>
|
<PreviewTaskMaterialModal title="查看素材" :task="record">
|
||||||
<a-link :hoverable="false">查看素材</a-link>
|
<a-link :hoverable="false">查看素材</a-link>
|
||||||
</PreviewTaskModal>
|
</PreviewTaskMaterialModal>
|
||||||
<a-dropdown :hide-on-select="false">
|
<a-dropdown>
|
||||||
<a-link :hoverable="false">
|
<a-link :hoverable="false">
|
||||||
更多
|
更多
|
||||||
<icon-down/>
|
<icon-down/>
|
||||||
</a-link>
|
</a-link>
|
||||||
<template #content>
|
<template #content>
|
||||||
<a-doption>效果管理</a-doption>
|
<a-doption @click="() => {state.openEffectManagementModal=true;taskId=record.id}">
|
||||||
<a-doption @click="openTerminateTask">终止子任务</a-doption>
|
效果管理
|
||||||
<a-doption @click="state.openBlackjackExpertModal=true">拉黑达人</a-doption>
|
</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>
|
</template>
|
||||||
</a-dropdown>
|
</a-dropdown>
|
||||||
</div>
|
</div>
|
||||||
@@ -179,7 +236,17 @@ const {loading, pagination} = useTableQuery({
|
|||||||
</div>
|
</div>
|
||||||
</a-card>
|
</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>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ export const baseImage = (url) => {
|
|||||||
return url.startsWith('http') ? url : import.meta.env.VITE_API_URL + url;
|
return url.startsWith('http') ? url : import.meta.env.VITE_API_URL + url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const openUrl = (url) => {
|
||||||
|
window.open(url);
|
||||||
|
}
|
||||||
|
|
||||||
export const determineMediaType = (url) => {
|
export const determineMediaType = (url) => {
|
||||||
const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'];
|
const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.svg'];
|
||||||
const videoExtensions = ['.mp4', '.mov', '.avi', '.mkv', '.webm'];
|
const videoExtensions = ['.mp4', '.mov', '.avi', '.mkv', '.webm'];
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user