update
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
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"
|
||||
|
||||
@@ -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>
|
||||
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>
|
||||
|
||||
@@ -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">
|
||||
是 请最晚于
|
||||
<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]">
|
||||
否 请最晚于
|
||||
<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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user