update
This commit is contained in:
@@ -1,31 +1,51 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {watch, ref} from "vue";
|
import { watch, ref } from "vue";
|
||||||
import XModal from "./XModal.vue";
|
import XModal from "./XModal.vue";
|
||||||
import Api from "../api/index.js";
|
import Api from "../api/index.js";
|
||||||
|
import { useUserStore } from "../pinia/UserStore/index.js";
|
||||||
|
|
||||||
|
const UserStore = useUserStore();
|
||||||
const show = defineModel('show');
|
const show = defineModel('show');
|
||||||
const qrCode = ref(null);
|
const qrCode = ref(null);
|
||||||
|
let old_openid = "";
|
||||||
|
let timer = null;
|
||||||
|
|
||||||
|
const cancel = () => {
|
||||||
|
show.value = false;
|
||||||
|
if (timer) clearInterval(timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
const check = async () => {
|
||||||
|
await UserStore.getUserInfo();
|
||||||
|
if (old_openid !== UserStore.userInfo.openid) {
|
||||||
|
cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => show.value,
|
() => show.value,
|
||||||
(val) => {
|
(val) => {
|
||||||
if (val) Api.system.createQrcode().then(({data}) => {
|
if (val) {
|
||||||
qrCode.value = data.url;
|
Api.system.createQrcode().then(async ({ data }) => {
|
||||||
})
|
await UserStore.getUserInfo();
|
||||||
|
old_openid = UserStore.userInfo.openid;
|
||||||
|
qrCode.value = data.url;
|
||||||
|
timer = setInterval(check, 500);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view @click="show=true">
|
<view @click="show = true">
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<x-modal
|
<x-modal v-model:show="show" @cancel="cancel">
|
||||||
v-model:show="show">
|
|
||||||
<view class="px-[30rpx] py-[40rpx] relative">
|
<view class="px-[30rpx] py-[40rpx] relative">
|
||||||
<image @click="show=false" class="!w-[52rpx] !h-[52rpx] absolute top-[-110rpx] right-[calc(-100%-10rpx)]"
|
<image @click="show = false" class="!w-[52rpx] !h-[52rpx] absolute top-[-110rpx] right-[calc(-100%-10rpx)]"
|
||||||
src="/static/icons/close.png"></image>
|
src="/static/icons/close.png"></image>
|
||||||
|
|
||||||
<view class="title">绑定</view>
|
<view class="title">绑定</view>
|
||||||
<view class="!mt-[24rpx] w-[320rpx] !mx-auto aspect-square">
|
<view class="!mt-[24rpx] w-[320rpx] !mx-auto aspect-square">
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {ref} from 'vue';
|
import { ref } from 'vue';
|
||||||
import SY_ICON from '../static/icons/syyl.png';
|
import SY_ICON from '../static/icons/syyl.png';
|
||||||
|
|
||||||
const {src, list, imageClass, sy} = defineProps({
|
const { src, list, imageClass, sy } = defineProps({
|
||||||
src: {
|
src: {
|
||||||
type: String,
|
type: String,
|
||||||
default: "",
|
default: "",
|
||||||
@@ -56,18 +56,15 @@ defineExpose({
|
|||||||
<slot></slot>
|
<slot></slot>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view
|
<view v-if="show" @click="show = false" class="x-image-preview">
|
||||||
v-if="show"
|
|
||||||
@click="show=false"
|
|
||||||
class="x-image-preview">
|
|
||||||
<view class="x-image-docker">
|
<view class="x-image-docker">
|
||||||
<template v-if="list.length>1">
|
<template v-if="list.length > 1">
|
||||||
<swiper class="!size-full" :current="cur" @change="({detail:{current}})=>cur=current">
|
<swiper class="!size-full" :current="cur" @change="({ detail: { current } }) => cur = current">
|
||||||
<swiper-item v-for="src in list">
|
<swiper-item v-for="src in list">
|
||||||
<template v-if="!src.endsWith('.mp4')">
|
<template v-if="!src.endsWith('.mp4')">
|
||||||
<image @click.stop class="!size-full" :src="src" mode="aspectFit"></image>
|
<image @click.stop class="!size-full" :src="src" mode="aspectFit"></image>
|
||||||
<image @click.stop v-if="sy" class="!size-full !absolute left-0 top-0" :src="SY_ICON"
|
<image @click.stop v-if="sy" class="!size-full !absolute left-0 top-0" :src="SY_ICON"
|
||||||
mode="aspectFit"></image>
|
mode="aspectFit"></image>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<view class="!size-full !flex items-center" @click.stop>
|
<view class="!size-full !flex items-center" @click.stop>
|
||||||
@@ -85,8 +82,7 @@ defineExpose({
|
|||||||
<template v-else>
|
<template v-else>
|
||||||
<template v-if="!src.endsWith('.mp4')">
|
<template v-if="!src.endsWith('.mp4')">
|
||||||
<image class="!size-full" :src="src" mode="aspectFit"></image>
|
<image class="!size-full" :src="src" mode="aspectFit"></image>
|
||||||
<image v-if="sy" class="!size-full !absolute left-0 top-0" :src="SY_ICON"
|
<image v-if="sy" class="!size-full !absolute left-0 top-0" :src="SY_ICON" mode="aspectFit"></image>
|
||||||
mode="aspectFit"></image>
|
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<view class="!size-full !flex items-center" @click.stop>
|
<view class="!size-full !flex items-center" @click.stop>
|
||||||
@@ -96,15 +92,11 @@ defineExpose({
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<image
|
<image v-if="list.length > 1" @click="show = false"
|
||||||
v-if="list.length>1"
|
|
||||||
@click="show=false"
|
|
||||||
class="!w-[52rpx] !h-[52rpx] !absolute left-1/2 -translate-x-1/2 bottom-[-130rpx]"
|
class="!w-[52rpx] !h-[52rpx] !absolute left-1/2 -translate-x-1/2 bottom-[-130rpx]"
|
||||||
src="/static/icons/close.png">
|
src="/static/icons/close.png">
|
||||||
</image>
|
</image>
|
||||||
<image
|
<image v-else @click="show = false"
|
||||||
v-else
|
|
||||||
@click="show=false"
|
|
||||||
class="!w-[52rpx] !h-[52rpx] !absolute left-1/2 -translate-x-1/2 bottom-[-60rpx]"
|
class="!w-[52rpx] !h-[52rpx] !absolute left-1/2 -translate-x-1/2 bottom-[-60rpx]"
|
||||||
src="/static/icons/close.png">
|
src="/static/icons/close.png">
|
||||||
</image>
|
</image>
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
const show = defineModel('show');
|
const show = defineModel('show');
|
||||||
|
const emits = defineEmits('cancel');
|
||||||
|
|
||||||
|
const cancel = () => {
|
||||||
|
show.value = false;
|
||||||
|
emits('cancel');
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<tui-modal
|
<tui-modal
|
||||||
v-bind="$attrs"
|
v-bind="$attrs"
|
||||||
@cancel="show=false"
|
@cancel="cancel"
|
||||||
padding="0"
|
padding="0"
|
||||||
custom
|
custom
|
||||||
:show="show">
|
:show="show">
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {reactive, ref, watch} from 'vue';
|
import { reactive, ref, watch } from 'vue';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -9,13 +9,13 @@ import {reactive, ref, watch} from 'vue';
|
|||||||
* @param watchParameter
|
* @param watchParameter
|
||||||
*/
|
*/
|
||||||
function useTableQuery({
|
function useTableQuery({
|
||||||
parameter,
|
parameter,
|
||||||
api,
|
api,
|
||||||
callback,
|
callback,
|
||||||
uuid = false,
|
uuid = false,
|
||||||
immediate = true,
|
immediate = true,
|
||||||
watchParameter = false,
|
watchParameter = false,
|
||||||
}) {
|
}) {
|
||||||
const loading = ref(false);
|
const loading = ref(false);
|
||||||
const vo = reactive({
|
const vo = reactive({
|
||||||
rows: [],
|
rows: [],
|
||||||
@@ -39,14 +39,14 @@ function useTableQuery({
|
|||||||
pageSize: pagination.pageSize
|
pageSize: pagination.pageSize
|
||||||
}
|
}
|
||||||
|
|
||||||
const {data} = await api(params);
|
const { data } = await api(params);
|
||||||
|
|
||||||
pagination.pageSize = data.page;
|
pagination.pageSize = data.page;
|
||||||
pagination.total = data.total;
|
pagination.total = data.total;
|
||||||
|
|
||||||
const _vo = {
|
const _vo = {
|
||||||
...data,
|
...data,
|
||||||
rows: data.list.map(v => ({...v, key: v.id})),
|
rows: data.list.map(v => ({ ...v, key: v.id })),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (data.list.length === 0) {
|
if (data.list.length === 0) {
|
||||||
@@ -84,13 +84,13 @@ function useTableQuery({
|
|||||||
watch(
|
watch(
|
||||||
() => [pagination.page, pagination.pageSize],
|
() => [pagination.page, pagination.pageSize],
|
||||||
() => fetchData(),
|
() => fetchData(),
|
||||||
{deep: true, immediate: immediate}
|
{ deep: true, immediate: immediate }
|
||||||
)
|
)
|
||||||
|
|
||||||
if (watchParameter) watch(
|
if (watchParameter) watch(
|
||||||
() => parameter,
|
() => parameter,
|
||||||
() => fetchData(),
|
() => fetchData(),
|
||||||
{deep: true}
|
{ deep: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ import XSelect from "../../components/XSelect.vue";
|
|||||||
import Api from "../../api/index.js";
|
import Api from "../../api/index.js";
|
||||||
import XInput from "../../components/XInput.vue";
|
import XInput from "../../components/XInput.vue";
|
||||||
import XUpload from "../../components/XUpload.vue";
|
import XUpload from "../../components/XUpload.vue";
|
||||||
import {reactive, watch} from "vue";
|
import { reactive, watch } from "vue";
|
||||||
import {backPage, showToast} from "../../utils/uils.js";
|
import { backPage, showToast } from "../../utils/uils.js";
|
||||||
import {onLoad} from "@dcloudio/uni-app";
|
import { onLoad } from "@dcloudio/uni-app";
|
||||||
import XDateTime from "../../components/XDateTime.vue";
|
import XDateTime from "../../components/XDateTime.vue";
|
||||||
import {useSystemStore} from "../../pinia/SystemStore/index.js";
|
import { useSystemStore } from "../../pinia/SystemStore/index.js";
|
||||||
import XImage from "../../components/XImage.vue";
|
import XImage from "../../components/XImage.vue";
|
||||||
import XLink from "../../components/XLink.vue";
|
import XLink from "../../components/XLink.vue";
|
||||||
|
|
||||||
@@ -28,14 +28,14 @@ const form = reactive({
|
|||||||
|
|
||||||
const success = async () => {
|
const success = async () => {
|
||||||
if (!form.id) {
|
if (!form.id) {
|
||||||
const {msg} = await Api.system.addAccount({
|
const { msg } = await Api.system.addAccount({
|
||||||
...form,
|
...form,
|
||||||
homepage: form.homepage[0],
|
homepage: form.homepage[0],
|
||||||
qrcode: form.qrcode[0]
|
qrcode: form.qrcode[0]
|
||||||
});
|
});
|
||||||
showToast(msg);
|
showToast(msg);
|
||||||
} else {
|
} else {
|
||||||
const {msg} = await Api.system.editAccount({
|
const { msg } = await Api.system.editAccount({
|
||||||
...form,
|
...form,
|
||||||
homepage: form.homepage[0],
|
homepage: form.homepage[0],
|
||||||
qrcode: form.qrcode[0]
|
qrcode: form.qrcode[0]
|
||||||
@@ -46,8 +46,8 @@ const success = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
const {id} = options;
|
const { id } = options;
|
||||||
if (id) Api.system.getAccountInfo(id).then(({data}) => {
|
if (id) Api.system.getAccountInfo(id).then(({ data }) => {
|
||||||
data.homepage = [data.homepage];
|
data.homepage = [data.homepage];
|
||||||
data.qrcode = [data.qrcode];
|
data.qrcode = [data.qrcode];
|
||||||
Object.assign(form, data);
|
Object.assign(form, data);
|
||||||
@@ -56,7 +56,7 @@ onLoad((options) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const getSelect = async () => {
|
const getSelect = async () => {
|
||||||
const {data} = await Api.system.getPlatform();
|
const { data } = await Api.system.getPlatform();
|
||||||
data.shift();
|
data.shift();
|
||||||
return {
|
return {
|
||||||
data: data,
|
data: data,
|
||||||
@@ -67,7 +67,7 @@ const ZYObj = reactive({
|
|||||||
images2: [],
|
images2: [],
|
||||||
});
|
});
|
||||||
const changeP = async () => {
|
const changeP = async () => {
|
||||||
const {data} = await Api.system.getPlatformImages({id: form.pid});
|
const { data } = await Api.system.getPlatformImages({ id: form.pid });
|
||||||
Object.assign(ZYObj, data);
|
Object.assign(ZYObj, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ watch(
|
|||||||
(val) => {
|
(val) => {
|
||||||
if (val) changeP();
|
if (val) changeP();
|
||||||
},
|
},
|
||||||
{deep: true, immediate: true}
|
{ deep: true, immediate: true }
|
||||||
)
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -103,24 +103,24 @@ watch(
|
|||||||
<view class="!flex justify-between">
|
<view class="!flex justify-between">
|
||||||
<view>主页截图</view>
|
<view>主页截图</view>
|
||||||
<x-image v-if="form.pid && ZYObj.images1.length > 0" :src="ZYObj.images1[0]"
|
<x-image v-if="form.pid && ZYObj.images1.length > 0" :src="ZYObj.images1[0]"
|
||||||
:list="ZYObj.images1">
|
:list="ZYObj.images1">
|
||||||
<x-link>查看指引</x-link>
|
<x-link>查看指引</x-link>
|
||||||
</x-image>
|
</x-image>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<x-upload v-model:files="form.homepage" single></x-upload>
|
<x-upload v-model:files="form.homepage" del single></x-upload>
|
||||||
</x-form-item>
|
</x-form-item>
|
||||||
<x-form-item label="主页二维码">
|
<x-form-item label="主页二维码">
|
||||||
<template v-slot:label>
|
<template v-slot:label>
|
||||||
<view class="!flex justify-between">
|
<view class="!flex justify-between">
|
||||||
<view>主页二维码</view>
|
<view>主页二维码</view>
|
||||||
<x-image v-if="form.pid && ZYObj.images2.length > 0" :src="ZYObj.images2[0]"
|
<x-image v-if="form.pid && ZYObj.images2.length > 0" :src="ZYObj.images2[0]"
|
||||||
:list="ZYObj.images2">
|
:list="ZYObj.images2">
|
||||||
<x-link>查看指引</x-link>
|
<x-link>查看指引</x-link>
|
||||||
</x-image>
|
</x-image>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<x-upload v-model:files="form.qrcode" single></x-upload>
|
<x-upload v-model:files="form.qrcode" del single></x-upload>
|
||||||
</x-form-item>
|
</x-form-item>
|
||||||
</x-form>
|
</x-form>
|
||||||
|
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ import XDropdownList from "../../components/XDropdownList.vue";
|
|||||||
import TaskItem from "../../components/TaskItem.vue";
|
import TaskItem from "../../components/TaskItem.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 {reactive, ref, onMounted} from "vue";
|
import { reactive, ref, onMounted } from "vue";
|
||||||
import {toPage} from "../../utils/uils.js";
|
import { toPage } from "../../utils/uils.js";
|
||||||
import AddCustomerServiceModal from "../../components/AddCustomerServiceModal.vue";
|
import AddCustomerServiceModal from "../../components/AddCustomerServiceModal.vue";
|
||||||
import OpenTypeFun from "../../components/OpenTypeFun.js";
|
import OpenTypeFun from "../../components/OpenTypeFun.js";
|
||||||
import XNoticeBar from "../../components/XNoticeBar.vue";
|
import XNoticeBar from "../../components/XNoticeBar.vue";
|
||||||
import {onShow} from "@dcloudio/uni-app";
|
import { onShow } from "@dcloudio/uni-app";
|
||||||
|
|
||||||
const showAddCustomer = ref(false);
|
const showAddCustomer = ref(false);
|
||||||
const textContent = reactive([]);
|
const textContent = reactive([]);
|
||||||
@@ -53,23 +53,14 @@ const nav = [
|
|||||||
const taskType = reactive([]);
|
const taskType = reactive([]);
|
||||||
const platformType = reactive([]);
|
const platformType = reactive([]);
|
||||||
const sortType = reactive([
|
const sortType = reactive([
|
||||||
{id: 0, name: '默认排序'},
|
{ id: 0, name: '默认排序' },
|
||||||
{id: 1, name: '价格最高'},
|
{ id: 1, name: '价格最高' },
|
||||||
{id: 2, name: '极速打款'},
|
{ id: 2, name: '极速打款' },
|
||||||
{id: 3, name: '素材安全'},
|
{ id: 3, name: '素材安全' },
|
||||||
{id: 4, name: '简单上手'},
|
{ id: 4, name: '简单上手' },
|
||||||
{id: 5, name: '最新发布'},
|
{ id: 5, name: '最新发布' },
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Api.system.getTaskType().then(({data}) => {
|
|
||||||
taskType.length = 0;
|
|
||||||
taskType.push(...data);
|
|
||||||
});
|
|
||||||
Api.system.getPlatform().then(({data}) => {
|
|
||||||
platformType.length = 0;
|
|
||||||
platformType.push(...data);
|
|
||||||
});
|
|
||||||
|
|
||||||
const po = reactive({
|
const po = reactive({
|
||||||
type: 0,
|
type: 0,
|
||||||
pid: 0,
|
pid: 0,
|
||||||
@@ -81,7 +72,7 @@ const vo = reactive({
|
|||||||
total: 0,
|
total: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
const {loading, pagination, initFetchData} = useTableQuery({
|
const { loading, pagination, initFetchData } = useTableQuery({
|
||||||
api: Api.system.getTask,
|
api: Api.system.getTask,
|
||||||
uuid: true,
|
uuid: true,
|
||||||
immediate: false,
|
immediate: false,
|
||||||
@@ -92,21 +83,33 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
|||||||
});
|
});
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
initFetchData();
|
// #ifndef MP-WEIXIN
|
||||||
});
|
const ua = navigator.userAgent.toLowerCase();
|
||||||
|
if (ua.indexOf("micromessenger") !== -1) {
|
||||||
onMounted(() => {
|
toPage('/pages/notSupported/index');
|
||||||
|
return;
|
||||||
|
}
|
||||||
Api.system.getAdvList({
|
Api.system.getAdvList({
|
||||||
position: 1,
|
position: 1,
|
||||||
}).then(({data}) => {
|
}).then(({ data }) => {
|
||||||
advList.length = 0;
|
advList.length = 0;
|
||||||
advList.push(...data);
|
advList.push(...data);
|
||||||
});
|
});
|
||||||
Api.system.getBarrageList().then(({data}) => {
|
Api.system.getBarrageList().then(({ data }) => {
|
||||||
textContent.length = 0;
|
textContent.length = 0;
|
||||||
textContent.push(...data);
|
textContent.push(...data);
|
||||||
});
|
});
|
||||||
})
|
Api.system.getTaskType().then(({ data }) => {
|
||||||
|
taskType.length = 0;
|
||||||
|
taskType.push(...data);
|
||||||
|
});
|
||||||
|
Api.system.getPlatform().then(({ data }) => {
|
||||||
|
platformType.length = 0;
|
||||||
|
platformType.push(...data);
|
||||||
|
});
|
||||||
|
initFetchData();
|
||||||
|
// #endif
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -116,16 +119,12 @@ onMounted(() => {
|
|||||||
|
|
||||||
<add-customer-service-modal v-model:show="showAddCustomer"></add-customer-service-modal>
|
<add-customer-service-modal v-model:show="showAddCustomer"></add-customer-service-modal>
|
||||||
|
|
||||||
<scroll-view
|
<scroll-view @refresherpulling="initFetchData()" @scrolltolower="() => {
|
||||||
@refresherpulling="initFetchData()"
|
pagination.page++;
|
||||||
@scrolltolower="() => {
|
}" class="h-[calc(100vh-200rpx)]" scroll-y>
|
||||||
pagination.page++;
|
|
||||||
}"
|
|
||||||
class="h-[calc(100vh-200rpx)]"
|
|
||||||
scroll-y>
|
|
||||||
<view class="relative overflow-hidden bg-b-r !pb-[34rpx]">
|
<view class="relative overflow-hidden bg-b-r !pb-[34rpx]">
|
||||||
<image class="!w-full !absolute top-1/2 -translate-y-1/2" src="/static/icons/home-bg.png"
|
<image class="!w-full !absolute top-1/2 -translate-y-1/2" src="/static/icons/home-bg.png" mode="widthFix">
|
||||||
mode="widthFix"></image>
|
</image>
|
||||||
<view class="!w-full !h-full !absolute !top-0 !left-0 bg-w"></view>
|
<view class="!w-full !h-full !absolute !top-0 !left-0 bg-w"></view>
|
||||||
|
|
||||||
<view class="box-border !p-[20rpx]">
|
<view class="box-border !p-[20rpx]">
|
||||||
@@ -137,10 +136,7 @@ onMounted(() => {
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="mt-[44rpx] !flex !gap-[50rpx] !mx-[36rpx] relative z-10">
|
<view class="mt-[44rpx] !flex !gap-[50rpx] !mx-[36rpx] relative z-10">
|
||||||
<view
|
<view v-for="item in nav" :key="item.title" @click="item.path ? toPage(item.path) : item.onClick()"
|
||||||
v-for="item in nav"
|
|
||||||
:key="item.title"
|
|
||||||
@click="item.path ? toPage(item.path) : item.onClick()"
|
|
||||||
class="!flex flex-col items-center gap-[6rpx]">
|
class="!flex flex-col items-center gap-[6rpx]">
|
||||||
<view class="!size-[96rpx] rounded-[20rpx] overflow-hidden">
|
<view class="!size-[96rpx] rounded-[20rpx] overflow-hidden">
|
||||||
<image class="!size-full" :src="item.icon"></image>
|
<image class="!size-full" :src="item.icon"></image>
|
||||||
@@ -156,20 +152,11 @@ onMounted(() => {
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="!grid !grid-cols-3 !px-[20rpx] gap-[20rpx]">
|
<view class="!grid !grid-cols-3 !px-[20rpx] gap-[20rpx]">
|
||||||
<x-dropdown-list
|
<x-dropdown-list @change="initFetchData" v-model:model-value="po.type" :option="taskType">
|
||||||
@change="initFetchData"
|
|
||||||
v-model:model-value="po.type"
|
|
||||||
:option="taskType">
|
|
||||||
</x-dropdown-list>
|
</x-dropdown-list>
|
||||||
<x-dropdown-list
|
<x-dropdown-list @change="initFetchData" v-model:model-value="po.pid" :option="platformType">
|
||||||
@change="initFetchData"
|
|
||||||
v-model:model-value="po.pid"
|
|
||||||
:option="platformType">
|
|
||||||
</x-dropdown-list>
|
</x-dropdown-list>
|
||||||
<x-dropdown-list
|
<x-dropdown-list @change="initFetchData" v-model:model-value="po.order" :option="sortType">
|
||||||
@change="initFetchData"
|
|
||||||
v-model:model-value="po.order"
|
|
||||||
:option="sortType">
|
|
||||||
</x-dropdown-list>
|
</x-dropdown-list>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ watch(
|
|||||||
<scroll-view
|
<scroll-view
|
||||||
scroll-y
|
scroll-y
|
||||||
@refresherpulling="initFetchData()"
|
@refresherpulling="initFetchData()"
|
||||||
@scrolltolower="pagination.current++"
|
@scrolltolower="pagination.page++"
|
||||||
class="h-[calc(100vh-200rpx)]">
|
class="h-[calc(100vh-200rpx)]">
|
||||||
<view class="!flex flex-col gap-[20rpx] p-[20rpx]">
|
<view class="!flex flex-col gap-[20rpx] p-[20rpx]">
|
||||||
<view class="bg-[var(--primary-color)] p-[32rpx] rounded-[12rpx] !flex items-center">
|
<view class="bg-[var(--primary-color)] p-[32rpx] rounded-[12rpx] !flex items-center">
|
||||||
|
|||||||
@@ -40,20 +40,37 @@ const success = async () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="!px-[34rpx] !flex flex-col gap-[40rpx]">
|
<view class="account-login">
|
||||||
<x-input v-model:model-value="form.mobile" placeholder="请输入手机号"></x-input>
|
<x-input v-model:model-value="form.mobile" placeholder="请输入手机号"></x-input>
|
||||||
<x-input v-model:model-value="form.password" placeholder="密码">
|
<x-input v-model:model-value="form.password" placeholder="密码">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<x-link @click="toPage('/pages/forgotPassword/index')">忘记密码?</x-link>
|
<x-link @click="toPage('/pages/forgotPassword/index')">忘记密码?</x-link>
|
||||||
</template>
|
</template>
|
||||||
</x-input>
|
</x-input>
|
||||||
<tui-button class="!mt-[80rpx]" @click="success">登录</tui-button>
|
<tui-button class="btn primary" @click="success">登录</tui-button>
|
||||||
<tui-button @click="toPage('/pages/register/index')" class="!mt-[40rpx]" plain link>
|
<tui-button @click="toPage('/pages/register/index')" class="btn link-btn" plain link>
|
||||||
<image class="!h-[26rpx]" mode="heightFix" src="../../static/icons/去注册.png"></image>
|
<image class="register-icon" mode="heightFix" src="../../static/icons/去注册.png"></image>
|
||||||
</tui-button>
|
</tui-button>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.account-login{
|
||||||
|
padding: 0 34rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn{
|
||||||
|
margin-top: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn.primary{
|
||||||
|
margin-top: 80rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.register-icon{
|
||||||
|
height: 26rpx;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {onMounted, reactive} from "vue";
|
import { onMounted, reactive } from "vue";
|
||||||
|
|
||||||
const list = ['简单做轻松赚', '我是大圆宝 已提现304.46元', '路马克 已提现858.37元', 'Rainy day 已提现1634.78元', '邀请好友,更多奖励', '0成本轻创业,有手就行', '无套路,没门槛', '一边带娃一边赚钱,方便省心~', '舍友同学都在用,提现快捷'];
|
const list = ['简单做轻松赚', '我是大圆宝 已提现304.46元', '路马克 已提现858.37元', 'Rainy day 已提现1634.78元', '邀请好友,更多奖励', '0成本轻创业,有手就行', '无套路,没门槛', '一边带娃一边赚钱,方便省心~', '舍友同学都在用,提现快捷'];
|
||||||
const list1 = reactive([]);
|
const list1 = reactive([]);
|
||||||
@@ -13,18 +13,14 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="!mt-[68rpx] !flex flex-col gap-[20rpx]">
|
<view class="container">
|
||||||
<view class="!flex gap-[30rpx] scrollX">
|
<view class="row scrollX">
|
||||||
<view
|
<view v-for="item in list1" :key="item" class="qp">
|
||||||
v-for="item in list1"
|
|
||||||
class="!h-[72rpx] qp">
|
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="!flex gap-[30rpx] scrollX">
|
<view class="row scrollX">
|
||||||
<view
|
<view v-for="item in list2" :key="item" class="qp">
|
||||||
v-for="item in list2"
|
|
||||||
class="!h-[72rpx] qp">
|
|
||||||
{{ item }}
|
{{ item }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -32,6 +28,19 @@ onMounted(() => {
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
.container {
|
||||||
|
margin-top: 68rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
display: flex;
|
||||||
|
gap: 30rpx;
|
||||||
|
overflow-x: auto; // optional
|
||||||
|
}
|
||||||
|
|
||||||
.scrollX {
|
.scrollX {
|
||||||
width: max-content !important;
|
width: max-content !important;
|
||||||
animation: scroll 120s linear infinite;
|
animation: scroll 120s linear infinite;
|
||||||
@@ -43,15 +52,21 @@ onMounted(() => {
|
|||||||
|
|
||||||
@keyframes scroll {
|
@keyframes scroll {
|
||||||
0% {
|
0% {
|
||||||
transform: translateX(100vw); /* 从右侧开始 */
|
transform: translateX(100vw);
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
transform: translateX(-100%); /* 滚动到左侧结束 */
|
transform: translateX(-100%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.qp {
|
.qp {
|
||||||
@apply px-[36rpx] flex items-center rounded-full;
|
height: 72rpx;
|
||||||
|
padding-left: 36rpx;
|
||||||
|
padding-right: 36rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 9999px;
|
||||||
background: linear-gradient(to right, #B8C5E9, #CAE2E9, #D0D6E2);
|
background: linear-gradient(to right, #B8C5E9, #CAE2E9, #D0D6E2);
|
||||||
box-shadow: inset 0 0 10px 15rpx rgba(255, 255, 255);
|
box-shadow: inset 0 0 10px 15rpx rgba(255, 255, 255);
|
||||||
backdrop-filter: blur(20px);
|
backdrop-filter: blur(20px);
|
||||||
|
|||||||
@@ -41,16 +41,33 @@ const success = async () => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="!px-[34rpx] !flex flex-col gap-[40rpx]">
|
<view class="phone-login">
|
||||||
<x-input v-model:model-value="form.mobile" placeholder="请输入手机号"></x-input>
|
<x-input v-model:model-value="form.mobile" placeholder="请输入手机号"></x-input>
|
||||||
<send-msg v-model:model-value="form.captcha" :mobile="form.mobile" :type="2"></send-msg>
|
<send-msg v-model:model-value="form.captcha" :mobile="form.mobile" :type="2"></send-msg>
|
||||||
<tui-button class="!mt-[80rpx]" @click="success">登录</tui-button>
|
<tui-button class="btn primary" @click="success">登录</tui-button>
|
||||||
<tui-button @click="toPage('/pages/register/index')" class="!mt-[40rpx]" plain link>
|
<tui-button @click="toPage('/pages/register/index')" class="btn link-btn" plain link>
|
||||||
<image class="!h-[26rpx]" mode="heightFix" src="../../static/icons/去注册.png"></image>
|
<image class="register-icon" mode="heightFix" src="../../static/icons/去注册.png"></image>
|
||||||
</tui-button>
|
</tui-button>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style lang="scss" scoped>
|
||||||
|
.phone-login{
|
||||||
|
padding: 0 34rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn{
|
||||||
|
margin-top: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn.primary{
|
||||||
|
margin-top: 80rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.register-icon{
|
||||||
|
height: 26rpx;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
import BGICON from "../../static/icons/bg.png";
|
import BGICON from "../../static/icons/bg.png";
|
||||||
import XNav from "../../components/XNav.vue";
|
import XNav from "../../components/XNav.vue";
|
||||||
import BulletChat from "./BulletChat.vue";
|
import BulletChat from "./BulletChat.vue";
|
||||||
import {ref} from "vue";
|
import { ref } from "vue";
|
||||||
import AccountLogin from "./AccountLogin.vue";
|
import AccountLogin from "./AccountLogin.vue";
|
||||||
import PhoneLogin from "./PhoneLogin.vue";
|
import PhoneLogin from "./PhoneLogin.vue";
|
||||||
import WXOfficialAccount from "../../components/WXOfficialAccount.vue";
|
import WXOfficialAccount from "../../components/WXOfficialAccount.vue";
|
||||||
import {onLoad} from "@dcloudio/uni-app";
|
import { onLoad } from "@dcloudio/uni-app";
|
||||||
|
|
||||||
const currentTab = ref(0);
|
const currentTab = ref(0);
|
||||||
const showWX = ref(false);
|
const showWX = ref(false);
|
||||||
@@ -20,7 +20,7 @@ const tabs = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
const {showWX: _showWX} = options;
|
const { showWX: _showWX } = options;
|
||||||
showWX.value = _showWX === '1';
|
showWX.value = _showWX === '1';
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@@ -29,21 +29,21 @@ onLoad((options) => {
|
|||||||
<!--登陆-->
|
<!--登陆-->
|
||||||
<XNav :showBack="false"></XNav>
|
<XNav :showBack="false"></XNav>
|
||||||
|
|
||||||
<view class="h-[390rpx] relative overflow-hidden">
|
<view class="box">
|
||||||
<image class="!absolute left-1/2 top-1/2 -translate-1/2 !w-[1198rpx] !h-[806rpx] !pb-[40rpx]"
|
<image class="boximg" :src="BGICON">
|
||||||
:src="BGICON"></image>
|
</image>
|
||||||
|
|
||||||
<view class="!flex gap-[16rpx] items-center !mt-[56rpx] !ml-[16rpx] relative z-10">
|
<view class="hi-box">
|
||||||
<image class="!w-[68rpx] !h-[68rpx]" src="/static/icons/hi.png"></image>
|
<image class="hi" src="/static/icons/hi.png"></image>
|
||||||
<view class="title">欢迎登录系统</view>
|
<view class="title">欢迎登录系统</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<BulletChat></BulletChat>
|
<BulletChat></BulletChat>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="h-full bg-white !-mt-[20rpx] rounded-t-[20rpx] relative z-10">
|
<view class="form">
|
||||||
<tui-tabs class="!mx-auto !mb-[40rpx]" :tabs="tabs" :currentTab="currentTab" itemWidth="50%"
|
<tui-tabs class="tabs" :tabs="tabs" :currentTab="currentTab" itemWidth="50%"
|
||||||
@change="({index}) => currentTab=index" :width="300" :sliderWidth="130"></tui-tabs>
|
@change="({ index }) => currentTab = index" :width="300" :sliderWidth="130"></tui-tabs>
|
||||||
|
|
||||||
<PhoneLogin v-if="currentTab === 0"></PhoneLogin>
|
<PhoneLogin v-if="currentTab === 0"></PhoneLogin>
|
||||||
<AccountLogin v-else></AccountLogin>
|
<AccountLogin v-else></AccountLogin>
|
||||||
@@ -52,13 +52,32 @@ onLoad((options) => {
|
|||||||
<w-x-official-account v-model:show="showWX"></w-x-official-account>
|
<w-x-official-account v-model:show="showWX"></w-x-official-account>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss" scoped>
|
||||||
page {
|
.tabs {
|
||||||
|
@apply mx-auto mb-[40rpx];
|
||||||
|
}
|
||||||
|
|
||||||
|
.form {
|
||||||
|
@apply h-full -mt-[20rpx] rounded-t-[20rpx] relative z-10;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
</style>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
.boximg {
|
||||||
|
@apply absolute left-1/2 top-1/2 -translate-1/2 w-[1198rpx] h-[806rpx] pb-[40rpx];
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
@apply h-[390rpx] relative overflow-hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hi-box {
|
||||||
|
@apply flex gap-[16rpx] items-center mt-[56rpx] ml-[16rpx] relative z-10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hi {
|
||||||
|
@apply w-[68rpx] h-[68rpx];
|
||||||
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
color: rgb(29, 33, 41);
|
color: rgb(29, 33, 41);
|
||||||
font-size: 26px;
|
font-size: 26px;
|
||||||
@@ -68,3 +87,9 @@ page {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import WBDICON from "../../static/icons/yczh.png";
|
|||||||
import YBDICON from "../../static/icons/YBD.png";
|
import YBDICON from "../../static/icons/YBD.png";
|
||||||
import XNav from "../../components/XNav.vue";
|
import XNav from "../../components/XNav.vue";
|
||||||
import BindMsgModal from "../../components/BindMsgModal.vue";
|
import BindMsgModal from "../../components/BindMsgModal.vue";
|
||||||
import {useUserStore} from "../../pinia/UserStore/index.js";
|
import { useUserStore } from "../../pinia/UserStore/index.js";
|
||||||
|
|
||||||
const UserStore = useUserStore();
|
const UserStore = useUserStore();
|
||||||
</script>
|
</script>
|
||||||
@@ -40,7 +40,7 @@ const UserStore = useUserStore();
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="btm h-[50vh] !flex flex-col items-center px-[40rpx] !mx-[20rpx]">
|
<view class="btm h-[50vh] !flex flex-col items-center px-[40rpx] !mx-[20rpx]">
|
||||||
<image class="!w-[300rpx] !mt-[40rpx] !mb-[40rpx]" mode="widthFix" :src="BDH"></image>
|
<image class="!w-[300rpx] !mt-[40rpx] !mb-[40rpx] flex-shrink-0" mode="widthFix" :src="BDH"></image>
|
||||||
<view class="!flex items-center bg-[#fff] p-[28rpx] w-full rounded-[16rpx] gap-[28rpx]">
|
<view class="!flex items-center bg-[#fff] p-[28rpx] w-full rounded-[16rpx] gap-[28rpx]">
|
||||||
<image class="!size-[70rpx]" mode="aspectFill" :src="BD1"></image>
|
<image class="!size-[70rpx]" mode="aspectFill" :src="BD1"></image>
|
||||||
<view>
|
<view>
|
||||||
@@ -87,3 +87,11 @@ const UserStore = useUserStore();
|
|||||||
margin-bottom: calc(24rpx + env(safe-area-inset-bottom));
|
margin-bottom: calc(24rpx + env(safe-area-inset-bottom));
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#app {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
aspect-ratio: 1 / 2.1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import filer from '../../static/icons/filer.png';
|
import filer from '../../static/icons/filer.png';
|
||||||
import XNav from "../../components/XNav.vue";
|
import XNav from "../../components/XNav.vue";
|
||||||
import {reactive, ref, computed} from "vue";
|
import { reactive, ref, computed } from "vue";
|
||||||
import TaskCard from "../../components/TaskCard.vue";
|
import TaskCard from "../../components/TaskCard.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";
|
||||||
@@ -11,7 +11,7 @@ import XRadioGroup from "../../components/XRadioGroup.vue";
|
|||||||
import XRadio from "../../components/XRadio.vue";
|
import XRadio from "../../components/XRadio.vue";
|
||||||
import XDateRange from "../../components/XDateRange.vue";
|
import XDateRange from "../../components/XDateRange.vue";
|
||||||
import XAlert from "../../components/XAlert.vue";
|
import XAlert from "../../components/XAlert.vue";
|
||||||
import {onShow} from "@dcloudio/uni-app";
|
import { onShow } from "@dcloudio/uni-app";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
const taskType = reactive([]);
|
const taskType = reactive([]);
|
||||||
@@ -53,7 +53,7 @@ const vo = reactive({
|
|||||||
total: 0,
|
total: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
const {loading, pagination, initFetchData} = useTableQuery({
|
const { loading, pagination, initFetchData } = useTableQuery({
|
||||||
api: Api.system.myTaskList,
|
api: Api.system.myTaskList,
|
||||||
immediate: false,
|
immediate: false,
|
||||||
parameter: po,
|
parameter: po,
|
||||||
@@ -62,11 +62,11 @@ const {loading, pagination, initFetchData} = useTableQuery({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Api.system.getTaskType().then(({data}) => {
|
Api.system.getTaskType().then(({ data }) => {
|
||||||
taskType.length = 0;
|
taskType.length = 0;
|
||||||
taskType.push(...data);
|
taskType.push(...data);
|
||||||
});
|
});
|
||||||
Api.system.getPlatform().then(({data}) => {
|
Api.system.getPlatform().then(({ data }) => {
|
||||||
platformType.length = 0;
|
platformType.length = 0;
|
||||||
platformType.push(...data);
|
platformType.push(...data);
|
||||||
});
|
});
|
||||||
@@ -85,18 +85,14 @@ onShow(() => {
|
|||||||
<!--我的任务-->
|
<!--我的任务-->
|
||||||
<XNav :show-back="false"></XNav>
|
<XNav :show-back="false"></XNav>
|
||||||
|
|
||||||
<x-filter
|
<x-filter v-model:model="po" @init="() => {
|
||||||
v-model:model="po"
|
po.cid = 0;
|
||||||
@init="() => {
|
po.pid = 0;
|
||||||
po.cid = 0;
|
po.is_settlement = 0;
|
||||||
po.pid = 0;
|
po.status = 1;
|
||||||
po.is_settlement = 0;
|
po.start_time = dayjs().subtract(1, 'month').format('YYYY-MM-DD');
|
||||||
po.status = 1;
|
po.end_time = dayjs().format('YYYY-MM-DD');
|
||||||
po.start_time = dayjs().subtract(1, 'month').format('YYYY-MM-DD');
|
}" @success="initFetchData" v-model:visible="showFilter">
|
||||||
po.end_time = dayjs().format('YYYY-MM-DD');
|
|
||||||
}"
|
|
||||||
@success="initFetchData"
|
|
||||||
v-model:visible="showFilter">
|
|
||||||
<x-filter-item label="任务类型">
|
<x-filter-item label="任务类型">
|
||||||
<x-radio-group v-model:model-value="po.cid">
|
<x-radio-group v-model:model-value="po.cid">
|
||||||
<view class="!grid grid-cols-4 gap-[24rpx]">
|
<view class="!grid grid-cols-4 gap-[24rpx]">
|
||||||
@@ -121,17 +117,12 @@ onShow(() => {
|
|||||||
</x-radio-group>
|
</x-radio-group>
|
||||||
</x-filter-item>
|
</x-filter-item>
|
||||||
<x-filter-item label="选择时间段">
|
<x-filter-item label="选择时间段">
|
||||||
<x-date-range
|
<x-date-range v-model:end-time="po.end_time" v-model:start-time="po.start_time">
|
||||||
v-model:end-time="po.end_time"
|
|
||||||
v-model:start-time="po.start_time">
|
|
||||||
</x-date-range>
|
</x-date-range>
|
||||||
</x-filter-item>
|
</x-filter-item>
|
||||||
</x-filter>
|
</x-filter>
|
||||||
|
|
||||||
<scroll-view
|
<scroll-view @refresherpulling="initFetchData()" @scrolltolower="pagination.page++" class="h-[calc(100vh-200rpx)]"
|
||||||
@refresherpulling="initFetchData()"
|
|
||||||
@scrolltolower="pagination.current++"
|
|
||||||
class="h-[calc(100vh-200rpx)]"
|
|
||||||
scroll-y>
|
scroll-y>
|
||||||
<view class="relative">
|
<view class="relative">
|
||||||
<view class="!w-full !h-[414rpx] bg-[var(--primary-color)] bor-b-r !absolute">
|
<view class="!w-full !h-[414rpx] bg-[var(--primary-color)] bor-b-r !absolute">
|
||||||
@@ -142,8 +133,7 @@ onShow(() => {
|
|||||||
<view class="!w-full text-center !flex justify-center items-center">全部平台</view>
|
<view class="!w-full text-center !flex justify-center items-center">全部平台</view>
|
||||||
<view class="!w-full text-center !flex justify-center items-center">全部状态</view>
|
<view class="!w-full text-center !flex justify-center items-center">全部状态</view>
|
||||||
<view class="!w-full text-center !flex justify-center items-center">
|
<view class="!w-full text-center !flex justify-center items-center">
|
||||||
<view
|
<view @click="showFilter = true"
|
||||||
@click="showFilter=true"
|
|
||||||
class="!flex items-center justify-center gap-[10rpx] !py-[10rpx] !px-[30rpx] bg-[#0E42D2] rounded-[8rpx]">
|
class="!flex items-center justify-center gap-[10rpx] !py-[10rpx] !px-[30rpx] bg-[#0E42D2] rounded-[8rpx]">
|
||||||
<image class="!w-[22rpx] !h-[22rpx]" :src="filer"></image>
|
<image class="!w-[22rpx] !h-[22rpx]" :src="filer"></image>
|
||||||
筛选
|
筛选
|
||||||
@@ -192,7 +182,7 @@ onShow(() => {
|
|||||||
根据您的任务完成情况
|
根据您的任务完成情况
|
||||||
</view>
|
</view>
|
||||||
<view style="font-size: 28rpx;font-weight: 400"
|
<view style="font-size: 28rpx;font-weight: 400"
|
||||||
class="text-[rgb(78,89,105)] !mt-[10rpx]">
|
class="text-[rgb(78,89,105)] !mt-[10rpx]">
|
||||||
实际获得的收益
|
实际获得的收益
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -205,10 +195,8 @@ onShow(() => {
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="!grid grid-cols-4 gap-[20rpx] !px-[20rpx] bg-[#F2F3F5] py-[20rpx]">
|
<view class="!grid grid-cols-4 gap-[20rpx] !px-[20rpx] bg-[#F2F3F5] py-[20rpx]">
|
||||||
<view
|
<view v-for="(item, index) in tabs" @click="changeCurrent(item)"
|
||||||
v-for="(item, index) in tabs"
|
:class="['rounded-full bg-[#fff] text-center !py-[8rpx] !text-[13px] duration-500', po.status === item.value ? 'current' : '', vo[`count${index + 1}`] > 0 ? 'badge' : '']">
|
||||||
@click="changeCurrent(item)"
|
|
||||||
:class="['rounded-full bg-[#fff] text-center !py-[8rpx] !text-[13px] duration-500', po.status===item.value ? 'current' : '', vo[`count${index+1}`] > 0 ? 'badge' : '']">
|
|
||||||
{{ item.name }}
|
{{ item.name }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,11 +1,22 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import { onShow } from "@dcloudio/uni-app";
|
||||||
import ICON from "../../static/images/wxweb.png";
|
import ICON from "../../static/images/wxweb.png";
|
||||||
|
|
||||||
|
onShow(() => {
|
||||||
|
const ua = navigator.userAgent.toLowerCase();
|
||||||
|
if (ua.indexOf("micromessenger") === -1) {
|
||||||
|
toPage('/pages/home/index');
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<image :src="ICON" mode="aspectFill" class="!w-full !h-screen"></image>
|
<image :src="ICON" mode="aspectFill" class="!w-full !h-screen max-image"></image>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.max-image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import {ref, computed} from "vue";
|
import { ref, computed } from "vue";
|
||||||
import XSquareCarouselImage from "../../../components/XSquareCarouselImage.vue";
|
import XSquareCarouselImage from "../../../components/XSquareCarouselImage.vue";
|
||||||
import {toWXMiniApp} from "../../../utils/uils.js";
|
import { toWXMiniApp } from "../../../utils/uils.js";
|
||||||
import XImage from "../../../components/XImage.vue";
|
import XImage from "../../../components/XImage.vue";
|
||||||
|
|
||||||
const {data, home} = defineProps({
|
const { data, home } = defineProps({
|
||||||
data: {
|
data: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: null,
|
default: null,
|
||||||
@@ -23,17 +23,15 @@ const list = computed(() => data.children.material[current.value].comment?.flatM
|
|||||||
<template>
|
<template>
|
||||||
<!--领取素材-->
|
<!--领取素材-->
|
||||||
<view class="!flex gap-[24rpx] !mb-[28rpx]">
|
<view class="!flex gap-[24rpx] !mb-[28rpx]">
|
||||||
<view
|
<view v-for="(item, index) in data.children.material" @click="current = index"
|
||||||
v-for="(item,index) in data.children.material"
|
:class="['tab-item', index === current ? 'cur' : '']">
|
||||||
@click="current=index"
|
|
||||||
:class="['tab-item', index===current?'cur':'']">
|
|
||||||
素材{{ index + 1 }}
|
素材{{ index + 1 }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<template v-if="true">
|
<template v-if="true">
|
||||||
<view class="block"
|
<view class="block"
|
||||||
v-if="data.material_type?.title_limit > 0 && data.children.material[current].title?.length > 0">
|
v-if="data.material_type?.title_limit > 0 && data.children.material[current].title?.length > 0">
|
||||||
<view class="block-title">
|
<view class="block-title">
|
||||||
标题:
|
标题:
|
||||||
</view>
|
</view>
|
||||||
@@ -50,12 +48,12 @@ const list = computed(() => data.children.material[current.value].comment?.flatM
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="block"
|
<view class="block"
|
||||||
v-if="data.material_type?.tags_limit > 0 && data.children.material[current].tags_arr?.length > 0">
|
v-if="data.material_type?.tags_limit > 0 && data.children.material[current].tags_arr?.length > 0">
|
||||||
<view class="block-title">
|
<view class="block-title">
|
||||||
话题:
|
话题:
|
||||||
</view>
|
</view>
|
||||||
<view class="block-info">
|
<view class="block-info">
|
||||||
{{ data.children.material[current].tags_arr.map(item => `#${item}`).join(' ') }}
|
{{data.children.material[current].tags_arr.map(item => `#${item}`).join(' ')}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="block" v-if="data.children.material[current].material_arr?.length > 0">
|
<view class="block" v-if="data.children.material[current].material_arr?.length > 0">
|
||||||
@@ -64,7 +62,7 @@ const list = computed(() => data.children.material[current.value].comment?.flatM
|
|||||||
</view>
|
</view>
|
||||||
<view class="block-info">
|
<view class="block-info">
|
||||||
<x-square-carousel-image :list="data.children.material[current].material_arr"
|
<x-square-carousel-image :list="data.children.material[current].material_arr"
|
||||||
:show-s-y="home"></x-square-carousel-image>
|
:show-s-y="home"></x-square-carousel-image>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="block" v-if="list?.length > 0">
|
<view class="block" v-if="list?.length > 0">
|
||||||
@@ -85,13 +83,10 @@ const list = computed(() => data.children.material[current.value].comment?.flatM
|
|||||||
</view>
|
</view>
|
||||||
<view class="!flex gap-[20rpx] flex-wrap !my-[10rpx]">
|
<view class="!flex gap-[20rpx] flex-wrap !my-[10rpx]">
|
||||||
<view class="!w-[96rpx] !h-[96rpx] !aspect-square" v-for="k in v.image_arr">
|
<view class="!w-[96rpx] !h-[96rpx] !aspect-square" v-for="k in v.image_arr">
|
||||||
<x-image
|
<x-image :style="{
|
||||||
:style="{
|
width: '96rpx',
|
||||||
width: '96rpx',
|
height: '96rpx',
|
||||||
height: '96rpx',
|
}" :src="k" :list="v.image_arr">
|
||||||
}"
|
|
||||||
:src="k"
|
|
||||||
:list="v.image_arr">
|
|
||||||
</x-image>
|
</x-image>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -143,6 +138,7 @@ const list = computed(() => data.children.material[current.value].comment?.flatM
|
|||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 140%;
|
line-height: 140%;
|
||||||
letter-spacing: 0;
|
letter-spacing: 0;
|
||||||
|
white-space: pre-line;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import goodsIcon from '../../static/icons/goodsIcon.png';
|
import goodsIcon from '../../static/icons/goodsIcon.png';
|
||||||
import XNav from "../../components/XNav.vue";
|
import XNav from "../../components/XNav.vue";
|
||||||
import {computed, defineAsyncComponent, getCurrentInstance, nextTick, onMounted, reactive, ref} from 'vue';
|
import { computed, defineAsyncComponent, getCurrentInstance, nextTick, onMounted, reactive, ref } from 'vue';
|
||||||
import {onLoad} from "@dcloudio/uni-app";
|
import { onLoad } from "@dcloudio/uni-app";
|
||||||
import XLink from "../../components/XLink.vue";
|
import XLink from "../../components/XLink.vue";
|
||||||
import XNoticeBar from "../../components/XNoticeBar.vue";
|
import XNoticeBar from "../../components/XNoticeBar.vue";
|
||||||
import XImage from "../../components/XImage.vue";
|
import XImage from "../../components/XImage.vue";
|
||||||
import Api from "../../api/index.js";
|
import Api from "../../api/index.js";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import XPrompt from "../../components/XPrompt.vue";
|
import XPrompt from "../../components/XPrompt.vue";
|
||||||
import {copy, numberToCharacter} from "../../utils/uils.js";
|
import { copy, numberToCharacter } from "../../utils/uils.js";
|
||||||
import AcceptAssignmentModal from "../../components/AcceptAssignmentModal.vue";
|
import AcceptAssignmentModal from "../../components/AcceptAssignmentModal.vue";
|
||||||
import ICON from "../../static/icons/prompt.png";
|
import ICON from "../../static/icons/prompt.png";
|
||||||
import XConfirmModal from "../../components/XConfirmModal.vue";
|
import XConfirmModal from "../../components/XConfirmModal.vue";
|
||||||
import LeftMenu from "../../components/LeftMenu.vue";
|
import LeftMenu from "../../components/LeftMenu.vue";
|
||||||
import {v4} from "uuid";
|
import { v4 } from "uuid";
|
||||||
import {debounce} from "lodash";
|
import { debounce } from "lodash";
|
||||||
import XSquareCarouselImage from "../../components/XSquareCarouselImage.vue";
|
import XSquareCarouselImage from "../../components/XSquareCarouselImage.vue";
|
||||||
|
|
||||||
// #ifdef APP-PLUS
|
// #ifdef APP-PLUS
|
||||||
@@ -98,13 +98,13 @@ const menuTabs = reactive([
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
const getData = async (id, task_children_id) => {
|
const getData = async (id, task_children_id) => {
|
||||||
const {data} = await Api.system.getTaskinfo(id || details.value.id, task_children_id || details.value?.children?.id);
|
const { data } = await Api.system.getTaskinfo(id || details.value.id, task_children_id || details.value?.children?.id);
|
||||||
details.value = data;
|
details.value = data;
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
const {id, home: _home, tab, task_children_id, delta: _delta} = options;
|
const { id, home: _home, tab, task_children_id, delta: _delta } = options;
|
||||||
home.value = _home === '1';
|
home.value = _home === '1';
|
||||||
if (tab) currentTabs.value = Number(tab);
|
if (tab) currentTabs.value = Number(tab);
|
||||||
if (delta) delta.value = _delta;
|
if (delta) delta.value = _delta;
|
||||||
@@ -153,7 +153,7 @@ const hiddenMenu = debounce(() => {
|
|||||||
showMenu.value = false;
|
showMenu.value = false;
|
||||||
}, 1200);
|
}, 1200);
|
||||||
|
|
||||||
const scroll = ({detail: {scrollTop}}) => {
|
const scroll = ({ detail: { scrollTop } }) => {
|
||||||
const systemInfo = uni.getSystemInfoSync();
|
const systemInfo = uni.getSystemInfoSync();
|
||||||
const screenHeight = systemInfo.screenHeight;
|
const screenHeight = systemInfo.screenHeight;
|
||||||
|
|
||||||
@@ -181,13 +181,8 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<x-notice-bar v-if="details.banner" :text="[details.banner]"></x-notice-bar>
|
<x-notice-bar v-if="details.banner" :text="[details.banner]"></x-notice-bar>
|
||||||
<left-menu v-show="showMenu" :tabs="menuTabs" @top="topTop" @setScroll="setScroll"></left-menu>
|
<left-menu v-show="showMenu" :tabs="menuTabs" @top="topTop" @setScroll="setScroll"></left-menu>
|
||||||
|
|
||||||
<scroll-view
|
<scroll-view scroll-y @scroll="scroll" scroll-with-animation :scroll-top="scrollState.top"
|
||||||
scroll-y
|
class="h-[calc(100vh-180rpx)]" v-if="details">
|
||||||
@scroll="scroll"
|
|
||||||
scroll-with-animation
|
|
||||||
:scroll-top="scrollState.top"
|
|
||||||
class="h-[calc(100vh-180rpx)]"
|
|
||||||
v-if="details">
|
|
||||||
<view class="!p-[20rpx] !flex flex-col gap-[20rpx] box-border">
|
<view class="!p-[20rpx] !flex flex-col gap-[20rpx] box-border">
|
||||||
<view id="taskHeader" class="rounded-[16rpx] !p-[24rpx] bg-[#fff] !flex flex-col gap-[20rpx]">
|
<view id="taskHeader" class="rounded-[16rpx] !p-[24rpx] bg-[#fff] !flex flex-col gap-[20rpx]">
|
||||||
<view class="!flex gap-[30rpx]">
|
<view class="!flex gap-[30rpx]">
|
||||||
@@ -196,8 +191,8 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="goods-title !w-full !flex items-center justify-between">
|
<view class="goods-title !w-full !flex items-center justify-between">
|
||||||
{{ details.goods_name }}
|
{{ details.goods_name }}
|
||||||
<view :class="['goods-state']" v-if="!home && details.is_use !== 0">{{
|
<view :class="['goods-state']" v-if="!home && details.is_use !== 0">{{
|
||||||
details.status_text
|
details.status_text
|
||||||
}}
|
}}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view v-if="home || details.is_use === 0" class="goods-bh">
|
<view v-if="home || details.is_use === 0" class="goods-bh">
|
||||||
@@ -210,8 +205,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view
|
<view v-if="!home && details.is_use !== 0"
|
||||||
v-if="!home && details.is_use !== 0"
|
|
||||||
class="bg-[#F7F8FA] px-[28rpx] py-[16rpx] rounded-[8rpx] !flex justify-around"
|
class="bg-[#F7F8FA] px-[28rpx] py-[16rpx] rounded-[8rpx] !flex justify-around"
|
||||||
style="font-size: 24rpx">
|
style="font-size: 24rpx">
|
||||||
<view>发布账号</view>
|
<view>发布账号</view>
|
||||||
@@ -230,14 +224,14 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="bg-[#E8F3FF] px-[26rpx] py-[20rpx] rounded-[8rpx]">
|
<view class="bg-[#E8F3FF] px-[26rpx] py-[20rpx] rounded-[8rpx]">
|
||||||
<view class="goods-st whitespace-nowrap">¥ {{ details.real_price.toFixed(2) }}</view>
|
<view class="goods-st whitespace-nowrap">¥ {{ details.real_price.toFixed(2) }}</view>
|
||||||
<template v-if="details.is_use === 0">
|
<template v-if="details.is_use === 0">
|
||||||
<view class="goods-st-info" v-if="details.children.is_settlement===0">任务报酬</view>
|
<view class="goods-st-info" v-if="details.children.is_settlement === 0">任务报酬</view>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<view class="goods-st-info" v-if="details.children.is_settlement===0">任务报酬</view>
|
<view class="goods-st-info" v-if="details.children.is_settlement === 0">任务报酬</view>
|
||||||
<view class="goods-st-info !text-[#FF5722]" v-if="details.children.is_settlement===1">
|
<view class="goods-st-info !text-[#FF5722]" v-if="details.children.is_settlement === 1">
|
||||||
待确认收益
|
待确认收益
|
||||||
</view>
|
</view>
|
||||||
<view class="goods-st-info !text-[#00B42A]" v-if="details.children.is_settlement===2">到账收益
|
<view class="goods-st-info !text-[#00B42A]" v-if="details.children.is_settlement === 2">到账收益
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
</view>
|
</view>
|
||||||
@@ -246,7 +240,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="goods-st-info">素材类型</view>
|
<view class="goods-st-info">素材类型</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="bg-[#E8F3FF] px-[26rpx] py-[20rpx] rounded-[8rpx]"
|
<view class="bg-[#E8F3FF] px-[26rpx] py-[20rpx] rounded-[8rpx]"
|
||||||
v-if="!(mainDetailWidth && (!home && details.is_use !== 0))">
|
v-if="!(mainDetailWidth && (!home && details.is_use !== 0))">
|
||||||
<view class="goods-st">{{ details.children_num }}</view>
|
<view class="goods-st">{{ details.children_num }}</view>
|
||||||
<view class="goods-st-info">剩余名额</view>
|
<view class="goods-st-info">剩余名额</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -256,9 +250,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="!flex px-[10px] py-[12px] bg-[#F2F3F5] gap-[8px] items-center">
|
<view class="!flex px-[10px] py-[12px] bg-[#F2F3F5] gap-[8px] items-center">
|
||||||
<view class="text-[#4E5969] test-24r !flex items-center gap-[5px]">
|
<view class="text-[#4E5969] test-24r !flex items-center gap-[5px]">
|
||||||
安全评分:
|
安全评分:
|
||||||
<x-prompt
|
<x-prompt info="由该任务或类似任务的历史禁言率、素材是否绿色决定。分值越高,说明完成任务对账号影响最小" title="分值说明">
|
||||||
info="由该任务或类似任务的历史禁言率、素材是否绿色决定。分值越高,说明完成任务对账号影响最小"
|
|
||||||
title="分值说明">
|
|
||||||
</x-prompt>
|
</x-prompt>
|
||||||
</view>
|
</view>
|
||||||
<view class="!flex items-center gap-[5px]">
|
<view class="!flex items-center gap-[5px]">
|
||||||
@@ -269,9 +261,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="!flex px-[10px] py-[12px] bg-[#F2F3F5] gap-[8px] items-center">
|
<view class="!flex px-[10px] py-[12px] bg-[#F2F3F5] gap-[8px] items-center">
|
||||||
<view class="text-[#4E5969] test-24r !flex items-center gap-[5px]">
|
<view class="text-[#4E5969] test-24r !flex items-center gap-[5px]">
|
||||||
耗时评分:
|
耗时评分:
|
||||||
<x-prompt
|
<x-prompt info="由该任务完整完成所需要的时间和操作步骤决定。分值越高,说明完成任务越简单" title="分值说明">
|
||||||
info="由该任务完整完成所需要的时间和操作步骤决定。分值越高,说明完成任务越简单"
|
|
||||||
title="分值说明">
|
|
||||||
</x-prompt>
|
</x-prompt>
|
||||||
</view>
|
</view>
|
||||||
<view class="!flex items-center gap-[5px]">
|
<view class="!flex items-center gap-[5px]">
|
||||||
@@ -283,20 +273,16 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view id="mainDetailBox" class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden">
|
<view id="mainDetailBox" class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden">
|
||||||
<tui-tabs
|
<tui-tabs v-if="mainDetailWidth && (!home && details.is_use !== 0)" :tabs="tabs"
|
||||||
v-if="mainDetailWidth && (!home && details.is_use !== 0)"
|
:currentTab="currentTabs" :width="mainDetailWidth" @change="({ index }) => currentTabs = index">
|
||||||
:tabs="tabs"
|
|
||||||
:currentTab="currentTabs"
|
|
||||||
:width="mainDetailWidth"
|
|
||||||
@change="({index})=>currentTabs=index">
|
|
||||||
</tui-tabs>
|
</tui-tabs>
|
||||||
|
|
||||||
<view :style="{padding: currentTabs===3?'0':'24rpx'}">
|
<view :style="{ padding: currentTabs === 3 ? '0' : '24rpx' }">
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<template #default>
|
<template #default>
|
||||||
<div class="h-full flex flex-col items-start">
|
<div class="h-full flex flex-col items-start">
|
||||||
<component :is="tabs[currentTabs].component" :data="details" @success="getData"
|
<component :is="tabs[currentTabs].component" :data="details" @success="getData"
|
||||||
:home="home"></component>
|
:home="home"></component>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -346,13 +332,12 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="block"
|
<view class="block"
|
||||||
v-if="details.special_images_arr.length || details.special_text?.length > 0">
|
v-if="details.special_images_arr.length || details.special_text?.length > 0">
|
||||||
<view class="block-title">特殊要求:</view>
|
<view class="block-title">特殊要求:</view>
|
||||||
<view class="block-info gap-[20rpx]">
|
<view class="block-info gap-[20rpx]">
|
||||||
<view>{{ details.special_text }}</view>
|
<view style="white-space: pre-line;">{{ details.special_text }}</view>
|
||||||
<view class="!grid grid-cols-3 !mt-[12rpx]">
|
<view class="!grid grid-cols-3 !mt-[12rpx]">
|
||||||
<x-square-carousel-image
|
<x-square-carousel-image v-if="details.special_images_arr.length > 0"
|
||||||
v-if="details.special_images_arr.length > 0"
|
|
||||||
:list="details.special_images_arr">
|
:list="details.special_images_arr">
|
||||||
</x-square-carousel-image>
|
</x-square-carousel-image>
|
||||||
</view>
|
</view>
|
||||||
@@ -372,10 +357,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="title">
|
<view class="title">
|
||||||
回填要求
|
回填要求
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view v-for="(v, index) in details.task_content" :key="v.id" class="block flex-col">
|
||||||
v-for="(v,index) in details.task_content"
|
|
||||||
:key="v.id"
|
|
||||||
class="block flex-col">
|
|
||||||
<view class="block-title">第{{ index + 1 }}次回填:</view>
|
<view class="block-title">第{{ index + 1 }}次回填:</view>
|
||||||
<view class="block-info !flex w-full">
|
<view class="block-info !flex w-full">
|
||||||
<view
|
<view
|
||||||
@@ -387,9 +369,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
class="bg-[#F7F8FA] py-[12rpx] px-[20rpx] border-1 border-[rgb(229,230,235)] flex-grow">
|
class="bg-[#F7F8FA] py-[12rpx] px-[20rpx] border-1 border-[rgb(229,230,235)] flex-grow">
|
||||||
{{ v.content }}
|
{{ v.content }}
|
||||||
<view class="!inline-block">
|
<view class="!inline-block">
|
||||||
<x-image
|
<x-image :src="v.ts_images_arr[0]" :list="v.ts_images_arr">
|
||||||
:src="v.ts_images_arr[0]"
|
|
||||||
:list="v.ts_images_arr">
|
|
||||||
<image class="!size-[24rpx]" :src="ICON" mode="aspectFill"></image>
|
<image class="!size-[24rpx]" :src="ICON" mode="aspectFill"></image>
|
||||||
</x-image>
|
</x-image>
|
||||||
</view>
|
</view>
|
||||||
@@ -429,8 +409,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="block-title !w-[300rpx]">每次回填将在该时间内审核:</view>
|
<view class="block-title !w-[300rpx]">每次回填将在该时间内审核:</view>
|
||||||
<view class="block-info">
|
<view class="block-info">
|
||||||
{{ details.check_time }} {{ details.check_type === 1 ? '分钟' : '小时' }}内
|
{{ details.check_time }} {{ details.check_type === 1 ? '分钟' : '小时' }}内
|
||||||
<x-prompt
|
<x-prompt title="审核时间说明"
|
||||||
title="审核时间说明"
|
|
||||||
:info="`回填后,我们将于${details.check_time}${details.check_type === 1 ? '分钟' : '小时'}内完成审核,超时自动通过`">
|
:info="`回填后,我们将于${details.check_time}${details.check_type === 1 ? '分钟' : '小时'}内完成审核,超时自动通过`">
|
||||||
</x-prompt>
|
</x-prompt>
|
||||||
</view>
|
</view>
|
||||||
@@ -479,10 +458,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
<view class="title">
|
<view class="title">
|
||||||
扣款说明
|
扣款说明
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view v-for="(v, index) in details.settlement" :key="v.id" class="block !flex !gap-0">
|
||||||
v-for="(v, index) in details.settlement"
|
|
||||||
:key="v.id"
|
|
||||||
class="block !flex !gap-0">
|
|
||||||
<view
|
<view
|
||||||
class="test-24r px-[20rpx] py-[12rpx] bg-[#F7F8FA] border-1 border-[rgb(229,230,235)]">
|
class="test-24r px-[20rpx] py-[12rpx] bg-[#F7F8FA] border-1 border-[rgb(229,230,235)]">
|
||||||
{{ index + 1 }}.
|
{{ index + 1 }}.
|
||||||
@@ -512,8 +488,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
{{ v.intro }}
|
{{ v.intro }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<x-prompt title="信用分说明"
|
<x-prompt title="信用分说明" info="扣除信用分,将影响您后续接任务以及提现。请按约定完成任务。请在接受任务前认真阅读各要求,有能力完成再接受。">
|
||||||
info="扣除信用分,将影响您后续接任务以及提现。请按约定完成任务。请在接受任务前认真阅读各要求,有能力完成再接受。">
|
|
||||||
<template #button>
|
<template #button>
|
||||||
<view
|
<view
|
||||||
class="py-[7rpx] px-[32rpx] rounded-full text-[var(--primary-color)] bg-[#E8F3FF] w-fit">
|
class="py-[7rpx] px-[32rpx] rounded-full text-[var(--primary-color)] bg-[#E8F3FF] w-fit">
|
||||||
@@ -531,8 +506,7 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
</view>
|
</view>
|
||||||
</accept-assignment-modal>
|
</accept-assignment-modal>
|
||||||
|
|
||||||
<view
|
<view v-else
|
||||||
v-else
|
|
||||||
class="bg-[#94BFFF] rounded-[8rpx] py-[26rpx] text-[#fff] !flex justify-center items-center">
|
class="bg-[#94BFFF] rounded-[8rpx] py-[26rpx] text-[#fff] !flex justify-center items-center">
|
||||||
已接受
|
已接受
|
||||||
</view>
|
</view>
|
||||||
@@ -540,18 +514,13 @@ const scroll = ({detail: {scrollTop}}) => {
|
|||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
<x-confirm-modal
|
<x-confirm-modal title="注意" width="500rpx" v-bind="$attrs" :cancel="false" confirm-text="知道了"
|
||||||
title="注意"
|
|
||||||
width="500rpx"
|
|
||||||
v-bind="$attrs"
|
|
||||||
:cancel="false"
|
|
||||||
confirm-text="知道了"
|
|
||||||
v-model:show="showInitModal">
|
v-model:show="showInitModal">
|
||||||
<template #info>
|
<template #info>
|
||||||
<view class="text-[22rpx]">
|
<view class="text-[22rpx]">
|
||||||
请认真阅读该任务的:
|
请认真阅读该任务的:
|
||||||
<text class="text-[rgba(22,93,255,1)]">发布要求、回填要求、扣款说明</text>
|
<text class="text-[rgba(22,93,255,1)]">发布要求、回填要求、扣款说明</text>
|
||||||
<br/>
|
<br />
|
||||||
确认无误后再接受本任务,任务逾期或失败,将影响您的收益!
|
确认无误后再接受本任务,任务逾期或失败,将影响您的收益!
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ const {loading, pagination, initFetchData, fetchData} = useTableQuery({
|
|||||||
<scroll-view
|
<scroll-view
|
||||||
scroll-y
|
scroll-y
|
||||||
@refresherpulling="initFetchData()"
|
@refresherpulling="initFetchData()"
|
||||||
@scrolltolower="pagination.current++"
|
@scrolltolower="pagination.page++"
|
||||||
class="p-[20rpx] h-[calc(100vh-100rpx)]">
|
class="p-[20rpx] h-[calc(100vh-100rpx)]">
|
||||||
<view class="!flex flex-col gap-[20rpx]">
|
<view class="!flex flex-col gap-[20rpx]">
|
||||||
<view class="bg-[var(--primary-color)] p-[32rpx] rounded-[12rpx] !flex items-center">
|
<view class="bg-[var(--primary-color)] p-[32rpx] rounded-[12rpx] !flex items-center">
|
||||||
|
|||||||
@@ -28,13 +28,12 @@ request.interceptors.request.use(
|
|||||||
(config) => {
|
(config) => {
|
||||||
const {token} = useUserStore();
|
const {token} = useUserStore();
|
||||||
|
|
||||||
console.log('看看token在不在', token)
|
|
||||||
// 如果 token 存在,则将其添加到请求头中
|
// 如果 token 存在,则将其添加到请求头中
|
||||||
if (token) {
|
if (token) {
|
||||||
config.headers['Access-Token'] = token;
|
config.headers['Access-Token'] = token;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`请求拦截器1${config.url}`, config);
|
// console.log(`请求拦截器1${config.url}`, config);
|
||||||
console.log(`请求拦截器2${config.url}`, config.data);
|
console.log(`请求拦截器2${config.url}`, config.data);
|
||||||
|
|
||||||
if (!config.UN_AES) {
|
if (!config.UN_AES) {
|
||||||
|
|||||||
Reference in New Issue
Block a user