feat(aigc): add shared work top bar and back fixes
- add leftAction prop to AigcTopBar to switch between back arrow and home icon - pass source=sharedWork query param when reLaunching home from shared work page - update home page to detect shared work source, adjust top bar and back behavior - add CSS styling for home top bar icon - update root page back handler to exit WeChat mini program
This commit is contained in:
@@ -152,6 +152,17 @@ const hasBackListener = computed(() => {
|
||||
|
||||
// 处理返回事件
|
||||
const handleBack = () => {
|
||||
const pages = getCurrentPages();
|
||||
|
||||
if (pages.length <= 1) {
|
||||
// #ifdef MP-WEIXIN
|
||||
if (typeof wx !== "undefined" && typeof wx.exitMiniProgram === "function") {
|
||||
wx.exitMiniProgram();
|
||||
return;
|
||||
}
|
||||
// #endif
|
||||
}
|
||||
|
||||
if (hasBackListener.value) {
|
||||
emit("back");
|
||||
return;
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
<view class="aigc-topbar" :style="topbarStyle">
|
||||
<view class="aigc-nav-row">
|
||||
<view class="aigc-topbar-back" @tap="emit('back')">
|
||||
<uni-icons class="aigc-back-icon" fontFamily="znicons" size="22" color="#172033">
|
||||
<uni-icons v-if="leftAction === 'home'" class="aigc-back-icon is-home" type="home-filled" size="20"
|
||||
color="#172033" />
|
||||
<uni-icons v-else class="aigc-back-icon" fontFamily="znicons" size="22" color="#172033">
|
||||
{{ zniconsMap["zn-nav-arrow-left"] }}
|
||||
</uni-icons>
|
||||
</view>
|
||||
@@ -43,6 +45,11 @@ const props = defineProps({
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
leftAction: {
|
||||
type: String,
|
||||
default: "back",
|
||||
validator: (value) => ["back", "home"].includes(value),
|
||||
},
|
||||
});
|
||||
|
||||
const emit = defineEmits(["back", "history", "recharge"]);
|
||||
|
||||
@@ -48,6 +48,10 @@
|
||||
transform: translateX(-1px);
|
||||
}
|
||||
|
||||
.aigc-back-icon.is-home {
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.aigc-topbar-actions {
|
||||
flex: 1 1 auto;
|
||||
width: auto;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<view class="aigc-home-page">
|
||||
<AigcTopBar :points="pointBalance" @back="handleBack" @history="handleHistory" @recharge="handleRecharge" />
|
||||
<AigcTopBar :points="pointBalance" :left-action="isSharedWorkEntry ? 'home' : 'back'" @back="handleBack"
|
||||
@history="handleHistory" @recharge="handleRecharge" />
|
||||
|
||||
<view class="aigc-home-browser">
|
||||
<GiftPointsToast :visible="giftToastVisible" @close="handleCloseGiftToast" />
|
||||
@@ -38,6 +39,7 @@ import FlowSteps from "./components/FlowSteps/index.vue";
|
||||
const { pointBalance, fetchCurrentCredit } = useCurrentCredit();
|
||||
const activeIndex = ref(0);
|
||||
const aigcConsentVisible = ref(false);
|
||||
const isSharedWorkEntry = ref(false);
|
||||
const giftToastVisible = ref(!getAigcGiftPointsToastClosed());
|
||||
const templates = ref([]);
|
||||
const steps = ["选模板", "传素材", "添积分", "出结果"];
|
||||
@@ -54,7 +56,8 @@ const fetchTemplateList = async () => {
|
||||
}
|
||||
};
|
||||
|
||||
onLoad(() => {
|
||||
onLoad((query = {}) => {
|
||||
isSharedWorkEntry.value = query.source === "sharedWork";
|
||||
aigcConsentVisible.value = !getAigcConsentAgreed();
|
||||
fetchTemplateList();
|
||||
});
|
||||
@@ -64,6 +67,13 @@ onShow(() => {
|
||||
});
|
||||
|
||||
const handleBack = () => {
|
||||
if (isSharedWorkEntry.value) {
|
||||
uni.reLaunch({
|
||||
url: "/pages/index/index"
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const pages = getCurrentPages();
|
||||
if (pages.length > 1) {
|
||||
uni.navigateBack();
|
||||
|
||||
@@ -100,7 +100,7 @@ onLoad((query = {}) => {
|
||||
|
||||
const openAigcHome = () => {
|
||||
uni.reLaunch({
|
||||
url: "/pages-aigc/home/home",
|
||||
url: "/pages-aigc/home/home?source=sharedWork",
|
||||
fail: () => showToast("打开模板列表失败"),
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user