You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

262 lines
7.6 KiB

<template>
<div class="col-md-3">
<div class="market-pairs">
<!-- 搜索框区域 -->
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroup-sizing-sm">
<i class="icon ion-md-search"></i>
</span>
</div>
<input type="text" class="form-control" v-model="keyword" :placeholder="$t('exchange.search')" aria-describedby="inputGroup-sizing-sm">
</div>
<!-- 币种列表 -->
<ul class="nav nav-pills" role="tablist" ref="navList">
<li class="nav-item" v-for="(coin, index) in markets" :key="index">
<a :class="[`nav-link`, {active:currentCoinIdx == index}]" href @click.prevent="currentCoinIdx = index">
<!-- 查看收藏交易对 -->
<template v-if="coin.coin_name == 'fav'">
<i class="icon ion-md-star"></i>
</template>
<template v-else>
{{ coin.coin_name }}
</template>
</a>
</li>
</ul>
<!-- 币种行情信息,不同的交易对价值 -->
<div class="tab-content">
<div v-for="(coin, index) in markets" :key="index">
<table class="table" v-if="currentCoinIdx == index">
<thead>
<tr style="display:block">
<th class="w-33">{{ $t("exchange.pair") }}</th>
<th class="w-33 text-right">{{ $t("exchange.last-price") }}</th>
<th class="w-33 text-right">{{ $t("exchange.change") }}</th>
</tr>
</thead>
<tbody>
<tr style="display:block" :class="{highlight : item.pair_id == marketId}" @click="$emit('update:symbol', item.symbol)" v-for="(item, key) in coin.marketInfoList" :key="key" v-show="isShow(item)">
<td class="w-33" style="white-space:nowrap">
<i class="icon ion-md-star h6" :class="{ active: isCoolect(item) }" @click.self="handleFav(item)"></i>
{{ coin.coin_name == 'fav' ? item.pair_name : item.coin_name + '/' + coin.coin_name}}
</td>
<td class="w-33 text-right">
{{ coin.coin_name == 'fav' ? item.close : item.price}}
</td>
<td class="w-33 text-right" :class="increaseStr(item)">
{{ item.increaseStr }}
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</template>
<script>
import Market from "@/api/market";
import Home from "@/api/home";
export default {
props: {
marketList: {
type: Array,
// 初始化填充页面排版的数据
default: Array(5).fill({
coin_name: "-",
marketInfoList: Array(10).fill({
coin_name: "-",
price: "-",
increace: 0,
increaseStr: "+0.00%",
}),
})
},
isLogin: {
type: Boolean,
default: false,
},
marketId: {
type: Number,
default: null,
},
firstEnter: true,
},
data() {
return {
keyword: '', // 搜索关键字
current: "fav",
// 个人收藏的交易对信息
favList: {
coinName: "fav",
marketInfoList: Array(10).fill({
pair: "-",
price: "-",
increace: 0,
increaseStr: "+0.00%",
}),
},
// 收藏交易对的数据结构
favList: {
coin_name: "fav",
image: require("@/assets/img/waiting.png"),
marketInfoList: [],
},
currentCoinIdx: 0, // 当前展示的币种
cacheMarketList : [],
collect:[]
}
},
computed: {
markets() {
// 将行情列表和收藏交易对整理一起 方便渲染
return [...this.cacheMarketList, this.favList];
},
},
watch : {
marketList (list) {
if (list.length) this.cacheMarketList = list;
}
},
methods: {
/*
* 询问用户是否登录
* 如果已经登录 返回true
* 如果没有登录 询问用户是否登录进行操作
*/
inquiryLogin() {
if (!this.isLogin) {
this.$confirm(this.$t('nav.login'), this.$t('nav.tips'), {
confirmButtonText: this.$t('home.Login'),
cancelButtonText: this.$t('home.Cancel'),
type: "info",
})
.then(() => {
location.href = "/login";
})
.catch(() => {});
return false;
} else {
return true;
}
},
// 搜索关键字
isShow(symbol) {
const reg = new RegExp(this.keyword, "gi");
if (!this.keyword) return true;
else {
// let name = symbol.coinName || symbol.pair;
let name = symbol.pair_name || symbol.coin_name;
return name.search(reg) >= 0;
}
// return !this.keyword || symbol.coinName.concat(symbol.pair).search(reg) >= 0;
},
// 是否为自选
isCoolect(i) {
// console.log(this.markets[this.currentCoinIdx].marketInfoList)
return this.favList.marketInfoList.map((item) => item.pair_name).includes(i.pair_name);
},
// 添加收藏的方法
handleFav(item) {
let data = {
pair_name: item.pair_name,
};
Home.option(data)
.then((res) => {
this.getCollect();
if (res) {
this.$message.success(this.$t("home.add"));
} else {
this.$message.success(this.$t("home.cancel"));
}
})
.catch((err) => {});
},
getCollect() {
Home.getCollect()
.then((res) => {
this.favList.marketInfoList = res||[];
})
.catch((err) => {});
},
increaseStr(item){
if(item && item.increaseStr && item.increaseStr.indexOf('-') === 0){
return 'red';
}else{
return 'green';
}
}
},
created() {
},
mounted() {
// 初始化市场行情 覆盖初始化的[]
Market.getMarketList().then(data => {
this.cacheMarketList = data;
}).catch(err => {});
// console.log(this.isLogin)
// 如果已登陆 则写入收藏交易对
if (this.isLogin) {
this.getCollect()
}
}
}
</script>
<style lang="scss">
.highlight {
// background: #f6f8f9;
// background: #F8F8FF !important;
td:first-child {
color: #007bff !important;
}
}
.w-33 {
display: inline-block !important;
vertical-align: top !important;
width: 32% !important;
}
.active{
color: #f0a70a!important;
}
.red{
color: red;
}
</style>