树洞陪聊系统源码/陪聊/陪玩/树洞/陪陪/公众号开发/源码交付/树洞系统源码搭建教程

树洞陪聊系统源码/陪聊/陪玩/树洞/陪陪/公众号开发/源码交付/树洞系统源码搭建教程

随着社会的发展和人们生活水平的提高,越来越多的人在面临心理压力、情感困扰或生活困境时,需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题,比如担心被他人知晓自己的隐私等,这就导致了人们在愿意分享时却没有一个安全的环境,树洞项目的诞生为人们提供了一个匿名、安全且高效的倾诉平台,让用户能够坦诚地分享自己的心声,并在这个名的空间中寻求他人的帮助和建议。

树洞陪聊系统演示图

1.上传代码到宝塔 环境要求PHP7.1最佳
上传宝塔树洞程序2.设置伪静态

location ~* (runtime|application)/{
	return 403;
}
location / {
	if (!-e $request_filename){
		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
	}
}

在这里插入图片描述
3.设置运行目录
在这里插入图片描述
4.对接数据库 同时导入数据库
在这里插入图片描述

`APP_DEBUG =  0 //这是是开启调试
APP_TRACE =  0
vx:tongbayun
#服务器信息
DB_DEBUG = true
DB_HOST = 127.0.0.1
DB_NAME = 库名
DB_USER = 用户名
DB_PWD = 密码`

在这里插入图片描述

在这里插入图片描述前端主页代码部分

{include file="common/header" /}
<body {if $data.shoudan=='1'}style="overflow: hidden;"{/if}>
	<div class="indexPop">
		<ul>
			<li class="choiceClick" style="display: none;"><img src="__cn__/images/pop3.png"><p>首单体验</p></li>
			<li class="tishi"><img src="__cn__/images/Pop1.png"></li>
			<li class="wechat"><img src="__cn__/images/Pop2.png"></li>
		</ul>
	</div>
	<div class="zz" style="display: {if $data.shoudan=='1'}block{else /}none{/if};"></div>
	{if $data.shoudan=='1'}
	<div class="choicePop">
		<div class="bt">想要和小哥哥or小姐姐聊天呢?<div class="close_manghe"></div></div>
		<div class="Nr">
			<ul class="sex">
				<li data-sex="1"><p>
					<img src="__cn__/images/mh4.png">
					<img class="on" src="__cn__/images/mh5.png">小哥哥</p></li>
				<li data-sex="0"><p>
					<img src="__cn__/images/mh3.png">
					<img class="on" src="__cn__/images/mh2.png">小姐姐</p></li>
			</ul>
			<div class="layer">
				<div class="left">心动体验项目:</div>
				<div class="right">1v1心动体验10分钟</div>
			</div>
			<div class="layer">
				<div class="left">微信号(必填)</div>
				<div class="right"><input type="text" id="wechat" placeholder="不要填写wxid开头的号码"></div>
			</div>
			<dl>
				<dd class="close_manghe"><a href="javascript:void(0)">暂不体验</a></dd>
				<dd><a href="JavaScript:void(0)" onclick="xindongtiyan()">心动体验</a></dd>
			</dl>
			<div class="tips"><img src="__cn__/images/tips.png">下单请填写正确的微信号码,并关闭隐私保护设置</div>
		</div>
	</div>
	{/if}
	<div class="indexContainer">
		<form method="get">
			<div class="serach">
				<button></button>
				<input type="text" placeholder="请输入店员昵称" name="name" value="{$opt.name}"/>
			</div>
		</form>
		<div class="banner">
			<div class="swiper-container">
				<div class="swiper-wrapper">
					{volist name="data.banner" id="v"}
					<div class="swiper-slide"><a href="{$v.link}"><img src="{$v.image}"></a></div>
					{/volist}
				</div>
			</div>
		</div>
		<div class="Tips">
			<p>
				<marquee direction="left" scrollamount="3">{$data.gonggao}</marquee>
			</p>
		</div>
		<div class="layer1">
			<div class="hd">
				<ul>
					<li class="on">女神榜</li>
					<li>男神榜</li>
				</ul>
				<span></span>
			</div>
			<div class="bd">
				<div class="bdWarp">
					<div class="bdBox">
						{volist name="data.paihangbang.woman" id="v"}
						<div class="PmBox Top{$key+1}" onclick="location.href='/chat_info/{$v.id}'">
							<div class="bt">TOP{$key+1}</div>
							<div class="icon"><div class="bg"></div><img class="pic" src="{$v.avatar}" ></div>
							<h2>{$v.name}</h2>
							<p>小姐姐·{$v.age}</p>
						</div>
						{/volist}
					</div>
					<div class="bdBox">
						{volist name="data.paihangbang.man" id="v"}
						<div class="PmBox Top{$key+1}" onclick="location.href='/chat_info/{$v.id}'">
							<div class="bt">TOP{$key+1}</div>
							<div class="icon"><div class="bg"></div><img class="pic" src="{$v.avatar}" ></div>
							<h2>{$v.name}</h2>
							<p>小哥哥·{$v.age}</p>
						</div>
						{/volist}
					</div>
				</div>
			</div>
		</div>
		<div class="tit">
			<img src="__cn__/images/a8.png">新人推荐
		</div>
		<div class="layer2">
			<div class="swiper-container">
				<div class="swiper-wrapper">
					{volist name="data.xinren" id="v"}
					<div class="swiper-slide" onclick="location.href='/chat_info/{$v.id}'">
						<div class="icon">{if $v.status=='1'}<span></span>{/if}<img src="{$v.avatar}"></div>
						<p>{$v.name}</p>
					</div>
					{/volist}
				</div>
			</div>
		</div>
		<div class="tit">
			<img src="__cn__/images/a9.png">推荐店员
			<div class="city">
				<div style="display: inline-block;">
					<img src="__cn__/images/a10.png">条件筛选
				</div>
			</div>
		</div>
		<div class="layer3">
			<ul class="chat_list">

			</ul>
			<div style="text-align: center;margin: 10px 0px;color: #666;display: none" class="data_none">没有更多数据了</div>
		</div>
	</div>
	<div class="footer">
		<ul>
			<li><a href="/manghe">
				<div class="icon"><img src="__cn__/images/a12.png"></div>
				<p>盲盒</p>
			</a></li>
			<li class="on"><a href="#">
				<div class="icon"><img src="__cn__/images/a13.png"></div>
				<p>聊聊</p>
			</a></li>
			<li><a href="/member">
				<div class="icon"><img src="__cn__/images/a14.png"></div>
				<p>我的</p>
			</a></li>
		</ul>
	</div>
	<div class="shaixuanPop">
		<div class="warp">
			<div class="tit">条件筛选<div class="close"></div></div>
			<div class="bt">请选择性别</div>
			<ul class="list1 sex">
				{volist name="data.where.sex" id="v"}
				<li data-id="{$key}" class="{if $opt.sex!='' and $opt.sex==$key}on{/if}" >{$v}</li>
				{/volist}
			</ul>
			<div class="bt">请选输入年龄(18岁以上)</div>
			<ul class="list2">
				<li>
					<input type="text" placeholder="最小年龄" id="min_age" value="{$opt.min_age}"/>
				</li>
				<span></span>
				<li>
					<input type="text" placeholder="最大年龄" id="max_age" value="{$opt.max_age}"/>
				</li>
			</ul>
			<div class="bt">选择等级</div>
			<ul class="list1 gid">
				{volist name="data.where.gid" id="v"}
				<li data-id="{$key}" class="{if $opt.gid==$key}on{/if}">{$v}</li>
				{/volist}
			</ul>
			<div class="bt">匹配星座</div>
			<ul class="list1 constellation">
				{volist name="data.where.constellation" id="v"}
				<li data-id="{$key}" class="{if $opt.constellation==$key}on{/if}">{$v}</li>
				{/volist}
			</ul>
			<div class="bt">所在省份</div>
			<select class="cityClick province">
				{volist name="data.where.province" id="v"}
				<option value="{$key}" {if $opt.province==$key}selected{/if}>{$v}</option>
				{/volist}
			</select>
		</div>
		<div class="btn">
			<a href="/">重置</a><a href="JavaScript:void(0)" onclick="shaixuan()">筛选</a>
		</div>
	</div>
	<!-- text toast -->
	<div role="alert" id="textToast" style="display: none;">
		<div class="weui-mask_transparent"></div>
		<div class="weui-toast weui-toast_text">
			<p class="weui-toast__content">文字提示</p>
		</div>
	</div>
	<div role="alert" id="loadingToast" style="display: none;">
		<div class="weui-mask_transparent"></div>
		<div class="weui-toast">
            <span class="weui-primary-loading weui-icon_toast">
              <span class="weui-primary-loading__dot"></span>
            </span>
			<p class="weui-toast__content">正在加载</p>
		</div>
	</div>
	<div role="alert" id="warnToast" style="display: none;">
		<div class="weui-mask_transparent"></div>
		<div class="weui-toast">
			<i class="weui-icon-warn weui-icon_toast"></i>
			<p class="weui-toast__content">获取链接失败</p>
		</div>
	</div>
	<div id="tishi" style="display:none;position: fixed;left: 10%;top: 15%;width: 80%;background: #fff;z-index: 9999;border-radius: 16px;padding: 10px 0px;">
		<h2 style="padding: 5px 15px 10px 15px;font-size: 18px;border-bottom: 1px solid #e9e9e9;">温馨提示
			<div class="tishi_close" style="background: url(static/home/cn/images/top_03.jpg);width: .28rem;height: .28rem;background-size: 100% 100%;position: absolute;right: 15px;top: 22px;"></div>
		</h2>
		<p><span>1</span>本平台倡导绿色健康服务,请严格遵守相关法律法规共同构建文明健康的网络生态环境。</p>
		<p><span>2</span>如在聊天过程中出现色情低俗、血腥暴力、恐吓威胁等不良内容,平台有权终止服务并上报给相关部门。</p>
		<p><span>3</span>如服务过程中店员主动发送色情暗示、私下接单等,请保存聊天凭证并上传给平台客服,我们将严肃处理。</p>
		<p><span>4</span>禁止私下转账、借钱、赠送任何物品给店员如产生任何经济纠纷,均与本平台无关。</p>
		<p><span>5</span>严禁未成年消费下单或应聘店员,否则出现任何问题,本平台概不负责。</p>
	</div>
	<div id="wechatimg" style="display:none;position: fixed;left: 10%;top: 10%;width: 80%;background: #fff;z-index: 9999;border-radius: 16px;padding: 10px 0px;">
		<h2 style="padding: 5px 15px 10px 15px;font-size: 18px;border-bottom: 1px solid #e9e9e9;">联系客服
			<div class="wechat_close" style="background: url(static/home/cn/images/top_03.jpg);width: .28rem;height: .28rem;background-size: 100% 100%;position: absolute;right: 15px;top: 22px;"></div>
		</h2>
		<p><img src="{$data.wechatimg}" alt=""></p>
	</div>
<script>
	// 触底获取新数据
	let page = 1;
	let last_page = 2;
	let follow = {$follow|raw};

	$(window).scroll(function() {
		if($(window).scrollTop() + $(window).height() + 1 >= $(document).height()) {
			loadMoreData();
		}
	});
	function loadMoreData() {
		if(page>last_page){
			$(".data_none").css('display','block');
			return false;
		}
		layer.open({type: 2,content: '正在请求中,请稍后~',shadeClose: false});$("body").css('overflow','hidden');
		//请求接口
		$.ajax({
			url: '/get_list',
			type: 'post',
			data: {
				page: page,
				name: '{$opt.name}',
				sex: '{$opt.sex}',
				min_age: '{$opt.min_age}',
				max_age: '{$opt.max_age}',
				gid: '{$opt.gid}',
				constellation: '{$opt.constellation}',
				province: '{$opt.province}',
			},
			success: function(res) {
				// 赋值最大页码
				last_page = res.data.last_page;
				// 处理数据
				res.data.data.forEach(val => {
					// 判断是否在线
					if(val.status=='1'){
						chat_status = `<span></span>`;
					}else {
						chat_status = ``;
					}
					// 判断是否关注
					if ($.inArray(val.id, follow) !== -1) {
						guanzhu = `on`;
					}else{
						guanzhu = ``;
					}

					let content1 = `
									<li class="chat_info" data-id="${val.id}">
										<div class="icon">
											${chat_status}<img src="${val.avatar}">
											<div class="media">
												<div class="music"><audio src="${val.speech}"></audio></div>
												<div class="mediaBox">
												<div class="c1"></div><div class="c2"></div><div class="c3"></div><div class="c2"></div><div class="c1"></div>
												</div>
												</div>
												</div>
												<div class="text">
												<div class="bt">
													<span>${val.name}</span>
													<div class="level${val.title}">${val.title}</div>
													<div class="zan ${guanzhu}"></div>
												</div>
												<div class="floor1">
													${val.province} <b>|</b> ${val.age}&nbsp;<b>|</b>&nbsp;${val.constellation}
												</div>
												<div class="floor2">
												<div class="swiper-container">
												<div class="swiper-wrapper">`;

					service = ``;
					val.service.forEach(function(value, index) {
						service = service + `<div class="swiper-slide"><a class="num${index}" href="">${value}</a></div>`;
					});

					let content2 = `</div></div></div><dl>`;

					label = ``;
					val.label.forEach(function(value, index) {
						label = label + `<dd><a href=""><b>#</b>${value}</a></dd>`;
					});

					let content3 = `</dl></div></li>`;

					let con = content1+service+content2+label+content3;
					$(".layer3 ul").append(con);
					new Swiper(".layer3 .swiper-container", {
						slidesPerView: "auto",
						spaceBetween: 10,
						freeMode: true,
					});
				})
				// 处理页码
				page++;
				// 取消遮罩层
				layer.closeAll();
				$("body").css('overflow','auto');
			}
		});
	}

	function xindongtiyan(){
		var $s = $(".sex");
		var $sex = $s.children(".on").data('sex');
		var $wechat = $("#wechat").val();
		if($sex==undefined){
			var $textToast = $('#textToast');
			if ($textToast.css('display') != 'none') return;
			$('#textToast p').text('请选择性别!');
			$textToast.fadeIn(100);
			setTimeout(function () {
				$textToast.fadeOut(100);
			}, 2000);
			return false;
		}

		if(!$wechat){
			var $textToast = $('#textToast');
			if ($textToast.css('display') != 'none') return;
			$('#textToast p').text('请填写微信号!');
			$textToast.fadeIn(100);
			setTimeout(function () {
				$textToast.fadeOut(100);
			}, 2000);
			return false;
		}

		var subStr = $wechat.substring(0, 4);
		if(subStr=='wxid'){
			var $textToast = $('#textToast');
			if ($textToast.css('display') != 'none') return;
			$('#textToast p').text('请不要填写wxid开头的号码,会搜不到哦!');
			$textToast.fadeIn(100);
			setTimeout(function () {
				$textToast.fadeOut(100);
			}, 2000);
			return false;
		}

		// 加载中
		$loadingToast = $('#loadingToast');
		if ($loadingToast.css('display') != 'none') return;
		$loadingToast.fadeIn(100);
		// 发送请求
		$.ajax({
			url:"chat_post_three",
			type:"POST",
			dataType: "json",
			data:{sex:$sex,wechat:$wechat},
			success: function(data){
				var $loadingToast = $('#loadingToast');
				$loadingToast.fadeOut(100);

				if(data.code==0){
					var $warnToast = $('#warnToast');
					if ($warnToast.css('display') != 'none') return;
					$('#warnToast p').text(data.msg);
					$warnToast.fadeIn(100);
					setTimeout(function () {
						$warnToast.fadeOut(100);
					}, 2000);
					return false;
				}
				window.location.href = data.data.url;
			}
		});
		return false;
	};

	function shaixuan(){
		// 性别
		var sex = $(".sex").children(".on").data('id');
		// 年龄
		var min_age = $("#min_age").val();
		var max_age = $("#max_age").val();
		// 等级
		var gid = $(".gid").children(".on").data('id');
		// 星座
		var constellation = $(".constellation").children(".on").data('id');
		// 省份
		var province = $('.province option:selected').val();

		var where = {sex:sex,min_age:min_age,max_age:max_age,gid:gid,constellation:constellation,province:province};

		location.href = '/?' + $.param(where);
	}

	$(".tishi").click(function (){
		$('.zz').fadeIn();
		$("body").css('overflow','hidden');
		$('#tishi').fadeIn();
	})
	$(".tishi_close").click(function (){
		$('#tishi').fadeOut();
		$('.zz').fadeOut();
		$("body").css('overflow','auto');
	})

	$(".wechat").click(function (){
		$('.zz').fadeIn();
		$("body").css('overflow','hidden');
		$('#wechatimg').fadeIn();
	})

	$(".wechat_close").click(function (){
		$('#wechatimg').fadeOut();
		$('.zz').fadeOut();
		$("body").css('overflow','auto');
	})

	$('.choiceClick').click(function(){
		$(this).fadeOut()
		$('.zz').fadeIn();
		$("body").css('overflow','hidden');
		$('.choicePop').fadeIn();
	})
	$('.list1 li').click(function(){
		$(this).addClass('on').siblings().removeClass('on');
	})
	$('.city div').click(function(){
		$('.shaixuanPop').css('transform','translate(-50%,0)');
		$('.zz').fadeIn();
		$("body").css('overflow','hidden');
	})
	$('.close').click(function(){
		$('.zz').fadeOut();
		$("body").css('overflow','auto');
		$('.shaixuanPop').css('transform','translate(-50%,100%)');
	})

	$(document).on("click", ".chat_info", function() {
		location.href = "/chat_info/"+ $(this).data('id');
		return false;
	})

	$(document).on("click", ".zan", function(event) {
		event.stopPropagation();
		let id = $(this).parents('li').data('id');
		if($(this).hasClass('on')){
			$(this).removeClass('on')
		}else{
			$(this).addClass('on')
		}
		//请求接口
		$.ajax({
			url: '/member/follow',
			type: 'post',
			data: {
				chat_id: id
			},
			success: function(res) {
				var $textToast = $('#textToast');
				if ($textToast.css('display') != 'none') return;
				$('#textToast p').text(res.msg);
				$textToast.fadeIn(100);
				setTimeout(function () {
					$textToast.fadeOut(100);
				}, 1000);
				return false;
			}
		});

		return false;
	})

	$(document).on("click", ".media", function(event) {
		event.stopPropagation();
		var audio = $(this).children('.music').children('audio')[0];

		if($(this).hasClass('on')){
			$(this).removeClass('on')
			audio.pause(); // 暂停音频
		}else{
			// 暂停其他音频
			elements = $(".icon>.on");
			elements.each(function() {
				$(this).trigger('click');
			});
			console.log('播放音频');
			$(this).addClass('on')
			audio.play(); // 播放音频
		}
		return false;
	})


	 var swiper3 = new Swiper(".banner .swiper-container", {
		 loop: true,
		 autoplay: {
			 delay: 3000,//3秒切换一次
			 disableOnInteraction: false
		 },
		 pagination: {
			 el: ".photo .swiper-pagination",
			 clickable: true,
		 },
    });
	 var swiper = new Swiper(".layer2 .swiper-container", {
      slidesPerView: 4,
      spaceBetween: 10,
      freeMode: true,
      pagination: {
        el: ".swiper-pagination",
        clickable: true,
      },
    });
    var swiper2 = new Swiper(".layer3 .swiper-container", {
      slidesPerView: "auto",
      spaceBetween: 10,
      freeMode: true,

    });
	$('.layer1 .hd ul li').click(function(){
		var num=$(this).index();
		if(num>0){
			$('.layer1 .hd span').css('left','50%');
			$('.layer1 .bd .bdWarp').css('left','-100%');
		}else{
			$('.layer1 .hd span').css('left','0');
			$('.layer1 .bd .bdWarp').css('left','0%');
		}
	})
	$('.choicePop .Nr ul li').click(function(){
			$(this).addClass('on').siblings().removeClass('on');
		})
	$('.close_manghe').click(function(){
		$('.choiceClick').fadeIn();
		$('.choicePop').fadeOut();
		$('.zz').fadeOut();
		$("body").css('overflow','auto');
	})
</script>
{include file="common/footer" /}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

济南壹软网络科技有限公司

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值