You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

201 lines
4.9 KiB

<template>
<view class="flex search">
<view class="search-item flex justify-center" :search="searchFlag">
<view class="search-item-conent">
<uni-easyinput prefixIcon="search" type="text" v-model="query.thingDesc" placeholder="搜索" :inputBorder="false" @focus="searchFlag = true" />
</view>
</view>
<view class="search-item flex justify-center" v-if="!searchFlag" @tap="showPopup">
<view :class="filterFlag ? 'search-item-conent active': 'search-item-conent'">
<uni-icons customPrefix="customicons" type="filter" size="20" color="#666" />
<view>筛选</view>
</view>
</view>
<view v-else>
<view class="cancel-btn" @tap="searchFlag = false">取消</view>
</view>
</view>
<view class="negative-container">
<view class="card negative-item" v-for="item in problems" @tap="open(item)">
<view class="row">
<view class="col col-24">
<view class="label">录入时间:</view>
<view class="content">{{ item.createTime }}</view>
</view>
<view class="col col-12">
<view class="label">涉及单位:</view>
<view class="content">{{ item.departName }}</view>
</view>
<view class="col col-12">
<view class="label">涉及人员:</view>
<view class="content">{{ item.peoples || '/' }}</view>
</view>
<view class="col col-24">
<view class="label">问题类型:</view>
<view class="content">{{ item.problemType || '/' }}</view>
</view>
<view class="col col-24">
<view class="label">问题内容:</view>
<view class="content">{{ item.thingDesc }}</view>
</view>
</view>
<view class="negative-bottom">
<view v-if="item.distributionState === '0'" style="color: var(--danger-color)">未下发</view>
<view v-if="item.distributionState === '1'" style="color: #ff5722">已下发</view>
</view>
</view>
<empty v-if="problems.length === 0" />
</view>
<uni-popup ref="filterPopupRef" type="top">
<view class="popup-container">
<view class="popup-header">
<view>全部筛选</view>
<uni-icons type="closeempty" class="close-btn" @tap="closePopup"></uni-icons>
</view>
<view class="popup-body">
<view class="filter-container">
<view class="filter-label mt-10">涉及单位</view>
<view class="mb-10">
<uni-data-picker :localdata="departs" placeholder="请选择涉及单位" :border="false"
:map="{text:'shortName', value: 'id'}" v-model="query.departId" @change="search" />
</view>
</view>
</view>
<view class="footer col-24 flex gap-8">
<button class="col-12" @tap="reset">重置</button>
<button type="primary" @tap="handleSearch" class="col-12">完成</button>
</view>
</view>
</uni-popup>
</template>
<script>
import store from '@/store'
import { getDictOptions } from '@/common/dict'
import { listProblem } from '@/api/taskProblem.js'
import {
departTree
} from '@/api/depart'
import { getDictLabel } from '@/common/util'
let oldList;
let _this;
export default {
data() {
return {
problems: [],
query: {
size: 100,
current: 1,
taskType: 'problem_shooting'
},
departs: [],
searchFlag: false,
filterFlag: false,
}
},
setup(props, context) {
const taskType = getDictOptions('taskType');
return {
taskType,
getDictLabel
}
},
watch: {
searchFlag(val) {
if (val) {
oldList = this.problems;
this.problems = []
} else {
this.problems = oldList
}
},
'query.thingDesc': function(val) {
if (_this.searchFlag) {
if (val) {
_this.getProblems()
} else {
this.problems = []
}
}
}
},
onLoad() {
_this = this;
this.getProblems();
departTree().then(data => {
this.departs = data[0].children
})
},
methods: {
open(item) {
uni.navigateTo({
url: '/pages/task/problem/index?id=' + item.id
});
},
getProblems() {
uni.showLoading({
title: '数据加载中'
});
listProblem(this.query).then(data => {
this.problems = data.records
uni.hideLoading();
});
},
showPopup() {
this.$refs.filterPopupRef.open()
},
closePopup() {
this.$refs.filterPopupRef.close()
},
search() {
if (this.query.taskType || this.query.departId) {
this.filterFlag = true
} else {
this.filterFlag = false
}
this.getProblems()
},
handleSearch() {
this.search()
this.closePopup()
},
reset() {
this.filterFlag = false
this.query = {
size: 100,
current: 1,
taskType: 'problem_shooting'
}
this.getProblems()
}
}
}
</script>
<style lang="scss" scoped>
.negative-container {
max-height: calc(100vh - 98rpx);
overflow: auto;
}
.negative-title {
display: flex;
justify-content: space-between;
margin-bottom: 12rpx;
font-weight: 500;
font-size: 16px;
}
.negative-bottom {
display: flex;
justify-content: space-between;
.negative-tag {
color: #FF0000;
}
}
</style>