This commit is contained in:
2025-06-21 15:38:38 +08:00
parent be8a44b623
commit 481ef6edd4
13 changed files with 64 additions and 20 deletions

View File

@@ -383,6 +383,13 @@ const system = {
data: data data: data
}); });
}, },
confirmTask: async (data) => {
return request({
method: MethodsENUM.POST,
url: "/task/confirmTask",
data: data
});
},
} }
export default system; export default system;

View File

@@ -1,5 +1,6 @@
<script setup> <script setup>
import {ref} from 'vue'; import {ref} from 'vue';
import SY_ICON from '../static/icons/水印_预览.png';
const {src, list, imageClass, sy} = defineProps({ const {src, list, imageClass, sy} = defineProps({
src: { src: {
@@ -57,6 +58,8 @@ defineExpose({
<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">
<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"
mode="aspectFit"></image>
</swiper-item> </swiper-item>
</swiper> </swiper>

View File

@@ -1,8 +1,10 @@
<script setup> <script setup>
import {ref} from "vue";
import testIcon from '../static/images/test.png'; import testIcon from '../static/images/test.png';
import XImage from "./XImage.vue"; import XImage from "./XImage.vue";
import ICON from "../static/icons/水印_素材案例.png"; import ICON from "../static/icons/水印_素材案例.png";
const XImageRef = ref();
const {list, showSY} = defineProps({ const {list, showSY} = defineProps({
list: { list: {
type: Array, type: Array,
@@ -15,13 +17,19 @@ const {list, showSY} = defineProps({
default: false, default: false,
} }
}); });
const openPrew = () => {
XImageRef.value.open();
}
</script> </script>
<template> <template>
<view class="relative"> <view class="relative">
<x-image class="!w-[160rpx] !h-[160rpx]" mode="aspectFill" :src="list[0]" :list="list"></x-image> <x-image :sy="showSY" ref="XImageRef" class="!w-[160rpx] !h-[160rpx]" mode="aspectFill" :src="list[0]"
:list="list"></x-image>
<image v-if="showSY" class="!size-full !absolute left-0 top-0" :src="ICON" mode="aspectFill"></image> <image v-if="showSY" class="!size-full !absolute left-0 top-0" :src="ICON" mode="aspectFill"
@click="openPrew"></image>
<view class="!flex absolute left-1/2 -translate-x-1/2 bottom-[20rpx] z-10 gap-[8rpx]"> <view class="!flex absolute left-1/2 -translate-x-1/2 bottom-[20rpx] z-10 gap-[8rpx]">
<view v-for="(_v, index) in list" <view v-for="(_v, index) in list"

View File

@@ -34,7 +34,7 @@ const upload = async () => {
<template> <template>
<view class="!flex gap-[12rpx] flex-wrap"> <view class="!flex gap-[12rpx] flex-wrap">
<view class="x-upload" @click="upload" v-if="!single || single && files.length < 1"> <view class="x-upload" @click="upload" v-if="!single || single && files?.length < 1">
<image class="!size-[28rpx]" :src="ADDICON"></image> <image class="!size-[28rpx]" :src="ADDICON"></image>
<view>上传图片</view> <view>上传图片</view>
</view> </view>

View File

@@ -48,10 +48,20 @@ function useTableQuery({
rows: data.list.map(v => ({...v, key: v.id})), rows: data.list.map(v => ({...v, key: v.id})),
}; };
if (data.list.length === 0) {
if (pagination.page > 1) pagination.page--;
}
Object.assign(vo, data); Object.assign(vo, data);
vo.page = _vo.page; vo.page = _vo.page;
vo.total = _vo.total; vo.total = _vo.total;
vo.rows = [...vo.rows, ..._vo.rows]; vo.rows = [...vo.rows, ..._vo.rows];
vo.rows = Array.from(
vo.rows.reduce((map, item) => {
map.set(item.id, item);
return map;
}, new Map()).values()
)
callback && callback(vo); callback && callback(vo);
} finally { } finally {

View File

@@ -72,7 +72,9 @@ const list = computed(() => data.children.material[current.value].comment?.flatM
<view v-for="(v, index) in list"> <view v-for="(v, index) in list">
<view> <view>
评论{{ index + 1 }}: 评论{{ index + 1 }}:
<text v-if="v.pid" class="text-[rgba(134,144,156)]">回复{{ <text v-if="v.pid" class="text-[rgba(134,144,156)]">
<image class="!size-[20rpx]" src="/static/icons/msgback.png"></image>
回复{{
list.findIndex(k => k.pid === v.pid) list.findIndex(k => k.pid === v.pid)
}} }}
</text> </text>

View File

@@ -120,18 +120,24 @@ onMounted(() => {
<template v-if="data.children.back[current]"> <template v-if="data.children.back[current]">
<view class="text-[#165DFF] test-24r py-[32rpx]" v-if="data.children.back[current]?.status === 1"> <view class="text-[#165DFF] test-24r py-[32rpx]" v-if="data.children.back[current]?.status === 1">
{{ dayjs(data.children.createtime * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核通过 {{ dayjs(data.children.back[current].back_time * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核通过
</view> </view>
<template v-if="data.children.back[current]?.status === 2"> <template v-if="data.children.back[current]?.status === 2">
<view class="text-[#165DFF] test-24r py-[32rpx]" v-if="data.children.back[current]?.operate === 1"> <view class="text-[#165DFF] test-24r py-[32rpx]" v-if="data.children.back[current]?.operate === 1">
<view>{{ dayjs(data.children.createtime * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核拒绝</view> <view>{{
dayjs(data.children.back[current].back_time * 1000).format('YYYY-MM-DD HH:mm')
}}已提交审核拒绝
</view>
<view>请请点击审核沟通查看修改建议</view> <view>请请点击审核沟通查看修改建议</view>
<view> <view>
并于{{ dayjs(data.children.back[current].end_time * 1000).format('YYYY-MM-DD HH:mm') }}前点击下方重新提交本次回填 并于{{ dayjs(data.children.back[current].end_time * 1000).format('YYYY-MM-DD HH:mm') }}前点击下方重新提交本次回填
</view> </view>
</view> </view>
<view class="text-[#165DFF] test-24r py-[32rpx]" v-if="data.children.back[current]?.operate === 2"> <view class="text-[#165DFF] test-24r py-[32rpx]" v-if="data.children.back[current]?.operate === 2">
<view>{{ dayjs(data.children.createtime * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核拒绝</view> <view>{{
dayjs(data.children.back[current].back_time * 1000).format('YYYY-MM-DD HH:mm')
}}已提交审核拒绝
</view>
<view>请请点击审核沟通查看修改建议</view> <view>请请点击审核沟通查看修改建议</view>
<view> <view>
并于{{ 并于{{
@@ -142,20 +148,20 @@ onMounted(() => {
</template> </template>
<view class="text-[#165DFF] test-24r py-[32rpx]" <view class="text-[#165DFF] test-24r py-[32rpx]"
v-if="data.children.back[current]?.status === 0"> v-if="data.children.back[current]?.status === 0">
{{ dayjs(data.children.createtime * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核中 {{ dayjs(data.children.back[current].back_time * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核中
</view> </view>
<view class="text-[#165DFF] test-24r py-[32rpx]" <view class="text-[#165DFF] test-24r py-[32rpx]"
v-if="data.children.back[current]?.status === -1"> v-if="data.children.back[current]?.status === -1">
{{ dayjs(data.children.createtime * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核失败 {{ dayjs(data.children.back[current].back_time * 1000).format('YYYY-MM-DD HH:mm') }}已提交审核失败
</view> </view>
</template> </template>
<template <template
v-if="!data.children.back[current] || data.children.back[current]?.operate === 0 || data.children.back[current]?.operate === 3"> v-if="!data.children.back[current] || data.children.back[current]?.operate === 0 || data.children.back[current]?.operate === 3">
<tui-button @click="success" <tui-button @click="success"
:disabled="data.children.back[current]?.status === 0 || data.children.back[current]?.status === -1"> :disabled="data.children.back[current]?.status === 0 || data.children.back[current]?.status === -1 || data.children.back[current]?.status === 1">
{{ {{
data.children.back[current]?.status === 0 || data.children.back[current]?.status === -1 ? '已提交' : '提交' data.children.back[current]?.status === 0 || data.children.back[current]?.status === -1 || data.children.back[current]?.status === 1 ? '已提交' : '提交'
}} }}
</tui-button> </tui-button>
</template> </template>

View File

@@ -17,7 +17,13 @@ const {operate, data} = defineProps({
}); });
const abandonTask = async () => { const abandonTask = async () => {
const {msg} = await Api.system.abandonTask({id: data.id}); const {msg} = await Api.system.abandonTask({id: data.children.id});
showToast(msg);
emits('success');
}
const confirmTask = async () => {
const {msg} = await Api.system.confirmTask({id: data.children.id});
showToast(msg); showToast(msg);
emits('success'); emits('success');
} }
@@ -91,13 +97,14 @@ const abandonTask = async () => {
</view> </view>
</reply-message-modal> </reply-message-modal>
</template> </template>
<template v-if="operate===4"> <template v-if="operate===5">
<view <view
class="w-full py-[8rpx] bg-[#F2F3F5] px-[30rpx] test-22r text-[#86909C] !flex items-center gap-[10rpx] rounded-[4rpx]"> class="w-full py-[8rpx] bg-[#F2F3F5] px-[30rpx] test-22r text-[#86909C] !flex items-center gap-[10rpx] rounded-[4rpx]">
<image :src="YY_ICON" class="!size-[26rpx]"></image> <image :src="YY_ICON" class="!size-[26rpx]"></image>
提示点击下方按钮快速回复 提示点击下方按钮快速回复
</view> </view>
<view <view
@click="confirmTask"
class="py-[15rpx] !flex justify-center flex-col items-center test-28r text-[#165DFF] bg-[#E8F3FF] px-[26rpx]"> class="py-[15rpx] !flex justify-center flex-col items-center test-28r text-[#165DFF] bg-[#E8F3FF] px-[26rpx]">
我同意 我同意
<view class="w-full h-[2rpx] bg-[#E5E6EB] !my-[8rpx]"></view> <view class="w-full h-[2rpx] bg-[#E5E6EB] !my-[8rpx]"></view>

View File

@@ -106,7 +106,7 @@ const {loading, pagination, initFetchData, fetchData} = useTableQuery({
发起申述 发起申述
</x-button> </x-button>
</reply-message-modal> </reply-message-modal>
<reply-message-modal :data="data"></reply-message-modal> <reply-message-modal :data="data" @success="fetchData"></reply-message-modal>
</view> </view>
</view> </view>
</template> </template>

View File

@@ -3,6 +3,7 @@ import fmt from "../../../static/images/fmt.png";
import linkIcon from '../../../static/icons/link.png'; import linkIcon from '../../../static/icons/link.png';
import XImage from "../../../components/XImage.vue"; import XImage from "../../../components/XImage.vue";
import XSquareCarouselImage from "../../../components/XSquareCarouselImage.vue"; import XSquareCarouselImage from "../../../components/XSquareCarouselImage.vue";
import HF_ICON from "../../../static/icons/icon-wrapper.png";
const {data, home} = defineProps({ const {data, home} = defineProps({
data: { data: {
@@ -60,7 +61,7 @@ const {data, home} = defineProps({
</view> </view>
<view v-for="(v, index) in data.comment_arr.children"> <view v-for="(v, index) in data.comment_arr.children">
评论{{ index + 2 }}: 评论{{ index + 2 }}:
<text v-if="data.comment_arr.pid!==0" class="text-[#86909C]"> <text class="text-[#86909C]">
<image class="!size-[20rpx]" src="/static/icons/msgback.png"></image> <image class="!size-[20rpx]" src="/static/icons/msgback.png"></image>
回复1: 回复1:
</text> </text>

View File

@@ -41,17 +41,17 @@ const tabs = computed(() => [
{ {
name: "我的回填", name: "我的回填",
component: MyBackfill, component: MyBackfill,
isDot: details.value.children.is_back > 0, isDot: details.value?.children.is_back > 0,
}, },
{ {
name: "审核沟通", name: "审核沟通",
component: ReviewCommunication, component: ReviewCommunication,
isDot: details.value.children.is_read > 0, isDot: details.value?.children.is_read > 0,
}, },
]); ]);
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); const {data} = await Api.system.getTaskinfo(id || details.value.id, task_children_id || details.value?.children?.id);
details.value = data; details.value = data;
} }
@@ -110,9 +110,9 @@ onMounted(() => {
style="font-size: 24rpx"> style="font-size: 24rpx">
<view>发布账号</view> <view>发布账号</view>
<view class="bg-[#E5E6EB] w-[5rpx] h-auto"></view> <view class="bg-[#E5E6EB] w-[5rpx] h-auto"></view>
<view>昵称: {{ details.children.account.nickname }}</view> <view>昵称: {{ details.children?.account?.nickname }}</view>
<view class="bg-[#E5E6EB] w-[5rpx] h-auto"></view> <view class="bg-[#E5E6EB] w-[5rpx] h-auto"></view>
<view>账号: {{ details.children.account.account }}</view> <view>账号: {{ details.children?.account?.account }}</view>
</view> </view>
<view class="!grid grid-cols-4 gap-[20rpx]"> <view class="!grid grid-cols-4 gap-[20rpx]">

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB