bxztApp/packages/mobile/src/views/Material/MaterialManagement.vue

183 lines
4.0 KiB
Vue
Raw Normal View History

2025-10-16 16:44:08 +08:00
<template>
2025-11-05 17:29:08 +08:00
<div class="home">
<van-nav-bar title="物资管理" fixed left-arrow @click-left="onClickLeft">
</van-nav-bar>
<van-search
shape="round"
v-model="searchValue"
:show-action="false"
placeholder="请输入物资名称"
/>
<van-cell-group>
<van-cell title="当前站点" :value="yhzDetail.mc" />
</van-cell-group>
<div class="content">
2025-10-16 16:44:08 +08:00
<van-cell-group>
2025-11-05 17:29:08 +08:00
<van-cell
v-for="(item, index) in materialList"
:key="index"
:title="item.wzmc"
is-link
:label="`余量:${item.sl} (${item.dw})`"
:to="{
name: 'MaterialDetail',
params: {
yhzDetail: encodeURIComponent(JSON.stringify(yhzDetail.value)),
data: encodeURIComponent(JSON.stringify(item)),
},
}"
>
</van-cell>
2025-10-16 16:44:08 +08:00
</van-cell-group>
</div>
2025-11-05 17:29:08 +08:00
<van-button type="primary" class="add-btn" icon="plus" @click="handleAdd">
添加物资
</van-button>
<!-- 弹出层 -->
<van-popup
:show="showPopup"
position="bottom"
closeable
close-on-click-overlay
:style="{ height: '80%' }"
@close="onPopupClose"
>
<div class="popup-content">
<h3>添加新物资</h3>
</div>
</van-popup>
</div>
</template>
2025-10-16 16:44:08 +08:00
<script setup>
2025-11-05 17:29:08 +08:00
import "vant/es/toast/style";
import "vant/es/popup/style";
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";
import { pa } from "element-plus/es/locales.mjs";
const router = useRouter();
const route = useRoute();
const searchValue = ref(""); // 搜索框输入值
const showPopup = ref(false); // 控制弹出层显示隐藏
const yhzDetail = ref({}); // 养护站详情数据
const materialList = ref([]); // 物资列表数据
// 根据养护站rid获取物资列表
const getMaterialList = async (wzmc) => {
try {
const yhzid = yhzDetail.value.id;
if (!yhzid) {
return;
}
const data = {
yhzid,
wzmc,
paageNum: 1,
paageSize: 9999,
};
const res = await request({
url: "/snow-ops-platform/yjwz/list",
method: "GET",
params: data,
});
if (res.code && res.code === "00000") {
materialList.value = res.data.records;
} else {
throw new Error(res.message);
}
} catch (error) {
showToast({
type: "error",
message: error.message || "获取物资列表失败",
});
2025-10-16 16:44:08 +08:00
}
2025-11-05 17:29:08 +08:00
};
// 组件挂载时获取数据
onMounted(() => {
yhzDetail.value = JSON.parse(decodeURIComponent(route.params.data));
getMaterialList();
console.log("yhzDetail", toRaw(yhzDetail.value));
});
watch(
() => searchValue.value,
(newVal, oldVal) => {
if (newVal !== oldVal) {
getMaterialList(newVal);
}
2025-10-16 16:44:08 +08:00
}
2025-11-05 17:29:08 +08:00
);
const onClickLeft = () => {
router.push("/");
};
const handleAdd = () => {
showPopup.value = true;
};
const onPopupClose = () => {
showPopup.value = false;
};
</script>
<style scoped>
.home {
padding-top: var(--van-nav-bar-height); /* 自动匹配导航栏高度 */
}
.content {
padding: 16px 16px 80px 16px;
}
.content .van-cell-group .van-cell {
margin-bottom: 10px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
}
.add-btn {
position: fixed;
bottom: 20px;
left: 16px;
right: 16px;
width: calc(100% - 32px);
margin: 0 auto;
border-radius: 24px;
font-size: 16px;
height: 44px;
z-index: 999;
}
.grid {
margin-top: 16px;
}
.btn {
margin-top: 24px;
}
.status-tag {
display: inline-block;
padding: 3px 8px;
border-radius: 4px;
color: white;
font-size: 12px;
}
.status-good {
background-color: #07c160;
}
.status-warning {
background-color: #ff976a;
}
.status-danger {
background-color: #ee0a24;
}
</style>
2025-10-16 16:44:08 +08:00