|
|
@@ -1,129 +1,121 @@
|
|
|
-<template>
|
|
|
- <view class="content">
|
|
|
- <scroll-view scroll-x="true" :scroll-with-animation="true" class="navbar">
|
|
|
- <view class="navbar-item" :class="{ current: tabCurrentIndex === index }" v-for="(item, index) in typelist" @click="tabClick(index)">{{ item.name }}</view>
|
|
|
- </scroll-view>
|
|
|
- <view class="list">
|
|
|
- <view class="list-title flex">
|
|
|
- <view class="title-left">交易對</view>
|
|
|
- <view class="title-center">最新價格</view>
|
|
|
- <view class="title-right">24h漲跌</view>
|
|
|
- </view>
|
|
|
- <scroll-view class="swiper-box" scroll-y="true" :style="{ height: maxheight }">
|
|
|
- <view class="list-main flex" v-for="(item,index ) in listOBj">
|
|
|
- <view class="main-left">{{index}}</view>
|
|
|
- <view class="main-center" :class="{ down: item.dcf > 0, ping: item.dcf == 0 }">
|
|
|
- {{ item.last == 0 ? '--.--' : item.last }}</view>
|
|
|
+<template>
|
|
|
+ <view class="content">
|
|
|
+ <scroll-view scroll-x="true" :scroll-with-animation="true" class="navbar">
|
|
|
+ <view class="navbar-item" :class="{ current: tabCurrentIndex === index }" v-for="(item, index) in typelist" @click="tabClick(index)">{{ item.name }}</view>
|
|
|
+ </scroll-view>
|
|
|
+ <view class="list">
|
|
|
+ <view class="list-title flex">
|
|
|
+ <view class="title-left">交易對</view>
|
|
|
+ <view class="title-center">最新價格</view>
|
|
|
+ <view class="title-right">24h漲跌</view>
|
|
|
+ </view>
|
|
|
+ <scroll-view class="swiper-box" scroll-y="true" :style="{ height: maxheight }">
|
|
|
+ <view class="list-main flex" v-for="(item, index) in listOBj">
|
|
|
+ <view class="main-left">{{ index }}</view>
|
|
|
+ <view class="main-center" :class="{ down: item.dcf > 0, ping: item.dcf == 0 }">{{ item.last == 0 ? '--.--' : item.last }}</view>
|
|
|
<view class="main-right">
|
|
|
<view class="btn" :class="{ down: item.dcf > 0, ping: item.dcf == 0 }">{{ item.dcf }}%</view>
|
|
|
</view>
|
|
|
- </view>
|
|
|
- </scroll-view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
-</template>
|
|
|
-
|
|
|
+ </view>
|
|
|
+ </scroll-view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
<script>
|
|
|
- import { mapMutations,mapState } from 'vuex';
|
|
|
- import {
|
|
|
- scoketNew,
|
|
|
- scoketOpen
|
|
|
- } from '@/utils/socket.js';
|
|
|
- import {
|
|
|
- geLevertade
|
|
|
- } from '@/api/index.js';
|
|
|
-export default {
|
|
|
- onReady(res) {
|
|
|
- var _this = this;
|
|
|
- uni.getSystemInfo({
|
|
|
- success: resu => {
|
|
|
- const query = uni.createSelectorQuery();
|
|
|
- query.select('.swiper-box').boundingClientRect();
|
|
|
- query.exec(function(res) {
|
|
|
- _this.maxheight = resu.windowHeight - res[0].top + 'px';
|
|
|
- console.log('打印页面的剩余高度', _this.maxheight);
|
|
|
- });
|
|
|
- },
|
|
|
- fail: res => {
|
|
|
- console.log('打印页面的剩余高度', res);
|
|
|
- }
|
|
|
- });
|
|
|
+import { mapMutations, mapState } from 'vuex';
|
|
|
+import { scoketNew, scoketOpen } from '@/utils/socket.js';
|
|
|
+import { geLevertade } from '@/api/index.js';
|
|
|
+export default {
|
|
|
+ onReady(res) {
|
|
|
+ var _this = this;
|
|
|
+ uni.getSystemInfo({
|
|
|
+ success: resu => {
|
|
|
+ const query = uni.createSelectorQuery();
|
|
|
+ query.select('.swiper-box').boundingClientRect();
|
|
|
+ query.exec(function(res) {
|
|
|
+ _this.maxheight = resu.windowHeight - res[0].top + 'px';
|
|
|
+ console.log('打印页面的剩余高度', _this.maxheight);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ fail: res => {
|
|
|
+ console.log('打印页面的剩余高度', res);
|
|
|
+ }
|
|
|
+ });
|
|
|
},
|
|
|
computed: {
|
|
|
- ...mapState('user',['hasLogin'])
|
|
|
- },
|
|
|
- data() {
|
|
|
- return {
|
|
|
- typelist: [{ name: 'USDT市场' }],
|
|
|
- tabCurrentIndex: 0,
|
|
|
+ ...mapState('user', ['hasLogin'])
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ typelist: [{ name: 'USDT市场' }],
|
|
|
+ tabCurrentIndex: 0,
|
|
|
maxheight: '',
|
|
|
scoket: '',
|
|
|
instId: 'IOTA-USDT', //请求的产品id
|
|
|
spList: [], //需要查询的列表
|
|
|
- listOBj: {} //保存实际列表对象
|
|
|
- };
|
|
|
- },
|
|
|
- onLoad() {
|
|
|
-
|
|
|
- },
|
|
|
+ listOBj: {} //保存实际列表对象
|
|
|
+ };
|
|
|
+ },
|
|
|
+ onLoad() {},
|
|
|
onShow() {
|
|
|
- if(this.hasLogin) {
|
|
|
- this.geLevertade()
|
|
|
- }else {
|
|
|
+ if (this.hasLogin) {
|
|
|
+ this.geLevertade();
|
|
|
+ } else {
|
|
|
uni.showModal({
|
|
|
title: '提示',
|
|
|
content: '您未登錄,是否馬上登錄?',
|
|
|
complete(res) {
|
|
|
- console.log(res)
|
|
|
- if(res.confirm) {
|
|
|
+ console.log(res);
|
|
|
+ if (res.confirm) {
|
|
|
uni.navigateTo({
|
|
|
- url:'/pages/public/login'
|
|
|
- })
|
|
|
+ url: '/pages/public/login'
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
}
|
|
|
-
|
|
|
},
|
|
|
onHide() {
|
|
|
- this.closeScoket()
|
|
|
- },
|
|
|
- methods: {
|
|
|
- tabClick(opt) {
|
|
|
- this.tabCurrentIndex = opt;
|
|
|
+ this.closeScoket();
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ tabClick(opt) {
|
|
|
+ this.tabCurrentIndex = opt;
|
|
|
},
|
|
|
// 开始请求长连接
|
|
|
onScoket() {
|
|
|
const that = this;
|
|
|
- that.scoket = scoketNew("wss://wsaws.okx.com:8443/ws/v5/public");
|
|
|
- that.scoket.scoketOpen().then((res) => {
|
|
|
- const requestList = that.spList.map((e) => {
|
|
|
+ that.scoket = scoketNew('wss://wsaws.okx.com:8443/ws/v5/public');
|
|
|
+ that.scoket.scoketOpen().then(res => {
|
|
|
+ const requestList = that.spList.map(e => {
|
|
|
return {
|
|
|
- "channel": "tickers",
|
|
|
- "instId": e.coinname.toUpperCase() + "-USDT"
|
|
|
- }
|
|
|
- })
|
|
|
- that.scoket.scoketSend({
|
|
|
- "op": "subscribe",
|
|
|
- "args": requestList
|
|
|
- }).then((res) => {
|
|
|
- console.log(res, '发送成功');
|
|
|
- })
|
|
|
- that.scoket.scoketMessage((res) => {
|
|
|
+ channel: 'tickers',
|
|
|
+ instId: e.coinname.toUpperCase() + '-USDT'
|
|
|
+ };
|
|
|
+ });
|
|
|
+ that.scoket
|
|
|
+ .scoketSend({
|
|
|
+ op: 'subscribe',
|
|
|
+ args: requestList
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ console.log(res, '发送成功');
|
|
|
+ });
|
|
|
+ that.scoket.scoketMessage(res => {
|
|
|
try {
|
|
|
if (res.data) {
|
|
|
// res.res.data[0].name = res.arg.instId
|
|
|
that.listOBj[res.arg.instId] = res.data[0];
|
|
|
- that.listOBj[res.arg.instId].dcf = ((res.data[0].last*1 - res.data[0].sodUtc0*1)/(res.data[0].sodUtc0*1) * 100 ).toFixed(2)
|
|
|
- that.listOBj = Object.assign( {},that.listOBj);
|
|
|
+ that.listOBj[res.arg.instId].dcf = (((res.data[0].last * 1 - res.data[0].sodUtc0 * 1) / (res.data[0].sodUtc0 * 1)) * 100).toFixed(2);
|
|
|
+ that.listOBj = Object.assign({}, that.listOBj);
|
|
|
}
|
|
|
- console.log(that.listOBj, 'that.listOBj++++++')
|
|
|
+ console.log(that.listOBj, 'that.listOBj++++++');
|
|
|
} catch (e) {
|
|
|
-
|
|
|
console.log(res, res.data, '报错');
|
|
|
}
|
|
|
- })
|
|
|
- })
|
|
|
+ });
|
|
|
+ });
|
|
|
},
|
|
|
closeScoket() {
|
|
|
this.scoket.scoketClose();
|
|
|
@@ -131,117 +123,116 @@ export default {
|
|
|
// 获取查询列表
|
|
|
geLevertade() {
|
|
|
const that = this;
|
|
|
- geLevertade().then((e) => {
|
|
|
+ geLevertade().then(e => {
|
|
|
that.spList = e.list;
|
|
|
// 开启长连接
|
|
|
- that.onScoket()
|
|
|
-
|
|
|
- })
|
|
|
- },
|
|
|
- }
|
|
|
-};
|
|
|
-</script>
|
|
|
-
|
|
|
-<style lang="scss">
|
|
|
-page,
|
|
|
-.content {
|
|
|
- height: auto;
|
|
|
- min-height: 100%;
|
|
|
- background: #f6f6f6;
|
|
|
-}
|
|
|
-.navbar {
|
|
|
- padding-top: 34rpx;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- white-space: nowrap;
|
|
|
- height: 100rpx;
|
|
|
- .navbar-item {
|
|
|
- text-align: center;
|
|
|
- display: inline-block;
|
|
|
- font-size: 32rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 800;
|
|
|
- color: #777988;
|
|
|
- margin-left: 115rpx;
|
|
|
- padding-bottom: 14rpx;
|
|
|
- line-height: 1;
|
|
|
- &.current {
|
|
|
- border-bottom: 3px solid #f7d359;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-.list {
|
|
|
- background: #ffffff;
|
|
|
- border-top-left-radius: 26rpx;
|
|
|
- border-top-right-radius: 26rpx;
|
|
|
- padding: 40rpx 15rpx 0;
|
|
|
- .list-title {
|
|
|
- font-size: 28rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 500;
|
|
|
- color: #525c6e;
|
|
|
- padding-bottom: 32rpx;
|
|
|
- .title-left {
|
|
|
- text-align: left;
|
|
|
- width: 33%;
|
|
|
- }
|
|
|
- .title-center {
|
|
|
- text-align: center;
|
|
|
- width: 33%;
|
|
|
- }
|
|
|
- .title-right {
|
|
|
- text-align: right;
|
|
|
- width: 33%;
|
|
|
- }
|
|
|
- }
|
|
|
- .list-main {
|
|
|
- padding: 12rpx 0;
|
|
|
- .main-left {
|
|
|
- text-align: left;
|
|
|
- width: 33%;
|
|
|
- font-size: 28rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 500;
|
|
|
- color: #525c6e;
|
|
|
- }
|
|
|
- .main-center {
|
|
|
- text-align: center;
|
|
|
- width: 33%;
|
|
|
- font-size: 28rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 500;
|
|
|
- color: #e15560;
|
|
|
- &.down {
|
|
|
- color: #5ec886;
|
|
|
- }
|
|
|
- &.ping {
|
|
|
- color: #525c6e;
|
|
|
- }
|
|
|
- }
|
|
|
- .main-right {
|
|
|
- text-align: right;
|
|
|
- width: 33%;
|
|
|
- display: flex;
|
|
|
- justify-content: flex-end;
|
|
|
- .btn {
|
|
|
- width: 122rpx;
|
|
|
- height: 63rpx;
|
|
|
- background: #e15562;
|
|
|
- border-radius: 5rpx;
|
|
|
- text-align: center;
|
|
|
- line-height: 63rpx;
|
|
|
- font-size: 24rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 500;
|
|
|
- color: #ffffff;
|
|
|
- &.down {
|
|
|
- background: #5ec886;
|
|
|
- }
|
|
|
- &.ping {
|
|
|
- background: #f6f6f6;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+ that.onScoket();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+page,
|
|
|
+.content {
|
|
|
+ height: auto;
|
|
|
+ min-height: 100%;
|
|
|
+ background: #f6f6f6;
|
|
|
+}
|
|
|
+.navbar {
|
|
|
+ padding-top: 34rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ white-space: nowrap;
|
|
|
+ height: 100rpx;
|
|
|
+ .navbar-item {
|
|
|
+ text-align: center;
|
|
|
+ display: inline-block;
|
|
|
+ font-size: 32rpx;
|
|
|
+ font-family: PingFang SC;
|
|
|
+ font-weight: 800;
|
|
|
+ color: #777988;
|
|
|
+ margin-left: 115rpx;
|
|
|
+ padding-bottom: 14rpx;
|
|
|
+ line-height: 1;
|
|
|
+ &.current {
|
|
|
+ border-bottom: 3px solid #f7d359;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.list {
|
|
|
+ background: #ffffff;
|
|
|
+ border-top-left-radius: 26rpx;
|
|
|
+ border-top-right-radius: 26rpx;
|
|
|
+ padding: 40rpx 15rpx 0;
|
|
|
+ .list-title {
|
|
|
+ font-size: 28rpx;
|
|
|
+ font-family: PingFang SC;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #525c6e;
|
|
|
+ padding-bottom: 32rpx;
|
|
|
+ .title-left {
|
|
|
+ text-align: left;
|
|
|
+ width: 33%;
|
|
|
+ }
|
|
|
+ .title-center {
|
|
|
+ text-align: center;
|
|
|
+ width: 33%;
|
|
|
+ }
|
|
|
+ .title-right {
|
|
|
+ text-align: right;
|
|
|
+ width: 33%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .list-main {
|
|
|
+ padding: 12rpx 0;
|
|
|
+ .main-left {
|
|
|
+ text-align: left;
|
|
|
+ width: 33%;
|
|
|
+ font-size: 28rpx;
|
|
|
+ font-family: PingFang SC;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #525c6e;
|
|
|
+ }
|
|
|
+ .main-center {
|
|
|
+ text-align: center;
|
|
|
+ width: 33%;
|
|
|
+ font-size: 28rpx;
|
|
|
+ font-family: PingFang SC;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #e15560;
|
|
|
+ &.down {
|
|
|
+ color: #5ec886;
|
|
|
+ }
|
|
|
+ &.ping {
|
|
|
+ color: #525c6e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .main-right {
|
|
|
+ text-align: right;
|
|
|
+ width: 33%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: flex-end;
|
|
|
+ .btn {
|
|
|
+ width: 122rpx;
|
|
|
+ height: 63rpx;
|
|
|
+ background: #e15562;
|
|
|
+ border-radius: 5rpx;
|
|
|
+ text-align: center;
|
|
|
+ line-height: 63rpx;
|
|
|
+ font-size: 24rpx;
|
|
|
+ font-family: PingFang SC;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #ffffff;
|
|
|
+ &.down {
|
|
|
+ background: #5ec886;
|
|
|
+ }
|
|
|
+ &.ping {
|
|
|
+ background: #f6f6f6;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|