jy-safe-app/pages/apply/subPages/SK/riskRectifyList.vue
2025-10-14 15:17:30 +08:00

331 lines
9.2 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 查询框 检查记录 列表 -->
<view class="risk-record-page">
<u-sticky>
<view class="filter-bar">
<!-- <view class="filter filter-date-range" @click="handleShowPicker({title: '时间区间', name: 'dateRange'})">
<text>{{dateFilterTxt}}</text>
<u-icon size="14" style="margin-left: 4px;" name="arrow-down"></u-icon>
</view> -->
<uni-search-bar class="search-bar" radius="100" v-model="keyword" @confirm="handleSearch" @cancel="handleCancelSearch" @clear="handleCancelSearch" placeholder="搜索整改落实人" cancel-button="none">
<uni-icons slot="searchIcon" color="#999999" size="16" type="search" class="search-slot" />
</uni-search-bar>
<view class="filter filter-status" @click="handleShowPicker({title: '状态', name: 'status'})">
<text>{{statusFilterTxt}}</text>
<u-icon size="14" style="margin-left: 4px;" name="arrow-down"></u-icon>
</view>
</view>
</u-sticky>
<view class="main">
<!-- <uni-search-bar class="search-bar" radius="100" v-model="keyword" @confirm="handleSearch"
@cancel="handleCancelSearch" @clear="handleCancelSearch" placeholder="搜索"></uni-search-bar>
<view class="filter-bar">
<view class="filter filter-date-range" @click="handleShowPicker({title: '时间区间', name: 'dateRange'})">
<text>时间区间</text>
<u-icon size="14" style="margin-left: 4px;" name="arrow-down"></u-icon>
</view>
<view class="filter filter-status" @click="handleShowPicker({title: '状态', name: 'status'})">
<text>状态筛选</text>
<u-icon size="14" style="margin-left: 4px;" name="arrow-down"></u-icon>
</view>
</view> -->
<view class="content-list">
<common-card :dataSource="item" v-for="item in lists" @click="showDetail(item.ID,item.TaskID)">
<view class="content">
<!-- <view class="field">
<text class="label">检查任务:</text>
<text class="value">{{item.NAME}}</text>
</view> -->
<view class="field">
<text class="left">整改落实人:</text>
<text class="value">{{item.ImplementUser}}</text>
</view>
<view class="field">
<text class="left">隐患地点:</text>
<text class="value">{{item.HIDDEN_PLACE}}</text>
</view>
<view class="field">
<text class="left">隐患描述:</text>
<text class="value">{{item.HIDDEN_DESCRIPTION}}</text>
</view>
<view class="field">
<text class="left">整改期限:</text>
<text class="value">{{item.RECITIFY_TIME}}</text>
</view>
<view class="field">
<text class="left">状态:</text>
<text class="status">{{item.STATUS}}</text>
</view>
</view>
</common-card>
</view>
</view>
<u-picker :show="comPickerInfo.showPicker" :columns="comPickerInfo.columns" @confirm="onConfirmPicker" @cancel="closePicker"></u-picker>
</view>
</template>
<script>
import {
initFilter,
extendRule,
extendInclude
} from '../../../../utils/common'
import {
MineTypeIndex,
MineTypeName
} from '../../../../utils/enums.js'
import {
GetRectifyListInfo
} from '../../../../services/apply/subPages/SK/SKServices.js'
import {
getEnum
} from '../../../../services/common';
import UniSearchBar from '../../../../uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue'
export default {
components: {
UniSearchBar
},
data() {
return {
pageIndex: 0,
total: 0,
lists: [],
params: {},
keyword: '',
searchStartTime: '',
filterStatus: null,
dateFilterTxt: '时间区间',
statusFilterTxt: '状态筛选',
comPickerInfo: {
showPicker: false,
columns: [],
title: '',
name: ''
},
enumsData: {}, // 存储所有枚举数据(键:枚举名称,值:处理后的枚举列表)
enumsText: {} // 存储枚举文本列表(用于下拉选择等场景)
}
},
onLoad() {
this.fetchEnums(['PFStandardStatus']);
},
methods: {
async fetchEnums(enumNames) {
try {
// 存储所有枚举请求的Promise
const enumPromises = enumNames.map(name => {
return getEnum({
name
}).then(res => {
// 统一处理枚举格式添加name/code字段便于后续映射
return {
enumName: name,
data: res.map(item => ({
...item,
name: item.NAME, // 统一显示名称字段
code: item.ID // 统一值字段
}))
};
});
});
// 等待所有枚举请求完成
const results = await Promise.all(enumPromises);
// 存储枚举结果到data中键为枚举名称值为处理后的数据
results.forEach(({
enumName,
data
}) => {
this.enumsData[enumName] = data;
// 生成文本列表(如需要)
this.enumsText[enumName] = data.map(item => item.name);
});
// 所有枚举获取完成后执行loadData
this.loadData();
} catch (error) {
console.error('枚举请求失败:', error);
uni.showToast({
title: '枚举数据加载失败',
icon: 'none'
});
}
},
handleSearch() {
this.pageIndex = 0
this.loadData(false)
},
loadData(paginate) {
this.pageIndex++
const orgId = uni.getStorageSync('orgId')
let json = initFilter(orgId, "", "CREATE_TIME", 1, this.pageIndex);
// extendRule(json, 'STATECHECK', 2, 0);
extendInclude(json, 'Nav_ApplyDepartment')
extendInclude(json, 'Nav_ApplyUser')
extendInclude(json, 'Nav_CheckType')
// extendInclude(json, 'Nav_User')
if (this.keyword) {
extendRule(json, 'ImplementUser', 9, this.keyword)
}
if (this.searchStartTime && this.searchStartTime.length > 0) {
extendRule(json, 'CHECKTIME', 6, this.searchStartTime)
}
if (this.filterStatus !== null) {
extendRule(json, 'STATUS', 1, this.filterStatus)
}
json.SelectField = [
"MineType",
"Nav_ApplyDepartment.NAME",
"Nav_ApplyUser.NAME",
"Nav_CheckType.NAME",
"PLANCHECKFREQUENCY",
"DEPARTMENT_TYPE",
"CHECK_TIME",
"AREA_NAME",
"HIDDEN_DESCRIPTION",
"HIDDEN_LEVEL",
"HIDDEN_PLACE",
"RECITIFY_TIME",
"RecitifyUser",
"ImplementUser",
"AcceptUser",
"STATUS",
"ID",
"ORG_ID"
]
// json.Orders.push({
// Field: "CREATE_TIME",
// Order: "1"
// })
// json.IgnoreDataRule = true
GetRectifyListInfo(json).then(res => {
this.total = res.TotalCount
// for (let i = 0; i < res.length; i++) {
// res[i].STATUS = this.enumsData['PFStandardStatus'].find(item => item.code === res[i].STATUS ).name;
// }
const newRes = (res.Data || []).map(i => {
return {
...i,
title: i.AREA_NAME,
STATUS: i.STATUS !== undefined ? this.enumsData['PFStandardStatus'].find(item => item.code === i.STATUS).name : ''
}
})
if (paginate) {
this.lists = this.lists.concat(newRes)
} else {
this.lists = newRes
}
})
},
showDetail(id, taskID) {
uni.navigateTo({
url: 'riskRectifyShow?ID=' + id + '&taskID=' + taskID
})
},
handleShowPicker(p) {
let column = []
if (p.name === 'dateRange') {
column = ['全部', '当天', '最近三天', '最近一周', '最近一月']
}
if (p.name === 'status') {
column = this.enumsText['PFStandardStatus']
}
this.comPickerInfo = {
showPicker: true,
title: p.title,
name: p.name,
columns: [column]
}
},
onConfirmPicker(e) {
if (this.comPickerInfo.name === 'dateRange') {
let currentDate = new Date();
if (e.indexs[0] === 2) {
currentDate.setDate(currentDate.getDate() - 3);
} else if (e.indexs[0] === 3) {
currentDate.setDate(currentDate.getDate() - 7);
} else if (e.indexs[0] === 4) {
currentDate.setMonth(currentDate.getMonth() - 1);
}
if (e.indexs[0] === 0) {
this.searchStartTime = ''
this.dateFilterTxt = '时间区间'
} else {
this.dateFilterTxt = e.value[0]
this.searchStartTime = uni.$u.timeFormat(currentDate, 'yyyy-mm-dd 00:00:00');
}
}
if (this.comPickerInfo.name === 'status') {
this.filterStatus = this.enumsData['PFStandardStatus'][e.indexs[0]].code
this.statusFilterTxt = e.value[0]
// if (e.indexs[0] === 0) {
// // 全部
// this.filterStatus = null
// this.statusFilterTxt = '状态筛选'
// } else {
// this.statusFilterTxt = e.value[0]
// }
}
this.closePicker()
},
closePicker() {
this.comPickerInfo = {
showPicker: false,
columns: [],
title: '',
name: ''
}
},
},
computed: {
},
onReachBottom() {
if (this.total > 10 * this.pageIndex)
this.loadData(true)
},
watch: {
keyword(n, o) {
this.pageIndex = 0
this.keyword = n
this.loadData()
},
searchStartTime(n, o) {
this.pageIndex = 0
this.searchStartTime = n
this.loadData()
},
filterStatus(n, o) {
this.pageIndex = 0
this.filterStatus = n
this.loadData()
}
}
}
</script>
<style>
@import url("../../../../style/css/listTemplate.css");
.status {
background-color: rgba(5, 109, 232, 0.1);
color: #056DE8;
padding: 0px 5px 0px 5px;
border-radius: 5px;
}
</style>