vue用mand-mobile ui做交易所移动版实战示例

先展示几个界面:

目录结构:

main.js

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import * as FastClick from "fastclick"
import App from './App'
import router from './router'
import './styles/theme.styl'
import './styles/global.css'
import store from './store/store' import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios,axios); import qs from 'qs';
Vue.prototype.$qs = qs; // 引入vue-cookies
import VueCookies from 'vue-cookies'
Vue.use(VueCookies) //import $ from 'jquery'
//import 'jquery' FastClick.attach(document.body) Vue.config.productionTip = false /* eslint-disable no-new */
window.Vue = new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
})

  router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/views/home'
import Home2 from '@/views/home2'
import Login from '@/views/login'
import verificationMobile from '@/views/verificationMobile'
import verificationGoogle from '@/views/verificationGoogle' Vue.use(Router) export default new Router({
routes: [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/home2',
name: 'Home2',
component: Home2
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/verificationMobile',
name: 'verificationMobile',
component: verificationMobile
},
{
path: '/verificationGoogle',
name: 'verificationGoogle',
component: verificationGoogle
},
]
})

  home.vue

<template>
<main id="home" class="view" role="main">
<div class="heading">
<h1>
<span>行情</span>
</h1>
</div>
<div class="toptabs">
<md-tabs :titles="titles">
<div v-for="(bbTitle,index) in bbTitles" :key="index">
<md-field title >
<md-field-item name="item0" @click="onClick">
<div slot="left">交易量</div>
<div slot="default">价格</div>
<div slot="right">日涨跌</div>
</md-field-item>
<div v-for="(coin,index) in bbTitle.coin_list" :key="index">
<md-field-item name="item1" @click="onClick">
<div slot="left">
<div class="coin_img">
<img :src="$store.state.apis + coin.icon">
</div>
<div class="coin_info">
<div class="coin_name">{{coin.title_en.toUpperCase()}}</div>
<div class="coin_volume">{{coin.trade_num}}</div>
</div>
</div>
<div slot="default">
<div class="coin_price">
<div class="price_usdt">{{coin.price}}</div>
<!-- <div class="price_rmb">{{coin.price}}</div> -->
</div>
</div>
<div slot="right">
<md-button type="warning" class="coin_up" v-if="coin.is_rise == 1 || coin.is_rise == 0">+{{coin.rise_range}}%</md-button>
<md-button type="warning" class="coin_down" v-if="coin.is_rise == 2">{{coin.rise_range}}%</md-button>
</div>
</md-field-item>
</div>
</md-field>
</div>
</md-tabs>
</div> <div class="footer_nav">
<md-tab-bar
:show-ink-bar="false">
<div>
<md-icon name="hollow-plus" size="lg"></md-icon>
<div>行情</div>
</div>
<div>
<md-icon name="circle-right" size="lg"></md-icon>
<div>币币</div>
</div>
<div @click="handleClick">
<md-icon name="right" size="lg"></md-icon>
<div>我的</div>
</div>
</md-tab-bar>
</div> </main>
</template> <script>
import {
Button,
Toast,
Tabs,
TabBar,
Field,
FieldItem,
Icon,
Dialog
} from "mand-mobile"; export default {
name: "home-view",
data() {
return {
titles: ["USDT","OCC", "ETH", "BTC"],
bbTitles: [],
bbListShow: false,
};
},
created(){
this.bbList();
},
components: {
[Field.name]: Field,
[FieldItem.name]: FieldItem,
[TabBar.name]: TabBar,
[Tabs.name]: Tabs,
[Icon.name]: Icon,
[Button.name]: Button
},
methods: {
// 获取币币列表数据
bbList(){
this.$http.post(this.$store.state.apis + "/Index/Trade/tradeMenu",{}).then( res => {
var self = this;
var arr = res.data.data; this.bbTitles = [arr[3],arr[2],arr[1],arr[0]];
console.log('bb列表数据');
console.log(this.bbTitles); this.bbListShow = true;
});
},
}
};
</script> <style>
.heading {
text-align: center;
margin-top: 20px;
}
.heading h1 {
line-height: 1.15;
font-size: 45px;
color: #011627;
font-weight: bold;
text-align: center;
}
.heading h1 span {
position: relative;
}
.toptabs{
padding: 10px 0px 20px 20px;
}
.md-tab-bar .md-tab-title.active {
color: #ff384f !important;
}
.md-tab-bar .ink-bar {
background: #ff384f !important;
}
.md-field-item-extra {
width: 35%;
}
.md-field-item-content {
width: 32%;
}
.md-field-right {
width: 33%;
}
.md-field .md-field-content .md-field-item {
padding-left: 0px !important;
padding-right: 0px !important;
}
.md-tabs .md-tab-content-wrapper .md-tab-content{
overflow-y: hidden !important;
}
.coin_img {
float: left;
margin-right: 10px;
}
.coin_img img {
width: 60px;
height: 60px;
}
.coin_info {
float: right;
}
.coin_info .coin_name {
display: block;
font-size: 35px;
font-weight: 600;
color: rgba(1, 22, 39, 1);
}
.coin_info .coin_volume {
display: block;
font-size: 25px;
font-weight: 400;
color: rgba(146, 149, 157, 1);
}
.coin_price {
float: right;
}
.coin_price .price_usdt {
display: block;
text-align: left;
font-size: 35px;
font-weight: 600;
color: rgba(1, 22, 39, 1);
}
.coin_price .price_rmb {
display: block;
text-align: left;
font-size: 25px;
font-weight: 400;
color: rgba(146, 149, 157, 1);
}
.coin_up {
font-size: 25px;
font-weight: 600;
color: #ffffff;
background-color: #fc4c4c !important;
padding: 20px;
width: 170px;
}
.coin_down {
font-size: 25px;
font-weight: 600;
color: #ffffff;
background-color: #05c19e !important;
padding: 20px;
width: 170px;
}
.footer_nav{
margin-top: 10px;
position: fixed;
left: 0px;
bottom: 0px;
width: 100%;
padding-bottom: 20px;
}
</style>

  login.vue

<template>
<main id="home" class="view" role="main">
<div class="heading">
<div class="cross">
<md-icon name="cross" size="lg" @click="goback()"></md-icon>
</div>
<div class="title">登录</div>
</div>
<div>
<md-field>
<md-input-item ref="input0" v-model="username" title placeholder="用户名/手机号码" :maxlength="12"></md-input-item>
<md-input-item ref="input1" v-model="password" type="password" title placeholder="登录密码" :maxlength="16"></md-input-item>
<md-input-item ref="input2" v-model="code" placeholder="请输入验证码" :maxlength="4">
<img
slot="right"
class="verificationCode"
:src="srcImg"
@click="changeSrcImg()"
title=""
>
</md-input-item>
</md-field>
</div>
<div class="login">
<md-button @click="loginBtn" class="login-btn">登录</md-button>
</div>
</main>
</template> <script>
import {
Button,
Toast,
Tabs,
TabBar,
Field,
FieldItem,
InputItem,
Icon,
Dialog
} from "mand-mobile"; import $ from 'jquery';
//import axios from 'axios';
import qs from 'qs'; export default {
name: "login-view",
data() {
return {
username: '',
password: '',
code: '',
srcImg: "",
};
},
created() {
var this_ = this;
this.$http.post(this.$store.state.apis + "/index/index/getToken",qs.stringify({})).then( res => {
this.axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
this.axios.defaults.headers.post['token'] = res.data.data.token;
this.axios.defaults.headers.post['lang'] = 'null';
this.axios.defaults.withCredentials = true;// 跨域携带cookie
this.$cookies.set("token", res.data.data.token);
})
setTimeout(function() {
this_.changeSrcImg();
}, 100);
},
components: {
[Field.name]: Field,
[FieldItem.name]: FieldItem,
[InputItem.name]: InputItem,
[TabBar.name]: TabBar,
[Tabs.name]: Tabs,
[Icon.name]: Icon,
[Button.name]: Button
},
methods: {
goback() {
this.$router.go(-1);
},
changeSrcImg() {
this.srcImg =
this.$store.state.apis + "/index/login/verify" +
"?time=" +
new Date().getTime();
},
loginBtn(){
// console.log("loginBtn")
var _this = this;
if(this.username == "" || this.username == null || this.username.length < 6 || this.username.length > 12){
Toast.failed('用户名输入错误!');
this.changeSrcImg();
return;
}
if(this.password == "" || this.password == null || this.password.length < 6 || this.password.length > 16){
Toast.failed('密码输入错误!');
this.changeSrcImg();
return;
}
if(this.code == '' || this.code == null){
Toast.failed('请输入图形验证码');
this.changeSrcImg();
return;
}
$(".login-btn").attr("disabled","disabled").css({backgroundColor:"#ccc",borderColor:"#ccc",cursor: "not-allowed"}).children("div").text("正在登录...")
this.$http.post(this.$store.state.apis + "/index/login/loginact",
qs.stringify({username:this.username,password:this.password,code:this.code}))
.then(res => {
if(res.data.code == 1){
// console.log(res.data)
if(res.data.data.verifyType == 0){
this.$store.state.token = res.data.data.token;
Toast.succeed('登录成功');
setTimeout(function(){
_this.$store.commit("userInfo",_this);
_this.$router.push("/");
},500);
}else if(res.data.data.verifyType == 1){
this.$router.push({ path: '/verificationGoogle'});
}else if(res.data.data.verifyType == 2){
this.$router.push({ path: '/verificationMobile'});
}
}else {
Toast.failed(res.data.msg);
this.changeSrcImg();
$(".login-btn").removeAttr("disabled").css({backgroundColor:"#fc9153",borderColor:"#fc9153",cursor: "pointer"}).children("div").text("登录");
}
})
.catch(function (error) {
console.log(error);
});
}
}
};
</script> <style>
.heading {
text-align: right;
clear: both;
margin-bottom: 30px;
}
.heading .title {
text-align: left;
padding-left: 40px;
line-height: 1.15;
font-size: 50px;
color: #011627;
font-weight: bold;
}
.heading .cross {
text-align: right;
padding: 0px 20px 20px 0px;
}
.md-input-item-right{
width: 250px !important;
}
.verificationCode {
width: 250px !important;
display: block;
margin-left: 10px;
cursor: pointer;
}
.login {
padding: 20px;
margin-top: 40px;
}
</style>

  

vue用mand-mobile ui做交易所移动版实战示例的更多相关文章

  1. Vue & mobile UI components

    Vue & mobile UI components https://github.com/vuejs/awesome-vue https://awesome-vue.js.org/ http ...

  2. onsen & UI & vue & mobile UI

    onsen & UI vue & mobile UI $ npm i onsenui vue-onsenui # OR $ npm i -S onsenui vue-onsenui h ...

  3. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图

    vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...

  4. 开始学习Angular Mobile UI

    介绍 Mobile AngularUI 可以让你使用Twitter Booostrap和Angular JS来开发混合移动App和桌面应用程序. 下面是是一些贯穿整个项目的步骤,我强烈的建议你去继续阅 ...

  5. 基于 Vue.js 之 iView UI 框架非工程化实践记要

    像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引用一下,不需要就删除.故观念使然,尽管 Nuget 和 Maven ...

  6. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  7. 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何

    基于 Vue.js 之 iView UI 框架非工程化实践记要   像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...

  8. vue+vue-cli+淘宝lib-flexible做移动端自适应

    总结用vue+vue-cli+淘宝lib-flexible做移动端自适应方案: 1.安装淘宝lib-flexible npm install lib-flexible --save 2.在入口文价ma ...

  9. Vue.js 入门:从零开始做一个极简 To-Do 应用

    Vue.js 入门:从零开始做一个极简 To-Do 应用 写作时间:2019-12-10版本信息:Vue.js 2.6.10官网文档:https://cn.vuejs.org/ 前言  学习 Vue ...

随机推荐

  1. 【Static Program Analysis - Chapter 1】 Introduction

    Regarding correctness, programmers routinely use testing to gain confidence that their programs work ...

  2. apache 2.4.23 只能本地访问,其他用户不能访问,提示You don't have permission to access

    这个版本的httpd.conf的配置方法跟原版本的设置不一样了. 需要在目录安全配置中 修改为 Require all granted 比如  把Require local 修改为Require al ...

  3. MYSQL 内存模型

  4. 利用pl/sql执行计划评估SQL语句的性能简析

    一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在.  那么,作为 ...

  5. java学习之路--面试之并发基础

    1. 什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)?原子操作是指一个不受其他操作影响的操作任务单元.原子操作是在多线程环境下避免数据不一致必 ...

  6. selenium+python爬虫环境搭建

    前言: 准备使用selenium爬取网站数据,先搭建selenium+python爬虫环境搭建 系统环境: 64位win10系统,同时装python2.7和python3.6两个版本,IDE为pych ...

  7. GIS优秀博客以及网址收藏,持续更新

    1.gislaozhang arcpy,模型构建器,arcpro 地址:https://blog.csdn.net/gislaozhang?t=1      2.雾语 arcpy,模型构建器,arcg ...

  8. 树莓派3 之 USB摄像头安装和使用

    需求 如果你想在树莓上拍照或者录影,你可以安装树莓派的摄像头(有点贵).如果你不想要为摄像头模块花费额外的金钱,那有另外一个方法,就是你常见的USB 摄像头.你可能已经在PC上安装过了.我买的如图的这 ...

  9. jquery基础学习之AJAX篇(五)

    理解不深,只知道这么用 jquery 中ajax的请求方法 $.ajax({ url:‘http://...’, //请求网址 type:'GET', //请求方法 success:function( ...

  10. 阻塞队列(BlockingQueue)

    阻塞队列是 java.util.concurrent 包提供的一个类,该类提供了多线程中通过队列实现安全高效的数据处理的功能. 所谓阻塞队列,是在普通队列基础上实现了阻塞线程的功能: 队列为空时,获取 ...