Compare commits

...

1 Commits

Author SHA1 Message Date
73c2c4fc94 update 2022-03-25 16:24:25 +08:00
14 changed files with 330 additions and 188 deletions

View File

@@ -6,6 +6,7 @@ VUE_APP_VUEX_KEY=ex_vuex
VUE_APP_TITLE=联盟链浏览器
VUE_APP_API_URL=/api
VUE_APP_BLOCK_URL=https://explorer.lianshang.vip/api
VUE_APP_ESDB_URL=/esdb
VUE_APP_MAIN_COIN_SYMBOL=XHC

View File

@@ -21,10 +21,10 @@ yarn serve
yarn build
```
### Lints and fixes files
```
yarn lint
```
### Nginx Configuration
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
```
location /api {
proxy_pass http://172.95.27.1:8901/;
}
```

View File

@@ -1,4 +1,3 @@
import { AuthResponse } from '@/types/auth'
import axios, { AxiosRequestConfig } from 'axios'
const request = axios.create({
@@ -6,7 +5,7 @@ const request = axios.create({
timeout: 5000
})
const axiosConf = (config: AxiosRequestConfig) => {
config.headers.Accept = 'application/json'
config.headers!.Accept = 'application/json'
return config
}
request.interceptors.response.use(async (response) => {
@@ -22,25 +21,28 @@ request.interceptors.request.use(axiosConf, err => {
return Promise.reject(err)
})
const txList = (size?: number): Promise<AuthResponse> => {
const txList = (params?: any): Promise<Array<any>> => {
const body = {
id: 1,
method: 'Tx.TxList',
params: [{
'sort': [{
'key': 'height',
'ascending': false
}],
'page': {
'number': 1,
'size': size
}
}]
params: [params]
}
return request.post('', body)
}
export default {
txList
const txCount = (params?: any): Promise<Array<any>> => {
const body = {
id: 1,
method: 'Tx.TxCount',
params: [params]
}
return request.post('', body)
}
export default {
txList,
txCount
}

View File

@@ -1,8 +1,8 @@
<template>
<div class="footer ">
<div class="wrap">
@2021 域展科技 All Rights Reserved.Powered by 哈尔滨域展科技有限公司
ICP备19007143-2
@2021 XXX All Rights Reserved.Powered by XXX
ICP备XXXX-2
</div>
</div>
</template>

View File

@@ -2,7 +2,7 @@
<div class="header">
<div class="wrap">
<div class="logo" @click="router.push({name: 'Home'})">
JZC Explorer
ZH-CHAIN
</div>
<Nav/>
</div>

View File

@@ -24,10 +24,10 @@ const navList = ref<NavItem[]>([
title: '查看区块',
route: 'Block'
},
// {
// title: '查看数据',
// route: 'Trade'
// },
{
title: '查看数据',
route: 'Trade'
},
{
title: 'Token',
route: 'Token'

13
src/types/block.d.ts vendored
View File

@@ -97,14 +97,15 @@ export declare type BlockDetail = {
}
export declare type TradeItem = {
txHash: string
blockTime: number
fromAddr: string
hash: string
block_time: number
from: string
execer: string
action_name: string
amount: number
fee: number
assets: any
tx: {
to: string
}
to: string
}
export declare type TotalFee = {

View File

@@ -12,7 +12,7 @@ export const filterHash = (str: string, num?: number): string => {
// 解析资产符号
export const parseSymbol = (assets?: AssetType[]): string => {
if (assets) {
return assets[0].symbol
return assets[0]?.symbol
} else {
return store.getters.symbol
}

View File

@@ -12,8 +12,8 @@ const request = axios.create({
* @param config
*/
const axiosConf = (config: AxiosRequestConfig) => {
config.headers.Authorization = vuex.getters.accessToken
config.headers.Accept = 'application/json'
config.headers!.Authorization = vuex.getters.accessToken
config.headers!.Accept = 'application/json'
return config
}

View File

@@ -70,7 +70,6 @@
<el-pagination
background
:page-size="pageSize"
layout="prev,next"
:total="balance.txCount"
@current-change="handleCurrentChange"
>
@@ -83,33 +82,33 @@
</template>
<el-table-column prop="height" label="高度"/>
<el-table-column width="34" align="right">
<template #default="scope">
<el-icon v-if="scope.row.receipt.ty == 1">
<Warning class="warning"/>
</el-icon>
</template>
</el-table-column>
<!-- <el-table-column width="34" align="right">-->
<!-- <template #default="scope">-->
<!-- <el-icon v-if="scope.row.receipt.ty == 1">-->
<!-- <Warning class="warning"/>-->
<!-- </el-icon>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column width="200" label="交易哈希">
<template #default="scope">
<router-link :to="{name: 'TradeDetail', params: { hash: scope.row.txHash }}">
{{ filterHash(scope.row.txHash, 16) }}
<router-link :to="{name: 'TradeDetail', params: { hash: scope.row.hash }}">
{{ filterHash(scope.row.hash, 16) }}
</router-link>
</template>
</el-table-column>
<el-table-column width="160" label="发送方">
<template #default="scope">
<router-link :to="{name: 'Address', params: { address: scope.row.fromAddr }}">
{{ filterHash(scope.row.fromAddr, 10) }}
<router-link :to="{name: 'Address', params: { address: scope.row.from }}">
{{ filterHash(scope.row.from, 10) }}
</router-link>
</template>
</el-table-column>
<el-table-column width="40" align="center">
<template #default="scope">
<el-icon v-if="scope.row.fromAddr == address">
<el-icon v-if="scope.row.from == address">
<DArrowRight/>
</el-icon>
<el-icon v-else>
@@ -120,8 +119,8 @@
<el-table-column width="160" label="接收方">
<template #default="scope">
<router-link :to="{name: 'Address', params: { address: scope.row.tx.to }}">
{{ filterHash(scope.row.tx.to, 10) }}
<router-link :to="{name: 'Address', params: { address: scope.row.to }}">
{{ filterHash(scope.row.to, 10) }}
</router-link>
</template>
</el-table-column>
@@ -132,17 +131,17 @@
</el-table-column>
<el-table-column label="手续费" align="center">
<template #default="scope">
{{ scope.row.tx.feefmt }}
{{ (scope.row.fee / 1e8).toFixed(4) }}
</template>
</el-table-column>
<el-table-column label="调用函数" align="center">
<template #default="scope">
{{ scope.row.actionName }}
{{ scope.row.action_name }}
</template>
</el-table-column>
<el-table-column width="165" label="上链时间" align="center">
<template #default="scope">
<TimeFormat :time="scope.row.blockTime"/>
<TimeFormat :time="scope.row.block_time"/>
</template>
</el-table-column>
<el-table-column label="交易资产" align="center">
@@ -157,13 +156,13 @@
</template>
<script lang="ts" setup>
import { block } from '@/api'
import { block, esdb } from '@/api'
import { Breadcrumb, Pagination, TimeFormat } from '@/components'
import { useStore } from '@/store'
import { AddrOverview, BlockDetail, TokenAssetItem } from '@/types/block'
import { AddrOverview, TokenAssetItem, TradeItem } from '@/types/block'
import { filterHash, parseSymbol } from '@/utils/filters'
import { DArrowLeft, DArrowRight, Warning } from '@element-plus/icons'
import { computed, onMounted, reactive, ref, watch } from 'vue'
import { DArrowLeft, DArrowRight } from '@element-plus/icons'
import { computed, onMounted, ref, watch } from 'vue'
import { useRoute } from 'vue-router'
const store = useStore()
@@ -180,7 +179,7 @@ const balance = ref<AddrOverview>({
})
const sended = computed(() => balance.value.reciver - balance.value.balance)
const frozen = ref<number>(0)
const records = ref<BlockDetail[]>([])
const records = ref<TradeItem[]>([])
const token = ref<string>('')
const assets = ref<TokenAssetItem[]>([])
const loading = ref<boolean>(false)
@@ -232,46 +231,37 @@ const initAddressData = () => {
})
loadTradeList()
}
const initParams = {
addr: address.value,
flag: 0,
count: pageSize,
direction: 0,
height: -1,
index: 0
}
const pageParams = reactive(initParams)
const page = ref<number>(1)
const handleCurrentChange = (e: number) => {
if (e === 1) {
pageParams.direction = 0
pageParams.height = -1
} else {
pageParams.direction = 0
pageParams.height = records.value[records.value.length - 1].height
pageParams.index = records.value[records.value.length - 1].index
}
console.log(pageParams)
records.value = []
page.value = e
loadTradeList()
}
const loadTradeList = () => {
loading.value = true
block.getTxByAddr(pageParams).then(res => {
if (res.error == null) {
let hashes = res.result.txInfos.map((item: { hash: string }) => item.hash)
block.getTxByHashes(hashes).then(res => {
console.log(' pageParams.height ', pageParams.height)
records.value = res.result.txs
}).finally(() => {
loading.value = false
})
} else {
loading.value = false
esdb.txList({
match_one: [{
key: 'from',
value: address.value
},
{
key: 'to',
value: address.value
}
],
match: [],
sort: [{
key: 'height',
ascending: false
}],
page: {
number: page.value,
size: 10
}
}).then(res => {
records.value = res
}).finally(() => {
loading.value = false
})
}
</script>

View File

@@ -147,7 +147,6 @@ watch(route, (to) => {
}
})
const handleCurrentChange = (e: number) => {
console.log(e)
}

View File

@@ -30,7 +30,7 @@
<div class="trades">
<div class="head">
<h1>最新交易</h1>
<!-- <router-link :to="{name: 'Trade'}">查看全部</router-link>-->
<!-- <router-link :to="{name: 'Trade'}">查看全部</router-link>-->
</div>
<div class="items" v-loading="tradeLoading">
@@ -38,31 +38,31 @@
<div class="hash">
<div>
交易哈希
<router-link :to="{name: 'TradeDetail', params: {hash: item.txHash}}">
{{ filterHash(item.txHash, 10) }}
<router-link :to="{name: 'TradeDetail', params: {hash: item.hash}}">
{{ filterHash(item.hash, 10) }}
</router-link>
</div>
<div class="time">
<TimeFormat :time="item.blockTime"/>
<TimeFormat :time="item.block_time"/>
</div>
</div>
<div class="addr">
<div>
发送方
<router-link :to="{name: 'Address', params: {address: item.fromAddr}}">
{{ filterHash(item.fromAddr, 10) }}
<router-link :to="{name: 'Address', params: {address: item.from}}">
{{ filterHash(item.from, 10) }}
</router-link>
</div>
<div>
接收方
<router-link :to="{name: 'Address', params: {address: item.tx.to}}">
{{ filterHash(item.tx.to, 10) }}
<router-link :to="{name: 'Address', params: {address: item.to}}">
{{ filterHash(item.to, 10) }}
</router-link>
</div>
</div>
<div class="asset">
<div>交易资产</div>
<div>{{ item.amount }} {{ parseSymbol(item.assets) }}</div>
<div>{{ (item.amount / 1e8).toFixed(4) }} {{ parseSymbol(item.assets) }}</div>
</div>
</div>
</div>
@@ -119,14 +119,12 @@ if (blockList.value.length === 0) {
if (tradeList.value.length === 0) {
const initTrade = {
txHash: ' ',
blockTime: 0,
fromAddr: ' ',
hash: ' ',
block_time: 0,
from: ' ',
amount: 0,
assets: null,
tx: {
to: ' '
}
to: ' '
} as TradeItem
for (let i = 0; i < 6; i++) {
tradeList.value.push(initTrade)
@@ -145,20 +143,19 @@ const getBlockList = () => {
})
}
async function getTradeList () {
let txHashes = []
for (let i = 0; i < blockList.value.length; i++) {
let res = await block.getBlockOverview(blockList.value[i].hash)
txHashes.push(...res.result.txHashes)
if (txHashes.length > pageSize) {
txHashes = txHashes.slice(0, 6)
break
const getTradeList = () => {
const params = {
'sort': [{
'key': 'height',
'ascending': false
}],
'page': {
'number': 1,
'size': pageSize
}
}
block.getTxByHashes(txHashes).then(res => {
tradeList.value = res.result.txs
esdb.txList(params).then(res => {
tradeList.value = res
}).finally(() => {
tradeLoading.value = false
})

View File

@@ -8,15 +8,58 @@
:page-size="pageSize"
@current-change="handleCurrentChange"
>
<el-table :data="blocks" stripe>
<el-table v-loading="tradeLoading" :data="tradeList" stripe>
<template #empty>
<el-empty description="暂无数据"></el-empty>
</template>
<el-table-column prop="date" label="高度" width="100" align="center"/>
<el-table-column prop="date" label="区块哈希"/>
<el-table-column prop="date" label="数据量" width="180" align="center"/>
<el-table-column prop="date" label="上链时间" width="180" align="center"/>
<el-table-column width="200" label="交易哈希">
<template #default="scope">
<router-link :to="{name: 'TradeDetail', params: { hash: scope.row.hash }}">
{{ filterHash(scope.row.hash, 16) }}
</router-link>
</template>
</el-table-column>
<el-table-column width="160" label="发送方">
<template #default="scope">
<router-link :to="{name: 'Address', params: { address: scope.row.from }}">
{{ filterHash(scope.row.from, 10) }}
</router-link>
</template>
</el-table-column>
<el-table-column width="160" label="接收方">
<template #default="scope">
<router-link :to="{name: 'Address', params: { address: scope.row.to }}">
{{ filterHash(scope.row.to, 10) }}
</router-link>
</template>
</el-table-column>
<el-table-column label="交易量" align="center">
<template #default="scope">
{{ (scope.row.amount / 1e8).toFixed(4) }}
</template>
</el-table-column>
<el-table-column label="手续费" align="center">
<template #default="scope">
{{ (scope.row.fee / 1e8).toFixed(4) }}
</template>
</el-table-column>
<el-table-column label="上链时间" width="165" align="center">
<template #default="scope">
<TimeFormat :time="scope.row.block_time"/>
</template>
</el-table-column>
<el-table-column label="调用函数" align="center">
<template #default="scope">
{{ scope.row.action_name }}
</template>
</el-table-column>
<el-table-column label="交易资产" align="center">
<template #default="scope">
{{ parseSymbol(scope.row.assets) }}
</template>
</el-table-column>
</el-table>
</Pagination>
</div>
@@ -29,26 +72,52 @@ export default {
</script>
<script lang="ts" setup>
import { Breadcrumb, Pagination } from '@/components'
import { esdb } from '@/api'
import { Breadcrumb, Pagination, TimeFormat } from '@/components'
import useGetMaxHeight from '@/hooks/useGetMaxHeight'
import { TradeItem } from '@/types/block'
import { onMounted, ref } from 'vue'
import { filterHash, parseSymbol } from '@/utils/filters'
const { queryTotalFee } = useGetMaxHeight()
onMounted(() => {
console.log('TRADE onMounted')
})
const pageSize = Number(process.env.VUE_APP_BLOCK_LIST_SIZE)
const tradeList = ref<TradeItem[]>([])
const txCount = ref<number>(0)
const tradeLoading = ref<boolean>(false)
const page = ref<number>(1)
queryTotalFee().then(res => {
txCount.value = res.result.txCount
})
const pageSize = Number(process.env.VUE_APP_BLOCK_LIST_SIZE)
const handleCurrentChange = (e: number) => {
console.log(e)
onMounted(() => {
getTradeList()
})
const getTradeList = () => {
tradeLoading.value = true
const params = {
page: {
number: page.value,
size: 20
},
sort: [{
key: 'height_index',
ascending: false
}]
}
esdb.txList(params).then(res => {
tradeList.value = res
}).finally(() => {
tradeLoading.value = false
})
}
const handleCurrentChange = (e: number) => {
page.value = e
getTradeList()
}
const blocks = ref([])
</script>
<style scoped lang="less">

189
yarn.lock
View File

@@ -263,6 +263,11 @@
resolved "https://registry.nlark.com/@babel/parser/download/@babel/parser-7.15.6.tgz?cache=0&sync_timestamp=1631216301920&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549"
integrity sha1-BDuao8MDwHIuU3f++Rl/TPF5ZUk=
"@babel/parser@^7.16.4":
version "7.17.8"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240"
integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4":
version "7.15.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e"
@@ -991,9 +996,9 @@
fastq "^1.6.0"
"@popperjs/core@^2.10.2":
version "2.11.0"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.0.tgz#6734f8ebc106a0860dff7f92bf90df193f0935d7"
integrity sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ==
version "2.11.4"
resolved "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.4.tgz#d8c7b8db9226d2d7664553a0741ad7d0397ee503"
integrity sha512-q/ytXxO5NKvyT37pmisQAItCFqA7FD/vNb8dgaJy3/630Fsc+Mz9/9f2SziBoIZ30TJooXyTwZmhi1zjXmObYg==
"@soda/friendly-errors-webpack-plugin@^1.7.1":
version "1.8.0"
@@ -1527,6 +1532,16 @@
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-core@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.31.tgz#d38f06c2cf845742403b523ab4596a3fda152e89"
integrity sha512-aKno00qoA4o+V/kR6i/pE+aP+esng5siNAVQ422TkBNM6qA4veXiZbSe8OTXHXquEi/f6Akc+nLfB4JGfe4/WQ==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.31"
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-dom@3.2.11":
version "3.2.11"
resolved "https://registry.nlark.com/@vue/compiler-dom/download/@vue/compiler-dom-3.2.11.tgz?cache=0&sync_timestamp=1631141967992&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcompiler-dom%2Fdownload%2F%40vue%2Fcompiler-dom-3.2.11.tgz#d066f8e1f1812b4e881593819ade0fe6d654c776"
@@ -1535,6 +1550,30 @@
"@vue/compiler-core" "3.2.11"
"@vue/shared" "3.2.11"
"@vue/compiler-dom@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.31.tgz#b1b7dfad55c96c8cc2b919cd7eb5fd7e4ddbf00e"
integrity sha512-60zIlFfzIDf3u91cqfqy9KhCKIJgPeqxgveH2L+87RcGU/alT6BRrk5JtUso0OibH3O7NXuNOQ0cDc9beT0wrg==
dependencies:
"@vue/compiler-core" "3.2.31"
"@vue/shared" "3.2.31"
"@vue/compiler-sfc@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.31.tgz#d02b29c3fe34d599a52c5ae1c6937b4d69f11c2f"
integrity sha512-748adc9msSPGzXgibHiO6T7RWgfnDcVQD+VVwYgSsyyY8Ans64tALHZANrKtOzvkwznV/F4H7OAod/jIlp/dkQ==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.31"
"@vue/compiler-dom" "3.2.31"
"@vue/compiler-ssr" "3.2.31"
"@vue/reactivity-transform" "3.2.31"
"@vue/shared" "3.2.31"
estree-walker "^2.0.2"
magic-string "^0.25.7"
postcss "^8.1.10"
source-map "^0.6.1"
"@vue/compiler-sfc@^3.0.0":
version "3.2.11"
resolved "https://registry.nlark.com/@vue/compiler-sfc/download/@vue/compiler-sfc-3.2.11.tgz?cache=0&sync_timestamp=1631142112784&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fcompiler-sfc%2Fdownload%2F%40vue%2Fcompiler-sfc-3.2.11.tgz#628fa12238760d9b9b339ac2e125a759224fadbf"
@@ -1567,6 +1606,14 @@
"@vue/compiler-dom" "3.2.11"
"@vue/shared" "3.2.11"
"@vue/compiler-ssr@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.31.tgz#4fa00f486c9c4580b40a4177871ebbd650ecb99c"
integrity sha512-mjN0rqig+A8TVDnsGPYJM5dpbjlXeHUm2oZHZwGyMYiGT/F4fhJf/cXy8QpjnLQK4Y9Et4GWzHn9PS8AHUnSkw==
dependencies:
"@vue/compiler-dom" "3.2.31"
"@vue/shared" "3.2.31"
"@vue/component-compiler-utils@^3.1.0", "@vue/component-compiler-utils@^3.1.2":
version "3.2.2"
resolved "https://registry.nlark.com/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.2.tgz#2f7ed5feed82ff7f0284acc11d525ee7eff22460"
@@ -1583,7 +1630,12 @@
optionalDependencies:
prettier "^1.18.2"
"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.0.0-beta.14":
"@vue/devtools-api@^6.0.0":
version "6.1.3"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.1.3.tgz#a44c52e8fa6d22f84db3abdcdd0be5135b7dd7cf"
integrity sha512-79InfO2xHv+WHIrH1bHXQUiQD/wMls9qBk6WVwGCbdwP7/3zINtvqPNMtmSHXsIKjvUAHc8L0ouOj6ZQQRmcXg==
"@vue/devtools-api@^6.0.0-beta.11":
version "6.0.0-beta.15"
resolved "https://registry.nlark.com/@vue/devtools-api/download/@vue/devtools-api-6.0.0-beta.15.tgz#ad7cb384e062f165bcf9c83732125bffbc2ad83d"
integrity sha1-rXyzhOBi8WW8+cg3MhJb/7wq2D0=
@@ -1600,12 +1652,23 @@
resolved "https://registry.nlark.com/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz#ceb924b4ecb3b9c43871c7a429a02f8423e621ab"
integrity sha1-zrkktOyzucQ4ccekKaAvhCPmIas=
"@vue/reactivity@3.2.11":
version "3.2.11"
resolved "https://registry.nlark.com/@vue/reactivity/download/@vue/reactivity-3.2.11.tgz?cache=0&sync_timestamp=1631142360902&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Freactivity%2Fdownload%2F%40vue%2Freactivity-3.2.11.tgz#ec04d33acaf2b92cca2960535bec81b26cc5772b"
integrity sha1-7ATTOsryuSzKKWBTW+yBsmzFdys=
"@vue/reactivity-transform@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.31.tgz#0f5b25c24e70edab2b613d5305c465b50fc00911"
integrity sha512-uS4l4z/W7wXdI+Va5pgVxBJ345wyGFKvpPYtdSgvfJfX/x2Ymm6ophQlXXB6acqGHtXuBqNyyO3zVp9b1r0MOA==
dependencies:
"@vue/shared" "3.2.11"
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.31"
"@vue/shared" "3.2.31"
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/reactivity@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.31.tgz#fc90aa2cdf695418b79e534783aca90d63a46bbd"
integrity sha512-HVr0l211gbhpEKYr2hYe7hRsV91uIVGFYNHj73njbARVGHQvIojkImKMaZNDdoDZOIkMsBc9a1sMqR+WZwfSCw==
dependencies:
"@vue/shared" "3.2.31"
"@vue/ref-transform@3.2.11":
version "3.2.11"
@@ -1618,28 +1681,41 @@
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/runtime-core@3.2.11":
version "3.2.11"
resolved "https://registry.nlark.com/@vue/runtime-core/download/@vue/runtime-core-3.2.11.tgz?cache=0&sync_timestamp=1631142361235&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fruntime-core%2Fdownload%2F%40vue%2Fruntime-core-3.2.11.tgz#0dbe801be4bd0bfde253226797e7d304c8fdda30"
integrity sha1-Db6AG+S9C/3iUyJnl+fTBMj92jA=
"@vue/runtime-core@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.31.tgz#9d284c382f5f981b7a7b5971052a1dc4ef39ac7a"
integrity sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==
dependencies:
"@vue/reactivity" "3.2.11"
"@vue/shared" "3.2.11"
"@vue/reactivity" "3.2.31"
"@vue/shared" "3.2.31"
"@vue/runtime-dom@3.2.11":
version "3.2.11"
resolved "https://registry.nlark.com/@vue/runtime-dom/download/@vue/runtime-dom-3.2.11.tgz?cache=0&sync_timestamp=1631142356576&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fruntime-dom%2Fdownload%2F%40vue%2Fruntime-dom-3.2.11.tgz#04f9054a9e64bdf156c2fc22cad67cfaa8b84616"
integrity sha1-BPkFSp5kvfFWwvwiytZ8+qi4RhY=
"@vue/runtime-dom@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz#79ce01817cb3caf2c9d923f669b738d2d7953eff"
integrity sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==
dependencies:
"@vue/runtime-core" "3.2.11"
"@vue/shared" "3.2.11"
"@vue/runtime-core" "3.2.31"
"@vue/shared" "3.2.31"
csstype "^2.6.8"
"@vue/server-renderer@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.31.tgz#201e9d6ce735847d5989403af81ef80960da7141"
integrity sha512-8CN3Zj2HyR2LQQBHZ61HexF5NReqngLT3oahyiVRfSSvak+oAvVmu8iNLSu6XR77Ili2AOpnAt1y8ywjjqtmkg==
dependencies:
"@vue/compiler-ssr" "3.2.31"
"@vue/shared" "3.2.31"
"@vue/shared@3.2.11":
version "3.2.11"
resolved "https://registry.nlark.com/@vue/shared/download/@vue/shared-3.2.11.tgz?cache=0&sync_timestamp=1631141987851&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vue%2Fshared%2Fdownload%2F%40vue%2Fshared-3.2.11.tgz#01899f54949caf1ac241de397bd17069632574de"
integrity sha1-AYmfVJScrxrCQd45e9FwaWMldN4=
"@vue/shared@3.2.31":
version "3.2.31"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.31.tgz#c90de7126d833dcd3a4c7534d534be2fb41faa4e"
integrity sha512-ymN2pj6zEjiKJZbrf98UM2pfDd6F2H7ksKw7NDt/ZZ1fh5Ei39X5tABugtT03ZRlWd9imccoK0hE8hpjpU7irQ==
"@vue/web-component-wrapper@^1.2.0":
version "1.3.0"
resolved "https://registry.nlark.com/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.3.0.tgz#b6b40a7625429d2bd7c2281ddba601ed05dc7f1a"
@@ -1647,7 +1723,7 @@
"@vueuse/core@~6.1.0":
version "6.1.0"
resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-6.1.0.tgz#8137c291cf49b11c2deda4d5079096e55b36fc28"
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-6.1.0.tgz#8137c291cf49b11c2deda4d5079096e55b36fc28"
integrity sha512-6KienU5QOWKuDqvHytep14274IGKyLlACzXjifOrgDQMkqvWZIUnDhpckT/1+O8n8DN59d5wzzICZI/2sfGCyg==
dependencies:
"@vueuse/shared" "6.1.0"
@@ -1655,7 +1731,7 @@
"@vueuse/shared@6.1.0":
version "6.1.0"
resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-6.1.0.tgz#1375fd41acefe52f9a1842f3c6a8a348786535ba"
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-6.1.0.tgz#1375fd41acefe52f9a1842f3c6a8a348786535ba"
integrity sha512-teW0TUQryGnEprHeOI6oH8NPVJBirknxksEiNCtdEjIi8W7JSTg8JPO+e1XlGI6ly24NDlDXUDYaHJayiaXjuw==
dependencies:
vue-demi "*"
@@ -2066,7 +2142,7 @@ async-limiter@~1.0.0:
async-validator@^4.0.3:
version "4.0.7"
resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe"
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe"
integrity sha512-Pj2IR7u8hmUEDOwB++su6baaRi+QvsgajuFB9j95foM1N2gy5HM4z60hfusIO0fBPG5uLAEl6yCJr1jNSVugEQ==
async@^2.6.2:
@@ -2116,7 +2192,7 @@ aws4@^1.8.0:
axios@^0.21.4:
version "0.21.4"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
resolved "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==
dependencies:
follow-redirects "^1.14.0"
@@ -2738,9 +2814,9 @@ cli-width@^3.0.0:
integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=
clipboard@^2.0.8:
version "2.0.8"
resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba"
integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==
version "2.0.10"
resolved "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.10.tgz#e61f6f7139ac5044c58c0484dcac9fb2a918bfd6"
integrity sha512-cz3m2YVwFz95qSEbCDi2fzLN/epEN9zXBvfgAoGkvGOJZATMl9gtTDVOtBYkx2ODUJl2kvmud7n32sV2BpYR4g==
dependencies:
good-listener "^1.2.2"
select "^1.1.2"
@@ -3324,9 +3400,9 @@ dashdash@^1.12.0:
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==
version "1.11.0"
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.0.tgz#009bf7ef2e2ea2d5db2e6583d2d39a4b5061e805"
integrity sha512-JLC809s6Y948/FuCZPm5IX8rRhQwOiyMb2TfVVQEixG7P8Lm/gt5S7yoQZmC8x1UehI9Pb7sksEt4xx14m+7Ug==
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
@@ -3663,7 +3739,7 @@ electron-to-chromium@^1.3.830:
element-plus@^1.1.0-beta.16:
version "1.1.0-beta.24"
resolved "https://registry.yarnpkg.com/element-plus/-/element-plus-1.1.0-beta.24.tgz#858b05932ebc0be15419d3974d15be2a4f4b696c"
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-1.1.0-beta.24.tgz#858b05932ebc0be15419d3974d15be2a4f4b696c"
integrity sha512-dmo61e/D6mwJVacMhxOMSPb5sZPt/FPsuQQfsOs1kJWkhGDmTlny/sZvgIQr1z0zh3pjlJadGAlNS+0nySPMmw==
dependencies:
"@element-plus/icons" "^0.0.11"
@@ -3796,8 +3872,8 @@ escalade@^3.1.1:
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
@@ -4333,11 +4409,16 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
follow-redirects@^1.0.0, follow-redirects@^1.14.0:
follow-redirects@^1.0.0:
version "1.14.4"
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.4.tgz?cache=0&sync_timestamp=1631622206750&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379"
integrity sha1-g4/fSKi73XnlLuUfsclOPtmLk3k=
follow-redirects@^1.14.0:
version "1.14.9"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.nlark.com/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -5926,7 +6007,7 @@ memfs@^3.1.2:
memoize-one@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
memory-fs@^0.4.1:
@@ -6328,9 +6409,9 @@ normalize-url@^3.0.0:
integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk=
normalize-wheel-es@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/normalize-wheel-es/-/normalize-wheel-es-1.1.1.tgz#a8096db6a56f94332d884fd8ebeda88f2fc79569"
integrity sha512-157VNH4CngrcsvF8xOVOe22cwniIR3nxSltdctvQeHZj8JttEeOXffK28jucWfWBXs0QNetAumjc1GiInnwX4w==
version "1.1.2"
resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.1.2.tgz#285e43676a62d687bf145e33452ea6be435162d0"
integrity sha512-scX83plWJXYH1J4+BhAuIHadROzxX0UBF3+HuZNY2Ks8BciE7tSTQ+5JhTsvzjaO0/EJdm4JBGrfObKxFf3Png==
npm-run-path@^2.0.0:
version "2.0.2"
@@ -7609,7 +7690,7 @@ requires-port@^1.0.0:
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"
resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
resolve-cwd@^2.0.0:
@@ -8993,11 +9074,11 @@ vue-loader@^15.9.2:
vue-style-loader "^4.1.0"
vue-router@^4.0.11:
version "4.0.11"
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.0.11.tgz#cd649a0941c635281763a20965b599643ddc68ed"
integrity sha512-sha6I8fx9HWtvTrFZfxZkiQQBpqSeT+UCwauYjkdOQYRvwsGwimlQQE2ayqUwuuXGzquFpCPoXzYKWlzL4OuXg==
version "4.0.14"
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.14.tgz#ce2028c1c5c33e30c7287950c973f397fce1bd65"
integrity sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==
dependencies:
"@vue/devtools-api" "^6.0.0-beta.14"
"@vue/devtools-api" "^6.0.0"
vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
version "4.1.3"
@@ -9013,18 +9094,20 @@ vue-template-es2015-compiler@^1.9.0:
integrity sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=
vue@^3.2.11:
version "3.2.11"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.11.tgz#6b92295048df705ddac558fd3e3ed553e55e57c8"
integrity sha512-JkI3/eIgfk4E0f/p319TD3EZgOwBQfftgnkRsXlT7OrRyyiyoyUXn6embPGZXSBxD3LoZ9SWhJoxLhFh5AleeA==
version "3.2.31"
resolved "https://registry.npmmirror.com/vue/-/vue-3.2.31.tgz#e0c49924335e9f188352816788a4cca10f817ce6"
integrity sha512-odT3W2tcffTiQCy57nOT93INw1auq5lYLLYtWpPYQQYQOOdHiqFct9Xhna6GJ+pJQaF67yZABraH47oywkJgFw==
dependencies:
"@vue/compiler-dom" "3.2.11"
"@vue/runtime-dom" "3.2.11"
"@vue/shared" "3.2.11"
"@vue/compiler-dom" "3.2.31"
"@vue/compiler-sfc" "3.2.31"
"@vue/runtime-dom" "3.2.31"
"@vue/server-renderer" "3.2.31"
"@vue/shared" "3.2.31"
vuex-persistedstate@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/vuex-persistedstate/-/vuex-persistedstate-4.0.0.tgz#ed82f266ca98c869a2aad9cb9880c2f608c05f3a"
integrity sha512-jDs+awbV9YD2A2F6S5zgtYq1Bjd8v0YldOK6HPv1EJZzGMse0FtZTREfXvA7zlVfq9MpmSZJNmYQVylfpZ5znQ==
version "4.1.0"
resolved "https://registry.npmmirror.com/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz#127165f85f5b4534fb3170a5d3a8be9811bd2a53"
integrity sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==
dependencies:
deepmerge "^4.2.2"
shvl "^2.0.3"