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