Files
2025-07-07 16:05:18 +08:00

152 lines
4.4 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="shareList">
<view class="shareCard" v-for="share in shareList" :key="share.id">
<image src="/static/close.png" mode="aspectFit" class="closeIcon" @click="() => handleRemoveShareRecord(share)"></image>
<text class="shareName">{{ share.name }}</text>
<view class="shareCodeContent">
<l-qrcode :value="composeLink(share.share_code)" :size="94" :marginSize="1" bgColor="#fff" />
</view>
<view class="shareLinkWrapper">
<view class="shareLink">
{{ composeLink(share.share_code) }}
<CopyIcon :value="composeLink(share.share_code)" :size="16" />
</view>
<view class="shareLink">
{{ $t('form.shareCode.label') }}{{ share.share_code }}
<CopyIcon :value="share.share_code" :size="16" />
</view>
</view>
<view class="btnWrapper">
<button class="primaryButton downloadMore" @click="() => downloadMoreSize(share.share_code)">{{ $t('partner.promotionLink.downloadMoreSize') }}</button>
<button v-if="share.img_url" class="secondaryButton downloadMore" @click="() => downloadMaterial(share.img_url)">下载推广设计素材</button>
</view>
</view>
<view class="addShareLink">
<image @click="() => createShareLink()" src="/static/user/add.png" mode="aspectFit" style="width: 47px; height: 47px"></image>
<text>{{ $t('partner.promotionLink.addLink') }}</text>
</view>
<view class="materialCard" v-for="sysShare in sysShareList" :key="sysShare.id">
<image :src="sysShare.img_url?.split(',')?.[0]" mode="aspectFit" class="sysShareImg"></image>
<view class="materialCardBottom">
<text @click="() => createShareLink(sysShare)">{{ $t('partner.promotionLink.getLink') }}</text>
<div class="divider"></div>
<text @click="() => downloadMaterial(sysShare.img_url)">{{ $t('partner.promotionLink.downloadMaterials') }}</text>
</view>
</view>
</view>
</template>
<script>
import { getShareRecord, getSysShareList, removeShareRecord } from '@/services/partner/promotionLink.ts';
export default {
name: 'PromotionLink',
props: {
visible: {
type: Boolean,
required: true,
default: false
}
},
data() {
return {
currentShareCode: undefined,
shareList: [],
sysShareList: [],
image: undefined
};
},
methods: {
composeLink(shareCode) {
// #ifdef H5
return `${window.location.origin ?? 'https://user.htfx.co'}/api/promotion/${shareCode}`;
// #endif
// #ifndef H5
return `https://user.htfx.co/api/promotion/${shareCode}`;
// #endif
},
async getShareRecordData() {
const res = await getShareRecord();
if (res && res.code === 0) {
this.shareList = res.data;
}
},
async getSysShareListData() {
const res = await getSysShareList();
if (res && res.code === 0) {
this.sysShareList = res.data;
}
},
showDetailDialog() {
this.$refs.alertDialog.open();
},
closeDetailDialog() {
this.$refs.alertDialog.close();
},
createShareLink(sysShare) {
if (sysShare) {
uni.navigateTo({
url: `/pages/partner/createShareLink/index?sysId=${sysShare.id}&imgUrls=${sysShare.img_url}`
});
} else {
uni.navigateTo({
url: '/pages/partner/createShareLink/index'
});
}
},
handleRemoveShareRecord(share) {
uni.showModal({
content: this.$t('shareLink.confirmRemove'),
confirmColor: '#4DC0E5',
success: async (res) => {
if (res.confirm) {
const resp = await removeShareRecord({ id: share.id });
if (resp.code == 0) {
this.$nextTick(() => {
this.$cusModal.showModal({
type: 'message',
status: 'success',
contentText: this.$t('common.success.action')
});
})
this.getShareRecordData();
this.getSysShareListData();
} else {
this.$nextTick(() => {
this.$cusModal.showModal({
type: 'message',
status: 'warning',
contentText: resp.msg ?? this.$t('common.error.sysError')
});
})
}
}
}
});
},
downloadMoreSize(shareCode) {
uni.navigateTo({
url: `/pages/partner/downloadMoreSize/index?shareCode=${shareCode}`
});
},
downloadMaterial(imgUrl) {
uni.navigateTo({
url: `/pages/partner/downloadMaterial/index?imgUrl=${imgUrl}`
});
}
},
watch: {
visible(newValue, oldValue) {
if (newValue) {
this.getShareRecordData();
this.getSysShareListData();
}
}
}
};
</script>
<style lang="scss" scoped>
@import './index.scss';
</style>