merchant-app/pages/components/merchantTask.vue
2024-12-27 13:47:01 +08:00

692 lines
16 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- pages/index/index.wxml -->
<view :style="{marginTop: titleTop + 'px', height: 'calc(100% - ' + titleTop+'px)' }" class="sy-container">
<view class="topView" @click="my()">
<!-- <view class="headImg" >{{realName.charAt(0)}}</view>-->
<view class="headImg"></view>
</view>
<view class="title">任务</view>
<view class="search-container" >
<view class="search">
<uni-icons class="icon" type="search" size="30" @click="search"></uni-icons>
<input class="search-input" id="search-input" v-model="searchVal" type="text" placeholder="请输入任务名称" maxlength="30" @confirm="search" @input="search"/>
</view>
</view>
<view class="filter">
<view class="select" @click="openSelect">
{{nowSelect}}
<view class="more-icon"></view>
</view>
<view class="dateSelect">
<uni-datetime-picker type="date" v-model="queryParams.taskDate" @maskClick="maskClick" @change="timeChange($event)">
{{queryParams.taskDate == null ? "全部日期" : queryParams.taskDate}}
<view v-if="queryParams.taskDate == null" class="more-icon"></view>
</uni-datetime-picker>
<uni-icons v-if="queryParams.taskDate != null" class="icon more-icon2" type="closeempty" size="10" @click="resetTime"></uni-icons>
<!-- <view type="date" v-model="single" @click="maskClick" @change="timeChange($event)">全部日期</view>-->
</view>
<!-- <uni-icons class="icon" type="arrow-down" size="10"></uni-icons>-->
<!-- <view class="dateSelect" @maskClick="maskClick">-->
<!-- 全部日期-->
<!-- <uni-icons class="icon" type="arrow-down" size="10"></uni-icons>-->
<!-- </view>-->
</view>
<uni-popup style="z-index: 10000" ref="popup" type="bottom" border-radius="10px 10px 0 0">
<view class="selectContext">
<view class="select-item" @click="filter(0)">全部任务</view>
<view class="select-item" @click="filter(1)">进行中的任务</view>
<view class="select-item" @click="filter(2)">已结束的任务</view>
</view>
</uni-popup>
<scroll-view class="list"
:scroll-top="scrollTop"
scroll-y="true"
:refresher-enabled="isOpenRefresh"
:refresher-triggered="triggered"
@refresherrefresh="refresh"
@scrolltoupper="upper"
@scroll="scroll"
@scrolltolower="loadMore"
@refresherpulling="onPulling"
>
<view class="item" @click="goDetails(task)" v-for="(task, index) in taskList" :key="index">
<view class="line1">
<view class="name-status">
<view class="task-name">
{{task.taskName}}
</view>
<view class="status-base" :class="toDate(task.taskDate) == '已结束' ? 'task-status-end' : 'task-status'"/>
</view>
<view class="price">
<view class="num">¥{{task.dayPrice}}</view>
<view class="unit">/</view>
</view>
</view>
<view class="line3">
<view class="num-container" style="background-color: #f1f0f0;">
<view class="num-label">
用工日期
</view>
<view class="num">
{{task.taskDate}}
</view>
</view>
<view class="num-container" style="background-color: #e4e4fd;">
<view class="num-label">
用工人数
</view>
<view class="num">
{{task.useNum}}
</view>
</view>
<view class="num-container" style="background-color: #fce6ea;">
<view class="num-label">
报名人数
</view>
<view class="num">
{{task.baomingNum}}
</view>
</view>
<view class="num-container" style="background-color: #def9fc;">
<view class="num-label">
点名人数
</view>
<view class="num">
{{task.signNum + task.noSignNum}}
</view>
</view>
</view>
<view class="line4">
<view class="date-label">
<view class="icon"></view>
发布时间: {{task.createTime}}
</view>
<view class="button"></view>
</view>
</view>
<view v-if="showLoading" class="load-more">加载中...</view>
<view v-if="showNoMore" class="no-more">没有更多数据了</view>
</scroll-view>
</view>
</template>
<script>
import { getTaskList } from "@/api/task";
// import { getCodeImg } from '@/api/login'
import { verifyToken } from '@/api/login'
export default {
props: {
titleTop: {type: Number},
nowTab1: {type: Number},
statusBarHeight: {type: Number}
},
data() {
return {
queryParams: {
pageNum: 1,
pageSize: 10,
dateStatus: 0,
taskName: null,
taskDate: null,
},
taskList: [],
nowSelect: "全部任务",
searchVal: null,
realName: "",
// 是否显示加载更多的loading
showLoading: false,
// 是否显示无更多数据提示
showNoMore: true,
triggered: false,
isOpenRefresh: true,
containerScrollTop: 0,
};
},
created: function() {
this.realName = this.$store.state.user.nickName
verifyToken().then(response => {
if (response.code == 401){
this.$store.state.user.roleType = 1;//跳转到无状态的劳动者任务列表页
uni.reLaunch({
url: '/pages/index'
});
}else{
this.getList();
}
})
},
methods:{
reload(){
this.refresh();
},
openSelect(){
// 通过组件定义的ref调用uni-popup方法 ,如果传入参数 type 属性将失效 ,仅支持 ['top','left','bottom','right','center']
this.$refs.popup.open('bottom')
},
closeSelect(){
// 通过组件定义的ref调用uni-popup方法 ,如果传入参数 type 属性将失效 ,仅支持 ['top','left','bottom','right','center']
this.$refs.popup.close()
},
filter(type){
this.closeSelect()
this.queryParams.dateStatus = type;
if (type == 0){
this.nowSelect = "查看全部";
}else if (type == 1){
this.nowSelect = "进行中的任务";
}else if (type == 2){
this.nowSelect = "已结束的任务";
}
this.queryParams.pageNum = 1;
this.getList();
},
timeChange(e) {
this.single = e;
console.log("-change事件:", e);
this.queryParams.taskDate = e;
this.queryParams.pageNum = 1;
this.getList();
},
toDate(str){
var strArray = str.split(" ");
var strDate = strArray[0].split("-");
// var strTime = strArray[1].split(":");
var taskFinishTime = new Date(strDate[0], (strDate[1] - parseInt(1)), (strDate[2]));//任务结束的晚上0点
taskFinishTime.setDate(taskFinishTime.getDate() + 1);
// console.log("date", taskFinishTime, this.getTomorrowZeroTime())
return new Date() > taskFinishTime ? "已结束" : "进行中"
},
getTomorrowZeroTime() {
const now = new Date(); // 获取当前时间
const tomorrow = new Date(now); // 复制当前时间对象
tomorrow.setDate(now.getDate() + 1); // 日期加1得到明天
tomorrow.setHours(0, 0, 0, 0); // 将小时、分钟、秒和毫秒都设置为0
return tomorrow;
},
getList() {
if (this.showNoMore && this.queryParams.pageNum > 1){
return
}
var that = this;
getTaskList(this.queryParams).then(response => {
if (that.queryParams.pageNum > 1){
that.taskList = that.taskList.concat(response.rows);
}else{
that.taskList = response.rows;
}
that.queryParams.pageNum++;
if (response.rows.length < this.queryParams.pageSize){
that.showNoMore = true;
}else{
that.showNoMore = false;
}
that.showLoading = false;
that.triggered = false;
that.total = response.total;
console.log(response)
});
},
search(){
// this.queryParams.taskName = e.detail.value;
// this.queryParams.taskName = $(".search-input").val();
this.queryParams.taskName = this.searchVal;
this.queryParams.pageNum = 1;
this.getList();
},
goDetails(task){
uni.navigateTo({
url: "taskDetails?id=" + task.id
})
},
my(){
uni.navigateTo({
url: "my"
})
},
resetTime(){
this.queryParams.taskDate = null;
this.queryParams.pageNum = 1;
this.getList();
},
onPageScroll(e){
console.log(e.scrollTop)
this.containerScrollTop = e.scrollTop
if (this.containerScrollTop > 0){
this.isOpenRefresh = false
}else{
this.isOpenRefresh = true
}
},
onReachBottom(e){
console.log("onReachBottom", e)
if (this.showLoading || this.showNoMore) {
return;
}
// 显示加载更多的loading
this.showLoading = true;
// 请求数据
this.getList();
},
// 刷新函数
refresh() {
// 请求数据
this.triggered = true;
this.queryParams.pageNum = 1;
this.getList();
},
upper(){
// console.log("upper")
},
scroll(e){
// console.log("scroll", e.detail)
},
onPulling(e) {
// console.log("onpulling", e.detail);
if (e.detail.dy < 8) return // 防止上滑页面也触发下拉
this.triggered = true;
},
// 加载更多函数
loadMore() {
// console.log("loadMore")
// 判断是否正在加载更多或已经没有更多数据
if (this.showLoading || this.showNoMore) {
return;
}
// 显示加载更多的loading
this.showLoading = true;
// 请求数据
this.getList();
},
}
}
</script>
<style scoped lang='scss'>
page{
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
html, body {
background-color: #ffffff;
height: 100%;
}
.load-more, .no-more {
display: grid;
place-content: center;
padding: 10rpx;
color: #999;
height: 100rpx;
}
/*.uni-datetime-picker-reset-btn{*/
/* background-color: #ffffff !important;*/
/* color: #1f2d3d !important;*/
/* border: #1f2d3d 1rpx solid;*/
/*}*/
/*.uni-datetime-picker--btn{*/
/* width: 40%;*/
/* margin-left: auto;*/
/* margin-right: auto;*/
/*}*/
/*.uni-date-changed{*/
/* display: flex;*/
/* justify-items: center;*/
/*}*/
.sy-container{
position: relative;
/*height: calc(100% - 47px);*/
.title {
position: absolute;
top: 0;
font-size: 25rpx;
color: #000000;
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 90rpx;
z-index: 0;
}
.topView{
display: flex;
width: 120rpx;
padding: 0 10rpx 0 20rpx;
z-index: 1;
position: relative;
.headImg{
width: 70rpx;
height: 70rpx;
background-image: url("http://8.155.21.176:9000/yonggong/m-images/wode.png");
background-size: 100% 100%;
}
}
.search-container{
margin-top: 20rpx;
border-top: 1rpx solid #dbdbdb;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx 30rpx 0rpx 30rpx;
height: 100rpx;
.search{
width: 100%;
height: 80rpx;
border-radius: 450px;
border: 1px solid #6c6c6c;
display: flex;
align-items: center;
/*justify-content: center;*/
.icon{
width: 15%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.search-input{
width: 82%;
}
}
}
.filter{
display: flex;
align-items: center;
justify-content: center;
margin-top: 10rpx;
width: 80%;
height: 80rpx;
margin-right: auto;
margin-left: auto;
.select{
width: 50%;
height: 30rpx;
display: flex;
align-items: center;
justify-content: center;
color: #939393;
font-size: 30rpx;
font-weight: 600;
}
.more-icon{
width: 12rpx;
height: 12rpx;
background-image: url("http://8.155.21.176:9000/yonggong/m-images/index/more-icon.png");
background-size: 100% 100%;
margin-left: 5rpx;
margin-top: 3rpx;
}
.more-icon2{
margin-left: 0rpx;
}
.dateSelect{
width: 50%;
display: flex !important;
align-items: center !important;
justify-content: center !important;
.uni-date{
.uni-date-editor{
display: flex;
align-items: center;
justify-content: center;
color: #939393;
font-size: 30rpx;
font-weight: 600;
}
}
}
}
.selectContext{
background-color: #ffffff;
width: 100%;
/*height: 500rpx;*/
margin-bottom: 0px;
border-radius: 10rpx 10rpx 0 0;
.select-item{
height: 100rpx;
width: 100%;
display: grid;
place-items: center;
font-size: 35rpx;
border-bottom: 1rpx solid #dbdbdb;
}
.select-item:last-child {
border-bottom: none;
}
}
.vue-ref{
padding-bottom: 0px !important;
}
.uni-date-x{
background-color: transparent !important;
color: #000000 !important;
width: 80%;
justify-content: right;
}
.uni-date__x-input{
display: flex !important;
align-items: center !important;
justify-content: center !important;
/*justify-content: flex-end !important;*/
/*margin-left: auto; !* 推动元素到右边 *!*/
}
.uni-date__icon-clear{
width: 20%;
}
.uni-date-x--border{
border: 0 solid #dbdbdb !important;
}
.icon-calendar{
display: none; /* 隐藏图标 */
}
/*.uni-date__x-input{*/
/* display: flex;*/
/* align-items: center;*/
/* justify-content: center;*/
/*}*/
.list{
padding: 0rpx 15rpx 0rpx 15rpx;
/*background-color: #e3e3e3;*/
height: calc(100% - 270rpx);
background-image:url('http://8.155.21.176:9000/yonggong/images/bg.png');
background-size: 100% 100%;
.item{
background-color: #FFFFFF;
width: 95%;
border-radius: 20rpx;
box-shadow: 2px 2px 5px rgba(0,0,0,0.5);
padding: 10rpx 25rpx 35rpx 25rpx;
margin: 20rpx auto 20rpx auto;
.line1{
height: 100rpx;
display: flex;
align-items: center;
/*justify-content: center;*/
/*border-bottom: 1rpx solid #dbdbdb;*/
.name-status{
display: flex;
align-items: center;
.task-name{
font-size: 33rpx;
font-weight: 590;
max-width: 350rpx; /* 设置div的宽度 */
white-space: nowrap; /* 防止文本换行 */
overflow: hidden; /* 隐藏超出div的内容 */
text-overflow: ellipsis; /* 显示省略号来代表被截断的内容 */
}
.status-base{
margin-left: 5rpx;
width: 80rpx;
height: 30rpx;
background-size: 100% 100%;
}
.task-status{
background-image: url("http://8.155.21.176:9000/yonggong/m-images/index/task-status-1.png");
}
.task-status-end{
background-image: url("http://8.155.21.176:9000/yonggong/m-images/index/task-status-2.png");
}
}
.day-price{
margin-left: auto;
font-size: 28rpx;
}
.price{
margin-left: auto;
color: #FF0000;
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
display: flex;
align-items: flex-end;
height: 38rpx;
.num{
font-weight: 650;
font-size: 38rpx;
line-height: 38rpx;
}
.unit{
font-weight: 450;
font-size: 20rpx;
}
}
}
.line3{
width: 100%;
display: flex;
align-items: center;
justify-content: center;
padding: 15rpx 20rpx 0 20rpx;
.num-container{
width: 24%;
display: grid;
place-items: center;
margin-right: 1.33%;
border-radius: 10rpx;
padding: 15rpx;
.num-label{
width: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 23rpx;
color: #979696;
}
.num{
width: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 20rpx;
color: #131313;
overflow: hidden; /* 隐藏超出div的内容 */
text-overflow: ellipsis; /* 显示省略号来代表被截断的内容 */
margin-top: 10rpx;
}
}
.num-container:last-child {
margin-right: 0;
}
}
.line4{
display: flex;
align-items: center;
/*justify-content: center;*/
margin-top: 40rpx;
height: 65rpx;
.date-label{
display: flex;
align-items: center;
border-top: #f1f1f1 solid 1rpx;
height: 100%;
width: 70%;
.icon{
width: 20rpx;
height: 20rpx;
background-image: url("http://8.155.21.176:9000/yonggong/m-images/index/clock.png");
background-size: 100% 100%;
margin-right: 5rpx;
}
font-size: 20rpx;
color: #bfbfbf;
}
.button{
background-image: url("http://8.155.21.176:9000/yonggong/m-images/index/dm-btn.png");
background-size: 100% 100%;
margin-left: 8rpx;
width: 160rpx;
height: 65rpx;
margin-left: auto; /* 推动元素到右边 */
}
}
}
}
}
</style>