<route lang="json5" type="page">
|
{
|
layout: 'default',
|
needLogin: true,
|
style: {
|
navigationBarTitleText: '保养汇总',
|
},
|
}
|
</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="equName" :options="equList" @change="handleEquName" />
|
<wd-drop-menu-item v-model="status" :options="statusList" @change="handleStatus" />
|
</wd-drop-menu>
|
<wd-divider></wd-divider>
|
</template>
|
<view class="bg-base">
|
<view class="w-full h-[24rpx]"></view>
|
<wd-card type="rectangle" v-for="(item, index) in dataList" :key="item.id">
|
<template #title>
|
<view class="flex justify-between">
|
<view class="flex items-center menu-title-box">
|
<view class="menu-indicator"></view>
|
<view class="ml-1 text-sm align-center w-[50%]">
|
<wd-text :text="item.equName" :lines="1"></wd-text>
|
</view>
|
<view class="text-color-gray ml-2 text-mini">{{ item.assetNo }}</view>
|
</view>
|
|
<view class="flex items-center w-[20%] justify-end">
|
<text class="text-color-gray text-mini">
|
{{ item?.planTime }}
|
</text>
|
</view>
|
</view>
|
</template>
|
<view class="flex h-[140rpx]" items-center>
|
<image class="slot-img text-center" src="/static/images/camera.png" />
|
<view class="flex-1">
|
<view class="text-color-gray text-xs mt-1 flex">
|
<text class="mr-3">工单总数: {{ item.orderCount }}</text>
|
|
|
<text class="mx-3">已完成: {{ item.wcCount }}</text>
|
</view>
|
<view class="text-color-gray text-xs mt-2 flex">
|
<text class="mr-3">待保养: {{ item.dbyCount }}</text>
|
|
|
<text class="mx-3">保养中: {{ item.byCount }}</text>
|
|
|
<text class="ml-3">待验证: {{ item.dyzCount }}</text>
|
</view>
|
<view class="text-color-gray text-xs mt-2 flex">
|
<text>状态:</text>
|
<template v-if="item.status=== '1'">
|
<wd-icon class="icon-color-success" name="check-outline" size="34rpx"></wd-icon>
|
<text class="ml-1">已完成</text>
|
</template>
|
<template v-else>
|
<wd-icon class="icon-color-base" name="detection" size="40rpx"></wd-icon>
|
<text class="ml-1">进行中</text>
|
</template>
|
</view>
|
<view class="text-color-gray text-xs mt-2 flex">
|
创建时间: {{item.createTime}}
|
</view>
|
</view>
|
<wd-button size="small" icon="edit-outline" @click.stop="itemClick(item)">明细</wd-button>
|
</view>
|
</wd-card>
|
</view>
|
</z-paging>
|
</template>
|
|
<script setup lang="ts">
|
import { ref } from 'vue'
|
import { getMaintStList } from '@/service/maint'
|
|
interface QueryParams {
|
pageNum: number
|
pageSize: number
|
equName?: string
|
status?: string
|
}
|
|
const status = ref<string>('-1')
|
const equName = ref<string>('-1')
|
|
const statusList = ref<Record<string, any>[]>([
|
{ label: '所有状态', value: '-1' },
|
{ label: '待保养', value: '0' },
|
{ label: '保养中', value: '1' },
|
{ label: '待验证', value: '2' },
|
{ label: '已完成', value: '3' },
|
])
|
const equList = ref<Record<string, any>[]>([{ label: '所有设备', value: '-1' }])
|
function handleStatus({ value }) {}
|
function handleEquName({ value }) {
|
console.log(value)
|
}
|
|
const paging = ref(null)
|
const dataList = ref([])
|
|
const queryList = (pageNum?: number, pageSize?: number) => {
|
// 这里的pageNo和pageSize会自动计算好,直接传给服务器即可
|
// 这里的请求只是演示,请替换成自己的项目的网络请求,并在网络请求回调中通过paging.value.complete(请求回来的数组)将请求结果传给z-paging
|
const params: QueryParams = {
|
pageNum,
|
pageSize,
|
equName: equName.value,
|
status: status.value,
|
}
|
if (equName.value === '-1') {
|
delete params.equName
|
}
|
if (status.value === '-1') {
|
delete params.status
|
}
|
|
getMaintStList(params)
|
.then((res: any) => {
|
// 请勿在网络请求回调中给dataList赋值!!只需要调用complete就可以了
|
paging.value.complete(res.rows)
|
})
|
.catch((res) => {
|
// 如果请求失败写paging.value.complete(false),会自动展示错误页面
|
// 注意,每次都需要在catch中写这句话很麻烦,z-paging提供了方案可以全局统一处理
|
// 在底层的网络请求抛出异常时,写uni.$emit('z-paging-error-emit');即可
|
paging.value.complete(false)
|
})
|
}
|
|
function itemClick(item) {
|
uni.navigateTo({
|
url: `/pages/maint/maint-order?id=${item.id}`,
|
})
|
}
|
|
function reloadData() {
|
paging.value.reload()
|
}
|
onLoad(() => {
|
queryList()
|
uni.$on('maint-st-refresh', reloadData)
|
})
|
onUnload(() => {
|
uni.$off('maint-st-refresh', reloadData)
|
})
|
</script>
|
|
<style scoped lang="scss">
|
.menu-title-box {
|
}
|
|
.slot-img {
|
width: 72rpx;
|
height: 72rpx;
|
margin-right: 24rpx;
|
}
|
.statu-img {
|
width: 60rpx;
|
height: 40rpx;
|
}
|
.text-mini {
|
font-size: 22rpx;
|
}
|
|
.menu-indicator {
|
width: 6rpx;
|
height: 26rpx;
|
border-radius: 10rpx;
|
background-color: $uni-color-primary;
|
}
|
:deep(.wd-card__footer) {
|
padding: 10rpx !important;
|
}
|
:deep(.wd-card__title-content) {
|
padding: 24rpx 0 !important;
|
}
|
</style>
|