|
|
- <template>
- <view class="promotionDetail">
- <!--顶部导航栏-->
- <navbar leftClick @leftClick="$utils.navigateBack" title="推广详情" />
-
- <!--主页面-->
- <view class="frame">
- <!--标题-->
- <view class="title">
- <span>推广基本信息</span>
- </view>
-
- <!--基本信息-->
- <view style="" class="basicInfo">
- <!-- <view class="item">
- <view class="label">推广名称</view>
- <view class="value">
- <uv-input v-model="form.promotionName" placeholder="请输入推广名称" border="bottom" type='number'
- clearable></uv-input>
- </view>
- </view> -->
- <view class="item">
- <view class="label">推广作品名称</view>
- <view class="value">{{item.name}}</view>
- </view>
- <!-- <view class="item">
- <view class="label">价格</view>
- <view class="value">{{item.price }}</view>
- </view>
- <view class="item">
- <view class="label">时长</view>
- <view class="value">{{item.tuTime}}</view>
- </view>
- <view class="item">
- <view class="label">联系方式</view>
- <view class="value">
- <uv-input v-model="item.phone" placeholder="请输入联系方式" border="bottom" type='number'
- clearable></uv-input>
- </view>
- </view> -->
- <view class="item">
- <view class="label">剩余推广时长</view>
- <view class="value">{{item.remainingPromotionTime}}</view>
- </view>
-
-
- <!-- <view>推广作品</view>
- <view style="width: 30%;height: 300rpx;border-radius: 20rpx;overflow: hidden;">
- <image :src="item.image" style="width: 100%;height: 100%;"></image>
- </view> -->
- </view>
-
-
-
-
- <!-- ActionSheet 操作菜单 -->
- <uv-action-sheet ref="actionSheet" :actions="upTopList" title="选择推广时长" @select="select" @close="close"
- :closeOnClickAction="false">
- </uv-action-sheet>
-
- <!--确认发布弹框-->
- <uv-popup ref="popup" mode="center" custom-style="height: 400rpx;">
- <view class="content">
- <view class="title">
- 推广选项
- </view>
- <!--付费周期-->
- <view style="" class="payCycle">
- <view>付费周期</view>
- <view>{{popupData.day}}天</view>
- </view>
-
- <!--金额-->
- <view style="width:100%;display: flex;justify-content: space-between;align-items: center;">
- <view>金额</view>
- <view>¥{{popupData.money}}</view>
- </view>
-
- <!--确认推广按钮-->
- <view class="confirmBottom">
- <button @click="confirmPromotion" class="confirmBtn">
- 确认推广
- </button>
- </view>
- </view>
- </uv-popup>
-
- <!--支付弹框-->
- <confirmationPopup ref="confirmationPopup" title="提示" @confirm="payOrder" confirmText="确认支付">
- <view class="confirmationPopup">
- <image src="/static/image/publish/pay.png" style="width: 150rpx;height: 150rpx;" mode=""></image>
- <view class="info">
- 确认支付{{ popupData.money }}元,可置顶{{ popupData.day }}天
- </view>
- </view>
- </confirmationPopup>
-
- <!-- 平台审核弹框 -->
- <confirmationPopup ref="confirmationPopupUpload" title="提示" confirmText="确认" @confirm="confirm()">
- <view class="confirmationPopup">
- <image src="/static/image/publish/upload.png" style="width: 150rpx;height: 150rpx;" mode=""></image>
- <view class="info">
- 已由平台进行审核,时间周期为24小时
- </view>
- </view>
- </confirmationPopup>
- </view>
-
- <!--继续推广按钮-->
- <button @click="continueToPromotion" class="bottomBtn">
- 继续推广
- </button>
- </view>
- </template>
-
- <script>
- import dayjs from 'dayjs';
- import '../../../../common.css'; // 引入公共 CSS 文件
- import confirmationPopup from '@/components/toast/confirmationPopup.vue'
- export default {
- onLoad(options) {
- // if (options.item) {
- // let item = JSON.parse(decodeURIComponent(options.item));
- // }
- console.log(options.id,"opID");
- this.item.id = options.id
- },
- components: {
- confirmationPopup
- },
- data() {
- return {
- upTopList: [],
- payList: [],
- payId: null,
- item: {
- day: 0,
- money: 0,
- },
- popupData: {
- day: 0,
- money: 0,
- },
- param: {
- type: 'default',
- title: '结束后跳转标签页',
- message: "推广成功",
- url: '/pages/componentsD/tag/tag'
- }
- };
- },
- mounted() {
- this.getData()
- this.indexTopPayList()
- },
- methods: {
- // 获取推广详情数据
- getData() {
- this.$api('infoGetPromotionDetail', {
- id: this.item.id
- }, res => {
- if (res.code == 200) {
- console.log(res.result,"res.result");
- this.item = res.result
-
- // 计算推广时间加上置顶时间
- const futureTime = dayjs(this.item.createTime).add(this.item.tuTime, "day")
-
- // 获取当前时间
- const now = dayjs();
-
- // 计算两个时间之间的差异(毫秒)
- const diff = futureTime.diff(now);
-
- // 将毫秒转换为小时和天
- const hours = Math.floor(diff / 3600000);
- const days = Math.floor(hours / 24);
-
- // 根据时间差显示不同的格式
- if (days > 0) {
- // 超过24小时
- const remainingHours = hours % 24;
- console.log(`${days}天${remainingHours}小时`);
- this.item.remainingPromotionTime = `${days}天${remainingHours}小时`
- } else {
- // 没有超过24小时
- console.log(`${hours}小时`);
- this.item.remainingPromotionTime = `${hours < 0 ? 0 : hours}小时`
- }
- }
- })
- },
-
- // 获取置顶方式
- indexTopPayList() {
- this.$api('indexTopPayList', res => {
- if (res.code == 200) {
- for (var i = 0; i < res.result.length; i++) {
- this.payList = res.result
- this.upTopList.push({
- name: '置顶' + res.result[i].day + '天' + res.result[i].money + '元'
- })
- }
- }
- })
- },
-
- select(e) {
- console.log('选中该项:', e);
- // 使用正则表达式匹配整数和浮点数
- const matches = e.name.match(/(\d+\.?\d*)/g).map(Number);
-
- // 如果匹配到数字,则输出
- if (matches && matches.length >= 2) {
- // console.log(matches, "matches");
- for (var i = 0; i < this.payList.length; i++) {
- if (this.payList[i].day == matches[0]) {
- this.payId = this.payList[i].id
- }
- }
-
-
- // 提取天数和金额
- this.popupData.day = matches[0]; // 例如,置顶天数
- this.popupData.money = matches[1]; // 例如,金额
- this.$refs.actionSheet.close() //关闭弹框
- this.$refs.popup.open() //打开另外一个弹框
- }
- },
-
- // ActionSheet 操作菜单关闭
- close() {
- this.$refs.actionSheet.close() //关闭弹框
- // this.$refs.popup.open() //打开另外一个弹框
- },
-
- // 提交平台审核的弹框的确认回调
- confirm(e) {
- uni.navigateTo({
- url: "/pages/index/index"
- })
- },
- // 继续推广按钮
- continueToPromotion() {
- if (this.item.phone == '' || this.item.phone == null) {
- return uni.showToast({
- title: '请输入联系电话',
- icon: 'none'
- })
- }
- this.$refs.actionSheet.open();
- },
-
- // 确认发布弹框
- confirmPromotion() {
- this.$refs.confirmationPopup.open()
- this.$refs.popup.close()
- },
-
-
- // 发起支付
- payOrder() {
- let self = this
-
- console.log(self.item.id, "self.item.id");
- let data = {
- id: self.item.id,
- dayId: self.payId
- }
-
-
- self.$api('confirmPromotion', data,
- res => {
- console.log(res,"res");
- if (res.code == 200) {
- uni.requestPayment({
- provider: 'wxpay', // 服务提提供商
- timeStamp: res.result.timeStamp, // 时间戳
- nonceStr: res.result.nonceStr, // 随机字符串
- package: res.result.packageValue,
- signType: res.result.signType, // 签名算法
- paySign: res.result.paySign, // 签名
- success: function(res) {
- console.log('支付成功', res);
- self.$refs.confirmationPopupUpload.open()
- // self.$refs.confirmationPopup.close()
- },
- fail: function(err) {
- console.log('支付失败', err);
- self.$refs.confirmationPopup.close()
- uni.showToast({
- icon: 'none',
- title: "支付失败"
- })
- }
- });
-
- }
- })
-
- },
-
- }
- }
- </script>
-
- <style lang="scss" scoped>
- * {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- }
-
- .promotionDetail {
- width: 100vw;
- height: 100vh;
-
- .frame {
- width: 100%;
- //height: calc(100vh - 220rpx);
- padding: 28rpx 28rpx 0 28rpx;
-
- .title {
- font-size: 36rpx;
- font-weight: 600;
- }
-
- .basicInfo {
- display: flex;
- flex-direction: column;
- gap: 60rpx;
- margin-top: 50rpx;
- width: 90%;
-
- .item {
- display: flex;
- justify-content: space-between;
-
- .label {
- width: 60%;
- }
-
- .value {
- width: 40%;
- text-align: right;
- }
- }
- }
-
- .bottom {
- position: fixed;
- bottom: 30rpx;
- left: 25%;
- width: 50%;
- height: 100rpx;
-
- .continueBtn {
- color: #ffffff;
- background: $uni-linear-gradient-btn-color;
- }
- }
-
-
- .confirmationPopup {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- width: 100%;
- height: 300rpx;
-
- image {
- margin-top: 40rpx;
- }
-
- .info {
- margin-top: 40rpx;
- font-size: 26rpx;
- }
- }
- }
-
-
- .content {
- display: flex;
- flex-direction: column;
- justify-content: flex-start;
- gap: 20rpx;
- width: 600rpx;
- height: 100%;
- padding: 20rpx;
-
-
- .title {
- display: flex;
- justify-content: center;
- align-items: center;
- }
-
- .payCycle {
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
-
- .confirmBtn {
- width: 50%;
- height: 80rpx;
- text-align: center;
- color: #ffffff;
- background: linear-gradient(to right, #3c69f1, #5f3bf5);
- display: flex;
- justify-content: center;
- align-items: center;
- font-size: 30rpx;
- margin-top: 50rpx;
- }
-
-
- }
-
-
- }
-
- /deep/ .uv-popup .uv-popup__content {
- border-radius: 20rpx;
- }
- </style>
|