320 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | ||
|   <view class="container">
 | ||
|     <view class="header">
 | ||
|       <view class="searchBox">
 | ||
|         <input class="searchInput" type="text" v-model="searchText" placeholder="车牌号查询工单" placeholder-style="font-size: 28rpx">
 | ||
|         <text class="searchBtn" @click="onRefresherrefresh">搜索</text>
 | ||
|         <text class="searchBtn" @click="clearText">清空</text>
 | ||
|       </view>
 | ||
|     </view>
 | ||
|     <view class="body">
 | ||
|       <view class="tabList">
 | ||
|         <view v-for="(item, index) in tabList" :key="index" :class="{actived: item.id === activeKey}" class="tabItem"
 | ||
|               @click.stop="changeTabFun(item.id)">
 | ||
|           {{ item.title }}
 | ||
|           <view v-if="activeKey === item.id" class="activeLine"></view>
 | ||
|         </view>
 | ||
|       </view>
 | ||
|       <view class="orderList">
 | ||
|         <scroll-view scroll-y="true" style="height: 100%" class="itemContent" @scrolltolower="onReachBottomCus"
 | ||
|                      refresher-enabled @refresherrefresh="onRefresherrefresh" :refresher-triggered="isTriggered">
 | ||
|           <order-card v-for="(item, index) in orderList" :key="index" :order="item" @childEvent="onRefresherrefresh" @startWork="startWork"></order-card>
 | ||
|           <view style="text-align: center" v-if="orderList.length==0">
 | ||
|             <image class=""  src="@/static/images/nothing.png" ></image>
 | ||
|           </view>
 | ||
|         </scroll-view>
 | ||
|       </view>
 | ||
|     </view>
 | ||
|     <tabBarVue msg="2"></tabBarVue>
 | ||
|   </view>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| import VNavigationBar from '@/components/VNavigationBar.vue'
 | ||
| import tabBarVue from '@/components/tabBar/tabBar.vue'
 | ||
| import OrderCard from "@/components/repairCard.vue";
 | ||
| import request from '@/utils/request';
 | ||
| import {formatTimestamp,getOrderStatusText,builderOrder,saveTicketsRecords} from "@/utils/utils";
 | ||
| import {
 | ||
|   getToken,
 | ||
|   getUserInfo,
 | ||
|   getStrData,
 | ||
|   getTenantId
 | ||
| } from '@/utils/auth'
 | ||
| 
 | ||
| export default {
 | ||
|   components: {
 | ||
|     OrderCard,
 | ||
|     tabBarVue,
 | ||
|     VNavigationBar
 | ||
|   },
 | ||
|   data() {
 | ||
|     return {
 | ||
|       searchText:"",
 | ||
|       payShow: false,
 | ||
|       activeKey: 0,
 | ||
|       pageNo: 1,
 | ||
|       pageSize: 10,
 | ||
|       total: 0,
 | ||
|       //下来刷新状态
 | ||
|       isTriggered:false,
 | ||
|       imageUrl: '',
 | ||
|       tabList: [
 | ||
|         {
 | ||
|           id: 0,
 | ||
|           title: '待处理'
 | ||
|         },
 | ||
|         {
 | ||
|           id: 1,
 | ||
|           title: '全部'
 | ||
|         },
 | ||
|       ],
 | ||
|       orderList: [
 | ||
|       ],
 | ||
|     }
 | ||
|   },
 | ||
|   onShow() {
 | ||
|     if(!getToken()){
 | ||
|       uni.reLaunch({
 | ||
|         url: '/pages/login/login'
 | ||
|       })
 | ||
|     }else{
 | ||
|       //直接取缓存中的用户信息
 | ||
|       this.userInfo = getUserInfo()
 | ||
|       this.onRefresherrefresh()
 | ||
|     }
 | ||
|   },
 | ||
|   methods: {
 | ||
|     /**
 | ||
|      * 上滑加载数据
 | ||
|      */
 | ||
|     onReachBottomCus() {
 | ||
|       //判断 如果页码*页容量大于等于总条数,提示该页数据加载完毕
 | ||
|       if (this.pageNo * this.pageSize >= this.total) {
 | ||
|         uni.$u.toast('没有更多数据了')
 | ||
|         return
 | ||
|       }
 | ||
|       //页码+1,调用获取数据的方法获取第二页数据
 | ||
|       this.pageNo++
 | ||
|       //此处调用自己获取数据列表的方法
 | ||
|       this.getOrderList()
 | ||
|     },
 | ||
|     /**
 | ||
|      * 下拉刷新数据
 | ||
|      */
 | ||
|     onRefresherrefresh(){
 | ||
|       this.isTriggered = true
 | ||
|       this.pageNo = 1
 | ||
|       this.total = 0
 | ||
|       this.orderList = []
 | ||
|       this.getOrderList()
 | ||
|     },
 | ||
|     /**
 | ||
|      * 清空
 | ||
|      */
 | ||
|     clearText(){
 | ||
|       this.searchText = ""
 | ||
|       this.onRefresherrefresh()
 | ||
|     },
 | ||
|     /**
 | ||
|      * 开始施工
 | ||
|      */
 | ||
|     startWork(id){
 | ||
|       let paramsObj = {ticketId:id}
 | ||
|       //先查当前用户在本工单下有几个维修项目
 | ||
|       request({
 | ||
|         url: '/admin-api/repair/titem/listProject',
 | ||
|         method: 'get',
 | ||
|         params:paramsObj
 | ||
|       }).then((res) => {
 | ||
|         console.log(res)
 | ||
|         if (res.code == 200 && res.data.length>0) {
 | ||
|           if(res.data.length==1){
 | ||
|             //只有1个,直接开始施工
 | ||
|             this.startWorkRequest(id,"02",res.data[0].id,"02","kssg","开始施工")
 | ||
|           }else{
 | ||
|             uni.showActionSheet({
 | ||
|               itemList: res.data.map(m => m.itemName),
 | ||
|               success: ({
 | ||
|                           tapIndex
 | ||
|                         }) => {
 | ||
|                 this.startWorkRequest(id,"02",res.data[tapIndex].id,"02","kssg","开始施工")
 | ||
|               }
 | ||
|             })
 | ||
|           }
 | ||
|         }else{
 | ||
|           uni.showToast({
 | ||
|             title: '操作失败,请联系管理员',
 | ||
|             icon: 'none'
 | ||
|           })
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
|     /**
 | ||
|      * 开始施工请求后台
 | ||
|      */
 | ||
|     async startWorkRequest(id,ticketsWorkStatus,itemId,itemStatus,recordType,remark){
 | ||
|       try {
 | ||
|         const result = await saveTicketsRecords(id,ticketsWorkStatus,itemId,itemStatus,recordType,remark,null);
 | ||
|         console.error("result",result);
 | ||
|         this.onRefresherrefresh()
 | ||
|       } catch (error) {
 | ||
|         console.error(error);
 | ||
|       }
 | ||
|     },
 | ||
|     getOrderList(){
 | ||
|       let paramsObj = {pageNo: this.pageNo, pageSize: this.pageSize, isFinish: "0"}
 | ||
|       console.log("this.searchText",this.searchText)
 | ||
|       if(''!=this.searchText){
 | ||
|         paramsObj['ticketNo'] = this.searchText
 | ||
|       }
 | ||
|       if(1==this.activeKey){
 | ||
|         //查所有订单
 | ||
|         paramsObj['selectType'] = "all"
 | ||
|       }
 | ||
|       request({
 | ||
|         url: '/admin-api/repair/tickets/pageType',
 | ||
|         method: 'get',
 | ||
|         params:paramsObj
 | ||
|       }).then((res) => {
 | ||
|         console.log(res)
 | ||
|         if (res.code == 200) {
 | ||
|           let thisPageRecords = []
 | ||
|           if(res.data && res.data.hasOwnProperty("records")){
 | ||
|             for (let i = 0; i < res.data.records.length; i++) {
 | ||
|               let order = res.data.records[i]
 | ||
|               let viewOrder = builderOrder(order)
 | ||
|               if(order.booking){
 | ||
|                 viewOrder['appointDate'] = formatTimestamp(order.createTime)
 | ||
|               }
 | ||
|               let projectList = []
 | ||
|               if(order.itemList){
 | ||
|                 for (let j = 0; j < order.itemList.length; j++) {
 | ||
|                   let itemObj = order.itemList[j]
 | ||
|                   if("01"==itemObj.itemType){
 | ||
|                     projectList.push({
 | ||
|                       id:itemObj.id,
 | ||
|                       name:itemObj.itemName
 | ||
|                     })
 | ||
|                   }
 | ||
|                 }
 | ||
|               }
 | ||
|               viewOrder['projectList'] = projectList
 | ||
|               thisPageRecords.push(viewOrder)
 | ||
|             }
 | ||
|           }
 | ||
|           //判断 如果获取的数据的页码不是第一页,就让之前赋值获取过的数组数据 concat连接 刚获取的第n页数据
 | ||
|           if (this.pageNo != 1) {
 | ||
|             this.orderList = this.orderList.concat(thisPageRecords)
 | ||
|           } else {
 | ||
|             this.orderList = thisPageRecords
 | ||
|           }
 | ||
|           //将获取的总条数赋值
 | ||
|           this.total = res.data.total
 | ||
|           this.isTriggered = false
 | ||
|         }
 | ||
|       })
 | ||
|     },
 | ||
|     changeTabFun(id) {
 | ||
|       this.activeKey = id
 | ||
|       this.onRefresherrefresh()
 | ||
|     },
 | ||
|     gotoDetail(row) {
 | ||
|       if (row.goodsType === '2') {
 | ||
|         uni.navigateTo({
 | ||
|           url: '/pages-order/orderDetail/orderDetail?ticketsId=' + row.goodsId
 | ||
|         })
 | ||
|       } else {
 | ||
|         uni.navigateTo({
 | ||
|           url: '/pages-order/orderDetail/orderDetail'
 | ||
|         })
 | ||
|       }
 | ||
|     },
 | ||
|   }
 | ||
| }
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="less" scoped>
 | ||
| .container {
 | ||
|   height: 100%;
 | ||
|   background: #F3F5F7;
 | ||
|   display: flex;
 | ||
|   flex-direction: column;
 | ||
|   color: #333333;
 | ||
| 
 | ||
|   .header {
 | ||
|     padding: 40rpx 32rpx 20rpx;
 | ||
|     background-color: #fff;
 | ||
| 
 | ||
|     .searchBox {
 | ||
|       background: #F3F5F7;
 | ||
|       padding: 20rpx 32rpx;
 | ||
|       border-radius: 12rpx 12rpx 12rpx 12rpx;
 | ||
|       display: flex;
 | ||
|       align-items: center;
 | ||
|       column-gap: 12rpx;
 | ||
|       .searchInput {
 | ||
|         flex: 1;
 | ||
|         width: 0;
 | ||
|       }
 | ||
|       .searchBtn {
 | ||
|         font-weight: 500;
 | ||
|         font-size: 28rpx;
 | ||
|         color: #0174F6;
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .body {
 | ||
|     flex: 1;
 | ||
|     height: 0;
 | ||
|     padding: 24rpx 32rpx;
 | ||
|     overflow: auto;
 | ||
|   }
 | ||
| 
 | ||
|   .tabList {
 | ||
|     background: #FFFFFF;
 | ||
|     border-radius: 12rpx 12rpx 12rpx 12rpx;
 | ||
|     display: flex;
 | ||
|     align-items: center;
 | ||
|     padding: 0 40rpx;
 | ||
| 
 | ||
|     .tabItem {
 | ||
|       padding: 30rpx;
 | ||
|       flex: 1;
 | ||
|       z-index: 9999999;
 | ||
|       text-align: center;
 | ||
|       position: relative;
 | ||
|       font-size: 24rpx;
 | ||
| 
 | ||
|       &.actived {
 | ||
|         color: #0174F6;
 | ||
|       }
 | ||
| 
 | ||
|       .activeLine {
 | ||
|         position: absolute;
 | ||
|         bottom: 0;
 | ||
|         left: 50%;
 | ||
|         transform: translateX(-50%);
 | ||
|         width: 96rpx;
 | ||
|         height: 6rpx;
 | ||
|         background: #0174F6;
 | ||
|         border-radius: 4rpx 4rpx 0rpx 0rpx;
 | ||
|       }
 | ||
|     }
 | ||
|   }
 | ||
| 
 | ||
|   .orderList {
 | ||
|     //padding: 30rpx 0;
 | ||
|     padding-top: 10rpx;
 | ||
|     height: calc(100% - 90rpx);
 | ||
|     display: flex;
 | ||
|     flex-direction: column;
 | ||
|     row-gap: 20rpx;
 | ||
| 
 | ||
|     .orderItem {
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| </style>
 | 
