提交 fb35d0e1 authored 作者: caodi\cd's avatar caodi\cd

fix:巡检管理

上级 9b32c3a6
......@@ -45,7 +45,7 @@ uni-page-head .uni-btn-icon {
}
.uni-navbar__header {
padding: 0 24px !important;
padding: 0 32px !important;
/* padding-right: 18px !important; */
}
......
<template>
<view class="inspect-item" @click="toPage">
<view
class="content"
:class="details.synchronization == 1 ? 'synchronization' : ''"
>
<view class="name">{{ getLabel(details.inspectionType) }}</view>
<view class="info">
<view class="info-row">
<text class="title">{{ details.recordName }}</text>
<text class="status">{{
<view class="inspect-item" @click="toPage">
<view class="content" :class="details.synchronization == 1 ? 'synchronization' : ''">
<view class="name">{{
details.synchronization == 0 ? "待同步" : "已同步"
}}</view>
<view class="info">
<view class="info-row">
<text class="title">{{ getLabel(details.inspectionType) }}</text>
<text class="status">{{
details.synchronization == 0 ? "待同步" : "已同步"
}}</text>
<view v-if="details.isException == 1" class="status alarm">
<text class="iconfont icon-yichang1"></text>
<text>有异常</text></view
>
</view>
<view class="info-row info-row-code">
<text>编号:</text>
<text class="code-num">{{ details.inspectionCode }}</text>
</view>
</view>
<view class="img">
<image
v-if="details.synchronization == 1"
class="bg-img"
src="../../static/img/add-img/default.png"
></image>
<image
v-else
class="bg-img"
src="../../static/img/add-img/active.png"
></image>
</view>
</view>
</view>
<view v-if="details.isException == 1" class="status alarm">
<text class="iconfont icon-yichang1"></text>
<text>有异常</text>
</view>
</view>
<view class="info-row info-row-code">
<text>巡检人:</text>
<text class="code-num">admin</text>
<text>编号:</text>
<text class="code-num">{{ details.inspectionCode }}</text>
<text>巡检日期:</text>
<text class="code-num">2025-01-29</text>
</view>
</view>
<view class="img">
<image v-if="details.synchronization == 1" class="bg-img" src="../../static/img/add-img/default.png"></image>
<!-- <image v-else class="bg-img" src="../../static/img/add-img/active.png"></image> -->
</view>
</view>
</view>
</template>
<script>
import { pad_inspection_type } from "@/utils/dict.js";
export default {
props: {
details: {
type: Object,
},
isDisable: {
type: Boolean,
},
},
methods: {
getLabel(val) {
const temp =
(
pad_inspection_type.rows.filter((item) => item.dictValue == val)[0] ||
{}
).dictLabel || "";
return temp.length ? temp.slice(0, 2) : "";
},
toPage() {
const url =
this.details.inspectionType == 1
? `/pages/inspectionContent/inspectionContent?isDisable=${
import {
pad_inspection_type
} from "@/utils/dict.js";
export default {
props: {
details: {
type: Object,
},
isDisable: {
type: Boolean,
},
},
methods: {
getLabel(val) {
const temp =
(
pad_inspection_type.rows.filter((item) => item.dictValue == val)[0] || {}
).dictLabel || "";
return temp.length ? temp : "";
},
toPage() {
const url =
this.details.inspectionType == 1 ?
`/pages/inspectionContent/inspectionContent?isDisable=${
this.isDisable ? 1 : 0
}`
: `/pages/shaftInspection/shaftInspectionNew?isDisable=${
}` :
`/pages/shaftInspection/shaftInspectionNew?isDisable=${
this.isDisable ? 1 : 0
}`;
uni.navigateTo({
url: `${url}&uid=${this.details.uid}`,
});
},
},
};
uni.navigateTo({
url: `${url}&uid=${this.details.uid}`,
});
},
},
};
</script>
<style scoped lang="less">
.inspect-item {
width: 50%;
padding-right: 16px;
margin-bottom: 16px;
.content {
background: #fff;
border: 0.4px solid rgba(224, 224, 224, 1);
border-radius: 12px;
padding: 18px 16px 14px 10px;
display: flex;
align-items: center;
height: 84px;
box-sizing: border-box;
position: relative;
background-image: linear-gradient(-67deg, #ffab2423, #ffab2411 50%);
.name {
background: #ffab2423;
border-radius: 12px;
width: 54px;
height: 54px;
margin-right: 10px;
display: flex;
justify-content: center;
align-items: center;
color: #f39800;
}
.info {
.info-row {
display: flex;
align-items: center;
margin-bottom: 8px;
&:last-of-type {
margin: 0;
}
.title {
font-size: 12px;
color: #000000;
font-weight: bold;
margin-right: 8px;
}
.status {
padding: 2px 4px;
font-size: 12px;
color: #ffffff;
text-align: center;
line-height: 20px;
font-weight: 400;
background: #ffab24;
border-radius: 3px;
}
.alarm {
margin-left: 8px;
background: rgba(255, 105, 82, 0.1);
font-size: 12px;
color: #ff6952;
text-align: center;
line-height: 20px;
font-weight: 400;
}
}
.info-row-code {
font-size: 14px;
color: #7c7c7c;
font-weight: 400;
.code-num {
font-size: 14px;
color: #000000;
font-weight: 400;
}
}
}
.img {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
.bg-img {
width: 80px;
height: 80px;
}
}
}
.synchronization {
background-image: linear-gradient(-67deg, #9c9c9c16, #9c9c9c09 50%);
.name {
background: #9c9c9c16;
border-radius: 12px;
color: #4a4a4a;
}
.status {
background: #9c9c9c16 !important;
color: #4a4a4a !important;
}
}
}
</style>
.inspect-item {
width: calc(50% - 8px);
margin-bottom: 16px;
.content {
background: #fff;
border: 0.4px solid rgba(224, 224, 224, 1);
border-radius: 12px;
padding: 12px;
display: flex;
align-items: center;
height: 78px;
box-sizing: border-box;
position: relative;
.name {
background: #ffab2423;
border-radius: 12px;
width: 54px;
height: 54px;
margin-right: 10px;
display: flex;
justify-content: center;
align-items: center;
color: #f39800;
}
.info {
.info-row {
display: flex;
align-items: center;
margin-bottom: 8px;
&:last-of-type {
margin: 0;
}
.title {
font-size: 12px;
color: #000000;
font-weight: bold;
margin-right: 8px;
}
.status {
padding: 2px 4px;
font-size: 12px;
color: #ffffff;
text-align: center;
line-height: 20px;
font-weight: 400;
background: #ffab24;
border-radius: 3px;
}
.alarm {
margin-left: 8px;
background: rgba(255, 105, 82, 0.1);
font-size: 12px;
color: #ff6952;
text-align: center;
line-height: 20px;
font-weight: 400;
}
}
.info-row-code {
font-size: 12px;
color: #7c7c7c;
font-weight: 400;
.code-num {
font-size: 12px;
color: #000000;
font-weight: 400;
margin-right: 10px;
&:last-child{
margin-right: 0;
}
}
}
}
.img {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
.bg-img {
width: 80px;
height: 80px;
}
}
}
.synchronization {
background-image: linear-gradient(-67deg, #9c9c9c16, #9c9c9c09 50%);
.name {
background: #9c9c9c16;
border-radius: 12px;
color: #4a4a4a;
}
.status {
background: #9c9c9c16 !important;
color: #4a4a4a !important;
}
}
}
</style>
\ No newline at end of file
......@@ -7,7 +7,7 @@
v-model="searchFrom.inspectionType"
:localdata="inspectArr"
@change="(e) => change(e, 'inspectionType')"
placeholder="巡检类型:全部"
placeholder="类型"
:clear="true"
:key="new Date().getTime()"
></uni-data-select>
......@@ -17,7 +17,7 @@
class="uni-search-item"
v-model="searchFrom.synchronization"
:localdata="synchronization"
placeholder="是否同步:全部"
placeholder="状态"
@change="(e) => change(e, 'synchronization')"
:clear="true"
:key="new Date().getTime()"
......@@ -29,14 +29,24 @@
class="uni-search-item"
v-model="searchFrom.isException"
:localdata="exceptionArr"
placeholder="有无异常:全部"
placeholder="异常"
@change="(e) => change(e, 'isException')"
:clear="true"
:key="new Date().getTime()"
></uni-data-select>
<uni-data-select
v-if="!hiddenSearch.includes('inspectionTime')"
class="uni-search-item"
v-model="searchFrom.inspectionTime"
:localdata="dateArr"
placeholder="选择时间"
@change="(e) => change(e, 'inspectionTime')"
:clear="true"
:key="new Date().getTime()"
></uni-data-select>
</view>
<view
<!-- <view
class="search-com-right"
v-if="!hiddenSearch.includes('inspectionTime')"
>
......@@ -47,7 +57,7 @@
:border="false"
@change="(e) => change(e, 'inspectionTime')"
/>
</view>
</view> -->
</view>
</template>
<script>
......@@ -82,8 +92,14 @@ export default {
],
exceptionArr: [
{ value: "all", text: "全部" },
{ value: "1", text: "有异常" },
{ value: "0", text: "无异常" },
{ value: "1", text: "有" },
{ value: "0", text: "无" },
],
dateArr: [
{ value: "0", text: "本月" },
{ value: "1", text: "本季" },
{ value: "2", text: "本年" },
{ value: "3", text: "自定义" },
],
};
},
......@@ -101,13 +117,13 @@ export default {
.search-com {
display: flex;
align-items: center;
width: 50%;
.search-com-left {
display: flex;
align-items: center;
flex: 1;
.uni-search-item {
margin-right: 12px;
width: 130px;
background: #fff;
border-radius: 4px;
border: none !important;
......
......@@ -48,6 +48,12 @@
"navigationBarTitleText": ""
}
},
// 新增配置---------
// 巡检管理
{
"path": "pages/inspectionManagement/index"
},
// 井道巡检新页面
{
"path": "pages/shaftInspection/shaftInspectionNew",
......
......@@ -22,7 +22,7 @@
<view class="username">{{ userName }}</view>
</view>
<view class="profile-right">
<button class="inspection-button">巡检管理</button>
<button class="inspection-button" @click="toInspectionManagement">巡检管理</button>
<button class="record-button">上架记录</button>
</view>
</view>
......@@ -87,6 +87,13 @@
url: "/pages/index/operLog",
});
},
// 巡检管理
toInspectionManagement() {
console.log(1111)
uni.navigateTo({
url: "/pages/inspectionManagement/index",
});
},
// 井道巡检
toShaftInspection() {
uni.navigateTo({
......
<template>
<view class="inspection-management">
<!-- 搜索项 -->
<SearchCom @change="change" />
<!-- 结果 -->
<view class="inspection-management-content">
<view class="count-tatal">
<text class="num">{{ countNum || 0 }}</text>
<text>查询结果</text>
</view>
<view class="month-list">
<!-- 每月记录 -->
<view
class="month-record-item"
v-for="(item, index) in list"
:key="index"
>
<view v-if="(item.list || []).length" class="seconed-title">
{{ item.submitTime || item.time}}
</view>
<view class="inspect-list">
<InspectionItem
v-for="ele in item.list"
:key="ele.uid"
:details="ele"
/>
</view>
</view>
<Empty v-if="list.length == 0" />
</view>
</view>
<!-- 开始巡检 -->
<view class="inspection-button" @click="toPage"
>开始巡检</view
>
</view>
<view class="inspection-management">
<uni-nav-bar :fixed="true" background-color="rgba(214, 240, 255, 0.0)" status-bar rightWidth="300">
<block slot="left">
<view class="uni-nav-bar-text" @click="back">
<text class="iconfont icon-Arrow-Left"></text>
</view>
</block>
<block slot="right" class="nav-right">
<view class="header-buttons">
<button class="button" @click="lookLog">机房巡检</button>
<button class="button" @click="lookLog">井道巡检</button>
</view>
</block>
</uni-nav-bar>
<!-- 搜索项 -->
<SearchCom @change="change" />
<!-- 结果 -->
<view class="inspection-management-content">
<view class="count-tatal">
<text class="num">{{ countNum || 0 }}</text>
<text calss="">查询结果</text>
</view>
<view class="month-list">
<!-- 每月记录 -->
<view class="month-record-item" v-for="(item, index) in list" :key="index">
<view v-if="(item.list || []).length" class="seconed-title">
{{ item.submitTime || item.time}}
</view>
<view class="inspect-list">
<InspectionItem v-for="ele in item.list" :key="ele.uid" :details="ele" />
</view>
</view>
<Empty v-if="list.length == 0" />
</view>
</view>
<!-- 开始巡检 -->
<view class="inspection-button" @click="toPage">同步数据</view>
</view>
</template>
<script>
import SearchCom from "@/components/searchCom/index.vue";
import InspectionItem from "@/components/inspectionItem/index.vue";
import { getDarft } from "@/request/index.js";
import { getAllInspections } from "@/request/index.js";
import Empty from "@/components/empty/index.vue";
export default {
components: {
SearchCom,
InspectionItem,
Empty,
},
data() {
return {
isDialog: false, //
list: [], // 展示数据
all_data: [], // 所有数据
searchForm: {
// 搜索条件
},
countNum: 0, // 统计查询总数
};
},
mounted() {
uni.showLoading();
getAllInspections()
.then((res) => {
this.all_data = res;
this.init();
uni.hideLoading();
})
.catch((error) => {
if (0 == error.code) {
uni.showToast({
title: error.msg,
icon: "none",
duration: 1000,
});
}
this.all_data = [];
uni.hideLoading();
});
},
computed: {
userInfo() {
return this.$store.state.now_user || {};
},
},
methods: {
init() {
const all_data = this.all_data || [];
const { inspectionTime = [] } = this.searchForm;
const startTime = inspectionTime[0];
const endTime = inspectionTime[1];
// 第一步: 筛选有效的时间范围
const timeFrame = all_data.filter((item) => {
if (!inspectionTime.length) {
return true;
} else {
return (
new Date(startTime).getTime() <= new Date(item.submitTime).getTime() &&
new Date(item.submitTime).getTime() <= new Date(endTime).getTime()
);
}
});
// 属于同一个月的数据 聚合
const tempAllData = {};
timeFrame.forEach((item) => {
const val = tempAllData[item.submitMonth] || [];
if (val.length) {
tempAllData[item.submitMonth].push(item);
} else {
tempAllData[item.submitMonth] = [item];
}
});
const keys = Object.keys(tempAllData);
// 第二步: 根据搜索条件过滤
const list = keys.map((key) => {
return {
time: key,
list: this.coverData(tempAllData[key]),
};
});
this.countNum = 0;
list.forEach((item) => {
this.countNum += item.list.length;
});
this.list = list;
},
coverData(arr = []) {
const {
isException = "",
inspectionType = "",
synchronization = "",
} = this.searchForm;
return arr.filter((item) => {
return (
( !isException || isException =="all" || item.isException == isException) &&
( !inspectionType || inspectionType =="all" || item.inspectionType == inspectionType) &&
( !synchronization || synchronization =="all" || item.synchronization == synchronization)
);
});
},
change(e) {
this.searchForm = e;
this.init();
},
toPage() {
uni.showLoading();
getDarft()
.then((res) => {
const darf_data = res || {};
if (darf_data.inspectionType == 1) {
uni.navigateTo({
url: `/pages/inspectionContent/inspectionContent?isDarf=1`,
});
} else if (darf_data.inspectionType == 2) {
uni.navigateTo({
url: `/pages/shaftInspection/shaftInspection?isDarf=1`,
});
} else {
uni.navigateTo({
url: "/pages/inspection/inspFirst",
});
}
uni.hideLoading();
})
.catch((error) => {
if (error.code == 0) {
uni.showToast({
title: error.msg,
icon: "none",
duration: 1000,
});
}
uni.navigateTo({
url: "/pages/inspection/inspFirst",
});
uni.hideLoading();
});
},
},
};
import SearchCom from "@/components/searchCom/index.vue";
import InspectionItem from "@/components/inspectionItem/index.vue";
import {
getDarft
} from "@/request/index.js";
import {
getAllInspections
} from "@/request/index.js";
import Empty from "@/components/empty/index.vue";
export default {
components: {
SearchCom,
InspectionItem,
Empty,
},
data() {
return {
isDialog: false, //
list: [], // 展示数据
all_data: [], // 所有数据
searchForm: {
// 搜索条件
},
countNum: 0, // 统计查询总数
};
},
mounted() {
uni.showLoading();
getAllInspections()
.then((res) => {
this.all_data = res;
this.init();
uni.hideLoading();
})
.catch((error) => {
if (0 == error.code) {
uni.showToast({
title: error.msg,
icon: "none",
duration: 1000,
});
}
this.all_data = [];
uni.hideLoading();
});
},
computed: {
userInfo() {
return this.$store.state.now_user || {};
},
},
methods: {
// 返回
back() {
uni.navigateBack();
},
init() {
const all_data = this.all_data || [];
const {
inspectionTime = []
} = this.searchForm;
const startTime = inspectionTime[0];
const endTime = inspectionTime[1];
// 第一步: 筛选有效的时间范围
const timeFrame = all_data.filter((item) => {
if (!inspectionTime.length) {
return true;
} else {
return (
new Date(startTime).getTime() <= new Date(item.submitTime).getTime() &&
new Date(item.submitTime).getTime() <= new Date(endTime).getTime()
);
}
});
// 属于同一个月的数据 聚合
const tempAllData = {};
timeFrame.forEach((item) => {
const val = tempAllData[item.submitMonth] || [];
if (val.length) {
tempAllData[item.submitMonth].push(item);
} else {
tempAllData[item.submitMonth] = [item];
}
});
const keys = Object.keys(tempAllData);
// 第二步: 根据搜索条件过滤
const list = keys.map((key) => {
return {
time: key,
list: this.coverData(tempAllData[key]),
};
});
this.countNum = 0;
list.forEach((item) => {
this.countNum += item.list.length;
});
this.list = list;
},
coverData(arr = []) {
const {
isException = "",
inspectionType = "",
synchronization = "",
} = this.searchForm;
return arr.filter((item) => {
return (
(!isException || isException == "all" || item.isException == isException) &&
(!inspectionType || inspectionType == "all" || item.inspectionType == inspectionType) &&
(!synchronization || synchronization == "all" || item.synchronization == synchronization)
);
});
},
change(e) {
this.searchForm = e;
this.init();
},
toPage() {
uni.showLoading();
getDarft()
.then((res) => {
const darf_data = res || {};
if (darf_data.inspectionType == 1) {
uni.navigateTo({
url: `/pages/inspectionContent/inspectionContent?isDarf=1`,
});
} else if (darf_data.inspectionType == 2) {
uni.navigateTo({
url: `/pages/shaftInspection/shaftInspection?isDarf=1`,
});
} else {
uni.navigateTo({
url: "/pages/inspection/inspFirst",
});
}
uni.hideLoading();
})
.catch((error) => {
if (error.code == 0) {
uni.showToast({
title: error.msg,
icon: "none",
duration: 1000,
});
}
uni.navigateTo({
url: "/pages/inspection/inspFirst",
});
uni.hideLoading();
});
},
},
};
</script>
<style scoped lang="less">
.inspection-management {
padding-top: 16px;
.count-tatal {
margin: 16px 0 8px 0;
font-size: 14px;
color: #4a4a4a;
font-weight: 400;
.num {
font-size: 18px;
color: #3774f6;
line-height: 26px;
font-weight: 600;
margin-right: 5px;
}
}
.inspection-management-content {
.month-list {
height: calc(100vh - 26px - 16px - 8px - 36px - 62px);
overflow: auto;
padding-bottom: 140px;
.seconed-title {
margin-top: 16px;
font-size: 18px;
color: #000000;
font-weight: bold;
}
.month-record-item {
margin-bottom: 24px;
&:last-of-type {
margin: 0;
}
.inspect-list {
display: flex;
flex-wrap: wrap;
}
}
}
}
.inspection-button {
display: flex;
align-items: center;
justify-content: center;
position: fixed;
bottom: 60px;
width: 240px;
height: 48px;
left: 50%;
color: #fff;
transform: translateX(-50%);
background-image: linear-gradient(180deg, #3773f6 0%, #2c57f6 99%);
box-shadow: 0px 10px 24px 0px rgba(51, 104, 246, 0.24);
border-radius: 27px;
}
}
</style>
/* 导航栏样式 */
.uni-nav-bar-text {
height: 36px;
width: 36px;
background: #ffffff;
border: 0.4px solid rgba(224, 224, 224, 1);
border-radius: 18px;
border-radius: 50%;
color: #333;
text-align: center;
.iconfont {
font-size: 20px;
line-height: 36px;
}
}
.nav-right {
width: 240px;
}
.header-buttons {
display: flex;
align-items: center;
margin-left: auto; // 将按钮组推到最右侧
.button {
width: 112px;
height: 36px;
background: #FFFFFF;
border-radius: 18px;
margin-left: 16px;
font-family: PingFangSC-Regular;
font-size: 16px;
color: #000000;
line-height: 36px;
font-weight: 400;
}
}
.inspection-management {
background-image: linear-gradient(115deg, #E8F0FB 0%, #E1EBFA 100%);
padding: 0 32px;
.inspection-management-content {
.count-tatal {
font-family: PingFangSC-Medium;
margin: 16px 0px 24px;
font-size: 14px;
color: #4a4a4a;
font-weight: 400;
height: 28px;
line-height: 28px;
.num {
font-size: 20px;
color: #3774f6;
line-height: 28px;
font-weight: 500;
margin-right: 2px;
}
}
.month-list {
height: calc(100vh - 26px - 16px - 8px - 36px - 62px);
overflow: auto;
padding-bottom: 140px;
.seconed-title {
font-size: 20px;
color: #000000;
line-height: 28px;
font-weight: 500;
margin-bottom: 12px;
}
.month-record-item {
margin-bottom: 24px;
&:last-of-type {
margin: 0;
}
.inspect-list {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
}
}
}
.inspection-button {
display: flex;
align-items: center;
justify-content: center;
position: fixed;
bottom: 60px;
width: 240px;
height: 48px;
left: 50%;
color: #fff;
transform: translateX(-50%);
background-image: linear-gradient(180deg, #3773f6 0%, #2c57f6 99%);
box-shadow: 0px 10px 24px 0px rgba(51, 104, 246, 0.24);
border-radius: 27px;
}
}
</style>
\ No newline at end of file
......@@ -260,7 +260,7 @@
/* #endif */
flex-wrap: nowrap;
flex-direction: row;
width: 120rpx;
width: auto;
// padding: 0 6px;
justify-content: center;
align-items: center;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论