cxc-szcx-uniapp/pages/task/todotask.vue

264 lines
5.4 KiB
Vue

<template>
<view :class="[{'gray':store.isgray==1}]">
<view class="nav"></view>
<view class="placeholder"></view>
<view class="content">
<extendCom title="我的任务" img="process" :list="todoArr" :total="todoTotal" type="0"></extendCom>
<extendCom title="历史任务" img="done" :list="doneArr" :total="doneTotal" type="1"></extendCom>
<extendCom title="本人发起" img="self" :list="selfArr" :total="selfTotal" type="2"></extendCom>
</view>
</view>
</template>
<script setup>
const res = wx.getSystemInfoSync();
const statusHeight = res.statusBarHeight; //状态栏高度
const cusnavbarheight = (statusHeight + 44) + "px";
import extendCom from '../../bpm/extendCom.vue';
import {
ref
} from 'vue';
import {
taskListApi,
myApplyProcessListApi,
taskHistoryListApi
} from '@/api/api.js';
import {
onShow,
onReachBottom,
onPullDownRefresh
} from '@dcloudio/uni-app';
import {
useStore
} from '@/store'
const store = useStore()
onShow(() => {
initArr()
taskList()
taskHistoryList()
myApplyProcessList()
uni.removeTabBarBadge({ // 移除角标
index: '1',
});
})
const todoArr = ref([])
const todoTotal = ref(0)
/**待办事项*/
const taskList = () => {
taskListApi({
pageNo: 1,
pageSize: 4,
_t: new Date().getTime()
}).then((res) => {
if (res?.success) {
if (res?.result?.total > 4) {
taskListApi({
pageNo: 1,
pageSize: res?.result?.total,
_t: new Date().getTime()
}).then((res1) => {
console.log('---', res1)
if (res1?.success) {
todoArr.value = [...todoArr.value, ...handleData(res1?.result?.records)]
todoTotal.value = res1?.result?.total
}
}).catch((err) => {
console.log('err', err);
})
} else {
todoArr.value = [...todoArr.value, ...handleData(res?.result?.records)]
todoTotal.value = res?.result?.total
}
}
}).catch((err) => {
console.log(err);
})
}
const doneArr = ref([])
const doneTotal = ref(0)
/**已办事项*/
const taskHistoryList = () => {
taskHistoryListApi().then((res) => {
if (res.success) {
if (res.result.total > 4) {
taskHistoryListApi({
pageNo: 1,
pageSize: res.result.total,
_t: new Date().getTime()
}).then((res1) => {
if (res1.success) {
doneArr.value = [...doneArr.value, ...handleData(res1.result.records)]
doneTotal.value = res1.result.total
}
}).catch((err) => {
console.log(err);
})
} else {
doneArr.value = [...doneArr.value, ...handleData(res.result.records)]
doneTotal.value = res.result.total
}
}
}).catch((err) => {
console.log(err);
})
}
const selfArr = ref([])
const selfTotal = ref(0)
/**本人发起*/
const myApplyProcessList = () => {
myApplyProcessListApi().then((res) => {
if (res.success) {
if (res.result.total > 4) {
myApplyProcessListApi({
pageNo: 1,
pageSize: res.result.total,
_t: new Date().getTime()
}).then((res1) => {
if (res1.success) {
selfArr.value = [...selfArr.value, ...handleData(res1.result.records)]
selfTotal.value = res1.result.total
}
}).catch((err) => {
console.log(err);
})
} else {
selfArr.value = [...selfArr.value, ...handleData(res.result.records)]
selfTotal.value = res.result.total
}
}
}).catch((err) => {
console.log(err);
})
}
const handleData = (titlearr) => {
let titleArr = titlearr.length ? titlearr.map(item => item.processDefinitionName || item
.prcocessDefinitionName) : []
let res = titleArr.reduce((obj, title) => {
if (title in obj) {
obj[title]++
} else {
obj[title] = 1
}
return obj
}, {})
return Object.entries(res).map(([k, v]) => ({
title: k,
num: v
}))
}
const initArr = () => {
todoArr.value = []
selfArr.value = []
doneArr.value = []
todoTotal.value = 0
doneTotal.value = 0
selfTotal.value = 0
}
let loading = false
onPullDownRefresh(() => {
loading = false
initArr()
taskList()
taskHistoryList()
myApplyProcessList()
uni.stopPullDownRefresh()
})
</script>
<style lang="scss" scoped>
.drag {
background: #FFFFFF;
box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.5);
border-radius: 16rpx;
margin: 24rpx 30rpx 0 30rpx;
.title {
font-size: 28rpx;
color: #333333;
padding: 30rpx 0 0 30rpx;
}
}
.inner {
image {
width: 98rpx;
height: 98rpx;
background-color: #efefef;
}
.text {
font-size: 28rpx;
color: #333333;
margin-top: 20rpx;
}
}
.placeholder {
height: v-bind(cusnavbarheight);
}
.nav {
width: calc(100% - 60rpx);
padding: 0 30rpx;
height: v-bind(cusnavbarheight);
font-size: 24rpx;
color: #FFFFFF;
position: fixed;
top: 0;
left: 0;
z-index: 99;
background-image: url('../../static/my/navbg.png');
background-repeat: no-repeat;
background-size: 750rpx 458rpx;
}
.content {
padding: 0 30rpx 20rpx 30rpx;
}
.list {
margin-bottom: 24rpx;
.item {
background: #FFFFFF;
box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.5);
border-radius: 16rpx;
padding: 30rpx 0;
margin-top: 24rpx;
.title {
font-size: 28rpx;
color: #333333;
padding-left: 30rpx;
}
}
image {
width: 98rpx;
height: 98rpx;
}
.info_box {
flex-wrap: wrap;
.info {
margin-top: 40rpx;
width: 25%;
.text {
font-size: 28rpx;
color: #333333;
margin-top: 20rpx;
}
}
}
}
</style>