-
Notifications
You must be signed in to change notification settings - Fork 211
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
ryan
committed
Mar 4, 2025
1 parent
766aeb1
commit 99d0909
Showing
11 changed files
with
459 additions
and
33 deletions.
There are no files selected for viewing
2 changes: 2 additions & 0 deletions
2
...m/tcb-agent-ui/miniprogram/components/agent-ui/feedback/imgs/star-highlight.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions
2
miniprogram/tcb-agent-ui/miniprogram/components/agent-ui/feedback/imgs/star.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
277 changes: 277 additions & 0 deletions
277
miniprogram/tcb-agent-ui/miniprogram/components/agent-ui/feedback/index.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,277 @@ | ||
// pages/components/feedback/index.js | ||
Component({ | ||
|
||
/** | ||
* 组件的属性列表 | ||
*/ | ||
properties: { | ||
isShowFeedback: { | ||
type: Boolean, | ||
value: false | ||
}, | ||
feedbackRecordId: { | ||
type: String, | ||
value: '' | ||
}, | ||
feedbackType: { | ||
type: String, | ||
value: '' | ||
}, | ||
botId: { | ||
type: String, | ||
value: '' | ||
}, | ||
input: { | ||
type: String, | ||
value: "" | ||
}, | ||
aiAnswer: { | ||
type: String, | ||
value: '' | ||
} | ||
}, | ||
|
||
/** | ||
* 组件的初始数据 | ||
*/ | ||
data: { | ||
upVote: [ | ||
{ | ||
"selected": false, | ||
"value": "准确有效" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "回答全面" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "立场正确" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "格式规范" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "专业性强" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "富有创意" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "表达清晰" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "值得信赖" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "高效" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "满意" | ||
} | ||
], | ||
downVote: [ | ||
{ | ||
"selected": false, | ||
"value": "理解错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "未识别问题" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "事实错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "推理错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "内容不完整" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "不专业" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "违法有害" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "格式错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "乱码" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "内容重复" | ||
} | ||
], | ||
score: 5, | ||
message: "" | ||
}, | ||
observers:{ | ||
"feedbackType":function (value) { | ||
this.setData({score:value==='upvote'?5:1}) | ||
} | ||
}, | ||
/** | ||
* 组件的方法列表 | ||
*/ | ||
methods: { | ||
reset: function () { | ||
this.setData({ | ||
upVote: [ | ||
{ | ||
"selected": false, | ||
"value": "准确有效" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "回答全面" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "立场正确" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "格式规范" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "专业性强" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "富有创意" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "表达清晰" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "值得信赖" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "高效" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "满意" | ||
} | ||
], | ||
downVote: [ | ||
{ | ||
"selected": false, | ||
"value": "理解错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "未识别问题" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "事实错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "推理错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "内容不完整" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "不专业" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "违法有害" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "格式错误" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "乱码" | ||
}, | ||
{ | ||
"selected": false, | ||
"value": "内容重复" | ||
} | ||
], | ||
score: 5, | ||
message: "" | ||
}) | ||
}, | ||
onChangeScore: function (e) { | ||
const { score } = e.currentTarget.dataset | ||
this.setData({ score }) | ||
}, | ||
onSelect: function (e) { | ||
const { item } = e.currentTarget.dataset | ||
const newArr = [...this.data.feedbackType === 'upvote' ? this.data.upVote : this.data.downVote] | ||
const [selectedItem] = newArr.filter(i => i.value === item.value) | ||
selectedItem.selected = !selectedItem.selected | ||
if (this.data.feedbackType === 'upvote') { | ||
this.setData({ upVote: newArr }) | ||
} else { | ||
this.setData({ downVote: newArr }) | ||
} | ||
|
||
}, | ||
inputChange: function (e) { | ||
const value = e.detail.value | ||
this.setData({ message: value }) | ||
}, | ||
closeShowFeedback: function () { | ||
this.triggerEvent('close') | ||
}, | ||
submitFeedback: async function () { | ||
const res = await wx.cloud.extend.AI.bot.sendFeedback({ | ||
userFeedback: { | ||
botId: this.data.botId, | ||
recordId: this.data.feedbackRecordId, | ||
comment: this.data.message, | ||
rating: this.data.score, | ||
tags: this.data.feedbackType === 'upvote' ? this.data.upVote.filter(item => item.selected).map(item => item.value) : this.data.downVote.filter(item => item.selected).map(item => item.value), | ||
aiAnswer: this.data.aiAnswer, | ||
input: this.data.input, | ||
type: this.data.feedbackType === 'upvote' ? "upvote" : 'downvote', | ||
}, | ||
botId: this.data.botId | ||
}); | ||
if (res.status === 'success') { | ||
wx.showToast({ | ||
title: "感谢反馈", | ||
icon: "success", | ||
}); | ||
} else { | ||
wx.showToast({ | ||
title: "反馈失败", | ||
icon: "fail", | ||
}); | ||
} | ||
this.reset(); | ||
// console.log(res) | ||
this.triggerEvent("close") | ||
} | ||
} | ||
}) |
4 changes: 4 additions & 0 deletions
4
miniprogram/tcb-agent-ui/miniprogram/components/agent-ui/feedback/index.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"component": true, | ||
"usingComponents": {} | ||
} |
35 changes: 35 additions & 0 deletions
35
miniprogram/tcb-agent-ui/miniprogram/components/agent-ui/feedback/index.wxml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
<view class="feedback-modal" wx:if="{{isShowFeedback}}"> | ||
<view class="feedback"> | ||
<view class="feedback-header"> | ||
感谢您的宝贵反馈,我们会不断改进服务 | ||
</view> | ||
<view class="feedback-body"> | ||
<view class="item-box"> | ||
<view class="item-title">评分</view> | ||
<view style="display: flex; gap: 14rpx;"> | ||
<block wx:for="{{[1,2,3,4,5]}}" wx:key="*this"> | ||
<image src="{{item<=score?'./imgs/star-highlight.svg':'./imgs/star.svg'}}" mode="aspectFill" class="star" bind:touchend="onChangeScore" data-score="{{item}}" /> | ||
</block> | ||
</view> | ||
</view> | ||
<view class="item-box"> | ||
<view class="item-title">回答内容</view> | ||
<view> | ||
<block wx:for="{{feedbackType==='upvote'?upVote:downVote}}" wx:key="value"> | ||
<view class="{{item.selected?'vote-item-highlight':'vote-item-normal'}}" bind:tap="onSelect" data-item="{{item}}">{{item.value}}</view> | ||
</block> | ||
</view> | ||
</view> | ||
<view class="item-box"> | ||
<view class="item-title">反馈建议</view> | ||
<view> | ||
<textarea value="{{message}}" class="feedback-textarea" maxlength="140" bindinput="inputChange"/> | ||
</view> | ||
</view> | ||
</view> | ||
<view class="feedback-footer"> | ||
<view class="btn-cancel" bind:tap="closeShowFeedback">取消</view> | ||
<view class="btn-submit" bind:tap="submitFeedback">提交反馈</view> | ||
</view> | ||
</view> | ||
</view> |
Oops, something went wrong.