Files
yimo-resource-blog/pages/tool/shuiyin.vue
王鹏 a47c6dd47a init
2025-08-14 15:04:24 +08:00

424 lines
11 KiB
Vue
Raw 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="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>