Commit 6785be23 by lei

1

parent 5f138c83
File added
import viteCompression from 'vite-plugin-compression';
import visualizer from 'rollup-plugin-visualizer';
import viteCompression from "vite-plugin-compression";
// import visualizer from 'rollup-plugin-visualizer';
// 筛选接口地址
let filterApi = 'http://156.247.9.93:9501/';
let loginApi = 'http://156.247.9.93:8001/';
let filterApi = "http://156.247.9.93:9501/";
let loginApi = "http://156.247.9.93:8001/";
export default defineNuxtConfig({
// plugins: [],
modules: ['nuxt-svgo', '@nuxtjs-alt/proxy'],
modules: ["nuxt-svgo", "@nuxtjs-alt/proxy"],
proxy: {
enableProxy: true,
proxies: {
'/score': {
"/score": {
target: filterApi,
changeOrigin: true,
},
'/v1': {
"/v1": {
target: filterApi,
changeOrigin: true,
},
'/search': {
"/search": {
target: filterApi,
changeOrigin: true,
},
'/favorites': {
"/favorites": {
target: filterApi,
changeOrigin: true,
},
//api-ip是另外滴
'/api': {
"/api": {
target: loginApi,
changeOrigin: true,
},
......@@ -39,10 +39,10 @@ export default defineNuxtConfig({
// NODE_ENV: process.env.NODE_ENV,
// },
vite: {
plugins: [viteCompression(), visualizer({ open: true })],
envDir: '~/env',
plugins: [viteCompression()],
envDir: "~/env",
build: {
minify: 'terser', // 混淆器,terser构建后文件体积更小
minify: "terser", // 混淆器,terser构建后文件体积更小
// 构建后是否生成 source map 文件
// sourcemap: 'hidden',
cssCodeSplit: true, // 如果设置为false,整个项目中的所有 CSS 将被提取到一个 CSS 文件中
......@@ -60,8 +60,8 @@ export default defineNuxtConfig({
rollupOptions: {
output: {
manualChunks: {
TdesignVueNext: ['tdesign-vue-next'],
CustomEcharts: ['echarts'],
TdesignVueNext: ["tdesign-vue-next"],
CustomEcharts: ["echarts"],
},
},
},
......@@ -72,11 +72,11 @@ export default defineNuxtConfig({
// vendor-已被弃用
// 第三方插件转es5
transpile:
process.env.NODE_ENV === 'production'
? ['tdesign-vue-next', 'echarts', 'vue-i18n']
: ['echarts'],
process.env.NODE_ENV === "production"
? ["tdesign-vue-next", "echarts", "vue-i18n"]
: ["echarts"],
// cssSourceMap: true,
// analyze: true,
},
css: ['@/style/font-family.css'],
css: ["@/style/font-family.css"],
});
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -42,7 +42,7 @@
<th class="custom-before-line">
<div class="thead-sort-box">
<template v-if="item.title == 'Pool'">
{{ $t('TableList.pool') + HeadTokenType }}
{{ $t("TableList.pool") + HeadTokenType }}
</template>
<template v-else>
{{ item.title }}
......@@ -77,7 +77,7 @@
<th class="custom-before-line" ref="tableTrOne">
<div class="thead-sort-box">
<template v-if="item.title == 'Pool'">
{{ $t('TableList.pool') + HeadTokenType }}
{{ $t("TableList.pool") + HeadTokenType }}
</template>
<template v-else>
{{ item.title }}
......@@ -169,7 +169,7 @@
<template v-if="!resultData.list.length">
<tr>
<td colspan="12">
<div class="custom-no-list">{{ $t('filter.noList') }}</div>
<div class="custom-no-list">{{ $t("filter.noList") }}</div>
</td>
</tr>
</template>
......@@ -189,23 +189,23 @@
</template>
<script lang="ts" setup>
import { parsePercent, parseCoinAmount, parseNumberToK } from '@/utils/tool';
import { useI18n } from 'vue-i18n';
import CustPagination from './CustPagination.vue';
import request from '@/utils/request';
import { filterChainObj, getSwap } from '@/constants/UnifiedManagementChain';
import JumpOther from './JumpOther.vue';
import KLink from '/public/images/svg/table/k_link.svg';
import analysisSvg from '/public/images/svg/table/media.svg';
import { webLogo } from '@/constants/logo';
import CustomTableSort from './tableSort.vue';
import { TableSort, TableSortAsc } from '@/utils/tool';
import CustomRadio from '../CustomComponent/radio.vue';
import BscChain from '/public/images/svg/selectChain/bsc.svg';
import SwapSvg from '/public/images/svg/socialInfoWrapper/bscTransaction.svg';
import CustomAvatar from './avatar.vue';
import TokenAvatar from './tokenAvatar.vue';
import useSwap from '@/hooks/useSwap';
import { parsePercent, parseCoinAmount, parseNumberToK } from "@/utils/tool";
import { useI18n } from "vue-i18n";
import CustPagination from "./CustPagination.vue";
import request from "@/utils/request";
import { filterChainObj, getSwap } from "@/constants/UnifiedManagementChain";
import JumpOther from "./JumpOther.vue";
import KLink from "/public/images/svg/table/k_link.svg";
import analysisSvg from "/public/images/svg/table/media.svg";
import { webLogo } from "@/constants/logo";
import CustomTableSort from "./tableSort.vue";
import { TableSort, TableSortAsc } from "@/utils/tool";
import CustomRadio from "../CustomComponent/radio.vue";
import BscChain from "/public/images/svg/selectChain/bsc.svg";
import SwapSvg from "/public/images/svg/socialInfoWrapper/bscTransaction.svg";
import CustomAvatar from "./avatar.vue";
import TokenAvatar from "./tokenAvatar.vue";
import useSwap from "@/hooks/useSwap";
const { ChainObj, getCurSwap, getCurChainImg } = useSwap();
const route = useRoute();
const LoadHead = ref(false);
......@@ -223,7 +223,7 @@ const GlbFilter = useCurFilter();
const CurrentTime = useCurrentTimeChange();
// 吸顶元素
const affixedHeadRef = ref(null);
const affixedTableWidth = ref('');
const affixedTableWidth = ref("");
// 当前选中的行数
const CurLineIndex = ref(0);
// 表格数据轮询
......@@ -247,121 +247,121 @@ const colGroupList = reactive({
const RightInfo = useCurrentRightInfo();
// 吸顶表头左右跟随滑动
const affixedHead = reactive({
left: '',
top: '',
height: '',
width: '',
left: "",
top: "",
height: "",
width: "",
});
// 当前排序状态
const SortOptions = reactive({
up: {
field: 'up',
type: 'all',
field: "up",
type: "all",
status: false,
},
pb: {
field: 'pb',
type: 'all',
field: "pb",
type: "all",
status: false,
},
vn: {
field: 'vn',
type: 'all',
field: "vn",
type: "all",
status: false,
},
txn: {
field: 'txn',
type: 'all',
field: "txn",
type: "all",
status: false,
},
r5m: {
field: 'r5m',
type: 'all',
field: "r5m",
type: "all",
status: false,
},
r1h: {
field: 'r1h',
type: 'all',
field: "r1h",
type: "all",
status: false,
},
r4h: {
field: 'r4h',
type: 'all',
field: "r4h",
type: "all",
status: false,
},
r24h: {
field: 'r24h',
type: 'all',
field: "r24h",
type: "all",
status: false,
},
});
const currentBtn = ref('default');
const currentBtn = ref("default");
const btns = computed(() => [
{
label: t('filter.pairs'),
value: 'default',
label: t("filter.pairs"),
value: "default",
},
{
label: t('filter.updated'),
value: 'new',
label: t("filter.updated"),
value: "new",
},
{
label: t('filter.gainers'),
value: 'max-up',
label: t("filter.gainers"),
value: "max-up",
},
{
label: t('filter.losers'),
value: 'max-down',
label: t("filter.losers"),
value: "max-down",
},
{
label: t('filter.r24hVolume'),
value: 'txn',
label: t("filter.r24hVolume"),
value: "txn",
},
]);
const onFilterChange = (value: string) => {
if (value == 'new') {
if (value == "new") {
GlbFilter.value.nt = 1;
} else if (value == 'default') {
} else if (value == "default") {
GlbFilter.value.nt = 0;
}
// 永远请求第一页
pageNum.value = 1;
if (value == 'txn') {
GlbFilter.value.date_orderby = 'txn';
GlbFilter.value.sort = 'desc';
} else if (value == 'max-up') {
if (value == "txn") {
GlbFilter.value.date_orderby = "txn";
GlbFilter.value.sort = "desc";
} else if (value == "max-up") {
// 最大涨幅
GlbFilter.value.date_orderby = 'r' + GlbFilter.value.range_date;
GlbFilter.value.sort = 'desc';
} else if (value == 'max-down') {
GlbFilter.value.date_orderby = "r" + GlbFilter.value.range_date;
GlbFilter.value.sort = "desc";
} else if (value == "max-down") {
// 最大跌幅
GlbFilter.value.date_orderby = 'r' + GlbFilter.value.range_date;
GlbFilter.value.sort = 'asc';
GlbFilter.value.date_orderby = "r" + GlbFilter.value.range_date;
GlbFilter.value.sort = "asc";
}
getTableList();
};
// 获取涨跌幅
const getUpDown = (value: string) => {
if (value && value[0] == '-') {
if (value && value[0] == "-") {
return `${value}%`;
}
return `+${value}%`;
};
// 获取涨跌幅颜色
const getUpDownColor = (value: string) => {
if (value && value[0] == '-') {
if (value && value[0] == "-") {
// down
return '#f23645';
return "#f23645";
}
// up
return '#23ab94';
return "#23ab94";
};
// 获取表格可视区域宽度
const getTableWidth = () => {
if (CustomTable.value) {
// 获取元素可视区域宽度
let width = CustomTable.value.clientWidth;
affixedHead.width = width + 'px';
affixedHead.width = width + "px";
}
};
// 排序事件
......@@ -372,15 +372,15 @@ const submitSort = ({ sort, field }: any) => {
SortOptions[item].type = sort;
SortOptions[item].status = true;
} else {
SortOptions[item].type = 'all';
SortOptions[item].type = "all";
SortOptions[item].status = false;
}
});
// 开始排序
if (sort === 'asc') {
if (sort === "asc") {
// 升序
resultData.list = TableSortAsc(resultData.list, field);
} else if (sort === 'desc') {
} else if (sort === "desc") {
// 降序
resultData.list = TableSort(resultData.list, field);
} else {
......@@ -391,16 +391,16 @@ const submitSort = ({ sort, field }: any) => {
// 获取head的宽度赋给吸顶表头
const getMinWidth = () => {
if (CustomHead.value) {
affixedTableWidth.value = CustomHead.value.clientWidth + 'px';
affixedTableWidth.value = CustomHead.value.clientWidth + "px";
}
};
// 表格数据过滤方法
const TableFilter = (result: any) => {
if ('list' in result && result.list.length) {
if ("list" in result && result.list.length) {
result.list.forEach((item: any, index: number) => {
item.index = index + 1;
item.n_up = '$' + parseCoinAmount(item.up);
item.n_vn = '$' + parseNumberToK(item.vn);
item.n_up = "$" + parseCoinAmount(item.up);
item.n_vn = "$" + parseNumberToK(item.vn);
item.n_pb = parseNumberToK(item.pb);
item.n_r5m = parseFloat(item.r5m * 100).toFixed(2);
item.n_r1h = parseFloat(item.r1h * 100).toFixed(2);
......@@ -431,40 +431,53 @@ const getParams = () => {
};
if (CurrentTime.value) {
params.date = CurrentTime.value;
} else if ('date' in params) {
} else if ("date" in params) {
delete params.date;
}
return params;
};
// 获取host
const getBaseUrl = () => {
if (process.server) {
// if (process.dev) {
// return "http://156.247.9.93:9501";
// }
return "http://apiv1.dexfilter.com/";
} else {
return "/v1";
}
};
// 预取数据
const { data, refresh } = await useLazyFetch(
() => `/v1${chain.value}/indexV1`,
{
params: getParams(),
// baseURL: '',
server: true,
onResponse({ request, response, options }) {
console.log(request);
console.log(response);
console.log(options);
try {
loading.value = false;
if (response._data.data) {
TableFilter(toRaw(response._data.data));
}
} catch (e) {
resultData.list = [];
console.log(e);
const { data, refresh } = await useFetch(() => `/v1${chain.value}/indexV1`, {
params: getParams(),
lazy: true,
method: "GET",
mode: "cors",
credentials: "include",
baseURL: getBaseUrl(),
onRequest(context: any) {},
onResponse({ request, response, options }) {
console.log(response.url);
console.log(response.status);
try {
loading.value = false;
if (response._data.data) {
TableFilter(toRaw(response._data.data));
}
return response._data;
},
onRequestError({ error }) {
console.log(error);
},
}
);
} catch (e) {
resultData.list = [];
console.log(e);
}
return response._data;
},
onRequestError({ error }) {
console.log(error);
},
onResponseError(error) {
console.log(error, "接口");
},
});
const next = () => {
loading.value = true;
......@@ -478,17 +491,17 @@ const getDefaultList = () => {
};
const CustomgetRoute = () => {
if (route.params.chain) {
let Obj = filterChainObj('name', route.params.chain);
let Obj = filterChainObj("name", route.params.chain);
if (Obj) {
ChainObj.value = Obj;
chain.value = Obj.value;
HeadTokenType.value = ChainObj.value.Currency[0];
}
} else {
ChainObj.value = filterChainObj('value', chain.value);
ChainObj.value = filterChainObj("value", chain.value);
}
if (route.params.page) {
if (typeof parseInt(route.params.page) === 'number')
if (typeof parseInt(route.params.page) === "number")
pageNum.value = parseInt(route.params.page);
GlbFilter.value.page = parseInt(route.params.page);
}
......@@ -501,9 +514,9 @@ useHead({
link: [webLogo],
meta: [
{
name: 'description',
name: "description",
content:
'DexFilter是一个链上过滤器,它对链上的所有数据进行统计、监控。可以通过过滤功能过滤出相应的链上项目。每个资金池都做了数据分析,深入分析资金池的涨跌趋势,方便用户做出判断,也方便用户查看资金池是否为貔貅。',
"DexFilter是一个链上过滤器,它对链上的所有数据进行统计、监控。可以通过过滤功能过滤出相应的链上项目。每个资金池都做了数据分析,深入分析资金池的涨跌趋势,方便用户做出判断,也方便用户查看资金池是否为貔貅。",
},
],
});
......@@ -514,7 +527,7 @@ const getColGroupWidth = () => {
// 动态改变吸顶表头的th宽度
colGroupList.list.forEach((it: any) => {
tableTrOne.value.forEach((item: any, index: number) => {
colGroupList.list[index] = item.clientWidth + 'px';
colGroupList.list[index] = item.clientWidth + "px";
});
});
};
......@@ -545,16 +558,16 @@ watch(
CurLineIndex.value = 0;
pageNum.value = 1;
// 修改title
ChainObj.value = filterChainObj('value', chain.value);
ChainObj.value = filterChainObj("value", chain.value);
getTableList();
}
);
// 判断是否需要加$
const Judgment = () => {
if (HeadTokenType.value === 'USDT') {
return '$';
if (HeadTokenType.value === "USDT") {
return "$";
} else {
return '';
return "";
}
};
// tbName---流动池折线图传递参数
......@@ -569,11 +582,11 @@ const handleRowClick = (item: any, index: number) => {
};
// 监听是否切出页面
const listenerWindow = (fn: any) => {
document.addEventListener('visibilitychange', fn);
document.addEventListener("visibilitychange", fn);
};
// 取消监听
const closeListener = (fn: any) => {
document.removeEventListener('visibilitychange', fn);
document.removeEventListener("visibilitychange", fn);
};
// 有数据,开启定时器
const Intervalfun = () => {
......@@ -593,7 +606,7 @@ const closeInterVal = () => {
const windowOpenFn = (e: any) => {
// ==visible代表在当前窗口
let isExist = e.target.visibilityState;
if (isExist === 'visible') {
if (isExist === "visible") {
// 先关再开
closeInterVal();
Intervalfun();
......@@ -610,9 +623,9 @@ const onCurrentChange = (v) => {
};
const onScrollEvent = () => {
// 获取滚动元素dom
BodyscrollDom.value = document.getElementById('layout-scroll');
BodyscrollDom.value = document.getElementById("layout-scroll");
if (BodyscrollDom.value) {
affixedHead.top = BodyscrollDom.value.offsetTop + 'px';
affixedHead.top = BodyscrollDom.value.offsetTop + "px";
BodyscrollDom.value.onscroll = function (e: any) {
let client = CustomHead.value.getBoundingClientRect();
if (client.top <= BodyscrollDom.value.offsetTop) {
......@@ -639,7 +652,7 @@ const onTableScroll = () => {
};
const setColGroupList = () => {
columnsChild.value.forEach((item: any) => {
colGroupList.list.push('0px');
colGroupList.list.push("0px");
});
};
onMounted(() => {
......@@ -692,79 +705,79 @@ onUnmounted(() => {
const columns = computed(() => {
return [
{
title: t('TableList.tokenbase'),
title: t("TableList.tokenbase"),
children: [
{
colKey: 'index',
width: 'auto',
title: '#',
colKey: "index",
width: "auto",
title: "#",
},
{
colKey: 'tn',
title: t('TableList.token'),
colKey: "tn",
title: t("TableList.token"),
},
],
},
{
title: t('TableList.basic'),
title: t("TableList.basic"),
children: [
{
colKey: 'up',
title: t('TableList.price'),
colKey: "up",
title: t("TableList.price"),
sort: true,
},
{
colKey: 'pb',
title: 'Pool',
colKey: "pb",
title: "Pool",
sort: true,
},
{
colKey: 'vn',
title: t('TableList.volume'),
colKey: "vn",
title: t("TableList.volume"),
sort: true,
},
{
colKey: 'txn',
title: t('TableList.txns'),
colKey: "txn",
title: t("TableList.txns"),
sort: true,
},
],
},
{
title: t('TableList.priceChange'),
title: t("TableList.priceChange"),
children: [
{
colKey: 'r5m',
title: t('TableList.time1'),
colKey: "r5m",
title: t("TableList.time1"),
sort: true,
},
{
colKey: 'r1h',
title: t('TableList.time2'),
colKey: "r1h",
title: t("TableList.time2"),
sort: true,
},
{
colKey: 'r4h',
title: t('TableList.time3'),
colKey: "r4h",
title: t("TableList.time3"),
sort: true,
},
{
colKey: 'r24h',
title: t('TableList.time4'),
colKey: "r24h",
title: t("TableList.time4"),
sort: true,
},
],
},
{
title: t('TableList.others'),
title: t("TableList.others"),
children: [
{
colKey: 'operation',
title: t('TableList.k_line'),
colKey: "operation",
title: t("TableList.k_line"),
},
{
colKey: 'media',
title: t('TableList.mediaData'),
colKey: "media",
title: t("TableList.mediaData"),
},
],
},
......@@ -784,21 +797,21 @@ const columnsChild = computed(() => {
let arr1 = new Array(100);
for (let i = 0; i < arr1.length; i++) {
arr1[i] = {
one: '1',
two: '2',
three: '3',
four: '4',
five: '5',
sex: '6',
seven: '7',
one: "1",
two: "2",
three: "3",
four: "4",
five: "5",
sex: "6",
seven: "7",
};
}
</script>
<style lang="less">
@import '@/style/variables.less';
@import '@/style/line.less';
@import '@/style/flex.less';
@import "@/style/variables.less";
@import "@/style/line.less";
@import "@/style/flex.less";
.custom-token-list {
margin-top: 8px;
box-sizing: border-box;
......@@ -841,7 +854,7 @@ for (let i = 0; i < arr1.length; i++) {
font-size: 14px;
color: var(--td--main-btn-color-1);
white-space: nowrap;
font-family: 'bold';
font-family: "bold";
padding: 4px 12px;
}
.t-align-center {
......@@ -864,7 +877,7 @@ for (let i = 0; i < arr1.length; i++) {
th {
font-weight: 500;
font-size: 14px;
font-family: 'Medium';
font-family: "Medium";
border-bottom: 1px solid var(--new-border-4);
padding: 10px 12px;
.thead-sort-box {
......@@ -906,7 +919,7 @@ for (let i = 0; i < arr1.length; i++) {
font-size: 14px;
color: var(--td--main-btn-color-1);
white-space: nowrap;
font-family: 'bold';
font-family: "bold";
padding: 4px 12px;
}
.t-align-center {
......@@ -929,7 +942,7 @@ for (let i = 0; i < arr1.length; i++) {
th {
font-weight: 500;
font-size: 14px;
font-family: 'Medium';
font-family: "Medium";
border-bottom: 1px solid var(--new-border-4);
padding: 10px 12px;
.thead-sort-box {
......@@ -954,7 +967,7 @@ for (let i = 0; i < arr1.length; i++) {
border: none;
border-bottom: 1px solid var(--new-border-3);
background: var(--new-background-5);
font-family: 'Regular';
font-family: "Regular";
padding: 10px 12px;
.custom-no-list {
.dja();
......@@ -985,7 +998,7 @@ for (let i = 0; i < arr1.length; i++) {
color: var(--main-theme-color);
font-weight: 700;
font-size: 16px;
font-family: 'bold';
font-family: "bold";
}
.symbol {
color: var(--td-search-btn-back-1);
......
......@@ -108,23 +108,23 @@
</div>
</template>
<script setup lang="ts">
import request from '@/utils/request';
import { parsePercent, parseCoinAmount } from '@/utils/tool';
import TimeTab from './TimeTab.vue';
import SecurityCheck from './SecurityCheck.vue';
import TokenInfo from './TokenInfo.vue';
import TokenPool from './TokenPool.vue';
import TokenSocialList from './TokenSocialList.vue';
import * as Cache from '@/utils/cache';
import { MessagePlugin } from 'tdesign-vue-next';
import DetailsEcharts from '../analysis/detailsEcharts.vue';
import Detailsicon from '/public/images/svg/rightDetail/detailsicon.svg';
import Favo from '/public/images/svg/rightDetail/favo.svg';
import CollectionSvg from '/public/images/svg/rightDetail/colection.svg';
import { useI18n } from 'vue-i18n';
import RightDetailHeader from './rightDetailHeader';
import SubmitSocialInfo from './SubmitSocialInfo';
import Collection from './collection';
import request from "@/utils/request";
import { parsePercent, parseCoinAmount } from "@/utils/tool";
import TimeTab from "./TimeTab.vue";
import SecurityCheck from "./SecurityCheck.vue";
import TokenInfo from "./TokenInfo.vue";
import TokenPool from "./TokenPool.vue";
import TokenSocialList from "./TokenSocialList.vue";
import * as Cache from "@/utils/cache";
import { MessagePlugin } from "tdesign-vue-next";
import DetailsEcharts from "../analysis/detailsEcharts.vue";
import Detailsicon from "/public/images/svg/rightDetail/detailsicon.svg";
import Favo from "/public/images/svg/rightDetail/favo.svg";
import CollectionSvg from "/public/images/svg/rightDetail/colection.svg";
import { useI18n } from "vue-i18n";
import RightDetailHeader from "./rightDetailHeader";
import SubmitSocialInfo from "./SubmitSocialInfo";
import Collection from "./collection";
const router = useRouter();
const { t, locale } = useI18n();
// 通知表格收藏图表取消收藏
......@@ -133,16 +133,16 @@ const CollectionDe = CollectionDelete();
// const initEchart = computed(() => store.getters['echart/gethasInit']);
const headerBtns = computed(() => [
{
label: t('securityCheck.details'),
value: 'details',
label: t("securityCheck.details"),
value: "details",
},
{
label: t('filter.Collection'),
value: 'collection',
label: t("filter.Collection"),
value: "collection",
},
{
label: t('securityCheck.analysis'),
value: 'echart',
label: t("securityCheck.analysis"),
value: "echart",
},
]);
const props = defineProps({
......@@ -154,52 +154,52 @@ const props = defineProps({
mt: String,
up: Number,
});
const emit = defineEmits(['update:setPool', 'SettwitterRul']);
const r24h = ref('');
const numR24h = ref('');
const emit = defineEmits(["update:setPool", "SettwitterRul"]);
const r24h = ref("");
const numR24h = ref("");
// 收藏列表是否首次加载
const CollectionOnload = ref(false);
// 判断当前路由,隐藏右侧详情box中的折线图模块
const currentRouter = router.currentRoute.value.name;
const currentTab = ref('info');
const currentTab = ref("info");
const isInCollection = ref(false);
// 默认选择detail按钮
const defaBtn = ref('details');
const defaBtn = ref("details");
const ifDetails = ref(false);
const WatchEcharts = useWatchEcharts();
// 传给详情折线图的tbname
const tb = ref('');
const tb = ref("");
// 点击pool才加载
const isPool = ref(false);
const PoolAddress = ref('');
const PoolAddress = ref("");
// 当前链
const chain = useChain();
const tokenInfo: any = ref({
avatar: '',
token: '',
avatar: "",
token: "",
pool: [],
});
const getPriceRange = () => {
const { up, r24h: proR24h } = props;
if ((proR24h + '')[0] == '-') {
if ((proR24h + "")[0] == "-") {
// -,跌
let newR24h = parseFloat((proR24h + '').replace('-', ''));
let newR24h = parseFloat((proR24h + "").replace("-", ""));
// 原价
let oldPrice = props.up / (1 - newR24h);
numR24h.value = oldPrice - props.up;
numR24h.value = '-' + parseCoinAmount(numR24h.value);
numR24h.value = "-" + parseCoinAmount(numR24h.value);
} else if (proR24h == 0) {
numR24h.value = '+0';
numR24h.value = "+0";
} else {
// +,涨
// 原价
let oldPrice = props.up / (proR24h + 1);
numR24h.value = props.up - oldPrice;
numR24h.value = '+' + parseCoinAmount(numR24h.value);
numR24h.value = "+" + parseCoinAmount(numR24h.value);
}
r24h.value = parsePercent(proR24h + '');
if (r24h.value[0] !== '-') {
r24h.value = '+' + r24h.value;
r24h.value = parsePercent(proR24h + "");
if (r24h.value[0] !== "-") {
r24h.value = "+" + r24h.value;
}
};
watch(
......@@ -213,13 +213,13 @@ watch(
watch(
() => props.r24h,
(v) => {
if (typeof v !== 'undefined') {
if (typeof v !== "undefined") {
getPriceRange();
}
}
);
const btnLoad = (value: string) => {
if (currentRouter == 'tokenAnalysis' && value == 'echart') {
if (currentRouter == "tokenAnalysis" && value == "echart") {
return false;
}
return true;
......@@ -235,7 +235,7 @@ watch(
);
// 流动池tab改变
const changeTab = (value) => {
if (value === 'pool') {
if (value === "pool") {
isPool.value = true;
}
};
......@@ -249,31 +249,31 @@ const getTokenInfo = async () => {
},
});
result.marketCap = parseFloat(result.supply * result.up + '').toFixed(1);
result.tokenSub = '';
result.marketCap = parseFloat(result.supply * result.up + "").toFixed(1);
result.tokenSub = "";
if (result.token) {
result.tokenSub =
result.token.substr(0, 6) +
'...' +
"..." +
result.token.substr(result.token.length - 4, 4);
}
// tbname-掩码
result.tbnameSub = '';
result.n_tb = '';
result.tbnameSub = "";
result.n_tb = "";
if (props.tb) {
// 先将d去掉
result.n_tb =
props.tb[0] == 'd' ? props.tb.slice(1, props.tb.length) : props.tb;
props.tb[0] == "d" ? props.tb.slice(1, props.tb.length) : props.tb;
result.tbnameSub =
result.n_tb.substr(0, 6) +
'...' +
"..." +
result.n_tb.substr(result.n_tb.length - 4, 4);
}
isInCollection.value = Cache.hasSet(props.tb);
Object.assign(tokenInfo.value, result);
// 如果有推特链接,提交给twitter组件解析
if ('chat' in result) {
emit('SettwitterRul', result.chat.twitter);
if ("chat" in result) {
emit("SettwitterRul", result.chat.twitter);
}
} catch (e) {
console.log(e);
......@@ -283,7 +283,7 @@ const getTokenInfo = async () => {
watch(
() => locale.value,
(v) => {
if (defaBtn.value == 'echart') {
if (defaBtn.value == "echart") {
WatchEcharts.value += 1;
}
}
......@@ -291,16 +291,16 @@ watch(
// 点击查看token详情信息
// v-if v-show同时使用,折线图第一次加载后,不在使用v-if,减少请求
const gotoDetail = (value) => {
if (value == 'collection' && !CollectionOnload.value) {
if (value == "collection" && !CollectionOnload.value) {
CollectionOnload.value = true;
}
// 先判断是否有token,没有则禁止打开折线图模块
if (!props.tb && value === 'echart') {
if (!props.tb && value === "echart") {
MessagePlugin.closeAll();
MessagePlugin.warning(t('MessagePlugin.plToken'));
MessagePlugin.warning(t("MessagePlugin.plToken"));
return;
}
if (value === 'echart') {
if (value === "echart") {
tb.value = props.tb;
ifDetails.value = true;
}
......@@ -315,14 +315,14 @@ const monitor = computed((value) => {
// 接收右侧详情流动池address
const changePool = (PoolValue) => {
PoolAddress.value = PoolValue;
emit('update:setPool', PoolValue);
emit("update:setPool", PoolValue);
};
watch(
() => props.token,
(v) => {
if (v) {
//如果折线图为隐藏状态,需注销折线图模块
if (defaBtn.value != 'echart') {
if (defaBtn.value != "echart") {
ifDetails.value = false;
}
tb.value = props.tb;
......@@ -332,8 +332,8 @@ watch(
);
</script>
<style lang="less">
@import '@/style/flex.less';
@import '@/style/variables.less';
@import "@/style/flex.less";
@import "@/style/variables.less";
.right-detail-wrapper {
height: calc(100vh - 70px);
flex: 1;
......@@ -361,7 +361,7 @@ watch(
font-size: 14px;
margin: 0;
padding: 0;
font-family: 'Regular';
font-family: "Regular";
.details-icon-cl {
width: 30px;
fill: var(--td-search-btn-back-1);
......@@ -437,7 +437,7 @@ watch(
border-bottom-left-radius: @border-radius;
border-bottom-right-radius: @border-radius;
.t-tabs__nav-item-text-wrapper {
font-family: 'Medium';
font-family: "Medium";
}
.t-tabs__header {
background-color: var(--td--right-back-color-2);
......
import { defineComponent, computed } from 'vue';
import { useI18n } from 'vue-i18n';
import { StarFilledIcon } from 'tdesign-icons-vue-next';
import CopySvg from '/public/images/svg/rightDetail/copy.svg';
import useCopy from '@/hooks/useCopy';
import * as Cache from '@/utils/cache';
import './index.less';
import CollectionSvg2 from '/public/images/svg/rightDetail/colection2.svg';
import CollectionSvg3 from '/public/images/svg/rightDetail/collection-yes.svg';
import Price from './price.vue';
import { defineComponent, computed } from "vue";
import { useI18n } from "vue-i18n";
import CopySvg from "/public/images/svg/rightDetail/copy.svg";
import useCopy from "@/hooks/useCopy";
import * as Cache from "@/utils/cache";
import "./index.less";
import CollectionSvg2 from "/public/images/svg/rightDetail/colection2.svg";
import CollectionSvg3 from "/public/images/svg/rightDetail/collection-yes.svg";
import Price from "./price.vue";
export default defineComponent({
props: {
tokenInfo: Object as any,
......@@ -17,7 +16,7 @@ export default defineComponent({
tb: String,
currentPath: String,
},
emits: ['update:isInCollection'],
emits: ["update:isInCollection"],
setup(props, { emit }) {
const { t } = useI18n();
// 收藏表格是否更新
......@@ -33,24 +32,24 @@ export default defineComponent({
},
]);
}
emit('update:isInCollection', false);
emit("update:isInCollection", false);
} else {
Cache.setCollection({
hash: tb,
symbol: tokenInfo.symbol,
path: currentPath,
});
emit('update:isInCollection', true);
emit("update:isInCollection", true);
}
// 通知select中的收藏数据更新
CollectionCl.value += 1;
};
const r24hColor = () => {
if (props.r24h) {
if (props.r24h[0] === '-') {
return '#f85260';
if (props.r24h[0] === "-") {
return "#f85260";
} else {
return '#23ab94';
return "#23ab94";
}
}
};
......@@ -58,15 +57,15 @@ export default defineComponent({
const { tokenInfo } = props;
try {
if (Object.keys(tokenInfo).length) {
if ('chat' in tokenInfo) {
if ("chat" in tokenInfo) {
return tokenInfo.chat.img;
} else {
return '/images/img/default-avatar.png';
return "/images/img/default-avatar.png";
}
}
} catch (e) {
console.log(e);
return '/images/img/default-avatar.png';
return "/images/img/default-avatar.png";
}
});
return () => (
......@@ -80,7 +79,7 @@ export default defineComponent({
</div>
<div class="address-info">
<span class="address-info-item">
<span>{t('TableList.token')}</span>
<span>{t("TableList.token")}</span>
<span class="address">{props.tokenInfo.tokenSub}</span>
<span onClick={doCopy.bind(this, props.tokenInfo.token)}>
<CopySvg></CopySvg>
......@@ -89,7 +88,7 @@ export default defineComponent({
</div>
<div class="address-info margin">
<span class="address-info-item">
<span>{t('TableList.pool')}</span>
<span>{t("TableList.pool")}</span>
<span class="address">{props.tokenInfo.tbnameSub}</span>
<span onClick={doCopy.bind(this, props.tokenInfo.n_tb)}>
<CopySvg></CopySvg>
......@@ -120,15 +119,13 @@ export default defineComponent({
<div class="filled-star-box">
<span>
{props.isInCollection ? (
<CollectionSvg3
class="filled-star"
onClick={collectData}
/>
<span onClick={collectData}>
<CollectionSvg3 class="filled-star" />
</span>
) : (
<CollectionSvg2
onClick={collectData}
class="filled-star-on"
></CollectionSvg2>
<span onClick={collectData}>
<CollectionSvg2 class="filled-star-on"></CollectionSvg2>
</span>
)}
</span>
</div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment