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.
245 lines
6.7 KiB
245 lines
6.7 KiB
<template>
|
|
<view class="layout-page bg-panel-4" :style="themeStyle">
|
|
<v-header v-if="!isSearch" :title="$t('base.a3')">
|
|
<template #right>
|
|
<van-icon @click="isSearch=true" name="search" size="20" color="rgba(129,151,164,1)" />
|
|
</template>
|
|
</v-header>
|
|
<view style="height: var(--status-bar-height)"></view>
|
|
<van-search
|
|
background="transparent"
|
|
class="bg-panel-1"
|
|
v-if="isSearch"
|
|
:value="searchText"
|
|
show-action
|
|
@cancel="searchText='';$back(1);"
|
|
@change="searchText=$event.detail"
|
|
:placeholder="$t('base.d3')"
|
|
/>
|
|
<view class="layout-main">
|
|
<!-- 科创板 -->
|
|
<view class="head_info m-y-xs">
|
|
<van-tabs
|
|
v-if="marketList.length"
|
|
:active="infoActive"
|
|
background="transparent"
|
|
color="rgba(232,92,68,1)"
|
|
title-active-color="rgba(232,92,68,1)"
|
|
:line-width="0"
|
|
:border="false"
|
|
animated
|
|
class="tabs-border border-b"
|
|
>
|
|
<van-tab
|
|
v-for="parentItem in marketList"
|
|
:key="parentItem.coin_name"
|
|
:title="parentItem.coin_name"
|
|
>
|
|
<view class="layout-main">
|
|
<table class="w-12/12">
|
|
<thead>
|
|
<tr class="color-gray-6">
|
|
<th></th>
|
|
<th class="fn-left p-y-xs fn-xs color-theme-6">{{$t('base.a8')}}</th>
|
|
<th class="fn-left p-y-xs fn-xs color-theme-6">{{$t('base.a9')}}</th>
|
|
<th class="fn-right p-y-xs p-r-md fn-xs color-theme-6">24H{{$t('base.b0')}}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="fn-center">
|
|
<tr
|
|
@click="_router.push({path:'/pages/exchange/index',query:{'code':item.pair_name}})"
|
|
tag="tr"
|
|
class="border-t-original link-active"
|
|
v-for="item in (parentItem.collect?collect:parentItem.marketInfoList)"
|
|
:key="item.pair_name"
|
|
v-show="isShow(item.pair_name)"
|
|
>
|
|
<td class="p-x-xs fn-18" @click.stop="option(item)">
|
|
<van-icon v-if="isCoolect(item)" class="color-theme-1" name="star" />
|
|
<van-icon v-else name="star-o" />
|
|
</td>
|
|
<td class="color-light fn-left p-y-xs">
|
|
<view class="d-flex align-end">{{item.pair_name}}</view>
|
|
</td>
|
|
<td class="p-y-xs fn-left align-end">
|
|
<view class="d-flex align-end">{{item.close}}</view>
|
|
</td>
|
|
<td class="fn-right p-y-xs p-r-md">
|
|
<span :class="item.increase*1<0?'color-sell':'color-buy'">{{item.increaseStr}}</span>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</view>
|
|
</van-tab>
|
|
</van-tabs>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import Home from "@/api/home";
|
|
import { mapState,mapGetters } from "vuex";
|
|
export default {
|
|
name: "list",
|
|
data() {
|
|
return {
|
|
page: 0,
|
|
list: [],
|
|
searchText: "",
|
|
isSearch: false,
|
|
sendSearch: "",
|
|
tab: "shares",
|
|
gridActive: 0, // 头部选中
|
|
query: {},
|
|
infoActive: 0, // 详情选中,
|
|
marketList: [],
|
|
collect: [],
|
|
};
|
|
},
|
|
computed: {
|
|
gridList() {
|
|
return [
|
|
{
|
|
name: this.$t("base.d4"),
|
|
},
|
|
{
|
|
name: this.$t("base.d5"),
|
|
},
|
|
];
|
|
},
|
|
...mapState({
|
|
ws: "ws",
|
|
}),
|
|
...mapGetters(['themeStyle']),
|
|
isLogin() {
|
|
return Boolean(uni.getStorageSync("token"));
|
|
},
|
|
},
|
|
methods: {
|
|
isShow(str) {
|
|
return (
|
|
str.toLocaleLowerCase().indexOf(this.searchText.toLocaleLowerCase()) !=
|
|
-1
|
|
);
|
|
},
|
|
indexData() {
|
|
let data = {
|
|
p: this.page,
|
|
code_type: this.tab,
|
|
};
|
|
Home.indexList(data).then((res) => {
|
|
this.home = res.data.bannerList;
|
|
this.notice = res.data.articleList;
|
|
this.indexList = res.data.brokenLine;
|
|
this.marketList = res.data.marketList;
|
|
this.infoActive = 1;
|
|
this.dunshift();
|
|
this.getCollect();
|
|
this.indexMarketList();
|
|
});
|
|
},
|
|
dunshift() {
|
|
if (this.marketList.filter((item) => item.collect).length) return;
|
|
this.marketList.unshift({
|
|
coin_name: this.$t("base.c7"),
|
|
collect: true,
|
|
marketInfoList: [],
|
|
});
|
|
},
|
|
// 获取自选交易列表
|
|
getCollect(call) {
|
|
if (!this.isLogin) return;
|
|
Home.getCollect()
|
|
.then((res) => {
|
|
this.collect = res.data || [];
|
|
call && call();
|
|
})
|
|
.catch(() => {});
|
|
},
|
|
// 是否为自选
|
|
isCoolect(i) {
|
|
return this.collect.map((item) => item.pair_name).includes(i.pair_name);
|
|
},
|
|
// 替换自选数据
|
|
replaceOptional() {
|
|
let collect = this.collect.map((item) => item.pair_name);
|
|
this.marketList.forEach((parentItem) => {
|
|
parentItem.marketInfoList.forEach((item) => {
|
|
let idx = collect.indexOf(item.pair_name);
|
|
if (idx != -1) {
|
|
this.collect.splice(idx, 1, item);
|
|
}
|
|
});
|
|
});
|
|
},
|
|
// 添加自选
|
|
option(item) {
|
|
let data = {
|
|
pair_name: item.pair_name,
|
|
};
|
|
Home.option(data)
|
|
.then((res) => {
|
|
this.getCollect();
|
|
if (res.data) {
|
|
this.$toast(this.$t("base.c8"));
|
|
} else {
|
|
this.$toast(this.$t("base.c9"));
|
|
}
|
|
})
|
|
.catch(() => {});
|
|
},
|
|
// 链接socket
|
|
indexMarketList() {
|
|
// this.ws.send({
|
|
// cmd: "sub",
|
|
// msg: "indexMarketList",
|
|
// });
|
|
this.ws.on("message", (res) => {
|
|
let { data, sub } = res;
|
|
if (sub == "indexMarketList") {
|
|
this.marketList = data;
|
|
|
|
this.dunshift();
|
|
this.replaceOptional();
|
|
}
|
|
});
|
|
},
|
|
},
|
|
onLoad(query) {
|
|
this.query = query;
|
|
this.indexData();
|
|
this.isSearch = !!query.isSearch;
|
|
},
|
|
destroyed() {
|
|
// this.ws.send({
|
|
// cmd: "unsub",
|
|
// });
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.head {
|
|
padding: 16px 16px 0;
|
|
::v-deep.van-grid-item__content {
|
|
padding: 6px 0;
|
|
background-color: transparent;
|
|
}
|
|
::v-deep.van-hairline--top::after {
|
|
border-left-width: 1px;
|
|
}
|
|
::v-deep.van-grid-item__text {
|
|
color: rgba(123, 145, 159, 1);
|
|
}
|
|
.active {
|
|
background: rgba(232, 92, 68, 1);
|
|
::v-deep.van-grid-item__text {
|
|
color: #ffffff;
|
|
}
|
|
}
|
|
}
|
|
.l-n-px {
|
|
line-height: 35px;
|
|
}
|
|
</style>
|