update
This commit is contained in:
@@ -243,6 +243,20 @@ const system = {
|
||||
data: data
|
||||
});
|
||||
},
|
||||
myTaskList: async (data) => {
|
||||
return request({
|
||||
method: MethodsENUM.POST,
|
||||
url: "/task/myTaskList",
|
||||
data: data
|
||||
});
|
||||
},
|
||||
addTaskBackfill: async (data) => {
|
||||
return request({
|
||||
method: MethodsENUM.POST,
|
||||
url: "/task/addTaskBackfill",
|
||||
data: data
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
export default system;
|
||||
|
||||
@@ -3,36 +3,49 @@ import dy from "../static/images/抖音.png";
|
||||
import qrw from "../static/icons/qrw.png";
|
||||
import XCountdown from "./XCountdown.vue";
|
||||
import {toPage} from "../utils/uils.js";
|
||||
import FBENUM from "../enum/FBENUM.js";
|
||||
import PlatformENUM from "../enum/PlatformENUM.js";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
const {data} = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: {}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<view @click="toPage(`/pages/taskDetails/index?id=${1}`)" class="rounded-[8rpx] bg-[#fff] !p-[24rpx] overflow-hidden task-card">
|
||||
<view @click="toPage(`/pages/taskDetails/index?id=${data.id}`)"
|
||||
class="rounded-[8rpx] bg-[#fff] !p-[24rpx] overflow-hidden task-card">
|
||||
<view class="!pb-[20rpx] !flex justify-between" style="border-bottom: 1px solid #E5E6EB">
|
||||
<view style="font-size: 28rpx">
|
||||
任务编号:DF1212
|
||||
任务编号:{{ data.uid }}
|
||||
</view>
|
||||
<view v-if="false" style="font-size: 24rpx">
|
||||
<Text class="text-[#165DFF]">08-13-09:54</Text>后可开始回填
|
||||
<view v-if="data.back_status === 1" style="font-size: 24rpx">
|
||||
<Text class="text-[#165DFF]">{{ dayjs(data.time).format('MM-DD-HH:mm') }}</Text>
|
||||
后可开始回填
|
||||
</view>
|
||||
<x-countdown v-else>
|
||||
<x-countdown v-else :time="dayjs(data.time)">
|
||||
<view style="font-size: 24rpx;font-weight: 400;" class="text-[rgb(78,89,105)]">审核倒计时:</view>
|
||||
</x-countdown>
|
||||
</view>
|
||||
|
||||
<view class="!flex gap-[26rpx] !pt-[20rpx]">
|
||||
<image class="!size-[88rpx] rounded-[50%] overflow-hidden" mode="aspectFill" :src="dy"></image>
|
||||
<image class="!size-[88rpx] rounded-[50%] overflow-hidden" mode="aspectFill"
|
||||
:src="PlatformENUM[data.platform_id]"></image>
|
||||
<view class="!h-[88rpx] !flex flex-col justify-between">
|
||||
<view class="title">美白祛斑洗面奶</view>
|
||||
<view class="title">{{ data.goods_name }}</view>
|
||||
<view class="!flex gap-[8rpx]">
|
||||
<view class="tag">抖音</view>
|
||||
<view class="tag">三连发</view>
|
||||
<view class="tag">{{ data.platform }}</view>
|
||||
<view class="tag">{{ FBENUM[data.fb_num - 1] }}连发</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="!h-[88rpx] !ml-auto !flex items-center gap-[6rpx]">
|
||||
<view class="price-info">待确认</view>
|
||||
<view class="price-info">{{ data.status_text }}</view>
|
||||
<view class="price">
|
||||
<text class="unit">¥</text>
|
||||
8.56
|
||||
{{ data.coin.toFixed(2) }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -40,11 +53,11 @@ import {toPage} from "../utils/uils.js";
|
||||
<view class="!mt-[34rpx] !px-[20rpx] !py-[10rpx] bg-[#F2F3F5] info relative">
|
||||
<view class="!flex gap-[8rpx] justify-between">
|
||||
<view>领取账号:</view>
|
||||
<view>酷酷猛吃</view>
|
||||
<view>{{ data.account }}</view>
|
||||
</view>
|
||||
<view class="!flex gap-[8rpx] justify-between">
|
||||
<view>领取时间:</view>
|
||||
<view>2024-08-06 14:10</view>
|
||||
<view>{{ data.accept_time }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -16,7 +16,7 @@ const upload = async () => {
|
||||
uploadFile({
|
||||
count: 1,
|
||||
}).then(({data}) => {
|
||||
files.value.push(data);
|
||||
files.value?.push(data);
|
||||
emits('success', data);
|
||||
})
|
||||
}
|
||||
|
||||
3
src/enum/FBENUM.js
Normal file
3
src/enum/FBENUM.js
Normal file
@@ -0,0 +1,3 @@
|
||||
const FBENUM = ['一', '二', '三', '四', '五'];
|
||||
|
||||
export default FBENUM;
|
||||
@@ -125,7 +125,7 @@
|
||||
{
|
||||
"path": "pages/changeLog/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "变动记录",
|
||||
"navigationBarTitleText": "团队详情",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
|
||||
@@ -12,6 +12,8 @@ import XRadio from "../../components/XRadio.vue";
|
||||
import XDateRange from "../../components/XDateRange.vue";
|
||||
import XAlert from "../../components/XAlert.vue";
|
||||
|
||||
const taskType = reactive([]);
|
||||
const platformType = reactive([]);
|
||||
const tabs = [
|
||||
{
|
||||
name: '发布问题',
|
||||
@@ -37,8 +39,7 @@ const sumPo = reactive({
|
||||
startTime: null,
|
||||
endTime: null,
|
||||
});
|
||||
const po = reactive({
|
||||
});
|
||||
const po = reactive({});
|
||||
const vo = reactive({
|
||||
page: '',
|
||||
rows: [],
|
||||
@@ -46,7 +47,7 @@ const vo = reactive({
|
||||
});
|
||||
|
||||
const {loading, pagination, initFetchData} = useTableQuery({
|
||||
api: Api.system.getData,
|
||||
api: Api.system.myTaskList,
|
||||
parameter: po,
|
||||
callback: (data) => {
|
||||
vo.page = data.page;
|
||||
@@ -54,6 +55,15 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
vo.rows = [...vo.rows, ...data.rows];
|
||||
}
|
||||
});
|
||||
|
||||
Api.system.getTaskType().then(({data}) => {
|
||||
taskType.length = 0;
|
||||
taskType.push(...data);
|
||||
});
|
||||
Api.system.getPlatform().then(({data}) => {
|
||||
platformType.length = 0;
|
||||
platformType.push(...data);
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -66,23 +76,14 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
<x-filter-item label="任务类型">
|
||||
<x-radio-group v-model:model-value="sumPo.type">
|
||||
<view class="!grid grid-cols-4 gap-[24rpx]">
|
||||
<x-radio :value="0">全部任务</x-radio>
|
||||
<x-radio :value="1">宣发</x-radio>
|
||||
<x-radio :value="2">评论</x-radio>
|
||||
<x-radio :value="3">续期</x-radio>
|
||||
<x-radio v-for="v in taskType" :key="v.id" :value="v.id">{{ v.name }}</x-radio>
|
||||
</view>
|
||||
</x-radio-group>
|
||||
</x-filter-item>
|
||||
<x-filter-item label="发布平台">
|
||||
<x-radio-group v-model:model-value="sumPo.type">
|
||||
<view class="!grid grid-cols-4 gap-[24rpx]">
|
||||
<x-radio :value="0">全部平台</x-radio>
|
||||
<x-radio :value="1">抖音</x-radio>
|
||||
<x-radio :value="2">快手</x-radio>
|
||||
<x-radio :value="3">视频号</x-radio>
|
||||
<x-radio :value="4">小红书</x-radio>
|
||||
<x-radio :value="5">今日头条</x-radio>
|
||||
<x-radio :value="6">咸鱼</x-radio>
|
||||
<x-radio v-for="v in platformType" :key="v.id" :value="v.id">{{ v.name }}</x-radio>
|
||||
</view>
|
||||
</x-radio-group>
|
||||
</x-filter-item>
|
||||
@@ -154,11 +155,18 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
<view class="block-title !flex gap-[6rpx] items-center">
|
||||
到账收益(元)
|
||||
<x-alert btnText="知道了" btnColor="#165DFF">
|
||||
<tui-icon name="explain" :size="16" ></tui-icon>
|
||||
<tui-icon name="explain" :size="16"></tui-icon>
|
||||
<template #context>
|
||||
<view style="font-size: 32rpx;font-weight: 500" class="!mb-[30rpx]">到账收益</view>
|
||||
<view style="font-size: 28rpx;font-weight: 400" class="text-[rgb(78,89,105)]">根据您的任务完成情况</view>
|
||||
<view style="font-size: 28rpx;font-weight: 400" class="text-[rgb(78,89,105)] !mt-[10rpx]">实际获得的收益</view>
|
||||
<view style="font-size: 32rpx;font-weight: 500" class="!mb-[30rpx]">
|
||||
到账收益
|
||||
</view>
|
||||
<view style="font-size: 28rpx;font-weight: 400" class="text-[rgb(78,89,105)]">
|
||||
根据您的任务完成情况
|
||||
</view>
|
||||
<view style="font-size: 28rpx;font-weight: 400"
|
||||
class="text-[rgb(78,89,105)] !mt-[10rpx]">
|
||||
实际获得的收益
|
||||
</view>
|
||||
</template>
|
||||
</x-alert>
|
||||
</view>
|
||||
@@ -178,7 +186,7 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
||||
</view>
|
||||
|
||||
<view class="!flex flex-col gap-[20rpx] !px-[20rpx]">
|
||||
<TaskCard v-for="i in vo.rows"></TaskCard>
|
||||
<TaskCard v-for="i in vo.rows" :key="i.id" :data="i"></TaskCard>
|
||||
|
||||
<tui-loadmore v-if="loading" text="加载中..."></tui-loadmore>
|
||||
</view>
|
||||
|
||||
@@ -3,31 +3,24 @@ import {ref, reactive} from "vue";
|
||||
import XSquareCarouselImage from "../../../components/XSquareCarouselImage.vue";
|
||||
import {toPage} from "../../../utils/uils.js";
|
||||
|
||||
const {data} = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: null,
|
||||
}
|
||||
});
|
||||
|
||||
const current = ref(0);
|
||||
const list = reactive([
|
||||
{
|
||||
id: 0,
|
||||
name: '素材1',
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
name: '素材2',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: '素材3',
|
||||
},
|
||||
]);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!--领取素材-->
|
||||
<view class="!flex gap-[24rpx] !mb-[28rpx]">
|
||||
<view
|
||||
v-for="(item,index) in list"
|
||||
v-for="(item,index) in data.children.material"
|
||||
@click="current=index"
|
||||
:class="['tab-item', index===current?'cur':'']">
|
||||
素材1
|
||||
素材{{ index + 1 }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -37,7 +30,7 @@ const list = reactive([
|
||||
标题:
|
||||
</view>
|
||||
<view class="block-info">
|
||||
标题内容标题内容标题内容标题内容标题内容标题内容标题内容标题内容
|
||||
{{ data.children.material[current].title }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="block">
|
||||
@@ -53,7 +46,7 @@ const list = reactive([
|
||||
正文:
|
||||
</view>
|
||||
<view class="block-info">
|
||||
简介内容简介内容简介内容简介内容简介内容简介内容简介内容简介内容简介内容简介内...
|
||||
{{ data.children.material[current].content }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="block">
|
||||
@@ -61,7 +54,7 @@ const list = reactive([
|
||||
素材:
|
||||
</view>
|
||||
<view class="block-info">
|
||||
<x-square-carousel-image></x-square-carousel-image>
|
||||
<x-square-carousel-image :list="data.children.material[current].material_arr"></x-square-carousel-image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="block">
|
||||
@@ -72,10 +65,14 @@ const list = reactive([
|
||||
<view>
|
||||
<view>评论1:我用的也是这款,早tb可以购买噢~我用的也是这款,早tb可以购买噢~</view>
|
||||
<view class="!flex gap-[20rpx] flex-wrap">
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill" src="/static/images/test.png"></image>
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill" src="/static/images/test.png"></image>
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill" src="/static/images/test.png"></image>
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill" src="/static/images/test.png"></image>
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill"
|
||||
src="/static/images/test.png"></image>
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill"
|
||||
src="/static/images/test.png"></image>
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill"
|
||||
src="/static/images/test.png"></image>
|
||||
<image class="!w-[96rpx] !h-[96rpx] !aspect-square" mode="aspectFill"
|
||||
src="/static/images/test.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -90,7 +87,7 @@ const list = reactive([
|
||||
|
||||
<style scoped lang="scss">
|
||||
.tab-item {
|
||||
padding: 12rpx 32rpx;
|
||||
padding: 12rpx 26rpx;
|
||||
border-radius: 9999rpx;
|
||||
background-color: #F7F8FA;
|
||||
font-size: 24rpx;
|
||||
|
||||
@@ -1,12 +1,136 @@
|
||||
<script setup>
|
||||
import {reactive, ref, watch} from "vue";
|
||||
import XLink from "../../../components/XLink.vue";
|
||||
import XUpload from "../../../components/XUpload.vue";
|
||||
import XInput from "../../../components/XInput.vue";
|
||||
import Api from "../../../api/index.js";
|
||||
import {showToast} from "../../../utils/uils.js";
|
||||
import dayjs from "dayjs";
|
||||
import XCountdown from "../../../components/XCountdown.vue";
|
||||
|
||||
const {data} = defineProps({
|
||||
data: {
|
||||
type: Object,
|
||||
default: null,
|
||||
}
|
||||
});
|
||||
|
||||
const content = reactive([]);
|
||||
|
||||
const current = ref(0);
|
||||
|
||||
const success = async () => {
|
||||
const {msg} = await Api.system.addTaskBackfill({
|
||||
id: data.children.id,
|
||||
cid: current.value + 1,
|
||||
content: content,
|
||||
type: data.task_content[current.value].is_image,
|
||||
});
|
||||
showToast(msg);
|
||||
}
|
||||
|
||||
watch(
|
||||
() => [data, current],
|
||||
() => {
|
||||
content.push(...data.children.back[current.value].content_arr);
|
||||
},
|
||||
{deep: true, immediate: true}
|
||||
)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!--我的回填-->
|
||||
<view class="!flex gap-[24rpx] !mb-[28rpx]">
|
||||
<view
|
||||
v-for="(item,index) in data.task_content"
|
||||
@click="current=index"
|
||||
:class="['tab-item', index===current?'cur':'']">
|
||||
回填{{ index + 1 }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="block">
|
||||
<view class="block-title">
|
||||
回填指引:
|
||||
</view>
|
||||
<view class="block-info">
|
||||
<x-link>查看指引</x-link>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="block">
|
||||
<view class="block-title">
|
||||
回填时间:
|
||||
</view>
|
||||
<view class="block-info">
|
||||
{{ data.task_content[current].start_time }} 至 {{ data.task_content[current].end_time }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="block">
|
||||
<view class="block-title">
|
||||
倒计时:
|
||||
</view>
|
||||
<view class="block-info">
|
||||
<x-countdown :time="dayjs(data.task_content[current].end_time)">
|
||||
</x-countdown>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="block" v-for="(v, index) in data.fb_num">
|
||||
<view class="block-title">
|
||||
视频1的评论区截图:
|
||||
</view>
|
||||
<view class="block-info">
|
||||
<x-upload
|
||||
@success="(e) => content[index] = e"
|
||||
:files="content[index] ? [content[index]] : []"
|
||||
v-if="data.task_content[current].is_image === 1">
|
||||
</x-upload>
|
||||
<x-input v-else v-model:model-value="content[index]" height="64rpx" placeholder="请输入内容"></x-input>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<tui-button @click="success">提交</tui-button>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.tab-item {
|
||||
padding: 12rpx 26rpx;
|
||||
border-radius: 9999rpx;
|
||||
background-color: #F7F8FA;
|
||||
font-size: 24rpx;
|
||||
color: #4E5969;
|
||||
transition: 500ms;
|
||||
}
|
||||
|
||||
.cur {
|
||||
background-color: #E8F3FF;
|
||||
color: #165DFF;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: flex;
|
||||
gap: 20rpx;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
.block-title {
|
||||
flex-shrink: 0;
|
||||
color: rgb(134, 144, 156);
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
line-height: 140%;
|
||||
letter-spacing: 0;
|
||||
text-align: left;
|
||||
width: 160rpx;
|
||||
}
|
||||
|
||||
.block-info {
|
||||
color: rgb(78, 89, 105);
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
line-height: 140%;
|
||||
letter-spacing: 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -17,10 +17,10 @@ const {data} = defineProps({
|
||||
<view class="title">
|
||||
案例概览
|
||||
</view>
|
||||
<view class="block items-center">
|
||||
<view class="block items-center" v-if="data.case_url">
|
||||
<view class="block-title">任务案例:</view>
|
||||
<view class="block-info w-full overflow-hidden">
|
||||
<view class="text-[#165DFF] !flex items-center gap-[10rpx]" v-if="data.case_url">
|
||||
<view class="text-[#165DFF] !flex items-center gap-[10rpx]">
|
||||
<image class="!size-[24rpx] flex-shrink-0" :src="linkIcon"></image>
|
||||
<text class="ellipsis-1 flex-grow">
|
||||
{{ data.case_url }}
|
||||
@@ -47,7 +47,23 @@ const {data} = defineProps({
|
||||
</view>
|
||||
<view class="block">
|
||||
<view class="block-title">评论区案例:</view>
|
||||
<view>
|
||||
<view class="test-24r text-[#4E5969]">
|
||||
<view v-if="data.comment_arr">
|
||||
评论1:
|
||||
<text v-if="data.comment_arr.pid!==0" class="text-[#86909C]">
|
||||
<image class="!size-[20rpx]" src="/static/icons/msgback.png"></image>
|
||||
回复1:
|
||||
</text>
|
||||
{{ data.comment_arr.intro }}
|
||||
</view>
|
||||
<view v-for="(v, index) in data.comment_arr.children">
|
||||
评论1:
|
||||
<text v-if="data.comment_arr.pid!==0" class="text-[#86909C]">
|
||||
<image class="!size-[20rpx]" src="/static/icons/msgback.png"></image>
|
||||
回复1:
|
||||
</text>
|
||||
{{ data.comment_arr.intro }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -86,7 +86,7 @@ onMounted(() => {
|
||||
{{ dayjs(details.end_time).format('YYYY-MM-DD HH:mm') }} 前可领取
|
||||
</view>
|
||||
<view v-else class="goods-bh">
|
||||
任务编号:DF1515
|
||||
任务编号:{{ details.is_use === 0 ? details.code : details.children.uid }}
|
||||
<x-link>复制</x-link>
|
||||
</view>
|
||||
</view>
|
||||
@@ -98,9 +98,9 @@ onMounted(() => {
|
||||
style="font-size: 24rpx">
|
||||
<view>发布账号</view>
|
||||
<view class="bg-[#E5E6EB] w-[5rpx] h-auto"></view>
|
||||
<view>昵称: 我是大冤种</view>
|
||||
<view>昵称: {{ details.children.account.nickname }}</view>
|
||||
<view class="bg-[#E5E6EB] w-[5rpx] h-auto"></view>
|
||||
<view>账号: 56378899</view>
|
||||
<view>账号: {{ details.children.account.account }}</view>
|
||||
</view>
|
||||
|
||||
<view class="!grid grid-cols-4 gap-[20rpx]">
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import {onMounted, reactive} from "vue";
|
||||
import {useUserStore} from "../../../pinia/UserStore/index.js";
|
||||
import Api from "../../../api/index.js";
|
||||
import {toPage} from "../../../utils/uils.js";
|
||||
|
||||
const UserStore = useUserStore();
|
||||
const detail = reactive({});
|
||||
@@ -21,7 +22,7 @@ onMounted(() => {
|
||||
<view class="invitationCodeValue">
|
||||
{{ UserStore?.userInfo?.invite }}
|
||||
</view>
|
||||
<view class="view-detail !ml-auto">查看团队详情></view>
|
||||
<view class="view-detail !ml-auto" @click="toPage('/pages/changeLog/index')">查看团队详情></view>
|
||||
</view>
|
||||
|
||||
<view class="!mt-[24rpx] !grid grid-cols-3 gap-[22rpx]">
|
||||
|
||||
BIN
src/static/icons/msgback.png
Normal file
BIN
src/static/icons/msgback.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 490 B |
Reference in New Issue
Block a user