<route lang="json5">
|
{
|
layout: 'default',
|
needLogin: true,
|
style: {
|
navigationBarTitleText: '设备维修',
|
'app-plus': {
|
titleNView: {
|
buttons: [
|
{
|
text: '接单',
|
fontSize: '14px',
|
color: '#FFFFFF',
|
},
|
{
|
text: '',
|
fontSize: '24px',
|
color: '#FFFFFF',
|
},
|
],
|
},
|
},
|
},
|
}
|
</route>
|
<template>
|
<z-paging ref="paging" v-model="dataList" @query="queryList" show-refresher-update-time>
|
<template #top>
|
<wd-drop-menu>
|
<wd-drop-menu-item
|
v-model="resTypeId"
|
label-key="dictLabel"
|
value-key="dictValue"
|
:options="resTypeList"
|
@change="handleResType"
|
/>
|
<wd-drop-menu-item
|
v-model="status"
|
label-key="dictLabel"
|
value-key="dictValue"
|
:options="statusList"
|
@change="handleResStatu"
|
/>
|
</wd-drop-menu>
|
</template>
|
|
<view class="bg-base">
|
<wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id">
|
<template #title>
|
<view class="flex justify-between items-center">
|
<view class="flex items-center menu-title-box">
|
<view class="menu-indicator"></view>
|
<text class="ml-1 text-xs">{{ item.resCode }}</text>
|
<text class="text-color-gray ml-2 text-mini">接单:{{ item.createTime }}</text>
|
</view>
|
|
<view>
|
<wd-tag size="small" v-if="item.status === '1'" type="warning">已接单</wd-tag>
|
<wd-tag size="small" v-else-if="item.status === '2'" type="primary">维修中</wd-tag>
|
<wd-tag size="small" v-else-if="item.status === '3'" type="success">已完成</wd-tag>
|
</view>
|
</view>
|
</template>
|
<view class="flex h-[240rpx] items-center" @click.stop="itemClick(item)">
|
<image
|
v-if="item.reqType === '1'"
|
class="slot-img text-center"
|
src="/static/ico/ico-huiyi.png"
|
/>
|
<image
|
v-else-if="item.reqType === '2'"
|
class="slot-img text-center"
|
src="/static/ico/ico-setting.png"
|
/>
|
<image
|
v-else-if="item.reqType === '3'"
|
class="slot-img text-center"
|
src="/static/ico/ico-faxian.png"
|
/>
|
<view class="flex-1 mt-1">
|
<view class="text-color-base">
|
<template v-if="item.reqType === '1'">
|
<text>设备类型</text>
|
<text class="mx-2">|</text>
|
<text>{{ item.equName }}</text>
|
</template>
|
|
<template v-if="item.reqType === '2'">
|
<text>工具类型</text>
|
<text class="mx-2">|</text>
|
<text>{{ item.fixtureName }}</text>
|
</template>
|
|
<template v-if="item.reqType === '3'">
|
<text>其他类型</text>
|
</template>
|
<view class="text-color-gray mt-1 text-mini">
|
<text>报修人: {{ item.reqUserName }}</text>
|
</view>
|
<view class="text-color-gray mt-1 text-mini">
|
<text>报修时间: {{ item.reqTime }}</text>
|
</view>
|
|
<view class="text-color-gray mt-1 text-mini">
|
<text>开始时间: {{ item.startTime }}</text>
|
</view>
|
<view class="text-color-gray mt-1 text-mini">
|
<text>完成时间: {{ item.endTime }}</text>
|
</view>
|
<view class="text-color-gray mt-1 text-mini">
|
<text>维修人: {{ item.resUserName }}</text>
|
</view>
|
</view>
|
</view>
|
<view>
|
<wd-button v-if="item.status === '1'" size="small" icon="edit-outline">开始维修</wd-button>
|
<wd-button v-if="item.status === '2'" size="small" icon="edit-outline">维修中</wd-button>
|
<wd-button v-if="item.status === '3'" size="small" icon="edit-outline">已完成</wd-button>
|
</view>
|
</view>
|
</wd-card>
|
</view>
|
</z-paging>
|
</template>
|
|
<script setup lang="ts">
|
import { onMounted, getCurrentInstance, ref } from 'vue'
|
import { useToast, useMessage } from 'wot-design-uni'
|
import { getRepairResList, addRepairRes } from '@/service/repair'
|
import { DICT_REPAIR_RES_STATUS, DICT_REPAIR_REQ_TYPE, getDictInfo } from '@/service/dict'
|
import { useUserStore } from '@/store'
|
const userStore = useUserStore()
|
|
const message = useMessage()
|
const toast = useToast()
|
// 维修单类型
|
const resTypeId = ref<number>(0)
|
// 维修单处理状态
|
const status = ref<number>(0)
|
|
const isSelectRes = ref(false)
|
|
const resTypeList = ref<any>([{ dictLabel: '所有类型', dictValue: 0 }])
|
const statusList = ref<any>([{ dictLabel: '所有状态', dictValue: 0 }])
|
function handleResType({ value }) {
|
reloadData()
|
}
|
function handleResStatu({ value }) {
|
reloadData()
|
}
|
|
const paging = ref(null)
|
const dataList = ref([])
|
|
const queryList = (pageNum?: number, pageSize?: number) => {
|
const parmams = {
|
pageNum,
|
pageSize,
|
reqType: resTypeId.value,
|
status: status.value,
|
}
|
if (resTypeId.value === 0) {
|
delete parmams.reqType
|
}
|
if (status.value === 0) {
|
delete parmams.status
|
}
|
getRepairResList(parmams)
|
.then((res: any) => {
|
paging.value.completeByTotal(res.rows, res.total)
|
})
|
.catch((res) => {
|
paging.value.complete(false)
|
})
|
}
|
function reloadData() {
|
paging.value.reload()
|
}
|
|
/**
|
* 条目点击事件
|
* @param item
|
*/
|
function itemClick(item: any) {}
|
|
onNavigationBarButtonTap((e) => {
|
if (e.index === 0) {
|
handleSelectReq()
|
}
|
})
|
|
/**
|
* 选择报修单
|
*/
|
function handleSelectReq() {
|
uni.navigateTo({
|
url: '/pages/repair/req-list',
|
events: {
|
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
|
selectReq: function (data) {
|
console.error(data)
|
// 选择报修单后,修改报修单状态和新增维修工单
|
const resCode = `WXD${data.data.code.slice(3)}`
|
const deptId = userStore?.userInfo?.deptId
|
const userId = userStore?.userInfo?.userId
|
const resData = {
|
reqId: data.data.id,
|
reqCode: data.data.code,
|
reqUser: data.data.reqUser,
|
reqDept: data.data.reqDept,
|
resCode,
|
status: '1',
|
resUser: userId,
|
resDept: deptId,
|
}
|
addRepairRes(resData)
|
.then((res: any) => {
|
if (res.code === 200) {
|
toast.success(res?.msg || '操作成功')
|
reloadData()
|
} else {
|
toast.error(res?.msg || '生成维修工单失败,请重试')
|
}
|
})
|
.catch((res) => {
|
toast.error(res?.msg || '生成维修工单失败,请重试')
|
})
|
},
|
},
|
success: function (res) {
|
// 通过eventChannel向被打开页面传送数据
|
res.eventChannel.emit('OnSelectReq', { data: '维修单页面选择报修单' })
|
},
|
})
|
}
|
|
async function initData() {
|
const rList: any = await getDictInfo(DICT_REPAIR_REQ_TYPE)
|
resTypeList.value.push(...rList)
|
const sList: any = await getDictInfo(DICT_REPAIR_RES_STATUS)
|
statusList.value.push(...sList)
|
}
|
onLoad((options) => {
|
initData()
|
})
|
</script>
|
|
<style scoped lang="scss">
|
.menu-title-box {
|
height: 30rpx;
|
line-height: 30rpx;
|
}
|
|
.slot-img {
|
width: 72rpx;
|
height: 72rpx;
|
margin-right: 24rpx;
|
}
|
.text-mini {
|
font-size: 22rpx;
|
}
|
|
.menu-indicator {
|
width: 6rpx;
|
height: 22rpx;
|
border-radius: 10rpx;
|
background-color: $uni-color-primary;
|
}
|
:deep(.wd-card__title-content) {
|
padding: 16rpx !important;
|
}
|
:deep(.wd-card__content) {
|
padding: 16rpx !important;
|
}
|
:deep(.wd-card__footer) {
|
padding: 10rpx !important;
|
}
|
</style>
|