@tencentcloud/ai-desk-customer-wechat
Version:
AI Desk customer UIKit for wechat mini program
132 lines (131 loc) • 4.03 kB
JavaScript
;
const common_vendor = require("../../../../../common/vendor.js");
const aiDeskCustomerUniapp_adapterVue = require("../../../../adapter-vue.js");
const aiDeskCustomerUniapp_components_common_Toast_indexUniapp = require("../../../common/Toast/index-uniapp.js");
const common_assets = require("../../../../../common/assets.js");
if (!Math) {
Icon();
}
const Icon = () => "../../../common/Icon.js";
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "message-audio-uniapp",
props: {
broadcastNewAudioSrc: {},
messageItem: { default: () => ({}) },
content: { default: () => ({}) }
},
emits: ["getGlobalAudioContext", "setAudioPlayed"],
setup(__props, { emit: __emit }) {
const { onUnmounted, ref, watch } = aiDeskCustomerUniapp_adapterVue.vue;
const emits = __emit;
const props = __props;
const audioMap = /* @__PURE__ */ new Map();
const isAudioPlaying = ref(false);
onUnmounted(() => {
var _a;
const audioContext = getAudio();
if (isAudioPlaying.value) {
stopAudio();
}
(_a = audioContext == null ? void 0 : audioContext.destroy) == null ? void 0 : _a.call(audioContext);
audioMap.delete("audio");
});
watch(
() => props.broadcastNewAudioSrc,
(newSrc) => {
if (newSrc !== props.content.url && isAudioPlaying.value) {
stopAudio();
isAudioPlaying.value = false;
}
}
);
function toggleClick() {
emits("getGlobalAudioContext", audioMap, { newAudioSrc: props.content.url });
if (props.messageItem.hasRiskContent || !props.content.url) {
aiDeskCustomerUniapp_components_common_Toast_indexUniapp.Toast({
message: "暂不支持播放"
});
return;
}
const audioContext = getAudio();
if (!audioContext) {
audioMap.set("audio", common_vendor.index.createInnerAudioContext());
common_vendor.index.setInnerAudioOption({
obeyMuteSwitch: false
});
initAudioSrc();
}
toggleAudioPlayState();
}
function toggleAudioPlayState() {
if (!isAudioPlaying.value) {
playAudio();
} else {
stopAudio();
}
}
function initAudioSrc() {
const audioContext = getAudio();
if (!audioContext) {
return;
}
audioContext.src = props.content.url;
isAudioPlaying.value = false;
audioContext.onPlay(onAudioPlay);
audioContext.onStop(onAudioStop);
audioContext.onEnded(onAudioEnded);
audioContext.onError(onAudioError);
}
function playAudio() {
const audioContext = getAudio();
if (!audioContext) {
return;
}
audioContext.play();
if (props.messageItem.flow === "in") {
emits("setAudioPlayed", props.messageItem.ID);
}
}
function stopAudio() {
const audioContext = getAudio();
if (!audioContext) {
return;
}
try {
audioContext.stop();
} catch {
}
}
function onAudioPlay() {
isAudioPlaying.value = true;
}
function onAudioStop() {
isAudioPlaying.value = false;
}
function onAudioEnded() {
isAudioPlaying.value = false;
}
function onAudioError() {
console.warn("audio played error");
}
function getAudio() {
return audioMap.get("audio");
}
return (_ctx, _cache) => {
return {
a: common_vendor.unref(isAudioPlaying) ? 1 : "",
b: common_vendor.p({
width: "15px",
height: "20px",
file: common_vendor.unref(common_assets.audioIcon)
}),
c: common_vendor.t(props.content.second || 1),
d: `${props.content.second * 5}px`,
e: props.messageItem.flow === "out" ? 1 : "",
f: common_vendor.o(toggleClick)
};
};
}
});
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-46d96baa"]]);
wx.createComponent(Component);