diff --git a/pages.json b/pages.json
index 576dcd8..f0a54f2 100644
--- a/pages.json
+++ b/pages.json
@@ -573,7 +573,7 @@
{
"path": "Ai/index",
"style": {
- "navigationBarTitleText": "AI管家",
+ "navigationBarTitleText": "行程规划",
"navigationBarBackgroundColor": "#f5f6fa"
}
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 4d5ad91..4a1a48f 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -326,8 +326,7 @@
};
},
onReady() {
- let menuButtonInfo = uni.getMenuButtonBoundingClientRect()
- console.log(menuButtonInfo.height, 'menuButtonInfo.height')
+ let menuButtonInfo = uni.getMenuButtonBoundingClientRect()
this.height = menuButtonInfo.height + menuButtonInfo.top;
},
onLoad(option) {
@@ -489,10 +488,7 @@
});
break;
case 'tousu':
- this.onTokenJump('/subPageB/suggest/sug_list?type=1', 'navigateTo')
- // uni.navigateTo({
- // url: "/subPageB/suggest/sug_list?type=1",
- // });
+ this.onTokenJump('/subPageB/suggest/sug_list?type=1', 'navigateTo')
break;
}
},
@@ -730,9 +726,11 @@
url: "/subPageA/Audiovisual/AudiovisualList/AudiovisualList",
});
} else if (type == "Ai") {
- uni.navigateTo({
- url: '/subPageC/Ai/index'
- });
+ this.judgeLogin((resa) => {
+ uni.navigateTo({
+ url: '/subPageC/Ai/index'
+ });
+ });
}
},
goToDetail: function(type, guid, region) {
diff --git a/subPageB/jiqiren/jiqiren/zhinengjiqiren.vue b/subPageB/jiqiren/jiqiren/zhinengjiqiren.vue
index 433634a..2d54875 100644
--- a/subPageB/jiqiren/jiqiren/zhinengjiqiren.vue
+++ b/subPageB/jiqiren/jiqiren/zhinengjiqiren.vue
@@ -1,7 +1,7 @@
+ title="AI管家" @clickLeft="back" />
{
- console.log('res.authSetting', res, res.authSetting)
- // 判断是否有相关权限属性
- console.log('判断是否有相关权限属性', res.authSetting.hasOwnProperty(
- 'scope.record'))
+ success: (res) => {
if (res.authSetting.hasOwnProperty('scope.record')) {
// 属性存在,且为false,用户拒绝过权限
console.log('属性存在,且为false,用户拒绝过权限', res.authSetting[_permission])
@@ -572,7 +567,7 @@
}
.jqr_dig_scroll {
- padding-bottom: 300rpx;
+
}
.jqr_tol_box {
diff --git a/subPageC/Ai/index.vue b/subPageC/Ai/index.vue
index 6594342..fc64108 100644
--- a/subPageC/Ai/index.vue
+++ b/subPageC/Ai/index.vue
@@ -6,17 +6,19 @@
-
E鹿小助手
-
+
+
{{item.content}}
-
@@ -35,7 +37,7 @@
- {{ recordStart ? '松开 发送' : '按住 说话' }}
@@ -46,7 +48,6 @@
-
@@ -58,12 +59,16 @@
mapMutations
} from "vuex";
export default {
- components:{ZeroMarkdownView},
+ components: {
+ ZeroMarkdownView
+ },
computed: {
...mapState(["PrimaryColor", "userInfo"])
},
data() {
return {
+ //公共路径
+ rootPath: this.$config.ROOTPATH,
content: '',
list: [{
content: "Hi,你好,E鹿小助手很高兴为您提供咨询服务。",
@@ -90,7 +95,10 @@
clientTime: 10000, // 客户端计时间隔
serverTimer: null, // 服务端计时
serverTime: 30000, // 服务端计时间隔
- }
+ },
+ //是否长按事件
+ islongPress: false,
+ timer: null, //长按计时器
}
},
onUnload() {
@@ -98,10 +106,11 @@
},
onShow() {
this.getUserInfo()
+ this.connectWs()
},
methods: {
// 用户信息
- getUserInfo() {
+ getUserInfo() {
this.querUserInfo = {
"message": "",
"dialogId": "",
@@ -138,7 +147,6 @@
$this.heartBeat();
// 处理消息
let data = JSON.parse(res.data);
- console.log("xinxi", data.content)
$this.handlerMessage(JSON.parse(data.content));
});
// ws关闭
@@ -151,7 +159,7 @@
this.wsInfo.ws.onError((err) => {
$this.wsInfo.alive = false;
$this.reConnect();
- console.log("ws连接错误:", res);
+ console.log("ws连接错误:", err);
});
},
// 心跳检测
@@ -176,7 +184,7 @@
}, $this.wsInfo.clientTime);
},
//发送消息
- handlerMessage(data) {
+ handlerMessage(data) {
if (data.context !== null) {
this.list[this.list.length - 1].content += data.context
}
@@ -209,33 +217,29 @@
// 发送消息
sendMsg() {
const $this = this
- this.judgeLogin((resa) => {
- this.getUserInfo()
- this.connectWs()
- this.list.push({
- content: this.content,
- userType: 'friend',
- })
-
- if (this.querUserInfo.identity == "") {
- this.querUserInfo.identity = this.generateRandomString(8);
- }
+ this.getUserInfo()
+ this.list.push({
+ content: this.content,
+ userType: 'friend',
+ })
- this.querUserInfo.message = this.content
- this.content = ''
- this.$Request.post(this.$config.aiSendMsg, $this.querUserInfo, "json", null, false, true)
- .then(res => {
- this.inputDisabled = true
- setTimeout(() => {
- $this.list.push({
- content: "",
- userType: 'self',
- })
- $this.scrollToBottom()
- }, 500)
- });
+ if (this.querUserInfo.identity == "") {
+ this.querUserInfo.identity = this.generateRandomString(8);
+ }
- });
+ this.querUserInfo.message = this.content
+ this.content = ''
+ this.$Request.post(this.$config.aiSendMsg, $this.querUserInfo, "json", null, false, true)
+ .then(res => {
+ this.inputDisabled = true
+ setTimeout(() => {
+ $this.list.push({
+ content: "",
+ userType: 'self',
+ })
+ $this.scrollToBottom()
+ }, 500)
+ });
},
//屏幕滚动
scrollToBottom() {
@@ -270,63 +274,100 @@
}
})
},
- //开启录音
- touchstart() {
- //开始录音
- const _permission = 'scope.record'
- uni.getSetting({
- success: (res) => {
- // 判断是否有相关权限属性
- if (res.authSetting.hasOwnProperty(_permission)) {
- // 属性存在,且为false,用户拒绝过权限
- if (!res.authSetting[_permission]) {
- this.authTips()
- } else {
- // 已授权
- this._recordAuth = true
- // 开始录音
- recorderManager.start({
- format: 'pcm',
- })
- recorderManager.onStart(() => {
- this.recordStart = true
- })
+ //长按事件
+ longpress() {
+ const $this = this
+ this.islongPress = true;
+ if (this.islongPress == true) {
+ //开始录音
+ const _permission = 'scope.record'
+ uni.getSetting({
+ success: (res) => {
+ if (res.authSetting.hasOwnProperty('scope.record')) {
+
+ if (!res.authSetting[_permission]) {
+ $this.authTips()
+ } else {
+ // 已授权
+ $this._recordAuth = true
+ // 开始录音
+ recorderManager.start({
+ format: 'pcm',
+ })
+ recorderManager.onStart(() => {
+ $this.recordStart = true
+ })
- // 错误回调
- recorderManager.onError((res) => {
- console.log('recorder error', res)
- uni.showToast({
- icon: 'none',
- title: '系统出错,请重试'
+ // 错误回调
+ recorderManager.onError((res) => {
+ console.log('recorder error', res)
+ uni.showToast({
+ icon: 'none',
+ title: '系统出错,请重试'
+ })
+ $this.recordStart = false
})
- this.recordStart = false
+ }
+ } else {
+ // 属性不存在,需要授权
+ console.log('属性不存在,需要授权')
+ uni.authorize({
+ scope: 'scope.record',
+ success: () => {
+ // 授权成功
+ $this._recordAuth = true
+ console.log('授权成功')
+ },
+ fail: (res) => {
+ console.log('// 未授权隐私协议', res.errno)
+ /**
+ * 104 未授权隐私协议
+ * 用户可能拒绝官方隐私授权弹窗,为了避免过度弹窗打扰用户,开发者再次调用隐私相关接口时,
+ * 若距上次用户拒绝不足10秒,将不再触发弹窗,直接给到开发者用户拒绝隐私授权弹窗的报错
+ */
+ if (res.errno == 104) {
+ uni.showModal({
+ title: '温馨提示',
+ content: '您拒绝了隐私协议,请稍后再试',
+ confirmText: '知道了',
+ showCancel: false,
+ success: () => {}
+ })
+ } else {
+ // 用户拒绝授权
+ console.log('// 用户拒绝授权')
+ $this.authTips()
+ }
+ }
})
}
- } else {
- // 属性不存在,需要授权
- uni.authorize({
- scope: _permission,
- success: () => {
- // 授权成功
- this._recordAuth = true
- },
- fail: (res) => {
- /**
- * 104 未授权隐私协议
- * 用户可能拒绝官方隐私授权弹窗,为了避免过度弹窗打扰用户,开发者再次调用隐私相关接口时,
- * 若距上次用户拒绝不足10秒,将不再触发弹窗,直接给到开发者用户拒绝隐私授权弹窗的报错
- */
- if (res.errno == 104) {
- uni.showModal({
- title: '温馨提示',
- content: '您拒绝了隐私协议,请稍后再试',
- confirmText: '知道了',
+ }
+ })
+ }
+ },
+ //开启麦克风权限
+ authTips() {
+ const $this = this
+ uni.showModal({
+ title: '提示',
+ content: '您拒绝了麦克风权限,将导致功能不能正常使用,去设置权限?',
+ confirmText: '去设置',
+ cancelText: '取消',
+ success: (res) => {
+ if (res.confirm) {
+ uni.openSetting({
+ success: (res) => {
+ if (res.authSetting['scope.record']) {
+ console.log("已授权麦克风");
+ $this._recordAuth = true
+ } else {
+ // 未授权
+ wx.showModal({
+ title: '提示',
+ content: '您未授权麦克风,功能将无法使用',
showCancel: false,
- success: () => {}
+ confirmText: '知道了'
})
- } else {
- // 用户拒绝授权
- this.authTips()
}
}
})
@@ -334,9 +375,22 @@
}
})
},
+ //开启录音
+ touchstart() {
+ const $this = this
+ this.timer = setTimeout(() => {
+ $this.longpress();
+ }, 200)
+ },
//停止录音
touchend() {
const $this = this
+ //延时执行为了防止 click() 还未判断 islongPress 的值就被置为 fasle
+ clearTimeout(this.timer);
+ setTimeout(() => {
+ this.islongPress = false
+ }, 200)
+
if (!this._recordAuth || !this.recordStart) return
//停止录音
recorderManager.stop();
@@ -345,9 +399,10 @@
duration,
tempFilePath
} = res
- this.recordStart = false
+ $this.recordStart = false
+
wx.uploadFile({
- url: 'http://192.168.130.157:48080/app-api/wechatshop/toolIdentify/identifySpeech',
+ url: $this.rootPath + '/app-api/wechatshop/toolIdentify/identifySpeech',
filePath: tempFilePath,
name: 'file',
formData: {
@@ -355,13 +410,19 @@
},
success: function(res) {
let data = JSON.parse(res.data)
- $this.list.push({
- content: data.data,
- audioSrc: tempFilePath,
- userType: 'self',
- messageType: 'voice'
- })
- $this.scrollToBottom()
+ console.log("dsfaD", data)
+ if (data.data) {
+ $this.content = data.data
+ $this.sendMsg()
+ } else {
+ wx.showModal({
+ title: '提示',
+ content: "没听清,请您再说一遍",
+ showCancel: false,
+ success: function(res) {}
+ });
+ }
+
},
fail: function(res) {
UTIL.log(res);
@@ -376,6 +437,20 @@
});
})
},
+ //点击事件
+ clickSprink() {
+ // 非长按
+ if (this.islongPress == false) {
+ wx.showModal({
+ title: '提示',
+ content: "说话时间太短",
+ showCancel: false,
+ success: function(res) {}
+ });
+ } else if (this.islongPress == true) {
+ console.log("长按事件");
+ }
+ },
//获取当前对话 key
generateRandomString(length) {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
@@ -401,6 +476,7 @@
/* #endif */
box-sizing: border-box;
top: 0;
+ padding-bottom: 60rpx;
}
.v-pages.Ai {
@@ -408,7 +484,7 @@
// background-repeat: no-repeat;
// background-position: top;
// background-size: cover;
- min-height: 50vh;
+
}
.v-ai-list {
@@ -423,6 +499,7 @@
.img {
width: 80rpx;
+ height: 80rpx;
}
}
@@ -556,4 +633,25 @@
}
}
}
+
+ .loading {
+ height: 40rpx;
+ }
+
+ .loading-dot {
+ display: inline-block;
+ width: 4px;
+ height: 4px;
+ border-radius: 4px;
+ background-color: #000;
+ animation: loading 1s infinite;
+ }
+
+ .loading-dot:nth-child(2) {
+ animation-delay: 0.2s;
+ }
+
+ .loading-dot:nth-child(3) {
+ animation-delay: 0.4s;
+ }
\ No newline at end of file
diff --git a/uni_modules/zero-markdown-view/components/zero-markdown-view/zero-markdown-view.vue b/uni_modules/zero-markdown-view/components/zero-markdown-view/zero-markdown-view.vue
index 00d1d7d..562bffa 100644
--- a/uni_modules/zero-markdown-view/components/zero-markdown-view/zero-markdown-view.vue
+++ b/uni_modules/zero-markdown-view/components/zero-markdown-view/zero-markdown-view.vue
@@ -1,8 +1,9 @@
+ :markdown="true" :content="html" v-if="html">
+
@@ -177,4 +178,18 @@
border-radius: 8rpx 16rpx 16rpx 16rpx;
background-color: #fff;
}
+ @keyframes loading {
+ 0% {
+ opacity: 0.2;
+ }
+ 20% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0.2;
+ }
+ }
+
+
+
\ No newline at end of file