Просмотр исходного кода

Merge branch 'master' of http://39.105.58.247:3100/yidiandao/ydd_front

zhaoyun 2 месяцев назад
Родитель
Сommit
a64227767d

+ 1 - 0
mer_plat_admin/src/views/community/classification/index.vue

@@ -170,6 +170,7 @@ export default {
       this.getList(1);
     },
     handlerOpenEdit(isCreate, editDate) {
+      console.log(editDate)
       const _this = this;
       this.id = editDate ? editDate.id : 0;
       this.$modalParserFrom(

+ 17 - 6
mer_plat_admin/src/views/systemSetting/pcConfig/homeSettings/index.vue

@@ -15,7 +15,8 @@
         >
       </template>
       <!-- 首页banner-->
-      <template v-if="currentTab === '1'">
+      <!-- v-if="currentTab === '1'" -->
+      <template>
         <FromList :configObj="bannerListConfig"></FromList>
         <el-button v-hasPermi="['platform:pc:shopping:home:banner:save']" type="primary" @click="handleBannerSave">{{
           loadingBtn ? '提交中 ...' : '保存'
@@ -216,12 +217,16 @@ export default {
       }
     };
     return {
-      currentTab: '0',
+      currentTab: '',
       tabList: [
-        { value: '0', title: '首页广告' },
+        // { value: '0', title: '首页广告' },
         { value: '1', title: '首页banner' },
-        { value: '2', title: '首页推荐' },
-        { value: '3', title: '顶部菜单' },
+        // { value: '2', title: '首页推荐' },
+        // { value: '3', title: '顶部菜单' },
+        { value: '14', title: '表白墙banner' },
+        { value: '15', title: '游戏搭子banner' },
+        { value: '16', title: '二手交易banner' },
+        { value: '17', title: '代取快递banner' },
       ],
       drawer: false,
       fullscreenLoading: false,
@@ -258,11 +263,17 @@ export default {
     // if (this.id > 0) {
     //   this.getRecommendedInfo(this.id);
     // }
-    if (checkPermi(['platform:pc:shopping:home:banner:get'])) this.getPcHomeBanner();
+    if (checkPermi(['platform:pc:shopping:home:banner:get'])) this.currentTab = '1'; //this.getPcHomeBanner();
     if (checkPermi(['platform:pc:shopping:home:recommended:list'])) this.getList();
     if (checkPermi(['platform:pc:shopping:home:advertisement:get'])) this.getAdvertisement();
     if (checkPermi(['platform:pc:shopping:home:navigation:get'])) this.getPcHomeNavigation();
   },
+  watch: {
+    currentTab(newVal, oldVal) {
+      console.log('tab变化', newVal, oldVal)
+      this.getPcHomeBanner()
+    } 
+  },
   computed: {
     ...mapGetters(['merPlatProductClassify', 'productBrand']),
     isEdit() {

+ 8 - 0
mer_uniapp/api/discover.js

@@ -255,4 +255,12 @@ export function replyPlatformSwitchApi(){
 */
 export function replyDeleteApi(replyId){
   return request.post(`community/note/reply/delete/${replyId}`);
+}
+
+/**
+ * 逛逛内容评论删除
+ * 
+*/
+export function getReplyInfo(){
+  return request.get(`community/info`);
 }

+ 240 - 0
mer_uniapp/components/WaterfallsFlow/WaterfallsFlow-bak.vue

@@ -0,0 +1,240 @@
+<template>
+	<view class="wf-page">
+		<!--    left    -->
+		<view>
+			<view id="left" v-if="leftList.length">
+				<view v-for="(item,index) in leftList" :key="index" class="wf-item">
+					<discoverFlowItem :items="item" v-if="fromType==1" :fromTo="fromTo" @changeLikeToggle="(item)=>changeLikeToggle(false, index, item)" ></discoverFlowItem>
+					<WaterfallsFlowItem v-else :item="item" :isStore="isStore" :type="type"/>
+				</view>
+			</view>
+		</view>
+		<!--    right    -->
+		<view>
+			<view id="right" v-if="rightList.length">
+				<view v-for="(item,index) in rightList" :key="index" class="wf-item">
+					<discoverFlowItem :items="item" v-if="fromType==1" :fromTo="fromTo" @changeLikeToggle="(item)=>changeLikeToggle(true, index, item)" ></discoverFlowItem>
+					<WaterfallsFlowItem v-else :item="item" :isStore="isStore" :type="type"/>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	// +----------------------------------------------------------------------
+	// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+	// +----------------------------------------------------------------------
+	// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+	// +----------------------------------------------------------------------
+	// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+	// +----------------------------------------------------------------------
+	// | Author: CRMEB Team <admin@crmeb.com>
+	// +----------------------------------------------------------------------
+	import WaterfallsFlowItem from '../WaterfallsFlowItem/WaterfallsFlowItem.vue'
+	import discoverFlowItem from '@/components/discoverFlowItem/discoverFlowItem.vue'
+	import {
+		mapGetters
+	} from "vuex";
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import useActivity from "@/mixins/useActivity";
+	
+	export default {
+		mixins: [useActivity],
+		components: {
+			WaterfallsFlowItem,
+			discoverFlowItem
+		},
+		computed: {
+				...mapGetters(['isLogin']),
+			},
+		props: {
+			// 区分从发现列表、我的主页作品进去,点进去内容列表,home从我的主页点进去
+			fromTo: {
+				type: String,
+				default: ''
+			},
+			// 区分瀑布流使用子组件,1逛逛瀑布流
+			fromType: {
+				type: Number || String,
+				default: 0
+			},
+			// 瀑布流列表
+			wfList: {
+				type: Array || String,
+				require: true
+			},
+			updateNum: {
+				type: Number,
+				default: 10
+			},
+			type: {
+				type: Number,
+				default: 0
+			},
+			isStore: {
+				type: Number,
+				default: 0
+			}
+		},
+		data() {
+			return {
+				allList: [], // 全部列表
+				leftList: [], // 左边列表
+				rightList: [], // 右边列表
+				mark: 0, // 列表标记
+				boxHeight: [], // 下标0和1分别为左列和右列高度
+			};
+		},
+		watch: {
+			// 监听列表数据变化
+			wfList: {
+				handler(nVal, oVal) {
+					// 如果数据为空或新的列表数据少于旧的列表数据(通常为下拉刷新或切换排序或使用筛选器),初始化变量
+					if (!this.wfList.length ||
+						(this.wfList.length === this.updateNum && this.wfList.length <= this.allList.length)) {
+						this.allList = [];
+						this.leftList = [];
+						this.rightList = [];
+						this.boxHeight = [];
+						this.mark = 0;
+					}
+
+					// 如果列表有值,调用waterfall方法
+					if (this.wfList.length) {
+						this.allList = this.wfList;
+						this.leftList = [];
+						this.rightList = [];
+						this.boxHeight = [];
+						this.allList.forEach((v, i) => {
+							if (this.allList.length < 3 || (this.allList.length <= 7 && this.allList.length - i >
+									1) || (this.allList.length > 7 && this.allList.length - i > 2)) {
+								if (i % 2) {
+									this.rightList.push(v);
+								} else {
+									this.leftList.push(v);
+								}
+							}
+						});
+						if (this.allList.length < 3) {
+							this.mark = this.allList.length + 1;
+						} else if (this.allList.length <= 7) {
+							this.mark = this.allList.length - 1;
+						} else {
+							this.mark = this.allList.length - 2;
+						}
+						if (this.mark < this.allList.length) {
+							this.waterFall()
+						}
+					}
+				},
+				immediate: true,
+				deep: true
+			},
+			mounted() {},
+
+			// 监听标记,当标记发生变化,则执行下一个item排序
+			mark() {
+				const len = this.allList.length;
+				if (this.mark < len && this.mark !== 0 && this.boxHeight.length) {
+					this.waterFall();
+				}
+			}
+		},
+		methods: {
+			// 点赞
+			changeLikeToggle(type, index) {
+				if (this.isLogin == true) {
+					if (type) {
+						this.handleLikeToggle(this.rightList[index])
+					} else {
+						this.handleLikeToggle(this.leftList[index])
+					}
+				} else {
+					toLogin()
+				}
+			},
+			// 瀑布流排序
+			waterFall() {
+				const i = this.mark;
+				if (i == 0) {
+					// 初始化,从左边开始插入
+					this.leftList.push(this.allList[i]);
+					// 更新左边列表高度
+					this.getViewHeight(0);
+				} else if (i == 1) {
+					// 第二个item插入,默认为右边插入
+					this.rightList.push(this.allList[i]);
+					// 更新右边列表高度
+					this.getViewHeight(1);
+				} else {
+					// 根据左右列表高度判断下一个item应该插入哪边
+					if (!this.boxHeight.length) {
+						this.rightList.length < this.leftList.length ?
+							this.rightList.push(this.allList[i]) :
+							this.leftList.push(this.allList[i]);
+					} else {
+						const leftOrRight = this.boxHeight[0] > this.boxHeight[1] ? 1 : 0;
+						if (leftOrRight) {
+							this.rightList.push(this.allList[i])
+						} else {
+							this.leftList.push(this.allList[i])
+						}
+					}
+					// 更新插入列表高度
+					this.getViewHeight();
+				}
+			},
+			// 获取列表高度
+			getViewHeight() {
+				// 使用nextTick,确保页面更新结束后,再请求高度
+				this.$nextTick(() => {
+					setTimeout(() => {
+						uni.createSelectorQuery().in(this).select('#right').boundingClientRect(res => {
+							res ? this.boxHeight[1] = res.height : '';
+							uni.createSelectorQuery().in(this).select('#left').boundingClientRect(
+								res => {
+									res ? this.boxHeight[0] = res.height : '';
+									this.mark = this.mark + 1;
+								}).exec();
+						}).exec();
+					}, 100)
+				})
+			},
+			// item点击
+			itemTap(item) {
+				this.$emit('itemTap', item)
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	$page-padding: 12px;
+	$grid-gap: 24rpx;
+
+	.wf-page {
+		display: grid;
+		grid-template-columns: 1fr 1fr;
+		grid-gap: $grid-gap;
+		background-color: #f5f5f5;
+	}
+
+	.wf-item {
+		width: calc((100vw - 2 * #{$page-padding} - #{$grid-gap}) / 2);
+		padding-bottom: $grid-gap;
+		//margin-bottom: 20rpx;
+	}
+
+	.wf-page1 .wf-item {
+		background-color: #fff;
+		border-radius: 20rpx;
+		padding-bottom: 0;
+	}
+
+	.wf-item-page {
+		padding-bottom: 20rpx;
+	}
+</style>

+ 6 - 6
mer_uniapp/components/WaterfallsFlow/WaterfallsFlow.vue

@@ -1,23 +1,23 @@
 <template>
-	<view class="wf-page">
+	<view>
 		<!--    left    -->
 		<view>
-			<view id="left" v-if="leftList.length">
-				<view v-for="(item,index) in leftList" :key="index" class="wf-item">
+			<view id="left" v-if="allList.length">
+				<view v-for="(item,index) in allList" :key="index" class="wf-item">
 					<discoverFlowItem :items="item" v-if="fromType==1" :fromTo="fromTo" @changeLikeToggle="(item)=>changeLikeToggle(false, index, item)" ></discoverFlowItem>
 					<WaterfallsFlowItem v-else :item="item" :isStore="isStore" :type="type"/>
 				</view>
 			</view>
 		</view>
 		<!--    right    -->
-		<view>
+<!-- 		<view>
 			<view id="right" v-if="rightList.length">
 				<view v-for="(item,index) in rightList" :key="index" class="wf-item">
 					<discoverFlowItem :items="item" v-if="fromType==1" :fromTo="fromTo" @changeLikeToggle="(item)=>changeLikeToggle(true, index, item)" ></discoverFlowItem>
 					<WaterfallsFlowItem v-else :item="item" :isStore="isStore" :type="type"/>
 				</view>
 			</view>
-		</view>
+		</view> -->
 	</view>
 </template>
 
@@ -223,7 +223,7 @@
 	}
 
 	.wf-item {
-		width: calc((100vw - 2 * #{$page-padding} - #{$grid-gap}) / 2);
+		// width: calc((100vw - 2 * #{$page-padding} - #{$grid-gap}) / 2);
 		padding-bottom: $grid-gap;
 		//margin-bottom: 20rpx;
 	}

+ 247 - 0
mer_uniapp/components/discoverFlowItem/discoverFlowItem-bak.vue

@@ -0,0 +1,247 @@
+<template>
+	<view :data-theme="theme">
+		<view @click="goDetail(items)" class="wf-page2">
+			<view class='pictrue skeleton-rect'>
+				<easy-loadimage mode="widthFix" :image-src="items.cover" :radius="8"></easy-loadimage>
+				<view class="discover_video_icon" v-if="items.type == 2">
+					<text class="iconfont icon-24gf-play"></text>
+				</view>
+				<!-- 审核状态:0-待审核,1-审核通过,2-审核失败,3-平台关闭 -->
+				<view class="approval_status" v-if="items.auditStatus != 1 && uid == items.authorId">
+					<view v-if="items.auditStatus == 2" class="approval_title">审核未通过</view>
+					<view v-if="items.auditStatus == 3" class="approval_title">平台关闭</view>
+					<view v-if="items.auditStatus == 0" class="approval_title">正在审核</view>
+					<text v-if="items.auditStatus == 2 || items.auditStatus == 3" class="approval_info">查看未通过原因</text>
+					<text v-if="items.auditStatus == 0" class="approval_info">通过后将展示在列表</text>
+				</view>
+			</view>
+			<view class='text'>
+				<view v-if="items.title" class='name skeleton-rect mt-24'>
+					<text class="text_name line2">
+						{{items.title}}
+					</text>
+				</view>
+				<view class="count acea-row skeleton-rect">
+					<view class="author acea-row">
+						<image class="image"
+							:src="items.authorAvatar ? items.authorAvatar : urlDomain+'crmebimage/presets/morenT.png'"
+							mode="widthFix"></image>
+						<text class="author_name line1"> {{items.authorName}}</text>
+					</view>
+					<view class="like" @click.stop="likeToggle(items)">
+
+						<view class="like_count">
+							<text class="iconfont" :class="items.userIsLike ? 'icon-shoucang1' : 'icon-dianzan'"></text>
+							<text
+								class="collect">{{items.likeNum ? items.likeNum < 10000 ? items.likeNum : (items.likeNum / 10000).toFixed(2) + 'w' : '' }}</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+<script>
+	// +----------------------------------------------------------------------
+	// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+	// +----------------------------------------------------------------------
+	// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+	// +----------------------------------------------------------------------
+	// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+	// +----------------------------------------------------------------------
+	// | Author: CRMEB Team <admin@crmeb.com>
+	// +----------------------------------------------------------------------	
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import {
+		discoverNoteLike
+	} from '@/libs/follow.js';
+	import easyLoadimage from '@/components/base/easy-loadimage.vue'
+	import {
+		mapGetters
+	} from "vuex";
+	let app = getApp();
+	export default {
+		components: {
+			easyLoadimage
+		},
+		computed: {
+			...mapGetters(['uid', 'isLogin'])
+		},
+		props: {
+			// 区分从发现列表、我的主页作品进去,点进去内容列表,home从我的主页点进去
+			fromTo: {
+				type: String,
+				default: ''
+			},
+			items: {
+				type: Object,
+				default: {}
+			},
+			type: {
+				type: Number,
+				default: 0
+			},
+			tab: {
+				type: Number,
+				default: 1
+			}
+		},
+		data() {
+			return {
+				urlDomain: this.$Cache.get("imgHost"),
+				theme: app.globalData.theme
+			};
+		},
+		// 滚动监听
+		onPageScroll(e) {
+			// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
+			uni.$emit('scroll');
+		},
+		methods: {
+			//点赞
+			likeToggle(item) {
+				this.$emit('changeLikeToggle',item)
+			},
+			goDetail(item) {
+				if (item.type == 1) {
+					uni.navigateTo({
+						url: `/pages/discover/discover_details/index?noteId=${item.id}`
+					});
+				} else {
+					uni.navigateTo({
+						//#ifdef APP
+						url: `/pages/discover/discover_video/appVideo/index?noteId=${item.id}&fromTo=${this.fromTo}&sd=${this.uid}`
+						//#endif
+						//#ifndef APP
+						url: `/pages/discover/discover_video/routineVideo/index?noteId=${item.id}&fromTo=${this.fromTo}&sd=${this.uid}`
+						//#endif
+
+					});
+				}
+			}
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.pictrue {
+		max-height: 580rpx;
+		overflow-y: hidden;
+		border-radius: 16rpx;
+		position: relative;
+
+		.plant-show {
+			width: 42rpx;
+			height: 42rpx;
+			border-radius: 100%;
+			background: rgba(0, 0, 0, .5);
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			position: absolute;
+			top: 10rpx;
+			left: 10rpx;
+
+			.iconfont {
+				font-size: 20rpx;
+				color: #fff;
+
+			}
+		}
+	}
+
+	.loadfail-img {
+		width: 100%;
+		height: 345rpx;
+	}
+
+	.text {
+		padding-bottom: 6rpx;
+		width: 345rpx;
+
+		.name {
+			padding: 0 20rpx;
+			color: #333333;
+			font-size: 28rpx;
+			font-weight: bold;
+		}
+
+		.count {
+			padding: 0 20rpx;
+			margin-top: 20rpx;
+			justify-content: space-between;
+
+			.author {
+				align-items: center;
+			}
+
+			.author_name {
+				margin-left: 10rpx;
+				max-width: 120rpx;
+				font-size: 24rpx;
+				color: #333333;
+				max-width: 180rpx;
+			}
+
+			.author_time {
+				color: #666666;
+			}
+
+			.like {
+				font-size: 24rpx;
+				color: #999999;
+				display: flex;
+
+				.like_count {
+					display: flex;
+					align-items: center;
+				}
+
+				.iconfont {
+					font-size: 30rpx;
+				}
+
+				.icon-shoucang1 {
+					@include main_color(theme);
+				}
+
+				.collect {
+					font-size: 24rpx;
+					margin-left: 5rpx;
+				}
+			}
+		}
+	}
+
+	.wf-page2 .author .image,
+	.wf-page2 .author uni-image {
+		width: 46rpx !important;
+		height: 46rpx !important;
+		border-radius: 100%;
+	}
+
+	.approval_status {
+		width: 100%;
+		height: 100%;
+		background: rgba(0, 0, 0, .4);
+		position: absolute;
+		top: 0;
+		left: 0;
+		border-radius: 16rpx;
+		color: #fff;
+		text-align: center;
+		z-index: 5;
+
+		.approval_title {
+			font-size: 28rpx;
+			margin-top: 135rpx;
+			font-weight: bold;
+		}
+
+		.approval_info {
+			font-size: 24rpx;
+			margin-top: 24rpx;
+		}
+	}
+</style>

+ 38 - 10
mer_uniapp/components/discoverFlowItem/discoverFlowItem.vue

@@ -1,6 +1,19 @@
 <template>
 	<view :data-theme="theme">
 		<view @click="goDetail(items)" class="wf-page2">
+			<view class="flex-y-center mb-20">
+				<image class="type-image mr-20" :src="items.icon" mode=""></image>
+				<view>
+					<view class="info-dzi mb-10 fs-24">{{items.authorName}}<text class="ml-14 mr-14">·</text>北京大学</view>
+					<view class="info-xzi">
+						<text>{{items.id}}楼</text>
+						<text>3-23 13:22:04</text>
+					</view>
+				</view>
+			</view>
+			<view class="info-dzi f-s-22 f-w-300 mb-20">
+				{{items.content || ''}}
+			</view>
 			<view class='pictrue skeleton-rect'>
 				<easy-loadimage mode="widthFix" :image-src="items.cover" :radius="8"></easy-loadimage>
 				<view class="discover_video_icon" v-if="items.type == 2">
@@ -16,24 +29,22 @@
 				</view>
 			</view>
 			<view class='text'>
-				<view v-if="items.title" class='name skeleton-rect mt-24'>
+				<!-- <view v-if="items.title" class='name skeleton-rect mt-24'>
 					<text class="text_name line2">
 						{{items.title}}
 					</text>
-				</view>
+				</view> -->
 				<view class="count acea-row skeleton-rect">
-					<view class="author acea-row">
-						<image class="image"
-							:src="items.authorAvatar ? items.authorAvatar : urlDomain+'crmebimage/presets/morenT.png'"
-							mode="widthFix"></image>
+					<!-- <view class="author acea-row">
+						<image class="image" :src="items.authorAvatar ? items.authorAvatar : urlDomain+'crmebimage/presets/morenT.png'"
+						 mode="widthFix"></image>
 						<text class="author_name line1"> {{items.authorName}}</text>
-					</view>
+					</view> -->
 					<view class="like" @click.stop="likeToggle(items)">
 
 						<view class="like_count">
 							<text class="iconfont" :class="items.userIsLike ? 'icon-shoucang1' : 'icon-dianzan'"></text>
-							<text
-								class="collect">{{items.likeNum ? items.likeNum < 10000 ? items.likeNum : (items.likeNum / 10000).toFixed(2) + 'w' : '' }}</text>
+							<text class="collect">{{items.likeNum ? items.likeNum < 10000 ? items.likeNum : (items.likeNum / 10000).toFixed(2) + 'w' : '' }}</text>
 						</view>
 					</view>
 				</view>
@@ -102,7 +113,7 @@
 		methods: {
 			//点赞
 			likeToggle(item) {
-				this.$emit('changeLikeToggle',item)
+				this.$emit('changeLikeToggle', item)
 			},
 			goDetail(item) {
 				if (item.type == 1) {
@@ -244,4 +255,21 @@
 			margin-top: 24rpx;
 		}
 	}
+	
+	.info-xzi {
+		font-weight: 400;
+		font-size: 19rpx;
+		color: #999999;
+	}
+	
+	.info-dzi {
+		font-weight: 500;
+		font-size: 23rpx;
+		color: #141414;
+	}
+	
+	.type-image {
+		width: 58rpx;
+		height: 58rpx;
+	}
 </style>

+ 9 - 1
mer_uniapp/pages.json

@@ -602,6 +602,13 @@
 					"navigationStyle": "custom",
 					"enablePullDownRefresh": false
 				}
+			},{
+				"path": "wall_details_info/index",
+				"style": {
+					"navigationBarTitleText": "详情信息",
+					"navigationStyle": "custom",
+					"enablePullDownRefresh": false
+				}
 			}]
 		},
 		{
@@ -1301,7 +1308,8 @@
 						"app-plus": {
 							// #ifdef APP-PLUS
 							"titleNView": {
-								"type": "default"
+								"type": "default",
+								"backgroundColor": "#fff"
 							}
 							// #endif
 						}

+ 94 - 1
mer_uniapp/pages/confession_wall/components/wall_info.vue

@@ -1,8 +1,101 @@
 <template>
+	<view class="container" style="margin: 10rpx 0;">
+		<view @tap="onDetails">
+			<view class="flex-y-center mb-20">
+				<image class="type-image mr-20" :src="`/static/img/ic-wall-type-${itemInfo.type}.png`" mode=""></image>
+				<view>
+					<view class="info-dzi mb-10 fs-24">Lalala·北京大学</view>
+					<view class="info-xzi">
+						<text>98楼</text>
+						<text>3-23 13:22:04</text>
+					</view>
+				</view>
+			</view>
+			<view class="info-dzi f-s-22 f-w-300 mb-20">
+				有没有一起玩吃鸡手游的🙋🏻‍♀️🙋🏻‍♀️,我是新手得多多包涵,找个有耐心,不嫌我菜的温柔男生。
+			</view>
+		</view>
+		<view class="flex-y-center">
+			<view @tap="onDetails">
+				<text class='iconfont icon-dianzan' style="font-size: 24rpx;margin-right: 10rpx;"></text>
+				<text class="info-xzi f-s-22">124</text>
+			</view>
+			<view @tap="onLikes" class="ml-38">
+				<text class='iconfont icon-dizhixinxi ' style="font-size: 24rpx;margin-right: 10rpx;"></text>
+				<text class="info-xzi f-s-22">16</text>
+			</view>
+		</view>
+		<wall-reply ref="replyRef"></wall-reply>
+	</view>
 </template>
 
 <script>
+	import wallReply from './wall_reply.vue'
+	let app = getApp();
+	export default {
+		components: {
+			wallReply
+		},
+		props: {
+			itemInfo: {
+				type: Object,
+				default: {}
+			},
+			onUrl: {
+				type: Boolean,
+				default: true
+			}
+		},
+		data() {
+			return {}
+		},
+		onLoad(options) {},
+		onShow() {
+
+		},
+		methods: {
+			onDetails() {
+				if (this.onUrl) {
+					uni.navigateTo({
+						url: `/pages/confession_wall/wall_details_info/index`
+					})
+				} else {
+					this.$refs.replyRef.visible = true; // 调用子组件的方法显示对话框
+				}
+			},
+			onLikes() {
+				console.log('点赞')
+			}
+		},
+		mounted() {
+
+		},
+	}
 </script>
 
-<style>
+<style scoped lang="scss">
+	.container {
+		overflow: hidden;
+		position: relative;
+		background-color: #fff;
+		border-radius: 23rpx;
+		padding: 20rpx;
+	}
+
+	.info-xzi {
+		font-weight: 400;
+		font-size: 19rpx;
+		color: #999999;
+	}
+
+	.info-dzi {
+		font-weight: 500;
+		font-size: 23rpx;
+		color: #141414;
+	}
+
+	.type-image {
+		width: 58rpx;
+		height: 58rpx;
+	}
 </style>

+ 109 - 0
mer_uniapp/pages/confession_wall/components/wall_reply.vue

@@ -0,0 +1,109 @@
+<template>
+	<view class="dialog-overlay" v-if="visible" @click="close" :style="{top: navH + 'rpx'}">
+		<view class="dialog-content" @click.stop :style="{top: navH + 'rpx'}">
+			<view class="uni-textarea">
+				<textarea class="text-reply pl-10 pt-10 mb-20" placeholder="我来评论" />
+			</view>
+			<input class="input-reply flex-y-center pl-10 mb-20" placeholder="昵称" />
+			<view class="flex-center">
+				<button class="bg-color pt-20 pb-20" @click="close">保存</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		mapGetters
+	} from "vuex";
+	export default {
+		data() {
+			return {
+				visible: false,
+				navH: '',
+			}
+		},
+		computed: mapGetters(['globalData']),
+		created() {
+			// #ifdef MP || APP-PLUS
+			// 获取导航高度;
+			this.navH = this.globalData.navHeight;
+			// #endif
+			// #ifdef H5
+			this.navH = 80;
+			// #endif
+		},
+		methods: {
+			close() {
+				this.$emit('update:visible', false);
+				this.visible = false
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.dialog-overlay {
+		position: fixed;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		background-color: rgba(0, 0, 0, 0.5);
+		overflow: hidden;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		animation: fadeIn 0.5s;
+		z-index: 90;
+	}
+
+	.dialog-content {
+		position: fixed;
+		background-color: white;
+		border-radius: 8px;
+		padding: 20px;
+		width: 100%;
+		animation: slideDown 0.5s;
+	}
+
+	@keyframes slideDown {
+		from {
+			transform: translateY(-100%);
+		}
+
+		to {
+			transform: translateY(0);
+		}
+	}
+
+	@keyframes fadeIn {
+		from {
+			opacity: 0;
+		}
+
+		to {
+			opacity: 1;
+		}
+	}
+	
+	.bg-color {
+		background-color: $bg-color-primary;
+		border-radius: 40rpx;
+		width: 70%;
+		color: #fff;
+	}
+	
+	.text-reply {
+		background-color: #F8F8FA;
+		width: 100%;
+		border-radius: 10rpx;
+		box-sizing: border-box;
+	}
+	
+	.input-reply {
+		height: 70rpx;
+		background-color: #F8F8FA;
+		border-radius: 10rpx;
+	}
+</style>

Разница между файлами не показана из-за своего большого размера
+ 812 - 222
mer_uniapp/pages/confession_wall/home/index.vue


+ 232 - 0
mer_uniapp/pages/confession_wall/wall_details_info/index.vue

@@ -0,0 +1,232 @@
+<template>
+	<view class="flex-col container" :style="{height: winHeight + 'px'}">
+		<view class="cart_nav">
+			<nav-bar iconColor='#fff' ref="navBarRef" navTitle="表白墙" backgroundColor="#FF6702" :isBackgroundColor="false">
+			</nav-bar>
+		</view>
+		<wall-info :itemInfo="{type: 3}" :onUrl="false"></wall-info>
+		<view class='newsList bg--w111-fff flex-col' style="flex: 1;overflow: hidden;">
+			<view class="flex-center flex-col noCommodity" v-if="noDataTip">
+				<view class='pictrue'>
+					<image :src="urlDomain+'crmebimage/presets/noSearch.png'"></image>
+				</view>
+				<text class="text-ccc">{{noDataTip}}</text>
+			</view>
+			<scroll-view class="bg--w111-fff pt-10 pb-10 pl-32" scroll-x style="white-space: nowrap; vertical-align: middle;border-top-right-radius: 23rpx;"
+			 show-scrollbar="false">
+				<view class='flex-y-center'>
+					<text class='wall-nav' :class='active==1 ? "wall-nav-on": ""' @click="tabSelect(1)">
+						<text>全部回复</text>
+					</text>
+					<text class='wall-nav' :class='active==2 ? "wall-nav-on": ""' @click="tabSelect(2)">
+						<text>只看楼主</text>
+					</text>
+				</view>
+			</scroll-view>
+			<scroll-view scroll-y scroll-with-animation @scrolltolower="onScrollBottom" style="flex: 1;">
+				<view class="flex-y-center pl-30 pr-30 mt-20 mb-20" v-for="(item, index) in wallData" :key="index">
+					<image class="w-30 h-30" style="position: relative;bottom: 30rpx;" :src="`/static/img/ic-wall-type-${item.type}.png`"
+					 mode=""></image>
+					<view class="flex-1 ml-20">
+						<view class="flex-between-center">
+							<view class="info-dzi fs-24">Lalala·北京大学</view>
+							<view class="flex-center">
+								<text class='iconfont icon-dianzan' style="font-size: 24rpx;margin-right: 10rpx;"></text>
+								<text class="info-xzi f-s-22">16</text>
+							</view>
+						</view>
+						<view class="info-dzi mt-10 mb-10">评论评论评论评论评论</view>
+						<view @tap="openReply"><text class="info-xzi fs-24">05-17 16:20 </text><text class="fw-bold ml-14">回复</text></view>
+					</view>
+				</view>
+				<view class='loadingicon flex-center' :hidden='!loading'>
+					<text class='loading iconfont icon-jiazai' style="width: auto;"></text>加载更多
+				</view>
+				<view class="flex-center no-data-tip" v-if="loadTitle">{{loadTitle}}</view>
+			</scroll-view>
+		</view>
+		<wall-reply ref="replyRef"></wall-reply>
+	</view>
+</template>
+
+<script>
+	// +----------------------------------------------------------------------
+	// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+	// +----------------------------------------------------------------------
+	// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+	// +----------------------------------------------------------------------
+	// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+	// +----------------------------------------------------------------------
+	// | Author: CRMEB Team <admin@crmeb.com>
+	// +----------------------------------------------------------------------
+	import navBar from '@/components/navBar';
+	import {
+		getExpressOrderList
+	} from '@/api/fastMail.js';
+	import wallInfo from '../components/wall_info.vue'
+	import wallReply from '../components/wall_reply.vue'
+	let app = getApp();
+	export default {
+		components: {
+			navBar,
+			wallInfo,
+			wallReply
+		},
+		data() {
+			return {
+				wallTitleId: 2,
+				wallTypeId: 1,
+				wallTypeData: [{
+						id: 0,
+						name: '全部'
+					},
+					{
+						id: 1,
+						name: '表白'
+					},
+					{
+						id: 2,
+						name: '心愿'
+					},
+					{
+						id: 3,
+						name: '吐槽'
+					},
+					{
+						id: 4,
+						name: '签到'
+					},
+				],
+				bannerList: [{
+						id: 1
+					},
+					{
+						id: 2
+					}
+				],
+				wallHeadline: [{
+						title: '温馨提示,请注意保护好自身隐私,面基需要'
+					},
+					{
+						title: '%%%温馨提示,请注意保护好自身隐私,面基需要'
+					},
+				],
+				urlDomain: this.$Cache.get("imgHost"),
+				winHeight: 0,
+				isNodes: 0, //控制什么时候开始抓取元素节点,只要数值改变就重新抓取
+				autoplay: true,
+				active: 1,
+				page: 1,
+				limit: 10,
+				scrollLeft: 0,
+				wallData: [{
+						id: 1,
+						type: 1
+					},
+					{
+						id: 2,
+						type: 2
+					},
+					{
+						id: 3,
+						type: 1
+					},
+				],
+				loadTitle: '',
+				loading: false,
+				noDataTip: ''
+			};
+		},
+		onLoad() {
+			let that = this;
+			uni.getSystemInfo({
+				success: function(res) {
+					that.winHeight = res.windowHeight
+				},
+			});
+			// this.getPreExpressApi()
+		},
+		methods: {
+			onWallTitle(index) {
+				if (this.wallTitleId == index) return
+				this.wallTitleId = index
+			},
+			onWallType(id) {
+				if (this.wallTypeId == id) return
+				this.wallTypeId = id
+			},
+			tabSelect(active) {
+				if (this.active == active) return
+				this.active = active;
+			},
+			openReply() {
+				this.$refs.replyRef.visible = true; // 调用子组件的方法显示对话框
+			},
+			getPreExpressApi() {
+				this.loading = true
+				const params = {
+					limit: this.limit,
+					page: this.page,
+					status: this.active
+				}
+				getExpressOrderList(params).then(res => {
+					let list = res.data.list || [];
+					this.wallData = this.$util.SplitArray(list, this.wallData);
+					if (this.wallData.length == 0) {
+						this.loadTitle = ''
+						this.noDataTip = ' 暂无快递信息 ';
+					} else {
+						this.noDataTip = ''
+						this.loadTitle = list.length < this.limit ? "我也是有底线的~" : '';
+					}
+					this.loading = false
+					this.page += 1;
+				}).catch(err => {
+					this.noDataTip = ' 暂无快递信息 ';
+					this.loading = false
+					console.log(err)
+				});
+			},
+			onScrollBottom() {
+				if (!this.loadTitle) {
+					// this.getPreExpressApi()
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container {
+		position: relative;
+		overflow: hidden;
+	}
+
+	.wall-nav {
+		font-weight: 500;
+		font-size: 23rpx;
+		color: #999999;
+	}
+
+	.wall-nav~.wall-nav {
+		margin-left: 38rpx;
+	}
+
+	.wall-nav-on {
+		font-weight: 600;
+		font-size: 27rpx;
+		color: #141414;
+	}
+
+	.info-xzi {
+		font-weight: 400;
+		font-size: 19rpx;
+		color: #999999;
+	}
+
+	.info-dzi {
+		font-weight: 500;
+		font-size: 23rpx;
+		color: #141414;
+	}
+</style>

+ 880 - 0
mer_uniapp/pages/discover/discover_release/index-bak.vue

@@ -0,0 +1,880 @@
+<template>
+	<view :data-theme="theme" class="discover borderPad">
+		<!-- 表单 -->
+		<form v-if="!topicShow" @submit="formSubmit" report-submit='true'>
+			<view class="release_content">
+				<view class="release_item">
+					<view class="photo_count">
+						<view class="input_photo acea-row row-middle">
+							<view class="pictrue" v-if="formData.video">
+								<image class="video-bg" mode="widthFix" src="../static/images/video_bg.png"></image>
+								<view class="videoHover" @click="videoshow">
+									<view>
+										<text class="iconfont icon-24gf-play"></text>
+									</view>
+								</view>
+								<text class="video-text">点击可预览视频</text>
+								<view class="close_btn" @click="formData.video = ''"><text
+										class="iconfont icon-guanbi4"></text></view>
+							</view>
+							<view class="pictrue" v-for="(item, index) in image" :key="index">
+								<easy-loadimage mode="widthFix" :image-src="item.url"></easy-loadimage>
+								<text class="cover_text" v-if="item.isCover">封面</text>
+								<view class="close_btn" @click="DelPic(index)"><text
+										class="iconfont icon-guanbi4"></text></view>
+								<view class="cover_change" v-if="!item.isCover" @click="onChangeCover(item, index)">更换封面
+								</view>
+							</view>
+							<view v-if="image.length < 9 && !formData.video"
+								class="pictrue acea-row row-center-wrapper row-column add" @click="upload('image')">
+								<view><text class='iconfont icon-paizhao'></text></view>
+								<view class="text">添加图片</view>
+							</view>
+
+							<view v-if="image.length === 0 && !formData.video"
+								class="pictrue acea-row row-center-wrapper row-column add" @click="upload('video',1)">
+								<view><text class='iconfont icon-tianjiashipin'></text></view>
+								<view class="text">添加视频</view>
+							</view>
+							<view v-if="formData.video && image.length=== 0"
+								class="pictrue acea-row row-center-wrapper row-column add" @click="upload('video',2)">
+
+								<view><text class='iconfont icon-paizhao'></text></view>
+								<view class="text">添加封面</view>
+							</view>
+						</view>
+					</view>
+					<view class="title mb30">
+						<input placeholder='填写标题会有更多赞噢~' name="title" placeholder-class='placeholder'
+							v-model="formData.title" maxlength="20" />
+					</view>
+					<view class="textarea">
+						<textarea
+							:placeholder="formData.type == 1?'分享使用体验和心得,获得更多点赞和关注哦~(600字以内)':'分享使用体验和心得,获得更多点赞和关注哦~(200字以内)'"
+							auto-height name="comment" placeholder-class='placeholder' v-model="formData.content"
+							:maxlength="formData.type == 1?'600':'200'"></textarea>
+						<view class="discoverlist acea-row mt-10">
+							<view v-for="(item, index) in discoverTopicList" :key="item.id"
+								class="list mr-12 font-color">
+								<text class="icon iconfont icon-huati"></text>{{item.name}}
+							</view>
+						</view>
+					</view>
+					<view @click="addTopic" class="flex flex-wrap mt-120">
+						<view class="h-52 px-16 rd-30rpx border-eee flex-center fs-24">
+							<span class="line-heightOne">#话题</span>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="release_content">
+				<view class="release_item" style="padding: 0 24rpx;">
+					<view class='item acea-row row-between-wrapper' @click.stop="addProduct">
+						<view class='name color28'><text
+								class="iconfont icon-tianjiabaobei"></text>添加宝贝({{productList.length}})
+						</view>
+						<view class="select">
+							<view class="select_count">
+								<text v-if="productList.length == 0" class="text">请选择</text>
+								<view v-else class="text">
+									<image class="image" v-for="(item,index) in productList" :key="index"
+										:src="item.image || item.productImage"></image>
+								</view>
+								<text class="iconfont icon-xiangyou"></text>
+							</view>
+						</view>
+					</view>
+					<view class='item acea-row row-between-wrapper'>
+						<view class='name color28'><text class="iconfont icon-neirongfenlei"></text>内容分类
+						</view>
+						<view class="select">
+							<view class="select_count">
+								<picker class="pickerIpt" @change="bindSexChange" :value="sexindex"
+									:range="categoryList" range-key="name">
+									<text v-if="!categoryName" class="text">请选择</text>
+									<view class="uni-input color28 text">{{categoryName}}</view>
+								</picker>
+								<text @change="bindSexChange" class="iconfont icon-xiangyou"></text>
+							</view>
+						</view>
+					</view>
+					<view v-if="!replyPlatformSwitch" class='item acea-row row-between-wrapper'>
+						<view class='name color28'>总平台禁止评论</view>
+					</view>
+					<view v-else class='item acea-row row-between-wrapper'>
+						<view class='name color28'><text class="iconfont icon-pinglun3"></text>是否禁止评论</view>
+						<view class="select">
+							<switch @change="switch1Change" :checked="replyStatus" :color="indicatorBg"
+								style="transform:scale(0.7)" />
+						</view>
+					</view>
+				</view>
+			</view>
+			<button class="release_btn button" form-type="submit">发布</button>
+		</form>
+		<!-- 商品列表 -->
+		<tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="popupShow" @close="popup">
+			<associated-product v-if="popupShow" :checkedObj="productList" @getProduct="getProduct"
+				@close="popup"></associated-product>
+		</tui-bottom-popup>
+		<!-- 话题列表 -->
+		<tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="topicShow" @close="popupTopic">
+			<discover-topic v-if="topicShow" @onClose="popupTopic"></discover-topic>
+		</tui-bottom-popup>
+
+		<!--视频预览弹窗-->
+		<tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="showVideo" @close="showVideo=false">
+			<view v-if="showVideo" class="video-count">
+				<!--#ifndef APP-PLUS-->
+				<video id="myVideo" class="videoLink" autoplay loop muted :src="formData.video"></video>
+				<!--#endif-->
+				<!--#ifdef APP-PLUS-->
+				<view v-html="videoHtml"></view>
+				<!--#endif-->
+
+			</view>
+		</tui-bottom-popup>
+	</view>
+</template>
+
+<script>
+	// #ifdef MP
+	import {
+		base64src
+	} from '@/utils/base64src.js'
+	// #endif
+	import {
+		mapGetters
+	} from "vuex";
+	import {
+		setThemeColor
+	} from '@/utils/setTheme.js'
+	import {
+		noteDetailApi,
+		communityCategoryListApi,
+		noteUpdateApi,
+		noteAddApi,
+		replyPlatformSwitchApi
+	} from '@/api/discover.js';
+	import {
+		Debounce
+	} from '@/utils/validate.js';
+	import {
+		HTTP_REQUEST_URL
+	} from '@/config/app.js';
+	import tuiBottomPopup from "../components/tui-bottom-popup.vue"
+	import associatedProduct from "../components/associatedProduct.vue"
+	import easyLoadimage from '@/components/base/easy-loadimage.vue';
+	import discoverTopic from '../components/discover_topic.vue';
+	let app = getApp();
+	export default {
+		components: {
+			tuiBottomPopup,
+			associatedProduct,
+			easyLoadimage,
+			discoverTopic
+		},
+		computed: {
+			...mapGetters(['discoverTopic']),
+			videoHtml: function() {
+				return `<video  autoplay loop muted controls="controls" width="100%" height="870px"><source src="${this.formData.video}" type="video/mp4"></video>`;
+			}
+		},
+		data() {
+			return {
+				topicShow: false,
+				popupShow: false,
+				theme: app.globalData.theme,
+				image: [], //图片集合
+				cover: '', //视频第一帧作为封面
+				filesLen: 0,
+				exceeded_list: [],
+				uploadMaxSize: 50, //上传图片大小限制
+				formData: {
+					categoryId: 0,
+					image: "",
+					content: "",
+					cover: '',
+					topicIds: "",
+					proIds: "",
+					video: '',
+					id: 0,
+					replyStatus: 1,
+					title: "",
+					type: 1 //1图文,2视频
+				},
+				productList: [], //商品
+				topicList: [], //话题
+				noteId: 0, //内容id
+				sexindex: 0, //分类索引
+				categoryName: '', //分类名称
+				categoryList: [], //逛逛分类
+				indicatorBg: '#e93323',
+				discoverTopicList: [], //选中的话题列表
+				replyStatus: false, //开关
+				showVideo: false, //预览视频弹窗
+				replyPlatformSwitch: false, //评论总开关状态,true开启,false关闭
+				videoContext: ''
+			}
+		},
+		onShow() {
+			this.getReplyPlatformSwitch();
+		},
+		mounted() {
+			// #ifndef APP-PLUS
+			this.videoContext = uni.createVideoContext('myVideo', this);
+			// #endif
+		},
+		onLoad(options) {
+			this.discoverTopicList = [];
+			this.$store.commit('DiscoverTopic', this.discoverTopicList);
+			this.indicatorBg = setThemeColor();
+			this.noteId = options.noteId ? Number(options.noteId) : 0;
+			if (this.noteId > 0) this.getDetail();
+			this.getCommunityCategoryList();
+			this.videoContext = uni.createVideoContext("myvideo", this);
+		},
+		// 滚动监听
+		onPageScroll(e) {
+			// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
+			uni.$emit('scroll');
+		},
+		methods: {
+			/*更换封面*/
+			onChangeCover(item) {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				})
+				setTimeout(() => {
+					this.image.map(items => {
+						items.isCover = false
+					})
+					this.$set(item, 'isCover', true);
+					uni.hideLoading();
+				}, 500);
+
+			},
+			/*获取评论总开关状态*/
+			getReplyPlatformSwitch() {
+				replyPlatformSwitchApi().then(res => {
+					this.replyPlatformSwitch = res.data == 1 ? true : false;
+				})
+			},
+			/*查看视频*/
+			videoshow() {
+				this.showVideo = true
+				this.videoContext = uni.createVideoContext('myVideo', this);
+				this.$nextTick(() => {
+					this.videoContext.play();
+				})
+			},
+			//开关
+			switch1Change: function(e) {
+				this.formData.replyStatus = e.detail.value ? 2 : 1;
+			},
+			//分类列表
+			getCommunityCategoryList() {
+				communityCategoryListApi().then(res => {
+					this.categoryList = res.data;
+				})
+			},
+			//选择分类
+			bindSexChange(e) {
+				this.sexindex = e.detail.value;
+				this.formData.categoryId = this.categoryList[this.sexindex].id;
+				this.categoryName = this.categoryList[this.sexindex].name;
+			},
+			/*获取图文详情*/
+			getDetail() {
+				noteDetailApi(this.noteId).then(res => {
+					this.formData = res.data;
+					this.productList = res.data.productList || [];
+					this.topicList = res.data.topicList || [];
+					//视频2 图文1
+					if (this.formData.type === 2) {
+						this.image = [{
+							url: res.data.cover,
+							isCover: true
+						}];
+					} else {
+						let images = res.data.image ? res.data.image.split(',') : [];
+						let index = images.findIndex(item => {
+							if (item === this.formData.cover) {
+								return true
+							}
+						});
+						images.map(item => {
+							this.image.push({
+								isCover: false,
+								url: item
+							})
+						})
+						this.$set(this.image[index], 'isCover', true);
+					}
+					this.discoverTopicList = res.data.topicList || [];
+					this.$store.commit('DiscoverTopic', this.discoverTopicList);
+					this.replyStatus = this.formData.replyStatus == 2 ? true : false;
+					this.categoryName = this.formData.categoryName;
+					this.sexindex = this.formData.categoryId;
+				}).catch(err => {
+					return this.$util.Tips({
+						title: err
+					});
+				})
+			},
+			/*删除话题*/
+			onDel(i) {
+				this.discoverTopicList.splice(i, 1);
+				this.$store.commit('DiscoverTopic', this.discoverTopicList);
+			},
+			/*参与话题*/
+			addTopic() {
+				this.topicShow = true;
+			},
+			popup() {
+				this.popupShow = false;
+			},
+			popupTopic() {
+				this.topicShow = false;
+				this.discoverTopicList = [...this.discoverTopic]
+			},
+			/*添加宝贝*/
+			addProduct() {
+				this.popupShow = true;
+			},
+			// 上传
+			upload(name, n) {
+				if (name === 'image') {
+					this.formData.type = 1
+					this.getImage();
+				} else {
+					this.formData.type = 2
+					n === 1 ? this.getVideo() : this.getImage();
+				}
+			},
+			//传图片
+			getImage() {
+				this.$util.uploadImageOne({
+					name: 'multipart',
+					model: "product",
+					pid: 1,
+					count: 9
+				}, res => {
+					let data = []
+					res.map(item => {
+						data.push({
+							isCover: false,
+							url: item
+						})
+					})
+					this.image = [...this.image, ...data];
+					if (this.image && this.image.length) this.image[0].isCover = true;
+
+				});
+			},
+			//传视频
+			getVideo() {
+				this.$util.uploadVideo({
+					name: 'multipart',
+					model: "product",
+					pid: 1,
+				}, async res => {
+					this.formData.video = res.fils;
+					// #ifdef H5
+					this.image = [{
+						url: res.coverURL,
+						isCover: true
+					}];
+					// #endif
+
+				});
+			},
+			/**删除图片*/
+			DelPic(index) {
+				this.image.splice(index, 1);
+			},
+			/*获取选中的宝贝*/
+			getProduct(data) {
+				this.productList = data;
+				this.popupShow = false;
+			},
+			/**
+			 * 提交数据
+			 */
+			formSubmit: Debounce(function(e) {
+				let that = this;
+				// if (that.image.length == 0) return that.$util.Tips({
+				// 	title: '请添加内容图片'
+				// });
+				if (that.formData.type == 2 && !that.formData.video) {
+					return that.$util.Tips({
+						title: '请添加内容视频'
+					});
+				}
+				if (!that.formData.categoryId) return that.$util.Tips({
+					title: '请选择内容分类'
+				});
+				if (this.formData.type == 1) {
+					let images = [];
+					this.image.map(item => {
+						images.push(item.url)
+					});
+					this.formData.image = images.join(',');
+					let index = this.image.findIndex(item => {
+						if (item.isCover) {
+							return true
+						}
+					});
+					if (this.image.length) this.formData.cover = this.image[index].url;
+
+				} else {
+					if (this.image.length > 0) {
+						this.formData.cover = this.image[0].url;
+					} else {
+						this.formData.cover = this.cover;
+					}
+
+				}
+				this.formData.proIds = this.productList.map(val => val.productId).join(',');
+
+				this.formData.topicIds = this.discoverTopicList.map(val => val.id).join(',');
+
+
+
+				if (!that.formData.cover) return that.$util.Tips({
+					title: '请上传封面图'
+				});
+
+
+				uni.showLoading({
+					title: '保存中',
+					mask: true
+				})
+				that.noteId ? noteUpdateApi(that.formData).then(res => {
+					uni.hideLoading()
+					that.$util.Tips({
+						title: '提交成功',
+						icon: 'success'
+					});
+					setTimeout(function() {
+						uni.redirectTo({
+							url: '/pages/discover/discover_user/index'
+						})
+					}, 500);
+				}).catch(err => {
+					uni.hideLoading()
+					return that.$util.Tips({
+						title: err
+					});
+				}) : noteAddApi(that.formData).then(res => {
+					that.$util.Tips({
+						title: '提交成功',
+						icon: 'success'
+					});
+					uni.hideLoading()
+					setTimeout(function() {
+						uni.redirectTo({
+							url: '/pages/discover/discover_user/index'
+						})
+					}, 500);
+				}).catch(err => {
+					uni.hideLoading()
+					return that.$util.Tips({
+						title: err
+					});
+				})
+			})
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.pickerIpt {
+		width: 300rpx;
+	}
+
+	.icon-huati {
+		font-size: 24rpx;
+	}
+
+	.icon-guanbi5 {
+		font-size: 20rpx;
+	}
+
+	.discover {
+		padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/ */
+		padding-bottom: constant(safe-area-inset-bottom) !important; ///兼容 IOS<11.2/
+
+	}
+
+	.topic {
+		/deep/.tui-popup-class {
+			height: 95% !important;
+		}
+	}
+
+	.discoverlist {
+		.list {
+			// height: 62rpx;
+			// line-height: 62rpx;
+			// border-radius: 31rpx;
+			@include main_color(theme);
+			border: none;
+			font-size: 24rpx;
+
+			.icon {
+				margin-right: 2rpx;
+			}
+		}
+	}
+
+	.crop_btn {
+		line-height: 90rpx;
+		height: 90rpx;
+		height: calc(90rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
+		height: calc(90rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
+	}
+
+	.container {
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 20;
+		width: 750rpx;
+		height: 100vh;
+	}
+
+	.release_content {
+		margin-top: 20rpx;
+
+		.release_tab {
+			border-radius: 16rpx 16rpx 0 0;
+			border-bottom: 1rpx solid #E4E4E4;
+			background: #fff;
+			align-items: center;
+			justify-content: center;
+			height: 86rpx;
+
+			.tab_item {
+				margin: 0 40rpx;
+				font-size: 32rpx;
+				color: #999;
+				position: relative;
+				line-height: 86rpx;
+				cursor: pointer;
+
+				&.on {
+					color: #E93323;
+
+					&::after {
+						content: "";
+						display: inline-block;
+						width: 100%;
+						height: 3rpx;
+						background: #E93323;
+						position: absolute;
+						bottom: 2rpx;
+						left: 0;
+					}
+				}
+
+				.iconfont {
+					margin-right: 10rpx;
+					font-size: 32rpx;
+				}
+			}
+		}
+
+		.release_item {
+			background: #ffffff;
+			padding: 30rpx;
+			border-radius: 10rpx;
+
+		}
+
+		.photo_count {}
+	}
+
+	/deep/.input_photo .easy-loadimage,
+	/deep/.input_photo uni-image,
+	/deep/.input_photo image {
+		width: 200rpx;
+		height: 200rpx;
+		border-radius: 12rpx !important;
+	}
+
+	.input_photo .pictrue {
+		width: 200rpx;
+		height: 200rpx;
+		border-radius: 12rpx !important;
+		margin-right: 20rpx;
+		position: relative;
+		overflow: hidden;
+
+		&:nth-child(3n) {
+			margin-right: 0;
+		}
+
+		.close_btn {
+			width: 30rpx;
+			height: 30rpx;
+			background: rgba(0, 0, 0, .6);
+			border-radius: 0 12rpx 0 12rpx;
+			position: absolute;
+			top: 0;
+			right: 0;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			z-index: 10;
+
+			.iconfont {
+				color: #ffffff;
+				font-size: 12rpx;
+			}
+		}
+
+		.cover_text {
+			display: flex;
+			width: 58rpx;
+			height: 29rpx;
+			background: #E93323;
+			border-radius: 0px 12rpx 0px 12rpx;
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			z-index: 10;
+			align-items: center;
+			justify-content: center;
+			font-size: 18rpx;
+			color: #fff;
+		}
+
+		.cover_change {
+			width: 200rpx;
+			height: 40rpx;
+			background: rgba(0, 0, 0, 0.5);
+			border-radius: 0px 0px 12rpx 12rpx;
+			opacity: 1;
+			color: #fff;
+			text-align: center;
+			font-size: 18rpx;
+			position: absolute;
+			z-index: 10;
+			bottom: 0;
+			line-height: 38rpx;
+		}
+	}
+
+	/deep/.loading-img {
+		width: 200rpx;
+		height: 200rpx;
+		border-radius: 12rpx;
+	}
+
+	.input_photo .pictrue {
+		margin-bottom: 20rpx;
+
+		.videoHover {
+			width: 200rpx;
+			height: 200rpx;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 10;
+
+			>view {
+				width: 50rpx;
+				height: 50rpx;
+				background: #000000;
+				border-radius: 50rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+
+				.iconfont {
+					color: #ffffff;
+					font-size: 21rpx;
+				}
+			}
+		}
+
+		.video-text {
+			display: block;
+			width: 200rpx;
+			text-align: center;
+			color: #ffffff;
+			font-size: 18rpx;
+			z-index: 13;
+			position: absolute;
+			bottom: 20rpx;
+		}
+
+		video {
+			width: 200rpx;
+			height: 200rpx;
+			border-radius: 12rpx;
+		}
+	}
+
+	.input_photo .add {
+		background: #f6f6f6;
+		color: #666666;
+
+		.iconfont {
+			font-size: 50rpx;
+		}
+
+		.text {
+			margin-top: 20rpx;
+			font-size: 27rpx;
+		}
+	}
+
+	.textarea {
+		padding-top: 30rpx;
+		border-top: 1px solid #EEEEEE;
+		// min-height: 120rpx;
+
+		textarea {
+			font-size: 28rpx;
+			width: 100%;
+			box-sizing: border-box;
+			// overflow: hidden;
+
+		}
+	}
+
+	.title {
+		font-size: 30rpx !important;
+		margin-top: 20rpx;
+
+		.placeholder {
+			font-size: 30rpx !important;
+		}
+	}
+
+	.textarea .placeholder,
+	.title .placeholder {
+		color: #999999;
+		overflow: auto !important;
+	}
+
+	.release_item .item {
+		height: 106rpx;
+		border-bottom: 1rpx solid #eee;
+		position: relative;
+		font-size: 30rpx;
+
+		&:nth-child(3) {
+			height: auto;
+			padding: 30rpx 0 10rpx;
+		}
+
+		&:last-child {
+			border-bottom: none;
+		}
+
+		.name {
+			.iconfont {
+				margin-right: 20rpx;
+				font-size: 32rpx;
+			}
+		}
+
+		.select {
+			// width: 300rpx;
+			color: #bbbbbb;
+			text-align: right;
+
+			.select_count {
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+			}
+
+			.text {
+				margin-right: 15rpx;
+				text-align: right;
+
+				.image,
+				image,
+				uni-image {
+					width: 60rpx;
+					height: 60rpx;
+					border-radius: 6rpx;
+					overflow: hidden;
+					margin-right: 10rpx;
+				}
+			}
+
+			.iconfont {
+				font-size: 24rpx;
+			}
+
+			.text_name {
+				color: var(--view-theme);
+				padding: 5rpx 12rpx;
+				background: var(--view-minorColor);
+				border-radius: 23rpx;
+				font-size: 24rpx;
+				margin-right: 10rpx;
+
+				.icon {
+					color: var(--view-theme);
+					font-weight: bold;
+					font-size: 24rpx;
+				}
+
+				.title {
+					margin: 0 10rpx;
+				}
+
+				.iconfont {
+					font-size: 16rpx;
+				}
+			}
+		}
+	}
+
+	.button {
+		width: 710rpx;
+		height: 86rpx;
+		line-height: 84rpx;
+		color: #ffffff;
+		text-align: center;
+		font-size: 32rpx;
+		@include main_bg_color(theme);
+		border-radius: 43rpx;
+	}
+
+	.release_btn {
+		position: fixed;
+		bottom: 30rpx;
+		padding-bottom: constant(safe-area-inset-bottom); ///兼容 IOS<11.2/
+		padding-bottom: env(safe-area-inset-bottom); ///兼容 IOS>11.2/
+	}
+
+	.video-count {
+		position: fixed;
+		width: 600rpx;
+		height: 500rpx;
+		top: 50%;
+		left: 50%;
+		margin-left: -300rpx;
+		margin-top: -250rpx;
+		z-index: 100;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+
+		.videoLink {
+			width: 600rpx;
+			height: 500rpx;
+		}
+	}
+</style>

+ 36 - 47
mer_uniapp/pages/discover/discover_release/index.vue

@@ -4,7 +4,19 @@
 		<form v-if="!topicShow" @submit="formSubmit" report-submit='true'>
 			<view class="release_content">
 				<view class="release_item">
-					<view class="photo_count">
+					<view class="title mb30">
+						<input placeholder='填写标题会有更多赞噢~' name="title" placeholder-class='placeholder' v-model="formData.title" maxlength="20" />
+					</view>
+					<view class="textarea">
+						<textarea :placeholder="formData.type == 1?'分享使用体验和心得,获得更多点赞和关注哦~(600字以内)':'分享使用体验和心得,获得更多点赞和关注哦~(200字以内)'"
+						 auto-height name="comment" placeholder-class='placeholder' v-model="formData.content" :maxlength="formData.type == 1?'600':'200'"></textarea>
+						<view class="discoverlist acea-row mt-10">
+							<view v-for="(item, index) in discoverTopicList" :key="item.id" class="list mr-12 font-color">
+								<text class="icon iconfont icon-huati"></text>{{item.name}}
+							</view>
+						</view>
+					</view>
+					<view class="photo_count mt-30">
 						<view class="input_photo acea-row row-middle">
 							<view class="pictrue" v-if="formData.video">
 								<image class="video-bg" mode="widthFix" src="../static/images/video_bg.png"></image>
@@ -14,83 +26,62 @@
 									</view>
 								</view>
 								<text class="video-text">点击可预览视频</text>
-								<view class="close_btn" @click="formData.video = ''"><text
-										class="iconfont icon-guanbi4"></text></view>
+								<view class="close_btn" @click="formData.video = ''"><text class="iconfont icon-guanbi4"></text></view>
 							</view>
 							<view class="pictrue" v-for="(item, index) in image" :key="index">
 								<easy-loadimage mode="widthFix" :image-src="item.url"></easy-loadimage>
 								<text class="cover_text" v-if="item.isCover">封面</text>
-								<view class="close_btn" @click="DelPic(index)"><text
-										class="iconfont icon-guanbi4"></text></view>
+								<view class="close_btn" @click="DelPic(index)"><text class="iconfont icon-guanbi4"></text></view>
 								<view class="cover_change" v-if="!item.isCover" @click="onChangeCover(item, index)">更换封面
 								</view>
 							</view>
-							<view v-if="image.length < 9 && !formData.video"
-								class="pictrue acea-row row-center-wrapper row-column add" @click="upload('image')">
+							<view v-if="image.length < 9 && !formData.video" class="pictrue acea-row row-center-wrapper row-column add"
+							 @click="upload('image')">
 								<view><text class='iconfont icon-paizhao'></text></view>
 								<view class="text">添加图片</view>
 							</view>
 
-							<view v-if="image.length === 0 && !formData.video"
-								class="pictrue acea-row row-center-wrapper row-column add" @click="upload('video',1)">
+							<view v-if="image.length === 0 && !formData.video" class="pictrue acea-row row-center-wrapper row-column add"
+							 @click="upload('video',1)">
 								<view><text class='iconfont icon-tianjiashipin'></text></view>
 								<view class="text">添加视频</view>
 							</view>
-							<view v-if="formData.video && image.length=== 0"
-								class="pictrue acea-row row-center-wrapper row-column add" @click="upload('video',2)">
+							<view v-if="formData.video && image.length=== 0" class="pictrue acea-row row-center-wrapper row-column add"
+							 @click="upload('video',2)">
 
 								<view><text class='iconfont icon-paizhao'></text></view>
 								<view class="text">添加封面</view>
 							</view>
 						</view>
 					</view>
-					<view class="title mb30">
-						<input placeholder='填写标题会有更多赞噢~' name="title" placeholder-class='placeholder'
-							v-model="formData.title" maxlength="20" />
-					</view>
-					<view class="textarea">
-						<textarea
-							:placeholder="formData.type == 1?'分享使用体验和心得,获得更多点赞和关注哦~(600字以内)':'分享使用体验和心得,获得更多点赞和关注哦~(200字以内)'"
-							auto-height name="comment" placeholder-class='placeholder' v-model="formData.content"
-							:maxlength="formData.type == 1?'600':'200'"></textarea>
-						<view class="discoverlist acea-row mt-10">
-							<view v-for="(item, index) in discoverTopicList" :key="item.id"
-								class="list mr-12 font-color">
-								<text class="icon iconfont icon-huati"></text>{{item.name}}
-							</view>
-						</view>
-					</view>
-					<view @click="addTopic" class="flex flex-wrap mt-120">
+					<!-- <view @click="addTopic" class="flex flex-wrap mt-120">
 						<view class="h-52 px-16 rd-30rpx border-eee flex-center fs-24">
 							<span class="line-heightOne">#话题</span>
 						</view>
-					</view>
+					</view> -->
 				</view>
 			</view>
 			<view class="release_content">
 				<view class="release_item" style="padding: 0 24rpx;">
-					<view class='item acea-row row-between-wrapper' @click.stop="addProduct">
-						<view class='name color28'><text
-								class="iconfont icon-tianjiabaobei"></text>添加宝贝({{productList.length}})
+					<!-- <view class='item acea-row row-between-wrapper' @click.stop="addProduct">
+						<view class='name color28'><text class="iconfont icon-tianjiabaobei"></text>添加宝贝({{productList.length}})
 						</view>
 						<view class="select">
 							<view class="select_count">
 								<text v-if="productList.length == 0" class="text">请选择</text>
 								<view v-else class="text">
-									<image class="image" v-for="(item,index) in productList" :key="index"
-										:src="item.image || item.productImage"></image>
+									<image class="image" v-for="(item,index) in productList" :key="index" :src="item.image || item.productImage"></image>
 								</view>
 								<text class="iconfont icon-xiangyou"></text>
 							</view>
 						</view>
-					</view>
+					</view> -->
 					<view class='item acea-row row-between-wrapper'>
 						<view class='name color28'><text class="iconfont icon-neirongfenlei"></text>内容分类
 						</view>
 						<view class="select">
 							<view class="select_count">
-								<picker class="pickerIpt" @change="bindSexChange" :value="sexindex"
-									:range="categoryList" range-key="name">
+								<picker class="pickerIpt" @change="bindSexChange" :value="sexindex" :range="categoryList" range-key="name">
 									<text v-if="!categoryName" class="text">请选择</text>
 									<view class="uni-input color28 text">{{categoryName}}</view>
 								</picker>
@@ -104,8 +95,7 @@
 					<view v-else class='item acea-row row-between-wrapper'>
 						<view class='name color28'><text class="iconfont icon-pinglun3"></text>是否禁止评论</view>
 						<view class="select">
-							<switch @change="switch1Change" :checked="replyStatus" :color="indicatorBg"
-								style="transform:scale(0.7)" />
+							<switch @change="switch1Change" :checked="replyStatus" :color="indicatorBg" style="transform:scale(0.7)" />
 						</view>
 					</view>
 				</view>
@@ -114,8 +104,7 @@
 		</form>
 		<!-- 商品列表 -->
 		<tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="popupShow" @close="popup">
-			<associated-product v-if="popupShow" :checkedObj="productList" @getProduct="getProduct"
-				@close="popup"></associated-product>
+			<associated-product v-if="popupShow" :checkedObj="productList" @getProduct="getProduct" @close="popup"></associated-product>
 		</tui-bottom-popup>
 		<!-- 话题列表 -->
 		<tui-bottom-popup class="topic" :zIndex="1002" :maskZIndex="1001" :show="topicShow" @close="popupTopic">
@@ -407,11 +396,11 @@
 				// if (that.image.length == 0) return that.$util.Tips({
 				// 	title: '请添加内容图片'
 				// });
-				if (that.formData.type == 2 && !that.formData.video) {
-					return that.$util.Tips({
-						title: '请添加内容视频'
-					});
-				}
+				// if (that.formData.type == 2 && !that.formData.video) {
+				// 	return that.$util.Tips({
+				// 		title: '请添加内容视频'
+				// 	});
+				// }
 				if (!that.formData.categoryId) return that.$util.Tips({
 					title: '请选择内容分类'
 				});
@@ -877,4 +866,4 @@
 			height: 500rpx;
 		}
 	}
-</style>
+</style>

+ 1 - 11
mer_uniapp/pages/substitute_fast_mail/my_fast_mail/index.vue

@@ -169,8 +169,7 @@
 				loadTitle: '',
 				loading: false,
 				noDataTip: '',
-				keywords: '',
-				addressItem: {}
+				keywords: ''
 			};
 		},
 		onLoad() {
@@ -182,15 +181,6 @@
 			});
 			this.getAllOrder()
 		},
-		/**
-		 * 生命周期函数--监听页面显示
-		 */
-		onShow: function() {
-			let that = this;
-			uni.$on('addressItem', function(res) {
-				that.$set(that, 'addressItem', res);
-			})
-		},
 		methods: {
 			//搜索
 			search() {

BIN
mer_uniapp/static/img/ic-fatie.png


+ 0 - 0
mer_uniapp/static/img/ic-wall-type-0.png → mer_uniapp/static/img/ic-wall-type--1.png


Некоторые файлы не были показаны из-за большого количества измененных файлов