From 14764dd7679369a650ad1d60be62aacc863755a1 Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期四, 22 五月 2025 16:29:01 +0800
Subject: [PATCH] 3

---
 mixin/mixin - 副本.js                          |  279 ++++++++++
 sub-pages/mine/settings.vue                  |  152 +++++
 components/card/card-item.vue                |  130 ++++
 sub-pages/community/index.vue                |  403 ++++++++++++++
 sub-pages/film-list/film-official-detail.vue |  171 ++++--
 pages.json                                   |   19 
 mixin/mixin.js                               |   16 
 components/setting/setting-popup.vue         |    4 
 /dev/null                                    |  397 --------------
 components/footer/customer-footer.vue        |    2 
 sub-pages/film-list/film-detail.vue          |   16 
 sub-pages/film-list/film-list.vue            |   16 
 static/common/umbrella.png                   |    0 
 13 files changed, 1,124 insertions(+), 481 deletions(-)

diff --git a/components/card/card-item.vue b/components/card/card-item.vue
new file mode 100644
index 0000000..d9dea6c
--- /dev/null
+++ b/components/card/card-item.vue
@@ -0,0 +1,130 @@
+<template>
+  <view class="card-container">
+    <!-- 卡片图片区域,如果有视频则显示播放图标 -->
+    <view class="card-image-container">
+      <image class="card-image" :src="item.image" mode="widthFix"></image>
+      <view class="video-icon" v-if="item.hasVideo">
+        <u-icon name="play-right-fill" color="#ffffff" size="40"></u-icon>
+      </view>
+    </view>
+    
+    <!-- 卡片内容区域 -->
+    <view class="card-content">
+      <!-- 标题 -->
+      <view class="card-title">{{ item.title }}</view>
+      
+      <!-- 描述文字 -->
+      <view class="card-desc" v-if="item.desc">{{ item.desc }}</view>
+      
+      <!-- 作者信息和点赞 -->
+      <view class="card-footer">
+        <view class="author-info">
+          <image class="author-avatar" :src="item.author.avatar" mode="aspectFill"></image>
+          <text class="author-name">{{ item.author.name }}</text>
+        </view>
+        <view class="like-info">
+          <u-icon name="heart" color="#999999" size="16"></u-icon>
+          <text class="like-count">{{ item.likes }}</text>
+        </view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'CardItem',
+  props: {
+    item: {
+      type: Object,
+      required: true
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.card-container {
+  width: 100%;
+  border-radius: 8px;
+  overflow: hidden;
+  background-color: #ffffff;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.card-image-container {
+  position: relative;
+  width: 100%;
+}
+
+.card-image {
+  width: 100%;
+  height: auto;
+  display: block;
+}
+
+.video-icon {
+  position: absolute;
+  right: 10px;
+  top: 10px;
+  width: 40px;
+  height: 40px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.card-content {
+  padding: 10px;
+}
+
+.card-title {
+  font-size: 14px;
+  font-weight: bold;
+  color: #333333;
+  line-height: 1.4;
+  margin-bottom: 6px;
+}
+
+.card-desc {
+  font-size: 12px;
+  color: #666666;
+  line-height: 1.4;
+  margin-bottom: 10px;
+}
+
+.card-footer {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-top: 8px;
+}
+
+.author-info {
+  display: flex;
+  align-items: center;
+}
+
+.author-avatar {
+  width: 24px;
+  height: 24px;
+  border-radius: 50%;
+  margin-right: 6px;
+}
+
+.author-name {
+  font-size: 12px;
+  color: #666666;
+}
+
+.like-info {
+  display: flex;
+  align-items: center;
+}
+
+.like-count {
+  font-size: 12px;
+  color: #999999;
+  margin-left: 4px;
+}
+</style>
diff --git a/components/footer/customer-footer.vue b/components/footer/customer-footer.vue
index 16688bc..893dd3a 100644
--- a/components/footer/customer-footer.vue
+++ b/components/footer/customer-footer.vue
@@ -62,7 +62,7 @@
 			},
 			{
 				"text": "社区",
-				"pagePath": '/pages/user/supplier-user'
+				"pagePath": '/sub-pages/community/index'
 			},
 			{
 				"text": "我的",
diff --git a/components/setting/setting-popup.vue b/components/setting/setting-popup.vue
index cb2a3c4..f9f1246 100644
--- a/components/setting/setting-popup.vue
+++ b/components/setting/setting-popup.vue
@@ -115,6 +115,10 @@
         uni.navigateTo({
           url: '/pages/cart/index'
         });
+      } else if (item.title === '设置') {
+        uni.navigateTo({
+          url: '/sub-pages/mine/settings'
+        });
       } else {
         // 通用跳转
         uni.navigateTo({
diff --git "a/mixin/mixin - \345\211\257\346\234\254.js" "b/mixin/mixin - \345\211\257\346\234\254.js"
new file mode 100644
index 0000000..ad5ad6e
--- /dev/null
+++ "b/mixin/mixin - \345\211\257\346\234\254.js"
@@ -0,0 +1,279 @@
+import {
+	mapState
+} from 'vuex'
+import store from "../store";
+
+// import environments from '@/environments'
+
+const mixinsCommon = {
+	computed: {
+		...mapState({
+			hasLogin: state => {
+				// console.log('computed hasLogin',state.hasLogin,state)
+				return state.hasLogin || false
+			},
+			selftype: state => {
+				return (state.currentInfo || {}).type || ''
+			},
+			currentInfo: state => {
+				return state.currentInfo || {}
+			},
+			cache_address: state => {
+				return state.cache_address || {}
+			},
+			cache_user: state => {
+				return state.currentInfo || {}
+			},
+			sign: state => {
+				return state.sign || {}
+			},
+			// currentEnId: state=>{
+			// 	// console.log('currentEnId',state.currentInfo.enId,state.currentInfo)
+			// 	return state.currentInfo.enId || ''
+			// }
+		}),
+	},
+	data() {
+		return {
+			list: [],
+			query: {},
+			page: {
+				size: 10,
+				current: 1,
+				total: 0,
+			},
+			style: {
+				'color': '#fff'
+			},
+			listApi: '',
+			// regUserName: '用户-' + this.getRandomName(Math.floor(Math.random() * (6 - 2) + 3)),
+			// regAvatarUrl: 'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png',
+			regUserName: '',
+			regAvatarUrl: '',
+		}
+	},
+	methods: {
+		copyTxt(txt) {
+			uni.setClipboardData({
+				data: txt, //要被复制的内容
+				success: () => { //复制成功的回调函数
+					uni.showToast({ //提示
+						title: '复制成功'
+					})
+				}
+			})
+		},
+		onChooseavatar(e) {
+			let self = this;
+			let {
+				avatarUrl
+			} = e.detail;
+			this.regAvatarUrl = avatarUrl
+			console.log('avatarUrl', this.regAvatarUrl)
+		},
+		onBindblur(e) {
+			this.regUserName = e.detail.value; // 获取微信昵称
+		},
+		onBindinput(e) {
+			this.regUserName = e.detail.value; // 获取微信昵称
+		},
+
+		handleContact(e) {
+			console.log(e.detail.path)
+			console.log(e.detail.query)
+		},
+
+
+
+		previewImg(url) {
+			if (url) {
+				uni.previewImage({
+					urls: [url]
+				})
+			}
+		},
+		checkFormValues(dto, keys) {
+			if (keys) {
+				for (var key of keys) {
+					if (!dto[key]) {
+						return false
+					}
+				}
+			}
+			return true
+		},
+		async refreshList(type = 'get') {
+			this.page.current = 1
+			await this.getList(type)
+		},
+		async getList(type = 'get') {
+			if (this.listApi) {
+				this.$message.showLoading()
+				const {
+					data
+				} = await this.$http.request(type, this.listApi, {
+					params: {
+						...this.query,
+						...this.page
+					},
+					data: {
+						...this.query,
+						...this.page
+					}
+				})
+				if (data) {
+					if (data && Array.isArray(data)) {
+						this.list = data || []
+						this.page.total = data.length || 0
+					} else {
+						if (this.page.current === 1) {
+							this.list = data.records || []
+						} else {
+							//根据id去重正常
+							var ids = []
+							var idsMap = {}
+							for (var item of this.list) {
+								ids.push(item.id)
+								if (item.id) {
+									idsMap[item.id] = item
+								}
+							}
+							var hasnew = false
+							for (var item of data.records) {
+								if (ids.indexOf(item.id) < 0) {
+									this.list.push(item)
+								} else {
+									//最好更新一下
+									idsMap[item.id] = {
+										...idsMap[item.id],
+										...item, //覆盖了
+									}
+									hasnew = true
+								}
+							}
+							if (hasnew) {
+								this.$forceUpdate()
+							}
+
+						}
+						this.page.total = data.total || 0
+					}
+
+					if (this.getList_after) {
+						this.getList_after()
+					}
+				}
+				this.$message.hideLoading()
+			}
+
+		},
+		async getMore(type = 'get') {
+			if (this.page.total > this.page.current * this.page.size) {
+				this.page.current += 1
+				await this.getList(type)
+			}
+		},
+		backHome() {
+			uni.reLaunch({
+				url: '/pages/home/home'
+			})
+		},
+		goto(url, check = false) {
+			if (check) {
+				console.log('currentInfo', this.currentInfo)
+				if (!this.currentInfo.id) {
+					this.$message.showToast('请先登陆')
+					return
+				}
+
+			}
+			uni.navigateTo({
+				url
+			})
+		},
+		backpage() {
+			// this.$router.go(-1)
+			uni.navigateBack()
+		}
+		// #ifdef APP || H5
+		,
+		async appdownload(url, name = '') {
+			await this.$message.confirm('确定下载此文件吗')
+			let _this = this
+			if (url) {
+				// var url2 = environments.httpBaseUri + `/api/download/file?fileName=${name}&filePath=` + url
+				// uni.downloadFile({
+				// 	url: url2,
+				// 	success: (res) => {
+				// 		if (res.statusCode === 200) {
+				// 			_this.$message.showToast('下载成功')
+				// 		} else {
+				// 			console.log(res)
+				// 			_this.$message.showToast('下载失败')
+				// 		}
+				// 	},
+				// 	fail: (res) => {
+				// 		console.log(res)
+				// 		_this.$message.showToast('下载失败')
+				// 	}
+				// });
+				_this.$message.showLoading()
+
+				uni.downloadFile({
+					url: url, //下载地址接口返回
+					success: (data) => {
+						_this.$message.hideLoading()
+						console.log('success', data)
+						if (data.statusCode === 200) {
+							//文件保存到本地
+							uni.saveFile({
+								tempFilePath: data.tempFilePath, //临时路径
+								success: function(res) {
+									uni.showToast({
+										icon: 'none',
+										mask: true,
+										title: '文件已保存:' + res
+											.savedFilePath, //保存路径
+										duration: 2000,
+									});
+									setTimeout(() => {
+										//打开文档查看
+										uni.openDocument({
+											filePath: res.savedFilePath,
+											success: function(res) {
+												// console.log('打开文档成功');
+											}
+										});
+									}, 2000)
+								},
+								fail: (err) => {
+
+									console.log(err);
+									uni.showToast({
+										icon: 'none',
+										mask: true,
+										title: '下载成功保存失败',
+									});
+								},
+							});
+						}
+					},
+					fail: (err) => {
+						_this.$message.hideLoading()
+
+						console.log(err);
+						uni.showToast({
+							icon: 'none',
+							mask: true,
+							title: '失败请重新下载',
+						});
+					},
+				});
+			}
+		}
+		// #endif
+
+
+	}
+}
+export default mixinsCommon
\ No newline at end of file
diff --git a/mixin/mixin.js b/mixin/mixin.js
index ad5ad6e..2fae82f 100644
--- a/mixin/mixin.js
+++ b/mixin/mixin.js
@@ -35,7 +35,7 @@
 	},
 	data() {
 		return {
-			list: [],
+			baseList: [],
 			query: {},
 			page: {
 				size: 10,
@@ -45,7 +45,7 @@
 			style: {
 				'color': '#fff'
 			},
-			listApi: '',
+			baseListApi: '',
 			// regUserName: '用户-' + this.getRandomName(Math.floor(Math.random() * (6 - 2) + 3)),
 			// regAvatarUrl: 'https://youzhen123.oss-cn-huhehaote.aliyuncs.com/WechatOwnerProperty/images/mrtx.png',
 			regUserName: '',
@@ -107,11 +107,11 @@
 			await this.getList(type)
 		},
 		async getList(type = 'get') {
-			if (this.listApi) {
+			if (this.baseListApi) {
 				this.$message.showLoading()
 				const {
 					data
-				} = await this.$http.request(type, this.listApi, {
+				} = await this.$http.request(type, this.baseListApi, {
 					params: {
 						...this.query,
 						...this.page
@@ -123,16 +123,16 @@
 				})
 				if (data) {
 					if (data && Array.isArray(data)) {
-						this.list = data || []
+						this.baseList = data || []
 						this.page.total = data.length || 0
 					} else {
 						if (this.page.current === 1) {
-							this.list = data.records || []
+							this.baseList = data.records || []
 						} else {
 							//根据id去重正常
 							var ids = []
 							var idsMap = {}
-							for (var item of this.list) {
+							for (var item of this.baseList) {
 								ids.push(item.id)
 								if (item.id) {
 									idsMap[item.id] = item
@@ -141,7 +141,7 @@
 							var hasnew = false
 							for (var item of data.records) {
 								if (ids.indexOf(item.id) < 0) {
-									this.list.push(item)
+									this.baseList.push(item)
 								} else {
 									//最好更新一下
 									idsMap[item.id] = {
diff --git a/pages.json b/pages.json
index 43a9597..0c3cd2f 100644
--- a/pages.json
+++ b/pages.json
@@ -58,6 +58,18 @@
 			]
 		},
 		{
+			"root": "sub-pages/community",
+			"pages": [
+				{
+					"path": "index",
+					"style": {
+						"navigationBarTitleText": "",
+						"enablePullDownRefresh": true
+					}
+				}
+			]
+		}
+		,{
 			"root": "sub-pages/mine",
 			"pages": [
 				{
@@ -67,6 +79,13 @@
 						"enablePullDownRefresh": true
 					}
 				}
+				,{
+					"path": "settings",
+					"style": {
+						"navigationBarTitleText": "设置",
+						"enablePullDownRefresh": true
+					}
+				}
 			]
 		}
 	],
diff --git a/static/common/umbrella.png b/static/common/umbrella.png
new file mode 100644
index 0000000..2dd3100
--- /dev/null
+++ b/static/common/umbrella.png
Binary files differ
diff --git a/sub-pages/community/index.vue b/sub-pages/community/index.vue
new file mode 100644
index 0000000..d87f2e9
--- /dev/null
+++ b/sub-pages/community/index.vue
@@ -0,0 +1,403 @@
+<template>
+  <view class="content">
+    <!-- 顶部固定导航栏 -->
+    <view class="fixed-top">
+      <u-navbar :is-fixed="true" :is-back="false" title-color="#333333" :background="{ background: '#FFFFFF' }">
+        <view class="navbar-content" slot="left">
+          <u-icon name="list" size="28" color="#333333"></u-icon>
+        </view>
+        <view class="navbar-content" slot="center">
+          <view class="tab-bar">
+            <view class="tab-item" :class="{ active: currentTab === 'about' }" @click="switchTab('about')">关注</view>
+            <view class="tab-item" :class="{ active: currentTab === 'discover' }" @click="switchTab('discover')">发现
+            </view>
+            <view class="tab-item" :class="{ active: currentTab === 'suzhou' }" @click="switchTab('suzhou')">苏州</view>
+          </view>
+        </view>
+        <view class="navbar-content" slot="right">
+          <u-icon name="search" size="28" color="#333333"></u-icon>
+        </view>
+      </u-navbar>
+    </view>
+
+    <!-- 标签页区域 -->
+    <view class="tab-scroll-area">
+      <scroll-view scroll-x class="tab-scroll" :scroll-left="scrollLeft">
+        <view class="tab-scroll-box">
+          <view class="tab-scroll-item" v-for="(item, index) in tabList" :key="index"
+            :class="{ active: currentScrollTab === item.id }" @click="switchScrollTab(item.id)">
+            {{ item.name }}
+          </view>
+        </view>
+      </scroll-view>
+    </view>
+    <!-- 内容区域 - 瀑布流布局 -->
+    <view class="content-area">
+      <waterfall ref="helangWaterfall" :col="2">
+        <template v-slot:default="{ list, colWidth }">
+          <waterfall-col v-for="(col, colIndex) in list" :key="colIndex" :colWidth="colWidth">
+            <waterfall-item v-for="(item, itemIndex) in col" :key="item.__waterfall_renderId" :colIndex="colIndex"
+              :reportHeightTime="item.__waterfall_reportHeightTime" @height="onRenderHeight">
+              <!-- 自定义内容 -->
+              <view class="card" @click="handleDetailClick(item)">
+                <image :src="item.imgurl" mode="widthFix" class="card-image" style="width: 100%;" />
+                <view class="card-title">
+                  <u--text :lines="2" size="14px" :text="item.title" :bold="true"></u--text>
+                </view>
+                <view class="card-footer">
+                  <view class="user-info">
+                    <u-avatar :src="item.avatar" size="40" shape="circle" />
+                    <view class="user-text">
+                      <text class="nickname">{{ item.username }}</text>
+                      <!-- <text class="date">{{ item.date }}</text> -->
+                    </view>
+                  </view>
+                  <view class="opera-info">
+                    <u-icon name="heart" size="30" color="#999" />
+                    <text>{{ item.likes }}</text>
+                  </view>
+                </view>
+              </view>
+            </waterfall-item>
+          </waterfall-col>
+        </template>
+      </waterfall>
+
+    </view>
+    <common-footer flg="0"></common-footer>
+  </view>
+</template>
+
+<script>
+import Waterfall from '@/uni_modules/helang-waterfall/components/waterfall/waterfall-list';
+import WaterfallCol from '@/uni_modules/helang-waterfall/components/waterfall/waterfall-col';
+import WaterfallItem from '@/uni_modules/helang-waterfall/components/waterfall/waterfall-item';
+export default {
+  components: {
+    Waterfall,
+    WaterfallCol,
+    WaterfallItem,
+  },
+  data() {
+
+    return {
+      currentTab: 'discover', // 顶部主导航当前选中项
+      currentScrollTab: 'recommend', // 横向滚动标签当前选中项
+      scrollLeft: 0,
+      tabList: [
+        { id: 'recommend', name: '推荐' },
+        { id: 'straight', name: '直播' },
+        { id: 'short', name: '短剧' },
+        { id: 'food', name: '美食' },
+        { id: 'travel', name: '穿搭' },
+        { id: 'beauty', name: '美甲' },
+        { id: 'more', name: '更多' }
+      ],
+      flowList: [],
+      items: [
+        {
+          id: 1,
+          title: 'iPhone 高清全屏壁纸,划走就后悔',
+          url: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
+          imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
+          username: '草莓喵喵',
+          avatar: '/static/avatar1.jpg',
+          date: '2024-12-01',
+          likes: 1397,
+        },
+        {
+          id: 2,
+          title: '高清 4K 全屏手机壁纸 #高质量壁纸高清 4K 全屏手机壁纸 #高质量壁纸高清 4K 全屏手机壁纸 #高质量壁纸',
+          url: 'https://img.yzcdn.cn/vant/cat.jpeg',
+          imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
+          username: '4K wallpaper',
+          avatar: '/static/avatar2.jpg',
+          date: '02-24',
+          likes: 167,
+        },
+        {
+          id: 3,
+          title: 'iPhone 实况动态壁纸 #动态壁纸',
+          url: '/static/wallpaper3.jpg',
+          imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
+          username: '图墙精选',
+          avatar: '/static/avatar3.jpg',
+          date: '03-01',
+          likes: 980,
+        },
+        {
+          id: 4,
+          title: '高清小清新壁纸 浪漫的人都有自己的海',
+          url: '/static/wallpaper4.jpg',
+          imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
+          username: 'wallpaper',
+          avatar: '/static/avatar4.jpg',
+          date: '04-10',
+          likes: 456,
+        }
+      ],
+    }
+  },
+  onLoad() {
+    // 模拟数据
+    this.loadData()
+  },
+  onShow() {
+    console.log("aaaaa")
+    this.$refs.helangWaterfall.render(this.items, true);
+  },
+  methods: {
+    // 切换顶部主导航
+    switchTab(tab) {
+      this.currentTab = tab
+    },
+    // 切换横向滚动标签
+    switchScrollTab(id) {
+      this.currentScrollTab = id
+      // 可以在这里根据选中的标签加载不同的数据
+      this.loadData()
+    },
+    onRenderHeight({ colIndex, height, reportHeightTimeChange }) {
+      console.log("height:",height)
+      this.$refs.helangWaterfall.reportHeight({
+        colIndex,
+        height,
+        reportHeightTimeChange
+      })
+    },
+    // 加载瀑布流数据
+    loadData() {
+      // 模拟数据
+      const mockData = [
+        {
+          id: 1,
+          image: '/static/travel1.jpg',
+          title: '我们是旅行社!不是许愿池',
+          desc: '池油!😊',
+          author: {
+            avatar: '/static/avatar1.jpg',
+            name: '小鹿'
+          },
+          likes: 66,
+          hasVideo: false
+        },
+        {
+          id: 2,
+          image: '/static/travel2.jpg',
+          title: '不丑和好漂亮区别有多大...',
+          desc: '大家都不好好穿...偷偷私藏争气',
+          author: {
+            avatar: '/static/avatar2.jpg',
+            name: 'ZUU'
+          },
+          likes: 2278,
+          hasVideo: true
+        },
+        {
+          id: 3,
+          image: '/static/travel3.jpg',
+          title: '新疆旅游车上非法改装车辆太过分了',
+          desc: '请你记住我的样子',
+          author: {
+            avatar: '/static/avatar3.jpg',
+            name: '旅行达人'
+          },
+          likes: 158,
+          hasVideo: true
+        },
+        {
+          id: 4,
+          image: '/static/travel4.jpg',
+          title: '天塌了!?江苏国补结束了??!',
+          desc: '',
+          author: {
+            avatar: '/static/avatar4.jpg',
+            name: '旅行家'
+          },
+          likes: 320,
+          hasVideo: false
+        }
+      ]
+
+      // 将数据添加到瀑布流
+      // this.$refs.uWaterfall.clear()
+      // setTimeout(() => {
+      //   mockData.forEach(item => {
+      //     this.$refs.uWaterfall.add(item)
+      //   })
+      // }, 500)
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.content {
+  margin-top: 180rpx;
+}
+
+.fixed-top {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  z-index: 999;
+}
+
+.navbar-content {
+  display: flex;
+  align-items: center;
+  height: 44px;
+}
+
+.tab-bar {
+  display: flex;
+  justify-content: center;
+  width: 200px;
+}
+
+.tab-item {
+  padding: 0 15px;
+  font-size: 16px;
+  color: #666;
+  position: relative;
+
+  &.active {
+    color: #333;
+    font-weight: bold;
+
+    &::after {
+      content: '';
+      position: absolute;
+      bottom: -5px;
+      left: 50%;
+      transform: translateX(-50%);
+      width: 20px;
+      height: 2px;
+      background-color: #333;
+    }
+  }
+}
+
+.tab-scroll-area {
+  background-color: #fff;
+  position: fixed;
+  top: 44px;
+  left: 0;
+  width: 100%;
+  z-index: 998;
+  border-bottom: 1px solid #f5f5f5;
+}
+
+.tab-scroll {
+  width: 100%;
+  white-space: nowrap;
+  height: 46px;
+}
+
+.tab-scroll-box {
+  display: flex;
+  height: 46px;
+  align-items: center;
+  padding: 0 10px;
+}
+
+.tab-scroll-item {
+  display: inline-block;
+  padding: 0 15px;
+  font-size: 14px;
+  color: #666;
+  height: 46px;
+  line-height: 46px;
+
+  &.active {
+    color: #333;
+    font-weight: bold;
+    position: relative;
+
+    &::after {
+      content: '';
+      position: absolute;
+      bottom: 0;
+      left: 50%;
+      transform: translateX(-50%);
+      width: 20px;
+      height: 2px;
+      background-color: #fa3534;
+    }
+  }
+}
+
+.content-area {
+  padding: 10px;
+  margin-top: 46px; // 为标签页留出空间
+}
+
+.waterfall-item {
+  margin-bottom: 10px;
+  background-color: #fff;
+  border-radius: 8px;
+  overflow: hidden;
+}
+</style>
+<style lang="scss">
+.card {
+  border-radius: 10rpx;
+  background-color: #FFFFFF;
+  font-size: 14px;
+  line-height: 20px;
+  color: rgb(51, 51, 51);
+  // border: 1rpx solid rgb(51, 51, 51);
+
+  .card-image {
+    border-radius: inherit;
+  }
+
+  .card-title {
+    padding: 10rpx;
+    // font-size: 14px;
+    font-weight: 500;
+
+  }
+
+  .card-footer {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 10rpx;
+  }
+
+  .user-info {
+    display: flex;
+    align-items: center;
+
+    .user-text {
+      font-size: 18rpx;
+      line-height: 14px;
+      margin-left: 10rpx;
+
+      .nickname {
+        font-weight: bold;
+        display: block;
+        color: #646464;
+      }
+
+      .date {
+        font-size: 12px;
+        color: #aaa;
+        margin-top: 10rpx;
+      }
+    }
+  }
+
+  .opera-info {
+    display: flex;
+    align-items: center;
+
+    text {
+      margin-left: 10rpx;
+      font-size: 12px;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/sub-pages/film-list/film-detail.vue b/sub-pages/film-list/film-detail.vue
index 14c12fe..ca47aba 100644
--- a/sub-pages/film-list/film-detail.vue
+++ b/sub-pages/film-list/film-detail.vue
@@ -86,22 +86,6 @@
             </view>
 
         </view>
-        <!-- <u-popup :show="commentShow" mode="bottom" @close="close" @open="open" closeOnClickOverlay="true">
-            <view class="comment-popup">
-                <u--textarea v-model="commentContent" placeholder="请输入内容" count focus="true"></u--textarea>
-                <view class="comment-btn-view">
-                    <view class="comment-btn-icon">
-                        <u-icon name=" " size="40" color="#999999" label="@" @click="close"></u-icon>
-                        <u-icon name="/static/common/smile.png" size="40" color="#999999" @click="close"></u-icon>
-                        <u-icon name="photo" size="40" color="#999999" @click="close"></u-icon>
-                        <u-icon name="plus-circle" size="40" color="#999999" @click="close"></u-icon>
-                    </view>
-                    <view class="comment-btn">
-                        <u-button type="error" shape="circle" text="发送" size="mini" disabled></u-button>
-                    </view>
-                </view>
-            </view>
-        </u-popup> -->
         <comment-popup v-model="commentShow" />
     </view>
 </template>
diff --git a/sub-pages/film-list/film-list.vue b/sub-pages/film-list/film-list.vue
index 741f665..6baa20d 100644
--- a/sub-pages/film-list/film-list.vue
+++ b/sub-pages/film-list/film-list.vue
@@ -53,7 +53,6 @@
 import WaterfallCol from '@/uni_modules/helang-waterfall/components/waterfall/waterfall-col';
 import WaterfallItem from '@/uni_modules/helang-waterfall/components/waterfall/waterfall-item';
 
-
 export default {
   components: {
     Waterfall,
@@ -133,12 +132,19 @@
     console.log("theme", uni.getStorageSync('theme'))
     const theme = uni.getStorageSync('theme') || 'light'
     this.theme = theme
-
-    this.$refs.helangWaterfall.render(this.items, true);
+  },
+  onShow() {
+    this.$nextTick(() => {
+      this.$refs.helangWaterfall?.render(this.items, true);
+    });
+  },
+  onUnload() {
+    if (this.$refs.helangWaterfall?.clear) {
+      this.$refs.helangWaterfall.clear();
+    }
   },
   methods: {
     onSearch(value) {
-      debugger;
       uni.showToast({
         title: `搜索:${value}`,
         icon: 'none'
@@ -158,12 +164,14 @@
 
     },
     onRenderHeight({ colIndex, height, reportHeightTimeChange }) {
+      console.log("height:", height)
       this.$refs.helangWaterfall.reportHeight({
         colIndex,
         height,
         reportHeightTimeChange
       })
     },
+
   }
 }
 </script>
diff --git a/sub-pages/film-list/film-official-detail.vue b/sub-pages/film-list/film-official-detail.vue
index 8531ea6..1561de8 100644
--- a/sub-pages/film-list/film-official-detail.vue
+++ b/sub-pages/film-list/film-official-detail.vue
@@ -1,66 +1,83 @@
 <template>
-  <view class="container">
+  <view>
+    <view class="container">
+      <view class="movie-title">
+        <view><u-text text="破.地狱" size="30"></u-text></view>
+        <view><u-text text="The Last Dance" size="20"></u-text></view>
+      </view>
 
-    <view class="movie-title">
-      <view><u-text text="破.地狱" size="30"></u-text></view>
-      <view><u-text text="The Last Dance" size="20"></u-text></view>
-    </view>
+      <scroll-view scroll-y class="content">
+        <view class="movie-info">
 
-    <scroll-view scroll-y class="content">
-      <view class="movie-info">
-
-        <image class="movie-poster" src="https://ai-public.mastergo.com/ai/img_res/1ef11f7a594da679d35cddf809a63ec7.jpg"
-          mode="aspectFill" />
-        <view class="movie-details">
-          <view class="scene-number">
-            <text>片场</text>
-            <text>17</text>
+          <image class="movie-poster"
+            src="https://ai-public.mastergo.com/ai/img_res/1ef11f7a594da679d35cddf809a63ec7.jpg" mode="aspectFill" />
+          <view class="movie-details">
+            <view class="scene-number">
+              <text>片场</text>
+              <text>17</text>
+            </view>
+            <view class="movie-tags">
+              <text class="tag">剧情/家庭</text>
+              <text class="tag">中国香港</text>
+              <text class="tag">2024</text>
+            </view>
+            <u-button text="more" size="normal" icon="play-right-fill" plain type="info"></u-button>
           </view>
-          <view class="movie-tags">
-            <text class="tag">剧情/家庭</text>
-            <text class="tag">中国香港</text>
-            <text class="tag">2024</text>
+        </view>
+
+        <view class="movie-desc">
+          <text class="desc-text">聚焦香港殡葬文化下的人际关系和生死观念,多数取景地都在殡仪服务扎堆的红磡。</text>
+          <text class="desc-text">主要拍摄的殡仪馆外景是万国殡仪馆,不过根据电影官方发布的制作花絮,殡仪馆内景大厅是另外搭建的。</text>
+          <text
+            class="desc-text">道生接手的"长生店"是位于九龙城福佬村道的百年老字号合昌殡仪,"Hello文"吃宵夜的地方在九龙湾的康乐茶居,火化延姐的地方在葵涌火葬场,甄小姐存户的东华义庄是香港目前唯一仍在运营的义庄。</text>
+        </view>
+
+        <view class="map-container">
+          <map style="width: 100%; height: 500rpx;" :latitude="latitude" :longitude="longitude" :markers="markers"
+            scale="16" show-location></map>
+        </view>
+        <view>
+          <u-tabs v-if="tabList.length" :list="tabList" :current="current" @change="onTabChange" @click="onTabChange"
+            lineColor="#2979ff" activeStyle="color: #2979ff">
+            <view slot="left" style="padding-left: 4px;" @tap="">
+              <u-icon name="/static/common/order.png" size="40" bold></u-icon>
+            </view>
+            <view slot="right" style="padding-left: 4px;" @tap="$u.toast('插槽被点击')">
+              <u-icon name="list" size="40" bold></u-icon>
+            </view>
+          </u-tabs>
+          <swiper class="swiper-box" :current="current" @change="onSwiperChange" duration="300">
+            <swiper-item v-for="(item, index) in tabList" :key="index" class="swiper-item">
+              <film-official-timeline></film-official-timeline>
+            </swiper-item>
+          </swiper>
+        </view>
+        <view class="comment">
+
+          <comment-item avatar="https://img.yzcdn.cn/vant/cat.jpeg" nickname="图墙精选" :isAuthor="true"
+            content="如果路线里全是常规景区,没一个特殊的点位,那就是普通团,除非他的住宿安排的很好。。要不然和普通团没任何区别,都是去景区挤,然后上车赶路" :images="urls2" date="2天前"
+            address="湖北" :likes="30" @reply="showCommentLayer" />
+        </view>
+      </scroll-view>
+
+      <view class="back-to-top" @click="scrollToTop">
+        <u-icon name="arrow-up" size="24" color="#666666" />
+      </view>
+
+      <view class="comment-box">
+
+        <view class="input-row">
+          <view class="comment-input" @click="showCommentLayer">
+            <u-text size="12px" text="说点什么......" margin="0rpx 0rpx 0rpx 20rpx" color="#B9B9B9"
+              confirmType="send"></u-text>
           </view>
-          <u-button text="more" size="normal" icon="play-right-fill" plain type="info"></u-button>
+          <u-icon name="heart" size="60" color="#B9B9B9" label="11"></u-icon>
+          <u-icon name="star" size="60" color="#B9B9B9" label="22"></u-icon>
+          <u-icon name="chat" size="60" color="#B9B9B9" label="33"></u-icon>
         </view>
       </view>
-
-      <view class="movie-desc">
-        <text class="desc-text">聚焦香港殡葬文化下的人际关系和生死观念,多数取景地都在殡仪服务扎堆的红磡。</text>
-        <text class="desc-text">主要拍摄的殡仪馆外景是万国殡仪馆,不过根据电影官方发布的制作花絮,殡仪馆内景大厅是另外搭建的。</text>
-        <text
-          class="desc-text">道生接手的"长生店"是位于九龙城福佬村道的百年老字号合昌殡仪,"Hello文"吃宵夜的地方在九龙湾的康乐茶居,火化延姐的地方在葵涌火葬场,甄小姐存户的东华义庄是香港目前唯一仍在运营的义庄。</text>
-      </view>
-
-      <view class="map-container">
-        <map style="width: 100%; height: 500rpx;" :latitude="latitude" :longitude="longitude" :markers="markers"
-          scale="16" show-location></map>
-      </view>
-      <view>
-        <u-tabs v-if="tabList.length" :list="tabList" :current="current" @change="onTabChange" @click="onTabChange"
-          lineColor="#2979ff" activeStyle="color: #2979ff">
-          <view slot="left" style="padding-left: 4px;" @tap="">
-            <u-icon name="/static/common/order.png" size="40" bold></u-icon>
-          </view>
-          <view slot="right" style="padding-left: 4px;" @tap="$u.toast('插槽被点击')">
-            <u-icon name="list" size="40" bold></u-icon>
-          </view>
-        </u-tabs>
-        <swiper class="swiper-box" :current="current" @change="onSwiperChange" duration="300">
-          <swiper-item v-for="(item, index) in tabList" :key="index" class="swiper-item">
-            <film-official-timeline></film-official-timeline>
-          </swiper-item>
-        </swiper>
-      </view>
-
-      <view class="comment-section">
-        <u-button class="comment-btn" type="primary" plain>我要发言</u-button>
-      </view>
-    </scroll-view>
-
-    <view class="back-to-top" @click="scrollToTop">
-      <u-icon name="arrow-up" size="24" color="#666666" />
     </view>
+    <comment-popup v-model="commentShow" />
   </view>
 </template>
 <script>
@@ -114,6 +131,8 @@
         { name: '距离' },
         { name: '城市' },
       ],
+
+      commentShow: false,
     };
   },
   methods: {
@@ -131,6 +150,9 @@
     },
     onSwiperChange(e) {
       this.current = e.detail.current; // 同步 tabs
+    },
+    showCommentLayer(e) {
+      this.commentShow = true
     },
   }
 };
@@ -270,4 +292,43 @@
     /* 允许滚动内容 */
   }
 }
+</style>
+<style lang="scss" scoped>
+.comment-box {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  padding: 20rpx 20rpx;
+  background-color: #fff;
+  box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
+  z-index: 999;
+  height: 100rpx;
+
+  .input-row {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    height: 80%;
+
+    .comment-input {
+      width: 300rpx;
+      background-color: #F4F4F6;
+      border-radius: 50rpx;
+      height: 60rpx;
+      display: flex;
+      align-items: center;
+    }
+  }
+
+  .flex-input {
+    flex: 1;
+    margin-right: 10rpx;
+  }
+}
+
+.comment{
+  margin: 10rpx;
+  margin-bottom: 180rpx;
+}
 </style>
\ No newline at end of file
diff --git a/sub-pages/mine/index copy 2.vue b/sub-pages/mine/index copy 2.vue
deleted file mode 100644
index e6a7c3d..0000000
--- a/sub-pages/mine/index copy 2.vue
+++ /dev/null
@@ -1,416 +0,0 @@
-<template>
-    <view class="page">
-        <view class="profile-section" :style="backgroundStyle">
-
-            <view class="top-bar">
-                <u-icon name="list" size="60" color="#D0E1E9" />
-                <view class="top-bar-right">
-                    <!-- <u-icon name="edit-pen" size="60" color="#ffffff" class="icon-margin" /> -->
-                    <u-sticky><u-icon name="share" size="60" color="#D0E1E9" /></u-sticky>
-                </view>
-            </view>
-
-            <view class="profile-content">
-
-                <view class="profile-header">
-                    <view class="avatar-container">
-                        <image class="avatar"
-                            src="https://ai-public.mastergo.com/ai/img_res/e8ae645c666c247b895b488e60b048f5.jpg"
-                            mode="aspectFill" />
-                        <view class="add-icon">
-                            <u-icon name="plus" size="20" color="#333" />
-                        </view>
-                    </view>
-                    <view class="user-info">
-                        <view class="username">小红薯 6786F040</view>
-                        <view class="user-id">小红书号:95619601810</view>
-                        <view class="location">IP 属地:江苏</view>
-                    </view>
-                </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">
-                            <text class="number">1</text>
-                            <text class="label">获赞与收藏</text>
-                        </view>
-                    </view>
-                    <view class="action-buttons">
-                        <u-button text="编辑资料" size="mini" type="info" plain hairline
-                            :custom-style="{ backgroundColor: 'transparent', borderColor: '#B1ABA9' }"></u-button>
-                        <u-icon name="setting" size="40"></u-icon>
-                    </view>
-                </view>
-            </view>
-            <scroll-view class="function-cards" scroll-x="true" show-scrollbar="false">
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">购物车</text>
-                        <text class="card-subtitle">查看推荐好物</text>
-                    </view>
-                </view>
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">创作灵感</text>
-                        <text class="card-subtitle">学创作找灵感</text>
-                    </view>
-                </view>
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">浏览记录</text>
-                        <text class="card-subtitle">看过的笔记</text>
-                    </view>
-                </view>
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">浏览记录</text>
-                        <text class="card-subtitle">看过的笔记</text>
-                    </view>
-                </view>
-            </scroll-view>
-        </view>
-
-       
-            <view class="tab-section">
-                <u-sticky>
-                <u-tabs :list="tabList" :current="current" @change="onTabChange" lineColor="#2979ff"
-                    activeStyle="color: #2979ff"></u-tabs>
-                </u-sticky>
-                <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>
-                            <u-button class="publish-btn" size="mini" type="warning" shape="circle">去发布</u-button>
-                        </view>
-                    </swiper-item>
-                </swiper>
-            </view>
-        
-
-        <common-footer flg="0"></common-footer>
-    </view>
-</template>
-<script>
-export default {
-    data() {
-        return {
-            backgroundUrl2: 'https://ai-public.mastergo.com/ai/img_res/25f5105167f00aff148acc9bb83aed54.jpg', // 可能是动态获取的图片 URL
-            backgroundUrl: '',
-            current: 0,
-            tabList: [
-                { name: '笔记' },
-                { name: '收藏' },
-                { name: '赞过' },
-            ],
-        }
-    },
-
-    computed: {
-        backgroundStyle() {
-            return this.backgroundUrl
-                ? `background: url(${this.backgroundUrl}) center center / cover no-repeat;`
-                : 'background-color: #1e1e1e;';
-        }
-    },
-    methods: {
-        getBackgroundStyle() {
-            if (this.backgroundUrl) {
-                return `background: url(${this.backgroundUrl}) center center / cover no-repeat;`;
-            } else {
-                return 'background-color: #f5f5f5;';
-            }
-        },
-        onTabChange(index) {
-            this.current = index; // 切换 swiper 面板
-        },
-        onSwiperChange(e) {
-            this.current = e.detail.current; // 同步 tabs
-        },
-    },
-}
-
-</script>
-
-<style>
-.page {
-  height: 100vh;
-  overflow-y: auto;
-}
-
-.top-bar {
-    position: relative;
-    z-index: 3;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 24rpx 32rpx;
-}
-
-.top-bar-right {
-    display: flex;
-    align-items: center;
-}
-
-.icon-margin {
-    margin-right: 32rpx;
-}
-
-.profile-section {
-    position: relative;
-    /* height: 680rpx; */
-}
-
-.bg-image {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    z-index: 1;
-}
-
-.profile-content {
-    position: relative;
-    z-index: 2;
-    padding: 30rpx;
-}
-
-.profile-header {
-    display: flex;
-    align-items: flex-start;
-    margin-bottom: 24rpx;
-}
-
-.avatar-container {
-    position: relative;
-    margin-right: 24rpx;
-}
-
-.avatar {
-    width: 120rpx;
-    height: 120rpx;
-    border-radius: 60rpx;
-    border: 2px solid #ffffff;
-}
-
-.add-icon {
-    position: absolute;
-    right: -8rpx;
-    bottom: -8rpx;
-    width: 40rpx;
-    height: 40rpx;
-    background-color: #FFE411;
-    border-radius: 20rpx;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-}
-
-.user-info {
-    flex: 1;
-}
-
-.username {
-    font-size: 30rpx;
-    color: #FCFFFE;
-    font-weight: bold;
-    margin-bottom: 8rpx;
-}
-
-.user-id,
-.location {
-    font-size: 26rpx;
-    color: #666666;
-    margin-bottom: 4rpx;
-}
-
-.edit-profile {
-    color: #999999;
-    font-size: 26rpx;
-    margin-bottom: 20rpx;
-}
-
-.stats {
-    display: flex;
-    /* margin-bottom: 20rpx; */
-    align-items: center;
-    justify-content: space-between;
-}
-
-.stat-row {
-    display: flex;
-}
-
-.stat-item {
-    margin-right: 48rpx;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-}
-
-.stat-item:last-child {
-    margin-right: auto;
-}
-
-.number {
-    font-size: 30rpx;
-    color: #A19B99;
-    font-weight: bold;
-    margin-bottom: 4rpx;
-}
-
-.label {
-    font-size: 24rpx;
-    color: #B1ABA9;
-}
-
-.action-buttons {
-    display: flex;
-    gap: 16rpx;
-}
-
-.edit-btn {
-    padding: 0 24rpx !important;
-    background-color: #f5f5f5 !important;
-    color: #333333 !important;
-    border: none !important;
-}
-
-.settings-btn {
-    width: 80rpx !important;
-    background-color: #f5f5f5 !important;
-    color: #333333 !important;
-    border: none !important;
-    padding: 0 !important;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-}
-
-.function-cards {
-    /* padding: 32rpx 0; */
-    white-space: nowrap;
-    overflow: auto;
-    padding-bottom: 20rpx;
-}
-
-.card {
-    display: inline-block;
-    width: 180rpx;
-    height: 80rpx;
-    margin-left: 20rpx;
-    background-color: rgba(60, 60, 60, 0.4);
-    /* 灰色 + 20% 透明度 */
-    border-radius: 16rpx;
-    padding: 10rpx;
-    box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
-}
-
-.card:last-child {
-    margin-right: 24rpx;
-}
-
-.card-content {
-    height: 100%;
-    display: flex;
-    flex-direction: column;
-    justify-content: space-between;
-}
-
-.card-title {
-    font-size: 30rpx;
-    color: #E7E1DF;
-    font-weight: bold;
-}
-
-.card-subtitle {
-    font-size: 20rpx;
-    color: #BEBBB8;
-}
-
-.tab-section {
-    padding: 0 32rpx;
-}
-
-.tab-header {
-    display: flex;
-    justify-content: space-between;
-    margin-bottom: 48rpx;
-}
-
-.tab {
-    position: relative;
-    padding: 16rpx 0;
-    display: flex;
-    align-items: center;
-}
-
-.tab.active::after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    left: 50%;
-    transform: translateX(-50%);
-    width: 48rpx;
-    height: 4rpx;
-    background-color: #333;
-    border-radius: 2rpx;
-}
-
-.tab-text {
-    font-size: 16px;
-    color: #333;
-    margin-right: 8rpx;
-}
-
-.tab-count {
-    font-size: 16px;
-    color: #999;
-}
-
-.empty-state {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    padding: 48rpx 0;
-    min-height: 600rpx;
-}
-
-.empty-icon {
-    width: 200rpx;
-    height: 200rpx;
-    margin-bottom: 24rpx;
-}
-
-.empty-text {
-    font-size: 14px;
-    color: #999;
-    /* margin-bottom: 24rpx; */
-}
-
-.publish-btn {
-    background-color: #ffe411 !important;
-    color: #333 !important;
-    border: none !important;
-    border-radius: 32rpx !important;
-    padding: 0 48rpx !important;
-}
-</style>
-<style lang="scss" scoped>
-.swiper-box {
-    // min-height: 600rpx;
-    /* 或 100vh,或具体 px */
-    height: 800px;
-}
-</style>
\ No newline at end of file
diff --git a/sub-pages/mine/index copy.vue b/sub-pages/mine/index copy.vue
deleted file mode 100644
index 11c2c89..0000000
--- a/sub-pages/mine/index copy.vue
+++ /dev/null
@@ -1,397 +0,0 @@
-<template>
-    <view class="page">
-        <view class="profile-section" :style="backgroundStyle">
-            <view class="top-bar">
-                <u-icon name="list" size="60" color="#D0E1E9" />
-                <view class="top-bar-right">
-                    <!-- <u-icon name="edit-pen" size="60" color="#ffffff" class="icon-margin" /> -->
-                    <u-icon name="share" size="60" color="#D0E1E9" />
-                </view>
-            </view>
-            <view class="profile-content">
-
-                <view class="profile-header">
-                    <view class="avatar-container">
-                        <image class="avatar"
-                            src="https://ai-public.mastergo.com/ai/img_res/e8ae645c666c247b895b488e60b048f5.jpg"
-                            mode="aspectFill" />
-                        <view class="add-icon">
-                            <u-icon name="plus" size="20" color="#333" />
-                        </view>
-                    </view>
-                    <view class="user-info">
-                        <view class="username">小红薯 6786F040</view>
-                        <view class="user-id">小红书号:95619601810</view>
-                        <view class="location">IP 属地:江苏</view>
-                    </view>
-                </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">
-                            <text class="number">1</text>
-                            <text class="label">获赞与收藏</text>
-                        </view>
-                    </view>
-                    <view class="action-buttons">
-                        <u-button text="编辑资料" size="mini" type="info" plain hairline
-                            :custom-style="{ backgroundColor: 'transparent', borderColor: '#B1ABA9' }"></u-button>
-                        <u-icon name="setting"></u-icon>
-                    </view>
-                </view>
-            </view>
-            <scroll-view class="function-cards" scroll-x="true" show-scrollbar="false">
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">购物车</text>
-                        <text class="card-subtitle">查看推荐好物</text>
-                    </view>
-                </view>
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">创作灵感</text>
-                        <text class="card-subtitle">学创作找灵感</text>
-                    </view>
-                </view>
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">浏览记录</text>
-                        <text class="card-subtitle">看过的笔记</text>
-                    </view>
-                </view>
-                <view class="card">
-                    <view class="card-content">
-                        <text class="card-title">浏览记录</text>
-                        <text class="card-subtitle">看过的笔记</text>
-                    </view>
-                </view>
-            </scroll-view>
-        </view>
-
-        <view class="tab-section">
-            <view class="tab-header">
-                <view class="tab active">
-                    <text class="tab-text">笔记</text>
-                    <text class="tab-count">0</text>
-                </view>
-                <view class="tab">
-                    <text class="tab-text">收藏</text>
-                    <text class="tab-count">0</text>
-                </view>
-                <view class="tab">
-                    <text class="tab-text">赞过</text>
-                    <text class="tab-count">0</text>
-                </view>
-            </view>
-
-            <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>
-                <u-button class="publish-btn" size="mini" type="warning" shape="circle">去发布</u-button>
-            </view>
-        </view>
-
-        <common-footer flg="0"></common-footer>
-    </view>
-</template>
-<script>
-export default {
-    data() {
-        return {
-            backgroundUrl2: 'https://ai-public.mastergo.com/ai/img_res/25f5105167f00aff148acc9bb83aed54.jpg', // 可能是动态获取的图片 URL
-            backgroundUrl: '',
-        }
-    },
-
-    computed: {
-        backgroundStyle() {
-            return this.backgroundUrl
-                ? `background: url(${this.backgroundUrl}) center center / cover no-repeat;`
-                : 'background-color: #1e1e1e;';
-        }
-    },
-    methods: {
-        getBackgroundStyle() {
-            if (this.backgroundUrl) {
-                return `background: url(${this.backgroundUrl}) center center / cover no-repeat;`;
-            } else {
-                return 'background-color: #f5f5f5;';
-            }
-        }
-    },
-}
-
-</script>
-
-<style>
-.page {
-    height: 100%;
-    /* background-color: #ffffff; */
-}
-
-.top-bar {
-    position: relative;
-    z-index: 3;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 24rpx 32rpx;
-}
-
-.top-bar-right {
-    display: flex;
-    align-items: center;
-}
-
-.icon-margin {
-    margin-right: 32rpx;
-}
-
-.profile-section {
-    position: relative;
-    height: 680rpx;
-}
-
-.bg-image {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    z-index: 1;
-}
-
-.profile-content {
-    position: relative;
-    z-index: 2;
-    padding: 30rpx;
-}
-
-.profile-header {
-    display: flex;
-    align-items: flex-start;
-    margin-bottom: 24rpx;
-}
-
-.avatar-container {
-    position: relative;
-    margin-right: 24rpx;
-}
-
-.avatar {
-    width: 120rpx;
-    height: 120rpx;
-    border-radius: 60rpx;
-    border: 2px solid #ffffff;
-}
-
-.add-icon {
-    position: absolute;
-    right: -8rpx;
-    bottom: -8rpx;
-    width: 40rpx;
-    height: 40rpx;
-    background-color: #FFE411;
-    border-radius: 20rpx;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-}
-
-.user-info {
-    flex: 1;
-}
-
-.username {
-    font-size: 30rpx;
-    color: #FCFFFE;
-    font-weight: bold;
-    margin-bottom: 8rpx;
-}
-
-.user-id,
-.location {
-    font-size: 26rpx;
-    color: #666666;
-    margin-bottom: 4rpx;
-}
-
-.edit-profile {
-    color: #999999;
-    font-size: 26rpx;
-    margin-bottom: 32rpx;
-}
-
-.stats {
-    display: flex;
-    margin-bottom: 32rpx;
-    align-items: center;
-    justify-content: space-between;
-}
-.stat-row{
-    display: flex;
-}
-
-.stat-item {
-    margin-right: 48rpx;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-}
-
-.stat-item:last-child {
-    margin-right: auto;
-}
-
-.number {
-    font-size: 30rpx;
-    color: #A19B99;
-    font-weight: bold;
-    margin-bottom: 4rpx;
-}
-
-.label {
-    font-size: 24rpx;
-    color: #B1ABA9;
-}
-
-.action-buttons {
-    display: flex;
-    gap: 16rpx;
-}
-
-.edit-btn {
-    padding: 0 24rpx !important;
-    background-color: #f5f5f5 !important;
-    color: #333333 !important;
-    border: none !important;
-}
-
-.settings-btn {
-    width: 80rpx !important;
-    background-color: #f5f5f5 !important;
-    color: #333333 !important;
-    border: none !important;
-    padding: 0 !important;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-}
-
-.function-cards {
-    /* padding: 32rpx 0; */
-    white-space: nowrap;
-    overflow: auto;
-}
-
-.card {
-    display: inline-block;
-    width: 180rpx;
-    height: 80rpx;
-    margin-left: 20rpx;
-    background-color: rgba(60, 60, 60, 0.4);
-    /* 灰色 + 20% 透明度 */
-    border-radius: 16rpx;
-    padding: 24rpx;
-    box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
-}
-
-.card:last-child {
-    margin-right: 24rpx;
-}
-
-.card-content {
-    height: 100%;
-    display: flex;
-    flex-direction: column;
-    justify-content: space-between;
-}
-
-.card-title {
-    font-size: 30rpx;
-    color: #E7E1DF;
-    font-weight: bold;
-}
-
-.card-subtitle {
-    font-size: 20rpx;
-    color: #BEBBB8;
-}
-
-.tab-section {
-    padding: 0 32rpx;
-}
-
-.tab-header {
-    display: flex;
-    justify-content: space-around;
-    margin-bottom: 48rpx;
-}
-
-.tab {
-    position: relative;
-    padding: 16rpx 0;
-    display: flex;
-    align-items: center;
-}
-
-.tab.active::after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    left: 50%;
-    transform: translateX(-50%);
-    width: 48rpx;
-    height: 4rpx;
-    background-color: #333;
-    border-radius: 2rpx;
-}
-
-.tab-text {
-    font-size: 16px;
-    color: #333;
-    margin-right: 8rpx;
-}
-
-.tab-count {
-    font-size: 16px;
-    color: #999;
-}
-
-.empty-state {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    padding: 48rpx 0;
-}
-
-.empty-icon {
-    width: 200rpx;
-    height: 200rpx;
-    margin-bottom: 24rpx;
-}
-
-.empty-text {
-    font-size: 14px;
-    color: #999;
-    margin-bottom: 24rpx;
-}
-
-.publish-btn {
-    background-color: #ffe411 !important;
-    color: #333 !important;
-    border: none !important;
-    border-radius: 32rpx !important;
-    padding: 0 48rpx !important;
-}
-</style>
\ No newline at end of file
diff --git a/sub-pages/mine/settings.vue b/sub-pages/mine/settings.vue
new file mode 100644
index 0000000..74cbb5f
--- /dev/null
+++ b/sub-pages/mine/settings.vue
@@ -0,0 +1,152 @@
+<template>
+  <view class="settings-page">
+    <!-- 设置列表 -->
+    <view class="section" v-for="(section, index) in menuList" :key="index">
+      <view class="cell-group">
+        <u-cell-group :border="false">
+          <u-cell v-for="(item, i) in section" :key="i" :title="item.title" :icon="item.icon" isLink :value="item.value"
+            :border="true" @click="onItemClick(item)">
+            <u-icon slot="icon" size="32" :name="item.icon"></u-icon>
+          </u-cell>
+        </u-cell-group>
+      </view>
+    </view>
+
+    <!-- 底部操作 -->
+    <view class="bottom-actions">
+      <u-cell-group :border="false" class="cell-group">
+        <u-cell @click="onItemClick('switch')" :border="true">
+          <template #title>
+            <view class="center-cell-text">切换账号</view>
+          </template>
+        </u-cell>
+
+        <u-cell @click="onItemClick('logout')" :border="false">
+          <template #title>
+            <view class="center-cell-text">退出登录</view>
+          </template>
+        </u-cell>
+      </u-cell-group>
+    </view>
+
+    <view class="portotal-actions">
+      <view class="action-row">
+        <u--text  size="20" :bold="true" text="《个人信息收集清单》"  color="#38516E" />
+        <u--text  size="20" :bold="true" text="《第三方信息共享清单》"  color="#38516E" />
+      </view>
+      <view class="action-row">
+        <u--text  size="20" :bold="true" text="《用户服务协议》" color="#38516E" />
+        <u--text  size="20" :bold="true" text="《用户隐私政策》" color="#38516E" />
+      </view>
+    </view>
+
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      menuList: [
+        [
+          { 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' }
+        ]
+      ]
+    };
+  },
+  methods: {
+    onBack() {
+      uni.navigateBack();
+    },
+    onItemClick(item) {
+      uni.showToast({
+        title: `点击了 ${item.title}`,
+        icon: 'none'
+      });
+    },
+    onSwitchAccount() {
+      uni.showToast({
+        title: '切换账号',
+        icon: 'none'
+      });
+    },
+    onLogout() {
+      uni.showModal({
+        title: '退出登录',
+        content: '确定要退出登录吗?',
+        success: (res) => {
+          if (res.confirm) {
+            uni.showToast({ title: '已退出登录', icon: 'success' });
+          }
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.settings-page {
+  min-height: 100vh;
+  margin: 10rpx;
+
+  .section {
+    margin-top: 20rpx;
+
+    .cell-group {
+      background-color: #fff;
+      border-radius: 10px;
+      overflow: hidden;
+    }
+  }
+
+  .bottom-actions {
+    margin-top: 30rpx;
+    background-color: #fff;
+    display: flex;
+    flex-direction: column;
+    gap: 20rpx;
+    border-radius: 10px;
+    overflow: hidden;
+  }
+
+  .center-cell-text {
+    width: 100%;
+    text-align: center;
+    font-size: 30rpx;
+    color: #333;
+  }
+
+  .portotal-actions {
+    margin-top: 30rpx;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 20rpx;
+    /* 每行之间间距 */
+  }
+
+  .action-row {
+    display: flex;
+    justify-content: center;
+    gap: 40rpx;
+    flex-wrap: nowrap;
+    white-space: nowrap;
+  }
+
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3