| @@ -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 | |||||
| // }, | |||||
| ] | |||||