Files
yimo-resource-blog/pages/tool/shuiyin.vue

424 lines
11 KiB
Vue
Raw Permalink Normal View History

2025-08-14 15:04:24 +08:00
<template>
<view class="content">
<view class="remove">
<view class="remove-title-clearButton">
<view class="remove-title">
<view class="remove-title-content">
<u--text bold size="18" color="#0081ff" text="快速去水印"></u--text>
</view>
<view class="remove-title-shadow">
<u--text bold color="#0081ff" text="SPEEDY"></u--text>
</view>
</view>
<view class="remove-clearButton">
<u--text @click="clearTextarea" text="清空"></u--text>
</view>
</view>
<view class="remove-textarea">
<u--textarea maxlength="180" border="none" height="140" v-model="input_url"
placeholder="请粘贴需要提取的视频/图集链接,支持抖音,快手,小红书,哔哩哔哩等 100+ 平台"></u--textarea>
</view>
<view class="remove-paste-submit-button">
<view class="remove-paste-button">
<u-button @click="pasteURL" type="primary" plain text="粘贴链接"></u-button>
</view>
<view class="remove-submit-button">
<u-button @click="getAnalysisDate" type="primary" text="立即解析"></u-button>
</view>
</view>
<view style="margin-top: 20rpx;" class="remove-question">
<view class="remove-question-black">
<u--text text="觉得好用点击右上角 “···” 分享给你的朋友吧!"></u--text>
</view>
</view>
<view class="remove-question">
<view class="remove-question-black">
<u--text text="有问题?请看"></u--text>
</view>
<view class="remove-question-blue">
<u--text decoration="underline" @click="jumpPage('/pages/tool/shuiyin/problem')" type="primary"
text="教程和问题"></u--text>
</view>
</view>
</view>
<view v-if="adUnitId" style="width: 96%; margin-top: 30rpx;margin-left: 2%;">
<ad-custom :unit-id="adUnitId" ad-intervals="30" ></ad-custom>
</view>
<!--广告确认弹窗-->
<view class="cu-modal" :class="modalName=='adModal'?'show':''">
<view style="border-radius: 30rpx;" class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view style="color: black;font-size: 38rpx;margin-top: 40rpx;" class="content">水印去除</view>
<view class="action" @tap="hideModal">
<text class="cuIcon-close text-red"></text>
</view>
</view>
<view class=" bg-white">
<view style="font-size: 33rpx;color: #6a6a6a;padding: 30rpx 60rpx 60rpx 60rpx;">
消耗 <text style="color: #3C9CFF;margin: 0 10rpx;">积分</text> 或者看 <text
style="color: #3C9CFF;margin: 0 10rpx;">视频广告</text> 之后自动获取,存储与传输成本很高不得已加入广告回回血
</view>
<button @tap="nowDownJf" style="margin-bottom: 30rpx;width: 35%;height: 70rpx;font-size: 30rpx;"
class="cu-btn bg-blue"><text style="margin-right: 15rpx;font-size: 30rpx;"
class="cuIcon-vip"></text> 消耗积分</button>
<button @tap="nowDownImg" style="margin-bottom: 40rpx;width: 35%;height: 70rpx;font-size: 30rpx;margin-left: 50rpx;"
class="cu-btn bg-blue"><text style="margin-right: 15rpx;font-size: 30rpx;"
class="cuIcon-recordfill"></text> 观看广告</button>
</view>
</view>
</view>
<u-toast ref="uToast"></u-toast>
</view>
</template>
<script>
let videoAd = null;
import {
delShuiYin,appGetUserById,exchangeResource,getConfigKey
} from "@/api/app/index.js"
export default {
data() {
return {
adUnitId: "",
adUnitId2: "",
isOpenAd: false,
videoAd_id: "",
interstitialAd_id: "",
input_url: "",
tabbarIndex: 1,
modalName: null,
needJf:6,
userId: null,
}
},
onShareAppMessage() {
return {
title: "图片视频水印快速去除支持抖音快手等100+平台",
imageUrl: "/static/appimg/share/shuiyin.jpg",
path: 'pages/tool/shuiyin',
}
},
onShareTimeline(){
return {
title:'图片视频水印快速去除支持抖音快手等100+平台',
query:{
},
imageUrl:'/static/appimg/share/shuiyin.jpg'
}
},
onLoad() {
this.adUnitId = uni.getStorageSync("sysSet").zyinfoAd
this.adUnitId2 = uni.getStorageSync("sysSet").downVideoAd
let _this = this;
this.userId = uni.getStorageSync("userInfo").userId
//获取公告
getConfigKey("miniapp.shuiyin.delintegral").then(response => {
_this.needJf = response.msg
}),
//初始化激励广告
this.CreateAd()
},
onShow() {
let _this = this;
},
methods: {
nowDownJf() {
let that = this;
this.modalName = null
uni.showModal({
title: '提示',
content: '确认要消耗 ' + that.needJf + " 积分兑换吗?",
success: function(res) {
if (res.confirm) {
// 执行确认后的操作
appGetUserById(that.userId).then(response => {
if (that.needJf > response.user.integral) {
uni.showModal({
title: '积分不足',
content: '您的积分为 '+response.user.integral+' ,签到做任务可获得积分',
cancelText: "取消",
confirmText: "获取积分",
confirmColor:'#ff0000',
cancelColor:'#000000',
success: function(res) {
if (res.confirm) {
// 执行确认后的操作
uni.switchTab({
url: '/pages/mine/index'
});
}
else {
// 执行取消后的操作
}
}
})
} else {
var formData = {
source: '视频/图片水印解析',
isAdd: 1,
integralNumber: that.needJf,
userId: that.userId,
}
exchangeResource(formData).then(response => {
that.openYse()
})
}
})
} else {
// 执行取消后的操作
}
}
})
},
hideModal() {
this.modalName = null
},
nowDownImg() {
if (videoAd) {
videoAd.show().catch(() => {
// 失败重试
videoAd.load()
.then(() => videoAd.show())
.catch(err => {
console.error('激励视频 广告显示失败', err)
})
})
}
},
CreateAd() {
var that = this;
if (this.adUnitId2 != '') {
if (wx.createRewardedVideoAd) {
videoAd = wx.createRewardedVideoAd({
adUnitId: this.adUnitId2
})
videoAd.onLoad(() => {})
videoAd.onError((err) => {
that.$refs.uToast.show({
type: 'error',
title: '',
message: "请使用移动端设备访问",
icon: false
})
})
videoAd.onClose((res) => {
if (res && res.isEnded) {
this.modalName = null
that.openYse()
} else {
this.modalName = null
//that.openYse()
}
})
}
}
},
getStrUrl(s) {
var reg = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/g;
var reg = /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
s = s.match(reg);
return (s && s.length ? s[0] : null);
},
openYse() {
let _this = this;
uni.showLoading({
title: '解析中...',
mask: true
});
let getUrl = _this.getStrUrl(_this.input_url)
delShuiYin({
url: getUrl
}).then(response => {
var dataMsg = JSON.parse(response.msg)
uni.hideLoading()
if (dataMsg.code != 200) {
uni.showModal({
title: '提示',
content: dataMsg.msg,
showCancel: false,
confirmText: "确定",
success: function(res) {
if (res.confirm) {
// 执行确认后的操作
}
else {
// 执行取消后的操作
}
}
})
} else {
var antoInfo = dataMsg.data.data_info
if (antoInfo.code != 200) {
uni.showToast({
title: antoInfo.msg,
icon: 'none',
duration: 4000
});
}else{
uni.setStorageSync("analysisData", antoInfo)
_this.input_url = ''
if (antoInfo.pics == "") {
_this.jumpPage("/pages/tool/shuiyin/video")
} else {
_this.jumpPage("/pages/tool/shuiyin/image")
}
}
}
})
},
getAnalysisDate() {
let _this = this;
if (_this.input_url == "" || _this.input_url == null) {
uni.showToast({
title: '请填写内容后解析哦!',
icon: 'none',
duration: 2000
});
} else {
let getUrl = _this.getStrUrl(_this.input_url)
if (getUrl == null) {
uni.showToast({
title: '糟糕!您填写的内容找不到解析地址,无法解析!',
icon: 'none',
duration: 2000
});
_this.input_url = ''
return;
}
_this.modalName = 'adModal'
}
},
pasteURL() {
let _this = this;
uni.getClipboardData({
success: function(res) {
// console.log(res.data)
_this.input_url = res.data
},
fail(e) {
console.log(e)
}
})
},
clearTextarea() {
let _this = this;
uni.showModal({
title: '提示',
content: '确定要清空当前输入框吗?',
success: res => {
if (res.confirm) {
_this.input_url = ""
}
}
})
},
jumpPage(url) {
this.$tab.navigateTo(url)
}
}
}
</script>
<style lang="scss">
page {
background-color: $u-bg-color;
}
.remove {
padding: 20rpx 20rpx 20rpx 20rpx;
}
.remove-title-clearButton {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.remove-textarea {
margin-top: 30rpx;
border-radius: 25rpx;
background-color: #f8f8f8;
box-shadow: 0px 5px 5px 0px #EDEDED;
}
.remove-clearButton {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.remove-title {
position: relative;
}
.remove-title-shadow {
position: absolute;
bottom: -20rpx;
font-style: italic;
opacity: 0.4;
padding-left: 10rpx;
}
.u-textarea[data-v-09988a29] {
border-radius: 12px;
background-color: #fff;
position: relative;
display: flex;
flex-direction: row;
flex: 1;
padding: 9px;
}
.remove-paste-submit-button {
padding-top: 35rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
}
.remove-paste-button,
.remove-submit-button {
width: 45%;
box-shadow: 3px 3px 4px rgba(0, 102, 204, 0.2);
}
.remove-question {
width: 100%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding-top: 10rpx;
}
.remove-question-black {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding-right: 10rpx;
}
.remove-question-blue {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.ad-show {
width: 100%;
padding-top: 30rpx;
}
</style>