|
|
@@ -1,317 +1,354 @@
|
|
|
<template>
|
|
|
- <FlexCol :padding="[30,30,0,30]" gap="gap.lg">
|
|
|
-
|
|
|
- <!-- 卡片背景 -->
|
|
|
- <BackgroundBox
|
|
|
- color1="#eecaa0"
|
|
|
- color2="white"
|
|
|
- color2Position="85%"
|
|
|
- color3="white"
|
|
|
- radius="radius.lg"
|
|
|
- direction="column"
|
|
|
- :padding="[35,30]"
|
|
|
- gap="gap.lg"
|
|
|
- >
|
|
|
-
|
|
|
- <!-- 标题 -->
|
|
|
- <FlexRow justify="space-between" gap="gap.lg" wrap align="center" width="100%">
|
|
|
- <FlexRow gap="gap.md">
|
|
|
- <Text
|
|
|
- :text="title"
|
|
|
+ <DynamicX
|
|
|
+ :page="page"
|
|
|
+ :injectScriptGlobal="pageScriptGlobal"
|
|
|
+ >
|
|
|
+ <template #default="{ page, context }">
|
|
|
+
|
|
|
+ <DynamicXNodeChild :node="page">
|
|
|
+ <template #nodeRender="{ node }">
|
|
|
+
|
|
|
+ <template v-if="node.type === 'Card:Basic'">
|
|
|
+
|
|
|
+ <!-- 标题 -->
|
|
|
+ <FlexRow justify="space-between" gap="gap.lg" wrap align="center" width="100%">
|
|
|
+ <FlexRow gap="gap.md">
|
|
|
+ <Text
|
|
|
+ :text="title"
|
|
|
+ :lines="1"
|
|
|
+ :fontSize="40"
|
|
|
+ wordBreak="break-all"
|
|
|
+ fontConfig="primaryTitle"
|
|
|
+ />
|
|
|
+ </FlexRow>
|
|
|
+ <FlexRow flex="1" justify="space-between" align="center" gap="gap.lg">
|
|
|
+ <IconButton icon="cascades" :size="40" @click="shareQRDialog?.show()" />
|
|
|
+ <FlexRow align="center" gap="gap.lg">
|
|
|
+ <BubbleTip
|
|
|
+ v-model:show="showFollowTip"
|
|
|
+ content="关注我,方便下次进入"
|
|
|
+ @contentClick="isFollowed ? undefined : onFollow()"
|
|
|
+ @close="handleCloseFollowTip"
|
|
|
+ >
|
|
|
+ <Button
|
|
|
+ :icon="isFollowed ? 'success' : 'https://xy.wenlvti.net/app_static/images/village/IconJoin.png'"
|
|
|
+ radius="radius.lgr"
|
|
|
+ :text="isFollowed ? (title.length < 5 ? '已关注' : '') : '关注'"
|
|
|
+ :padding="[15, 10]"
|
|
|
+ :iconProps="{ size: 38 }"
|
|
|
+ @click="isFollowed ? onUnFollow() : onFollow()"
|
|
|
+ />
|
|
|
+ </BubbleTip>
|
|
|
+ <FlexRow
|
|
|
+ v-if="isJoined"
|
|
|
+ gap="gap.md"
|
|
|
+ radius="radius.lgr"
|
|
|
+ backgroundColor="background.tertiary"
|
|
|
+ >
|
|
|
+ <Avatar
|
|
|
+ :src="authStore.userInfo?.avatar"
|
|
|
+ :size="65"
|
|
|
+ defaultAvatar="https://xy.wenlvti.net/app_static/images/mine/DefaultAvatar.png"
|
|
|
+ />
|
|
|
+ <FlexCol position="relative" gap="gap.sm" :padding="[0,30,0,0]">
|
|
|
+ <FlexRow align="center" :gap="10">
|
|
|
+ <Text :text="displayMyName" fontSize="23" :lines="1" :maxWidth="150" fontConfig="lightImportantTitle" />
|
|
|
+ <Button
|
|
|
+ v-if="isStaff"
|
|
|
+ :innerStyle="{ position: 'absolute', right: 0, top: 0, transform: 'translate(5%,-50%)' }"
|
|
|
+ text="管理" size="mini" radius="radius.md" type="danger"
|
|
|
+ @click="staffInfoRef?.show()"
|
|
|
+ />
|
|
|
+ </FlexRow>
|
|
|
+ <IconButton icon="edit-filling" size="26" @click="changeNickRef?.show()">
|
|
|
+ <Text text="改昵称" :wrap="false" fontSize="22" fontConfig="subText" />
|
|
|
+ </IconButton>
|
|
|
+ </FlexCol>
|
|
|
+ </FlexRow>
|
|
|
+ <Button
|
|
|
+ v-else
|
|
|
+ icon="https://xy.wenlvti.net/app_static/images/village/IconFollow.png"
|
|
|
+ radius="radius.lgr"
|
|
|
+ text="加入"
|
|
|
+ @click="handleGoJoin()"
|
|
|
+ />
|
|
|
+ </FlexRow>
|
|
|
+ </FlexRow>
|
|
|
+ </FlexRow>
|
|
|
+
|
|
|
+ <!-- 简介 -->
|
|
|
+ <FlexView :direction="descOpen ? 'column' : 'row'" gap="gap.md" justify="space-between" align="flex-start">
|
|
|
+ <!-- 简介 -->
|
|
|
+ <TextEllipsis
|
|
|
+ fontConfig="secondText"
|
|
|
+ :outerProps="{ direction: 'row', width: descOpen ? '' : '490rpx' }"
|
|
|
:lines="1"
|
|
|
- :fontSize="40"
|
|
|
+ :expandable="(villageInfoLoader.content.value?.desc as string || '').length > 20"
|
|
|
+ :text="(villageInfoLoader.content.value?.desc as string) || '暂无简介,欢迎您来编写完善!'"
|
|
|
wordBreak="break-all"
|
|
|
- fontConfig="primaryTitle"
|
|
|
+ @expand="descOpen = true;"
|
|
|
+ @collapse="descOpen = false;"
|
|
|
/>
|
|
|
- </FlexRow>
|
|
|
- <FlexRow flex="1" justify="space-between" align="center" gap="gap.lg">
|
|
|
- <IconButton icon="cascades" :size="40" @click="shareQRDialog?.show()" />
|
|
|
- <FlexRow align="center" gap="gap.lg">
|
|
|
- <BubbleTip
|
|
|
- v-model:show="showFollowTip"
|
|
|
- content="关注我,方便下次进入"
|
|
|
- @contentClick="isFollowed ? undefined : onFollow()"
|
|
|
- @close="handleCloseFollowTip"
|
|
|
+ <Button size="mini" icon="edit-filling" text="编辑简介" @click="handleGoEdit" />
|
|
|
+ </FlexView>
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Card:Level'">
|
|
|
+
|
|
|
+ <!-- 状态与申请 -->
|
|
|
+ <FlexRow
|
|
|
+ backgroundColor="background.tertiary"
|
|
|
+ radius="radius.md"
|
|
|
+ padding="space.md"
|
|
|
+ justify="space-between"
|
|
|
>
|
|
|
+ <FlexRow align="center">
|
|
|
+ <FlexCol gap="gap.md">
|
|
|
+ <FlexRow gap="gap.lg" align="center">
|
|
|
+ <Icon v-if="villageInfoLoader.content.value?.vipLevel === 4" name="https://xy.wenlvti.net/app_static/images/village/IconGov.png" :size="70" />
|
|
|
+ <Text :text="`${villageInfoLoader.content.value?.vipLevelText || '默认级别'}`" fontConfig="secondText" />
|
|
|
+ </FlexRow>
|
|
|
+ <Text v-if="villageInfoLoader.content.value?.sizeLimit" :text="`存储空间:${villageInfoLoader.content.value?.sizeText || ''}`" :fontSize="22" fontConfig="secondText" />
|
|
|
+ <Text v-else text="无限存储空间" :fontSize="22" fontConfig="secondText" />
|
|
|
+ </FlexCol>
|
|
|
+ </FlexRow>
|
|
|
+ <FlexRow align="center" gap="gap.md">
|
|
|
+ <IconButton icon="help-filling" @click="navTo('/pages/article/details', { id: 7021, modelId: 18, showRecommend: false })" />
|
|
|
+ <Button
|
|
|
+ v-if="(villageInfoLoader.content.value?.vipLevel || 0) < 4"
|
|
|
+ icon="https://xy.wenlvti.net/app_static/images/village/IconUser.png"
|
|
|
+ radius="radius.lgr"
|
|
|
+ :padding="[10, 30]"
|
|
|
+ backgroundColor="white"
|
|
|
+ text="升级村社"
|
|
|
+ @click="upgradeRef?.show()"
|
|
|
+ />
|
|
|
+ </FlexRow>
|
|
|
+ </FlexRow>
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Card:Gallery'">
|
|
|
+
|
|
|
+ <!-- 图片 -->
|
|
|
+ <VillageGallery
|
|
|
+ v-if="villageInfoLoader.content.value"
|
|
|
+ ref="villageGalleryRef"
|
|
|
+ :villageId="villageStore.currentVillage?.id ?? 0"
|
|
|
+ @goGallery="handleGoGallery"
|
|
|
+ />
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Card:AddressAndMap'">
|
|
|
+
|
|
|
+ <!-- 地址 -->
|
|
|
+ <FlexRow justify="space-between" align="center">
|
|
|
+ <FlexRow align="center" gap="gap.sm">
|
|
|
+ <Icon name="https://xy.wenlvti.net/app_static/images/village/IconMap.png" size="fontSize.md" />
|
|
|
+ <Text :text="villageInfoLoader.content.value?.address" fontConfig="contentText" fontSize="fontSize.sm" />
|
|
|
+ </FlexRow>
|
|
|
+ <Button size="mini" icon="picture" text="村社相册" @click="handleGoGallery" />
|
|
|
+ </FlexRow>
|
|
|
+ <VillageMiniMap
|
|
|
+ v-if="villageInfoLoader.content.value"
|
|
|
+ :lonlat="{
|
|
|
+ longitude: villageInfoLoader.content.value.longitude,
|
|
|
+ latitude: villageInfoLoader.content.value.latitude
|
|
|
+ }"
|
|
|
+ :currentNoticeContent="currentNoticeContent"
|
|
|
+ />
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Card:Static'">
|
|
|
+
|
|
|
+ <!-- 村社状态信息 -->
|
|
|
+ <FlexRow justify="space-between" align="center">
|
|
|
+ <FlexRow center gap="gap.lg" flexBasis="50%">
|
|
|
+ <Text text="村社排名" fontConfig="contentText" />
|
|
|
+ <Text text="No." fontConfig="lightTitle" />
|
|
|
+ <Text :text="villageInfoLoader.content.value?.rankText" fontConfig="primaryTitle" />
|
|
|
+ </FlexRow>
|
|
|
+ <FlexRow center gap="gap.lg" flexBasis="50%">
|
|
|
+ <Text text="村社等级" fontConfig="contentText" />
|
|
|
+ <Text :text="`${villageInfoLoader.content.value?.level}级`" fontConfig="primaryTitle" />
|
|
|
+ </FlexRow>
|
|
|
+ </FlexRow>
|
|
|
+ <FlexRow backgroundColor="background.tertiary" radius="radius.md" :padding="[30, 20]">
|
|
|
+ <Touchable direction="column" center gap="gap.sm" flexBasis="25%" @click="navTo('/pages/home/village/task/index')">
|
|
|
+ <Text text="乡源光" fontConfig="secondText" fontSize="fontSize.sm" />
|
|
|
+ <Text :text="villageInfoLoader.content.value?.light || '0'" fontConfig="importantTitle" />
|
|
|
+ <Button type="text" size="mini" text="做任务" @click="navTo('/pages/home/village/task/index')" />
|
|
|
+ </Touchable>
|
|
|
+ <Divider type="vertical" />
|
|
|
+ <FlexCol center gap="gap.sm" flexBasis="25%">
|
|
|
+ <Touchable direction="column" center @click="navTo('/pages/home/village/volunteer/list', { villageId: villageStore.currentVillage?.id ?? undefined })">
|
|
|
+ <Text text="乡源人数" fontConfig="contentText" fontSize="fontSize.sm" />
|
|
|
+ <Text :text="villageInfoLoader.content.value?.memberCount|| '0'" fontConfig="importantTitle" />
|
|
|
+ </Touchable>
|
|
|
+ <WxButton openType="share">
|
|
|
+ <Button type="text" size="mini" text="邀请加入" @click="navTo('/pages/home/village/task/index')" />
|
|
|
+ </WxButton>
|
|
|
+ </FlexCol>
|
|
|
+ <Divider type="vertical" />
|
|
|
+ <Touchable direction="column" center gap="gap.sm" flexBasis="25%" @click="navTo('/pages/home/village/follow/list', {
|
|
|
+ villageId: villageStore.currentVillage?.id ?? undefined,
|
|
|
+ })">
|
|
|
+ <Text text="关注人数" fontConfig="contentText" fontSize="fontSize.sm" />
|
|
|
+ <Text :text="villageInfoLoader.content.value?.followerCount|| '0'" fontConfig="importantTitle" />
|
|
|
+ <Height :size="36" />
|
|
|
+ </Touchable>
|
|
|
+ <Divider type="vertical" />
|
|
|
<Button
|
|
|
- :icon="isFollowed ? 'success' : 'https://xy.wenlvti.net/app_static/images/village/IconJoin.png'"
|
|
|
- radius="radius.lgr"
|
|
|
- :text="isFollowed ? (title.length < 5 ? '已关注' : '') : '关注'"
|
|
|
- :padding="[15, 10]"
|
|
|
- :iconProps="{ size: 38 }"
|
|
|
- @click="isFollowed ? onUnFollow() : onFollow()"
|
|
|
- />
|
|
|
- </BubbleTip>
|
|
|
- <FlexRow
|
|
|
- v-if="isJoined"
|
|
|
- gap="gap.md"
|
|
|
- radius="radius.lgr"
|
|
|
- backgroundColor="background.tertiary"
|
|
|
+ :padding="0"
|
|
|
+ type="text"
|
|
|
+ size="small"
|
|
|
+ textColor="text.title"
|
|
|
+ rightIcon="arrow-right"
|
|
|
+ @click="handleGoNew()"
|
|
|
+ >
|
|
|
+ <FlexCol>
|
|
|
+ <Text text="新手" fontConfig="contentText" />
|
|
|
+ <Text text="上路" fontConfig="contentText" />
|
|
|
+ </FlexCol>
|
|
|
+ </Button>
|
|
|
+ </FlexRow>
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Block:Rank'">
|
|
|
+
|
|
|
+ <!-- 排行榜 -->
|
|
|
+ <HomeTitle
|
|
|
+ :title="node.props?.title"
|
|
|
+ showMore
|
|
|
+ @moreClicked="navTo('/pages/home/village/rank/volunteer', {
|
|
|
+ villageId: villageStore.currentVillage?.id ?? undefined,
|
|
|
+ })"
|
|
|
+ />
|
|
|
+ <VillageUserRankList
|
|
|
+ :list="villageUserRankListLoader.content.value ?? []"
|
|
|
+ @goDetails="navTo('/pages/home/village/volunteer/detail', { id: $event.id })"
|
|
|
+ />
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Block:Collect'">
|
|
|
+
|
|
|
+ <!-- 魅力乡源 -->
|
|
|
+ <HomeTitle
|
|
|
+ :title="node.props?.title"
|
|
|
+ showMore
|
|
|
+ @moreClicked="handleGoCollect()"
|
|
|
>
|
|
|
- <Avatar
|
|
|
- :src="authStore.userInfo?.avatar"
|
|
|
- :size="65"
|
|
|
- defaultAvatar="https://xy.wenlvti.net/app_static/images/mine/DefaultAvatar.png"
|
|
|
- />
|
|
|
- <FlexCol position="relative" gap="gap.sm" :padding="[0,30,0,0]">
|
|
|
- <FlexRow align="center" :gap="10">
|
|
|
- <Text :text="displayMyName" fontSize="23" :lines="1" :maxWidth="150" fontConfig="lightImportantTitle" />
|
|
|
- <Button
|
|
|
- v-if="isStaff"
|
|
|
- :innerStyle="{ position: 'absolute', right: 0, top: 0, transform: 'translate(5%,-50%)' }"
|
|
|
- text="管理" size="mini" radius="radius.md" type="danger"
|
|
|
- @click="staffInfoRef?.show()"
|
|
|
+ <template #right>
|
|
|
+ <FlexRow align="center" gap="gap.md">
|
|
|
+ <FrameButton
|
|
|
+ text="管理"
|
|
|
+ size="small"
|
|
|
+ primary
|
|
|
+ @click="handleGoDigManage()"
|
|
|
+ />
|
|
|
+ <FrameButton
|
|
|
+ text="共编村史"
|
|
|
+ icon="https://xy.wenlvti.net/app_static/images/village/IconHistory.png"
|
|
|
+ size="small"
|
|
|
+ @click="handleGoCollect()"
|
|
|
/>
|
|
|
+ <Width :size="15" />
|
|
|
</FlexRow>
|
|
|
- <IconButton icon="edit-filling" size="26" @click="changeNickRef?.show()">
|
|
|
- <Text text="改昵称" :wrap="false" fontSize="22" fontConfig="subText" />
|
|
|
- </IconButton>
|
|
|
- </FlexCol>
|
|
|
- </FlexRow>
|
|
|
- <Button
|
|
|
- v-else
|
|
|
- icon="https://xy.wenlvti.net/app_static/images/village/IconFollow.png"
|
|
|
- radius="radius.lgr"
|
|
|
- text="加入"
|
|
|
- @click="handleGoJoin()"
|
|
|
+ </template>
|
|
|
+ </HomeTitle>
|
|
|
+ <ProvideVar :vars="{
|
|
|
+ GridItemIconSize: 90,
|
|
|
+ GridItemBackgroundColor: 'transparent',
|
|
|
+ GridItemPaddingHorizontal: 0,
|
|
|
+ GridItemPaddingVertical: 8,
|
|
|
+ }">
|
|
|
+ <Grid :borderGrid="false" :mainAxisCount="4">
|
|
|
+ <GridItem title="村社概况" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeIntrod.png" touchable @click="handleGoCollect(11, '村社概况')" />
|
|
|
+ <GridItem title="自然风光" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeEnvirounment.png" touchable @click="handleGoCollect(13, '自然风光')" />
|
|
|
+ <GridItem title="历史沿革" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeHistory.png" touchable @click="handleGoCollect(2, '历史沿革')" />
|
|
|
+ <GridItem title="特色产业" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeIndustry.png" touchable @click="handleGoCollect(9, '特色产业' )" />
|
|
|
+ <GridItem title="文艺活动" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeActivity.png" touchable @click="handleGoCollect(12, '文艺活动')" />
|
|
|
+ <GridItem title="非遗展示" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeShow.png" touchable @click="handleGoCollect(10, '非遗展示')" />
|
|
|
+ <GridItem title="民俗风采" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeFolkloreVibe.png" touchable @click="handleGoCollect(8, '民俗风采')" />
|
|
|
+ <GridItem title="历史人物" icon="https://xy.wenlvti.net/app_static/images/village/IconGoods.png" touchable @click="handleGoCollect(7, '历史人物')" />
|
|
|
+ </Grid>
|
|
|
+ </ProvideVar>
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Block:Games'">
|
|
|
+
|
|
|
+ <!-- 活力乡源 -->
|
|
|
+ <HomeTitle :title="node.props?.title" />
|
|
|
+ <ProvideVar :vars="{
|
|
|
+ GridItemIconSize: 90,
|
|
|
+ GridItemBackgroundColor: 'transparent',
|
|
|
+ GridItemPaddingHorizontal: 0,
|
|
|
+ GridItemPaddingVertical: 8,
|
|
|
+ }">
|
|
|
+ <Grid :borderGrid="false" :mainAxisCount="4">
|
|
|
+ <GridItem
|
|
|
+ v-for="item in node.props?.items"
|
|
|
+ :key="item.title"
|
|
|
+ :title="item.title"
|
|
|
+ :icon="item.icon"
|
|
|
+ touchable
|
|
|
+ @click="() => context.getScriptEngine().execute(item.handler, node.getNodeScriptContext?.())"
|
|
|
+ />
|
|
|
+ </Grid>
|
|
|
+ </ProvideVar>
|
|
|
+
|
|
|
+ </template>
|
|
|
+ <template v-else-if="node.type === 'Block:Official'">
|
|
|
+
|
|
|
+ <!-- 文脉乡源 -->
|
|
|
+ <HomeTitle :title="node.props?.title">
|
|
|
+ <template #right>
|
|
|
+ <FlexRow align="center" gap="gap.md">
|
|
|
+ <BubbleTip
|
|
|
+ v-model:show="showManageTip"
|
|
|
+ position="bottom"
|
|
|
+ crossPosition="right"
|
|
|
+ arrowOffsetX="180rpx"
|
|
|
+ content="村社贴图太乱?点这里整理"
|
|
|
+ @contentClick="handleCloseManageTip(true)"
|
|
|
+ @close="handleCloseManageTip(false)"
|
|
|
+ >
|
|
|
+ <FrameButton
|
|
|
+ text="管理"
|
|
|
+ size="small"
|
|
|
+ primary
|
|
|
+ @click="handleGoOfficalManage()"
|
|
|
+ />
|
|
|
+ </BubbleTip>
|
|
|
+ <FrameButton
|
|
|
+ text="乡源AI帮你写"
|
|
|
+ size="small"
|
|
|
+ icon="https://xy.wenlvti.net/app_static/images/village/IconLargeHistory.png"
|
|
|
+ @click="handleGoPublish()"
|
|
|
+ />
|
|
|
+ </FlexRow>
|
|
|
+ </template>
|
|
|
+ </HomeTitle>
|
|
|
+ <RoundTags
|
|
|
+ v-model:active="listActiveTag"
|
|
|
+ :tags="node.props?.tags"
|
|
|
+ />
|
|
|
+ <OfficialAccountPublishWrap
|
|
|
+ :topic="recommendTagName"
|
|
|
+ :path="recommendPath"
|
|
|
+ @publishsuccess="onPublishSuccess"
|
|
|
+ @empty="isOfficialEmpty=true"
|
|
|
/>
|
|
|
- </FlexRow>
|
|
|
- </FlexRow>
|
|
|
- </FlexRow>
|
|
|
|
|
|
- <FlexView :direction="descOpen ? 'column' : 'row'" gap="gap.md" justify="space-between" align="flex-start">
|
|
|
- <!-- 简介 -->
|
|
|
- <TextEllipsis
|
|
|
- fontConfig="secondText"
|
|
|
- :outerProps="{ direction: 'row', width: descOpen ? '' : '490rpx' }"
|
|
|
- :lines="1"
|
|
|
- :expandable="(villageInfoLoader.content.value?.desc as string || '').length > 20"
|
|
|
- :text="(villageInfoLoader.content.value?.desc as string) || '暂无简介,欢迎您来编写完善!'"
|
|
|
- wordBreak="break-all"
|
|
|
- @expand="descOpen = true;"
|
|
|
- @collapse="descOpen = false;"
|
|
|
- />
|
|
|
- <Button size="mini" icon="edit-filling" text="编辑简介" @click="handleGoEdit" />
|
|
|
- </FlexView>
|
|
|
-
|
|
|
- <!-- 状态与申请 -->
|
|
|
- <FlexRow
|
|
|
- backgroundColor="background.tertiary"
|
|
|
- radius="radius.md"
|
|
|
- padding="space.md"
|
|
|
- justify="space-between"
|
|
|
- >
|
|
|
- <FlexRow align="center">
|
|
|
- <FlexCol gap="gap.md">
|
|
|
- <FlexRow gap="gap.lg" align="center">
|
|
|
- <Icon v-if="villageInfoLoader.content.value?.vipLevel === 4" name="https://xy.wenlvti.net/app_static/images/village/IconGov.png" :size="70" />
|
|
|
- <Text :text="`${villageInfoLoader.content.value?.vipLevelText || '默认级别'}`" fontConfig="secondText" />
|
|
|
- </FlexRow>
|
|
|
- <Text v-if="villageInfoLoader.content.value?.sizeLimit" :text="`存储空间:${villageInfoLoader.content.value?.sizeText || ''}`" :fontSize="22" fontConfig="secondText" />
|
|
|
- <Text v-else text="无限存储空间" :fontSize="22" fontConfig="secondText" />
|
|
|
- </FlexCol>
|
|
|
- </FlexRow>
|
|
|
- <FlexRow align="center" gap="gap.md">
|
|
|
- <IconButton icon="help-filling" @click="navTo('/pages/article/details', { id: 7021, modelId: 18, showRecommend: false })" />
|
|
|
- <Button
|
|
|
- icon="https://xy.wenlvti.net/app_static/images/village/IconUser.png"
|
|
|
- radius="radius.lgr"
|
|
|
- :padding="[10, 30]"
|
|
|
- backgroundColor="white"
|
|
|
- text="升级村社"
|
|
|
- @click="upgradeRef?.show()"
|
|
|
- />
|
|
|
- </FlexRow>
|
|
|
- </FlexRow>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </DynamicXNodeChild>
|
|
|
+
|
|
|
|
|
|
- <!-- 图片 -->
|
|
|
- <VillageGallery
|
|
|
- v-if="villageInfoLoader.content.value"
|
|
|
- ref="villageGalleryRef"
|
|
|
- :villageId="villageStore.currentVillage?.id ?? 0"
|
|
|
- @goGallery="handleGoGallery"
|
|
|
- />
|
|
|
-
|
|
|
- <!-- 地址 -->
|
|
|
- <FlexRow justify="space-between" align="center">
|
|
|
- <FlexRow align="center" gap="gap.sm">
|
|
|
- <Icon name="https://xy.wenlvti.net/app_static/images/village/IconMap.png" size="fontSize.md" />
|
|
|
- <Text :text="villageInfoLoader.content.value?.address" fontConfig="contentText" fontSize="fontSize.sm" />
|
|
|
- </FlexRow>
|
|
|
- <Button size="mini" icon="picture" text="村社相册" @click="handleGoGallery" />
|
|
|
- </FlexRow>
|
|
|
- <VillageMiniMap
|
|
|
- v-if="villageInfoLoader.content.value"
|
|
|
- :lonlat="{
|
|
|
- longitude: villageInfoLoader.content.value.longitude,
|
|
|
- latitude: villageInfoLoader.content.value.latitude
|
|
|
- }"
|
|
|
- :currentNoticeContent="currentNoticeContent"
|
|
|
- />
|
|
|
-
|
|
|
- <FlexRow justify="space-between" align="center">
|
|
|
- <FlexRow center gap="gap.lg" flexBasis="50%">
|
|
|
- <Text text="村社排名" fontConfig="contentText" />
|
|
|
- <Text text="No." fontConfig="lightTitle" />
|
|
|
- <Text :text="villageInfoLoader.content.value?.rankText" fontConfig="primaryTitle" />
|
|
|
- </FlexRow>
|
|
|
- <FlexRow center gap="gap.lg" flexBasis="50%">
|
|
|
- <Text text="村社等级" fontConfig="contentText" />
|
|
|
- <Text :text="`${villageInfoLoader.content.value?.level}级`" fontConfig="primaryTitle" />
|
|
|
- </FlexRow>
|
|
|
- </FlexRow>
|
|
|
-
|
|
|
- <FlexRow backgroundColor="background.tertiary" radius="radius.md" :padding="[30, 20]">
|
|
|
- <Touchable direction="column" center gap="gap.sm" flexBasis="25%" @click="navTo('/pages/home/village/task/index')">
|
|
|
- <Text text="乡源光" fontConfig="secondText" fontSize="fontSize.sm" />
|
|
|
- <Text :text="villageInfoLoader.content.value?.light || '0'" fontConfig="importantTitle" />
|
|
|
- <Button type="text" size="mini" text="做任务" @click="navTo('/pages/home/village/task/index')" />
|
|
|
- </Touchable>
|
|
|
- <Divider type="vertical" />
|
|
|
- <FlexCol center gap="gap.sm" flexBasis="25%">
|
|
|
- <Touchable direction="column" center @click="navTo('/pages/home/village/volunteer/list', { villageId: villageStore.currentVillage?.id ?? undefined })">
|
|
|
- <Text text="乡源人数" fontConfig="contentText" fontSize="fontSize.sm" />
|
|
|
- <Text :text="villageInfoLoader.content.value?.memberCount|| '0'" fontConfig="importantTitle" />
|
|
|
- </Touchable>
|
|
|
- <WxButton openType="share">
|
|
|
- <Button type="text" size="mini" text="邀请加入" @click="navTo('/pages/home/village/task/index')" />
|
|
|
- </WxButton>
|
|
|
- </FlexCol>
|
|
|
- <Divider type="vertical" />
|
|
|
- <Touchable direction="column" center gap="gap.sm" flexBasis="25%" @click="navTo('/pages/home/village/follow/list', {
|
|
|
- villageId: villageStore.currentVillage?.id ?? undefined,
|
|
|
- })">
|
|
|
- <Text text="关注人数" fontConfig="contentText" fontSize="fontSize.sm" />
|
|
|
- <Text :text="villageInfoLoader.content.value?.followerCount|| '0'" fontConfig="importantTitle" />
|
|
|
- <Height :size="36" />
|
|
|
- </Touchable>
|
|
|
- <Divider type="vertical" />
|
|
|
- <Button
|
|
|
- :padding="0"
|
|
|
- type="text"
|
|
|
- size="small"
|
|
|
- textColor="text.title"
|
|
|
- rightIcon="arrow-right"
|
|
|
- @click="handleGoNew()"
|
|
|
- >
|
|
|
- <FlexCol>
|
|
|
- <Text text="新手" fontConfig="contentText" />
|
|
|
- <Text text="上路" fontConfig="contentText" />
|
|
|
- </FlexCol>
|
|
|
- </Button>
|
|
|
- </FlexRow>
|
|
|
- </BackgroundBox>
|
|
|
-
|
|
|
- <!-- 排行榜 -->
|
|
|
- <HomeTitle
|
|
|
- title="排行榜"
|
|
|
- showMore
|
|
|
- @moreClicked="navTo('/pages/home/village/rank/volunteer', {
|
|
|
- villageId: villageStore.currentVillage?.id ?? undefined,
|
|
|
- })"
|
|
|
- />
|
|
|
- <!-- <RoundTags v-model:active="rankActiveTag" :tags="['乡源果', '乡源光', '文化积分' ]" /> -->
|
|
|
- <VillageUserRankList
|
|
|
- :list="villageUserRankListLoader.content.value ?? []"
|
|
|
- :scoreSuffix="rankActiveTag"
|
|
|
- @goDetails="navTo('/pages/home/village/volunteer/detail', { id: $event.id })"
|
|
|
- />
|
|
|
-
|
|
|
- <!-- 魅力乡源 -->
|
|
|
- <HomeTitle title="魅力乡源" showMore @moreClicked="handleGoCollect()">
|
|
|
- <template #right>
|
|
|
- <FlexRow align="center" gap="gap.md">
|
|
|
- <FrameButton
|
|
|
- text="管理"
|
|
|
- size="small"
|
|
|
- primary
|
|
|
- @click="handleGoDigManage()"
|
|
|
- />
|
|
|
- <FrameButton
|
|
|
- text="共编村史"
|
|
|
- icon="https://xy.wenlvti.net/app_static/images/village/IconHistory.png"
|
|
|
- size="small"
|
|
|
- @click="handleGoCollect()"
|
|
|
- />
|
|
|
- <Width :size="15" />
|
|
|
- </FlexRow>
|
|
|
- </template>
|
|
|
- </HomeTitle>
|
|
|
- <ProvideVar :vars="{
|
|
|
- GridItemIconSize: 90,
|
|
|
- GridItemBackgroundColor: 'transparent',
|
|
|
- GridItemPaddingHorizontal: 0,
|
|
|
- GridItemPaddingVertical: 8,
|
|
|
- }">
|
|
|
- <Grid :borderGrid="false" :mainAxisCount="4">
|
|
|
- <GridItem title="村社概况" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeIntrod.png" touchable @click="handleGoCollect(11, '村社概况')" />
|
|
|
- <GridItem title="自然风光" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeEnvirounment.png" touchable @click="handleGoCollect(13, '自然风光')" />
|
|
|
- <GridItem title="历史沿革" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeHistory.png" touchable @click="handleGoCollect(2, '历史沿革')" />
|
|
|
- <GridItem title="特色产业" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeIndustry.png" touchable @click="handleGoCollect(9, '特色产业' )" />
|
|
|
- <GridItem title="文艺活动" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeActivity.png" touchable @click="handleGoCollect(12, '文艺活动')" />
|
|
|
- <GridItem title="非遗展示" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeShow.png" touchable @click="handleGoCollect(10, '非遗展示')" />
|
|
|
- <GridItem title="民俗风采" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeFolkloreVibe.png" touchable @click="handleGoCollect(8, '民俗风采')" />
|
|
|
- <GridItem title="历史人物" icon="https://xy.wenlvti.net/app_static/images/village/IconGoods.png" touchable @click="handleGoCollect(7, '历史人物')" />
|
|
|
- </Grid>
|
|
|
- </ProvideVar>
|
|
|
-
|
|
|
- <!-- 活力乡源 -->
|
|
|
- <HomeTitle title="活力乡源" />
|
|
|
- <ProvideVar :vars="{
|
|
|
- GridItemIconSize: 90,
|
|
|
- GridItemBackgroundColor: 'transparent',
|
|
|
- GridItemPaddingHorizontal: 0,
|
|
|
- GridItemPaddingVertical: 8,
|
|
|
- }">
|
|
|
- <Grid :borderGrid="false" :mainAxisCount="4">
|
|
|
- <GridItem title="乡源荣光" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeHornor.png" touchable @click="handleGoCollect(23, '乡源荣光')" />
|
|
|
- <GridItem title="乡源好物" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeGoods.png" touchable @click="navTo('/pages/home/village/goods/index', { villageId: villageStore.currentVillage?.id ?? undefined })" />
|
|
|
- <GridItem title="乡源树" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeTree.png" touchable @click="emit('goTree')" />
|
|
|
- <!-- <GridItem title="政贤连心" icon="https://xy.wenlvti.net/app_static/images/village/IconGovAffairs.png" touchable @click="navTo('/pages/home/village/gov/index')" /> -->
|
|
|
- <GridItem title="互动游戏" icon="https://xy.wenlvti.net/app_static/images/village/IconLargeGame.png" touchable @click="navTo('/pages/home/village/games/index')" />
|
|
|
- </Grid>
|
|
|
- </ProvideVar>
|
|
|
-
|
|
|
- <!-- 文脉乡源 -->
|
|
|
- <HomeTitle title="文脉乡源">
|
|
|
- <template #right>
|
|
|
- <FlexRow align="center" gap="gap.md">
|
|
|
- <BubbleTip
|
|
|
- v-model:show="showManageTip"
|
|
|
- position="bottom"
|
|
|
- crossPosition="right"
|
|
|
- arrowOffsetX="180rpx"
|
|
|
- content="村社贴图太乱?点这里整理"
|
|
|
- @contentClick="handleCloseManageTip(true)"
|
|
|
- @close="handleCloseManageTip(false)"
|
|
|
- >
|
|
|
- <FrameButton
|
|
|
- text="管理"
|
|
|
- size="small"
|
|
|
- primary
|
|
|
- @click="handleGoOfficalManage()"
|
|
|
- />
|
|
|
- </BubbleTip>
|
|
|
- <FrameButton
|
|
|
- text="乡源AI帮你写"
|
|
|
- size="small"
|
|
|
- icon="https://xy.wenlvti.net/app_static/images/village/IconLargeHistory.png"
|
|
|
- @click="handleGoPublish()"
|
|
|
- />
|
|
|
- </FlexRow>
|
|
|
- </template>
|
|
|
- </HomeTitle>
|
|
|
- <RoundTags
|
|
|
- v-model:active="listActiveTag"
|
|
|
- :tags="listTags"
|
|
|
- />
|
|
|
- </FlexCol>
|
|
|
- <OfficialAccountPublishWrap
|
|
|
- :topic="recommendTagName"
|
|
|
- :path="recommendPath"
|
|
|
- @publishsuccess="onPublishSuccess"
|
|
|
- @empty="isOfficialEmpty=true"
|
|
|
- />
|
|
|
+
|
|
|
+
|
|
|
+ </template>
|
|
|
+ </DynamicX>
|
|
|
+
|
|
|
<UpgradeDialog
|
|
|
ref="upgradeRef"
|
|
|
v-if="villageStore.currentVillage"
|
|
|
@@ -416,6 +453,9 @@ import ChangeNickDialog from '../dialogs/ChangeNickDialog.vue';
|
|
|
import StaffInfoDialog from '../dialogs/StaffInfoDialog.vue';
|
|
|
import ShareQRDialog from '../dialogs/ShareQRDialog.vue';
|
|
|
import FlexView from '@/components/layout/FlexView.vue';
|
|
|
+import DynamicX from '@/components/dynamic/DynamicX.vue';
|
|
|
+import type { DynamicXPage } from '@/components/dynamic/DynamicX';
|
|
|
+import DynamicXNodeChild from '@/components/dynamic/x/DynamicXNodeChild.vue';
|
|
|
|
|
|
const emit = defineEmits<{
|
|
|
(e: 'goTree'): void;
|
|
|
@@ -459,7 +499,7 @@ const villageInfoLoader = useSimpleDataLoader(async () => {
|
|
|
sizeText: `${FormatUtils.formatSize(village?.storageUsed || 0)}/${FormatUtils.formatSize(village?.storageLimit || 0)}`,
|
|
|
sizeLimit: (village?.storageLimit || 0) >= 0,
|
|
|
level: village?.level || 1,
|
|
|
- vipLevel: village?.vipLevel || '',
|
|
|
+ vipLevel: village?.vipLevel || 0,
|
|
|
vipLevelText: village?.vipName ? `已升级 · ${village?.vipName}` : '',
|
|
|
rankText: village?.rank.toString() || '',
|
|
|
light: village?.light || 0,
|
|
|
@@ -485,7 +525,6 @@ const isStaff = computed(() => staffInfo.value?.type === 'staff');
|
|
|
const shareQRDialog = ref<InstanceType<typeof ShareQRDialog>>();
|
|
|
|
|
|
const descOpen = ref(false);
|
|
|
-const rankActiveTag = ref('文化积分');
|
|
|
const listActiveTag = ref('广场');
|
|
|
|
|
|
const villageUserRankListLoader = useSimpleDataLoader(async () => {
|
|
|
@@ -527,12 +566,6 @@ function handleCloseManageTip(goComp: boolean) {
|
|
|
showManageTipTimeout.recordTime();
|
|
|
}
|
|
|
|
|
|
-const listTags = ['广场', '美食', '美景', '故事', '老手艺', '老物件'];
|
|
|
-
|
|
|
-watch(rankActiveTag, () => {
|
|
|
- villageUserRankListLoader.reload();
|
|
|
-});
|
|
|
-
|
|
|
const recommendTagName = computed(() => {
|
|
|
return '亮乡源·' + villageInfoLoader.content.value?.title + '·' + listActiveTag.value;
|
|
|
});
|
|
|
@@ -647,6 +680,110 @@ const upgradeRef = ref<InstanceType<typeof UpgradeDialog>>();
|
|
|
const villageGalleryRef = ref<InstanceType<typeof VillageGallery>>();
|
|
|
const changeNickRef = ref<InstanceType<typeof ChangeNickDialog>>();
|
|
|
|
|
|
+const pageScriptGlobal = {
|
|
|
+ handleGoCollect,
|
|
|
+ getVillageId: () => villageStore.currentVillage?.id ?? 0,
|
|
|
+ navTo,
|
|
|
+ emit,
|
|
|
+};
|
|
|
+const page : DynamicXPage = {
|
|
|
+ name: 'VILLAGE',
|
|
|
+ type: 'page',
|
|
|
+ nodes: [
|
|
|
+ {
|
|
|
+ type: 'flex',
|
|
|
+ props: {
|
|
|
+ direction: 'column',
|
|
|
+ padding: [30,30,0,30],
|
|
|
+ gap: "gap.lg"
|
|
|
+ },
|
|
|
+ nodes: [
|
|
|
+ {
|
|
|
+ type: 'BackgroundBox',
|
|
|
+ props: {
|
|
|
+ color1: "#eecaa0",
|
|
|
+ color2: "white",
|
|
|
+ color2Position: "85%",
|
|
|
+ color3: "white",
|
|
|
+ radius: "radius.lg",
|
|
|
+ direction: "column",
|
|
|
+ padding: [35,30],
|
|
|
+ gap: "gap.lg",
|
|
|
+ },
|
|
|
+ nodes: [
|
|
|
+ {
|
|
|
+ type: 'Card:Basic',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Card:Level',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Card:Gallery',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Card:AddressAndMap',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Card:Static',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Block:Rank',
|
|
|
+ props: {
|
|
|
+ title: '排行榜',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Block:Collect',
|
|
|
+ props: {
|
|
|
+ title: '魅力乡源',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Block:Games',
|
|
|
+ props: {
|
|
|
+ title: '活力乡源',
|
|
|
+ items: [
|
|
|
+ {
|
|
|
+ title: '乡源荣光',
|
|
|
+ icon: 'https://xy.wenlvti.net/app_static/images/village/IconLargeHornor.png',
|
|
|
+ handler: 'globalContext.handleGoCollect(23, \'乡源荣光\')',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '乡源好物',
|
|
|
+ icon: 'https://xy.wenlvti.net/app_static/images/village/IconLargeGoods.png',
|
|
|
+ handler: 'globalContext.navTo("/pages/home/village/goods/index", { villageId: globalContext.getVillageId() })',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '乡源树',
|
|
|
+ icon: 'https://xy.wenlvti.net/app_static/images/village/IconLargeTree.png',
|
|
|
+ handler: 'globalContext.emit("goTree")',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '互动游戏',
|
|
|
+ icon: 'https://xy.wenlvti.net/app_static/images/village/IconLargeGame.png',
|
|
|
+ handler: 'globalContext.navTo("/pages/home/village/games/index")',
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'Block:Official',
|
|
|
+ props: {
|
|
|
+ title: '文脉乡源',
|
|
|
+ tags: [
|
|
|
+ '广场', '美食', '美景',
|
|
|
+ '故事',
|
|
|
+ '老手艺', '老物件'
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ ],
|
|
|
+};
|
|
|
+
|
|
|
watch(() => villageStore.currentVillage, async () => {
|
|
|
await waitTimeOut(100);
|
|
|
await villageInfoLoader.reload();
|