|
@@ -14,7 +14,7 @@
|
|
|
>
|
|
>
|
|
|
|
|
|
|
|
<!-- 标题 -->
|
|
<!-- 标题 -->
|
|
|
- <FlexRow justify="space-between" width="100%">
|
|
|
|
|
|
|
+ <FlexRow justify="space-between" align="flex-end" width="100%">
|
|
|
<FlexCol gap="gap.md">
|
|
<FlexCol gap="gap.md">
|
|
|
<Text :text="villageInfoLoader.content.value?.title" fontConfig="primaryTitle" />
|
|
<Text :text="villageInfoLoader.content.value?.title" fontConfig="primaryTitle" />
|
|
|
</FlexCol>
|
|
</FlexCol>
|
|
@@ -43,6 +43,14 @@
|
|
|
</FlexRow>
|
|
</FlexRow>
|
|
|
</FlexRow>
|
|
</FlexRow>
|
|
|
|
|
|
|
|
|
|
+ <!-- 简介 -->
|
|
|
|
|
+ <TextEllipsis
|
|
|
|
|
+ fontConfig="secondText"
|
|
|
|
|
+ :lines="2"
|
|
|
|
|
+ :expandable="(villageInfoLoader.content.value?.desc as string || '').length > 80"
|
|
|
|
|
+ :text="(villageInfoLoader.content.value?.desc as string) || '暂无简介,欢迎您来编写完善!'"
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
<!-- 状态与申请 -->
|
|
<!-- 状态与申请 -->
|
|
|
<FlexRow
|
|
<FlexRow
|
|
|
backgroundColor="background.tertiary"
|
|
backgroundColor="background.tertiary"
|
|
@@ -219,17 +227,38 @@
|
|
|
<!-- 文脉乡源 -->
|
|
<!-- 文脉乡源 -->
|
|
|
<HomeTitle title="文脉乡源">
|
|
<HomeTitle title="文脉乡源">
|
|
|
<template #right>
|
|
<template #right>
|
|
|
- <Touchable
|
|
|
|
|
- :padding="[15, 20]"
|
|
|
|
|
- :innerStyle="{ marginRight: '20rpx' }"
|
|
|
|
|
- direction="row"
|
|
|
|
|
- center
|
|
|
|
|
- gap="gap.md"
|
|
|
|
|
- @click="handleGoPublish()"
|
|
|
|
|
- >
|
|
|
|
|
- <Icon name="https://xy.wenlvti.net/app_static/images/village/IconLargeHistory.png" :size="30" />
|
|
|
|
|
- <Text text="乡源AI帮你写" fontConfig="contentText" />
|
|
|
|
|
- </Touchable>
|
|
|
|
|
|
|
+ <FlexRow align="center" gap="gap.md">
|
|
|
|
|
+ <BubbleTip
|
|
|
|
|
+ v-model:show="showManageTip"
|
|
|
|
|
+ position="bottom"
|
|
|
|
|
+ crossPosition="left"
|
|
|
|
|
+ arrowOffsetX="-50rpx"
|
|
|
|
|
+ content="村社贴图太乱?点这里整理"
|
|
|
|
|
+ @contentClick="handleCloseManageTip(true)"
|
|
|
|
|
+ @close="handleCloseManageTip(false)"
|
|
|
|
|
+ >
|
|
|
|
|
+ <Touchable
|
|
|
|
|
+ :padding="[15, 20]"
|
|
|
|
|
+ direction="row"
|
|
|
|
|
+ center
|
|
|
|
|
+ gap="gap.md"
|
|
|
|
|
+ @click="handleGoPublish()"
|
|
|
|
|
+ >
|
|
|
|
|
+ <Icon name="https://xy.wenlvti.net/app_static/images/village/IconLargeFolkloreVibe.png" :size="30" />
|
|
|
|
|
+ <Text text="管理" fontConfig="contentText" />
|
|
|
|
|
+ </Touchable>
|
|
|
|
|
+ </BubbleTip>
|
|
|
|
|
+ <Touchable
|
|
|
|
|
+ :padding="[15, 20]"
|
|
|
|
|
+ direction="row"
|
|
|
|
|
+ center
|
|
|
|
|
+ gap="gap.md"
|
|
|
|
|
+ @click="handleGoPublish()"
|
|
|
|
|
+ >
|
|
|
|
|
+ <Icon name="https://xy.wenlvti.net/app_static/images/village/IconLargeHistory.png" :size="30" />
|
|
|
|
|
+ <Text text="乡源AI帮你写" fontConfig="contentText" />
|
|
|
|
|
+ </Touchable>
|
|
|
|
|
+ </FlexRow>
|
|
|
</template>
|
|
</template>
|
|
|
</HomeTitle>
|
|
</HomeTitle>
|
|
|
<RoundTags v-model:active="listActiveTag" :tags="['广场', '老味道', '老手艺', '老物件', '老故事']" />
|
|
<RoundTags v-model:active="listActiveTag" :tags="['广场', '老味道', '老手艺', '老物件', '老故事']" />
|
|
@@ -237,6 +266,7 @@
|
|
|
<OfficialAccountPublishWrap
|
|
<OfficialAccountPublishWrap
|
|
|
:topic="recommendTagName"
|
|
:topic="recommendTagName"
|
|
|
@publishsuccess="onPublishSuccess"
|
|
@publishsuccess="onPublishSuccess"
|
|
|
|
|
+ @empty="isOfficialEmpty=true"
|
|
|
/>
|
|
/>
|
|
|
<UpgradeDialog
|
|
<UpgradeDialog
|
|
|
ref="upgradeRef"
|
|
ref="upgradeRef"
|
|
@@ -273,15 +303,14 @@ import GridItem from '@/components/layout/grid/GridItem.vue';
|
|
|
import LightVillageApi from '@/api/light/LightVillageApi';
|
|
import LightVillageApi from '@/api/light/LightVillageApi';
|
|
|
import OfficialAccountPublishWrap from '@/common/components/OfficialAccountPublishWrap.vue';
|
|
import OfficialAccountPublishWrap from '@/common/components/OfficialAccountPublishWrap.vue';
|
|
|
import UpgradeDialog from '../dialogs/UpgradeDialog.vue';
|
|
import UpgradeDialog from '../dialogs/UpgradeDialog.vue';
|
|
|
-import JoinDialog from '../dialogs/JoinDialog.vue';
|
|
|
|
|
import VillageGallery from '../components/VillageGallery.vue';
|
|
import VillageGallery from '../components/VillageGallery.vue';
|
|
|
import WxButton from '@/components/basic/WxButton.vue';
|
|
import WxButton from '@/components/basic/WxButton.vue';
|
|
|
import Height from '@/components/layout/space/Height.vue';
|
|
import Height from '@/components/layout/space/Height.vue';
|
|
|
import IconButton from '@/components/basic/IconButton.vue';
|
|
import IconButton from '@/components/basic/IconButton.vue';
|
|
|
import Button from '@/components/basic/Button.vue';
|
|
import Button from '@/components/basic/Button.vue';
|
|
|
-import BubbleBox from '@/components/feedback/BubbleBox.vue';
|
|
|
|
|
import BubbleTip from '@/components/feedback/BubbleTip.vue';
|
|
import BubbleTip from '@/components/feedback/BubbleTip.vue';
|
|
|
import MemoryTimeOut from '@/components/composeabe/MemoryTimeOut';
|
|
import MemoryTimeOut from '@/components/composeabe/MemoryTimeOut';
|
|
|
|
|
+import TextEllipsis from '@/components/display/TextEllipsis.vue';
|
|
|
|
|
|
|
|
const authStore = useAuthStore();
|
|
const authStore = useAuthStore();
|
|
|
const { getIsVolunteer } = useUserTools();
|
|
const { getIsVolunteer } = useUserTools();
|
|
@@ -296,6 +325,7 @@ const { onPublishSuccess } = useOfficialAccount(() => {
|
|
|
const { isFollowed, onFollow, onUnFollow } = useFollow();
|
|
const { isFollowed, onFollow, onUnFollow } = useFollow();
|
|
|
const villageStore = useVillageStore();
|
|
const villageStore = useVillageStore();
|
|
|
const { getIsJoinedVillage } = useUserTools();
|
|
const { getIsJoinedVillage } = useUserTools();
|
|
|
|
|
+const isOfficialEmpty = ref(false);
|
|
|
const isJoined = ref(false);
|
|
const isJoined = ref(false);
|
|
|
const villageInfoLoader = useSimpleDataLoader(async () => {
|
|
const villageInfoLoader = useSimpleDataLoader(async () => {
|
|
|
const village = villageStore.currentVillage;
|
|
const village = villageStore.currentVillage;
|
|
@@ -306,6 +336,10 @@ const villageInfoLoader = useSimpleDataLoader(async () => {
|
|
|
isJoined.value = false;
|
|
isJoined.value = false;
|
|
|
}
|
|
}
|
|
|
handleShowFollowTip();
|
|
handleShowFollowTip();
|
|
|
|
|
+ isOfficialEmpty.value = false;
|
|
|
|
|
+ setTimeout(() => {
|
|
|
|
|
+ handleManageFollowTip();
|
|
|
|
|
+ }, 3000);
|
|
|
return {
|
|
return {
|
|
|
title: village?.name || '',
|
|
title: village?.name || '',
|
|
|
desc: village?.desc || '',
|
|
desc: village?.desc || '',
|
|
@@ -364,6 +398,16 @@ function handleCloseFollowTip() {
|
|
|
showFollowTipTimeout.recordTime();
|
|
showFollowTipTimeout.recordTime();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const showManageTipTimeout = new MemoryTimeOut('VillageManageTip', 1000 * 3600 * 20);//30h
|
|
|
|
|
+const showManageTip = ref(false);
|
|
|
|
|
+
|
|
|
|
|
+function handleManageFollowTip() {
|
|
|
|
|
+ if (showManageTipTimeout.isTimeout() && !isOfficialEmpty.value)
|
|
|
|
|
+ showManageTip.value = true;
|
|
|
|
|
+}
|
|
|
|
|
+function handleCloseManageTip(goComp: boolean) {
|
|
|
|
|
+ showManageTipTimeout.recordTime();
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
watch(rankActiveTag, () => {
|
|
watch(rankActiveTag, () => {
|
|
|
villageUserRankListLoader.reload();
|
|
villageUserRankListLoader.reload();
|
|
@@ -426,9 +470,12 @@ defineExpose({
|
|
|
onPageBack: (name: string, data: Record<string, unknown>) => {
|
|
onPageBack: (name: string, data: Record<string, unknown>) => {
|
|
|
if (name === 'refreshVillageGrallery') {
|
|
if (name === 'refreshVillageGrallery') {
|
|
|
villageGalleryRef.value?.refresh();
|
|
villageGalleryRef.value?.refresh();
|
|
|
-
|
|
|
|
|
} else if (name === 'showVillageUpgrade') {
|
|
} else if (name === 'showVillageUpgrade') {
|
|
|
upgradeRef.value?.show();
|
|
upgradeRef.value?.show();
|
|
|
|
|
+ } else if (name === 'refreshOfficialAccount') {
|
|
|
|
|
+ const tag = listActiveTag.value;
|
|
|
|
|
+ listActiveTag.value = '';
|
|
|
|
|
+ setTimeout(() => listActiveTag.value = tag, 100);
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|