Compare commits

..

No commits in common. "6c56e0786a77e3d7fa24a4f0f5b5901c1c8141a3" and "ad2e3c8e53bb083c2b13bf623cf272ad98b09112" have entirely different histories.

4 changed files with 25 additions and 540 deletions

View File

@ -46,11 +46,6 @@ const routes = [
name: 'MaterialDetail', name: 'MaterialDetail',
component: () => import('../views/Material/MaterialDetails.vue') component: () => import('../views/Material/MaterialDetails.vue')
}, },
{
path: '/materialConfirm/:data',
name: 'MaterialConfirm',
component: () => import('../views/Material/MaterialConfirm.vue')
},
{ {
path: '/iceEventManage/:data', path: '/iceEventManage/:data',
name: 'IceEventManage', name: 'IceEventManage',

View File

@ -1,96 +0,0 @@
<template>
<div class="home">
<van-nav-bar title="确认物资" fixed left-arrow @click-left="onClickLeft" />
<van-cell-group>
<van-cell title="当前站点" :value="yhzInfo.mc" />
</van-cell-group>
<div class="content" v-if="pendingConfirmList">
<van-cell-group>
<van-cell
v-for="(item, index) in pendingConfirmList"
:key="index"
:title="item.wzmc"
is-link
:label="`余量:${item.ye}(${item.dw})`"
:to="{
name: 'MaterialDetail',
params: {
data: encodeURIComponent(
JSON.stringify({
material: item,
yhzDetail: yhzInfo,
isConfirm: true,
})
),
},
}"
>
</van-cell>
</van-cell-group>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, reactive, toRaw, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
import { showToast, showLoadingToast } from "vant";
import { request } from "../../../../shared/utils/request";
const router = useRouter();
const route = useRoute();
const yhzInfo = ref({}); //
const pendingConfirmList = ref([]); //
//
onMounted(() => {
yhzInfo.value = JSON.parse(decodeURIComponent(route.params.data));
console.log("yhzInfo", toRaw(yhzInfo.value));
getPendingConfirmList();
});
const getPendingConfirmList = async () => {
try {
const data = {
yhzid: yhzInfo.value.id,
pageNum: 1,
pageSize: 9999,
};
const res = await request({
url: "/snow-ops-platform/yjwz/pendingConfirmList",
method: "get",
params: data,
});
if (res.code === "00000") {
pendingConfirmList.value = res.data.records;
} else {
throw new Error(res.message);
}
} catch (error) {
showToast({
type: "fail",
message: error.message,
});
console.log("error", error);
}
};
const onClickLeft = () => {
router.push({
name: "MaterialManage",
params: { data: encodeURIComponent(JSON.stringify(yhzInfo.value)) },
});
};
</script>
<style>
.home {
padding-top: var(--van-nav-bar-height); /* 自动匹配导航栏高度 */
}
.content {
padding: 16px 16px 80px 16px;
}
</style>

View File

@ -23,15 +23,7 @@
></van-image> ></van-image>
</template> </template>
</van-cell> </van-cell>
<van-cell <van-cell :title="'余量: ' + wzDetailData.ye + ' ' + wzDetailData.dw">
v-if="!isConfirm"
:title="'余量: ' + wzDetailData.ye + ' ' + wzDetailData.dw"
>
</van-cell>
<van-cell
v-if="isConfirm"
:title="'数量: ' + wzDetailData.sl + ' ' + wzDetailData.dw"
>
</van-cell> </van-cell>
<van-cell :title="'物资经度: ' + wzDetailData.jd"> </van-cell> <van-cell :title="'物资经度: ' + wzDetailData.jd"> </van-cell>
<van-cell :title="'物资纬度: ' + wzDetailData.wd"> </van-cell> <van-cell :title="'物资纬度: ' + wzDetailData.wd"> </van-cell>
@ -43,7 +35,9 @@
<van-cell :title="'所属养护站: ' + wzDetailData.yhzMc"> </van-cell> <van-cell :title="'所属养护站: ' + wzDetailData.yhzMc"> </van-cell>
<van-cell :title="'备注: ' + wzDetailData.remark"> </van-cell> <van-cell :title="'备注: ' + wzDetailData.remark"> </van-cell>
</van-cell-group> </van-cell-group>
<van-button type="primary" class="remark-btn" @click="handleRemarkOpen">
备注
</van-button>
<van-popup <van-popup
:show="showRemarkPopup" :show="showRemarkPopup"
position="bottom" position="bottom"
@ -73,7 +67,7 @@
备注信息 备注信息
</h1> </h1>
<van-field <van-field
v-model="editForm.material.remark" v-model="wzDetailData.remark"
placeholder="请输入备注" placeholder="请输入备注"
style=" style="
width: 100%; width: 100%;
@ -101,192 +95,6 @@
</div> </div>
</van-popup> </van-popup>
</div> </div>
<van-tabbar v-if="isConfirm">
<van-tabbar-item>
<template #default>
<div class="button-box">
<van-button
type="warning"
style="width: 50%; border-radius: 10px"
@click="notYHZPopupOpen"
>
不是本站点设备
</van-button>
<van-button
type="primary"
style="width: 50%; border-radius: 10px"
@click="addToThisYHZPopupOpen"
>
添加到服务站
</van-button>
</div>
</template>
</van-tabbar-item>
</van-tabbar>
<van-tabbar v-else>
<van-tabbar-item>
<template #default>
<van-button
type="primary"
style="width: 100%; border-radius: 10px; display: block"
@click="handleRemarkOpen"
>
备注
</van-button>
</template>
</van-tabbar-item>
</van-tabbar>
<van-popup
:show="notYHZPopup"
position="bottom"
closeable
close-on-click-overlay
:style="{ height: '20%' }"
@close="notYHZPopupClose"
>
<div
style="
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 0 16px;
"
>
<h1
style="
margin: 0 0 20px 0;
font-size: 18px;
color: #333;
text-align: center;
"
>
确认不是本站点物资
</h1>
<div style="display: flex; gap: 20px; width: 100%">
<van-button
type="default"
style="flex: 1; border-radius: 8px"
@click="notYHZPopupClose"
>
取消
</van-button>
<van-button
type="primary"
style="flex: 1; border-radius: 8px"
@click="notYHZConfirm"
>
确认
</van-button>
</div>
</div>
</van-popup>
<!-- 负责人弹窗 -->
<van-popup
:show="showAdminPicker"
round
position="bottom"
close-on-click-overlay
@close="showAdminPicker = false"
>
<van-picker
title="选择负责人"
:columns="adminOptions"
@confirm="onAdminConfirm"
@cancel="showAdminPicker = false"
/>
</van-popup>
<van-popup
:show="addToThisYHZPupup"
position="bottom"
closeable
close-on-click-overlay
@close="addToThisYHZPopupClose"
>
<div
style="
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 0 16px;
"
>
<h1
v-if="wzDetailData.fzr && wzDetailData.fzrid"
style="
margin: 20px 0 20px 0;
font-size: 18px;
color: #333;
text-align: center;
"
>
确认添加
</h1>
<div v-else>
<h1
style="
margin: 20px 0 20px 0;
font-size: 18px;
color: #333;
text-align: center;
"
>
添加到服务站
</h1>
<!-- 负责人 -->
<van-field
v-model="editForm.material.fzr"
is-link
arrow-direction="down"
readonly
label="负责人"
placeholder="请选择负责人"
@click="showAdminPicker = true"
/>
<van-field v-model="editForm.material.remark" label="备注(非必填)">
</van-field>
<van-field label="设备照片(非必填)" center>
<template #input>
<van-uploader
v-model="fileList"
@delete="handleDelete"
name="photos"
:file-list="fileList"
:file-type="['image/jpeg', 'image/png']"
:after-read="afterRead"
multiple
:max-count="6"
/>
</template>
</van-field>
</div>
<div style="display: flex; gap: 20px; width: 100%">
<van-button
type="default"
style="flex: 1; border-radius: 8px"
@click="addToThisYHZPopupClose"
>
取消
</van-button>
<van-button
type="primary"
style="flex: 1; border-radius: 8px"
@click="AddToThisTHZConfirm"
>
确认
</van-button>
</div>
</div>
</van-popup>
</div> </div>
</template> </template>
@ -303,14 +111,11 @@ const yhzDetail = ref({});
const wzData = ref([]); const wzData = ref([]);
const wzDetailData = ref(); // const wzDetailData = ref(); //
const photos = ref([]); // const photos = ref([]); //
const isConfirm = ref(false); //
const editForm = reactive({});
onMounted(() => { onMounted(() => {
const data = JSON.parse(decodeURIComponent(route.params.data)); const data = JSON.parse(decodeURIComponent(route.params.data));
yhzDetail.value = data.yhzDetail; yhzDetail.value = data.yhzDetail;
wzData.value = data.material; wzData.value = data.material;
isConfirm.value = data.isConfirm;
console.log("传递过来的参数:", data); console.log("传递过来的参数:", data);
getwzDetail(); getwzDetail();
}); });
@ -324,7 +129,6 @@ const getwzDetail = async () => {
}); });
if (res.code && res.code === "00000") { if (res.code && res.code === "00000") {
wzDetailData.value = res.data.material; wzDetailData.value = res.data.material;
// console.log('wzDetailData',toRaw(wzDetailData.value));
photos.value = res.data.photos; photos.value = res.data.photos;
} else { } else {
throw new Error(res.message); throw new Error(res.message);
@ -356,8 +160,6 @@ const showImage = (photos) => {
// //
const showRemarkPopup = ref(false); const showRemarkPopup = ref(false);
const handleRemarkOpen = () => { const handleRemarkOpen = () => {
editForm.material = JSON.parse(JSON.stringify(wzDetailData.value));
editForm.photos = [...photos.value];
showRemarkPopup.value = true; showRemarkPopup.value = true;
}; };
const onRemarkPopupClose = () => { const onRemarkPopupClose = () => {
@ -366,11 +168,15 @@ const onRemarkPopupClose = () => {
}; };
const onRemarkConfirm = async () => { const onRemarkConfirm = async () => {
try { try {
const res = await request({ const data = {
url: `/snow-ops-platform/yjwz/update`, material: wzDetailData.value,
method: "POST", photos: photos.value,
data: editForm, },
}); res = await request({
url: `/snow-ops-platform/yjwz/update`,
method: "POST",
data,
});
if (res.code && res.code === "00000") { if (res.code && res.code === "00000") {
showToast({ showToast({
message: "备注信息保存成功", message: "备注信息保存成功",
@ -387,182 +193,6 @@ const onRemarkConfirm = async () => {
}); });
} }
}; };
//
const notYHZPopup = ref(false);
const notYHZPopupOpen = () => {
notYHZPopup.value = true;
};
const notYHZPopupClose = () => {
notYHZPopup.value = false;
};
const notYHZConfirm = async () => {
try {
const res = await request({
url: "/snow-ops-platform/yjwz/confirm",
method: "POST",
data: {
rid: wzDetailData.value.rid,
confirmType: 2, // 1-2-
},
});
if (res.code === "00000") {
router.push({
name: "MaterialManage",
params: { data: encodeURIComponent(JSON.stringify(yhzDetail.value)) },
});
} else {
throw new Error(res.message);
}
} catch (error) {
showToast({ type: "fail", message: error.message || "操作失败" });
}
};
const addToThisYHZPupup = ref(false);
const adminOptions = ref([]); //
//
const getPersonList = async () => {
try {
const data = {
pageNum: 1,
pageSize: 9999,
yhzid: yhzDetail.value.id,
};
const res = await request({
url: "/snow-ops-platform/yhzry/list",
method: "get",
params: data,
});
if (res.code === "00000") {
adminOptions.value = res.data.records.map((item) => ({
text: item.xm,
value: item.userId,
}));
} else {
throw new Error("人员信息获取失败");
}
} catch (error) {
console.log(error);
showToast({
type: "fail",
message: error.message,
});
}
};
//
const showAdminPicker = ref(false);
const onAdminConfirm = (value) => {
const selectedOption = adminOptions.value.find(
(opt) => opt.value === value.selectedValues[0]
);
if (selectedOption) {
editForm.material.fzr = selectedOption.text;
editForm.material.fzrid = selectedOption.value;
}
showAdminPicker.value = false;
};
const addToThisYHZPopupOpen = async () => {
await getPersonList();
editForm.material = JSON.parse(JSON.stringify(wzDetailData.value));
editForm.photos = [...photos.value];
fileList.value = photos.value.map((photo) => ({
url: photo.photoUrl,
status: "done",
message: "上传成功",
serverUrl: photo.photoUrl,
}));
addToThisYHZPupup.value = true;
};
const addToThisYHZPopupClose = () => {
addToThisYHZPupup.value = false;
};
const AddToThisTHZConfirm = async () => {
if (!wzDetailData.value.fzr || !wzDetailData.value.fzrid) {
await onRemarkConfirm();
}
try {
const data = {
rid: wzDetailData.value.rid,
confirmType: 1, // 1-2-
};
const res = await request({
url: "/snow-ops-platform/yjwz/confirm",
method: "POST",
data,
});
if (res.code === "00000") {
showToast({
message: "操作成功",
type: "success",
});
addToThisYHZPopupClose();
router.push({
name: "MaterialManage",
params: { data: encodeURIComponent(JSON.stringify(yhzDetail.value)) },
});
} else {
throw new Error(res.message);
}
} catch (error) {
showToast({
type: "fail",
message: error.message || "操作失败",
});
}
};
//
const fileList = ref([]);
//
const handleDelete = (file) => {
if (file.serverUrl) {
const index = editForm.photos.findIndex(
(p) => p.photoUrl === file.serverUrl
);
if (index !== -1) {
editForm.photos.splice(index, 1);
}
}
};
//
const afterRead = async (file) => {
try {
const toast = showLoadingToast({
message: "上传中...",
forbidClick: true,
duration: 0, // 0
});
const formData = new FormData();
formData.append("file", file.file);
const res = await request({
url: "/snow-ops-platform/file/upload",
method: "post",
data: formData,
});
toast.close();
if (res.code === "00000") {
editForm.photos.push({ photoUrl: res.data });
const index = fileList.value.findIndex((f) => f.file === file.file);
if (index !== -1) {
fileList.value[index].serverUrl = res.data;
}
console.log("editForm.photos", toRaw(editForm.photos));
console.log("fileList.value", fileList.value);
} else {
throw new Error(res.message);
}
} catch (error) {
toast.close();
showToast({
type: "fail",
message: error.message,
});
}
};
</script> </script>
<style scoped> <style scoped>
@ -598,15 +228,17 @@ const afterRead = async (file) => {
.status-danger { .status-danger {
background-color: #ee0a24; background-color: #ee0a24;
} }
:deep(.van-tabbar-item__text) { .remark-btn {
width: 90%; position: fixed;
display: block; bottom: 20px;
} left: 16px;
.button-box { right: 16px;
display: flex; width: calc(100% - 32px);
justify-content: center; margin: 0 auto;
width: 100%; border-radius: 24px;
gap: 20px; font-size: 16px;
height: 44px;
z-index: 999;
} }
</style> </style>

View File

@ -11,12 +11,6 @@
<van-cell-group> <van-cell-group>
<van-cell title="当前站点" :value="yhzDetail.mc" /> <van-cell title="当前站点" :value="yhzDetail.mc" />
</van-cell-group> </van-cell-group>
<van-notice-bar
mode="link"
v-if="pendingConfirmList.length"
@click="handleConfirm"
>{{ pendingConfirmList.length }}个物资待确认</van-notice-bar
>
<div class="content"> <div class="content">
<van-cell-group> <van-cell-group>
@ -33,7 +27,6 @@
JSON.stringify({ JSON.stringify({
yhzDetail: yhzDetail, yhzDetail: yhzDetail,
material: item, material: item,
isConfirm: false,
}) })
), ),
}, },
@ -248,43 +241,6 @@ const getInitForm = () => ({
photos: [], photos: [],
}); });
const form = reactive(getInitForm()); const form = reactive(getInitForm());
const pendingConfirmList = ref([]); //
//
const getPendingConfirmList = async () => {
try {
const data = {
yhzid: yhzDetail.value.id,
pageNum: 1,
pageSize: 9999,
};
const res = await request({
url: "/snow-ops-platform/yjwz/pendingConfirmList",
method: "GET",
params: data,
});
if (res.code === "00000") {
pendingConfirmList.value = res.data.records;
} else {
throw new Error(res.message);
}
} catch (error) {
showToast({
type: "fail",
message: error.message || "获取待确认物资列表失败",
});
}
};
//
const handleConfirm = () => {
router.push({
name: "MaterialConfirm",
params: {
data: encodeURIComponent(JSON.stringify(yhzDetail.value)),
},
});
};
// rid // rid
const getMaterialList = async (wzmc) => { const getMaterialList = async (wzmc) => {
@ -322,7 +278,6 @@ onMounted(() => {
yhzDetail.value = JSON.parse(decodeURIComponent(route.params.data)); yhzDetail.value = JSON.parse(decodeURIComponent(route.params.data));
console.log("yhzDetail", toRaw(yhzDetail.value)); console.log("yhzDetail", toRaw(yhzDetail.value));
getMaterialList(); getMaterialList();
getPendingConfirmList();
}); });
// //
@ -376,7 +331,6 @@ const handleSubmit = async () => {
}); });
onPopupClose(); onPopupClose();
getMaterialList(searchValue.value); getMaterialList(searchValue.value);
getPendingConfirmList();
} else { } else {
throw new Error(res.message); throw new Error(res.message);
} }