diff --git a/components.d.ts b/components.d.ts index 0eab7d1..75f6585 100644 --- a/components.d.ts +++ b/components.d.ts @@ -11,15 +11,12 @@ declare module '@vue/runtime-core' { BkTable: typeof import('./src/components/table/desktop/bkTable.vue')['default'] BkTableDetails: typeof import('./src/components/table/desktop/bkTableDetails.vue')['default'] DetailsRow: typeof import('./src/components/table/dBase/detailsRow.vue')['default'] - ElButton: typeof import('element-plus/es')['ElButton'] ElIcon: typeof import('element-plus/es')['ElIcon'] ElInput: typeof import('element-plus/es')['ElInput'] ElPagination: typeof import('element-plus/es')['ElPagination'] ElPopover: typeof import('element-plus/es')['ElPopover'] ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem'] - ElTable: typeof import('element-plus/es')['ElTable'] - ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabs: typeof import('element-plus/es')['ElTabs'] ElTooltip: typeof import('element-plus/es')['ElTooltip'] @@ -38,10 +35,12 @@ declare module '@vue/runtime-core' { TokensCard: typeof import('./src/components/table/mBase/tokensCard.vue')['default'] TokensDetails: typeof import('./src/components/table/desktop/tokensDetails.vue')['default'] TokensDetailsRow: typeof import('./src/components/table/dBase/tokensDetailsRow.vue')['default'] + TokensRow: typeof import('./src/components/table/dBase/tokensRow.vue')['default'] TokensTable: typeof import('./src/components/table/desktop/tokensTable.vue')['default'] TransactCard: typeof import('./src/components/table/mBase/transactCard.vue')['default'] TransactDetails: typeof import('./src/components/table/desktop/transactDetails.vue')['default'] TransactDetailsRow: typeof import('./src/components/table/dBase/transactDetailsRow.vue')['default'] + TransactRow: typeof import('./src/components/table/dBase/transactRow.vue')['default'] TransactTable: typeof import('./src/components/table/desktop/transactTable.vue')['default'] TransfersRow: typeof import('./src/components/table/dBase/transfersRow.vue')['default'] UpperLowerSwitch: typeof import('./src/components/base/UpperLowerSwitch.vue')['default'] diff --git a/index.html b/index.html index 143557b..8f51f8a 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,9 @@ - + - Vite + Vue + TS + MetaForce Scan
diff --git a/public/BITCOOO.ico b/public/BITCOOO.ico new file mode 100644 index 0000000..e44f000 Binary files /dev/null and b/public/BITCOOO.ico differ diff --git a/public/vite.svg b/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/api/TokensController/index.ts b/src/api/TokensController/index.ts index 03045f1..7f4ad4f 100644 --- a/src/api/TokensController/index.ts +++ b/src/api/TokensController/index.ts @@ -41,3 +41,11 @@ export const getFindTokenInfo = (params: TokenInfoProps) => { params, }) } + +// /api/token/findTokenListHome +export const getFindTokenListHome = () => { + return requestService({ + url: '/api/token/findTokenListHome', + method: 'get', + }) +} diff --git a/src/api/config.ts b/src/api/config.ts index a53a765..810835c 100644 --- a/src/api/config.ts +++ b/src/api/config.ts @@ -1,4 +1,6 @@ +const baseURL = 'http://wallet-chaindata-api.weirui0755.com' +// const baseURL = 'https://apiasia.mbc.network/' export const baseConfig = { - baseURL: 'http://wallet-chaindata-api.weirui0755.com', + baseURL: baseURL, requestTimeout: 10000, } diff --git a/src/components/footer.vue b/src/components/footer.vue index 21566cc..75c47d0 100644 --- a/src/components/footer.vue +++ b/src/components/footer.vue @@ -7,8 +7,16 @@

Tokens

-

NFT

-

+

+ NFT +

+

VNFT

-
+
MetaForce Scan
- {{ item.hash || '-' }} + {{ + item.info || '-' + }}
+
diff --git a/src/components/table/constant.ts b/src/components/table/constant.ts index b795227..8efb60b 100644 --- a/src/components/table/constant.ts +++ b/src/components/table/constant.ts @@ -104,12 +104,15 @@ export const transactTableCollocate = { '', '', ], + links: ['tx', 'blocks', '', '', 'tokens', 'tokens', '', ''], + linkValue: ['txnHash', 'blockNumber', '', '', 'txnFrom', 'txnTo', '', ''], } // transactDetails表配置 export const transactDetailsCollocate = { labels: [ 'Transaction Hash', 'Result', + 'Block', 'Time', 'From', 'Interacted With (To)', @@ -123,6 +126,7 @@ export const transactDetailsCollocate = { sequence: [ 'hash', 'result', + 'blockNumber', 'time', 'from', 'to', @@ -146,6 +150,7 @@ export const transactDetailsCollocate = { '', '', '', + '', ], // 数据颜色 isCopys: [ true, @@ -160,12 +165,19 @@ export const transactDetailsCollocate = { false, false, false, + false, ], // 是否可复制 - links: ['', '', '', 'tokens', 'tokens', '', '', '', '', '', '', ''], + links: ['', '', 'blocks', '', 'tokens', 'tokens', '', '', '', '', '', '', ''], } // tokensTable 表配置 export const tokensTableCollocate = { - labels: ['serial number', 'Token', 'Adress', 'Total Supply', 'Holders Count'], // 表头 + labels: [ + 'Serial number', + 'Token', + 'Address', + 'Total supply', + 'Holders Count', + ], // 表头 sequence: [ 'serialNumber', 'symbol', @@ -180,10 +192,12 @@ export const tokensTableCollocate = { } // tokensTable 表配置 export const tokensMobileCollocate = { - labels: ['Token', 'Adress', 'Total Supply', 'Holders Count'], // 表头 + labels: ['Token', 'Address', 'Total Supply', 'Holders Count'], // 表头 sequence: ['symbol', 'contractAddress', 'totalSupply', 'addressesCount'], // 对应数据的变量名称 // 数据颜色 colorSequence: ['text-blue-65B5FF', 'text-blue-65B5FF', '', ''], + links: ['BitcNFt', 'tokens', '', ''], + linkValue: ['txnContractAddress', 'txnContractAddress', '', ''], // 对应传递的值 } // detailsbkTable表配置 export const tokensDetailsCollocate = { diff --git a/src/components/table/dBase/bkRow.vue b/src/components/table/dBase/bkRow.vue index b5d3aac..5e0455b 100644 --- a/src/components/table/dBase/bkRow.vue +++ b/src/components/table/dBase/bkRow.vue @@ -19,7 +19,6 @@ v-if="item !== 'result'" :class="colorSequence[index] || 'text-white'" class="text-[14px] font-medium" - @click="handleClick(link?.[index])" > {{ values[item] }} @@ -66,13 +65,8 @@ const props = defineProps({ type: Array as PropType, required: true, }, - link: Array, last: Boolean, }) -const router = useRouter() -const handleClick = (route: any) => { - router.replace(`/${route}/${props.values.txnContractAddress}`) -} diff --git a/src/components/table/dBase/detailsRow.vue b/src/components/table/dBase/detailsRow.vue index 109123d..9fc1c5b 100644 --- a/src/components/table/dBase/detailsRow.vue +++ b/src/components/table/dBase/detailsRow.vue @@ -33,6 +33,7 @@ diff --git a/src/components/table/dBase/tokensRow.vue b/src/components/table/dBase/tokensRow.vue new file mode 100644 index 0000000..1d32496 --- /dev/null +++ b/src/components/table/dBase/tokensRow.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/components/table/dBase/transactDetailsRow.vue b/src/components/table/dBase/transactDetailsRow.vue index 5d3b9c0..93cbfc7 100644 --- a/src/components/table/dBase/transactDetailsRow.vue +++ b/src/components/table/dBase/transactDetailsRow.vue @@ -58,21 +58,35 @@
-

+

{{ listData[item] }} {{ index === list.length - 1 ? listData.symbol : '' }}

- +
+ +

{{ value }}

@@ -94,16 +108,21 @@ diff --git a/src/components/table/dBase/transactRow.vue b/src/components/table/dBase/transactRow.vue new file mode 100644 index 0000000..a74aee5 --- /dev/null +++ b/src/components/table/dBase/transactRow.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/components/table/dBase/transfersRow.vue b/src/components/table/dBase/transfersRow.vue index 00245a8..f59dfdd 100644 --- a/src/components/table/dBase/transfersRow.vue +++ b/src/components/table/dBase/transfersRow.vue @@ -3,7 +3,12 @@ class="flex flex-1 flex-row justify-between items-center py-[16px] pl-[18px] border-b border-b-black-3B3B3C" >
-

{{ title }}

+

+ {{ title }} +

import Icons from '@src/components/icons/index.vue' import { useRouter } from 'vue-router' -defineProps({ +const props = defineProps({ title: [String, Number], + blockNumber: [String, Number] as any, value1: String, value2: String, value3: String, @@ -56,6 +62,8 @@ defineProps({ }) const router = useRouter() const handleRouter = (route: string) => { + console.log(route) + console.log(props.blockNumber) router.replace(route) } diff --git a/src/components/table/desktop/bkTable.vue b/src/components/table/desktop/bkTable.vue index 4e5a9d7..e33a6d6 100644 --- a/src/components/table/desktop/bkTable.vue +++ b/src/components/table/desktop/bkTable.vue @@ -93,7 +93,7 @@ const initBlock = async (page: number) => { // 初始化websocket连接 const initWebSocket = () => { - ws.value = new WebSocket('ws://wallet-chaindata-api.weirui0755.com/websocket') + ws.value = new WebSocket('wss://apiasia.mbc.network/websocket') ws.value.addEventListener('open', () => { ws.value?.send(JSON.stringify({ type: 'add_block' })) }) @@ -105,6 +105,10 @@ const initWebSocket = () => { ...res.value[0], timestamp: timeConvert(res.value[0]?.timestamp), } + // 判断和当前第一页的是否重复 + if (item?.number == currentData.value?.number) { + return + } currentData.value = [item, ...currentData.value] currentData.value.length = 10 } catch (error) {} diff --git a/src/components/table/desktop/bkTableDetails.vue b/src/components/table/desktop/bkTableDetails.vue index 9cc03ae..ff1837e 100644 --- a/src/components/table/desktop/bkTableDetails.vue +++ b/src/components/table/desktop/bkTableDetails.vue @@ -70,7 +70,6 @@ watchEffect(() => { watchEffect(() => { blockId.value = currentData.value?.number }) - const invariable = { ...detailsCollocate, } diff --git a/src/components/table/desktop/hpTable.vue b/src/components/table/desktop/hpTable.vue index 7ef19f5..dc6b87b 100644 --- a/src/components/table/desktop/hpTable.vue +++ b/src/components/table/desktop/hpTable.vue @@ -18,7 +18,7 @@ const props = defineProps({ data: Array as any, }) -const thList = ['Txn Hash', 'From', 'To', 'Date / Time', 'Fee(MBC)'] +const thList = ['Txn Hash', 'From', 'To', 'Date / Time', 'Fee (MBC)'] const sequence = ['txnHash', 'from', 'to', 'time', 'fee'] diff --git a/src/components/table/desktop/tokensTable.vue b/src/components/table/desktop/tokensTable.vue index 71a5b38..fbcfbb8 100644 --- a/src/components/table/desktop/tokensTable.vue +++ b/src/components/table/desktop/tokensTable.vue @@ -23,7 +23,7 @@ :key="item?.txnContractAddress + index" > - -

+
@@ -36,7 +30,7 @@ const invariable = { const currentData = ref() const router = useRouter() const handleClick = (route: any) => { - router.replace(`/tokens/${route}`) + route && router.replace(route) } watchEffect(() => { currentData.value = props.data @@ -46,9 +40,9 @@ watchEffect(() => { ) invariable.sequence = invariable.sequence.filter((t) => t !== 'receiptList') invariable.colorSequence = invariable.colorSequence.filter( - (t, i) => i !== 5 + (t, i) => i !== 6 ) - invariable.isCopys = invariable.isCopys.filter((t, i) => i !== 5) + invariable.isCopys = invariable.isCopys.filter((t, i) => i !== 6) } }) diff --git a/src/components/table/desktop/transactTable.vue b/src/components/table/desktop/transactTable.vue index eeaab62..8e5f159 100644 --- a/src/components/table/desktop/transactTable.vue +++ b/src/components/table/desktop/transactTable.vue @@ -16,15 +16,13 @@ /> @@ -47,7 +45,7 @@ diff --git a/src/components/table/mBase/transactCard.vue b/src/components/table/mBase/transactCard.vue index c013aa5..6808caf 100644 --- a/src/components/table/mBase/transactCard.vue +++ b/src/components/table/mBase/transactCard.vue @@ -7,7 +7,9 @@ class="flex flex-half min-w-6/12" v-for="(item, index) in invariable.labels" :key="index" - @click="routerLink(cardData.block)" + @click=" + handleClick(invariable.links[index], invariable.linkValue?.[index]) + " > router.push(`/tx/${id}`) +const handleClick = (route: any, link: any) => { + route && router.replace(`/${route}/${props.cardData[link]}`) +} diff --git a/src/components/table/mBase/transactDetailsRow.vue b/src/components/table/mBase/transactDetailsRow.vue index 3f9c09a..dfd3827 100644 --- a/src/components/table/mBase/transactDetailsRow.vue +++ b/src/components/table/mBase/transactDetailsRow.vue @@ -1,5 +1,5 @@ diff --git a/src/pages/HomePage/index.vue b/src/pages/HomePage/index.vue index 14bb82b..88573a1 100644 --- a/src/pages/HomePage/index.vue +++ b/src/pages/HomePage/index.vue @@ -45,7 +45,7 @@

{ // 获取主页接口 const res = await getHomePageList() overview[1].value = res.data.totalTransactions - overview[2].value = res.data.averageBlockTime + overview[2].value = `${res.data.averageBlockTime} s` // 获取tokens接口拿到总数 const tokenRes = await getFindTokenList({}) overview[3].value = tokenRes.data.total @@ -143,7 +143,7 @@ const initRequist = async () => { } // 初始化websocket连接 const initWebSocket = () => { - ws.value = new WebSocket('ws://wallet-chaindata-api.weirui0755.com/websocket') + ws.value = new WebSocket('wss://apiasia.mbc.network/websocket') ws.value.addEventListener('open', () => { ws.value?.send(JSON.stringify({ type: 'add_block' })) diff --git a/src/pages/TableBlock/Block/details.vue b/src/pages/TableBlock/Block/details.vue index 74767d2..d20322a 100644 --- a/src/pages/TableBlock/Block/details.vue +++ b/src/pages/TableBlock/Block/details.vue @@ -44,11 +44,19 @@ v-for="(item, index) in rowsData" :key="index + item.title" :title="item.title" + :blockNumber="item?.blockNumber" :value1="item.value1" :value2="item.value2" :value3="item.value3" :state="item.state" /> +

@@ -72,42 +80,68 @@ import BkDesktopDetails from '@src/components/table/desktop/bkTableDetails.vue' import BkMobileDetails from '@src/components/table/mobile/bkTableDetails.vue' import router from '@src/routes' -import { onMounted, ref } from 'vue' +import { onMounted, ref, watchEffect } from 'vue' import { useRoute } from 'vue-router' const route = useRoute() const active = ref('Block') let detailsData = ref([]) let rowsData = ref([]) +let currentHash = ref('') +let page = ref(1) const initRequest = async (hash: string) => { - // 请求获取详情数据 - const res = await getBlock({ hash: hash }) + let blockp = {} + if (hash != undefined && /^-{0,1}\d*\.{0,1}\d+$/.test(hash)) { + // 如果传递的是 id + blockp = { + number: hash, + } + } else { + // 如果传递的是hash + blockp = { + hash: hash, + } + } + const res = await getBlock(blockp) detailsData.value = res.data + console.log(detailsData.value) + currentHash.value = res?.data?.number + requestDetails(res?.data?.number) +} + +const requestDetails = async (id: any, page?: any) => { // 根据number请求底部的Transactions数据 const params = { - number: res?.data?.number, - pageNum: 1, - pageSize: 20, + number: id, + pageNum: page || 1, + pageSize: 5, } const rows = await getFindTransactionListPage(params) + console.log(rows.data) + // rows.data.rows + if (rows.data.rows.length == 0) { + return false + } rowsData.value = rows.data.rows.map((item: any) => { return { ...item, title: `Block #${item.blockNumber}`, - value1: item?.blockHash || '123321', + blockNumber: item?.blockNumber, + value1: item?.hash, value2: item?.from || 'hhh', value3: item?.to || 'to', state: item?.status === '0x1' ? 'Success' : 'Faild', } }) + return true } -onMounted(() => { - // 计算hash 通过hash获取数据 - let hash = route.path.split('/')?.[2] - if (!hash) { +watchEffect(() => { + // 计算最后一个携带的参数 + let hash = route.path.split('/')?.[2] || undefined + if (hash == undefined) { return } initRequest(hash) @@ -115,6 +149,30 @@ onMounted(() => { // 路由回退 const goBack = () => router.replace('/blocks') +// 上一页 +const handlePrev = async () => { + if (page.value == 1) { + return + } + if (currentHash.value == '' || currentHash.value == undefined) { + return + } + const res = await requestDetails(currentHash.value, page.value - 1) + if (res) { + page.value = page.value - 1 + } +} + +// 下一页 +const handleNext = async () => { + if (currentHash.value == '' || currentHash.value == undefined) { + return + } + const res = await requestDetails(currentHash.value, page.value + 1) + if (res) { + page.value = page.value + 1 + } +} diff --git a/src/pages/VNFT/centerContent.vue b/src/pages/VNFT/centerContent.vue index c399ba6..776f39a 100644 --- a/src/pages/VNFT/centerContent.vue +++ b/src/pages/VNFT/centerContent.vue @@ -4,7 +4,7 @@ >
diff --git a/src/pages/VNFT/transfersRow.vue b/src/pages/VNFT/transfersRow.vue index 25844af..bf30041 100644 --- a/src/pages/VNFT/transfersRow.vue +++ b/src/pages/VNFT/transfersRow.vue @@ -3,16 +3,34 @@ class="flex flex-1 flex-row justify-between items-center py-[16px] pl-[18px] border-b border-b-black-3B3B3C" >
-

{{ title }}

-

+

+ {{ title }} +

+

{{ value1 }}

-

{{ value2 }}

+

+ {{ value2 }} +

-

{{ value3 }}

+

+ {{ value3 }} +

import Icons from '@src/components/icons/index.vue' -defineProps({ +import { useRouter } from 'vue-router' +const props = defineProps({ title: String, + blockNumber: [String, Number] as any, value1: String, value2: String, value3: String, state: String, }) +const router = useRouter() +const handleRouter = (route: string) => { + router.replace(route) +} diff --git a/src/routes.ts b/src/routes.ts index a0e0b68..d591b1f 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -7,7 +7,7 @@ import BlockDetails from './pages/TableBlock/Block/details.vue' import transactDetails from './pages/TableBlock/Transactions/details.vue' import tokensDetails from './pages/TableBlock/Tokens/details.vue' -import BitcNFT from './pages/BitcNFt/index.vue' +import BitcNFt from './pages/BitcNFt/index.vue' import AliasVNFT from './pages/VNFT/index.vue' const routes: VueRouter.RouteRecordRaw[] = [ @@ -64,12 +64,12 @@ const routes: VueRouter.RouteRecordRaw[] = [ ], }, { - path: '/BitcNFT', - component: BitcNFT, + path: '/BitcNFt', + component: BitcNFt, children: [ { - path: '/BitcNFT/:id', - component: BitcNFT, + path: '/BitcNFt/:id', + component: BitcNFt, }, ], }, @@ -91,4 +91,8 @@ const router = VueRouter.createRouter({ routes, }) +router.afterEach(() => { + window.scrollTo(0, 0) +}) + export default router diff --git a/src/utils/string.ts b/src/utils/string.ts index 52edf38..00e2d24 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -9,5 +9,5 @@ export const middleDecimal = (char: string) => { } export const timeConvert = (time: number) => { - return dayjs().format('YYYY-MM-DD hh:mm:ss') + return dayjs(time).format('YYYY-MM-DD HH:mm:ss') } diff --git a/vite.config.ts b/vite.config.ts index cec895b..4f1d907 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -31,7 +31,7 @@ export default defineConfig({ server: { proxy: { '/api': { - target: 'http://wallet-chaindata-api.weirui0755.com/api', //实际请求地址 + target: 'https://apiasia.mbc.network/api', //实际请求地址 changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, ''), },