update
This commit is contained in:
@@ -163,7 +163,7 @@ const system = {
|
||||
} else {
|
||||
return request({
|
||||
method: MethodsENUM.POST,
|
||||
url: "/notice/getNotice",
|
||||
url: "/task/getAllExchangeLog",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
40
src/components/LeftMenu.vue
Normal file
40
src/components/LeftMenu.vue
Normal file
@@ -0,0 +1,40 @@
|
||||
<script setup>
|
||||
import BACK_TOP_ICON from "../static/icons/backtop.png";
|
||||
|
||||
const emits = defineEmits(['top', 'setScroll']);
|
||||
const {tabs} = defineProps({
|
||||
tabs: {
|
||||
type: [],
|
||||
default: () => []
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<view class="bg-[rgba(29,33,41,1)] rounded-[12rpx] p-[8rpx] fixed top-1/2 -translate-y-1/2 right-0 z-[999]">
|
||||
<view
|
||||
@click="emits('top')"
|
||||
class="py-[18rpx] px-[24rpx] !flex justify-around flex-col items-center h-[100rpx] bg-[rgba(78,89,105,1)] rounded-[8rpx]">
|
||||
<image class="!h-[12rpx]" :src="BACK_TOP_ICON" mode="heightFix"></image>
|
||||
<view class="text-[rgba(201,205,212,1)] test-28r">顶部</view>
|
||||
</view>
|
||||
<view class="h-[16rpx] !flex justify-center items-center">
|
||||
<view class="w-[40rpx] bg-[#4E5969] h-[2rpx]"></view>
|
||||
</view>
|
||||
<template v-for="(v, index) in tabs">
|
||||
<view class="py-[18rpx] px-[24rpx]" @click="emits('setScroll', v.value)">
|
||||
<view :class="['text-[rgba(201,205,212,1)] test-28r', v.now ? 'text-white' : '']">{{ v.name1 }}</view>
|
||||
<view :class="['text-[rgba(201,205,212,1)] test-28r', v.now ? 'text-white' : '']">{{ v.name2 }}</view>
|
||||
</view>
|
||||
<view class="h-[16rpx] !flex justify-center items-center" v-if="index < tabs.length-1">
|
||||
<view class="w-[40rpx] bg-[#4E5969] h-[2rpx]"></view>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.text-white {
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
@@ -3,6 +3,7 @@ import {computed} from 'vue';
|
||||
import messageIcon from "../static/icons/messageIcon.png";
|
||||
import XActionsheet from "./XActionsheet.vue";
|
||||
import OpenTypeFun from "./OpenTypeFun.js";
|
||||
import {toPage} from "../utils/uils.js";
|
||||
|
||||
const itemList = computed(() => {
|
||||
const item = [];
|
||||
@@ -36,7 +37,7 @@ const selectActionsheet = (e) => {
|
||||
@success="selectActionsheet"
|
||||
:itemList="itemList">
|
||||
<view
|
||||
@click.stop="OpenTypeFun(data)"
|
||||
@click.stop="type === 0 ? toPage(`/pages/taskDetails/index?id=${data.task_id}&task_children_id=${data.task_children_id}&tab=3`) : OpenTypeFun(data)"
|
||||
class="!py-[30rpx] !px-[24rpx] bg-[#fff] rounded-[8rpx] !flex items-center gap-[20rpx] overflow-hidden relative !mb-[20rpx]">
|
||||
<image class="!size-[72rpx] flex-shrink-0" mode="aspectFill" :src="messageIcon"></image>
|
||||
<view class="flex-grow !flex flex-col gap-[12rpx]">
|
||||
|
||||
@@ -54,7 +54,8 @@ const {loading, pagination, initFetchData, fetchData} = useTableQuery({
|
||||
<view class="px-[24rpx] py-[16rpx] bg-[#fff] rounded-[8rpx]" v-if="v.pattern===1">
|
||||
<view v-html="v.content"></view>
|
||||
<view v-if="v.image_arr.length > 0">
|
||||
<x-image v-for="v in v.image_arr"></x-image>
|
||||
<x-image v-for="v in v.image_arr" :src="v"
|
||||
style="width: 70rpx;height: 70rpx"></x-image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="px-[24rpx] py-[16rpx] bg-[#fff] rounded-[8rpx] test-24r text-[#4E5969]" v-else>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import goodsIcon from '../../static/icons/goodsIcon.png';
|
||||
import XNav from "../../components/XNav.vue";
|
||||
import {computed, defineAsyncComponent, getCurrentInstance, nextTick, onMounted, ref} from 'vue';
|
||||
import {computed, defineAsyncComponent, getCurrentInstance, nextTick, onMounted, ref, reactive} from 'vue';
|
||||
import {onLoad} from "@dcloudio/uni-app";
|
||||
import XLink from "../../components/XLink.vue";
|
||||
import XNoticeBar from "../../components/XNoticeBar.vue";
|
||||
@@ -9,10 +9,12 @@ import XImage from "../../components/XImage.vue";
|
||||
import Api from "../../api/index.js";
|
||||
import dayjs from "dayjs";
|
||||
import XPrompt from "../../components/XPrompt.vue";
|
||||
import {numberToCharacter, toPage} from "../../utils/uils.js";
|
||||
import {numberToCharacter} from "../../utils/uils.js";
|
||||
import AcceptAssignmentModal from "../../components/AcceptAssignmentModal.vue";
|
||||
import ICON from "../../static/icons/prompt.png";
|
||||
import XConfirmModal from "../../components/XConfirmModal.vue";
|
||||
import LeftMenu from "../../components/LeftMenu.vue";
|
||||
import {v4} from "uuid";
|
||||
|
||||
// #ifdef APP-PLUS
|
||||
// #endif
|
||||
@@ -24,11 +26,13 @@ const MyBackfill = defineAsyncComponent(() => import('./components/MyBackfill.vu
|
||||
const ReviewCommunication = defineAsyncComponent(() => import('./components/ReviewCommunication.vue'));
|
||||
// #endif
|
||||
|
||||
const ScrollViewRef = ref();
|
||||
const details = ref(null);
|
||||
const home = ref(false);
|
||||
const showInitModal = ref(false);
|
||||
const mainDetailWidth = ref(0);
|
||||
const currentTabs = ref(0);
|
||||
const HTYQ = ref();
|
||||
const tabs = computed(() => [
|
||||
{
|
||||
name: "任务详情",
|
||||
@@ -50,6 +54,45 @@ const tabs = computed(() => [
|
||||
},
|
||||
]);
|
||||
const delta = ref(1);
|
||||
const menuTabs = reactive([
|
||||
{
|
||||
id: v4(),
|
||||
name1: '案例',
|
||||
name2: '概览',
|
||||
scroll: 'mainDetailBox',
|
||||
now: true,
|
||||
},
|
||||
{
|
||||
id: v4(),
|
||||
name1: '回填',
|
||||
name2: '要求',
|
||||
scroll: 'HTYQ',
|
||||
now: false,
|
||||
},
|
||||
{
|
||||
id: v4(),
|
||||
name1: '时间',
|
||||
name2: '要求',
|
||||
scroll: 'SJYQ',
|
||||
now: false,
|
||||
},
|
||||
{
|
||||
id: v4(),
|
||||
name1: '扣款',
|
||||
name2: '说明',
|
||||
scroll: 'KKSM',
|
||||
value: 9999,
|
||||
now: false,
|
||||
},
|
||||
{
|
||||
id: v4(),
|
||||
name1: '其他',
|
||||
name2: '说明',
|
||||
scroll: 'QTSM',
|
||||
value: 9999,
|
||||
now: false,
|
||||
},
|
||||
]);
|
||||
|
||||
const getData = async (id, task_children_id) => {
|
||||
const {data} = await Api.system.getTaskinfo(id || details.value.id, task_children_id || details.value?.children?.id);
|
||||
@@ -65,27 +108,68 @@ onLoad((options) => {
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
nextTick(() => {
|
||||
setTimeout(() => {
|
||||
const instancs = getCurrentInstance();
|
||||
uni.createSelectorQuery()
|
||||
.in(instancs)
|
||||
.select("#mainDetailBox")
|
||||
.boundingClientRect()
|
||||
.exec((result) => {
|
||||
mainDetailWidth.value = result[0].width;
|
||||
})
|
||||
});
|
||||
let ALGL = 0;
|
||||
let HTYQ = 0;
|
||||
let SJYQ = 0;
|
||||
|
||||
const mainDetailBox = document.querySelector('#mainDetailBox');
|
||||
const taskHeader = document.querySelector('#taskHeader');
|
||||
const fbyq = document.querySelector('#FBYQ');
|
||||
const htyq = document.querySelector('#HTYQ');
|
||||
mainDetailWidth.value = mainDetailBox.clientWidth;
|
||||
ALGL += taskHeader.clientHeight + 12.5;
|
||||
HTYQ += ALGL + mainDetailBox.clientHeight + fbyq.clientHeight + 25;
|
||||
SJYQ += HTYQ + htyq.clientHeight + 12.5;
|
||||
|
||||
menuTabs[0].value = ALGL;
|
||||
menuTabs[1].value = HTYQ;
|
||||
menuTabs[2].value = SJYQ;
|
||||
}, 500);
|
||||
if (home.value) showInitModal.value = true;
|
||||
})
|
||||
const scrollState = reactive({
|
||||
top: 0,
|
||||
});
|
||||
const topTop = () => {
|
||||
scrollState.top = 10;
|
||||
nextTick(() => {
|
||||
scrollState.top = 0;
|
||||
});
|
||||
}
|
||||
const setScroll = (value) => {
|
||||
nextTick(() => {
|
||||
scrollState.top = value;
|
||||
});
|
||||
}
|
||||
const scroll = ({detail: {scrollTop}}) => {
|
||||
let last = menuTabs[0];
|
||||
for (const k of menuTabs) {
|
||||
if (scrollTop + 300 > k.value) {
|
||||
last = k;
|
||||
}
|
||||
}
|
||||
menuTabs.forEach(v => v.now = false);
|
||||
menuTabs.find(v => v.id === last.id).now = true;
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!--任务详情-->
|
||||
<XNav :delta="delta"></XNav>
|
||||
<x-notice-bar></x-notice-bar>
|
||||
<left-menu :tabs="menuTabs" @top="topTop" @setScroll="setScroll"></left-menu>
|
||||
|
||||
<view class="!p-[20rpx] !flex flex-col gap-[20rpx] box-border" v-if="details">
|
||||
<view class="rounded-[16rpx] !p-[24rpx] bg-[#fff] !flex flex-col gap-[20rpx]">
|
||||
<scroll-view
|
||||
scroll-y
|
||||
@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 id="taskHeader" class="rounded-[16rpx] !p-[24rpx] bg-[#fff] !flex flex-col gap-[20rpx]">
|
||||
<view class="!flex gap-[30rpx]">
|
||||
<image class="!size-[84rpx]" :src="goodsIcon"></image>
|
||||
<view class="flex-grow">
|
||||
@@ -192,7 +276,7 @@ onMounted(() => {
|
||||
</view>
|
||||
|
||||
<template v-if="currentTabs === 0">
|
||||
<view class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view id="FBYQ" class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view class="w-full">
|
||||
<view class="title">
|
||||
发布要求
|
||||
@@ -254,7 +338,7 @@ onMounted(() => {
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view id="HTYQ" ref="HTYQ" class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view class="w-full">
|
||||
<view class="title">
|
||||
回填要求
|
||||
@@ -286,7 +370,7 @@ onMounted(() => {
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view id="SJYQ" class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view class="w-full">
|
||||
<view class="title">
|
||||
时间要求
|
||||
@@ -328,7 +412,7 @@ onMounted(() => {
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view id="KKSM" class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view class="w-full">
|
||||
<view class="title">
|
||||
扣款说明
|
||||
@@ -337,7 +421,8 @@ onMounted(() => {
|
||||
v-for="(v, index) in details.settlement"
|
||||
:key="v.id"
|
||||
class="block !flex !gap-0">
|
||||
<view class="test-24r px-[20rpx] py-[12rpx] bg-[#F7F8FA] border-1 border-[rgb(229,230,235)]">
|
||||
<view
|
||||
class="test-24r px-[20rpx] py-[12rpx] bg-[#F7F8FA] border-1 border-[rgb(229,230,235)]">
|
||||
{{ index + 1 }}.
|
||||
</view>
|
||||
<view
|
||||
@@ -355,7 +440,7 @@ onMounted(() => {
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view id="QTSM" class="rounded-[16rpx] bg-[#fff] main-details overflow-hidden !p-[24rpx]">
|
||||
<view class="w-full">
|
||||
<view class="title">
|
||||
其他说明
|
||||
@@ -391,6 +476,7 @@ onMounted(() => {
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<x-confirm-modal
|
||||
title="注意"
|
||||
|
||||
BIN
src/static/icons/backtop.png
Normal file
BIN
src/static/icons/backtop.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 178 B |
Reference in New Issue
Block a user