| | |
| | | <template> |
| | | <view> |
| | | |
| | | <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>{{localtionId ? 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>{{localtionId ? 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) { |
| | | res.data.unshift({ name: '全部', id: '', childList: [] }) |
| | | this.address = res.data |
| | | } |
| | | }, |
| | | // 获取位置树 |
| | | async getLocation1() { |
| | | let res = await this.$u.api.categoryTree({ categoryType: 3 }) |
| | | if (res.code === 200) { |
| | | res.data.unshift({ name: '全部', id: '', childList: [] }) |
| | | 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> |