buddhism/pages/memorial/memorial.vue
2025-11-21 17:43:49 +08:00

247 lines
6.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<base-background />
<!-- 使用自定义导航栏组件 -->
<custom-navbar ref="customNavbar" title="往生殿" />
<view class="header">
<!-- 状态展示 -->
<status-display v-if="loading" loading-text="加载中..." type="loading" />
<!-- 搜索框 -->
<search-box
v-model="searchName"
:search-icon="CommonEnum.SEARCH"
:width="'682rpx'"
btn-text="搜索"
placeholder="请输入姓名"
@search="handleSearch"
/>
<!-- 供奉列表 -->
<enshrined-list
v-if="!loading"
ref="enshrinedList"
:memorial-id="memorialId"
:search-keyword="searchName"
@item-click="handleItemClick"
/>
<!-- 状态栏 -->
<StatusBar
v-if="selectedUnitId"
ref="statusBar"
:unit-id="selectedUnitId"
@view-details="handleViewDetails"
/>
<!-- 楼层选择器 -->
<view class="floor-selector-container">
<FloorSelector
ref="floorSelector"
:default-area-id="defaultAreaId"
:default-floor-id="defaultFloorId"
:default-unit-id="defaultUnitId"
@selection-change="handleSelectionChange"
/>
</view>
</view>
<view class="bottom">
<bottom-button title="点灯" type="primary" @click="submitPrayer" />
</view>
</view>
</template>
<script>
import { CommonEnum } from "@/enum/common.js";
import SearchBox from "../../components/search-box/search-box.vue";
import StatusDisplay from "../../components/status-display/status-display.vue";
import EnshrinedList from "./compositons/enshrinedListIndex.vue";
import FloorSelector from "./compositons/floorSelector.vue";
import StatusBar from "./compositons/statusBar.vue";
import BottomButton from "../../components/bottom-button/bottom-button.vue";
export default {
components: {
BottomButton,
SearchBox,
StatusDisplay,
EnshrinedList,
FloorSelector,
StatusBar,
},
data() {
return {
CommonEnum,
searchName: "",
loading: false,
memorialId: "16", // 默认往生殿ID可以从路由参数获取
// 楼层选择器默认值
defaultFloorId: "",
defaultAreaId: "",
defaultUnitId: "",
// 当前选中的楼层信息
currentSelection: {
floor: null,
area: null,
unit: null,
},
// 当前选中的单元ID用于状态栏查询
selectedUnitId: "",
};
},
onLoad(options) {
// 从路由参数获取往生殿ID
if (options.id) {
this.memorialId = options.id;
}
this.initPage();
},
onShow() {
// 返回该页面时,刷新状态栏数据,避免与供奉页操作不一致
if (
this.selectedUnitId &&
this.$refs.statusBar &&
typeof this.$refs.statusBar.loadUnitData === "function"
) {
this.$refs.statusBar.loadUnitData(this.selectedUnitId);
}
},
methods: {
// 初始化页面
async initPage() {
this.loading = true;
try {
// 页面初始化逻辑
console.log("往生殿页面初始化ID:", this.memorialId);
} catch (error) {
console.error("页面初始化失败:", error);
uni.showToast({
title: "页面加载失败",
icon: "none",
});
} finally {
this.loading = false;
}
},
// 处理搜索
handleSearch(value) {
console.log("搜索内容:", value);
this.searchName = value;
// 跳转到往生者搜索页面并传递搜索关键词
uni.navigateTo({
url: `/pages/memorial/deceasedSearch?keyword=${encodeURIComponent(value)}`,
success: () => {
console.log("跳转到搜索页面成功");
},
fail: (error) => {
console.error("跳转失败:", error);
uni.showToast({
title: "页面跳转失败",
icon: "none",
});
},
});
},
// 处理列表项点击
handleItemClick(item) {
console.log("点击供奉记录:", item);
// 可以跳转到详情页或执行其他操作
uni.showToast({
title: `查看 ${item.worshiperName} 的供奉记录`,
icon: "none",
});
},
// 处理楼层选择变化
handleSelectionChange(selection) {
console.log("楼层选择变化:", selection);
this.currentSelection = selection;
// 当选中单元时更新selectedUnitId触发状态栏查询
if (selection.unit) {
console.log(
"选中单元:",
selection.unit.label,
"ID:",
selection.unit.id,
);
this.selectedUnitId = selection.unit.id;
} else {
// 如果没有选中单元,清空状态栏
this.selectedUnitId = "";
}
},
// 跳转到往生大殿页面的通用方法
navigateToMemorialHall(unitId) {
console.log("跳转到往生大殿页面ID:", unitId);
uni.navigateTo({
url: `/pages/memorial/memorialHall?id=${unitId}`,
success: () => {
console.log("跳转成功");
},
fail: (error) => {
console.error("跳转失败:", error);
uni.showToast({
title: "页面跳转失败",
icon: "none",
});
},
});
},
// 处理查看详情
handleViewDetails(unitData) {
console.log("查看单元详情:", unitData);
this.navigateToMemorialHall(unitData.id);
},
// 提交供奉 - 跳转到往生大殿页面
submitPrayer() {
console.log("提交供奉跳转到往生大殿页面ID:", this.selectedUnitId);
this.navigateToMemorialHall(this.selectedUnitId);
},
},
};
</script>
<style lang="scss" scoped>
.page {
width: 100%;
min-height: 100vh;
}
.header {
width: 100%;
min-height: 100vh;
display: flex;
align-items: center;
flex-direction: column;
padding-bottom: 180rpx;
box-sizing: border-box;
}
.floor-selector-container {
margin-bottom: 30rpx;
display: flex;
justify-content: center;
}
// 状态栏容器样式
:deep(.status-bar) {
width: 100%;
max-width: 750rpx;
}
.bottom {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
background: #fffbf5;
height: 180rpx;
}
</style>