修改完成待测试
This commit is contained in:
@@ -30,8 +30,28 @@
|
||||
><AppButton block label="新建往来记录" @click="createRelative"
|
||||
/></view>
|
||||
<view v-else class="record-list">
|
||||
<BatchManagementBar
|
||||
v-if="deletableRecords.length"
|
||||
resource-name="往来记录"
|
||||
:active="recordBatch.selectionMode.value"
|
||||
:selected-count="recordBatch.selectedCount.value"
|
||||
:all-selected="recordBatch.allSelected.value"
|
||||
:busy="recordBatch.deleting.value"
|
||||
@start="recordBatch.enterSelectionMode"
|
||||
@finish="recordBatch.exitSelectionMode"
|
||||
@toggle-all="recordBatch.toggleAll"
|
||||
@delete="recordBatch.requestDelete"
|
||||
/>
|
||||
<text v-if="recordBatch.notice.value" class="batch-notice" role="status">{{ recordBatch.notice.value }}</text>
|
||||
<text v-if="recordBatch.error.value" class="delete-error" role="alert">{{ recordBatch.error.value }}</text>
|
||||
<text v-if="deleteError" class="delete-error">{{ deleteError }}</text>
|
||||
<view v-for="item in records" :key="item.id" class="record-card" role="button" :aria-label="`查看${item.name}的往来详情`" @click="openRecordDetail(item)">
|
||||
<view v-for="item in records" :key="item.id" class="record-card" role="button" :aria-label="recordBatch.selectionMode.value && item.canDelete ? `${recordBatch.isSelected(item) ? '取消选择' : '选择'}${item.name}` : `查看${item.name}的往来详情`" @click="handleRecordClick(item)">
|
||||
<BatchSelectionMark
|
||||
v-if="recordBatch.selectionMode.value && item.canDelete"
|
||||
:selected="recordBatch.isSelected(item)"
|
||||
:label="`往来记录:${item.name}`"
|
||||
@toggle="recordBatch.toggleSelection(item)"
|
||||
/>
|
||||
<image
|
||||
v-if="item.mediaFiles?.[0]?.accessUrl"
|
||||
class="record-card__cover"
|
||||
@@ -48,7 +68,7 @@
|
||||
><text v-if="item.createTime">创建于 {{ formatMinuteTimestamp(item.createTime) }}</text
|
||||
><text v-if="item.content">{{ item.content }}</text></view
|
||||
>
|
||||
<view class="record-card__amount">
|
||||
<view v-if="!recordBatch.selectionMode.value" class="record-card__amount">
|
||||
<text v-if="item.amount">¥{{ item.amount }}</text>
|
||||
<AppButton
|
||||
v-if="item.canEdit"
|
||||
@@ -68,6 +88,17 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<AppDialog
|
||||
:visible="recordBatch.confirmationVisible.value"
|
||||
title="将选中的往来记录移入回收站?"
|
||||
:message="recordBatch.confirmationMessage.value"
|
||||
:confirm-text="recordBatch.deleting.value ? '正在删除' : '移入回收站'"
|
||||
cancel-text="继续选择"
|
||||
show-cancel
|
||||
:close-on-mask="false"
|
||||
@confirm="recordBatch.confirmDelete"
|
||||
@cancel="recordBatch.cancelDelete"
|
||||
/>
|
||||
<AppDialog
|
||||
:visible="Boolean(detailTarget)"
|
||||
eyebrow="往来详情"
|
||||
@@ -113,8 +144,11 @@ import { onBackPress, onLoad, onShow, onUnload } from "@dcloudio/uni-app";
|
||||
import AppButton from "@/components/AppButton.vue";
|
||||
import AppDialog from "@/components/AppDialog.vue";
|
||||
import AppLoading from "@/components/AppLoading.vue";
|
||||
import BatchManagementBar from "@/components/BatchManagementBar.vue";
|
||||
import BatchSelectionMark from "@/components/BatchSelectionMark.vue";
|
||||
import ModulePageBackground from "@/components/ModulePageBackground.vue";
|
||||
import PageHeader from "@/components/PageHeader.vue";
|
||||
import { useBatchDeletion } from "@/composables/use-batch-deletion.js";
|
||||
import {
|
||||
createRequestController,
|
||||
isRequestCancelled
|
||||
@@ -139,6 +173,19 @@ const detailError = ref("");
|
||||
const relativeRecordDetailController = createRequestController();
|
||||
let isPageActive = true;
|
||||
const valid = computed(() => /^[1-9]\d*$/.test(genealogyId.value));
|
||||
const recordBatch = useBatchDeletion({
|
||||
items: records,
|
||||
deleteOne: (record) =>
|
||||
lifeRecordApi.deleteRelativeRecord(genealogyId.value, record.id, {
|
||||
requestController: relativeRecordDeleteController,
|
||||
}),
|
||||
resourceName: "往来记录",
|
||||
isActive: () => isPageActive,
|
||||
onEmpty: () => {
|
||||
relativeRecordListState.value = "empty";
|
||||
},
|
||||
});
|
||||
const deletableRecords = recordBatch.deletableItems;
|
||||
const loadRecords = async () => {
|
||||
if (!valid.value) return;
|
||||
relativeRecordListController.abort();
|
||||
@@ -149,6 +196,7 @@ const loadRecords = async () => {
|
||||
});
|
||||
if (!isPageActive) return;
|
||||
records.value = rows;
|
||||
recordBatch.exitSelectionMode();
|
||||
relativeRecordListState.value = records.value.length ? "ready" : "empty";
|
||||
} catch (error) {
|
||||
if (!isPageActive || isRequestCancelled(error)) return;
|
||||
@@ -156,7 +204,7 @@ const loadRecords = async () => {
|
||||
}
|
||||
};
|
||||
const returnToFamily = () =>
|
||||
valid.value ? returnTo("F01", { genealogyId: genealogyId.value }) : goBack();
|
||||
valid.value ? returnTo("G05", { genealogyId: genealogyId.value }) : goBack();
|
||||
const createRelative = () =>
|
||||
valid.value
|
||||
? openPage("R04", { genealogyId: genealogyId.value, mode: "create" }, "R03")
|
||||
@@ -188,6 +236,13 @@ const openRecordDetail = async (record) => {
|
||||
detailError.value = getRequestErrorMessage(error, "完整记录读取失败,请稍后重试。");
|
||||
}
|
||||
};
|
||||
const handleRecordClick = (record) => {
|
||||
if (recordBatch.selectionMode.value && record?.canDelete) {
|
||||
recordBatch.toggleSelection(record);
|
||||
return;
|
||||
}
|
||||
openRecordDetail(record);
|
||||
};
|
||||
const closeRecordDetail = () => {
|
||||
if (detailState.value === "loading") return;
|
||||
detailTarget.value = null;
|
||||
@@ -211,7 +266,15 @@ const closeDeleteConfirmation = () => {
|
||||
deleteTarget.value = null;
|
||||
};
|
||||
const requestBack = () => {
|
||||
if (deleting.value || detailState.value === "loading") return true;
|
||||
if (deleting.value || recordBatch.deleting.value || detailState.value === "loading") return true;
|
||||
if (recordBatch.confirmationVisible.value) {
|
||||
recordBatch.cancelDelete();
|
||||
return true;
|
||||
}
|
||||
if (recordBatch.selectionMode.value) {
|
||||
recordBatch.exitSelectionMode();
|
||||
return true;
|
||||
}
|
||||
if (deleteConfirmationVisible.value) {
|
||||
closeDeleteConfirmation();
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user