diff --git a/package.json b/package.json index 3d9982b..7f9d899 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,10 @@ "lint": "vue-cli-service lint" }, "dependencies": { + "@33cn/chain33-rpc-api": "^1.5.29", + "@element-plus/icons": "^0.0.11", "axios": "^0.21.4", + "element-plus": "^1.1.0-beta.16", "vue": "^3.2.11", "vue-router": "^4.0.11", "vuex": "^4.0.2", diff --git a/public/assets/images/ball.png b/public/assets/images/ball.png new file mode 100644 index 0000000..043c63f Binary files /dev/null and b/public/assets/images/ball.png differ diff --git a/public/assets/images/logo.png b/public/assets/images/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/public/assets/images/logo.png differ diff --git a/src/App.vue b/src/App.vue index 25a1ace..a0f25bd 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,12 +1,18 @@ diff --git a/src/api/index.ts b/src/api/index.ts index 525a991..e77b76b 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,7 +1,8 @@ import auth from './interfaces/auth' import user from './interfaces/user' - +import block from './interfaces/block' export { auth, - user + user, + block } diff --git a/src/api/interfaces/block.ts b/src/api/interfaces/block.ts new file mode 100644 index 0000000..cfc1d34 --- /dev/null +++ b/src/api/interfaces/block.ts @@ -0,0 +1,3 @@ +import Chain33Rpc from '@33cn/chain33-rpc-api' + +export default new Chain33Rpc('http://explorer.cnskl.com/api', null) diff --git a/src/assets/ball.png b/src/assets/ball.png new file mode 100644 index 0000000..043c63f Binary files /dev/null and b/src/assets/ball.png differ diff --git a/src/components/Banner.vue b/src/components/Banner.vue new file mode 100644 index 0000000..7bf58a5 --- /dev/null +++ b/src/components/Banner.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/src/components/Footer.vue b/src/components/Footer.vue new file mode 100644 index 0000000..a135c5e --- /dev/null +++ b/src/components/Footer.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/components/Header.vue b/src/components/Header.vue new file mode 100644 index 0000000..99356f5 --- /dev/null +++ b/src/components/Header.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/components/Nav.vue b/src/components/Nav.vue new file mode 100644 index 0000000..e9b060c --- /dev/null +++ b/src/components/Nav.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/main.ts b/src/main.ts index c70ef32..fb7b72d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,3 +1,5 @@ +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' import { createApp } from 'vue' import App from './App.vue' import router from './router' @@ -5,6 +7,7 @@ import store, { key } from './store' const app = createApp(App) +app.use(ElementPlus) app.use(store, key) app.use(router) app.mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts index 5435b5c..b61ef6f 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -2,6 +2,7 @@ import vuex from '@/store' import type { MyRouteMeta, MyRouteRecordRaw } from '@/types/router' import { createRouter, createWebHistory } from 'vue-router' import auth from './routers/auth' +import block from './routers/block' import user from './routers/user' /** @@ -19,6 +20,7 @@ const routes: MyRouteRecordRaw[] = [ component: () => import(/* webpackChunkName: "home" */ '@/views/Home/index.vue') }, ...auth, + ...block, ...user, { path: '/404', @@ -48,12 +50,12 @@ const router = createRouter({ * 路由守卫 */ router.beforeEach((to, from, next) => { - typeof to.meta !== 'undefined' && setDocumentTitle(to.meta) + typeof to.meta !== 'undefined' && setDocumentTitle(to.meta!) const isAuthenticated: string = vuex.getters.isLogin if (to.name !== 'AuthLogin' && to.meta.requiresAuth && !isAuthenticated) { - next({ name: 'AuthLogin', query: { to: to.path }}) + next({ name: 'AuthLogin', query: { to: to.path } }) } else if (isAuthenticated && (to.name == 'AuthLogin' || to.name == 'AuthRegister')) { next({ name: 'User' }) } else { @@ -65,8 +67,8 @@ router.beforeEach((to, from, next) => { * 设置文档标题 * @param meta MyRouteMeta */ -function setDocumentTitle(meta: MyRouteMeta) { - document.title = meta?.title +function setDocumentTitle (meta: MyRouteMeta) { + document.title = process.env.VUE_APP_TITLE + ' ' + meta?.title const ua = navigator.userAgent const regex = /\bMicroMessenger\/([\d.]+)/ if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { diff --git a/src/router/routers/block.ts b/src/router/routers/block.ts new file mode 100644 index 0000000..a2b05a6 --- /dev/null +++ b/src/router/routers/block.ts @@ -0,0 +1,82 @@ +import type { MyRouteRecordRaw } from '@/types/router' + +export default [ + { + path: '/blocks', + name: 'Block', + meta: { + title: '查看区块', + keepAlive: true, + requiresAuth: false, + showTabBar: true + }, + component: () => import(/* webpackChunkName: "auth" */ '@/views/Block/index.vue') + }, + { + path: '/blocks/:hash', + name: 'BlockDetail', + meta: { + title: '区块详情', + keepAlive: false, + requiresAuth: false, + showTabBar: true + }, + component: () => import(/* webpackChunkName: "auth" */ '@/views/Block/detail.vue') + }, + { + path: '/trades', + name: 'Trade', + meta: { + title: '查看数据', + keepAlive: true, + requiresAuth: false, + showTabBar: true + }, + component: () => import(/* webpackChunkName: "auth" */ '@/views/Trade/index.vue') + }, + { + path: '/trades/:hash', + name: 'TradeDetail', + meta: { + title: '数据详情', + keepAlive: true, + requiresAuth: false, + showTabBar: true + }, + component: () => import(/* webpackChunkName: "auth" */ '@/views/Trade/detail.vue') + }, + { + path: '/analytical', + name: 'Analytical', + meta: { + title: '解析数据', + keepAlive: true, + requiresAuth: false, + showTabBar: true + }, + component: () => import(/* webpackChunkName: "auth" */ '@/views/Other/analytical.vue') + }, + { + path: '/broadcast', + name: 'Broadcast', + meta: { + title: '广播数据', + keepAlive: true, + requiresAuth: false, + showTabBar: true + }, + component: () => import(/* webpackChunkName: "auth" */ '@/views/Other/broadcast.vue') + }, + { + path: '/address/:address', + name: 'Address', + meta: { + title: '地址信息', + keepAlive: false, + requiresAuth: false, + showTabBar: true + }, + component: () => import(/* webpackChunkName: "auth" */ '@/views/Address/index.vue') + } +] as MyRouteRecordRaw[] + diff --git a/src/store/index.ts b/src/store/index.ts index cf01634..0024dea 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -16,6 +16,7 @@ export interface State { tokenType: string openId: string loginAt: number + maxHeight: number user: BaseInfo auth?: AuthState refresh?: RefreshState @@ -29,6 +30,7 @@ export default createStore({ tokenType: '', openId: '', loginAt: 0, + maxHeight:110, user: {} as BaseInfo }, getters: { @@ -40,6 +42,9 @@ export default createStore({ }, userInfo: (state: State): BaseInfo => { return state.user + }, + maxHeight: (state: State): number => { + return state.maxHeight } }, mutations: { @@ -63,7 +68,10 @@ export default createStore({ }, cleanUserInfo: (state: State): void => { state.user = {} as BaseInfo - } + }, + setMaxHeight: (state: State, height: number): void => { + state.maxHeight = height + }, }, actions: { setUserInfo: ({ commit }, info: BaseInfo): void => { @@ -71,6 +79,9 @@ export default createStore({ }, setOpenId: ({ commit }, openId: string): void => { commit('setOpenId', openId) + }, + setMaxHeight: ({ commit }, height: number): void => { + commit('setMaxHeight', height) } }, modules: { diff --git a/src/store/modules/auth.ts b/src/store/modules/auth.ts index e1223dc..2dd291e 100644 --- a/src/store/modules/auth.ts +++ b/src/store/modules/auth.ts @@ -45,7 +45,7 @@ export default { auth.logout().then(() => { commit('cleanAccessToken', null, { root: true }) commit('cleanUserInfo', null, { root: true }) - localStorage.removeItem(PERSISTED_KEY) + localStorage.removeItem(PERSISTED_KEY as string) resolve(true) }).catch(err => { reject(err.message) diff --git a/src/views/Address/index.vue b/src/views/Address/index.vue new file mode 100644 index 0000000..8ead53e --- /dev/null +++ b/src/views/Address/index.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/views/Block/detail.vue b/src/views/Block/detail.vue new file mode 100644 index 0000000..b7d07b6 --- /dev/null +++ b/src/views/Block/detail.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/views/Block/index.vue b/src/views/Block/index.vue new file mode 100644 index 0000000..67d3627 --- /dev/null +++ b/src/views/Block/index.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/views/Home/index.vue b/src/views/Home/index.vue index 0afa189..c00f8bc 100644 --- a/src/views/Home/index.vue +++ b/src/views/Home/index.vue @@ -1,20 +1,11 @@ - - diff --git a/src/views/Other/analytical.vue b/src/views/Other/analytical.vue new file mode 100644 index 0000000..84d04f4 --- /dev/null +++ b/src/views/Other/analytical.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/views/Other/broadcast.vue b/src/views/Other/broadcast.vue new file mode 100644 index 0000000..52db448 --- /dev/null +++ b/src/views/Other/broadcast.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/views/Trade/detail.vue b/src/views/Trade/detail.vue new file mode 100644 index 0000000..20fb1e6 --- /dev/null +++ b/src/views/Trade/detail.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/views/Trade/index.vue b/src/views/Trade/index.vue new file mode 100644 index 0000000..03fefc4 --- /dev/null +++ b/src/views/Trade/index.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/yarn.lock b/yarn.lock index b0e9144..b2c5382 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@33cn/chain33-rpc-api@^1.5.29": + version "1.5.29" + resolved "https://registry.yarnpkg.com/@33cn/chain33-rpc-api/-/chain33-rpc-api-1.5.29.tgz#767938f08b633079b4b110191ad7fc07bdbe51ce" + integrity sha512-6jpbI6aNIuFfSOPvgZvP4uw6JJVfXeMSWvACyQH9DBkIlb14WrP/p+zpw2i+2ZOLBeKnIs3vG8Mlp225VYWE5A== + dependencies: + json-bigint "^0.3.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.8.3": version "7.14.5" resolved "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" @@ -903,6 +910,11 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@element-plus/icons@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@element-plus/icons/-/icons-0.0.11.tgz#9b187c002774548b911850d17fa5fc2f9a515f57" + integrity sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A== + "@hapi/address@2.x.x": version "2.1.4" resolved "https://registry.nlark.com/@hapi/address/download/@hapi/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" @@ -978,6 +990,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@popperjs/core@^2.10.1": + version "2.10.1" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.10.1.tgz#728ecd95ab207aab8a9a4e421f0422db329232be" + integrity sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw== + "@soda/friendly-errors-webpack-plugin@^1.7.1": version "1.8.0" resolved "https://registry.nlark.com/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz#84751d82a93019d5c92c0cf0e45ac59087cd2240" @@ -1628,6 +1645,21 @@ resolved "https://registry.nlark.com/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a" integrity sha1-trQKdiVCnSvXwigd26YB7QXcfxo= +"@vueuse/core@~6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-6.1.0.tgz#8137c291cf49b11c2deda4d5079096e55b36fc28" + integrity sha512-6KienU5QOWKuDqvHytep14274IGKyLlACzXjifOrgDQMkqvWZIUnDhpckT/1+O8n8DN59d5wzzICZI/2sfGCyg== + dependencies: + "@vueuse/shared" "6.1.0" + vue-demi "*" + +"@vueuse/shared@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-6.1.0.tgz#1375fd41acefe52f9a1842f3c6a8a348786535ba" + integrity sha512-teW0TUQryGnEprHeOI6oH8NPVJBirknxksEiNCtdEjIi8W7JSTg8JPO+e1XlGI6ly24NDlDXUDYaHJayiaXjuw== + dependencies: + vue-demi "*" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.nlark.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz?cache=0&sync_timestamp=1625473368618&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -2032,6 +2064,11 @@ async-limiter@~1.0.0: resolved "https://registry.nlark.com/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= +async-validator@^3.4.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500" + integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ== + async@^2.6.2: version "2.6.3" resolved "https://registry.nlark.com/async/download/async-2.6.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fasync%2Fdownload%2Fasync-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2197,6 +2234,11 @@ big.js@^5.2.2: resolved "https://registry.nlark.com/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= +bignumber.js@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" + integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.nlark.com/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -3272,6 +3314,11 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +dayjs@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" + integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -3600,6 +3647,20 @@ electron-to-chromium@^1.3.830: resolved "https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.839.tgz?cache=0&sync_timestamp=1631671407431&other_urls=https%3A%2F%2Fregistry.nlark.com%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.839.tgz#27a5b21468e9fefb0e328a029403617f20acec9c" integrity sha1-J6WyFGjp/vsOMooClANhfyCs7Jw= +element-plus@^1.1.0-beta.16: + version "1.1.0-beta.16" + resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-1.1.0-beta.16.tgz#4409d9e33d005693f6039f5ed1fe05e301b3170d" + integrity sha512-4BZEldnIfFZs5A/saRqaWE4PwTot4p3YZU7qsDr3ev2zp35pcCL9TtpWMLIvNTMxvxKew0HTDPTk9fAWIZFQrQ== + dependencies: + "@popperjs/core" "^2.10.1" + "@vueuse/core" "~6.1.0" + async-validator "^3.4.0" + dayjs "^1.10.7" + lodash "^4.17.21" + memoize-one "^5.2.1" + normalize-wheel "^1.0.1" + resize-observer-polyfill "^1.5.1" + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.nlark.com/elliptic/download/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -5467,6 +5528,13 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-bigint@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.1.tgz#0c1729d679f580d550899d6a2226c228564afe60" + integrity sha512-DGWnSzmusIreWlEupsUelHrhwmPPE+FiQvg+drKfk2p+bdEYa5mp4PJ8JsCWqae0M2jQNb0HPvnwvf1qOTThzQ== + dependencies: + bignumber.js "^9.0.0" + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.nlark.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -5834,6 +5902,11 @@ memfs@^3.1.2: dependencies: fs-monkey "1.0.3" +memoize-one@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.nlark.com/memory-fs/download/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -6232,6 +6305,11 @@ normalize-url@^3.0.0: resolved "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk= +normalize-wheel@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45" + integrity sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU= + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.nlark.com/npm-run-path/download/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7507,6 +7585,11 @@ requires-port@^1.0.0: resolved "https://registry.nlark.com/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.nlark.com/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -8834,6 +8917,11 @@ vm-browserify@^1.0.1: resolved "https://registry.nlark.com/vm-browserify/download/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha1-eGQcSIuObKkadfUR56OzKobl3aA= +vue-demi@*: + version "0.11.4" + resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.11.4.tgz#6101992fe4724cf5634018a16e953f3052e94e2a" + integrity sha512-/3xFwzSykLW2HiiLie43a+FFgNOcokbBJ+fzvFXd0r2T8MYohqvphUyDQ8lbAwzQ3Dlcrb1c9ykifGkhSIAk6A== + vue-eslint-parser@^7.0.0, vue-eslint-parser@^7.10.0: version "7.11.0" resolved "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.11.0.tgz#214b5dea961007fcffb2ee65b8912307628d0daf"