From f3ea52bf97e61f6917ccaab904817d74d9d4860c Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 17 七月 2025 09:55:36 +0800
Subject: [PATCH] init

---
 pages/home/home.vue                       |   66 ++-
 sub-pages/mine/settings.vue               |  105 ++++--
 pages/login/login.vue                     |  264 ++++++++++++----
 pages/home/home-main.vue                  |    9 
 pages/home/trip-card.vue                  |   38 +
 sub-pages/community/index.vue             |   54 +-
 pages.json                                |    7 
 components/setting/setting-popup copy.vue |    2 
 plugins/http.js                           |   18 
 components/setting/setting-popup.vue      |    2 
 enums/dict.ts                             |    2 
 components/comment/comment-popup.vue      |    2 
 components/footer/customer-footer.vue     |    6 
 pages/home/home copy.vue                  |    4 
 types/index.ts                            |    2 
 sub-pages/film-list/film-detail.vue       |   13 
 sub-pages/film-list/film-list.vue         |   34 +
 sub-pages/utils/api.ts                    |   29 +
 pages/home/community.vue                  |   11 
 package.json                              |    2 
 components/tabbar/top-tab-bar.vue         |    4 
 sub-pages/mine/index.vue                  |  205 +++++++++++--
 store/user.ts                             |    8 
 23 files changed, 633 insertions(+), 254 deletions(-)

diff --git a/components/comment/comment-popup.vue b/components/comment/comment-popup.vue
index a7eac02..eccefc0 100644
--- a/components/comment/comment-popup.vue
+++ b/components/comment/comment-popup.vue
@@ -200,7 +200,7 @@
     // 构建评论数据
     const commentData = {
       ...comment.value,
-      parentId: props.parentId || undefined, // 如果有parentId则使用,没有则为undefined
+      parentId: props.parentId || void 0, // 如果有parentId则使用,没有则为undefined
       filmId: props.filmId,
       content: comment.value.content,
       fileList: comment.value.fileList,
diff --git a/components/footer/customer-footer.vue b/components/footer/customer-footer.vue
index f0a56cb..4035861 100644
--- a/components/footer/customer-footer.vue
+++ b/components/footer/customer-footer.vue
@@ -35,9 +35,9 @@
 
 const tabBar = ref<TabItem[]>([
   { text: '首页', pagePath: '/pages/home/home' },
-  { text: '影视地图', pagePath: '/sub-pages/film-map/index' },
-  { text: '我的种草', pagePath: '/sub-pages/customer/shopping/shopping' },
-  { text: '社区', pagePath: '/sub-pages/community/index' },
+  // { text: '影视地图', pagePath: '/sub-pages/film-map/index' },
+  // { text: '我的种草', pagePath: '/sub-pages/customer/shopping/shopping' },
+  { text: '草原', pagePath: '/sub-pages/community/index' },
   { text: '我的', pagePath: '/sub-pages/mine/index' },
 ])
 
diff --git a/components/setting/setting-popup copy.vue b/components/setting/setting-popup copy.vue
index 0d6c160..45088ae 100644
--- a/components/setting/setting-popup copy.vue
+++ b/components/setting/setting-popup copy.vue
@@ -64,7 +64,7 @@
                 </up-cell-group>
 
                 <up-cell-group :border="false" :customStyle="cellGroupStyle">
-                    <up-cell title="社区公约" url="/pages/componentsB/tag/tag" :border="false">
+                    <up-cell title="草原公约" url="/pages/componentsB/tag/tag" :border="false">
                         <template #icon>
                             <up-icon :size="btnSize" name="/static/common/sqgy.png" />
                         </template>
diff --git a/components/setting/setting-popup.vue b/components/setting/setting-popup.vue
index 1918164..992946d 100644
--- a/components/setting/setting-popup.vue
+++ b/components/setting/setting-popup.vue
@@ -61,7 +61,7 @@
         { title: "小程序", icon: "/static/common/xcx.png", url: "/pages/componentsB/tag/tag",btnSize: 15 }
     ],
     [
-        { title: "社区公约", icon: "/static/common/sqgy.png", url: "/pages/componentsB/tag/tag" ,btnSize: 15}
+        { title: "草原公约", icon: "/static/common/sqgy.png", url: "/pages/componentsB/tag/tag" ,btnSize: 15}
     ]
 ];
 
diff --git a/components/tabbar/top-tab-bar.vue b/components/tabbar/top-tab-bar.vue
index 014447a..4b503fa 100644
--- a/components/tabbar/top-tab-bar.vue
+++ b/components/tabbar/top-tab-bar.vue
@@ -16,7 +16,7 @@
         <!-- 左侧图标 + 标题 -->
         <view class="left">
           <up-icon name="/static/images/tabbar/line-Film.png" size="40rpx" color="#fff" />
-          <text class="title">影途</text>
+          <text class="title">影游四方</text>
         </view>
 
         <!-- 右侧按钮 -->
@@ -25,7 +25,7 @@
             <up-icon name="/static/images/tabbar/user.png" size="30rpx" />
             <text class="login-text">登录</text>
           </view>
-          <up-icon name="list" size="40rpx" color="#fff" @click="openMenu" />
+<!--          <up-icon name="list" size="40rpx" color="#fff" @click="openMenu" />-->
         </view>
       </view>
     </view>
diff --git a/enums/dict.ts b/enums/dict.ts
index 859a70d..bc32c83 100644
--- a/enums/dict.ts
+++ b/enums/dict.ts
@@ -1,6 +1,6 @@
 export enum FilmWorksCategory {
     CONTENT_SELECTED = '1', // 内容精选
-    COMMUNITY = '2',        // 社区推荐
+    COMMUNITY = '2',        // 草原推荐
   }
 
 
diff --git a/package.json b/package.json
index a4a8b42..d90c0f4 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
   "uni-app": {
     "scripts": {
       "film": {
-        "title": "影途",
+        "title": "影游四方",
         "BROWSER": "Chrome",
         "env": {
           "UNI_PLATFORM": "mp-weixin",
diff --git a/pages.json b/pages.json
index 6a19d6c..cd1324f 100644
--- a/pages.json
+++ b/pages.json
@@ -9,10 +9,11 @@
 		}
 	},
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+
 		{
 			"path": "pages/home/home",
 			"style": {
-				"navigationBarTitleText": "影途",
+				"navigationBarTitleText": "影游四方",
 				"enablePullDownRefresh": true,
 				"onReachBottomDistance": 50
 			}
@@ -73,7 +74,7 @@
 				{
 					"path": "index",
 					"style": {
-						"navigationBarTitleText": "社区",
+						"navigationBarTitleText": "草原",
 						"enablePullDownRefresh": true
 					}
 				}
@@ -149,7 +150,7 @@
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "影途",
+		"navigationBarTitleText": "影游四方",
 		"navigationBarBackgroundColor": "#F8F8F8",
 		"backgroundColor": "#F8F8F8"
 	},
diff --git a/pages/home/community.vue b/pages/home/community.vue
index f1e4cb8..968fbc3 100644
--- a/pages/home/community.vue
+++ b/pages/home/community.vue
@@ -1,5 +1,5 @@
 <template>
-  <view class="post-card">
+  <view class="post-card"  @click="handleClick">
     <!-- 用户信息 -->
     <view class="user-info">
       <up-avatar :src="avatar" size="80rpx" shape="circle" />
@@ -56,11 +56,20 @@
   content?: string;
   likeCount?: number | string;
   commentCount?: number | string;
+  detailUrl?: string; // 新增跳转链接
 }
 
 const props = defineProps<Props>();
 const imageHeight = ref(0)
 
+const handleClick = () => {
+  if (props.detailUrl) {
+    uni.navigateTo({
+      url: props.detailUrl
+    });
+  }
+}; // 注意这里需要分号
+
 const computeImageHeight = (src?: string) => {
   if (!src) return
   uni.getImageInfo({
diff --git a/pages/home/home copy.vue b/pages/home/home copy.vue
index 297a5f4..1ffae44 100644
--- a/pages/home/home copy.vue
+++ b/pages/home/home copy.vue
@@ -38,7 +38,7 @@
       <SceneMuseumCard v-for="(item, index) in cardList" :key="index" :image="item.image" :title="item.title"
         :subtitle="item.subtitle" :readTime="item.readTime" />
 
-      <SectionTitle title="光影社区" optitle="加入社区" goUrl="/pages/home/home-more" />
+      <SectionTitle title="光影天地" optitle="加入光影" goUrl="/pages/home/home-more" />
       <Community v-for="(item, index) in communitys" :key="index" :avatar="item.avatar" :nickname="item.nickname"
         :time="item.time" :image="item.image" :content="item.content" :likeCount="item.likeCount"
         :commentCount="item.commentCount" />
@@ -163,7 +163,7 @@
   },
 ])
 
-// 社区帖子数据
+// 数据
 const communitys = ref([
   {
     avatar: 'https://cdn.uviewui.com/uview/common/logo.png',
diff --git a/pages/home/home-main.vue b/pages/home/home-main.vue
index e809a9b..189b16b 100644
--- a/pages/home/home-main.vue
+++ b/pages/home/home-main.vue
@@ -99,10 +99,13 @@
   }
   
   function hotRoute() {
-    uni.showToast({
-      title: '跳转热门路线',
-      icon: 'none',
+    uni.navigateTo({
+      url: '/sub-pages/hot-spot/index',
     })
+    // uni.showToast({
+    //   title: 'sub-pages/hot-spot/index',
+    //   icon: 'none',
+    // })
   }
 
   onLoad((options: any) => {
diff --git a/pages/home/home.vue b/pages/home/home.vue
index 7095440..80ed122 100644
--- a/pages/home/home.vue
+++ b/pages/home/home.vue
@@ -23,7 +23,7 @@
       </view>
 
       <view class="trip-card-swiper">
-        <swiper :current="currentPage" @change="onSwiperChange" circular style="min-height: 1450rpx;">
+        <swiper :current="currentPage" @change="onSwiperChange" circular style="min-height: 1850rpx;">
           <swiper-item v-for="(group, pageIndex) in pagedTripCards" :key="pageIndex">
             <TripCard v-for="(item, index) in group" :key="index" :tag="item.tag" :title="item.coverTitle"
               :subtitle="item.coverAlt" :score="item.collectCount" :imageUrl="item.coverUrl"
@@ -32,15 +32,15 @@
         </swiper>
       </view>
 
-      <SectionTitle title="全球影视地标" optitle="查看全部" goUrl="/pages/home/home-more" />
-      <GlobalGeo />
+<!--      <SectionTitle title="全球影视地标" optitle="查看全部" goUrl="/pages/home/home-more" />-->
+<!--      <GlobalGeo />-->
 
       <SectionTitle title="场景博物馆" optitle="查看全部" goUrl="/sub-pages/hot-spot/index" />
       <SceneMuseumCard v-for="(item, index) in cardList" :key="index" :image="item.image" :title="item.title"
         :subtitle="item.subtitle" :readTime="item.readTime" />
 
-      <SectionTitle title="光影社区" optitle="加入社区" goUrl="/pages/home/home-more" />
-      <Community v-for="(item, index) in communitys" :key="index" :avatar="item.avatar" :nickname="item.nickname"
+      <SectionTitle title="光影天地" optitle="加入光影" goUrl="/sub-pages/community/index" />
+      <Community v-for="(item, index) in communitys" :key="index"  :detailUrl="`${detailUrl}?id=${item.id}`"  :avatar="item.avatar" :nickname="item.nickname"
         :time="formatRelativeTime(item.createTime)" :image="item.coverUrl" :content="item.coverAlt"
         :likeCount="item.likeCount" :commentCount="item.commentCount" />
       <up-loadmore :status="communityStatus" :line="true" />
@@ -99,28 +99,15 @@
 })
 
 // 场景博物馆卡片数据
-const cardList = ref([
-  {
-    image: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
-    title: '《盗梦空间》巴黎咖啡馆',
-    subtitle: '拷素诺兰如何创造这个标志性场景',
-    readTime: '12分钟阅读',
-  },
-  {
-    image: 'https://img.yzcdn.cn/vant/cat.jpeg',
-    title: '《星际穿越》玉米田',
-    subtitle: '诺兰如何还原地球末日场景',
-    readTime: '8分钟阅读',
-  },
-  {
-    image: 'https://img.yzcdn.cn/vant/cat.jpeg',
-    title: '《星球大战》塔图因星球',
-    subtitle: '经典科幻电影中的沙漠设定',
-    readTime: '10分钟阅读',
-  },
-])
+// 场景博物馆卡片数据
+const cardList = ref<Array<{
+  image: string
+  title: string
+  subtitle: string
+  readTime: string
+}>>([])
 
-// 社区帖子数据
+// 数据
 const communitys = ref<FilmWorks[]>([])
 
 
@@ -135,8 +122,11 @@
   // 内容精选
   getContentSelected()
 
-  // 光影社区
+  // 光影
   getCommunitys()
+
+  // 场景博物馆
+  getSceneMuseumData()
 });
 
 
@@ -144,7 +134,7 @@
   console.log('用户下拉刷新了')
   // 内容精选
   getContentSelected()
-  // 光影社区
+  // 光影
   communityPage.value = 1
   getCommunitys()
   uni.stopPullDownRefresh() // 停止下拉刷新动画
@@ -187,6 +177,25 @@
     communityStatus.value = 'noMore'
   }
 }
+
+
+// 获取场景博物馆数据
+const getSceneMuseumData = async () => {
+  try {
+    const { code, data } = await $http.request('get', '/api/filmLocation/getTop3')
+    if (code === 0 && data) {
+      cardList.value = data.map(item => ({
+        image: item.locationUrl,
+        title: item.locationName,
+        subtitle: item.address,
+        readTime: `${item.locationWeight}热度`
+      }))
+    }
+  } catch (error) {
+    console.error('获取场景博物馆数据失败:', error)
+    $message.showToast('获取场景博物馆数据失败')
+  }
+}
 // 内容精选
 const getFilmWorks = async (type: String, pageSize: Number, currentPage: Number) => {
   const {
@@ -195,6 +204,7 @@
     params: {
       classify: type,
       size: pageSize,
+      status: 'published',
       current: currentPage
     }
   })
diff --git a/pages/home/trip-card.vue b/pages/home/trip-card.vue
index 2c57369..74c5154 100644
--- a/pages/home/trip-card.vue
+++ b/pages/home/trip-card.vue
@@ -8,12 +8,14 @@
         <view class="title">{{ title }}</view>
         <view class="subtitle">{{ subtitle }}</view>
         <view class="footer">
-          <view class="rating">
-            <up-icon class="star" name="star-fill" size="14" color="#FFD700" />
-            <text class="score">{{ score }}</text>
-          </view>
-          <view class="more" @click="goToDetail">
-            查看详情 ->
+          <view class="rating-more">
+            <view class="rating-group"> <!-- 新增包裹层 -->
+              <up-icon class="star" name="star-fill" size="14" color="#FFD700" />
+              <text class="score">{{ score }}</text>
+            </view>
+            <view class="more" @click="goToDetail">
+              查看详情 ->
+            </view>
           </view>
         </view>
       </view>
@@ -52,7 +54,7 @@
   .image-wrapper {
     position: relative;
     width: 100%;
-    height: 260rpx;
+    height: 400rpx;  // 从260rpx增加到360rpx
   }
   
   .image {
@@ -72,22 +74,23 @@
   }
   
   .content {
-    padding: 24rpx;
+    padding: 10rpx; // 上下padding从24rpx减到20rpx
     background-color: #121212;
   }
   
   .title {
-    font-size: 16px;
+    font-size: 15px; // 从16px减小
     color: #ffffff;
     font-weight: 500;
-    margin-bottom: 12rpx;
+    margin-bottom: 8rpx;  // 从12rpx减小
     line-height: 1.4;
   }
   
   .subtitle {
-    font-size: 14px;
+    font-size: 13px; // 从14px减小
     color: rgba(255, 255, 255, 0.8);
-    margin-bottom: 20rpx;
+    margin-bottom: 16rpx;  // 从20rpx减小
+    line-height: 1.3; // 添加行高控制
   }
   
   .footer {
@@ -116,5 +119,16 @@
     user-select: none;
     cursor: pointer;
   }
+  .rating-more {
+    display: flex;
+    align-items: center;
+    width: 100%; // 添加宽度
+    justify-content: space-between; // 改为两端对齐
+  }
+  .rating-group { /* 新增样式 */
+    display: flex;
+    align-items: center;
+    gap: 8rpx; /* 图标和分数之间的间距 */
+  }
   </style>
   
\ No newline at end of file
diff --git a/pages/login/login.vue b/pages/login/login.vue
index 1fae60e..7bf5a9d 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -2,12 +2,12 @@
     <view class="login-page">
         <view class="top-bar">
             <text class="top-left">帮助</text>
-            <text class="top-right" @click="skipLogin">跳过</text>
+            <text class="top-right" @click="skipLogin">游客模式</text>
         </view>
 
         <view class="logo-container">
-            <text class="app-name">影途</text>
-            <text class="subtitle">登录后,体验更多功能</text>
+            <text class="app-name">影游四方</text>
+            <text class="subtitle">发现精彩电影世界</text>
         </view>
 
         <view class="phone-number">
@@ -18,16 +18,46 @@
             <!-- <up-button type="primary" class="login-btn" @click="quickLogin" shape="circle">一键登录</up-button> -->
             <!-- <up-button type="info" class="wechat-btn" @click="wechatLogin" icon="weixin-fill" iconColor="#00c800"
                 text="微信登录" shape="circle"></up-button> -->
-            <up-button v-if="wxUser.user" type="info" class="login-btn" @click="wechatLogin" icon="weixin-fill"
-                iconColor="#00c800" text="微信登录" shape="circle"></up-button>
-            <up-button v-else type="info" class="login-btn" open-type="getPhoneNumber"
-                @getphonenumber="handleGetPhoneNumber" icon="weixin-fill" iconColor="#00c800" text="微信登录"
-                shape="circle"></up-button>
+          <up-button
+              type="primary"
+              class="guest-btn"
+              @click="skipLogin"
+              text="立即体验"
+              shape="circle"
+          ></up-button>
+<!--            <up-button v-if="wxUser.user" type="info" class="login-btn" @click="wechatLogin" icon="weixin-fill"-->
+<!--                iconColor="#00c800" text="微信登录" shape="circle"></up-button>-->
+<!--            <up-button v-else type="info" class="login-btn" open-type="getPhoneNumber"-->
+<!--                @getphonenumber="handleGetPhoneNumber" icon="weixin-fill" iconColor="#00c800" text="微信登录"-->
+<!--                shape="circle"></up-button>-->
+          <up-button
+              v-if="wxUser && wxUser.user"
+          type="primary"
+          class="login-btn"
+          @click="showWechatLoginConfirm"
+          icon=""
+          iconColor="#00c800"
+          text="手机号快捷登录"
+          shape="circle"
+          custom-style="background: #ff2d4a; color: white;"
+          ></up-button>
+          <up-button
+              v-else
+              type="primary"
+              class="login-btn"
+              open-type="getPhoneNumber"
+              @getphonenumber="handleGetPhoneNumber"
+              icon=""
+              iconColor="#00c800"
+              text="手机号快捷登录"
+              shape="circle"
+              custom-style="background: #ff2d4a; color: white;"
+          ></up-button>
         </view>
 
-        <view class="other-login" @click="otherLogin">
-            <text>其他登录方式 ></text>
-        </view>
+<!--        <view class="other-login" @click="otherLogin">-->
+<!--            <text>其他登录方式 ></text>-->
+<!--        </view>-->
 
         <view class="agreement">
             <view @click="toggleCheck">
@@ -61,41 +91,89 @@
     isChecked.value = !isChecked.value
 }
 
-const wxUser = ref<WxUser | null>(null)
+const wxUser = ref<WxUser>({
+  user: null,
+  phoneNumber: '',
+  purePhoneNumber: ''
+});
+// const wechatLogin = () => {
+//     if (!isChecked.value) {
+//         uni.showToast({ title: '请先同意协议', icon: 'none' });
+//         return;
+//     }
+//     // 微信登录
+//     uni.login({
+//         "provider": "weixin",
+//         "onlyAuthorize": true, // 微信登录仅请求授权认证
+//         success: async function (event:any) {
+//             const { code } = event
+//             $message.showLoading();
+//             const resp = await userStore.loginwx({ code, phoneNumber: wxUser.value.phoneNumber, purePhoneNumber: wxUser.value.purePhoneNumber })
+//             if (resp && resp.data) {
+//                 // that.$forceUpdate()
+//                 uni.reLaunch({
+//                     url: '/pages/home/home'
+//                 })
+//             }
+//             $message.hideLoading();
+//         },
+//         fail: function (err:any) {
+//             // 登录授权失败
+//             // err.code是错误码
+//         }
+//     })
+//
+//
+// };
 const wechatLogin = () => {
-    if (!isChecked.value) {
-        uni.showToast({ title: '请先同意协议', icon: 'none' });
-        return;
+  uni.login({
+    provider: "weixin",
+    onlyAuthorize: true,
+    success: async function (event:any) {
+      $message.showLoading();
+      const { code } = event;
+      const resp = await userStore.loginwx({
+        code,
+        phoneNumber: wxUser.value?.phoneNumber,
+        purePhoneNumber: wxUser.value?.purePhoneNumber
+      });
+
+      if (resp?.data) {
+        uni.reLaunch({ url: '/pages/home/home' });
+      }
+      $message.hideLoading();
+    },
+    fail: function (err:any) {
+      console.error('登录失败:', err);
     }
-    // 微信登录
-    uni.login({
-        "provider": "weixin",
-        "onlyAuthorize": true, // 微信登录仅请求授权认证
-        success: async function (event:any) {
-            const { code } = event
-            $message.showLoading();
-            const resp = await userStore.loginwx({ code, phoneNumber: wxUser.value.phoneNumber, purePhoneNumber: wxUser.value.purePhoneNumber })
-            if (resp && resp.data) {
-                // that.$forceUpdate()
-                uni.reLaunch({
-                    url: '/pages/home/home'
-                })
-            }
-            $message.hideLoading();
-        },
-        fail: function (err:any) {
-            // 登录授权失败
-            // err.code是错误码
-        }
-    })
-
-
+  });
 };
 
-onShow(() => {
-    console.log('页面显示')
-    getOpenId()
-});
+// onShow(() => {
+//     console.log('页面显示')
+//     getOpenId()
+// });
+
+const showWechatLoginConfirm = () => {
+  if (!isChecked.value) {
+    uni.showToast({ title: '请先同意协议', icon: 'none' });
+    return;
+  }
+
+  uni.showModal({
+    title: '授权提示',
+    content: '需要使用手机号登录才能获得完整服务?',
+    confirmText: '确认登录',
+    cancelText: '暂不需要',
+    success: (res) => {
+      if (res.confirm) {
+        wechatLogin();
+      }
+    }
+  });
+};
+
+
 const getOpenId = () => {
     uni.login({
         "provider": "weixin",
@@ -148,13 +226,19 @@
             }
         })
         if (code == 0) {
-            
-            // 获取手机号码后,实现微信登录
-            const phoneNumber = data.phone_info.phoneNumber;
-            const purePhoneNumber = data.phone_info.purePhoneNumber;
-            wxUser.value.phoneNumber = phoneNumber
-            wxUser.value.purePhoneNumber = purePhoneNumber
-            handleWechatClick()
+          wxUser.value = {
+            ...wxUser.value,
+            phoneNumber: data.phone_info.phoneNumber,
+            purePhoneNumber: data.phone_info.purePhoneNumber,
+            user: {} // 确保user不为null
+          };
+          wechatLogin();
+            // // 获取手机号码后,实现微信登录
+            // const phoneNumber = data.phone_info.phoneNumber;
+            // const purePhoneNumber = data.phone_info.purePhoneNumber;
+            // wxUser.value.phoneNumber = phoneNumber
+            // wxUser.value.purePhoneNumber = purePhoneNumber
+            // handleWechatClick()
         } else {
 
         }
@@ -163,31 +247,52 @@
     }
 }
 
+// const handleWechatClick = () => {
+//     uni.login({
+//         "provider": "weixin",
+//         "onlyAuthorize": true, // 微信登录仅请求授权认证
+//         success: async function (event: any) {
+//             const { code } = event
+//             $message.showLoading();
+//             console.log("获取到的微信用户信息是:", wxUser.value)
+//             const resp = await userStore.loginwx({ code, phoneNumber: wxUser.value.phoneNumber, purePhoneNumber: wxUser.value.purePhoneNumber })
+//             if (resp && resp.data) {
+//                 // $forceUpdate()
+//                 uni.reLaunch({
+//                     url: '/pages/home/home'
+//                 })
+//             }
+//             $message.hideLoading();
+//         },
+//         fail: function (err: any) {
+//             // 登录授权失败
+//             // err.code是错误码
+//         }
+//     })
+// }
+
 const handleWechatClick = () => {
-    uni.login({
-        "provider": "weixin",
-        "onlyAuthorize": true, // 微信登录仅请求授权认证
-        success: async function (event: any) {
-            const { code } = event
-            $message.showLoading();
-            console.log("获取到的微信用户信息是:", wxUser.value)
-            const resp = await userStore.loginwx({ code, phoneNumber: wxUser.value.phoneNumber, purePhoneNumber: wxUser.value.purePhoneNumber })
-            if (resp && resp.data) {
-                // $forceUpdate()
-                uni.reLaunch({
-                    url: '/pages/home/home'
-                })
-            }
-            $message.hideLoading();
-        },
-        fail: function (err: any) {
-            // 登录授权失败
-            // err.code是错误码
-        }
-    })
-}
+  uni.login({
+    provider: "weixin",
+    onlyAuthorize: true,
+    success: async function (event: any) {
+      $message.showLoading();
+      const resp = await userStore.loginwx({
+        code: event.code,
+        phoneNumber: wxUser.value?.phoneNumber,
+        purePhoneNumber: wxUser.value?.purePhoneNumber
+      });
 
-
+      if (resp?.data) {
+        uni.reLaunch({ url: '/pages/home/home' });
+      }
+      $message.hideLoading();
+    },
+    fail: function (err: any) {
+      console.error('登录失败:', err);
+    }
+  });
+};
 
 const otherLogin = () => {
     // 跳转到其他登录方式页面
@@ -195,7 +300,8 @@
 };
 
 const skipLogin = () => {
-    uni.switchTab({ url: '/pages/home/index' });
+    // uni.switchTab({ url: '/pages/home/home' });gai
+  uni.reLaunch({ url: '/pages/home/home' });
 };
 
 
@@ -262,6 +368,18 @@
             background-color: #1c1c1e;
             color: #fff;
         }
+
+       .guest-btn {
+        background-color: #ff2d4a;
+        border: none;
+        color: #fff;
+        margin-bottom: 20rpx;
+      }
+
+       .login-btn {
+        background-color: #1c1c1e;
+        color: #fff;
+      }
     }
 
     .other-login {
diff --git a/plugins/http.js b/plugins/http.js
index 3ede604..0523cbe 100644
--- a/plugins/http.js
+++ b/plugins/http.js
@@ -113,14 +113,14 @@
 								await message.showToast('登录信息失效')
 
 								// #ifdef PUB_CUSTOMER
-								uni.reLaunch({
-									url: '/pages/login/login'
-								})
+								// uni.reLaunch({
+								// 	url: '/pages/login/login'
+								// })
 								// #endif
 								// #ifndef PUB_CUSTOMER
-								uni.reLaunch({
-									url: '/pages/login/login'
-								})
+								// uni.reLaunch({
+								// 	url: '/pages/login/login'
+								// })
 								// #endif
 								reject({
 									data: null,
@@ -164,9 +164,9 @@
 						})
 						// #endif
 						// #ifndef PUB_CUSTOMER
-						uni.reLaunch({
-							url: '/pages/login/login'
-						})
+						// uni.reLaunch({
+						// 	url: '/pages/login/login'
+						// })
 						// #endif
 						reject({
 							data: null,
diff --git a/store/user.ts b/store/user.ts
index e9535f7..bfca100 100644
--- a/store/user.ts
+++ b/store/user.ts
@@ -86,7 +86,12 @@
         // 如果你有持久化,这里也同步一下
         // storage.setItem('userInfo', userInfo.value)
       }
-      
+    function $reset() {
+        hasLogin.value = false
+        isBind.value = false
+        userInfo.value = null
+        address.value = null
+    }
 
     return {
         hasLogin,
@@ -97,5 +102,6 @@
         getCurrentInfo,
         initLoginState,
         updateAddress,
+        $reset,
     }
 })
diff --git a/sub-pages/community/index.vue b/sub-pages/community/index.vue
index 4e4684a..4af8465 100644
--- a/sub-pages/community/index.vue
+++ b/sub-pages/community/index.vue
@@ -1,30 +1,30 @@
 <template>
   <view :class="['app', theme]">
-    <up-sticky bgColor="#ffffff">
-      <view class="header">
-        <up-icon name="list" size="40rpx" color="#333333" @click="onSettingClick" />
-        <view>
-          <!-- <up-tabs :list="list1"> -->
-          <up-tabs v-model:current="parentTabIndex" :list="userTabList" @click="onChangeTab">
-            <!-- <template #left>
-            <up-icon name="list" size="40rpx" color="#333333" />
-          </template> -->
-            <!-- <template #right>
-            <up-icon name="search" size="48rpx" color="#333333" />
-          </template> -->
-          </up-tabs>
-        </view>
-        <up-icon name="search" size="48rpx" color="#333333" @click="toSearchPage()" />
-      </view>
-    </up-sticky>
+<!--    <up-sticky bgColor="#ffffff">-->
+<!--      <view class="header">-->
+<!--&lt;!&ndash;        <up-icon name="list" size="40rpx" color="#333333" @click="onSettingClick" />&ndash;&gt;-->
+<!--        <view>-->
+<!--          &lt;!&ndash; <up-tabs :list="list1"> &ndash;&gt;-->
+<!--          <up-tabs v-model:current="parentTabIndex" :list="userTabList" @click="onChangeTab">-->
+<!--            &lt;!&ndash; <template #left>-->
+<!--            <up-icon name="list" size="40rpx" color="#333333" />-->
+<!--          </template> &ndash;&gt;-->
+<!--            &lt;!&ndash; <template #right>-->
+<!--            <up-icon name="search" size="48rpx" color="#333333" />-->
+<!--          </template> &ndash;&gt;-->
+<!--          </up-tabs>-->
+<!--        </view>-->
+<!--&lt;!&ndash;        <up-icon name="search" size="48rpx" color="#333333" @click="toSearchPage()" />&ndash;&gt;-->
+<!--      </view>-->
+<!--    </up-sticky>-->
 
-    <view style="margin: 10px 10px 10px 10px; ">
-      <up-tabs :list="tabList" :itemStyle="{ padding: '0 16rpx', textAlign: 'center', flex: '1' }">
-        <template #right>
-          <up-icon name="arrow-down" size="15" color="#333333" />
-        </template>
-      </up-tabs>
-    </view>
+<!--    <view style="margin: 10px 10px 10px 10px; ">-->
+<!--      <up-tabs :list="tabList" :itemStyle="{ padding: '0 16rpx', textAlign: 'center', flex: '1' }">-->
+<!--        <template #right>-->
+<!--          <up-icon name="arrow-down" size="15" color="#333333" />-->
+<!--        </template>-->
+<!--      </up-tabs>-->
+<!--    </view>-->
     <view class="content-area">
       <up-waterfall v-model="films">
         <template #left="{ leftList }">
@@ -129,10 +129,10 @@
 
   filmStatus.value = 'loading'
 
-  // TODO 暂时使用光影社区的类别
+  // TODO 暂时使用光影的类别
   const query: FilmWorksQueryDTO = {
-    classify: '',
-    type: '',
+    classify: FilmWorksCategory.COMMUNITY,
+    status: 'published',
     current: filmPage.value,
     size: filmSize,
   };
diff --git a/sub-pages/film-list/film-detail.vue b/sub-pages/film-list/film-detail.vue
index 2d73253..b20d2c6 100644
--- a/sub-pages/film-list/film-detail.vue
+++ b/sub-pages/film-list/film-detail.vue
@@ -11,7 +11,7 @@
                         </view>
                     </view>
                     <view class="opera-info">
-                        <button class="custom-btn">关注</button>
+<!--                        <button class="custom-btn">关注</button>-->
                         <up-icon name="/static/common/share2.png" size="40rpx" color="#999" @click="openSharePopup" />
                     </view>
                 </view>
@@ -45,14 +45,14 @@
                         <!-- <view v-html="filmInfo.filmContent||'暂无'" class="rich" style="overflow: scroll;"></view> -->
                     </view>
                     <view class="annotation content-item">
-                        <text>{{ formatRelativeTime(filmInfo?.createTime) }} 美国</text>
+<!--                        <text>{{ formatRelativeTime(filmInfo?.createTime) }} 美国</text>-->
                     </view>
                 </view>
 
                 <up-line></up-line>
 
                 <view class="comment">
-                    <view class="writer-view" @click="showCommentLayer">
+                    <view class="writer-view" @click="() => showCommentLayer()">
                         <up-icon name="chat-fill" size="60rpx" />
                         <view class="comment-operation">
                             <up-text size="12px" text="说点什么......" margin="0 0 0 20rpx" color="#B9B9B9" />
@@ -87,7 +87,7 @@
             <!-- 固定底部输入框 -->
             <view class="comment-box">
                 <view class="input-row">
-                    <view class="comment-input" @click="showCommentLayer">
+                    <view class="comment-input" @click="() => showCommentLayer()">
                         <up-text size="12px" text="说点什么......" margin="0 0 0 20rpx" color="#B9B9B9" />
                     </view>
 <!--                    <up-icon name="heart" size="60rpx" color="#B9B9B9" label="11" />-->
@@ -256,8 +256,11 @@
 }
 
 // film-detail.vue
-const showCommentLayer = (parentId?: number) => {
+const showCommentLayer = (parentId?: number | string) => {
   console.log('点击了评论按钮',parentId)
+  if (typeof parentId === 'object') {
+    parentId = ''
+  }
   commentShow.value = true
   // 如果有parentId,说明是回复评论,需要设置parentId
   // 如果没有parentId,说明是直接评论,不需要设置parentId
diff --git a/sub-pages/film-list/film-list.vue b/sub-pages/film-list/film-list.vue
index 3257cd1..4a4e54d 100644
--- a/sub-pages/film-list/film-list.vue
+++ b/sub-pages/film-list/film-list.vue
@@ -38,6 +38,7 @@
 const { navigateTo } = useNavigator()
 
 import { getTabList,getFilmWorksBase } from '@/sub-pages/utils/api'
+import { useUserStore } from '@/store/user'
 
 const theme = ref('light')
 const search = ref('')
@@ -63,12 +64,35 @@
   getfilms()                     // 重新加载数据
 }
 
-const handleDetailClick = (item: FilmCategoryTree) => {
-    const urlOfficicl=`/sub-pages/film-list/film-official-detail?id=${item.id}`;
-    const url= `/sub-pages/film-list/film-detail?id=${item.id}` 
-    navigateTo(url)
+const handleDetailClick = async (item: FilmCategoryTree) => {
+  const userStore = useUserStore()
+  // 尝试获取最新用户信息验证登录状态
+  try {
+    await userStore.getCurrentInfo()
+    if (userStore.hasLogin) {
+      navigateTo(`/sub-pages/film-list/film-detail?id=${item.id}`)
+    } else {
+      showLoginModal()
+    }
+  } catch (err) {
+    console.error('验证登录状态失败:', err)
+    showLoginModal()
+  }
+    // const urlOfficicl=`/sub-pages/film-list/film-official-detail?id=${item.id}`;
+    // const url= `/sub-pages/film-list/film-detail?id=${item.id}`
+    // navigateTo(url)
 }
 
+const showLoginModal = () => {
+  uni.showModal({
+    title: '登录提示',
+    content: '查看详情需要登录,是否前往登录?',
+    confirmText: '去登录',
+    success: (res) => {
+      if(res.confirm) uni.navigateTo({ url: '/pages/login/login' })
+    }
+  })
+}
 const showToast = (msg: string) => {
   uni.showToast({ title: msg, icon: 'none' })
 }
@@ -112,7 +136,7 @@
   if (filmStatus.value === 'nomore') return
   filmStatus.value = 'loading'
 
-  // TODO 暂时使用光影社区的类别
+  // TODO 暂时使用光影的类别
   const query: FilmWorksQueryDTO = {
 	category: currentCategory.value, // 将当前分类ID加入查询参数
     classify: '',
diff --git a/sub-pages/mine/index.vue b/sub-pages/mine/index.vue
index cb9b46d..d761aa9 100644
--- a/sub-pages/mine/index.vue
+++ b/sub-pages/mine/index.vue
@@ -3,9 +3,10 @@
     <view class="profile-section" :style="backgroundStyle">
       <up-sticky bgColor="#000">
         <view class="top-bar">
-          <up-icon name="list" size="60rpx" color="#D0E1E9" @click="onSettingClick" />
+          <up-icon name="setting" size="60rpx" color="#D0E1E9" @click="onSettingClick" />
+<!--          <up-icon name="list" size="60rpx" color="#D0E1E9" @click="showUnderDevelopment" />-->
           <view class="top-bar-right">
-            <up-icon name="share" size="60rpx" color="#D0E1E9" />
+<!--            <up-icon name="share" size="60rpx" color="#D0E1E9" @click="showUnderDevelopment" />-->
           </view>
         </view>
       </up-sticky>
@@ -21,45 +22,45 @@
             </view>
           </view>
           <view class="user-info">
-            <view class="username">影途 {{ userStore?.userInfo?.customerDTO?.name }}</view>
-            <view class="user-id">影途号:{{ userStore?.userInfo?.customerDTO?.id }}</view>
+            <view class="username">影游四方 {{ userStore?.userInfo?.customerDTO?.name }}</view>
+            <view class="user-id">影游四方号:{{ userStore?.userInfo?.customerDTO?.id }}</view>
             <view class="location">IP 属地:{{ userStore.address?.ad_info?.province }}</view>
           </view>
         </view>
 
-        <view class="edit-profile" >点击这里,填写简介</view>
+<!--        <view class="edit-profile" >点击这里,填写简介</view>-->
 
         <view class="stats">
           <view class="stat-row">
-            <view class="stat-item">
-              <text class="number">0</text>
-              <text class="label">关注</text>
-            </view>
-            <view class="stat-item">
-              <text class="number">0</text>
-              <text class="label">粉丝</text>
-            </view>
-            <view class="stat-item">
+<!--            <view class="stat-item">-->
+<!--              <text class="number">0</text>-->
+<!--              <text class="label">关注</text>-->
+<!--            </view>-->
+<!--            <view class="stat-item">-->
+<!--              <text class="number">0</text>-->
+<!--              <text class="label">粉丝</text>-->
+<!--            </view>-->
+<!--            <view class="stat-item">
               <text class="number">1</text>
               <text class="label">获赞与收藏</text>
-            </view>
+            </view> -->
           </view>
           <view class="action-buttons">
-            <up-button text="编辑资料" size="mini" type="info" plain hairline @click="navigateTo('/sub-pages/mine/profile-edit')"
-              :custom-style="{ backgroundColor: 'transparent', borderColor: '#B1ABA9' }" />
-            <up-icon name="setting" size="40rpx" @click="navigateTo('/sub-pages/mine/settings')" />
+<!--            <up-button text="编辑资料" size="mini" type="info" plain hairline @click="navigateTo('/sub-pages/mine/profile-edit')"-->
+<!--              :custom-style="{ backgroundColor: 'transparent', borderColor: '#B1ABA9' }" />-->
+<!--            <up-icon name="setting" size="40rpx" @click="navigateTo('/sub-pages/mine/settings')" />-->
           </view>
         </view>
       </view>
 
-      <scroll-view class="function-cards" scroll-x show-scrollbar="false">
-        <view class="card" v-for="item in cardList" :key="item.title">
-          <view class="card-content">
-            <text class="card-title">{{ item.title }}</text>
-            <text class="card-subtitle">{{ item.subtitle }}</text>
-          </view>
-        </view>
-      </scroll-view>
+<!--      <scroll-view class="function-cards" scroll-x show-scrollbar="false">-->
+<!--        <view class="card" v-for="item in cardList" :key="item.title"  @click="showUnderDevelopment">-->
+<!--          <view class="card-content">-->
+<!--            <text class="card-title">{{ item.title }}</text>-->
+<!--            <text class="card-subtitle">{{ item.subtitle }}</text>-->
+<!--          </view>-->
+<!--        </view>-->
+<!--      </scroll-view>-->
     </view>
 
     <view class="tab-section">
@@ -68,20 +69,67 @@
           activeStyle="color: #2979ff" />
       </up-sticky>
 
+
+<!--      <swiper class="swiper-box" :current="current" @change="onSwiperChange" duration="300">-->
+<!--        <swiper-item v-for="(item, index) in tabList" :key="index">-->
+<!--          <view v-if="!userStore.hasLogin" class="empty-state">-->
+<!--            <text class="empty-text">请登录后查看{{ item.name }}</text>-->
+<!--          </view>-->
+<!--          <view v-else-if="getCurrentList.length === 0" class="empty-state">-->
+<!--            <text class="empty-text">暂无{{ item.name }}内容</text>-->
+<!--          </view>-->
+<!--          <view v-else class="list-view">-->
+<!--            <up-waterfall v-model="getCurrentList">-->
+<!--              <template #left="{ leftList }">-->
+<!--                <FlowCard-->
+<!--                    v-for="(item, index) in leftList"-->
+<!--                    :key="index"-->
+<!--                    :item="item"-->
+<!--                    @click="handleDetailClick"-->
+<!--                />-->
+<!--              </template>-->
+<!--              <template #right="{ rightList }">-->
+<!--                <FlowCard-->
+<!--                    v-for="(item, index) in rightList"-->
+<!--                    :key="index"-->
+<!--                    :item="item"-->
+<!--                    @click="handleDetailClick"-->
+<!--                />-->
+<!--              </template>-->
+<!--            </up-waterfall>-->
+<!--            <up-loadmore :status="loading ? 'loading' : 'nomore'" :line="true" />-->
+<!--          </view>-->
+<!--        </swiper-item>-->
+<!--      </swiper>-->
       <swiper class="swiper-box" :current="current" @change="onSwiperChange" duration="300">
         <swiper-item v-for="(item, index) in tabList" :key="index">
-          <view class="empty-state">
-            <image class="empty-icon"
-              src="https://ai-public.mastergo.com/ai/img_res/fc3cb775274ef0f5e58ac01687a9c121.jpg" mode="aspectFit" />
-            <text class="empty-text">快去发布你的笔记吧</text>
-            <up-button class="publish-btn" size="mini" type="warning" shape="circle">去发布</up-button>
+          <view class="list-view">
+            <up-waterfall v-model="getCurrentList">
+              <template #left="{ leftList }">
+                <FlowCard
+                    v-for="(item, index) in leftList"
+                    :key="index"
+                    :item="item"
+                    @click="handleDetailClick"
+                />
+              </template>
+              <template #right="{ rightList }">
+                <FlowCard
+                    v-for="(item, index) in rightList"
+                    :key="index"
+                    :item="item"
+                    @click="handleDetailClick"
+                />
+              </template>
+            </up-waterfall>
+            <up-loadmore :status="loading ? 'loading' : 'nomore'" :line="true" />
           </view>
         </swiper-item>
       </swiper>
     </view>
 
     <common-footer flg="0" />
-    <setting-popup v-model="settingShow" />
+<!--    <setting-popup v-model="settingShow" />-->
   </view>
 </template>
 
@@ -93,6 +141,8 @@
 import { useUserStore } from '@/store/user'
 import { useLocation } from '@/composables/useLocation'
 import { useNavigator } from '@/composables/useNavigator'
+import { FilmWorks } from '@/types/index'
+import{ getFilmCollectList, getFilmLikeList} from '@/sub-pages/utils/api'
 
 const { apitype } = usePlatformLoginType()
 const userStore = useUserStore()
@@ -104,12 +154,26 @@
   () => userStore.userInfo,      // 监听 userInfo 这个响应式属性
   (newVal, oldVal) => {
     console.log('userInfo 发生变化:', newVal)
+    if (newVal && userStore.hasLogin) {
+      fetchList();
+    } else {
+      // 用户未登录,清空列表
+      likeList.value = [];
+      collectList.value = [];
+    }
   },
   { deep: true } // 如果 userInfo 是对象,需要深度监听其属性变化
 )
 
 onShow(() => {
   getLocation()
+  if (userStore.hasLogin) {
+    fetchList();
+  }else {
+    // 用户未登录,清空列表
+    likeList.value = [];
+    collectList.value = [];
+  }
 });
 
 
@@ -122,9 +186,13 @@
 // 控制设置弹窗显示
 const settingShow = ref(false);
 
+const likeList = ref<FilmWorks[]>([]);
+const collectList = ref<FilmWorks[]>([]);
+const loading = ref(false);
+const noMore = ref(false);
 // tab 列表
 const tabList = ref([
-  { name: '笔记' },
+  // { name: '笔记' },
   { name: '收藏' },
   { name: '赞过' },
 ]);
@@ -146,20 +214,67 @@
 
 // 方法定义
 const onSettingClick= ()=> {
-  settingShow.value = true;
+  // settingShow.value = true;
+  uni.navigateTo({ url: '/sub-pages/mine/settings' })
 }
 
 const onTabChange=(item: { index: number })=> {
   current.value = item.index;
+  // 切换tab时检查是否需要加载数据
+  if (userStore.hasLogin &&
+      ((current.value === 0 && collectList.value.length === 0) ||
+          (current.value === 1 && likeList.value.length === 0))) {
+    fetchList();
+  }
 }
 
 const onSwiperChange=(e: any) => {
   current.value = e.detail.current;
+  onTabChange({ index: e.detail.current });
 }
 
+const handleDetailClick = (item: FilmWorks) => {
+  navigateTo(`/sub-pages/film-list/film-detail?id=${item.id}`);
+};
 
+const getCurrentList = computed(() => {
+  return current.value === 0 ? collectList.value : likeList.value;
+});
+const fetchList = async () => {
+  if (!userStore.hasLogin || loading.value || noMore.value) return;
+  loading.value = true;
+  try {
+    if (current.value === 0) {
+      // 获取收藏列表
+      collectList.value = [];
+      const res = await getFilmCollectList({
+        userId: userStore.userInfo?.customerDTO?.id
+      });
+      collectList.value = res || [];
+    } else {
+      // 获取点赞列表
+      likeList.value = [];
+      const res = await getFilmLikeList({
+        userId: userStore.userInfo?.customerDTO?.id
+      });
+      likeList.value = res || [];
+    }
+  } catch (error) {
+    console.error('获取列表失败:', error);
+    uni.showToast({ title: '获取数据失败', icon: 'none' });
+  } finally {
+    loading.value = false;
+  }
+};
 const goToProfile=  ()=> {
   navigateTo('/sub-pages/mine/edit-profile');
+};
+
+const showUnderDevelopment = () => {
+  uni.showToast({
+    title: '功能正在开发中',
+    icon: 'none'
+  });
 }
 </script>
 
@@ -327,7 +442,7 @@
 
 .card {
   display: inline-block;
-  width: 180rpx;
+  width: 100%;
   height: 80rpx;
   margin-left: 20rpx;
   background-color: rgba(60, 60, 60, 0.4);
@@ -426,11 +541,21 @@
   border-radius: 32rpx !important;
   padding: 0 48rpx !important;
 }
+.swiper-box {
+  min-height: calc(100vh - 200rpx);
+  /*padding: 20rpx 0;*/
+}
+
+.list-view {
+  /*padding: 0 20rpx;*/
+  background-color: #fff;
+}
 </style>
 <style lang="scss" scoped>
-.swiper-box {
-  // min-height: 600rpx;
-  /* 或 100vh,或具体 px */
-  min-height: 800px;
-}
+//.swiper-box {
+//  // min-height: 600rpx;
+//  /* 或 100vh,或具体 px */
+//  min-height: 800px;
+//}
+
 </style>
\ No newline at end of file
diff --git a/sub-pages/mine/settings.vue b/sub-pages/mine/settings.vue
index 0770cc1..9f2e734 100644
--- a/sub-pages/mine/settings.vue
+++ b/sub-pages/mine/settings.vue
@@ -25,11 +25,11 @@
       <!-- 底部操作 -->
       <view class="bottom-actions">
         <up-cell-group :border="false" class="cell-group">
-          <up-cell :border="true" @click="onSwitchAccount">
-            <template #title>
-              <view class="center-cell-text">切换账号</view>
-            </template>
-          </up-cell>
+<!--          <up-cell :border="true" @click="onSwitchAccount">-->
+<!--            <template #title>-->
+<!--              <view class="center-cell-text">切换账号</view>-->
+<!--            </template>-->
+<!--          </up-cell>-->
           <up-cell :border="true" @click="onLogout">
             <template #title>
               <view class="center-cell-text">退出登录</view>
@@ -39,22 +39,24 @@
       </view>
   
       <!-- 法律文案 -->
-      <view class="portotal-actions">
-        <view class="action-row">
-          <up-text size="10" :bold="true" text="《个人信息收集清单》" @click="toPortotalUni('个人信息收集清单')" color="#38516E" />
-          <up-text size="10" :bold="true" text="《第三方信息共享清单》" @click="toPortotalUni('个人信息收集清单')" color="#38516E" />
-        </view>
-        <view class="action-row">
-          <up-text size="10" :bold="true" text="《用户服务协议》" @click="toPortotalUni('用户协议')" color="#38516E" />
-          <up-text size="10" :bold="true" text="《用户隐私政策》" @click="toPortotalUni('隐私政策')" color="#38516E" />
-        </view>
-      </view>
+<!--      <view class="portotal-actions">-->
+<!--        <view class="action-row">-->
+<!--          <up-text size="10" :bold="true" text="《个人信息收集清单》" @click="toPortotalUni('个人信息收集清单')" color="#38516E" />-->
+<!--          <up-text size="10" :bold="true" text="《第三方信息共享清单》" @click="toPortotalUni('个人信息收集清单')" color="#38516E" />-->
+<!--        </view>-->
+<!--        <view class="action-row">-->
+<!--          <up-text size="10" :bold="true" text="《用户服务协议》" @click="toPortotalUni('用户协议')" color="#38516E" />-->
+<!--          <up-text size="10" :bold="true" text="《用户隐私政策》" @click="toPortotalUni('隐私政策')" color="#38516E" />-->
+<!--        </view>-->
+<!--      </view>-->
     </view>
   </template>
   
   <script setup lang="ts">
   import { ref } from 'vue'
   import { useNavigator } from '@/composables/useNavigator'
+  import { useUserStore } from '@/store/user'
+  const userStore = useUserStore()
   const { toProtocol } = useNavigator()
 
   
@@ -71,23 +73,23 @@
   
   // 设置菜单
   const menuList = ref<Array<Array<MenuItem>>>([
-    [
-      { title: '账号与安全', icon: 'account' },
-      { title: '通用设置', icon: 'setting' },
-      { title: '通知设置', icon: 'bell' },
-      { title: '隐私设置', icon: 'lock' }
-    ],
-    [
-      { title: '存储空间', icon: 'trash', value: '1.12 GB' },
-      { title: '内容偏好调节', icon: 'file-text' },
-      { title: '收货地址', icon: 'map' },
-      { title: '添加小组件', icon: 'grid' },
-      { title: '未成年人模式', icon: '/static/common/umbrella.png', value: '未开启' }
-    ],
-    [
-      { title: '帮助与客服', icon: 'kefu-ermai' },
-      { title: '关于小红书', icon: 'info-circle' }
-    ]
+    // [
+    //   { title: '账号与安全', icon: 'account' },
+    //   { title: '通用设置', icon: 'setting' },
+    //   { title: '通知设置', icon: 'bell' },
+    //   { title: '隐私设置', icon: 'lock' }
+    // ],
+    // [
+    //   { title: '存储空间', icon: 'trash', value: '1.12 GB' },
+    //   { title: '内容偏好调节', icon: 'file-text' },
+    //   { title: '收货地址', icon: 'map' },
+    //   { title: '添加小组件', icon: 'grid' },
+    //   { title: '未成年人模式', icon: '/static/common/umbrella.png', value: '未开启' }
+    // ],
+    // [
+    //   { title: '帮助与客服', icon: 'kefu-ermai' },
+    //   { title: '关于小红书', icon: 'info-circle' }
+    // ]
   ])
   
   // 点击菜单项
@@ -114,7 +116,44 @@
       content: '确定要退出登录吗?',
       success: (res) => {
         if (res.confirm) {
-          uni.showToast({ title: '已退出登录', icon: 'success' })
+          try {
+            // 显示加载状态
+            uni.showLoading({ title: '正在退出...', mask: true })
+
+            // 1. 调用登出逻辑(如果有后端API)
+            // const result = await http.request('post', '/api/logout')
+            // if (result.code !== 0) throw new Error(result.msg)
+
+            // 2. 清除本地用户状态
+            userStore.$reset() // 重置整个store
+
+            // 3. 清除本地存储
+            uni.removeStorageSync('token')
+            uni.removeStorageSync('userInfo')
+
+            // 4. 显示成功提示
+            uni.showToast({
+              title: '已退出登录',
+              icon: 'success',
+              duration: 1500
+            })
+
+            // 5. 跳转到登录页
+            setTimeout(() => {
+              uni.reLaunch({
+                url: '/pages/login/login' // 根据实际路由调整
+              })
+            }, 1500)
+
+          } catch (error) {
+            uni.showToast({
+              title: '退出登录失败',
+              icon: 'none'
+            })
+            console.error('退出登录失败:', error)
+          } finally {
+            uni.hideLoading()
+          }
         }
       }
     })
diff --git a/sub-pages/utils/api.ts b/sub-pages/utils/api.ts
index 0316dea..5181ed3 100644
--- a/sub-pages/utils/api.ts
+++ b/sub-pages/utils/api.ts
@@ -96,4 +96,31 @@
         message.showToast('系统异常,无法获取数据');
         return null;
     }
-}
\ No newline at end of file
+}
+// 获取用户点赞的电影列表
+export const getFilmLikeList = async (query: { userId: string }) => {
+    const { code, data } = await http.request('get', '/api/filmWorks/like/list', {
+        params: query
+    });
+
+    if (code === 0) {
+        return data.records;
+    } else {
+        message.showToast('系统异常,无法获取数据');
+        return null;
+    }
+};
+
+// 获取用户收藏的电影列表
+export const getFilmCollectList = async (query: { userId: string }) => {
+    const { code, data } = await http.request('get', '/api/filmWorks/collect/list', {
+        params: query
+    });
+
+    if (code === 0) {
+        return data.records;
+    } else {
+        message.showToast('系统异常,无法获取数据');
+        return null;
+    }
+};
\ No newline at end of file
diff --git a/types/index.ts b/types/index.ts
index 7ba6aaa..81be94e 100644
--- a/types/index.ts
+++ b/types/index.ts
@@ -56,7 +56,7 @@
     /** 发布状态(COMMON_PUBLISH_STATUS) */
     status?: string;
 
-    /** 分类:1-为你精选,2-光影社区 */
+    /** 分类:1-为你精选,2-光影天地 */
     classify?: number;
 
     /** 创建日期(yyyy-mm-dd)开始 */

--
Gitblit v1.9.3