<template> <view class="content"> <status-nav navBarTitle="工单列表" returnColor="#c2c2c2"></status-nav> <container-subgroup-two> <view slot="content" style="margin: -25rpx -25rpx -0rpx;"> <view class="project-list-input" :style="{top:statusBarHeight + 'px'}"> <input type="text" @keydown.enter="getDatalist" @confirm="getDatalist" class="int" v-model="dataPage.keyword" value="" placeholder="请输入关键字" /> <image @click="getDatalist" class="search" src="../../static/iocn/ss.png" mode=""></image> <view class="xian"></view> </view> <view class="screen"> <!-- 筛选状态查询、日期查询 --> <picker class="width30 disjcac" @change="bindPickerChange" :value="workeOrderStatusIndex" :range="array" :range-key="'name'"> <view class="li"> <view class="text" v-if="workeOrderStatus!=''">{{workeOrderStatus}}</view> <view class="text" v-else>{{array[workeOrderStatusIndex].name}}</view> <image class="img" src="../../static/iocn/xla.png" mode="aspectFill"></image> </view> </picker> <picker class="width30 disjcac" mode="date" :value="date" @change="bindDateChange"> <view class="li"> <view class="text" v-if="dataPage.order_times==''">工单日期</view> <view class="text" v-else>{{dataPage.order_times}}</view> <image class="img" src="../../static/iocn/xla.png" mode="aspectFill"></image> </view> </picker> <view class="li width30 disjcac"> <view class="text">筛选</view> <image class="imgA" src="../../static/iocn/sx.png" mode="aspectFill"></image> </view> </view> <view class="project-list"> <!-- 列表循环体 --> <view class="li" @click="projectDetailsFun(item.order_status,item.order_id,item.attributes.text,item.attributes.color)" v-for="(item,index) in dataList" :key="index"> <view class="work-order-code">工单编号:{{item.order_number}}</view> <view class="message"> <image class="img" src="../../static/del/img001.png" mode="aspectFill"></image> <view class="text"> <view class="title"> <view class="text clips1">{{item.project_name}}</view> <view class="icon" :style="{backgroundColor: item.attributes.color}">{{item.attributes.text}}</view> </view> <view class="disjb fc" style="margin-left: -20rpx;height: 70%;"> <view class="serial-number scal09"> <view class="type">#{{item.fault_type}}#</view> <view class="date">{{item.failure_time}}</view> </view> <view class="specification scal09"> 紧急程度:<view class="text"> {{item.emergency_level_view}}</view> </view> <view class="specification scal09">主负责人:{{item.principal}}</view> <view class="installation-site scal09 clips1">故障描述:{{item.failure_description}}</view> </view> </view> </view> <view class="project-list-address"> <view class="address clips2"> <image class="img" src="../../static/iocn/dz2.png" mode="aspectFill"></image> <view class="text">{{item.address}}</view> </view> <!-- 订单不等于已完成和待回访,并且访问人不是工程师 --> <view @tap.stop="hurryUpEv(item.id)" class="date" v-if="item.status!=8 && item.status!=9 && role!=4"> 催一催 <image class="img" src="../../static/iocn/ld.png" mode=""></image> </view> </view> </view> </view> <nothing-page v-if="dataList.length==0" content="暂无更多列表数据" currentType="0"></nothing-page> </view> </container-subgroup-two> </view> </template> <script> import containerSubgroupTwo from '@/components/containers/container-subgroup-two.vue'; import statusNav from '../../components/status-nav.vue'; import footTabOne from "../../components/foot-tabs/foot-tab-one.vue" export default { components: { footTabOne, statusNav, containerSubgroupTwo }, data() { const currentDate = this.getDate({ format: true }) return { statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 40, role: uni.getStorageSync('type_id'), // 1:业务员 2:表示客户 3:表示客服 4:表示工程师 date: currentDate, workeOrderStatus:'工单状态', array: [ ], workeOrderStatusIndex: 0, dataPage:{ list_rows:10, page:1, order_status:"", order_times:"", keyword:"" }, total:0, dataList:[], statusId:0 } }, onLoad(op) { if(op.statusId!=undefined) this.statusId = op.statusId; // 调用获取工单状态事件 this.getType(); }, methods: { // 获取工单状态 getType(){ this.$requst.get('/universal/api.order/order_type').then(res => { // this.$toolAll.tools.showToast(res.msg); if (res.code) { this.array=[...res.data] // 调用获取工单列表事件 if(this.statusId){ this.workeOrderStatusIndex = this.array.findIndex(item=>item.id==this.statusId); if(this.workeOrderStatusIndex!=-1) this.workeOrderStatus = ''; } this.getDatalist(); } }) }, // 获取工单列表 getDatalist(){ this.$requst.get('/universal/api.order/order_list',this.dataPage).then(res => { if (res.code==1) { this.total = res.data.total; this.dataList = res.data.data; console.log(this.dataList,"---------1" ) }else{ this.dataList = []; console.log(this.dataList,"---------2" ) } }) }, // 催一催事件 hurryUpEv(id) { this.$toolAll.tools.showToast(`已催单成功`); }, // 查看工单详情和进入接单页面 projectDetailsFun(status,id,statusText,statusColor) { if (uni.getStorageSync('type_id')==4 && status == 2) { // 工程师点击待接单工单 uni.showModal({ cancelText:'取消', cancelColor:'#999999', confirmColor:'#03affb', confirmText:'确认', content:'确认接单', success: (res) => { if(res.confirm){ this.$requst.post('/universal/api.order/accept_order',{order_id:id,is_order:1}).then(res=>{ if(res.code){ this.$toolAll.tools.showToast('接单成功'); setTimeout(()=>{ uni.navigateTo({ url: `/pages/workOrder/workOrder?id=${id}` }) },1000) } }) } } }) } else { // 客户、客服、业务员、工程师点击查看详情 uni.navigateTo({ url: `/pages/workOrder/details?id=${id}&status=${status}&statusText=${statusText}&statusColor=${statusColor}` }) } }, bindPickerChange(data) { this.workeOrderStatus = ''; this.workeOrderStatusIndex = data.detail.value; console.log( data.detail.value) this.dataPage.order_status=this.array[data.detail.value].id-0 this.getDatalist() }, bindDateChange(date) { this.dataPage.order_times=date.detail.value this.getDatalist() }, getDate(type) { const date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDate(); if (type === 'start') { year = year - 60; } else if (type === 'end') { year = year + 2; } month = month > 9 ? month : '0' + month; day = day > 9 ? day : '0' + day; console.log(year, month, day) return `${year}-${month}-${day}`; } } } </script> <style scoped> page { background-color: #F7F7F7; } .project-list-input .xian { width: 3rpx; height: 35rpx; position: absolute; background-color: #EAEAEA; right: 100rpx; top: 50%; margin-top: -14rpx; } .project-list-input { width: 100%; height: 114rpx; position: fixed; z-index: 2; padding: 20rpx 16rpx; box-sizing: border-box; background-color: #FFFFFF } .project-list-input .int { width: 100%; height: 100%; background-color: #F7F7F7; padding: 0 25rpx; box-sizing: border-box; border-radius: 36rpx; } .project-list-input .search { width: 28rpx; height: 28rpx; position: absolute; right: 43rpx; top: 50%; margin-top: -14rpx; } .screen { display: flex; justify-content: space-around; padding: 25rpx 20rpx; border-bottom: 2rpx solid #E6E6E6; border-top: 2rpx solid #E6E6E6; margin: 20rpx 0rpx; margin-top: 57px; } .screen .li { display: flex; align-items: center; } .screen .li .text { font-size: 32rpx; color: #333333; margin-right: 10rpx; } .screen .li .img { width: 14rpx; height: 8rpx; position: relative; z-index: 1; } .screen .li .imgA { width: 24rpx; height: 23rpx; } .project-list .li { width: 710rpx; box-sizing: border-box; background-color: #FFFFFF; position: relative; margin: auto; margin-bottom: 20rpx; padding: 33rpx 23rpx; } .project-list .li .iconBer { background-image: url(../../static/iocn/za.png); } .project-list .li .iconBera { background-image: url(../../static/iocn/zaa.png); } .project-list .li .message { display: flex; } .project-list .li .message .img { width: 230rpx; margin-right: 11rpx; height: 180rpx; } .project-list .li .message .text { flex: 1; } .project-list .li .message .text .title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 1; overflow: hidden; text-overflow: ellipsis; word-wrap: break-word; word-break: break-all; margin-bottom: 5rpx; font-size: 24rpx; display: flex; align-items: center; color: #333333; font-weight: bold; } .project-list .li .message .text .title .text { width: 60%; } .project-list .li .message .text .title .icon { font-size: 24rpx; width: 120rpx; height: 40rpx; background-color: #ff5400; border-radius: 50rpx; color: #FFFFFF; display: flex;justify-content: center;align-items: center; } .project-list .li .message .text .title .icon1 { background-color: #00a2e9; } .project-list .li .message .text .title .icon3 { background-color: #009a44; } .project-list .li .message .serial-number { color: #9b9ba3; font-size: 24rpx; margin-bottom: 10rpx; display: flex; } .project-list .li .message .serial-number .type { margin-right: 60rpx; } .project-list .li .message .specification { color: #9b9ba3; font-size: 24rpx; margin-bottom: 10rpx; display: flex; } .project-list .li .message .specification .text { color: #e90000; } .project-list .li .message .installation-site { color: #9b9ba3; font-size: 24rpx; } .project-list-address { display: flex; margin-top: 15rpx; color: #9b9ba3; align-items: center; justify-content: space-between; width: 100%; } .project-list-address .text { font-size: 22rpx; flex: 1; } .project-list-address .date { font-size: 24rpx; text-align: right; margin-left: 20rpx; align-items: center; display: flex; color: #e90000; } .project-list-address .date .img { width: 26rpx; height: 24rpx; margin-left: 5rpx; } .project-list-address .address .img { width: 22rpx; height: 30rpx; margin-right: 10rpx; } .project-list-address .address { display: flex; align-items: center; width: 80%; } .project-list .work-order-code { font-size: 24rpx; color: #9b9ba3; margin-bottom: 26rpx; } .pickerDate { width: 300rpx; height: 300rpx; } </style>