<template>
|
<view class="report">
|
<view class="report_search">
|
<view class="report_search_row" @click="show = true">
|
<text>{{type ? type : '类型'}}</text>
|
<u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon>
|
</view>
|
<view class="report_search_row" @click="show1 = true">
|
<text>{{status ? status : '解决情况'}}</text>
|
<u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon>
|
</view>
|
<view class="report_search_row" @click="$refs.pengTree._show()" v-if="['3'].includes(typeId)">
|
<text>{{locationName ? locationName : '发生地点'}}</text>
|
<u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon>
|
</view>
|
<view class="report_search_row" @click="$refs.pengTree1._show()" v-if="['1'].includes(typeId)">
|
<text>{{locationName ? locationName : '位置'}}</text>
|
<u-icon name="arrow-down-fill" color="#666666" size="13"></u-icon>
|
</view>
|
</view>
|
<view class="report_list">
|
<view class="report_list_row" v-for="(item, index) in list" :key="index" @click="jump(item)">
|
<view class="report_list_row_icon">
|
<image src="/static/tabbar/nav_gongdan_sel@2x.png" mode="widthFix"></image>
|
</view>
|
<view class="report_list_row_info" v-if="[0].includes(item.type)">
|
<text>{{titleType(item.type)}}</text>
|
<text>{{userType(item.memberType)}}-{{item.memberNames}} {{item.happenTime.substring(0, 16)}}/{{item.locationName}}/{{item.typeName}}</text>
|
<text>{{item.submitDate.substring(0, 16)}}</text>
|
</view>
|
<view class="report_list_row_info" v-else-if="[3].includes(item.type)">
|
<text>{{titleType(item.type)}}</text>
|
<text>{{item.happenTime.substring(0, 16)}}/{{item.locationName}}/{{item.typeName}}</text>
|
<text>{{item.submitDate.substring(0, 16)}}</text>
|
</view>
|
<view class="report_list_row_info1" v-else>
|
<text>DCA</text>
|
<text>{{item.typeName || '-'}}/{{item.categoryName || '-'}}</text>
|
<text>符合:{{item.dcaYesNum}} 不符合:{{item.dcaNoNum}}</text>
|
<text>{{item.createDate.substring(0, 16)}}</text>
|
</view>
|
<view class="report_list_row_dian success" v-if="[3,4,5].includes(item.status)"></view>
|
<view class="report_list_row_dian error" v-else-if="[0,1,2].includes(item.status)"></view>
|
</view>
|
</view>
|
<!-- 无数据 -->
|
<u-loadmore :line="true" status="nomore" v-if="!search.next"></u-loadmore>
|
<!-- 类型 -->
|
<u-picker :show="show" keyName="label" immediateChange :columns="columns" @confirm="confirmType" @cancel="show = false"></u-picker>
|
<!-- 解决情况 -->
|
<u-picker :show="show1" keyName="label" immediateChange :columns="columns1" @confirm="confirmStatus" @cancel="show1 = false"></u-picker>
|
<!-- 发生地点 -->
|
<peng-tree
|
ref="pengTree"
|
:range="address"
|
idKey="id"
|
:selectParent="false"
|
nameKey="name"
|
:multiple="false"
|
title="选择地点"
|
@confirm="selectAddress"
|
@cancel="$refs.pengTree._hide()">
|
</peng-tree>
|
<!-- 位置 -->
|
<peng-tree
|
ref="pengTree1"
|
:range="address1"
|
idKey="id"
|
:selectParent="false"
|
nameKey="name"
|
:multiple="false"
|
title="位置"
|
@confirm="selectAddress1"
|
@cancel="$refs.pengTree._hide()">
|
</peng-tree>
|
</view>
|
</template>
|
|
<script>
|
import { mapState } from 'vuex'
|
import pengTree from '@/uni_modules/peng-tree/peng-tree/peng-tree.vue'
|
export default {
|
components: { pengTree },
|
computed: {
|
...mapState(['userInfo'])
|
},
|
data() {
|
return {
|
show: false,
|
show1: false,
|
show2: false,
|
type: '',
|
typeId: '',
|
status: '',
|
statusId: '',
|
locationName: '',
|
localtionId: '',
|
columns: [
|
[
|
{ label: '全部', id: '' },
|
{ label: 'DCA', id: '1' },
|
{ label: '跌绊滑风险上报', id: '3' },
|
{ label: 'SHE事件上报', id: '0' }
|
]
|
],
|
columns1: [
|
[
|
{ label: '全部', id: '' },
|
{ label: '未解决', id: '0' },
|
{ label: '已解决', id: '1' }
|
]
|
],
|
search: {
|
page: 1,
|
next: true
|
},
|
list: [],
|
address: [],
|
address1: []
|
};
|
},
|
onLoad() {
|
this.getLocation()
|
this.getLocation1()
|
},
|
onShow() {
|
this.$nextTick(() => {
|
this.$refs.pengTree._hide()
|
this.$refs.pengTree1._hide()
|
})
|
this.show = false
|
this.show1 = false
|
this.search.page = 1
|
this.search.next = true
|
this.list = []
|
this.getList()
|
},
|
onReachBottom() {
|
this.getList()
|
},
|
methods: {
|
// 选择发生地点
|
selectAddress(e) {
|
this.localtionId = e[0].id
|
this.locationName = e[0].name
|
this.search.page = 1
|
this.search.next = true
|
this.list = []
|
this.getList()
|
this.$refs.pengTree._hide()
|
},
|
// 位置
|
selectAddress1(e) {
|
this.localtionId = e[0].id
|
this.locationName = e[0].name
|
this.search.page = 1
|
this.search.next = true
|
this.list = []
|
this.getList()
|
this.$refs.pengTree1._hide()
|
},
|
// 获取发生地点树
|
async getLocation() {
|
let res = await this.$u.api.categoryTree({ categoryType: 2 })
|
if (res.code === 200) {
|
this.address = res.data
|
}
|
},
|
// 获取位置树
|
async getLocation1() {
|
let res = await this.$u.api.categoryTree({ categoryType: 3 })
|
if (res.code === 200) {
|
this.address1 = res.data
|
}
|
},
|
getList() {
|
if (!this.search.next) return
|
this.$u.api.page({
|
capacity: 10,
|
page: this.search.page,
|
model: {
|
myWorkOrder: 1,
|
type: this.typeId,
|
dealStatus: this.statusId,
|
localtionId: this.localtionId
|
}
|
}).then(res => {
|
if (res.code === 200) {
|
this.list = [...this.list, ...res.data.records]
|
if (this.list.length === res.data.total) {
|
this.search.next = false
|
}
|
this.search.page++
|
}
|
})
|
},
|
// 切换类型
|
confirmType(e) {
|
this.type = e.value[0].label
|
this.typeId = e.value[0].id
|
|
this.localtionId = ''
|
this.locationName = ''
|
this.status = ''
|
this.statusId = ''
|
this.search.page = 1
|
this.search.next = true
|
this.list = []
|
this.getList()
|
this.show = false
|
},
|
confirmStatus(e) {
|
this.status = e.value[0].label
|
this.statusId = e.value[0].id
|
this.search.page = 1
|
this.search.next = true
|
this.list = []
|
this.getList()
|
this.show1 = false
|
},
|
// 跳转详情
|
jump(item) {
|
if (item.type === 0) {
|
uni.navigateTo({
|
url: `/pages/details_she/details_she?id=${item.id}`
|
})
|
} else if (item.type === 3) {
|
uni.navigateTo({
|
url: `/pages/workOrder_she/workOrder_she?id=${item.id}`
|
})
|
} else if (item.type === 1) {
|
uni.navigateTo({
|
url: `/pages/details_dca/details_dca?id=${item.id}&isShow=true`
|
})
|
}
|
},
|
userType(type) {
|
if (type === 0) {
|
return '本人'
|
} else if (type === 1) {
|
return '同事'
|
} else if (type === 2) {
|
return '供应商'
|
}
|
},
|
titleType(type) {
|
if (type === 0) {
|
return 'SHE事件上报'
|
} else if (type === 3) {
|
return '跌绊滑事件上报'
|
}
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
.report {
|
width: 100%;
|
.report_search {
|
width: 100%;
|
height: 100rpx;
|
display: flex;
|
align-items: center;
|
padding: 0 30rpx;
|
box-sizing: border-box;
|
border-bottom: 1rpx solid #ececec;
|
background-color: #ffffff;
|
position: sticky;
|
top: 0;
|
left: 0;
|
z-index: 9;
|
.report_search_row {
|
flex: 1;
|
height: 100%;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
text {
|
font-size: 28rpx;
|
color: #222222;
|
margin-right: 8rpx;
|
}
|
}
|
}
|
.report_list {
|
width: 100%;
|
display: flex;
|
flex-direction: column;
|
.report_list_row {
|
width: 100%;
|
padding: 34rpx 36rpx;
|
box-sizing: border-box;
|
border-bottom: 1rpx solid #ececec;
|
display: flex;
|
align-items: center;
|
&:last-child {
|
border: none;
|
}
|
.report_list_row_dian {
|
flex-shrink: 0;
|
width: 16rpx;
|
height: 16rpx;
|
border-radius: 50%;
|
margin-left: 30rpx;
|
}
|
.success {
|
background-color: rgba(52,199,88,1);
|
}
|
.error {
|
background-color: red;
|
}
|
.report_list_row_icon {
|
flex-shrink: 0;
|
width: 56rpx;
|
height: 56rpx;
|
margin-right: 20rpx;
|
image {
|
width: 100%;
|
height: 100%;
|
}
|
}
|
.report_list_row_info {
|
flex: 1;
|
display: flex;
|
flex-direction: column;
|
text {
|
&:nth-child(1) {
|
font-size: 28rpx;
|
color: #222222;
|
font-weight: 600;
|
}
|
&:nth-child(2) {
|
font-size: 24rpx;
|
color: #666666;
|
font-weight: 400;
|
margin: 6rpx 0;
|
}
|
&:nth-child(3) {
|
font-size: 24rpx;
|
color: #999999;
|
font-weight: 400;
|
}
|
}
|
}
|
.report_list_row_info1 {
|
flex: 1;
|
display: flex;
|
flex-direction: column;
|
text {
|
&:nth-child(1) {
|
font-size: 28rpx;
|
color: #222222;
|
font-weight: 600;
|
}
|
&:nth-child(2) {
|
font-size: 24rpx;
|
color: #666666;
|
font-weight: 400;
|
margin-top: 6rpx;
|
}
|
&:nth-child(3) {
|
color: rgba(16,16,16,1);
|
font-size: 24rpx;
|
font-weight: 400;
|
margin-top: 6rpx;
|
}
|
&:nth-child(4) {
|
font-size: 24rpx;
|
color: #999999;
|
font-weight: 400;
|
margin-top: 6rpx;
|
}
|
}
|
}
|
}
|
}
|
}
|
</style>
|