This commit is contained in:
SelfRidicule 2024-08-14 19:07:39 +08:00
parent e45c024d2f
commit 49d8817641
7 changed files with 374 additions and 55 deletions

View File

@ -87,6 +87,14 @@ export function selectWorkerIdByTypeIdRq(id) {
}); });
} }
// 获取维修人员工单数量统计
export function workerRepairNumberRq(id) {
return request({
url: `/app/repair/workerRepairNumber`,
method: "post",
});
}
// 返回订单状态 // 返回订单状态
// 状态:1 待派单,3 重新派单,5 已派单,7 处理中, 9已完成 待评价, 11 已关闭 13 已评价 // 状态:1 待派单,3 重新派单,5 已派单,7 处理中, 9已完成 待评价, 11 已关闭 13 已评价

View File

@ -1,5 +1,10 @@
const app = getApp() const app = getApp()
import {
getDetailRq,
getStatusName
} from "../../../../api/repair/repair.js"
Page({ Page({
/** /**
@ -7,15 +12,19 @@ Page({
*/ */
data: { data: {
IMG_NAME: app.IMG_NAME, IMG_NAME: app.IMG_NAME,
statusList : [ id: '',
{ detail: {},
name : '已解决', files: [],
status : 1, innerAudioContext: null, // 音频对象
innerAudioContextIsPlay: false, // 音频对象-是否播放
statusList: [{
name: '已解决',
status: 1,
isSelect: true, isSelect: true,
}, },
{ {
name : '未解决', name: '未解决',
status : 2, status: 2,
isSelect: false, isSelect: false,
} }
] ]
@ -25,7 +34,74 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
console.log('onLoad', options);
let _this = this
_this.setData({
...options
})
_this.getDetail(options.id)
},
getDetail(id) {
let _this = this
getDetailRq({
id
}).then(res => {
console.log("getDetailRq", res);
// 详情
let detail = res.repair
detail.statusName = getStatusName(detail.status)
// 附件
let files = res.files
files.repair = files.repair.map(item => {
item.url = app.IMG_NAME + item.url
return item
})
files.voice = files.voice.map(item => {
item.url = app.IMG_NAME + item.url
return item
})
_this.setData({
detail,
files
})
})
},
// 播放语音
startAudio() {
console.log('startAudio');
let _this = this
// 获取innerAudioContext实例
let innerAudioContext = _this.data.innerAudioContext
let innerAudioContextIsPlay = _this.data.innerAudioContextIsPlay
if (!innerAudioContext) {
// 全局设置播放声音
wx.setInnerAudioOption({
obeyMuteSwitch: false
});
innerAudioContext = wx.createInnerAudioContext()
// 设置音频文件的路径
innerAudioContext.src = _this.data.files.voice[0].url
innerAudioContextIsPlay = false
innerAudioContext.onEnded(() => {
_this.setData({
innerAudioContextIsPlay: false
})
})
}
if (innerAudioContextIsPlay) { // 播放中
innerAudioContext.stop()
innerAudioContextIsPlay = false
} else { // 未播放
innerAudioContext.play()
innerAudioContextIsPlay = true
}
//
_this.setData({
innerAudioContext,
innerAudioContextIsPlay
})
}, },
/** /**

View File

@ -2,62 +2,80 @@
<view class="topHead"> <view class="topHead">
<view class="progressView"> <view class="progressView">
<view class="point"> <view class="point {{detail.status == '5' ? 'activity' : ''}}">
<view class="msgView">派单信息</view> <view class="msgView {{detail.status == '5' ? 'activity' : ''}}">派单信息</view>
<view class="time">2022-11-15 10:25:23</view> <view class="time {{detail.status == '5' ? 'activity' : ''}}">{{detail.createTime}}</view>
</view> </view>
<view class="line"></view> <view class="line"></view>
<view class="point"> <view class="point {{detail.status == '7' ? 'activity' : ''}}">
<view class="msgView">维修反馈</view> <view class="msgView {{detail.status == '7' ? 'activity' : ''}}">维修反馈</view>
<view class="time">2022-11-15 10:25:23</view> <view class="time {{detail.status == '7' ? 'activity' : ''}}">{{detail.createTime}}</view>
</view> </view>
<view class="line"></view> <view class="line"></view>
<view class="point activity"> <view class="point {{detail.status == '9' ? 'activity' : ''}}">
<view class="msgView activity">处理完成</view> <view class="msgView {{detail.status == '9' ? 'activity' : ''}}">处理完成</view>
<view class="time activity">2022-11-15 10:25:23</view> <view class="time {{detail.status == '9' ? 'activity' : ''}}">{{detail.createTime}}</view>
</view> </view>
</view> </view>
</view> </view>
<view class="personMsgView"> <view class="personMsgView">
报修人电话:19883286522 报修人电话:{{detail.phone}}
</view> </view>
<view class="labelView">报修单信息</view> <view class="labelView">报修单信息</view>
<view class="step1"> <view class="step1">
<view class="itemView"> <view class="itemView">
<view class="name">报修设备:</view> <view class="name">报修名称</view>
<view class="content">南楼102室空调</view> <view class="content">{{detail.repairName}}</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="name">派发对象:</view> <view class="name">故障等级</view>
<view class="content">李四</view> <view class="content">{{detail.repairLevel}}</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="name">报修内容:</view> <view class="name">故障时间</view>
<view class="content">设备故障,及时检修设备故障,及时检修设备故障,及时检修设备故障,及时检修</view> <view class="content">{{detail.repairTime}}</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="name">工单编号:</view> <view class="name">故障类型</view>
<view class="content"> BX202112100001</view> <view class="content">{{detail.typeName + '/' + detail.deviceName}}</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="name">报修人:</view> <view class="name">故障地点</view>
<view class="content">张三</view> <view class="content">{{detail.address + '/' + detail.floor}}</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="name">报修时间:</view> <view class="name">门牌号</view>
<view class="content">2022-11-15 10:25:23</view> <view class="content">{{detail.room}}</view>
</view>
<view class="itemView">
<view class="name">联系电话</view>
<view class="content">{{detail.phone}}</view>
</view>
<view class="itemView">
<view class="name">报修人姓名</view>
<view class="content">{{detail.name}}</view>
</view>
<view class="itemView">
<view class="name">故障描述</view>
<view class="content">{{detail.explain}}</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="name">相关语音:</view> <view class="name">相关语音:</view>
<view class="content">4s</view> <view class="content">
<view class="voiceView" wx:if="{{files.voice.length > 0}}">
<van-icon name="volume-o" color="black" size="40rpx" bind:tap="startAudio" />
</view>
</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="name">报修图片:</view> <view class="name">报修图片:</view>
<view class="content"> <view class="content">
<view wx:for="{{4}}" class="imgView" style="background: no-repeat center/cover url({{IMG_NAME + '/profile/static/index/banner/1.jpg'}});"></view> <view class="imgContentView">
<van-uploader file-list="{{ files.repair }}" show-upload="{{false}}" deletable="{{false}}" />
</view>
</view> </view>
</view> </view>
@ -92,7 +110,7 @@
<view class="itemView"> <view class="itemView">
<view class="title">是否解决</view> <view class="title">是否解决</view>
<view class="content"> <view class="content">
<view class="checkItemView" wx:for="{{statusList}}" wx:key="*this"> <view class="checkItemView" wx:for="{{statusList}}" wx:key="*this">
<van-checkbox value="{{ item.isSelect }}" data-id="{{item.status}}" shape="square" icon-size="36rpx" bind:tap="checkBoxClick"></van-checkbox> <van-checkbox value="{{ item.isSelect }}" data-id="{{item.status}}" shape="square" icon-size="36rpx" bind:tap="checkBoxClick"></van-checkbox>
<view class="name" data-id="{{item.status}}" bind:tap="checkBoxClick">{{item.name}}</view> <view class="name" data-id="{{item.status}}" bind:tap="checkBoxClick">{{item.name}}</view>
</view> </view>
@ -103,7 +121,7 @@
<view class="step3"> <view class="step3">
<view class="mainView"> <view class="mainView">
<van-icon name="success" color="#4e96f8" size="180rpx"/> <van-icon name="success" color="#4e96f8" size="180rpx" />
<view class="label1">处理成功</view> <view class="label1">处理成功</view>
<view class="label2">您已提交成功</view> <view class="label2">您已提交成功</view>
</view> </view>

View File

@ -1,5 +1,17 @@
const app = getApp() const app = getApp()
import {
selfFormatTimeYMD,
selfFormatTimeHM,
checkIsImg
} from "../../../../utils/util.js"
import {
repairListRq,
workerRepairNumberRq
} from "../../../../api/repair/repair.js"
Page({ Page({
/** /**
@ -7,22 +19,161 @@ Page({
*/ */
data: { data: {
IMG_NAME: app.IMG_NAME, IMG_NAME: app.IMG_NAME,
workerNumber: {},
tabTitle: 'wait', // tab 标题
// 待完成
waitOrder: {
pageNum: 1,
pageSize: 10,
type: 'wait',
dataList: [],
isDataAll: false,
},
// 进行中
workOrder: {
pageNum: 1,
pageSize: 10,
type: 'working',
dataList: [],
isDataAll: false,
},
// 已完成
closeOrder: {
pageNum: 1,
pageSize: 10,
type: 'close',
dataList: [],
isDataAll: false,
},
}, },
/** /**
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad(options) { onLoad(options) {
let _this = this;
}, },
back(){ back() {
wx.navigateBack() wx.navigateBack()
}, },
jumpCase(){ // tab 点击切换
tabClickSwitch(e) {
console.log('tabClickSwitch', e);
let _this = this;
_this.setData({
tabTitle: e.target.dataset.type
})
},
// 获取数据
getDataList(transferTabTitle) {
// 获取参数
let _this = this;
let tabTitle = _this.data.tabTitle
if (transferTabTitle) {
tabTitle = transferTabTitle
}
let pageNum = null
let pageSize = null
let type = null
let isDataAll = null
//
let waitOrder = _this.data.waitOrder
let workOrder = _this.data.workOrder
let closeOrder = _this.data.closeOrder
if (tabTitle == 'wait') {
pageNum = waitOrder.pageNum
pageSize = waitOrder.pageSize
type = waitOrder.type
isDataAll = waitOrder.isDataAll
} else if (tabTitle == 'working') {
pageNum = workOrder.pageNum
pageSize = workOrder.pageSize
type = workOrder.type
isDataAll = workOrder.isDataAll
} else if (tabTitle == 'close') {
pageNum = closeOrder.pageNum
pageSize = closeOrder.pageSize
type = closeOrder.type
isDataAll = closeOrder.isDataAll
} else {
wx.showToast({
title: `tab 切换错误(${tabTitle})`,
icon: 'none',
});
return;
}
// 判断数据是否已全部加载
if (isDataAll) {
return;
}
// 传递参数
let param = {
pageNum,
pageSize,
menu: '5', // 维修
type,
}
// 查询数据
repairListRq(param).then(res => {
console.log('repairListRq', res);
let dataList = res.rows
let isDataAll = false
if (!(dataList && dataList.length > 0)) {
dataList = []
isDataAll = true
}
//
if (tabTitle == 'wait') {
waitOrder.dataList = waitOrder.dataList.concat(_this.formartData(dataList))
waitOrder.pageNum = waitOrder.pageNum + 1
waitOrder.isDataAll = isDataAll
_this.setData({
waitOrder
})
} else if (tabTitle == 'working') {
workOrder.dataList = workOrder.dataList.concat(_this.formartData(dataList))
workOrder.pageNum = workOrder.pageNum + 1
workOrder.isDataAll = isDataAll
_this.setData({
workOrder
})
} else if (tabTitle == 'close') {
closeOrder.dataList = closeOrder.dataList.concat(_this.formartData(dataList))
closeOrder.pageNum = closeOrder.pageNum + 1
closeOrder.isDataAll = isDataAll
_this.setData({
closeOrder
})
}
})
},
// 格式化数据
formartData(dataList) {
// 格式化数据
return dataList.map(item => {
return item;
})
},
// 跳转
jumpCase(e) {
console.log('jumpCase', e);
let id = e.currentTarget.dataset.obj.id
wx.navigateTo({ wx.navigateTo({
url: '/pages/reportRepair/repair/case/case', url: `/pages/reportRepair/repair/case/case?id=${id}`,
}) })
}, },
@ -37,7 +188,45 @@ Page({
* 生命周期函数--监听页面显示 * 生命周期函数--监听页面显示
*/ */
onShow() { onShow() {
let _this = this;
_this.setData({
// 待完成
waitOrder: {
pageNum: 1,
pageSize: 10,
type: 'wait',
dataList: [],
isDataAll: false,
},
// 进行中
workOrder: {
pageNum: 1,
pageSize: 10,
type: 'working',
dataList: [],
isDataAll: false,
},
// 已完成
closeOrder: {
pageNum: 1,
pageSize: 10,
type: 'close',
dataList: [],
isDataAll: false,
},
})
// 数据
_this.getDataList('wait')
_this.getDataList('working')
_this.getDataList('close')
// 获取维修人员工单数量统计
workerRepairNumberRq().then(res => {
console.log('workerRepairNumberRq', res);
_this.setData({
workerNumber: res.workerRepairNumber
})
})
}, },
/** /**
@ -65,7 +254,9 @@ Page({
* 页面上拉触底事件的处理函数 * 页面上拉触底事件的处理函数
*/ */
onReachBottom() { onReachBottom() {
console.log('onReachBottom');
let _this = this
_this.getDataList()
}, },
/** /**

View File

@ -1,6 +1,8 @@
{ {
"navigationStyle": "custom", "navigationStyle": "custom",
"usingComponents": { "usingComponents": {
"van-icon": "@vant/weapp/icon/index" "van-icon": "@vant/weapp/icon/index",
} "van-divider": "@vant/weapp/divider/index"
},
"onReachBottomDistance": 100
} }

View File

@ -14,25 +14,19 @@
<view class="itemListView"> <view class="itemListView">
<view class="itemView"> <view class="itemView">
<view class="circle1 blueColor"> <view class="circle1 blueColor">
<view class="circle2 blueCenterColor"> <view class="circle2 blueCenterColor">{{workerNumber.wait}}</view>
100
</view>
</view> </view>
<view class="name">待完成</view> <view class="name">待完成</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="circle1 cyanColor"> <view class="circle1 cyanColor">
<view class="circle2 cyanCenterColor"> <view class="circle2 cyanCenterColor">{{workerNumber.working}}</view>
200
</view>
</view> </view>
<view class="name">进行中</view> <view class="name">进行中</view>
</view> </view>
<view class="itemView"> <view class="itemView">
<view class="circle1 greenColor"> <view class="circle1 greenColor">
<view class="circle2 greenCenterColor"> <view class="circle2 greenCenterColor">{{workerNumber.close}}</view>
300
</view>
</view> </view>
<view class="name">已完成</view> <view class="name">已完成</view>
</view> </view>
@ -40,17 +34,42 @@
</view> </view>
<view class="statusView"> <view class="statusView">
<view class="status">待完成</view> <view class="status {{tabTitle == 'wait' ? 'activity' : ''}}" bind:tap="tabClickSwitch" data-type="wait">待完成</view>
<view class="status activity">进行中</view> <view class="status {{tabTitle == 'working' ? 'activity' : ''}}" bind:tap="tabClickSwitch" data-type="working">进行中</view>
<view class="status">已完成</view> <view class="status {{tabTitle == 'close' ? 'activity' : ''}}" bind:tap="tabClickSwitch" data-type="close">已完成</view>
</view> </view>
<view class="caseListView"> <view class="caseListView" wx:if="{{tabTitle == 'wait'}}">
<view class="caseView" wx:for="{{10}}" bind:tap="jumpCase"> <view class="caseView" wx:for="{{waitOrder.dataList}}" wx:for-item="item" wx:key="*this" data-obj="{{item}}" bind:tap="jumpCase">
<view class="content ellipsisFont">王军发起一个订单王军发起一个订单王军发起一个订单</view> <view class="content ellipsisFont">{{item.name}}发起一个订单</view>
<view class="time">2024-01-01 10:10:10</view> <view class="time">{{item.createTime}}</view>
<view class="status"></view> <view class="status"></view>
</view> </view>
<view class="loadAllLine" wx:if="{{waitOrder.isDataAll}}">
<van-divider class="van-divider" customStyle="font-size: 26rpx;" contentPosition="center">数据已全部加载</van-divider>
</view>
</view>
<view class="caseListView" wx:if="{{tabTitle == 'working'}}">
<view class="caseView" wx:for="{{workOrder.dataList}}" wx:for-item="item" wx:key="*this" data-obj="{{item}}" bind:tap="jumpCase">
<view class="content ellipsisFont">{{item.name}}发起一个订单</view>
<view class="time">{{item.createTime}}</view>
<view class="status"></view>
</view>
<view class="loadAllLine" wx:if="{{workOrder.isDataAll}}">
<van-divider class="van-divider" customStyle="font-size: 26rpx;" contentPosition="center">数据已全部加载</van-divider>
</view>
</view>
<view class="caseListView" wx:if="{{tabTitle == 'close'}}">
<view class="caseView" wx:for="{{closeOrder.dataList}}" wx:for-item="item" wx:key="*this" data-obj="{{item}}" bind:tap="jumpCase">
<view class="content ellipsisFont">{{item.name}}发起一个订单</view>
<view class="time">{{item.createTime}}</view>
<view class="status"></view>
</view>
<view class="loadAllLine" wx:if="{{closeOrder.isDataAll}}">
<van-divider class="van-divider" customStyle="font-size: 26rpx;" contentPosition="center">数据已全部加载</van-divider>
</view>
</view> </view>
</view> </view>

View File

@ -1,5 +1,6 @@
.containerView.public { .containerView.public {
background: none; background: none;
height: auto;
} }
.elHidden { .elHidden {
@ -194,3 +195,7 @@
width: 20rpx; width: 20rpx;
background: red; background: red;
} }
.loadAllLine {
margin-top: 80rpx;
}