|
@@ -16,7 +16,7 @@ import iconDownload from './images/icon-download.png';
|
|
|
import iconFirend from './images/icon-friend.png';
|
|
|
import iconWeChat from './images/icon-wechat.png';
|
|
|
import iconFriendRing from './images/icon-friend-ring.png';
|
|
|
-// import iconLink from './images/icon-link.png';
|
|
|
+import iconLink from './images/icon-link.png';
|
|
|
import iconLogo from './images/icon-logo.png';
|
|
|
import shareBg from './images/share-bg.png';
|
|
|
import audioPan from '../images/audio-pan.png';
|
|
@@ -39,7 +39,8 @@ export default defineComponent({
|
|
|
const canvasRef = ref();
|
|
|
const state = reactive({
|
|
|
saveLoading: false,
|
|
|
- image: null as any
|
|
|
+ image: null as any,
|
|
|
+ url: ''
|
|
|
});
|
|
|
const saveImg = async () => {
|
|
|
showLoadingToast({
|
|
@@ -63,10 +64,10 @@ export default defineComponent({
|
|
|
};
|
|
|
|
|
|
const onSaveWe = async (type: string) => {
|
|
|
- showLoadingToast({
|
|
|
- message: '图片生成中...',
|
|
|
- forbidClick: true
|
|
|
- });
|
|
|
+ // showLoadingToast({
|
|
|
+ // message: '图片生成中...',
|
|
|
+ // forbidClick: true
|
|
|
+ // });
|
|
|
setTimeout(() => {
|
|
|
state.saveLoading = false;
|
|
|
}, 100);
|
|
@@ -75,11 +76,14 @@ export default defineComponent({
|
|
|
content: {
|
|
|
title: '',
|
|
|
desc: '',
|
|
|
- image: state.image,
|
|
|
+ // image: state.image,
|
|
|
video: '',
|
|
|
- type: 'image',
|
|
|
+ type: 'link',
|
|
|
+ url: state.url,
|
|
|
+ thumb: props.musicDetail.img,
|
|
|
shareType: type
|
|
|
}
|
|
|
+ // 作品的封面图
|
|
|
});
|
|
|
if (res?.content?.status) {
|
|
|
showSuccessToast('分享成功');
|
|
@@ -95,43 +99,90 @@ export default defineComponent({
|
|
|
}
|
|
|
state.saveLoading = true;
|
|
|
// 判断是否已经生成图片
|
|
|
- if (state.image) {
|
|
|
- if (type) {
|
|
|
- onSaveWe(type);
|
|
|
+ onSaveWe(type);
|
|
|
+ // if (state.image) {
|
|
|
+ // if (type) {
|
|
|
+ // onSaveWe(type);
|
|
|
+ // } else {
|
|
|
+ // saveImg();
|
|
|
+ // }
|
|
|
+ // } else {
|
|
|
+ // const container: any = document.getElementById('shareContent');
|
|
|
+ // html2canvas(container, {
|
|
|
+ // allowTaint: true,
|
|
|
+ // useCORS: true,
|
|
|
+ // backgroundColor: null
|
|
|
+ // })
|
|
|
+ // .then(async canvas => {
|
|
|
+ // const url = canvas.toDataURL('image/png');
|
|
|
+ // state.image = url;
|
|
|
+ // if (type) {
|
|
|
+ // onSaveWe(type);
|
|
|
+ // } else {
|
|
|
+ // saveImg();
|
|
|
+ // }
|
|
|
+ // })
|
|
|
+ // .catch(() => {
|
|
|
+ // closeToast();
|
|
|
+ // state.saveLoading = false;
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ };
|
|
|
+
|
|
|
+ const copyText = (text: string) => {
|
|
|
+ // 数字没有 .length 不能执行selectText 需要转化成字符串
|
|
|
+ const textString = text.toString();
|
|
|
+ let input = document.querySelector('#copy-input') as HTMLInputElement;
|
|
|
+ if (!input) {
|
|
|
+ input = document.createElement('input');
|
|
|
+ input.id = 'copy-input';
|
|
|
+ input.readOnly = true; // 防止ios聚焦触发键盘事件
|
|
|
+ input.style.position = 'fixed';
|
|
|
+ input.style.left = '-1000px';
|
|
|
+ input.style.zIndex = '-1000';
|
|
|
+ // 为了处理,页面滑动到底部的问题
|
|
|
+ document.body.appendChild(input);
|
|
|
+ // document.querySelector('#input-copy-container')?.appendChild(input)
|
|
|
+ }
|
|
|
+
|
|
|
+ input.value = textString;
|
|
|
+ // ios必须先选中文字且不支持 input.select();
|
|
|
+ selectText(input, 0, textString.length);
|
|
|
+ console.log(document.execCommand('copy'), 'execCommand');
|
|
|
+ if (document.execCommand('copy')) {
|
|
|
+ document.execCommand('copy');
|
|
|
+ showToast('复制成功');
|
|
|
+ }
|
|
|
+ input.blur();
|
|
|
+
|
|
|
+ // input自带的select()方法在苹果端无法进行选择,所以需要自己去写一个类似的方法
|
|
|
+ // 选择文本。createTextRange(setSelectionRange)是input方法
|
|
|
+ function selectText(textbox: any, startIndex: any, stopIndex: any) {
|
|
|
+ if (textbox.createTextRange) {
|
|
|
+ //ie
|
|
|
+ const range = textbox.createTextRange();
|
|
|
+ range.collapse(true);
|
|
|
+ range.moveStart('character', startIndex); //起始光标
|
|
|
+ range.moveEnd('character', stopIndex - startIndex); //结束光标
|
|
|
+ range.select(); //不兼容苹果
|
|
|
} else {
|
|
|
- saveImg();
|
|
|
+ //firefox/chrome
|
|
|
+ textbox.setSelectionRange(startIndex, stopIndex);
|
|
|
+ textbox.focus();
|
|
|
}
|
|
|
- } else {
|
|
|
- const container: any = document.getElementById('shareContent');
|
|
|
- html2canvas(container, {
|
|
|
- allowTaint: true,
|
|
|
- useCORS: true,
|
|
|
- backgroundColor: null
|
|
|
- })
|
|
|
- .then(async canvas => {
|
|
|
- const url = canvas.toDataURL('image/png');
|
|
|
- state.image = url;
|
|
|
- if (type) {
|
|
|
- onSaveWe(type);
|
|
|
- } else {
|
|
|
- saveImg();
|
|
|
- }
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- closeToast();
|
|
|
- state.saveLoading = false;
|
|
|
- });
|
|
|
}
|
|
|
};
|
|
|
|
|
|
onMounted(() => {
|
|
|
const canvas = canvasRef.value;
|
|
|
+ state.url =
|
|
|
+ location.origin +
|
|
|
+ location.pathname +
|
|
|
+ '#/shareCreation?id=' +
|
|
|
+ props.musicDetail.id;
|
|
|
QRCode.toCanvas(
|
|
|
canvas,
|
|
|
- location.origin +
|
|
|
- location.pathname +
|
|
|
- '#/shareCreation?id=' +
|
|
|
- props.musicDetail.id,
|
|
|
+ state.url,
|
|
|
{
|
|
|
margin: 1
|
|
|
},
|
|
@@ -214,7 +265,10 @@ export default defineComponent({
|
|
|
icon={iconFriendRing}
|
|
|
text="朋友圈"
|
|
|
onClick={() => onSavePath('wechat_circle')}></GridItem>
|
|
|
- {/* <GridItem icon={iconLink} text="复制链接"></GridItem> */}
|
|
|
+ <GridItem
|
|
|
+ icon={iconLink}
|
|
|
+ text="复制链接"
|
|
|
+ onClick={() => copyText(state.url)}></GridItem>
|
|
|
</Grid>
|
|
|
|
|
|
<div
|