yb课堂 下单页面组件开发 《四十三》
Pay.vue
<template>
<!--视频信息-->
<div>
<div class="info">
<p class="info_title">商品信息</p>
<div class="box">
<div class="imgdiv">
<img :src="videoinfo.cover_img" alt="课程照片" />
</div>
<div class="txtdiv">
<p class="c_title">{{videoinfo.title}}</p>
<p class="price">¥: {{(videoinfo.price/100).toFixed(2)}}</p>
</div>
</div>
</div>
<!--底部支付-->
<div class="footer">
<p class="money">实付 {{(videoinfo.price/100).toFixed(2)}}</p>
<p class="submit" @click="pay">立刻支付</p>
</div>
</div>
</template>
<script>
import { getVideoDetail, saveOrder } from "@/api/getData.js";
export default {
data() {
return {
videoinfo: {}
};
},
methods: {
//获取视频详情
async getDetail(vid) {
try {
const result = await getVideoDetail(vid);
if (result.data.code == 0) {
this.videoinfo = result.data.data;
}
} catch (err) {
console.log(err);
}
},
//下单
async pay() {
try {
const result = await saveOrder(
this.$store.state.token,
this.$route.query.video_id
);
if (result.data.code == 0) {
const toast = this.$createToast({
txt: "购买成功",
type: "correct",
time: 2000,
onTimeout: () => {
this.$router.push({ path: "/order" });
}
});
toast.show();
}else{
const toast = this.$createToast({
txt: `${result.data.msg}`,
type: "correct",
time: 2000
});
toast.show();
}
} catch (err) {
console.log(err);
}
}
},
mounted() {
this.getDetail(this.$route.query.video_id);
}
};
</script>
<style lang="scss" scoped>
// 视频标题
.info_title {
padding: 10px 20px;
background-color: #fff;
border-bottom: 1px solid #d9dde1;
}
.box {
background-color: #fff;
box-sizing: border-box;
padding: 20px;
display: flex;
margin-bottom: 15px;
.imgdiv {
width: 105px;
height: 59px;
flex-shrink: 0;
img {
width: 100%;
height: 100%;
}
}
.textdiv {
margin-left: 20px;
height: 59px;
flex-grow: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
.price {
flex-shrink: 0;
}
}
}
//底部
.footer {
position: fixed;
bottom: 0;
width: 100%;
height: 50px;
background-color: #fff;
display: flex;
justify-content: space-between;
box-shadow: 0 -2px 4px 0 rgba(0, 0, 0, 0.1);
font-size: 16px;
.money {
height: 50px;
line-height: 50px;
flex: 2;
text-align: center;
background-color: #fff;
}
.submit {
height: 50px;
line-height: 50px;
flex: 1;
text-align: center;
background-color: #ff2d50;
color: #fff;
}
}
</style>
yb课堂 下单页面组件开发 《四十三》的更多相关文章
- [课程设计]Scrum 2.2 多鱼点餐系统开发进度(下单页面修复&美化)
[课程设计]Scrum 2.2 多鱼点餐系统开发进度 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...
- 网站开发进阶(四十三)html中,路径前加“/” 与不加“/”的区别
网站开发进阶(四十三)html中,路径前加"/" 与不加"/"的区别 前言 <script src="js/downloadify.js&quo ...
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
每天记录一点:NetCore获得配置文件 appsettings.json 用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...
- 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡 CompositeControl 后篇 --事件冒泡 系列文章链接: ASP.NET ...
- stark组件开发之列表页面定制列
先看一张页面展示的效果图: 看一看我的 model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...
- 从0搭建Vue3组件库(四): 如何开发一个组件
本篇文章将介绍如何在组件库中开发一个组件,其中包括 如何本地实时调试组件 如何让组件库支持全局引入 如何在 setup 语法糖下给组件命名 如何开发一个组件 目录结构 在packages目录下新建co ...
- 汉王云名片识别(SM)组件开发详解
大家好,最近在DeviceOne平台上做了一个汉王云名片识别的功能组件.下面把我开发过程给大家做一个分享,希望可以帮助到大家. 下面我把我的思路给大家讲解一下. 1.找到我要集成的sdk,也就是汉 ...
- ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性
原文:ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性 深入讲解控件的属性持久化(一) 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开 ...
随机推荐
- DP-Modeler三维修模软件简介
图像快速建模系统DP-Modeler是天际航自主研发的一款集精细化单体建模及Mesh网格模型修饰于一体的新型软件.通过特有的摄影测量算法,支持航测摄影.无人机影像.地面影像.车载影像.激光点云等多数据 ...
- kubernetes 之二进制方式部署
我的资料链接:https://pan.baidu.com/s/18g0sar1N-FMhzY-FCMqOog 两种集群架构图 多master需要在集群上面加个lb,所有的node都需要连接lb,lb帮 ...
- 阿里巴巴 MySQL 数据库之建表规约(一)
建表规约 强制部分 [强制] 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是,0 表示否). 说明:任何字段如果为非负数,必须是 ...
- WPF基础之样式设置和模板化(三)
IsItemsHost 属性在此示例中,一个必需的重要属性是 IsItemsHost 属性.IsItemsHost 属性用于指示在 ItemsControl(如处理项列表的 ListBox 控件)的模 ...
- 微信小程序跳转重新加载目标页
可用于在首次进入到小程序后就执行性了首页的onLoad方法,等你再去点击其它页面再回来的时候就不会加载onLoad了,比如你跳到登录页后再返回到首页会发现首页啥数据都没加载,所以你在登录那边进行跳转的 ...
- 改变函数中的this指向
// 改变函数的this指向 // 先记住一句话 : 箭头函数不能改变this指向 // 语法1: call() 方法 // 在调用函 ...
- docker日常使用操作场景
日常使用场景 场景1:将自己的镜像从hub中拉取,并压缩成tar.gz文件 # 首先拉取镜像 docker pull docker.images.hub/{namespace}/{servicenam ...
- Vue TypeScript 实战:掌握静态类型编程
title: Vue TypeScript 实战:掌握静态类型编程 date: 2024/6/10 updated: 2024/6/10 excerpt: 这篇文章介绍了如何在TypeScript环境 ...
- Scrapy框架(三)--全站数据爬取
scrapy基于Spider类的全站数据爬取 大部分的网站展示的数据都进行了分页操作,那么将所有页码对应的页面数据进行爬取就是爬虫中的全站数据爬取.基于scrapy如何进行全站数据爬取呢?1.将每一个 ...
- R-tree算法
R-tree是一种用于处理空间数据的自平衡搜索树结构,特别适合于存储和查询二维或更高维度的空间对象,如点.线段.矩形等.它在地理信息系统.计算机图形学.数据库等领域有广泛应用.R树通过将空间分割成几个 ...