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

提交

上级 a8e03645
......@@ -24,7 +24,7 @@
<!-- 关闭按钮 -->
<div class="close-button">
<text class="iconfont icon-a-bianzu16beifen" @click="close"></text>
<text class="iconfont icon-shibai1" @click="close"></text>
</div>
</view>
</view>
......
<template>
<view v-if="isOpen" class="synchronous-dialog">
<view class="synchronous-content">
<view class="title">巡检指引</view>
<view class="operating-instructions">
<view
v-for="(item, index) in startDialogData.text"
:key="index"
class="text"
>{{ item }}</view
>
</view><view class="row-item bottom-row">
<view v-if="!startDialogData.isList" class="button btn" @click="clearSignature">返回巡检列表</view>
<view class="button" @click="confirmSignature">我已到达</view>
</view>
<!-- 关闭按钮 -->
<div class="close-button">
<text class="iconfont icon-shibai1" @click="close"></text>
</div>
</view>
</view>
</template>
<script>
export default {
components: {},
props: {
startDialogData: {
type: Object,
default: "",
},
},
data() {
return {
isOpen: false,
};
},
mounted() {},
methods: {
confirmSignature() {
this.$emit("confirm", "");
},
open() {
this.isOpen = true;
},
// 关闭弹窗
close() {
this.isOpen = false;
},
},
};
</script>
<style scoped lang="less">
.synchronous-dialog {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
text-align: center;
.synchronous-content {
padding: 25.6px 19.2px;
width: 420px;
height: 214px;
box-sizing: border-box;
background-image: linear-gradient(
-6deg,
#f9ffe7 0%,
#ffffff 12%,
#fcfeff 73%,
#ccf1ff 100%
);
border: 0.4px solid rgba(224, 224, 224, 1);
border-radius: 12px;
position: relative;
.row-item {
display: flex;
align-items: center;
justify-content: center;
}
.title {
font-size: 18px;
color: #000000;
line-height: 26px;
font-weight: 500;
margin-bottom: 12px;
}
.operating-instructions {
.text {
font-size: 16px;
color: #000000;
text-align: center;
line-height: 24px;
font-weight: 400;
}
margin-bottom: 24px;
}
// 打包按钮
.bottom-row {
position: absolute;
bottom: 25.6px;
left: 50%;
transform: translateX(-50%);
.button {
display: flex;
align-items: center;
justify-content: center;
background-image: linear-gradient(180deg, #3773f6 0%, #2c57f6 99%);
box-shadow: 0px 10px 24px 0px rgba(51, 104, 246, 0.24);
border-radius: 27px;
width: 160px;
height: 32px;
color: #fff;
margin: 0 5px;
&.btn {
background: #ffffff;
color: #000000;
}
}
}
// 关闭按钮
.close-button {
position: absolute;
bottom: -40px;
left: 50%;
transform: translateX(-50%);
.iconfont {
color: #fff;
font-size: 24px;
}
}
}
}
</style>
......@@ -64,7 +64,7 @@
class="card-wrapper"
v-for="(card, cardIndex) in row"
:key="cardIndex"
@click="toShaftInspection(card.name, card.jfType, card.value)"
@click="startDialog(card.name, card.jfType, card.value, false)"
>
<view
class="card"
......@@ -159,7 +159,16 @@
</view>
<detail ref="detail" :jfType="jfType" :detailsItem="detailsItem"></detail
></view>
<view class="submit-module">
<view class="action-btn" @click="startDialogBtn()">开始巡检</view>
</view>
<signDialog ref="signDialog" @confirm="handlePopupConfirm"></signDialog>
<!-- 巡检弹窗 -->
<startDialog
ref="startDialog"
:startDialogData="startDialogData"
@confirm="handleStartDialog"
></startDialog>
</view>
</template>
<script>
......@@ -174,10 +183,12 @@ import {
import { getInspectionDetails } from "@/request/index.js";
import signDialog from "@/components/signDialog.vue";
import detail from "./components/detail.vue";
import startDialog from "./components/dialog.vue";
export default {
components: {
signDialog,
detail,
startDialog,
},
data() {
return {
......@@ -196,7 +207,15 @@ export default {
all_data: [], //所有数据
jfType: "0", //机房类型
allIsSubmitOne: false,
activeName: "F座3楼-内环屏蔽机房",
startDialogData: {
text: [],
isList: true,
isLast: false,
}, //弹窗文案
name: "F座3楼-内环屏蔽机房",
jfType: "0",
value: "1",
listData: [],
};
},
computed: {
......@@ -217,6 +236,11 @@ export default {
} else {
this.init();
}
// this.startDialogData.text = [
// `请到“${this.name}”后;`,
// "点击“我已到达”开始巡检",
// ];
console.log("this.startDialogData", this.startDialogData);
this.all_data = this.$store.state.all_data;
console.log("onShow", this.all_data);
},
......@@ -233,8 +257,10 @@ export default {
statusLable: item.statusLable,
};
});
this.listData = this.deepClone(list);
console.log("查看this.listData", this.listData);
const group1 = list.slice(0, 5);
const group2 = list.slice(5, 10);
const group2 = list.slice(5, 10).reverse();
const group3 = list.slice(10);
this.rows = [group1, group2, group3];
this.inspectionCode = `JFXJ${moment().format("yyyyMMDDHHmmss")}${
......@@ -256,6 +282,28 @@ export default {
resolve();
});
},
deepClone(target) {
if (typeof target !== "object" || target === null) {
return target;
}
let clone;
if (Array.isArray(target)) {
clone = [];
for (let i = 0; i < target.length; i++) {
clone[i] = this.deepClone(target[i]);
}
} else {
clone = {};
for (const key in target) {
if (target.hasOwnProperty(key)) {
clone[key] = this.deepClone(target[key]);
}
}
}
return clone;
},
// 回显数据
getDetails(uid) {
uni.showLoading();
......@@ -263,6 +311,8 @@ export default {
.then((res) => {
const detailsInfo = res;
console.log("detailsInfo", detailsInfo);
this.listData = this.deepClone(detailsInfo.originData);
console.log("详情this.listData", this.listData);
this.detailsInfo = detailsInfo;
this.inspectionNumber = detailsInfo.inspectionNumber;
......@@ -283,8 +333,8 @@ export default {
let group1 = this.cardsInfo.slice(0, 5);
let group2 = this.cardsInfo.slice(5, 10);
let group3 = this.cardsInfo.slice(10);
if(this.isSign) {
group2 = group2.reverse()
if (!this.isSign) {
group2 = group2.reverse();
}
this.rows = [group1, group2, group3];
console.log("this.cardsInfo", this.cardsInfo);
......@@ -311,10 +361,47 @@ export default {
}
console.log("this.detailsItem", this.detailsItem);
},
startDialogBtn(name = "F座3楼-内环屏蔽机房", jfType = "0", value = "1") {
let item = this.findTargetObject(this.listData);
console.log("即将操作的机房", item);
this.name = this.uid ? item.name : name;
this.jfType = this.uid ? item.jfType : jfType;
this.value = this.uid ? item.value : value;
this.startDialogData.text = [
`请到“${name}”后;`,
"点击“我已到达”开始巡检",
];
this.name = name;
this.jfType = jfType;
this.value = value;
this.$refs.startDialog.open();
},
startDialog(name = "F座3楼-内环屏蔽机房", jfType = "0", value = "1") {
this.name = name;
this.jfType = jfType;
this.value = value;
if (!this.uid && value != "1") {
this.startDialogData.text = [
`当前线路非常用巡检线路,`,
`是否需要从“${this.name}”开始巡检`,
];
} else {
this.startDialogData.text = [
`请到“${this.name}”后;`,
"点击“我已到达”开始巡检",
];
}
this.$refs.startDialog.open();
},
// 处理弹窗确认
handleStartDialog(summary) {
this.toShaftInspection(this.name, this.jfType, this.value);
},
// 跳转到具体的机房
toShaftInspection(location, jfType, value) {
toShaftInspection(name, jfType, value) {
uni.navigateTo({
url: `/pages/inspectionContent/inspectionContentNew?value=${value}&inspectionCode=${this.inspectionCode}&jfType=${jfType}&location=${location}&uid=${this.uid}&backValue=${this.backValue}`,
url: `/pages/inspectionContent/inspectionContentNew?value=${value}&inspectionCode=${this.inspectionCode}&jfType=${jfType}&location=${name}&uid=${this.uid}&backValue=${this.backValue}`,
});
},
lookTable() {
......@@ -325,6 +412,40 @@ export default {
toSign() {
this.$refs.signDialog.open();
},
findTargetObject(rows) {
if (!rows || rows.length === 0) return null;
let lastNonZeroIndex = -1;
// 首先检查所有对象,记录最后一个 status 不为 0 的索引
for (let i = 0; i < rows.length; i++) {
if (rows[i].status !== 0) {
lastNonZeroIndex = i;
}
}
// 如果没有找到任何 status 不为 0 的对象,返回 null
if (lastNonZeroIndex === -1) return null;
// 计算目标对象的索引
let targetIndex = lastNonZeroIndex + 1;
// 如果最后一个非零对象是数组的最后一个元素,则从第一个对象开始检查
if (lastNonZeroIndex === rows.length - 1) {
for (let i = 0; i < rows.length; i++) {
if (rows[i].status !== 0) {
targetIndex = i + 1;
break; // 找到第一个就停止
}
}
// 如果 targetIndex 超出数组范围,则返回 null
return targetIndex < rows.length ? rows[targetIndex] : null;
}
// 正常情况:返回最后一个非零对象的下一个对象
return rows[targetIndex];
},
// 处理弹窗确认
handlePopupConfirm(summary) {
this.detailsInfo.isSign = this.isSign = true; // 回显到文字显示区域
......@@ -675,4 +796,32 @@ export default {
}
}
}
.submit-module {
display: flex;
justify-content: center;
position: fixed;
gap: 16px;
left: 50%;
transform: translateX(-50%);
bottom: 25.6px;
.action-btn {
width: 145.6px;
height: 38.4px;
line-height: 38.4px;
background: #ffffff;
border: 0.8px solid rgba(224, 224, 224, 1);
box-shadow: 0px 8px 19.2px 0px rgba(185, 185, 185, 0.24);
border-radius: 21.6px 19.2px 19.2px 21.6px;
font-size: 16px;
color: #000000;
text-align: center;
font-weight: 400;
&.complete-btn {
background-image: linear-gradient(180deg, #3773f6 0%, #2c57f6 99%);
color: #ffffff;
}
}
}
</style>
......@@ -128,16 +128,25 @@
>
完成巡检
</view> -->
<view v-if="tabs[activeTab].value !=='qt'" class="action-btn complete-btn" @click="nextTab"> 下一项 </view>
<view
v-if="tabs[activeTab].value !== 'qt'"
class="action-btn complete-btn"
@click="nextTab"
>
下一项
</view>
</view>
<startDialog
ref="startDialog"
:startDialogData="startDialogData"
@confirm="handleStartDialog"
></startDialog>
</view>
</template>
<script>
import {
pad_2_1_inspection_items,
pad_all_inspection_position,
pad_2_1_floor,
tabsInfo1,
tabsInfo2,
} from "@/utils/dict.js"; //巡检位置,A座到F座 楼层2楼4楼到26楼
......@@ -160,6 +169,7 @@ import dlxt from "./components/dlxt.vue"; //电力系统
import xfxt from "./components/xfxt.vue"; //消防系统
import xlqk from "./components/xlqk.vue"; //线路情况
import qt from "./components/qt.vue"; //其它
import startDialog from "./components/dialog.vue";
export default {
components: {
......@@ -172,6 +182,7 @@ export default {
xfxt,
xlqk,
qt,
startDialog,
},
data() {
return {
......@@ -185,7 +196,7 @@ export default {
randomDescription: "这是一段随机说明文字。", // 随机说明文字
tabs: [],
activeTab: 0, // 当前选中的 Tab
inspectionResult: 0, // Switch 值(0: 正常, 1: 异常)
inspectionResult: "", // Switch 值(0: 正常, 1: 异常)
conclusion: "", // 情况摘要
photos: [], // 现场照片
historyData: null, // 历史数据
......@@ -195,6 +206,15 @@ export default {
list: [], //巡检信息
itemDetail: {},
backValue: "", //路由来源
startDialogData: {
text: [],
isList: false,
isLast: false,
}, //弹窗文案
listData: [],
name: "",
jfType: "0",
value: "1",
};
},
computed: {
......@@ -221,7 +241,7 @@ export default {
this.backValue = options.backValue || "";
this.tabs =
this.jfType === "2" || this.jfType === "3" ? tabsInfo2 : tabsInfo1;
console.log("机房查看options", options);
if (options.uid) {
this.getDetails(options.uid);
} else {
......@@ -266,7 +286,7 @@ export default {
.then((res) => {
const detailsInfo = res;
this.list = detailsInfo.originData[this.value - 1].details;
console.log("list", this.list);
console.log("查看list", this.list);
// this.inspectionResult = list[0].inspectionResult;
this.detailsInfo = detailsInfo;
console.log("detailsInfo", detailsInfo);
......@@ -296,6 +316,7 @@ export default {
getParams(isSubmit) {
if (this.uid) {
let posItem = this.detailsInfo.originData[this.value - 1];
this.listData = this.detailsInfo.originData;
let paramsObj = this.getAllChildFormData(); //获取所有数据
console.log("获取数据", paramsObj);
posItem.details = paramsObj;
......@@ -331,13 +352,14 @@ export default {
value: item.dictValue,
jfType: item.jfType,
isVaild: false, // 校验通过
details: {},
details: paramsObj,
status: item.status,
refName: `TabContentItem_${index}`,
statusLable: item.statusLable,
};
});
let tabList = this.deepClone(dataObj);
this.listData = this.deepClone(tabList);
let posItem = tabList[this.value - 1];
posItem.details = paramsObj;
posItem.isSubmit = isSubmit;
......@@ -457,7 +479,7 @@ export default {
"巡检模块"
);
} else {
params.uid = new Date().getTime(); // 唯一标识 pad 端使用
this.uid = params.uid = new Date().getTime(); // 唯一标识 pad 端使用
all_data.push(params);
logContent = getLogContent(
LOG_TYPE_ENUM.add,
......@@ -487,14 +509,86 @@ export default {
// 清空基础缓存信息
// this.$store.commit("SET_TEMP_DATA", {}); // 缓存[巡检信息]
uni.showToast({
title: isSubmit ? "提交成功" : "保存草稿成功",
icon: "success",
});
// uni.showToast({
// title: isSubmit ? "提交成功" : "保存草稿成功",
// icon: "success",
// });
if (isSubmit) {
this.startDialog();
} else {
uni.showToast({
title: "暂存成功",
icon: "none",
});
// uni.navigateTo({
// url: `/pages/inspectionContent/inspectionContentList?uid=${params.uid}&backValue=${this.backValue}`,
// });
}
uni.navigateTo({
url: `/pages/inspectionContent/inspectionContentList?uid=${params.uid}&backValue=${this.backValue}`,
});
},
startDialog() {
let item = this.findTargetObject(this.listData);
console.log("即将操作的机房", item);
this.name = item && item.name ? item.name : "";
this.jfType = item && item.name ? item.jfType : "";
this.value = item && item.name ? item.value : "";
if (item && item.name) {
this.startDialogData.text = [
`当前机房已巡检完毕,`,
`请到“${this.name}”`,
];
} else {
this.startDialogData.text = [
`本次巡检任务已全部完成,`,
"请“返回巡检列表”进行签名及数据同步",
];
}
this.$refs.startDialog.open();
},
// 处理弹窗确认
handleStartDialog() {
console.log("跳转前",this.uid)
uni.navigateTo({
url: `/pages/inspectionContent/inspectionContentNew?value=${this.value}&inspectionCode=${this.inspectionCode}&jfType=${this.jfType}&location=${this.name}&uid=${this.uid}&backValue=${this.backValue}`,
});
},
findTargetObject(rows) {
if (!rows || rows.length === 0) return null;
let lastNonZeroIndex = -1;
// 首先检查所有对象,记录最后一个 status 不为 0 的索引
for (let i = 0; i < rows.length; i++) {
if (rows[i].status !== 0) {
lastNonZeroIndex = i;
}
}
// 如果没有找到任何 status 不为 0 的对象,返回 null
if (lastNonZeroIndex === -1) return null;
// 计算目标对象的索引
let targetIndex = lastNonZeroIndex + 1;
// 如果最后一个非零对象是数组的最后一个元素,则从第一个对象开始检查
if (lastNonZeroIndex === rows.length - 1) {
for (let i = 0; i < rows.length; i++) {
if (rows[i].status !== 0) {
targetIndex = i + 1;
break; // 找到第一个就停止
}
}
// 如果 targetIndex 超出数组范围,则返回 null
return targetIndex < rows.length ? rows[targetIndex] : null;
}
// 正常情况:返回最后一个非零对象的下一个对象
return rows[targetIndex];
},
// 获取子组件数据
getAllChildFormData() {
// 获取所有子组件实例
......@@ -576,6 +670,7 @@ export default {
}
}, // 设置巡检结论
setInspectionResult(value) {
console.log("设置巡检结论",value)
this.inspectionResult = value;
this.list[this.activeTab].inspectionResult = value; // 更新当前 Tab 的数据
},
......
差异被折叠。
......@@ -69,7 +69,7 @@
import SearchCom from "@/components/searchCom/index.vue";
import InspectionItem from "@/components/inspectionItem/index.vue";
import { getDarft } from "@/request/index.js";
import Dialog from "./dialog.vue";
import Dialog from "../inspectionContent/components/dialog.vue";
import { getAllInspections } from "@/request/index.js";
import Empty from "@/components/empty/index.vue";
......
......@@ -34,10 +34,10 @@
</block>
<block slot="right" class="nav-right">
<view class="header-right">
<text
<!-- <text
class="iconfont icon-quanxuan"
@click.stop="toggleSelectAll"
></text>
></text> -->
<text class="iconfont icon-shanchu" @click.stop="deletePhotos"
>删除</text
>
......@@ -80,10 +80,10 @@
>
<text v-if="photo.selected"></text>
</view>
<text
<!-- <text
class="delete-icon iconfont icon-shanchu"
@click.stop="deletePhoto(photo)"
></text>
></text> -->
<view class="type">{{
photo.synchronization ? "已同步" : "待同步"
}}</view>
......
......@@ -7,8 +7,8 @@
rightWidth="300"
>
<block slot="left">
<view class="uni-nav-bar-text" @click="back">
<text class="iconfont icon-Arrow-Left"></text
<view class="" @click="back">
<text class="iconfont icon-fanhui"></text
></view>
</block>
</uni-nav-bar>
......
......@@ -31,7 +31,7 @@
<!-- 关闭按钮 -->
<div class="close-button">
<text class="iconfont icon-a-bianzu16beifen" @click="close"></text>
<text class="iconfont icon-shibai1" @click="close"></text>
</div>
</view>
</view>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论