Vue
by joplomacedo
HTML
<div id="app">
<div>
<span>Mode:</span>
<app-btn-group v-model="mode" v-slot="{ setValue }">
<app-btn @click="setValue('buy')">Buy</app-btn>
<app-btn @click="setValue('sell')">Sell</app-btn>
</app-btn-group>
</div>
<div v-if="mode == 'buy'">
<div>
<button>Buy @Bid-Ask / 2</button>
</div>
<div>
<button>Buy @Market</button>
</div>
<div>
<button>Buy @Limit</button>
</div>
<p>Stop loss</p>
<input v-model="stopLoss" type="text">
</div>
<div v-if="mode == 'sell'">
<div>
<button>Sell 25%</button>
</div>
<div>
<button>Sell 50%</button>
</div>
<div>
<button>Sell All</button>
</div>
</div>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
Vue
Vue.component('app-btn-group', {
template: `
<div class="app-btnGroup">
<slot v-bind:setValue="setValue" />
</div>
`,
props:{
value: {
required: true
},
type: {
default: 'checkbox',
validator: val => ['radio', 'checkbox'].includes(val)
}
},
data(){
return {
}
},
methods: {
setValue(val) {
this.$emit('input', val);
}
}
})
Vue.component('app-btn', {
template: `
<component :is="tag" class="app-btn" v-on="$listeners">
<span class="app-btn__content">
<slot />
</span>
</component>
`,
props:{
tag: {
default: 'button',
}
},
data(){
return {
}
},
methods: {}
});
Vue.component('buy-mode', {
template: `
<div>
<div>
<button>Buy @Bid-Ask / 2</button>
</div>
<div>
<button>Buy @Market</button>
</div>
<div>
<button>Buy @Limit</button>
</div>
<p>Stop loss</p>
<input v-model="stopLoss" type="text">
</div>
`,
})
Vue.component('sell-mode', {
template: `
<div>
<div>
<button>Sell 25%</button>
</div>
<div>
<button>Sell 50%</button>
</div>
<div>
<button>Sell All</button>
</div>
</div>
`,
})
new Vue({
el: "#app",
data: {
mode: "buy",
stopLoss: 0,
},
methods: {
toggle: function(todo){
todo.done = !todo.done
},
getPortfolioTotal() {
const portfolioTotalTextEl = document.querySelector('[data-id="totalPortfolio"][data-field="total"]');
const portfolioTotalText= portfolioTotalTextEl.innerText;
let portfolioTotal = portfolioTotalText.replace(/[^0-9]/g,'');
portfolioTotal = portfolioTotal.slice(0, -2) +"."+portfolioTotal.slice(-2);
return +portfolioTotal;
}
}
})