@@ -1,6 +1,6 @@ | |||||
const app = getApp() | const app = getApp() | ||||
import request from '../../utils/request' | import request from '../../utils/request' | ||||
import { scrollToID } from '../../utils/util' | |||||
import { scrollToID, keyWordsEnum } from '../../utils/util' | |||||
Page({ | Page({ | ||||
/** | /** | ||||
@@ -27,32 +27,51 @@ Page({ | |||||
onLoad() { | onLoad() { | ||||
this.socketLink() | this.socketLink() | ||||
this.chatLimit() | this.chatLimit() | ||||
this.msgSec('共产党') | |||||
this.msgSec('法轮功') | |||||
}, | }, | ||||
// 敏感词检测 | // 敏感词检测 | ||||
msgSec(content) { | msgSec(content) { | ||||
const AccessToken = wx.getStorageSync('AccessToken') | |||||
const openId = wx.getStorageSync('openId') | |||||
const data = { | |||||
content, | |||||
version: 2, | |||||
scene: 4, | |||||
openid: openId | |||||
} | |||||
wx.request({ | |||||
url: `https://api.weixin.qq.com/wxa/msg_sec_check?access_token=${AccessToken}`, | |||||
header: { | |||||
"Content-Type": "application/json;charset=UTF-8", | |||||
}, | |||||
data: data, | |||||
method: "POST", | |||||
success: res => { | |||||
console.log(res, 'msgSec'); | |||||
}, | |||||
fail: err => { } | |||||
}); | |||||
const that = this | |||||
return new Promise((resolve, reject) => { | |||||
const AccessToken = wx.getStorageSync('AccessToken') | |||||
const openId = wx.getStorageSync('openId') | |||||
const data = { | |||||
content, | |||||
version: 2, | |||||
scene: 2, // 场景枚举值(1 资料;2 评论;3 论坛;4 社交日志) | |||||
openid: openId | |||||
} | |||||
wx.request({ | |||||
url: `https://api.weixin.qq.com/wxa/msg_sec_check?access_token=${AccessToken}`, | |||||
header: { | |||||
"Content-Type": "application/json;charset=UTF-8", | |||||
}, | |||||
data: data, | |||||
method: "POST", | |||||
success: res => { | |||||
const label = res.data.result.label | |||||
// 其他敏感词 | |||||
if (label == 100) { | |||||
resolve() | |||||
} else if (label == 21000) { | |||||
wx.showToast({ | |||||
title: `文本涉及敏感词汇`, | |||||
icon: 'none' | |||||
}) | |||||
reject() | |||||
} else { | |||||
// 枚举中的敏感词 | |||||
const msg = keyWordsEnum.filter(item => item.label == label)[0].msg | |||||
wx.showToast({ | |||||
title: `文本涉及${msg}敏感词汇`, | |||||
icon: 'none' | |||||
}) | |||||
reject() | |||||
} | |||||
}, | |||||
fail: err => { } | |||||
}); | |||||
}) | |||||
}, | }, | ||||
chatLimit() { | chatLimit() { | ||||
@@ -86,33 +105,40 @@ Page({ | |||||
send() { | send() { | ||||
if (!this.data.message) return | if (!this.data.message) return | ||||
// 当socket连接被关闭时,重新连接socket | |||||
if (this.data.reLoadSocket) { | |||||
this.socketLink() | |||||
this.setData({ | |||||
waitingMessage: this.data.message | |||||
}) | |||||
} | |||||
this.msgSec(this.data.message) | |||||
.then(() => { | |||||
console.log('非敏感词,放行'); | |||||
// 当socket连接被关闭时,重新连接socket | |||||
if (this.data.reLoadSocket) { | |||||
this.socketLink() | |||||
this.setData({ | |||||
waitingMessage: this.data.message | |||||
}) | |||||
} | |||||
const data = { | |||||
message: this.data.message, | |||||
id: 1 // 带id为用户发送的讯息,不带则为服务器返回的讯息 | |||||
} | |||||
const data = { | |||||
message: this.data.message, | |||||
id: 1 // 带id为用户发送的讯息,不带则为服务器返回的讯息 | |||||
} | |||||
const arr = this.data.chatList | |||||
arr.push(data) | |||||
const arr = this.data.chatList | |||||
arr.push(data) | |||||
// 非重载状态下向服务器发送讯息 | |||||
if (!this.data.reLoadSocket) { | |||||
this.socketSend(this.data.message) | |||||
} | |||||
// 非重载状态下向服务器发送讯息 | |||||
if (!this.data.reLoadSocket) { | |||||
this.socketSend(this.data.message) | |||||
} | |||||
this.setData({ | |||||
chatList: arr, | |||||
message: '', | |||||
messageFlag: true | |||||
}) | |||||
console.log(this.data.chatList, 'chatList'); | |||||
this.setData({ | |||||
chatList: arr, | |||||
message: '', | |||||
messageFlag: true | |||||
}) | |||||
console.log(this.data.chatList, 'chatList'); | |||||
}).catch(() => { | |||||
console.log('触发敏感词!'); | |||||
return | |||||
}) | |||||
}, | }, | ||||
// 打招呼信息 | // 打招呼信息 | ||||
@@ -9,7 +9,12 @@ Page({ | |||||
canIUse: wx.canIUse('button.open-type.getUserInfo'), | canIUse: wx.canIUse('button.open-type.getUserInfo'), | ||||
canIUseGetUserProfile: false, | canIUseGetUserProfile: false, | ||||
canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName'), | canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName'), | ||||
isPhone: false | |||||
isPhone: false, | |||||
isDevMode: false, | |||||
holdingSwitch: false, | |||||
logoActive: false, | |||||
timer: null, | |||||
touchFlag: "" | |||||
}, | }, | ||||
// 事件处理函数 | // 事件处理函数 | ||||
bindViewTap() { | bindViewTap() { | ||||
@@ -90,6 +95,73 @@ Page({ | |||||
}) | }) | ||||
}, | }, | ||||
checkChatCode(e) { | |||||
const flag = e.currentTarget.dataset.flag | |||||
const touchFlag = this.data.touchFlag | |||||
/** 更改data中touchFlag的数据 */ | |||||
const setTouchFlag = touchFlag => { | |||||
this.setData({ | |||||
touchFlag: touchFlag, | |||||
isDevMode: false, | |||||
holdingSwitch: false, | |||||
logoActive: false, | |||||
timer: null, | |||||
}) | |||||
} | |||||
// topLeft => bottomRight => topRight => bottomLeft | |||||
if (flag == "topLeft") { | |||||
setTouchFlag('topLeft') | |||||
} else if (flag == "bottomRight") { | |||||
if (touchFlag == 'topLeft') { | |||||
setTouchFlag('bottomRight') | |||||
} else { | |||||
setTouchFlag('') | |||||
} | |||||
} else if (flag == "topRight") { | |||||
if (touchFlag == 'bottomRight') { | |||||
setTouchFlag('topRight') | |||||
} else { | |||||
setTouchFlag('') | |||||
} | |||||
} else if (flag == "bottomLeft") { | |||||
if (touchFlag == 'topRight') { | |||||
this.setData({ | |||||
holdingSwitch: true | |||||
}) | |||||
} else { | |||||
setTouchFlag('') | |||||
} | |||||
} | |||||
}, | |||||
iconTouchStart() { | |||||
if (!this.data.holdingSwitch) return | |||||
const that = this | |||||
that.setData({ | |||||
timer: setTimeout(() => { | |||||
that.setData({ | |||||
logoActive: true | |||||
}) | |||||
wx.showToast({ | |||||
title: 'Developer Mode', | |||||
icon: 'success' | |||||
}) | |||||
}, 7000) | |||||
}) | |||||
}, | |||||
iconTouchEnd() { | |||||
clearTimeout(this.data.timer) | |||||
}, | |||||
checkChatCodeStatus() { | |||||
if (this.data.logoActive) { | |||||
this.setData({ | |||||
isDevMode: true | |||||
}) | |||||
} | |||||
}, | |||||
/** | /** | ||||
* @description 检查用户信息 | * @description 检查用户信息 | ||||
* @returns userInfo | * @returns userInfo | ||||
@@ -11,9 +11,15 @@ | |||||
font-weight: 600; | font-weight: 600; | ||||
margin: auto; | margin: auto; | ||||
border-bottom: 1px solid #000; | border-bottom: 1px solid #000; | ||||
transition: all 0.3s; | |||||
&.active { | |||||
color: aqua; | |||||
} | |||||
} | } | ||||
.introduction { | .introduction { | ||||
position: relative; | |||||
width: 600rpx; | width: 600rpx; | ||||
height: 850rpx; | height: 850rpx; | ||||
margin: 50rpx auto; | margin: 50rpx auto; | ||||
@@ -47,12 +53,50 @@ | |||||
padding: 0 50rpx; | padding: 0 50rpx; | ||||
margin-top: 35rpx; | margin-top: 35rpx; | ||||
} | } | ||||
.switch { | |||||
position: absolute; | |||||
width: 100rpx; | |||||
height: 100rpx; | |||||
border-radius: 50% 50%; | |||||
&.topLeft { | |||||
top: 0; | |||||
left: 0; | |||||
transform: translate(-50%, -50%); | |||||
} | |||||
&.topRight { | |||||
top: 0; | |||||
right: 0; | |||||
transform: translate(50%, -50%); | |||||
} | |||||
&.bottomLeft { | |||||
bottom: 0; | |||||
left: 0; | |||||
transform: translate(-50%, 50%); | |||||
} | |||||
&.bottomRight { | |||||
bottom: 0; | |||||
right: 0; | |||||
transform: translate(50%, 50%); | |||||
} | |||||
} | |||||
} | } | ||||
.tinyChatICon { | .tinyChatICon { | ||||
position: relative; | position: relative; | ||||
top: -85rpx; | top: -85rpx; | ||||
text-align: center; | text-align: center; | ||||
transition: all 0.3s; | |||||
&.active { | |||||
transform: scale(1.05); | |||||
} | |||||
image { | image { | ||||
position: absolute; | position: absolute; | ||||
@@ -1,6 +1,6 @@ | |||||
<!--index.wxml--> | <!--index.wxml--> | ||||
<view class="content"> | <view class="content"> | ||||
<view class="logo"> | |||||
<view class="{{logoActive ? 'logo active' : 'logo' }}" bindtap="checkChatCodeStatus"> | |||||
𝑺𝒎𝒂𝒓𝒕-𝑪𝒉𝒂𝒕 | 𝑺𝒎𝒂𝒓𝒕-𝑪𝒉𝒂𝒕 | ||||
</view> | </view> | ||||
<view class="introduction"> | <view class="introduction"> | ||||
@@ -11,35 +11,46 @@ | |||||
</view> | </view> | ||||
<view class="notice">严格遵守国家法律法规,自觉遵守中国互联网协会《文明上网自律公约》,不发布危害国家安全、违反法律法规、影响社会和谐稳定的有害信息</view> | <view class="notice">严格遵守国家法律法规,自觉遵守中国互联网协会《文明上网自律公约》,不发布危害国家安全、违反法律法规、影响社会和谐稳定的有害信息</view> | ||||
</view> | </view> | ||||
<view class="switch topLeft" data-flag="topLeft" bindtap="checkChatCode"></view> | |||||
<view class="switch topRight" data-flag="topRight" bindtap="checkChatCode"></view> | |||||
<view class="switch bottomLeft" data-flag="bottomLeft" bindtap="checkChatCode"></view> | |||||
<view class="switch bottomRight" data-flag="bottomRight" bindtap="checkChatCode"></view> | |||||
</view> | </view> | ||||
<view class="tinyChatICon"> | |||||
<view class="{{holdingSwitch ? 'tinyChatICon active' : 'tinyChatICon' }}" bindtouchstart="iconTouchStart" bindtouchend="iconTouchEnd"> | |||||
<image src="../../asset/icon/tiny-Chat.png" mode="widthFix" /> | <image src="../../asset/icon/tiny-Chat.png" mode="widthFix" /> | ||||
</view> | </view> | ||||
<view class="buttons"> | <view class="buttons"> | ||||
<block wx:if="{{!userInfo.phone}}"> | |||||
<button type="primary" open-type="getPhoneNumber" bindgetphonenumber="getUserPhone">申请使用</button> | |||||
</block> | |||||
<block wx:if="{{userInfo.isMember == 1 && userInfo.isValid == 1}}"> | |||||
<view class="userPhone">当前用户:{{userInfo.phone}}</view> | |||||
<view class="userPhone" wx:if="{{userInfo.validEndTime}}">到期时间:{{userInfo.validEndTime}}</view> | |||||
<view class="payHistory" bindtap="checkPayHistory">购买历史</view> | |||||
<button type="primary" bindtap="goToChat">开始聊天</button> | |||||
</block> | |||||
<block wx:if="{{!isDevMode}}"> | |||||
<block wx:if="{{!userInfo.phone}}"> | |||||
<button type="primary" open-type="getPhoneNumber" bindgetphonenumber="getUserPhone">申请使用</button> | |||||
</block> | |||||
<block wx:if="{{userInfo.isMember == 1 && userInfo.isValid == 0}}"> | |||||
<view class="userPhone">当前用户:{{userInfo.phone}}</view> | |||||
<view class="userPhone" wx:if="{{userInfo.validEndTime}}">到期时间:{{userInfo.validEndTime}}</view> | |||||
<view class="payHistory" bindtap="checkPayHistory">购买历史</view> | |||||
<button type="primary" bindtap="goToBuy">续费会员</button> | |||||
<block wx:if="{{userInfo.isMember == 1 && userInfo.isValid == 1}}"> | |||||
<view class="userPhone">当前用户:{{userInfo.phone}}</view> | |||||
<view class="userPhone" wx:if="{{userInfo.validEndTime}}">到期时间:{{userInfo.validEndTime}}</view> | |||||
<view class="payHistory" bindtap="checkPayHistory">购买历史</view> | |||||
<button type="primary" bindtap="goToChat">开始聊天</button> | |||||
</block> | |||||
<block wx:if="{{userInfo.isMember == 1 && userInfo.isValid == 0}}"> | |||||
<view class="userPhone">当前用户:{{userInfo.phone}}</view> | |||||
<view class="userPhone" wx:if="{{userInfo.validEndTime}}">到期时间:{{userInfo.validEndTime}}</view> | |||||
<view class="payHistory" bindtap="checkPayHistory">购买历史</view> | |||||
<button type="primary" bindtap="goToBuy">续费会员</button> | |||||
</block> | |||||
<block wx:if="{{userInfo.phone && userInfo.isMember == 0 && userInfo.isValid == 0}}"> | |||||
<view class="userPhone">当前用户:{{userInfo.phone}}</view> | |||||
<button type="primary" bindtap="goToBuy">购买会员</button> | |||||
</block> | |||||
</block> | </block> | ||||
<block wx:if="{{userInfo.phone && userInfo.isMember == 0 && userInfo.isValid == 0}}"> | |||||
<view class="userPhone">当前用户:{{userInfo.phone}}</view> | |||||
<button type="primary" bindtap="goToBuy">购买会员</button> | |||||
<block wx:if="{{isDevMode}}"> | |||||
<view class="userPhone" style="color: #ff0000;font-weight: 600;">开发者模式</view> | |||||
<button type="primary" bindtap="goToChat">开始聊天</button> | |||||
</block> | </block> | ||||
</view> | </view> | ||||
@@ -56,3 +56,49 @@ export const scrollToID = id => { | |||||
inline: "nearest", | inline: "nearest", | ||||
}); | }); | ||||
} | } | ||||
/** | |||||
* @description:命中标签枚举值 | |||||
* @return {string} 100 正常;10001 广告;20001 时政;20002 色情;20003 辱骂;20006 违法犯罪;20008 欺诈;20012 低俗;20013 版权;21000 其他 | |||||
*/ | |||||
export const keyWordsEnum = [ | |||||
// { | |||||
// msg: '正常', | |||||
// label: 100 | |||||
// }, | |||||
{ | |||||
msg: '广告', | |||||
label: 10001 | |||||
}, | |||||
{ | |||||
msg: '时政', | |||||
label: 20001 | |||||
}, | |||||
{ | |||||
msg: '色情', | |||||
label: 20002 | |||||
}, | |||||
{ | |||||
msg: '辱骂', | |||||
label: 20003 | |||||
}, | |||||
{ | |||||
msg: '违法犯罪', | |||||
label: 20006 | |||||
}, | |||||
{ | |||||
msg: '欺诈', | |||||
label: 20008 | |||||
}, | |||||
{ | |||||
msg: '低俗', | |||||
label: 20012 | |||||
}, | |||||
{ | |||||
msg: '版权', | |||||
label: 20013 | |||||
}, | |||||
// { | |||||
// msg: '其他', | |||||
// label: 21000 | |||||
// }, | |||||
] |