15 flex-direction: column;
19 .my-vote .vote-number{
25 padding: 0px 15px 10px;
33 border-bottom: 1px solid #F0F0F0;
38 border:1px solid #E0E0E0;
42 .vote-item .vote-title{
45 .vote-item .vote-number{
53 vertical-align: middle;
100 padding: 0px 20px 5px;
114 .button-container a:nth-child(2){
122 border: 1px solid #035BD4;
123 box-sizing: border-box;
142 background: rgba(145, 211, 3, 0.1);
148 .stanbybp-icon .outer-dot{
149 background: rgba(255, 204, 0, 0.1);
151 .stanbybp-icon .inner-dot{
155 .search-wrapper input{
157 background: url('../../assets/img/icon/search.svg') top 3px left 2px no-repeat;
161 border: 1px solid rgba(0, 0, 0, 0.16);
162 box-sizing: border-box;
163 border-radius: 100px;
177 <div class="warp-chlid bg-white">
179 <section class="bg-image">
181 <i class="iconfont icon-back" @click="close"></i>
182 <p>{{ $t('listVote.title') }}</p>
184 <div class="my-vote">
185 <div class="color-grey">{{ $t('listVote.myVote') }}</div>
186 <div class="vote-number">{{myVote}}</div>
187 <div class="color-grey">{{ $t('listVote.totalVote')}} {{formatNue(totalVote)}}</div>
191 <section class="vote-container bg-white">
192 <div class="button-container">
193 <router-link class="color-black" :to="{name: 'voteRecord'}">
194 <div>{{$t('listVote.voteRecord')}}</div>
196 <router-link class="color-black" :to="{name: 'voteRegulation'}">
197 <div>{{ $t('listVote.voteRules')}}</div>
199 <router-link class="color-grey" :to="{name: 'listCancel'}">
200 <div>{{ $t('listVote.cancelVote')}}</div>
203 <div class="vote-label color-black">
204 <div class="v-label">
205 <div class="v-icon bp-icon">
206 <div class="outer-dot">
207 <div class="inner-dot"></div>
210 <div>{{ $t('listVote.bp') }}</div>
212 <div class="v-label">
213 <div class="v-icon stanbybp-icon">
214 <div class="outer-dot">
215 <div class="inner-dot"></div>
218 <div>{{ $t('listVote.standbyBP') }}</div>
220 <div class="search-wrapper">
221 <input type="text" v-model="search" :placeholder="$t('listVote.bpName')"/>
224 <div class="vote-list">
225 <table class="list accounts">
226 <tr class="vote-item" v-for="(vote, index) in filteredList" :key="index">
228 <div :class="voteRole(vote.role)">
233 <img :src="vote.logo || defaultUrlImg" alt="">
235 <td class="node-label">
236 <div class="vote-title" >
237 <div v-if="net === 'mainnet'">
238 <a :href="`https://vapor.blockmeta.com/node/${vote.pub_key}`" target="_blank">
246 <div class="vote-number">{{$t('listVote.votes')}} {{formatNue(vote.voteNum)}} ({{formatFraction(vote.voteNum, totalVote)}})</div>
248 <td class="text-align-right">
249 <button class="btn btn-vote" @click="openVote(vote)">
250 {{$t('listVote.vote')}}
261 import query from "@/models/query";
262 import { BTM } from "@/utils/constants";
263 import Number from "@/utils/Number"
264 import { mapActions, mapGetters, mapState } from 'vuex'
265 import * as Actions from '@/store/constants';
266 import _ from 'lodash';
267 import image from '@/assets/img/icon/node-default.svg';
281 return this.assets[this.transaction.asset];
284 return function (roleNum) {
287 return 'vote-role bp';
289 return 'vote-role stanbybp';
291 return 'vote-role otherbp';
293 return 'vote-role otherbp';
299 const votes = this.currentAccount.votes
300 if(votes && votes.length >0 ){
301 vote = _.sumBy(votes,'total')
303 return (vote != null && vote != 0) ? Number.formatNue(vote,0, 8) : '0.00'
306 return this.listVote.filter(post => {
307 return post.name.toLowerCase().includes(this.search.toLowerCase())
327 formatNue: function (nue) {
328 return Number.formatNue(nue,0, 8);
330 formatFraction: function (upper, lower) {
331 return Number.fractionalNum(upper, lower);
333 openVote: function(vote){
334 this[Actions.SET_SELECTED_VOTE](vote);
335 this.$router.push({name: 'vote'});
338 Actions.SET_LIST_VOTE,
339 Actions.SET_SELECTED_VOTE,
343 query.chainStatus().then(resp => {
345 this.totalVote = resp.totalVoteNum;
346 const votes = resp.consensusNodes.map( (item, index) => {
350 this[Actions.SET_LIST_VOTE](votes)