修改完成待测试
This commit is contained in:
@@ -30,12 +30,32 @@
|
||||
><AppButton block label="新建礼仪活动" @click="createCeremony"
|
||||
/></view>
|
||||
<view v-else class="ceremony-list"
|
||||
><view
|
||||
><BatchManagementBar
|
||||
v-if="deletableCeremonies.length"
|
||||
resource-name="礼仪活动"
|
||||
:active="ceremonyBatch.selectionMode.value"
|
||||
:selected-count="ceremonyBatch.selectedCount.value"
|
||||
:all-selected="ceremonyBatch.allSelected.value"
|
||||
:busy="ceremonyBatch.deleting.value"
|
||||
@start="ceremonyBatch.enterSelectionMode"
|
||||
@finish="ceremonyBatch.exitSelectionMode"
|
||||
@toggle-all="ceremonyBatch.toggleAll"
|
||||
@delete="ceremonyBatch.requestDelete"
|
||||
/>
|
||||
<text v-if="ceremonyBatch.notice.value" class="batch-notice" role="status">{{ ceremonyBatch.notice.value }}</text>
|
||||
<text v-if="ceremonyBatch.error.value" class="batch-error" role="alert">{{ ceremonyBatch.error.value }}</text>
|
||||
<view
|
||||
v-for="item in ceremonies"
|
||||
:key="item.id"
|
||||
class="ceremony-card"
|
||||
@click="openCeremony(item)"
|
||||
><image
|
||||
@click="handleCeremonyClick(item)"
|
||||
><BatchSelectionMark
|
||||
v-if="ceremonyBatch.selectionMode.value && item.canDelete"
|
||||
:selected="ceremonyBatch.isSelected(item)"
|
||||
:label="`礼仪活动:${item.title}`"
|
||||
@toggle="ceremonyBatch.toggleSelection(item)"
|
||||
/>
|
||||
<image
|
||||
v-if="item.coverFile?.accessUrl"
|
||||
class="ceremony-card__cover"
|
||||
:src="item.coverFile.accessUrl"
|
||||
@@ -50,6 +70,18 @@
|
||||
></view
|
||||
>
|
||||
</view>
|
||||
<AppDialog
|
||||
:visible="ceremonyBatch.confirmationVisible.value"
|
||||
:close-on-mask="false"
|
||||
eyebrow="批量删除"
|
||||
title="将选中的礼仪活动移入回收站?"
|
||||
:message="ceremonyBatch.confirmationMessage.value"
|
||||
:confirm-text="ceremonyBatch.deleting.value ? '正在删除' : '移入回收站'"
|
||||
cancel-text="继续选择"
|
||||
show-cancel
|
||||
@confirm="ceremonyBatch.confirmDelete"
|
||||
@cancel="ceremonyBatch.cancelDelete"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@@ -57,7 +89,10 @@
|
||||
import { computed, ref } from "vue";
|
||||
import { 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 {
|
||||
@@ -65,6 +100,7 @@ import {
|
||||
isRequestCancelled
|
||||
} from "@/services/api/request-controller.js";
|
||||
import { ceremonyApi } from "@/services/api/ceremony-service.js";
|
||||
import { useBatchDeletion } from "@/composables/use-batch-deletion.js";
|
||||
import { formatMinuteTimestamp } from "@/utils/display-time.js";
|
||||
import { goBack, openPage, returnTo } from "@/utils/navigation/gateway.js";
|
||||
|
||||
@@ -72,8 +108,22 @@ const genealogyId = ref("");
|
||||
const ceremonies = ref([]);
|
||||
const ceremonyListState = ref("loading");
|
||||
const ceremonyListRequestController = createRequestController();
|
||||
const ceremonyDeleteRequestController = createRequestController();
|
||||
let pageActive = true;
|
||||
const valid = computed(() => /^[1-9]\d*$/.test(genealogyId.value));
|
||||
const ceremonyBatch = useBatchDeletion({
|
||||
items: ceremonies,
|
||||
deleteOne: (ceremony) =>
|
||||
ceremonyApi.deleteCeremony(genealogyId.value, ceremony.id, {
|
||||
requestController: ceremonyDeleteRequestController,
|
||||
}),
|
||||
resourceName: "礼仪活动",
|
||||
isActive: () => pageActive,
|
||||
onEmpty: () => {
|
||||
ceremonyListState.value = "empty";
|
||||
},
|
||||
});
|
||||
const deletableCeremonies = ceremonyBatch.deletableItems;
|
||||
const loadCeremonies = async () => {
|
||||
if (!valid.value) return;
|
||||
ceremonyListRequestController.abort();
|
||||
@@ -84,6 +134,7 @@ const loadCeremonies = async () => {
|
||||
});
|
||||
if (!pageActive) return;
|
||||
ceremonies.value = rows;
|
||||
ceremonyBatch.exitSelectionMode();
|
||||
ceremonyListState.value = ceremonies.value.length ? "ready" : "empty";
|
||||
} catch (error) {
|
||||
if (!pageActive || isRequestCancelled(error)) return;
|
||||
@@ -91,7 +142,7 @@ const loadCeremonies = async () => {
|
||||
}
|
||||
};
|
||||
const returnToFamily = () =>
|
||||
valid.value ? returnTo("F01", { genealogyId: genealogyId.value }) : goBack();
|
||||
valid.value ? returnTo("G05", { genealogyId: genealogyId.value }) : goBack();
|
||||
const createCeremony = () =>
|
||||
valid.value
|
||||
? openPage("R07", { genealogyId: genealogyId.value, mode: "create" }, "R05")
|
||||
@@ -102,6 +153,13 @@ const openCeremony = (item) =>
|
||||
{ genealogyId: genealogyId.value, ceremonyId: item.id },
|
||||
"R05",
|
||||
);
|
||||
const handleCeremonyClick = (item) => {
|
||||
if (ceremonyBatch.selectionMode.value && item?.canDelete) {
|
||||
ceremonyBatch.toggleSelection(item);
|
||||
return;
|
||||
}
|
||||
openCeremony(item);
|
||||
};
|
||||
onLoad((query) => {
|
||||
genealogyId.value = String(query?.genealogyId || "");
|
||||
if (valid.value) loadCeremonies();
|
||||
@@ -112,6 +170,7 @@ onShow(() => {
|
||||
onUnload(() => {
|
||||
pageActive = false;
|
||||
ceremonyListRequestController.abort();
|
||||
ceremonyDeleteRequestController.abort();
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -156,6 +215,14 @@ onUnload(() => {
|
||||
flex-direction: column;
|
||||
gap: 20rpx;
|
||||
}
|
||||
.batch-notice,
|
||||
.batch-error {
|
||||
display: block;
|
||||
font-size: clamp(13px, 21rpx, 16px);
|
||||
line-height: 1.55;
|
||||
}
|
||||
.batch-notice { color: #426538; }
|
||||
.batch-error { color: $brand-red; }
|
||||
.ceremony-card {
|
||||
display: flex;
|
||||
min-height: 138rpx;
|
||||
|
||||
Reference in New Issue
Block a user