| @@ -1,6 +1,6 @@ | |||
| const app = getApp() | |||
| import request from '../../utils/request' | |||
| import { scrollToID } from '../../utils/util' | |||
| import { scrollToID, keyWordsEnum } from '../../utils/util' | |||
| Page({ | |||
| /** | |||
| @@ -27,32 +27,51 @@ Page({ | |||
| onLoad() { | |||
| this.socketLink() | |||
| this.chatLimit() | |||
| this.msgSec('共产党') | |||
| this.msgSec('法轮功') | |||
| }, | |||
| // 敏感词检测 | |||
| 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() { | |||
| @@ -86,33 +105,40 @@ Page({ | |||
| send() { | |||
| 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'), | |||
| canIUseGetUserProfile: false, | |||
| 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() { | |||
| @@ -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 检查用户信息 | |||
| * @returns userInfo | |||
| @@ -11,9 +11,15 @@ | |||
| font-weight: 600; | |||
| margin: auto; | |||
| border-bottom: 1px solid #000; | |||
| transition: all 0.3s; | |||
| &.active { | |||
| color: aqua; | |||
| } | |||
| } | |||
| .introduction { | |||
| position: relative; | |||
| width: 600rpx; | |||
| height: 850rpx; | |||
| margin: 50rpx auto; | |||
| @@ -47,12 +53,50 @@ | |||
| padding: 0 50rpx; | |||
| 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 { | |||
| position: relative; | |||
| top: -85rpx; | |||
| text-align: center; | |||
| transition: all 0.3s; | |||
| &.active { | |||
| transform: scale(1.05); | |||
| } | |||
| image { | |||
| position: absolute; | |||
| @@ -1,6 +1,6 @@ | |||
| <!--index.wxml--> | |||
| <view class="content"> | |||
| <view class="logo"> | |||
| <view class="{{logoActive ? 'logo active' : 'logo' }}" bindtap="checkChatCodeStatus"> | |||
| 𝑺𝒎𝒂𝒓𝒕-𝑪𝒉𝒂𝒕 | |||
| </view> | |||
| <view class="introduction"> | |||
| @@ -11,35 +11,46 @@ | |||
| </view> | |||
| <view class="notice">严格遵守国家法律法规,自觉遵守中国互联网协会《文明上网自律公约》,不发布危害国家安全、违反法律法规、影响社会和谐稳定的有害信息</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 class="tinyChatICon"> | |||
| <view class="{{holdingSwitch ? 'tinyChatICon active' : 'tinyChatICon' }}" bindtouchstart="iconTouchStart" bindtouchend="iconTouchEnd"> | |||
| <image src="../../asset/icon/tiny-Chat.png" mode="widthFix" /> | |||
| </view> | |||
| <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 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> | |||
| </view> | |||
| @@ -56,3 +56,49 @@ export const scrollToID = id => { | |||
| 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 | |||
| // }, | |||
| ] | |||