Compare commits

...

6 Commits

23 changed files with 711 additions and 1716 deletions
Split View
  1. +3
    -641
      App.vue
  2. BIN
      __MACOSX/components/._.DS_Store
  3. +118
    -111
      manifest.json
  4. +6
    -6
      pages.json
  5. +0
    -7
      pages/center/Piabodata/Customerportrait/Receivedetailabout.vue
  6. +522
    -125
      pages/index/guide.vue
  7. +0
    -9
      pages/index/learning.vue
  8. +59
    -36
      pages/index/mathManIndex.js
  9. +0
    -7
      pages/index/personal.vue
  10. +1
    -0
      pages/mine/details2.vue
  11. +0
    -343
      sdk/webimSDK3.1.1.js
  12. BIN
      static/image/recordingIcon.png
  13. BIN
      static/image/servehead.png
  14. BIN
      static/image/textInput.png
  15. BIN
      static/image/voiceInput.png
  16. BIN
      static/image/voiceing.png
  17. BIN
      static/image/voiceplay.png
  18. +0
    -48
      store/index.js
  19. +0
    -234
      utils/WebIM.js
  20. +0
    -90
      utils/WebIMConfig.js
  21. +0
    -23
      utils/subutil.js
  22. +0
    -32
      utils/tabbar.js
  23. +2
    -4
      utils/util.js

+ 3
- 641
App.vue View File

@@ -1,653 +1,15 @@
<script>
import Vue from 'vue';
const domainObj = require('./utils/domain.js');
//app.js
var config = require("./config");
export default {
onLaunch(options) {
this.setTabbarItems() // 设置tabbar
// 获取用户信息
uni.getSystemInfo({
success: function(e) {
console.log(e, 'phoneInfo')
// #ifdef MP-WEIXIN
Vue.prototype.StatusBar = e.statusBarHeight;
let custom = wx.getMenuButtonBoundingClientRect();
Vue.prototype.Custom = custom;
Vue.prototype.CustomBar = custom.bottom + custom.top - e.statusBarHeight;
Vue.prototype.windowHeight = e.safeArea.height
// #endif
Vue.mixin({
data() {
return {
StatusBar: Vue.prototype.StatusBar,
CustomBar: Vue.prototype.CustomBar,
windowHeight: Vue.prototype.windowHeight,
LOADING: false,
bulidIngObj: uni.getStorageSync('buildingID'),
};
},
onLoad() {
this.setTabbarItems()
},
methods: {

// 设置底部导航栏
setTabbarItems() {
const tabbarList = [{
iconPath: "/static/images/tabBar/jiedais.png",
selectedIconPath: "/static/images/tabBar/jiedaiActives.png",
text: "接待"
},
{
iconPath: "/static/images/tabBar/kehus.png",
selectedIconPath: "/static/images/tabBar/kehuActives.png",
text: "客户"
},
{
iconPath: "/static/images/tabBar/works.png",
selectedIconPath: "/static/images/tabBar/workActives.png",
text: "工作台"
},
{
iconPath: "/static/images/tabBar/xuexis.png",
selectedIconPath: "/static/images/tabBar/xuexiActives.png",
text: "学习"
},
{
iconPath: "/static/images/tabBar/mes.png",
selectedIconPath: "/static/images/tabBar/meActives.png",
text: "我的"
}
]
if (domainObj.domain == 'zh.aihxz.com') {
tabbarList.forEach((item, index) => {
uni.setTabBarItem({
index: index,
iconPath: item.iconPath,
selectedIconPath: item.selectedIconPath
})
})
}
},

//实时统计
getTabBarBadge() {
uni.request({
url: config.service.realTimeStatistics,
method: "POST",
header: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + uni.getStorageSync(
'weapp_session_login_data').token
},
data: {
houseId: uni.getStorageSync('buildingID').id
},
success: (data) => {

if (data.data.data == null) {
uni.removeTabBarBadge({
index: 0,
})
return
} else {
uni.removeTabBarBadge({
index: 0,
})
if (data.data.data.receivingCustomer > 0) {
uni.setTabBarBadge({
index: 0,
text: `${data.data.data.receivingCustomer}`
})
}
}
},
fail: () => {
uni.removeTabBarBadge({
index: 0,
})
}
})
},

upDateBulidIngObj() {
this.bulidIngObj = uni.getStorageSync('buildingID')
},
addLookingCount(id) {
uni.request({
url: config.service.addLookingCount,
method: "POST",
header: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + uni.getStorageSync(
'weapp_session_login_data').token
},
data: {
houseId: uni.getStorageSync(
'buildingID').id,
houseName: uni.getStorageSync(
'buildingID').name,
recordId: id
},
})
},

sendLog(data) {
uni.request({
url: config.service.addLog,
method: "POST",
header: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + uni.getStorageSync(
'weapp_session_login_data').token
},
data: {
houseId: data.houseId || uni.getStorageSync(
'buildingID').id,
houseName: data.houseName || uni.getStorageSync(
'buildingID').name,
serviceId: "test",
recordId: data.id
},
success: (data) => {
}
})
},
// 时分秒转换为秒
TIMEEVENT(e) {
var time = e;
var len = time.split(':')
if (len.length == 3) {
var hour = time.split(':')[0];
var min = time.split(':')[1];
var sec = time.split(':')[2];
return Number(hour * 3600) + Number(min * 60) + Number(sec);
}
if (len.length == 2) {
var min = time.split(':')[0];
var sec = time.split(':')[1];
return Number(min * 60) + Number(sec);
}
if (len.length == 1) {
var sec = time.split(':')[0];
return Number(sec);
}
},

// 目前使用页面为录音页面
SPEAKERSTYLE(index) {
let obj = {
color: '',
}
switch (index) {
case 1:
obj.color = '#60CBEC';
break;
case 2:
obj.color = '#EC8B47';
break;
case 3:
obj.color = '#4F861E';
break;
case 5:
obj.color = '#4980C8';
break;
case 6:
obj.color = '#60CBEC';
break;
case 7:
obj.color = '#EC8B47';
break;
case 8:
obj.color = '#4F861E';
break;
default:
obj.color = '#9F61C8';
break;
}
return obj
},

// 检测权限 返回 Boolean类型
CHECKAUTHORITY(name = '') {
let menu = uni.getStorageSync('weapp_session_Menu_data')
return menu[name] === undefined ? false : menu[name]
},
},

filters: {
// ASCII码转换 大写字母A是65 演讲人是从1开始所以num+64
toCapital(num) {
let str = ''
if (num) {
str = String.fromCharCode(num + 64)
}
return str
}
}
});
}
});

// 新版本更新
if (wx.canIUse('getUpdateManager')) {
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function(res) {
if (res.hasUpdate) {
updateManager.onUpdateReady(function() {
uni.showModal({
title: '更新提示',
cancelColor: "#999999",
content: '新版本已经准备好,是否重启应用?',
success: function(res) {
if (res.confirm) {
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function() {
uni.showModal({
title: '已经有新版本了哟~',
cancelColor: "#999999",
content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~'
})
})
}
})
} else {
uni.showModal({
title: '提示',
cancelColor: "#999999",
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
})
}

// 判断token
const token = uni.getStorageSync("weapp_session_login_data")
if (typeof token.token != "string") {
return
}
uni.request({
url: config.service.getUser,
method: "GET",
header: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + uni.getStorageSync('weapp_session_login_data').token
},
success: (res) => {
let rescor = res.data.data;
// return
if (res.statusCode == 401) {
uni.showToast({
title: '登录过期请重新登录',
icon: "none",
duration: 2000,
})
uni.navigateTo({
url: `/pages/login/index`
})
return
}
if (rescor.user.total == 0) {
uni.showToast({
title: '暂无绑定项目',
duration: 2000,
icon: "none"
});
return
} else {
let lopan = {
id: rescor.houseList[0].id,
name: rescor.houseList[0].propertyName
}
let users = rescor.user
users.zkProperties = rescor.houseList
uni.setStorageSync("weapp_session_userInfo_data", users); //写入缓存
}
}
})


this.$u.get(config.service.notReadNum, {
id: uni.getStorageSync('weapp_session_userInfo_data').accountId,
projectId: uni.getStorageSync('buildingID').id
}).then(res => {
if (res > 0) {
uni.setTabBarBadge({ //显示数字
index: 4, //tabbar下标
text: res || 0 //数字
})
} else {
uni.removeTabBarBadge({
index: 4
})
}
}).catch(e => {
uni.removeTabBarBadge({
index: 4
})
})
wx.setInnerAudioOption({
obeyMuteSwitch: false
});
onLaunch() {
},


onShow(options) {
const token = uni.getStorageSync("weapp_session_login_data")
if (typeof token.token != "string") {
return
} else {}
onShow() {
},


methods: {
// 设置底部导航栏
setTabbarItems() {
const tabbarList = [{
iconPath: "/static/images/tabBar/jiedais.png",
selectedIconPath: "/static/images/tabBar/jiedaiActives.png",
text: "接待"
},
{
iconPath: "/static/images/tabBar/kehus.png",
selectedIconPath: "/static/images/tabBar/kehuActives.png",
text: "客户"
},
{
iconPath: "/static/images/tabBar/works.png",
selectedIconPath: "/static/images/tabBar/workActives.png",
text: "工作台"
},
{
iconPath: "/static/images/tabBar/xuexis.png",
selectedIconPath: "/static/images/tabBar/xuexiActives.png",
text: "学习"
},
{
iconPath: "/static/images/tabBar/mes.png",
selectedIconPath: "/static/images/tabBar/meActives.png",
text: "我的"
}
]
if (domainObj.domain == 'zh.aihxz.com') {
tabbarList.forEach((item, index) => {
uni.setTabBarItem({
index: index,
iconPath: item.iconPath,
selectedIconPath: item.selectedIconPath
})
})
}
}
}
};
</script>

<style>
@import "./app.css";
</style>
<style lang="scss">
@import "uview-ui/index.scss";

/*每个页面公共css */
//图表样式等
.single {
width: 100%;
background: #FFFFFF;

.title {
width: 100%;
height: 80rpx;
display: flex;
align-items: center;

.title1 {
flex: 2;
font-size: 30rpx;
font-weight: 500;
color: #333333;
line-height: 80rpx;
padding-left: 30rpx;
font-family: PingFangSC-Medium, PingFang SC;
}

.title3 {
flex: 3;
height: 90rpx;
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 30rpx;

.title3-box {
display: flex;
align-items: center;
width: 25%;
justify-content: center;

.activecltab {
color: #2671E2;
border-bottom: 4rpx solid #2671E2;
}
}
}

.title2 {
flex: 2;
display: flex;
justify-content: flex-end;
align-items: center;
height: 42rpx;
font-size: 30rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 42rpx;
margin-right: 30rpx;

.righttochoose {
width: 24rpx;
height: 12rpx;
margin-left: 12rpx;
}
}
}

.swiper-box {
width: 97%;
margin: 0 auto 26rpx;
}

.hejibox {
width: 100%;
height: 80rpx;
display: flex;

.heji {
width: 50%;
height: 100%;
font-size: 28rpx;
font-weight: 400;
color: #666666;
line-height: 80rpx;
text-indent: 30rpx;
}
}

.danwei {
width: 100%;
height: 40rpx;
font-size: 24rpx;
font-weight: 400;
color: #999999;
line-height: 40rpx;
text-indent: 30rpx;
}

.uchaserbox {
width: 95%;
height: 470rpx;
}

.jindu {
width: 100%;
min-height: 400rpx;

.jindu-box {
width: 100%;
padding: 0 30rpx;

.jindu-boxche {
width: 100%;
height: 40rpx;
display: flex;
align-items: center;
margin-bottom: 38rpx;

.jindu-name {
width: 120rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 40rpx;
}

.progress-cus {
flex: 1;
height: 30rpx;
margin-left: 10rpx;
background: #F0F1F2;

.color {
height: 30rpx;
background: linear-gradient(90deg, #3A82EF 0%, #7EB2FF 100%);
}

.color4 {
height: 30rpx;
background: linear-gradient(270deg, #6DC5B8 0%, #07B79D 100%);
}

.color1 {
height: 30rpx;
background: linear-gradient(270deg, #F88881 0%, #E6625B 100%); //1
}

.color2 {
height: 30rpx;
background: linear-gradient(270deg, #FFC940 0%, #FF981E 100%); //2
}

.color3 {
height: 30rpx;
background: linear-gradient(270deg, #FFE800 0%, #FFCC00 100%); //3
}
}

.jindu-zxl {
width: 120rpx;
font-size: 28rpx;
margin-left: 12rpx;
color: #333;
text-align: left;
line-height: 40rpx;
}
}
}
}
}

//时间切换的样式
.boxtittab {
width: 100;
height: 92rpx;
background: #FFFFFF;
display: flex;
align-items: center;

.tabbox {
flex: 1;
height: 100%;
text-align: center;
line-height: 92rpx;
color: #666666;
font-size: 28rpx;
font-weight: 400;
display: flex;
justify-content: center;

.activecllasscet {
width: 96rpx;
color: #2671E2;
font-weight: 600;
border-bottom: 4rpx solid #2671E2;
}
}
}

//多个格子的样式
.boxzonglan {
width: 100%;
min-height: 496rpx;
background: #FFFFFF;
padding: 30rpx 30rpx 30rpx 30rpx;

.zonglantit {
font-size: 30rpx;
color: #333333;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 500;
}

.zonglanbox {
width: 100%;
display: flex;
flex-wrap: wrap;
margin-top: 24rpx;
box-shadow: 0px 0px 12rpx 0px rgba(38, 113, 226, 0.1);
border-radius: 12rpx;

.grid {
width: 50%;
// height: 128rpx;
padding-bottom: 24rpx;
// border: 1rpx solid #E0E0E0;

.audonum {
color: #666666;
text-indent: 40rpx;
font-size: 28rpx;
margin-top: 20rpx;
line-height: 40rpx;
display: flex;
align-items: center;

.circle {
width: 20rpx;
height: 20rpx;
background: #FFFFFF;
border: 6rpx solid #2671E2;
margin-right: 12rpx;
margin-left: 30rpx;
border-radius: 50%;
}
}

.num {
color: #333333;
text-indent: 40rpx;
font-size: 44rpx;
font-weight: 600;
line-height: 50rpx;
margin-top: 18rpx;
}
}
}
}
</style>

BIN
__MACOSX/components/._.DS_Store View File


+ 118
- 111
manifest.json View File

@@ -1,113 +1,120 @@
{
"name": "AI销讲助手",
"appid": "__UNI__7A1611D",
"description": "AI销讲助手",
"versionName": "1.1.0",
"versionCode": "100",
"transformPx": false,
"app-plus": {
"usingComponents": true,
"nvueCompiler": "uni-app",
"compilerVersion": 3,
"splashscreen": {
"alwaysShowBeforeRender": true,
"waiting": true,
"autoclose": true,
"delay": 0
},
"modules": {
"Push": {},
"UIWebview": {},
"Webview-x5": {}
},
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters": ["armeabi-v7a", "arm64-v8a", "x86"]
},
"ios": {
"idfa": false
},
"sdkConfigs": {
"ad": {},
"oauth": {}
},
"icons": {
"android": {
"hdpi": "",
"xhdpi": "",
"xxhdpi": "",
"xxxhdpi": ""
},
"ios": {
"appstore": "",
"ipad": {},
"iphone": {}
}
}
}
},
"quickapp": {},
"mp-weixin": {
"appid": "wx8f883dca5ecc5510",
"setting": {
"urlCheck": false,
"es6": true,
"postcss": true,
"minified": false
},
"usingComponents": true,
"permission": {},
"requiredBackgroundModes": ["audio"],
"lazyCodeLoading": "requiredComponents",
"plugins": {
"WechatSI": {
"version": "0.3.4",
"provider": "wx069ba97219f66d99"
}
},
"uniStatistics": {
"enable": true
}
},
"mp-alipay": {
"usingComponents": true
},
"mp-baidu": {
"usingComponents": true
},
"mp-toutiao": {
"usingComponents": true
},
"h5": {
"router": {
"base": "/pages/login/guide"
}
},
"uniStatistics": {
"version": "1"
}
"name" : "AI销讲助手",
"appid" : "__UNI__7A1611D",
"description" : "AI销讲助手",
"versionName" : "1.1.0",
"versionCode" : "100",
"transformPx" : false,
"app-plus" : {
"usingComponents" : true,
"nvueCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
"modules" : {
"Push" : {},
"UIWebview" : {},
"Webview-x5" : {}
},
"distribute" : {
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
},
"ios" : {
"idfa" : false
},
"sdkConfigs" : {
"ad" : {},
"oauth" : {}
},
"icons" : {
"android" : {
"hdpi" : "",
"xhdpi" : "",
"xxhdpi" : "",
"xxxhdpi" : ""
},
"ios" : {
"appstore" : "",
"ipad" : {},
"iphone" : {}
}
}
}
},
"quickapp" : {},
"mp-weixin" : {
"appid" : "wx8f883dca5ecc5510",
"setting" : {
"urlCheck" : false,
"es6" : true,
"postcss" : true,
"minified" : true
},
"usingComponents" : true,
"permission" : {},
"requiredBackgroundModes" : [ "audio" ],
"lazyCodeLoading" : "requiredComponents",
"plugins" : {
"WechatSI" : {
"version" : "0.3.4",
"provider" : "wx069ba97219f66d99"
},
"digital-human-plugin" : {
"version" : "3.0.0",
"provider" : "wxb827be471e4dce7b"
}
},
"uniStatistics" : {
"enable" : true
},
"optimization" : {
"subPackages" : true
}
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"h5" : {
"router" : {
"base" : "/pages/login/guide"
}
},
"uniStatistics" : {
"version" : "1"
}
}

+ 6
- 6
pages.json View File

@@ -8,12 +8,12 @@
"style": {
"navigationBarBackgroundColor": "#008EF2",
"navigationBarTextStyle": "white",
"navigationStyle": "custom"
// "mp-weixin": {
// "usingComponents": {
// "digital-human": "plugin://digital-human-plugin/core"
// }
// }
"navigationStyle": "custom",
"mp-weixin": {
"usingComponents": {
"digital-human": "plugin://digital-human-plugin/core"
}
}
}
},
{


+ 0
- 7
pages/center/Piabodata/Customerportrait/Receivedetailabout.vue View File

@@ -679,13 +679,6 @@
id: 0
})
})
// util.getRequestPromise(config.service.findAllYi, {}, false).then(data => {
// this.biaoqianlist = data
// this.biaoqianlist.unshift({
// name: "逼单话术",
// id: 0
// })
// });
},
// 取消加精
Cancelout2() {


+ 522
- 125
pages/index/guide.vue View File

@@ -1,163 +1,560 @@
<template>
<view class="boox">
<!-- <digital-human :width="400" rootStyle="position: fixed; left: 50%; top: 100rpx; transform: translateX(-50%);"></digital-human> -->
<view class="booximg">
<image v-if="domainObj.domain == 'zh.aihxz.com'" class="img"
src="https://autoiot.oss-cn-beijing.aliyuncs.com/static/wabIndexs.png" mode=""></image>
<image v-else class="img" src="https://autoiot.oss-cn-beijing.aliyuncs.com/static/wabIndex.png" mode="">
</image>
</view>
<view class="pages">
<digital-human :width="0" rootStyle="position: fixed; left: 50%; top: 100px; transform: translateX(-50%);">
</digital-human>

<view class="center-dingwei">
<view class="dingwei-title" style="margin-top: 0">
<image class="dingwei-img" src="https://qufang.oss-cn-beijing.aliyuncs.com/zkgj/xcx/images2.png"
mode=""></image>
<view class="desc">智能语音转写</view>
</view>
<view class="dingwei-title">
<image class="dingwei-img" src="https://qufang.oss-cn-beijing.aliyuncs.com/zkgj/xcx/images2.png"
mode=""></image>
<view class="desc">高效的判客机制</view>
</view>
<view class="dingwei-title">
<image class="dingwei-img" src="https://qufang.oss-cn-beijing.aliyuncs.com/zkgj/xcx/images2.png"
mode=""></image>
<view class="desc">全方位的客户跟进</view>
</view>
<view class="dingwei-title">
<image class="dingwei-img" src="https://qufang.oss-cn-beijing.aliyuncs.com/zkgj/xcx/images2.png"
mode=""></image>
<view class="desc">专业的经纪管家</view>
<image class="bgs" src="https://qufang.oss-cn-beijing.aliyuncs.com/serverBg.jpg" mode="" />

<view class="server-box">
<view class="server-head">
<image class="servehead" src="@/static/image/servehead.png" mode="" />
<image class="voiceing" src="@/static/image/voiceing.png" mode="" />
</view>
<view class="dingwei-title">
<image class="dingwei-img" src="https://qufang.oss-cn-beijing.aliyuncs.com/zkgj/xcx/images2.png"
mode=""></image>
<view class="desc">在线实时沟通</view>

<!-- 消息列表 -->
<scroll-view class="scroll-box" scroll-y :scroll-into-view="scrollId">
<!-- 循环体 -->
<block v-for="(item, index) in messageList">
<!-- 左侧 -->
<view :class="item.direction" :key="index" :id="`scrollId${index}`">
<view class="msg-text">
<view class="msg-texts">
{{ item.text }}
</view>
<image @tap="rePlayText(item.text)" v-if="item.direction == 'lside' && index !== 0 "
class="voiceplay" src="@/static/image/voiceplay.png" mode="" />
</view>
<view class="timer">{{ item.time }}</view>
</view>
</block>
</scroll-view>
<view class="send-box">

<view v-if="sendType" class="input-box">
<input v-model="inputText" class="inputs" placeholder-class="placestyle" type="text"
confirm-type="send" @confirm="sendChat" placeholder="输入你想咨询的问题或点击右边的麦克风和我聊天" />
</view>

<view v-else class="voice-box" @touchstart="touchStart" @touchend="touchEnd">
<text>{{ voiceState }}</text>
</view>

<view class="change-type">
<image @tap="changeSendType(false)" v-if="sendType" src="@/static/image/voiceInput.png" mode="" />
<image @tap="changeSendType(true)" v-else src="@/static/image/textInput.png" mode="" />
</view>
</view>
</view>

<view @click="bindWxBLogin" class="button">
<view class="view">
立即去登录
</view>
<view v-if="recording" class="luyin">
<image src="@/static/image/recordingIcon.png" mode="" />
<text>正在录音...</text>
</view>

</view>
</template>

<script>
var app = getApp();
var config = require("../../config");
const domainObj = require('@/utils/domain.js');
// import human from './mathManIndex.js'
const pluginConfig = { // 数字人配置
"asrConfig": {
"class": "TencentASR",
"secretKey": "",
"secretId": "AKIDyvwuvrfikhYK1dDj9Vlv154zmVAjFdt0",
"appId": 1310500600,
"partnerId": "0002",
"signatureUrl": "https://commercial-integration-asr-int-api.xiaoice.com/api/v3/asr/tencentSignature",
"hotWordId": "2ab7be50d11f11ecbfd6525400aec391",
"silenceTime": 240,
"engineModelType": "16k_zh",
"needVad": 1,
"filterDirty": 1,
"filterModal": 0,
"filterPunc": 1,
"vadSilenceTime": 240,
"convertNumMode": 1,
"wordInfo": 2
},
"character": "chenzheling-yellow",
"characterConfig": {
"characters": {
"chenzheling-yellow": {
"name": "chenzheling-yellow-half",
"id": "chenzheling-yellow",
"frameWidth": 740,
"frameHeight": 1260,
"faceWidth": 190,
"faceHeight": 300,
"facePositionLeft": 450,
"facePositionTop": 550,
"facePositionLeftOffset": -180,
"facePositionTopOffset": -430,
"frameRate": 25,
"defaultIdle": "A-idle",
"idles": {
"A-idle": {
"id": "A-idle",
"version": 6,
"frameImageLength": 227,
"frameImageType": "webp",
"resetFrameSingleNum": 8,
"resetFrames": [7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95, 103, 111, 119, 127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223],
"frameImageBackupType": "png"
}
},
"gestures": {},
"crops": {}
}
},
"sourcePath": "https://commercial-cdn.xiaoice.com/assets/images/characters",
"batch": 16,
"minLoadFrameNum": 100
},
"chatConfig": {
"class": "CXHubChat",
"url": "https://commercial-fab.xiaoice.com/api/hub/organizations/org-qufangwang/agents/64af7b6d6e1ba4813c4bd6ae/environments/draft/sessions",
"defaultReply": [{
"text": "对不起,我没听清~",
"gesture": ""
}],
"csChatUrl": "https://commercial-fab.xiaoice.com/api/hub/organizations/org-qufangwang/characters//sessions"
},
"logConfig": {
"class": "AliTraceLogger",
"metaData": {
"role": "prod",
"organizationId": "org-qufangwang",
"partnerId": "dh-api",
"agentId": "64af7b6d6e1ba4813c4bd6ae"
}
},
"talkConfig": {
"class": "CarouselTalk",
"url": "https://commercial-fab.xiaoice.com",
"options": {
"path": "/api/v1/carousel/avatars/chenzheling-yellow/socket.io",
"wsPath": "/api/v1/carousel/avatars/chenzheling-yellow/websocket",
"transports": ["websocket", "polling"],
"query": "?image_format=.webp&voice_id=64af7b6da9d616bd022f6b69"
},
"maxRetryTime": 5,
"retryTimeInterval": 100
}
}
const plugin = requirePlugin('digital-human-plugin').api; // 数字人实例
const plugins = requirePlugin("WechatSI");
let manager = plugins.getRecordRecognitionManager();


export default {
// mixins: [human],
data() {
return {
domainObj: domainObj, // 域名
sendType: true, // true 为文字输入 false 为语音输入
messageList: [], // 消息列表
inputText: '', // 文字输入
voiceState: '按住 说话', //
recording: false, // 展示录音提示框
scrollId: '', // 默认不滚动
};
},

onShow() {
uni.request({
url: config.service.verify,
method: "GET",
header: {
'content-type': 'application/json',
'Authorization': 'Bearer ' + uni.getStorageSync('weapp_session_login_data').token
onLoad() {
uni.showLoading({
title: '加载中...',
})
plugin.init({
...pluginConfig,
onReceivedAsrText: (text) => {},
onSuccess: (res) => {
console.log(res, 'onSuccess')
uni.hideLoading()
let text = 'Hi~我是专业房产顾问嘉欣,有问题可以问我呦,试试说句“你好”和我打个招呼吧'
plugin.human?.talkAsync(text)
this.messageList.push({
text: text,
direction: 'lside'
})
},
success: (data) => {
if (data.data.code == 10000) {
uni.switchTab({
url: '/pages/index/index'
});
}
onFailed: res => {
uni.hideLoading()
console.log(res, 'onFailed')
},
onError: (res) => {
uni.hideLoading()
console.log(res, 'onError')
}
})

this.initRecord()
},

onShow() {
// #ifdef MP-WEIXIN

// 内存告警处理
wx.onMemoryWarning((level) => {
plugin.clearCache()
})
wx.setInnerAudioOption({
// IOS静音键的情况下允许播放声音
obeyMuteSwitch: false,
// 播放声音时中断其他app端声音
mixWithOther: false,
})
// #endif
},
onHide() {},
methods: {
bindWxBLogin() {
wx.navigateTo({
url: '/pages/login/index'
/**
* 切换输入方式
*/
changeSendType(e) {
this.sendType = e
},

// // 模拟聊天回复接口
async getReply(text) {
console.log(this.setUid())
await uni.request({
url: `${pluginConfig.chatConfig.url}/${this.setUid()}`,
method: 'POST',
data: {
"text": text,
"currentSceneInfo": {
"sceneId": ""
}
},
success: async (res) => {
const replay = res.data.sceneInfo[0].audioText[0]
await plugin.human?.interrupt()
let arr = []
arr.push({
direction: 'rside',
text: text,
time: this.getTimeNow()
})
arr.push({
direction: 'lside',
text: res.data.sceneInfo[0].audioText[0],
time: this.getTimeNow()
})
this.messageList = [...this.messageList, ...arr]
this.inputText = ''
this.scrollId = `scrollId${this.messageList.length-1}`

await plugin.human?.talkAsync(replay)
}
})
},



/**
* 重播当前对话
*/
async rePlayText(e) {
console.log(e)
// 暂停当前对话(如果有)
await plugin.human?.interrupt()
await plugin.human?.talkAsync(e)
},


/**
* 获取当前时间
*/
getTimeNow() {
let now = new Date();
let year = now.getFullYear(); //获取完整的年份(4位,1970-????)
let month = now.getMonth() + 1; //获取当前月份(0-11,0代表1月)
let today = now.getDate(); //获取当前日(1-31)
let hour = now.getHours(); //获取当前小时数(0-23)
let minute = now.getMinutes(); //获取当前分钟数(0-59)
let second = now.getSeconds(); //获取当前秒数(0-59)
let nowTime = ''
nowTime = year + '-' + this.fillZero(month) + '-' + this.fillZero(today) + ' ' + this.fillZero(hour) +
':' +
this.fillZero(minute) + ':' + this.fillZero(second)
return nowTime
},
// 补零
fillZero(str) {
var realNum;
if (str < 10) {
realNum = '0' + str;
} else {
realNum = str;
}
return realNum;
},


/**
* 发送文字
*/
async sendChat(e) {
await this.getReply(e.detail.value)
},

/**
* 长按识别
*/
touchStart() {
this.recording = true
manager.start({
duration: 60000,
lang: "zh_CN"
});
}
},

/**
* 长按结束
* */
touchEnd() {
this.recording = false
manager.stop();
},
/**
* 初始化语音识别回调
* 绑定语音播放开始事件
*/
initRecord() {
manager.onStart = (res) => {
this.voiceState = "正在录音"
};
//有新的识别内容返回,则会调用此事件
manager.onRecognize = (res) => {}

// 识别结束事件
manager.onStop = async (res) => {

if (res.result) {
await this.getReply(res.result)
}

this.voiceState = "按住 说话"
}

// 识别错误事件
manager.onError = (res) => {}
},

// 简单生成uid
setUid() {
let uid = new Date().getTime() + Math.random().toString(36).substr(2);
return uid
},


}
};
</script>
<style lang="scss">
.boox {
<style lang="scss" scoped>
/* pages/intelligentvoiceassistant/intelligentvoiceassistant.wxss */
view {
box-sizing: border-box;
}

.pages {
position: relative;
width: 100vw;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: flex-end;
}

.bgs {
position: absolute;
z-index: 0;
width: 100%;
height: 100%;
}

.server-box {
position: relative;
z-index: 10;
width: calc(100%-1rpx);
height: 658rpx;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: saturate(180%) blur(20px);
border-radius: 32rpx 32rpx 0 0;
border: 1rpx solid #FFFFFF;
}

.title {
width: 100%;
position: absolute;
left: 0rpx;
top: 100rpx;
text-align: center;
color: #FFFFFF;
font-size: 32rpx;
font-weight: 500;
z-index: 1000;
}
.server-head {
margin: -130rpx 0 0 0;
padding: 0 32rpx;
width: 100%;
display: flex;
align-items: flex-end;
}

.booximg {
width: 100vw;
height: 100vh;
.servehead {
width: 192rpx;
height: 192rpx;
}

.img {
width: 100%;
height: 100%;
}
}
.voiceing {
margin-left: 12rpx;
width: 78rpx;
height: 50rpx;
}

.center-dingwei {
width: 100%;
position: absolute;
left: 0rpx;
bottom: 200rpx;

.dingwei-title {
height: 44rpx;
display: flex;
margin-left: 213rpx;
margin-top: 20rpx;
}

.dingwei-img {
width: 44rpx;
height: 44rpx;
}

.desc {
line-height: 44rpx;
margin-left: 10rpx;
font-size: 32rpx;
color: #333333;
}
}
/*
.close {
width: ;
} */

.button {
width: 100%;
position: absolute;
left: 0rpx;
bottom: 60rpx;

.view {
width: 630rpx;
height: 86rpx;
margin: 0 auto;
background: #2671E2;
box-shadow: 0px 2rpx 20rpx 0rpx rgba(38, 113, 226, 0.5);
border-radius: 49rpx;
color: #FFFFFF;
text-align: center;
line-height: 86rpx;
font-size: 32rpx;
}
}

.scroll-box {
width: 100%;
height: calc(658rpx - 192rpx + 130rpx - 104rpx);
}

.lside {
display: flex;
flex-direction: column;
align-items: flex-start;
}

.rside {
display: flex;
flex-direction: column;
align-items: flex-end;
}

.msg-texts {
margin: 36rpx 32rpx 12rpx;
padding: 16rpx 28rpx;
background: #fff;
border-radius: 20rpx;
}

.lside .voiceplay {
margin: 0 32rpx 16rpx 16rpx;
}

.lside .msg-text {
display: flex;
align-items: flex-end;
}

.lside .msg-text .msg-texts {
margin: 36rpx 16rpx 12rpx 32rpx;
}


.timer {
margin: 0 32rpx;
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
line-height: 33rpx;
}

.rside .msg-texts {
background: #2671E2;
color: #fff;
}

.send-box {
padding: 0 24rpx;
width: 100%;
height: 104rpx;
background: #5D6168;
display: flex;
align-items: center;
/* justify-content: center; */
}

.change-type {
margin: 0 0 0 24rpx;
width: 72rpx;
height: 72rpx;
}

.change-type image {
width: 72rpx;
height: 72rpx;
}

.input-box,
.voice-box {
width: 606rpx;
height: 72rpx;
background: #FFFFFF;
border-radius: 12rpx;
}

.voice-box {
display: flex;
justify-content: center;
align-items: center;
}

.voice-box text {
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #000000;
line-height: 40rpx;
}

.inputs {
padding: 0 28rpx;
box-sizing: border-box;
width: 100%;
height: 100%;
font-size: 22rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
line-height: 30rpx;
}

.placestyle {
font-size: 22rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #CCCCCC;
line-height: 30rpx;
}


.luyin {
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 100;
width: 280rpx;
height: 258rpx;
background: rgba(0, 0, 0, 0.7);
border-radius: 20rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

.luyin image {
margin: 0 0 20rpx 0;
width: 46rpx;
height: 62rpx;
}

.luyin text {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
line-height: 40rpx;
}

.voiceplay {
flex-shrink: 0;
width: 64rpx;
height: 64rpx;
}
</style>

+ 0
- 9
pages/index/learning.vue View File

@@ -145,24 +145,15 @@
</view>
</template>
</view>

<!-- 底部导航栏 -->
<!-- <u-tabbar :isBtnTop="false" class="tabbar" :mid-button="true" activeColor="#1296db" inactiveColor="#999999"
v-model="current" :list="tabbarList"></u-tabbar> -->
</view>
</template>

<script>
var config = require("../../config");
var util = require("@/utils/util.js");
import tabbarList from '@/utils/tabbar.js'
export default {
data() {
return {
// tabbar配置项
current: 3,
tabbarList: tabbarList,
//--- end --- tabbar配置项
tablist: [{
name: "优秀案例"
},


+ 59
- 36
pages/index/mathManIndex.js View File

@@ -21,6 +21,7 @@ module.exports = {
"wordInfo": 2
},
"character": "furao-casual-v4",
"autoStart": true,
"characterConfig": {
"characters": {
"furao-casual-v4": {
@@ -88,6 +89,7 @@ module.exports = {
"batch": 16,
"minLoadFrameNum": 50
},

"chatConfig": {
"class": "CXHubChat",
"url": "https://commercial-fab.xiaoice.com/api/hub/organizations/org-qufangwang/agents/64af7b926e1ba4813c4bd6d7/environments/draft/sessions",
@@ -97,6 +99,7 @@ module.exports = {
}],
"csChatUrl": "https://commercial-fab.xiaoice.com/api/hub/organizations/org-qufangwang/characters//sessions"
},

"logConfig": {
"class": "AliTraceLogger",
"metaData": {
@@ -106,6 +109,7 @@ module.exports = {
"agentId": "64af7b926e1ba4813c4bd6d7"
}
},

"talkConfig": {
"class": "CarouselTalk",
"url": "https://commercial-fab.xiaoice.com",
@@ -126,12 +130,16 @@ module.exports = {

mockReplies: ["嘻嘻", "没听清", "你真厉害"],
plugin: null,
messageList: [], // 消息列表
}
},

onLoad() {
let _this = this
this.plugin = requirePlugin("digital-human-plugin").api;
console.log(this.plugin, 'this.plugin')
this.plugin.init({
...this.config,
onReceivedAsrText: (text) => {
@@ -141,34 +149,28 @@ module.exports = {
return false;
},
onSuccess: () => {
const texts = [{
text: `你好啊`,
gesture: ""
},
{
text: `我叫陈喆玲`,
gesture: ""
},
];
async function talk(texts) {
// 轮播文本内容
for (let i = 0; i < texts.length; i++) {
await _this.plugin.human.talkAsync(
texts[i].text,
texts[i].gesture, {
onTalkStartOnce: (playInfo) => {
console.log("播放句子:", playInfo);
},
onTalkEndOnce: () => {
console.log("播放句子完成");
},
}
);
console.log("完成时间:", Date.now());
}
}
talk(texts);
// async function talk(texts) {
// // 轮播文本内容
// for (let i = 0; i < texts.length; i++) {
// await _this.plugin.human.talkAsync(
// texts[i].text,
// texts[i].gesture, {
// onTalkStartOnce: (playInfo) => {
// console.log("播放句子:", playInfo);
// },
// onTalkEndOnce: () => {
// console.log("播放句子完成");
// },
// }
// );
// console.log("完成时间:", Date.now());
// }
// }
// talk(texts);
},
onError: (res) => {
console.log(res)
}
})
// #ifdef MP-WEIXIN
// 内存告警处理
@@ -187,15 +189,36 @@ module.exports = {
methods: {
// // 模拟聊天回复接口
async getReply(text) {
return await this.mockReplies[Math.floor(Math.random() * this.mockReplies.length)]
await uni.request({
url: `${this.config.chatConfig.url}/1`,
method: 'POST',
data: {
"text": text,
"currentSceneInfo": {
"sceneId": ""
}
},
success: (res) => {
const replay = res.data.sceneInfo[0].audioText[0]
console.log(res)
console.log(res.data.sceneInfo[0])
this.messageList.push({
direction: 'rside',
text: text
})
console.log(this.messageList)
this.messageList.push({
direction: 'lside',
text: res.data.sceneInfo[0].audioText[0]
})
this.plugin.human?.talkAsync(replay)
this.$forceUpdate()
}
})
},
sendChat(e) {
this.getReply(e.detail.value)
},

async customChat(text) {
// // 调用自定义的api获取回复
const reply = await this.getReply(text)
// // 主动调用播放接口,并等待播放完成
await this.plugin.human?.talkAsync(reply)
console.log("回复完成");
}
}
}

+ 0
- 7
pages/index/personal.vue View File

@@ -81,8 +81,6 @@
</view>
</view>

<!-- 底部导航栏 -->
<!-- <u-tabbar :isBtnTop="false" :mid-button="true" activeColor="#1296db" inactiveColor="#999999" v-model="current" :list="tabbarList"></u-tabbar> -->
</view>
</template>

@@ -90,14 +88,9 @@
var app = getApp();
var util = require("../../utils/util.js");
var config = require("../../config");
import tabbarList from '@/utils/tabbar.js'
export default {
data() {
return {
// tabbar配置项
current: 0,
tabbarList: tabbarList,
//--- end --- tabbar配置项
name: "",
photo: "",
mobile: "",


+ 1
- 0
pages/mine/details2.vue View File

@@ -1788,6 +1788,7 @@
translateHtmlContent: this.messagelisy,
}
this.isshow2 = false;

this.dialogList[this.argtextindex2].onebest = this.textItself.replace(this.thewrongword, this.reswrongword)
this.cancelBeast()
this.$u.post("/corpus/addCorrectWord", parames).then(data => {


+ 0
- 343
sdk/webimSDK3.1.1.js
File diff suppressed because it is too large
View File


BIN
static/image/recordingIcon.png View File

Before After
Width: 92  |  Height: 124  |  Size: 3.4 KiB

BIN
static/image/servehead.png View File

Before After
Width: 384  |  Height: 384  |  Size: 32 KiB

BIN
static/image/textInput.png View File

Before After
Width: 144  |  Height: 144  |  Size: 1.4 KiB

BIN
static/image/voiceInput.png View File

Before After
Width: 144  |  Height: 144  |  Size: 1.4 KiB

BIN
static/image/voiceing.png View File

Before After
Width: 156  |  Height: 100  |  Size: 2.9 KiB

BIN
static/image/voiceplay.png View File

Before After
Width: 80  |  Height: 80  |  Size: 3.5 KiB

+ 0
- 48
store/index.js View File

@@ -5,8 +5,6 @@ Vue.use(Vuex)

export default new Vuex.Store({
state: {
bgAudioMannager: null, // 背景音频播放对象
isBgPlay: false, // 是否后台播放
messageObj: {}, //
},

@@ -16,51 +14,5 @@ export default new Vuex.Store({
setMessageObj(state, obj) {
state.messageObj = obj
},


createAudio(state) {
state.bgAudioMannager = uni.getBackgroundAudioManager();
},

setSeekAudio(state, t) {
state.bgAudioMannager.seek(t)
},

// 加载音频监听方法
initAudioMethod(state, obj) {
state.bgAudioMannager.onCanplay(() => {
state.bgAudioMannager.currentTime = obj.currentTime
});
state.bgAudioMannager.onStop(() => {
console.log('停止播放');
});

state.bgAudioMannager.onPause(() => {
console.log('暂停播放');
});
state.bgAudioMannager.onEnded(() => {
//初始化 需要的参数
console.log('自然播放结束事件');
});
state.bgAudioMannager.onError((res) => {
console.log(res.errMsg);
console.log(res.errCode);
});
},

// 停止全局音频播放
stopAduio(state) {
if (state.bgAudioMannager != null) {
if (state.bgAudioMannager.src != '') {
state.bgAudioMannager.src = ''
}
}
},


// 设置播放状态
setIsBgPlay(state, value) {
state.isBgPlay = value
}
},
})

+ 0
- 234
utils/WebIM.js View File

@@ -1,234 +0,0 @@
// import Strophe from "../sdk/libs/strophe";
//import xmldom from "../sdk/libs/xmldom/dom-parser";
// import websdk from "../sdk/sdk/src/connection";
import websdk from "../sdk/webimSDK3.1.1.js";
import config from "./WebIMConfig";
console.group = console.group || {};
console.groupEnd = console.groupEnd || {};
var window = {};
let WebIM = window.WebIM = websdk;
window.WebIM.config = config; //var DOMParser = window.DOMParser = xmldom.DOMParser;
//let document = window.document = new DOMParser().parseFromString("<?xml version='1.0'?>\n", "text/xml");

WebIM.isDebug = function (option) {
if (option) {
WebIM.config.isDebug = option.isDebug;
openDebug(WebIM.config.isDebug);
}

function openDebug(value) {
function ts() {
var d = new Date();
var Hours = d.getHours(); // 获取当前小时数(0-23)

var Minutes = d.getMinutes(); // 获取当前分钟数(0-59)

var Seconds = d.getSeconds(); // 获取当前秒数(0-59)

return (Hours < 10 ? "0" + Hours : Hours) + ":" + (Minutes < 10 ? "0" + Minutes : Minutes) + ":" + (Seconds < 10 ? "0" + Seconds : Seconds) + " ";
} // if (value) {
// Strophe.Strophe.Connection.prototype.rawOutput = function(data){
// try{
// console.group("%csend # " + ts(), "color: blue; font-size: large");
// console.log("%c" + data, "color: blue");
// console.groupEnd();
// }
// catch(e){
// console.log(e);
// }
// };
// }else{
// Strophe.Strophe.Connection.prototype.rawOutput = function(){};
// }

}
};
/**
* Set autoSignIn as true (autoSignInName and autoSignInPwd are configured below),
* You can auto signed in each time when you refresh the page in dev model.
*/


WebIM.config.autoSignIn = false;

if (WebIM.config.autoSignIn) {
WebIM.config.autoSignInName = "lwz2";
WebIM.config.autoSignInPwd = "1";
} // var stropheConn = new window.Strophe.Connection("ws://im-api.easemob.com/ws/", {
// inactivity: 30,
// maxRetries: 5,
// pollingTime: 4500
// });
//
// stropheConn.connect(
// '$t$' + 'YWMtmbQEBKKIEeaGmMtXyg5n1wAAAVlkQvGO2WOJGlMCEJKM4VV9GCMnb_XLCXU',
// function() {
// console.log(arguments, 'ggogogo');
// }, stropheConn.wait, stropheConn.hold);


WebIM.parseEmoji = function (msg) {
if (typeof WebIM.Emoji === "undefined" || typeof WebIM.Emoji.map === "undefined") {
return msg;
}

var emoji = WebIM.Emoji,
reg = null;
var msgList = [];
var objList = [];

for (var face in emoji.map) {
if (emoji.map.hasOwnProperty(face)) {
while (msg.indexOf(face) > -1) {
msg = msg.replace(face, "^" + emoji.map[face] + "^");
}
}
}

var ary = msg.split("^");
var reg = /^e.*g$/;

for (var i = 0; i < ary.length; i++) {
if (ary[i] != "") {
msgList.push(ary[i]);
}
}

for (var i = 0; i < msgList.length; i++) {
if (reg.test(msgList[i])) {
var obj = {};
obj.data = msgList[i];
obj.type = "emoji";
objList.push(obj);
} else {
var obj = {};
obj.data = msgList[i];
obj.type = "txt";
objList.push(obj);
}
}

return objList;
};

WebIM.time = function () {
var date = new Date();
var Hours = date.getHours();
var Minutes = date.getMinutes();
var Seconds = date.getSeconds();
var time = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " + (Hours < 10 ? "0" + Hours : Hours) + ":" + (Minutes < 10 ? "0" + Minutes : Minutes) + ":" + (Seconds < 10 ? "0" + Seconds : Seconds);
return time;
};

WebIM.Emoji = {
map: {
"[):]": "ee_1.png",
"[:D]": "ee_2.png",
"[;)]": "ee_3.png",
"[:-o]": "ee_4.png",
"[:p]": "ee_5.png",
"[(H)]": "ee_6.png",
"[:@]": "ee_7.png",
"[:s]": "ee_8.png",
"[:$]": "ee_9.png",
"[:(]": "ee_10.png",
"[:'(]": "ee_11.png",
"[<o)]": "ee_12.png",
"[(a)]": "ee_13.png",
"[8o|]": "ee_14.png",
"[8-|]": "ee_15.png",
"[+o(]": "ee_16.png",
"[|-)]": "ee_17.png",
"[:|]": "ee_18.png",
"[*-)]": "ee_19.png",
"[:-#]": "ee_20.png",
"[^o)]": "ee_21.png",
"[:-*]": "ee_22.png",
"[8-)]": "ee_23.png",
"[del]": "btn_del.png",
"[(|)]": "ee_24.png",
"[(u)]": "ee_25.png",
"[(S)]": "ee_26.png",
"[(*)]": "ee_27.png",
"[(#)]": "ee_28.png",
"[(R)]": "ee_29.png",
"[({)]": "ee_30.png",
"[(})]": "ee_31.png",
"[(k)]": "ee_32.png",
"[(F)]": "ee_33.png",
"[(W)]": "ee_34.png",
"[(D)]": "ee_35.png"
}
};
WebIM.EmojiObj = {
// 相对 emoji.js 路径
map1: {
"[):]": "ee_1.png",
"[:D]": "ee_2.png",
"[;)]": "ee_3.png",
"[:-o]": "ee_4.png",
"[:p]": "ee_5.png",
"[(H)]": "ee_6.png",
"[:@]": "ee_7.png"
},
map2: {
"[:s]": "ee_8.png",
"[:$]": "ee_9.png",
"[:(]": "ee_10.png",
"[:'(]": "ee_11.png",
"[<o)]": "ee_12.png",
"[(a)]": "ee_13.png",
"[8o|]": "ee_14.png"
},
map3: {
"[8-|]": "ee_15.png",
"[+o(]": "ee_16.png",
"[|-)]": "ee_17.png",
"[:|]": "ee_18.png",
"[*-)]": "ee_19.png",
"[:-#]": "ee_20.png",
"[del]": "del.png"
},
map4: {
"[^o)]": "ee_21.png",
"[:-*]": "ee_22.png",
"[8-)]": "ee_23.png",
"[(|)]": "ee_24.png",
"[(u)]": "ee_25.png",
"[(S)]": "ee_26.png",
"[(*)]": "ee_27.png"
},
map5: {
"[(#)]": "ee_28.png",
"[(R)]": "ee_29.png",
"[({)]": "ee_30.png",
"[(})]": "ee_31.png",
"[(k)]": "ee_32.png",
"[(F)]": "ee_33.png",
"[(W)]": "ee_34.png",
"[(D)]": "ee_35.png"
},
map6: {
"[del]": "del.png"
}
}; // wx.connectSocket({url: WebIM.config.xmppURL, method: "GET"})

WebIM.conn = new WebIM.connection({
appKey: WebIM.config.appkey,
isMultiLoginSessions: WebIM.config.isMultiLoginSessions,
https: typeof WebIM.config.https === "boolean" ? WebIM.config.https : location.protocol === "https:",
url: WebIM.config.xmppURL,
apiUrl: WebIM.config.apiURL,
isAutoLogin: false,
heartBeatWait: WebIM.config.heartBeatWait,
autoReconnectNumMax: WebIM.config.autoReconnectNumMax,
autoReconnectInterval: WebIM.config.autoReconnectInterval
}); // async response
// WebIM.conn.listen({
// onOpened: () => dispatch({type: Types.ON_OPEND})
// })
// export default WebIM;

module.exports = {
"default": WebIM
};

+ 0
- 90
utils/WebIMConfig.js View File

@@ -1,90 +0,0 @@
/**
* git do not control webim.config.js
* everyone should copy webim.config.js to webim.config.js
* and have their own configs.
* In this way , others won't be influenced by this config while git pull.
*
*/
// for react native
let location = {
protocol: "https"
};
let config = {
/*
* XMPP server
*/
// xmppURL: "wss://im-api.easemob.com/ws/", //小程序2.0sdk线上环境
// xmppURL: "wss://im-api-hsb.easemob.com/ws/", //小程序2.0sdk沙箱环境
// xmppURL: 'wss://im-api-new-hsb.easemob.com/websocket', //小程序沙箱环境
xmppURL: 'wss://im-api-wechat.easemob.com/websocket',
//小程序线上环境

/*
* Backend REST API URL
*/
// apiURL: (location.protocol === 'https:' ? 'https:' : 'http:') + '//a1.easemob.com',
apiURL: "https://a1.easemob.com",
// 线上环境
// apiURL: "https://a1-hsb.easemob.com", // 沙箱环境
// apiURL: 'https://172.17.3.155:8080',

/*
* Application AppKey
*/
appkey: "1106191017019057#qufang",

/*
* Whether to use HTTPS '1177161227178308#xcx'
* @parameter {Boolean} true or false
*/
https: false,

/*
* isMultiLoginSessions
* true: A visitor can sign in to multiple webpages and receive messages at all the webpages.
* false: A visitor can sign in to only one webpage and receive messages at the webpage.
*/
isMultiLoginSessions: true,

/**
* Whether to use window.doQuery()
* @parameter {Boolean} true or false
*/
isWindowSDK: false,

/**
* isSandBox=true: xmppURL: 'im-api.sandbox.easemob.com', apiURL: '//a1.sdb.easemob.com',
* isSandBox=false: xmppURL: 'im-api.easemob.com', apiURL: '//a1.easemob.com',
* @parameter {Boolean} true or false
*/
isSandBox: false,

/**
* Whether to console.log in strophe.log()
* @parameter {Boolean} true or false
*/
isDebug: false,

/**
* will auto connect the xmpp server autoReconnectNumMax times in background when client is offline.
* won't auto connect if autoReconnectNumMax=0.
*/
autoReconnectNumMax: 15,

/**
* the interval secons between each atuo reconnectting.
* works only if autoReconnectMaxNum >= 2.
*/
autoReconnectInterval: 2,

/**
* webrtc supports WebKit and https only
*/
isWebRTC: false,

/*
* Set to auto sign-in
*/
isAutoLogin: true
};
export default config;

+ 0
- 23
utils/subutil.js View File

@@ -1,23 +0,0 @@
var sub = function (val, lengths) {
var length_val = val.length + '';

if (length_val == 0 || val == undefined) {
return;
}

if (length_val > lengths) {
return val.substring(0, lengths) + "...";
} else {
return val;
}
};

var subMore = function (val, lengths) {
var val = val + '';
return val.substring(0, lengths);
};

module.exports = {
sub: sub,
subMore: subMore
};

+ 0
- 32
utils/tabbar.js View File

@@ -1,32 +0,0 @@
export default [{
"pagePath": "/pages/index/customer",
"iconPath": "/static/images/tabBar/jiedai.png",
"selectedIconPath": "/static/images/tabBar/jiedaiActive.png",
"text": "接待"
},
{
"pagePath": "/pages/index/consumer/index",
"iconPath": "/static/images/tabBar/kehu.png",
"selectedIconPath": "/static/images/tabBar/kehuActive.png",
"text": "客户"
},
{
"pagePath": "/pages/index/index",
"iconPath": "/static/images/tabBar/work.png",
"selectedIconPath": "/static/images/tabBar/workActive.png",
"midButton": true,
"text": "工作台"
},
{
"pagePath": "/pages/index/learning",
"iconPath": "/static/images/tabBar/xuexi.png",
"selectedIconPath": "/static/images/tabBar/xuexiActive.png",
"text": "学习"
},
{
"pagePath": "/pages/index/personal",
"iconPath": "/static/images/tabBar/me.png",
"selectedIconPath": "/static/images/tabBar/meActive.png",
"text": "我的"
}
];

+ 2
- 4
utils/util.js View File

@@ -1,4 +1,3 @@
let WebIM = uni.WebIM = require("./WebIM.js")["default"];
import * as CryptoJS from '../components/crypto-js'
function formatLongTime(mss) {
var days = parseInt(mss / (1000 * 60 * 60 * 24));
@@ -474,7 +473,7 @@ function getRequest(url, params, callback) {
}
}
}); // WebIM.conn.close();
});
return false;
}
@@ -551,8 +550,7 @@ function getRequestPromise(url, params, isNone,option) {
}
}

}); // WebIM.conn.close();

});
return false;
} else if (result.data.code == '60001') {
//已录入客户


Loading…
Cancel
Save