This commit is contained in:
2025-06-10 20:43:07 +08:00
parent 443b164348
commit f16fd016d0
18 changed files with 178 additions and 87 deletions

View File

@@ -456,6 +456,34 @@ const merchant = {
data: data
});
},
getTaskBlock: async (data) => {
return request({
url: '/index/task/getTaskBlock',
method: Method.POST,
data: data
});
},
cancelTaskBlock: async (data) => {
return request({
url: '/index/task/cancelTaskBlock',
method: Method.POST,
data: data
});
},
getTaskEffect: async (data) => {
return request({
url: '/index/task/getTaskEffect',
method: Method.POST,
data: data
});
},
cancelTaskEffect: async (data) => {
return request({
url: '/index/task/cancelTaskEffect',
method: Method.POST,
data: data
});
},
}
export default merchant;

View File

@@ -7,6 +7,10 @@ const input = ref('');
const changeInput = (e) => {
if (e.match(/#(\S+?)(?=\s)/g)) {
if (modelValue.value === void 0) {
console.log('进来了')
}
console.log(modelValue.value)
modelValue.value.push(...e.match(/#(\S+?)(?=\s)/g).map(tag => tag.slice(1)));
input.value = null;
nextTick(() => {

View File

@@ -1,6 +1,7 @@
<script setup>
import {onMounted, reactive} from "vue";
const emits = defineEmits(['change']);
const {api, fieldName, apiPo, init, defaultValue} = defineProps({
api: {
type: Function,
@@ -50,6 +51,7 @@ onMounted(() => {
:options="list"
:field-names="fieldName"
:default-value="defaultValue"
@change="emits('change')"
@popup-visible-change="popupChange"
placeholder="请选择">
</a-select>

View File

@@ -2,7 +2,7 @@
import XImage from "../XImage/Index.vue";
import Api from "../../api/index.js";
const {size, api, multiple} = defineProps({
const {size, api, multiple, placeholder} = defineProps({
size: {
type: String,
default: '60px'
@@ -14,6 +14,10 @@ const {size, api, multiple} = defineProps({
multiple: {
type: Boolean,
default: true,
},
placeholder: {
type: String,
default: '上传'
}
});
const files = defineModel('files');
@@ -40,7 +44,7 @@ const beforeUpload = (file) => {
<template #upload-button>
<div class="upload-button test">
<IconPlus/>
上传
{{ placeholder }}
</div>
</template>
</a-upload>

View File

@@ -5,6 +5,7 @@ import {Message} from "@arco-design/web-vue";
const visible = ref(false);
const detail = reactive({});
const emits = defineEmits(['success']);
const {id, money} = defineProps({
id: {
type: Number,
@@ -39,6 +40,7 @@ const success = async () => {
money: money,
});
Message.success(msg);
emits('success');
}
</script>

View File

@@ -2,43 +2,44 @@
import useTableQuery from "../../../../hooks/useTableQuery.js";
import Api from "../../../../api/index.js";
import {reactive} from "vue";
import {Message} from "@arco-design/web-vue";
const columns = [
{
title: 'ID',
dataIndex: 'key',
dataIndex: 'id',
},
{
title: '渠道',
dataIndex: 'key',
dataIndex: 'platform',
},
{
title: '已拉黑达人',
dataIndex: 'key',
dataIndex: 'uid',
},
{
title: '拉黑原因',
dataIndex: 'key',
dataIndex: 'remark',
},
{
title: '拉黑效果',
dataIndex: 'key',
dataIndex: 'type_text',
},
{
title: '拉黑开始日期',
dataIndex: 'key',
dataIndex: 'createtime',
},
{
title: '拉黑结束日期',
dataIndex: 'key',
dataIndex: 'endtime',
},
{
title: '关联任务ID',
dataIndex: 'key',
dataIndex: 'task_id',
},
{
title: '关联子任务ID',
dataIndex: 'key',
dataIndex: 'task_children_id',
},
{
title: '操作',
@@ -57,14 +58,20 @@ const po = reactive({
wd: null,
});
const {loading, pagination, initFetchData} = useTableQuery({
const {loading, pagination, initFetchData, fetchData} = useTableQuery({
parameter: po,
api: Api.system.getData,
api: Api.merchant.getTaskBlock,
callback: (data) => {
Object.assign(vo, data);
console.log(vo);
}
});
const cancelTaskBlock = async (id) => {
const {msg} = await Api.merchant.cancelTaskBlock({id: id});
Message.success(msg);
await fetchData();
}
</script>
<template>
@@ -86,8 +93,11 @@ const {loading, pagination, initFetchData} = useTableQuery({
:pagination="pagination"
:loading="loading"
:columns="columns">
<template v-slot:action>
<template v-slot:action="{record}">
<a-popconfirm content="确定取消吗?" @ok="cancelTaskBlock(record.id)" v-if="record.is_cancel !== 1">
<a-link :hoverable="false" :disabled="false">取消拉黑</a-link>
</a-popconfirm>
<a-link :hoverable="false" :disabled="true" v-else>已取消</a-link>
</template>
</a-table>
</div>

View File

@@ -3,23 +3,24 @@ import OriginTag from "../../../../components/OriginTag/index.vue";
import useTableQuery from "../../../../hooks/useTableQuery.js";
import Api from "../../../../api/index.js";
import {reactive} from "vue";
import {Message} from "@arco-design/web-vue";
const columns = [
{
title: 'ID',
dataIndex: 'key',
dataIndex: 'id',
},
{
title: '达人',
dataIndex: 'key',
dataIndex: 'uid',
},
{
title: '处罚理由',
dataIndex: 'key',
dataIndex: 'intro',
},
{
title: '处罚结果',
dataIndex: 'key',
dataIndex: 'remark',
},
{
title: '进度',
@@ -28,15 +29,15 @@ const columns = [
},
{
title: '提交日期',
dataIndex: 'key',
dataIndex: 'createtime',
},
{
title: '关联任务ID',
dataIndex: 'key',
dataIndex: 'task_id',
},
{
title: '关联子任务ID',
dataIndex: 'key',
dataIndex: 'task_children_id',
},
{
title: '操作',
@@ -55,14 +56,20 @@ const po = reactive({
wd: null,
});
const {loading, pagination, initFetchData} = useTableQuery({
const {loading, pagination, initFetchData, fetchData} = useTableQuery({
parameter: po,
api: Api.system.getData,
api: Api.merchant.getTaskEffect,
callback: (data) => {
Object.assign(vo, data);
console.log(vo);
}
});
const cancelTaskEffect = async (id) => {
const {msg} = await Api.merchant.cancelTaskEffect({id});
Message.success(msg);
await fetchData();
}
</script>
<template>
@@ -84,15 +91,18 @@ const {loading, pagination, initFetchData} = useTableQuery({
:pagination="pagination"
:loading="loading"
:columns="columns">
<template v-slot:status>
<OriginTag color="rgb(var(--success-6))">已生效</OriginTag>
<OriginTag color="rgb(var(--orange-6))">审核中</OriginTag>
<OriginTag color="rgb(var(--arcoblue-6))">达人申诉成功</OriginTag>
<OriginTag color="rgb(var(--red-6))">已拒绝</OriginTag>
<template v-slot:status="{record}">
<OriginTag v-if="record.status === 0" color="rgb(var(--orange-6))">审核中</OriginTag>
<OriginTag v-if="record.status === 1" color="rgb(var(--success-6))">已生效</OriginTag>
<OriginTag v-if="record.status === 3" color="rgb(var(--arcoblue-6))">达人申诉成功</OriginTag>
<OriginTag v-if="record.status === 2" color="rgb(var(--red-6))">已拒绝</OriginTag>
</template>
<template v-slot:action>
<template v-slot:action="{record}">
<a-popconfirm content="确定撤销吗?" @ok="cancelTaskEffect(record.id)" v-if="record.status !== 2">
<a-link :hoverable="false" :disabled="false">撤销</a-link>
</a-popconfirm>
<a-link :hoverable="false" :disabled="false">/</a-link>
</template>
</a-table>
</div>

View File

@@ -13,6 +13,7 @@ const {businessInfo} = defineProps({
default: {}
}
});
const emits = defineEmits(['success']);
const money = ref(null);
const radioValue = ref(null);
const withdrawalList = reactive([]);
@@ -92,7 +93,8 @@ onMounted(() => {
<a-form-item class="mt-[40px]">
<!-- <a-button type="primary" @click="openWithdrawalStatus">立即提现</a-button>-->
<LookWithdrawalInformationModal :id="withdrawalList[radioValue]?.id" :money="money">
<LookWithdrawalInformationModal :id="withdrawalList[radioValue]?.id" :money="money"
@success="emits('success')">
<a-button type="primary" :disabled="!withdrawalList[radioValue]?.id || !money">立即提现</a-button>
</LookWithdrawalInformationModal>
</a-form-item>

View File

@@ -112,7 +112,7 @@ onMounted(() => {
<Recharge></Recharge>
</a-tab-pane>
<a-tab-pane key="Reflect" title="我的提现">
<Reflect :businessInfo="businessInfo"></Reflect>
<Reflect :businessInfo="businessInfo" @success="getData"></Reflect>
</a-tab-pane>
</a-tabs>
</a-card>

View File

@@ -6,6 +6,7 @@ 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";
import Talk from "../../../../../components/Talk/index.vue";
const emits = defineEmits(['success']);
const {task} = defineProps({
@@ -93,10 +94,7 @@ const update = async () => {
</a-textarea>
</a-form-item>
<a-form-item label="话题">
<div id="tag-list"
class="w-full bg-[var(--color-neutral-2)] p-[4px]">
<a-input v-model:model-value="task.tags"></a-input>
</div>
<Talk v-model:model-value="item.tags"></Talk>
</a-form-item>
<a-form-item label="素材">

View File

@@ -62,6 +62,7 @@ const success = async () => {
<a-form-item label="投放渠道" field="platform_id">
<XSelect
:init="true"
@change="form.material_id=null"
v-model:model-value="form.platform_id"
:api="Api.merchant.getPlatformList">
</XSelect>
@@ -81,11 +82,12 @@ const success = async () => {
<a-input v-model:model-value="form.goods_intro" placeholder="请输入产品功效,如:驱蚊"></a-input>
</a-form-item>
<a-form-item label="包含子任务数量" field="children_num">
<a-input v-model:model-value="form.children_num"
placeholder="请输入代发的账号数量最多一个任务可包含50个子任务"></a-input>
<a-input-number :precision="0" :min="0" :max="50" v-model:model-value="form.children_num"
placeholder="请输入代发的账号数量最多一个任务可包含50个子任务"></a-input-number>
</a-form-item>
<a-form-item label="单个子任务价格" field="children_price">
<a-input v-model:model-value="form.children_price" placeholder="请输入单个子任务价格"></a-input>
<a-input-number :precision="2" :min="0" v-model:model-value="form.children_price"
placeholder="请输入单个子任务价格"></a-input-number>
</a-form-item>
<a-form-item label="案例链接" field="case_url">

View File

@@ -2,9 +2,9 @@
import Api from "../../../../../api/index.js";
import XSelect from "../../../../../components/XSelect/index.vue";
import FormTitle from "../../../../../components/FormTitle/index.vue";
import UploadOne from "../../../../../components/upload/UploadOne.vue";
import {useTemplateRef} from "vue";
import {Message} from "@arco-design/web-vue";
import UploadAvatar from "../../../../../components/upload/UploadAvatar.vue";
const emits = defineEmits(['success', 'prev']);
const form = defineModel('form');
@@ -78,8 +78,11 @@ const success = async () => {
</a-form-item>
<a-form-item label="" field="special_images">
{{ form.special_images }}
<upload-one :file="form.special_images" size="100px" :api="Api.system.uploadFile2"></upload-one>
<UploadAvatar
size="100px"
v-model:files="form.special_images"
:api="Api.system.uploadFile2">
</UploadAvatar>
</a-form-item>
<a-form-item label="选择限制 IP" field="choose_area">

View File

@@ -68,7 +68,9 @@ const success = async () => {
</a-radio-group>
</a-form-item>
<a-form-item label="评论是否需要置顶"
<a-form-item
v-if="form.is_comment===1"
label="评论是否需要置顶"
extra="若您的评论内容有营销属性,不建议置顶。各个平台置顶评论都由人工审核,有概率置顶不成功且影响流量">
<a-radio-group v-model:model-value="form.is_top">
<a-radio :value="0"></a-radio>

View File

@@ -79,7 +79,6 @@ const success = async () => {
<a-form-item field="back_id" label="结算条件" class="whitespace-nowrap">
达人回传
<XSelect
disabled
class="mx-[6px]"
:init="true"
:api-po="{id: form.platform_id}"

View File

@@ -119,7 +119,23 @@ onMounted(() => {
<a-form-item label="结算后" extra="*如有其他要求,可联系管理员添加">
<div class="max-w-[618px]">
<a-checkbox-group>
<a-checkbox v-for="v in settltment_after_list" :value="v.id">{{ v.name }}</a-checkbox>
<a-checkbox v-for="v in settltment_after_list" :value="v.id">
{{ v.name }}
<a-popover position="rt">
<icon-question-circle/>
<template v-slot:content>
<div class="text-[14px] text-[#1D2129]">什么是达人信用分</div>
<div class="w-[312px] text-[#86909C] text-[12px]">
信用分是规范达人行为确保其维护商家利益的强制手段
信用分过低将影响达人参加任务提现邀请好友等多项核心功能的使用
</div>
<div class="text-[#165DFF] text-[12px] cursor-pointer">
查看达人信用分管理详情
<icon-double-right/>
</div>
</template>
</a-popover>
</a-checkbox>
</a-checkbox-group>
</div>
</a-form-item>

View File

@@ -1,6 +1,6 @@
<script setup>
import Comment from "../../../../components/Comment/index.vue";
import {reactive, ref} from "vue";
import {computed, reactive, ref} from "vue";
import useTableQuery from "../../../../hooks/useTableQuery.js";
import Api from "../../../../api/index.js";
import {useRoute} from "vue-router";
@@ -9,12 +9,27 @@ import AddMaterial from "../../components/AddMaterial.vue";
import AddComment from "../../components/AddComment.vue";
import XImageSmallList from "../../../../components/XImage/XImageSmallList.vue";
import ViewMaterial from "../../components/ViewMaterial.vue";
import XMention from "../../../../components/XMention/index.vue";
import Talk from "../../../../components/Talk/index.vue";
import {Message} from "@arco-design/web-vue";
const route = useRoute();
const AddMaterialRef = ref();
const columns = reactive([
const po = reactive({
id: route.query.id,
});
const vo = reactive({
limit: {
title_limit: 0,
desc_limit: 0,
tags_limit: 0,
},
page: '',
rows: [],
total: 0,
pageSize: 9,
});
const columns = computed(() => {
return [
{
title: '子任务编号',
dataIndex: 'uid',
@@ -23,16 +38,19 @@ const columns = reactive([
title: '标题',
dataIndex: 'title',
slotName: 'title',
hidden: vo.limit.title_limit === 0,
},
{
title: '正文',
dataIndex: 'content',
slotName: 'content',
hidden: vo.limit.desc_limit === 0,
},
{
title: '话题',
dataIndex: 'tags',
slotName: 'tags',
hidden: vo.limit.tags_limit === 0,
},
{
title: '素材',
@@ -44,15 +62,7 @@ const columns = reactive([
dataIndex: 'pl',
slotName: 'pl',
},
]);
const po = reactive({
id: route.query.id,
});
const vo = reactive({
page: '',
rows: [],
total: 0,
pageSize: 9,
].filter(v => !v.hidden)
});
const {loading, pagination, fetchData} = useTableQuery({
@@ -60,6 +70,7 @@ const {loading, pagination, fetchData} = useTableQuery({
api: Api.merchant.getTaskChildrenList,
callback: (data) => {
Object.assign(vo, data);
console.log('lime', vo)
}
});
@@ -118,11 +129,9 @@ const success = async () => {
</template>
<template v-slot:tags="{record}">
<div class="flex flex-col gap-[12px]">
<x-mention
placeholder="请输入话题"
@success="(e) => v.tags = e"
v-for="v in record.childrenMaterial">
</x-mention>
<div class="flex gap-[12px]" v-for="v in record.childrenMaterial">
<Talk v-model:model-value="v.tags"></Talk>
</div>
</div>
</template>
<template v-slot:material="{record, rowIndex}">

View File

@@ -29,7 +29,7 @@ const form = reactive({
is_identical: 1,
duration: null,
special_text: null,
special_images: null,
special_images: [],
choose_area: null,
machine: 0,

View File

@@ -8,7 +8,7 @@ export const BASEURL = import.meta.env.MODE === 'development' ? '/baseApi' : imp
// 创建 Axios 实例
const request = axios.create({
baseURL: BASEURL, // 替换为你的基础 URL
timeout: 10000, // 请求超时设置
timeout: 20000, // 请求超时设置
});
// 请求拦截器