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.

330 lines
11 KiB

4 months ago
<template>
<view class="project">
3 months ago
<view class="cc-header">
<!-- Tabs栏 -->
<view class="cc-tabs tabs">
<view class="tab" :class="{'active': activeTab === 0}" @click="changeTab(0)">
<view class="tab-text">监督检查</view>
</view>
<view class="tab" :class="{'active': activeTab === 1}" @click="changeTab(1)">
<view class="tab-text">草稿</view>
</view>
4 months ago
</view>
3 months ago
<!-- 搜索框 -->
<view class="cc-search search-bar">
<view class="search-box">
<image src="/static/images/icon/search.png" />
<input v-model="queryParams.data.projectName" type="text" @confirm="handleSearchProjectList" placeholder="请输入项目名称" />
</view>
4 months ago
</view>
3 months ago
<!-- 行政区划和项目类型下拉框 -->
<view class="cc-query-dropdowns dropdowns">
<!-- <picker mode="selector" :range="districts" v-model="selectedDistrict">
<view class="dropdown">行政区划<image src="/static/images/icon/down.png" /></view>
</picker> -->
<region-picker @trigge-method="handleRegionParams" />
4 months ago
</view>
</view>
<!-- 项目列表 -->
3 months ago
<view class="cc-project-list project-list">
<view v-for="(project, index) in projectCheckList" :key="index" class="project-card">
<view class="attr-item project-title">{{ project.projectName }}</view>
4 months ago
<view class="attr-item">
<view class="attr-title">项目编号</view>
<view class="attr-value">{{ project.proCode }}</view>
4 months ago
</view>
<view class="attr-item">
<view class="attr-title">行政区划</view>
<view class="attr-value">{{ project.adcdName }}</view>
4 months ago
</view>
<view v-if="activeTab===0" class="attr-item">
<view class="attr-title">检查次数</view>
<view class="attr-value">{{ project.checkNum }}</view>
4 months ago
</view>
<view v-if="activeTab===0" class="attr-item">
<view class="attr-title">发现问题数</view>
<view class="attr-value">{{ project.problemTotal }}</view>
4 months ago
</view>
<view v-if="activeTab===0" class="attr-item">
<view class="attr-title">未更改总数</view>
<view class="attr-value">{{ project.notRectifiedNum }}</view>
4 months ago
</view>
<view v-if="activeTab===0" class="attr-item">
<view class="attr-title">涉及责任单位数</view>
<view class="attr-value">{{ project.liabilityUnitsNum }}</view>
4 months ago
</view>
<view v-if="activeTab===1" class="attr-item">
<view class="attr-title">检查类型</view>
3 months ago
<view class="attr-value">{{ project.checkTypeName }}</view>
4 months ago
</view>
<view class="operate-buttons">
<view class="buttons-group">
<view v-if="activeTab===0" class="primary-button__text button" @click="handleSeeProblem(project)">查看</view>
3 months ago
<view v-if="activeTab==1" class="primary-button__text button" @click="handleEditProjectCheckDraft(project)">编辑</view>
<view v-if="activeTab==1" class="error-button__text button" @click="handleDeleteProject(project)">删除</view>
4 months ago
</view>
</view>
</view>
3 months ago
<no-data-view v-if="projectCheckList.length === 0" />
<uni-load-more v-if="queryParams.pageNum == pages" status="no-more"></uni-load-more>
4 months ago
</view>
<!-- 操作按钮 -->
3 months ago
<view v-if="activeTab===0" class="cc-operation-buttons operation-buttons">
4 months ago
<view class="buttons-group">
<view class="primary-button button" @click="handleAddCheck()">新增检查</view>
</view>
</view>
3 months ago
<!-- 提示窗示例 -->
<uni-popup ref="delectDialog" type="dialog">
<uni-popup-dialog type="error" cancelText="取消" confirmText="确认" title="警告" content="是否确认删除该数据" @confirm="handleDeleteDialogConfirm"></uni-popup-dialog>
</uni-popup>
4 months ago
</view>
</template>
<script>
import { projectCheckListApi } from '@/api/system/project'
3 months ago
import { listInspectionsDraft, delInspectionsDraft } from '@/api/system/check/inspectionsDraft'
import { addressList } from '@/uni_modules/piaoyi-cityPicker/components/piaoyi-cityPicker/cityData.js'
3 months ago
import NoDataView from '@/components/no-data-view/no-data-view.vue'
import RegionPicker from '@/components/region-picker/region-picker.vue'
4 months ago
export default {
3 months ago
components: {
NoDataView,
RegionPicker
},
4 months ago
data() {
return {
activeTab: 0, // 当前选中的Tab索引
searchQuery: '', // 搜索框的内容
selectedDistrict: 0, // 行政区划选择的索引
selectedProjectType: 0, // 项目类型选择的索引
districts: ['请选择', '北京市', '上海市', '广州市'], // 行政区划数据
projectTypes: ['请选择', '建筑', 'IT', '教育'], // 项目类型数据
// 省市区数据
addressTreeList: addressList,
addressList: [],
4 months ago
projects: [ // 项目列表
{ name: '项目1', code: 'P001', district: '北京市', type: '建筑', status: 1 },
{ name: '项目2', code: 'P002', district: '上海市', type: 'IT', status: 0},
{ name: '项目3', code: 'P003', district: '广州市', type: '教育', status: 1},
{ name: '项目4', code: 'P004', district: '北京市', type: '建筑', status: 1}
],
queryParams: {
pageNum: 1,
pageSize: 10,
params: {orderBy: "create_time", sortBy: "desc"},
3 months ago
data: {
3 months ago
projectName: '',
menuType: '0'
3 months ago
}
},
3 months ago
projectCheckList: [],
3 months ago
pages: 0,
checkTypes: [],
deleteCheckDraftId: ''
4 months ago
};
},
created() {
3 months ago
this.getDicts("check_type").then((response) =>{
this.checkTypes = response.data
})
this.handleAddressTreeData()
3 months ago
this.judgeGetList()
},
onReachBottom() {
if (this.queryParams.pageNum < this.pages) {
this.queryParams.pageNum++; // 页码加1
3 months ago
this.judgeGetList()
4 months ago
}
},
methods: {
changeTab(index) {
this.activeTab = index;
3 months ago
this.resetQuery()
this.projects = []
3 months ago
this.judgeGetList('again')
3 months ago
},
// 初始化列表参数
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
params: { orderBy: "create_time", sortBy: "desc" },
data: {
projectName: ''
}
}
},
// 判断获取哪个列表
3 months ago
judgeGetList(mode) {
3 months ago
if (this.activeTab === 0) {
3 months ago
this.getProjectCheckList(mode)
3 months ago
} else if (this.activeTab === 1) {
3 months ago
this.getProjectCheckDraftList(mode)
3 months ago
}
},
// 检索项目
handleSearchProjectList() {
this.queryParams.pageNum = 1
3 months ago
this.judgeGetList('again')
4 months ago
},
// 获取项目列表
3 months ago
getProjectCheckList(mode) {
uni.showLoading({
title: '加载中...',
mask: true
})
projectCheckListApi(this.queryParams).then(res => {
3 months ago
if (mode === 'again') {
this.projectCheckList = []
uni.pageScrollTo({
scrollTop: 0, // 设置滚动到顶部
duration: 300 // 滚动动画持续时间,单位为毫秒
})
}
this.projectCheckList = [...this.projectCheckList, ...res.records]
this.pages = res.pages
this.projectCheckList.forEach(projectItem => {
projectItem.adcdName = this.formatAdcd(projectItem)
})
uni.hideLoading()
})
},
// 获取项目列表
getProjectCheckDraftList(mode) {
uni.showLoading({
title: '加载中...',
mask: true
})
3 months ago
listInspectionsDraft(this.queryParams).then(res => {
3 months ago
if (mode === 'again') {
this.projectCheckList = []
uni.pageScrollTo({
scrollTop: 0, // 设置滚动到顶部
duration: 300 // 滚动动画持续时间,单位为毫秒
})
}
this.projectCheckList = [...this.projectCheckList, ...res.records]
this.pages = res.pages
this.projectCheckList.forEach(projectItem => {
projectItem.adcdName = this.formatAdcd(projectItem)
3 months ago
projectItem.checkTypeName = this.checkTypesFormat(projectItem)
})
uni.hideLoading()
})
},
3 months ago
// 监督检查类型字典翻译
checkTypesFormat(row, column) {
return this.selectDictLabel(
this.checkTypes,
row.checkType
);
},
handleEditProjectCheckDraft(item) {
// 跳转到新增项目页面
this.$tab.navigateTo(`/pages/monitoring/edit/index?draftId=${item.id}`);
},
handleDeleteProject(projectItem, pegeType) {
this.deleteCheckDraftId = projectItem.id
this.$refs.delectDialog.open()
},
// 处理删除
handleDeleteDialogConfirm() {
delInspectionsDraft(this.deleteCheckDraftId).then(res => {
uni.showToast({
title: `删除项目成功`,
icon: 'none'
})
this.judgeGetList('again')
})
},
3 months ago
// 处理区划请求
handleRegionParams(adcd) {
this.queryParams.pageNum = 1
this.queryParams.data.adcd = adcd
this.getProjectCheckList('again')
},
// 将省市区的树状数据分解成列表,并在后面补零
handleAddressTreeData() {
let result = [];
function traverse(node) {
result.push({ code: node.code, name: node.name, dictLabel: node.name, dictValue: node.code}); // 将当前节点添加到结果中
if (node.children) {
node.children.forEach(child => traverse(child)); // 递归遍历子节点
}
}
this.addressTreeList.forEach(node => traverse(node)); // 遍历树的每个根节点
this.addressList = result
this.addressList.forEach(item => {
if (item.code.length===2) {
item.code = item.dictValue = item.code + '0000'
}
if (item.code.length===4) {
item.code = item.dictValue = item.code + '00'
}
})
},
// 处理省市区显示
formatAdcd(row) {
if (row.adcd) {
let provinceCode = row.adcd.slice(0, 2)+"0000";
let cityCode = row.adcd.slice(0, 4)+"00";
let areaCode = row.adcd;
let s="";
if (areaCode.length > 2) {
s=this.areaCodeFormat(provinceCode)
if (cityCode!=provinceCode){
s+="-"+this.areaCodeFormat(cityCode)
}
if (areaCode!=cityCode){
s+="-" + this.areaCodeFormat(areaCode)
}
}
return s
}
},
//行政区划字典
areaCodeFormat(adcd, column) {
return this.selectDictLabel(
this.addressList,
adcd
);
},
4 months ago
handleAddCheck() {
// 跳转到新增项目页面
this.$tab.navigateTo(`/pages/monitoring/edit/index`);
},
3 months ago
handleSeeProblem(item) {
4 months ago
// 跳转到查看问题页面
3 months ago
this.$tab.navigateTo(`/pages/monitoring/problem/list?id=${item.proNo}&proCode=${item.proCode}&projectName=${item.projectName}`);
4 months ago
}
}
};
</script>
<style lang="scss" scoped>
.project {
3 months ago
.cc-project-list {
padding: 162px 20px 96px;
4 months ago
}
}
</style>