💩 产品模块代码

This commit is contained in:
ronger 2022-06-21 08:33:33 +08:00
parent 3440601a3b
commit 00cf10f69e
16 changed files with 446 additions and 40 deletions

View File

@ -14,16 +14,7 @@
<el-menu-item index="index">首页</el-menu-item> <el-menu-item index="index">首页</el-menu-item>
<el-menu-item index="topic">专题</el-menu-item> <el-menu-item index="topic">专题</el-menu-item>
<el-menu-item index="portfolios">作品集</el-menu-item> <el-menu-item index="portfolios">作品集</el-menu-item>
<el-submenu index="store"> <el-menu-item index="products">产品</el-menu-item>
<template slot="title">RYMCU Store</template>
<el-menu-item index="taobao">淘宝店铺</el-menu-item>
<el-submenu index="weixin">
<template slot="title">微信</template>
<el-menu-item index="mini" style="height: 200px;">
<img src="@/assets/weixinStore.jpg" style="width: 200px;"/>
</el-menu-item>
</el-submenu>
</el-submenu>
<el-menu-item index="open-data">开放数据</el-menu-item> <el-menu-item index="open-data">开放数据</el-menu-item>
</el-menu> </el-menu>
</el-col> </el-col>
@ -245,6 +236,11 @@ export default {
path: '/portfolios?page=1' path: '/portfolios?page=1'
}) })
break; break;
case 'products':
_ts.$router.push({
path: '/products?page=1'
})
break;
case 'github': case 'github':
window.open("https://github.com/rymcu"); window.open("https://github.com/rymcu");
break; break;

View File

@ -159,7 +159,10 @@ export default {
this.$store.commit('admin/updateTags', tabs.filter(tab => tab.name !== targetName)) this.$store.commit('admin/updateTags', tabs.filter(tab => tab.name !== targetName))
this.$router.push({ this.$router.push({
name: activeName name: activeName,
params: {
reset: '0'
}
}) })
}, },
handleClick(item) { handleClick(item) {
@ -175,12 +178,16 @@ export default {
_ts.$store.commit('admin/pushTags', _ts.menus[index]) _ts.$store.commit('admin/pushTags', _ts.menus[index])
} }
_ts.$router.push({ _ts.$router.push({
name: item.name name: item.name,
params: {
reset: '0'
}
}) })
}, },
handleSelectTab(item) { handleSelectTab(item) {
let _ts = this let _ts = this
this.$store.commit('admin/updateActiveTab', item); this.$store.commit('admin/updateActiveTab', item);
let reset = '0'
let result = _.findIndex(_ts.editableTabs, function (tab) { let result = _.findIndex(_ts.editableTabs, function (tab) {
return tab.name === item; return tab.name === item;
}) })
@ -189,9 +196,13 @@ export default {
return menu.name === item; return menu.name === item;
}) })
_ts.$store.commit('admin/pushTags', _ts.menus[index]) _ts.$store.commit('admin/pushTags', _ts.menus[index])
reset = '1'
} }
_ts.$router.push({ _ts.$router.push({
name: item name: item,
params: {
reset: reset
}
}) })
}, },
handleSelectMenu(item) { handleSelectMenu(item) {

View File

@ -0,0 +1,162 @@
<template>
<el-row style="margin-top: 20px;">
<el-col style="margin-bottom: 1rem;">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item :to="{ path: '/admin/dashboard' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>货币规则管理</el-breadcrumb-item>
</el-breadcrumb>
</el-col>
<el-col>
<el-table
:data="rules"
style="width: 100%">
<el-table-column
label="规则名称"
width="180"
prop="ruleName">
</el-table-column>
<el-table-column
label="奖励/消耗(巴旦木)"
width="180"
prop="money">
<template slot-scope="scope">
<span v-if="scope.row.awardStatus === '0'" style="color: limegreen;font-weight: bold;">+{{ scope.row.money }}</span>
<span v-else style="color: red;font-weight: bold;">-{{ scope.row.money }}</span>
</template>
</el-table-column>
<el-table-column
label="上限(巴旦木)"
width="180"
prop="maximumMoney">
</el-table-column>
<el-table-column
label="重复(天/次)"
width="180"
prop="repeatDays">
</el-table-column>
<el-table-column
label="规则说明"
prop="ruleDescription">
</el-table-column>
</el-table>
</el-col>
<el-col>
<el-pagination
:hide-on-single-page="true"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pagination.currentPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="pagination.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total">
</el-pagination>
</el-col>
<el-col>
<el-dialog :visible.sync="dialogVisible">
<el-form label-width="180px">
<el-form-item label="转账账户">
<el-input v-model="toBankAccount" style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="转账金额">
<el-input-number v-model="money" :min="1" :step="1" :step-strictly="true"
style="width: 300px;"></el-input-number>
</el-form-item>
<el-form-item label="款项">
<el-input v-model="funds" style="width: 300px;"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button v-if="money && toBankAccount" type="primary" @click="transfer"> </el-button>
<el-button v-else type="primary" :disabled="true"> </el-button>
</div>
</el-dialog>
</el-col>
</el-row>
</template>
<script>
import {mapState} from 'vuex';
export default {
name: "currency-rules",
fetch({store, params, error}) {
return Promise.all([
store
.dispatch('currency-rule/fetchList', params)
.catch(err => error({statusCode: 404}))
])
},
computed: {
...mapState({
rules: state => state["currency-rule"].list.data.rules,
pagination: state => state["currency-rule"].list.data.pagination
})
},
data() {
return {
order: 'desc',
formBankAccount: '',
toBankAccount: '',
money: 1,
dialogVisible: false,
funds: '财政划拨',
transactionType: '0'
}
},
methods: {
onRouter(name, data) {
this.$router.push({
path: `/${name}/${data}`
})
},
handleSizeChange(pageSize) {
let _ts = this;
_ts.$store.dispatch('bank/fetchList', {
page: _ts.pagination.currentPage,
rows: pageSize
})
},
handleCurrentChange(page) {
let _ts = this;
_ts.$store.dispatch('bank/fetchList', {
page: page,
rows: _ts.pagination.pageSize
})
},
showTransfer(index, bank) {
let _ts = this;
_ts.$set(_ts, 'formBankAccount', bank.bankAccount);
_ts.$set(_ts, 'dialogVisible', true);
},
transfer() {
let _ts = this;
_ts.$axios.$post("/api/transaction/transfer", {
formBankAccount: _ts.formBankAccount,
toBankAccount: _ts.toBankAccount,
money: _ts.money,
funds: _ts.funds
}).then(function (res) {
if (res) {
if (res.idTransactionRecord) {
_ts.$message({
type: 'success',
message: '划转成功!'
});
_ts.$set(_ts, 'dialogVisible', false);
_ts.handleCurrentChange(1);
}
}
})
}
},
mounted() {
this.$store.commit("setActiveMenu", "admin-currency-rules");
}
}
</script>
<style scoped>
</style>

View File

@ -256,11 +256,11 @@ export default {
store store
.dispatch('dashboard/fetchDashboard', params) .dispatch('dashboard/fetchDashboard', params)
.catch(err => error({statusCode: 404})), .catch(err => error({statusCode: 404})),
store.dispatch("dashboard/fetchLastThirtyDays"), store.dispatch("dashboard/fetchLastThirtyDays", params),
store.dispatch("dashboard/fetchHistory"), store.dispatch("dashboard/fetchHistory", params),
store.dispatch("dashboard/fetchNewUsers"), store.dispatch("dashboard/fetchNewUsers", params),
store.dispatch("dashboard/fetchNewBankAccounts"), store.dispatch("dashboard/fetchNewBankAccounts", params),
store.dispatch("dashboard/fetchNewArticles") store.dispatch("dashboard/fetchNewArticles", params)
]) ])
}, },
computed: { computed: {

37
pages/nebula-pi.vue Normal file
View File

@ -0,0 +1,37 @@
<template>
<el-row class="product__wrapper">
<el-col>
<el-card :body-style="{ padding: '15px' }">
<h2>Nebula Pi 主板结构及布局</h2>
<p>
<img src="https://static.rymcu.com/article/1640531590844"
class="image">
</p>
</el-card>
</el-col>
</el-row>
</template>
<script>
export default {
name: "nebula-pi"
}
</script>
<style scoped>
.product__wrapper {
max-width: 980px;
margin: 20px auto;
display: block;
padding-left: 1rem;
padding-right: 1rem;
box-sizing: border-box;
}
.image {
width: 100%;
display: block;
}
</style>

78
pages/products.vue Normal file
View File

@ -0,0 +1,78 @@
<template>
<el-row class="product__wrapper">
<el-col :span="8">
<el-card :body-style="{ padding: '0px' }">
<img src="https://static.rymcu.com/article/1648960741563.jpg"
class="image">
<div style="padding: 14px;">
<span>Nebula Pi</span>
<div class="bottom clearfix">
<el-button type="text" class="button">立即购买</el-button>
<el-button type="text" class="button" @click="handleClick">相关内容</el-button>
</div>
</div>
</el-card>
</el-col>
</el-row>
</template>
<script>
export default {
name: "products",
data() {
return {
currentDate: new Date().toLocaleString()
};
},
methods: {
handleClick() {
this.$router.push({
path: "/nebula-pi"
});
}
}
}
</script>
<style scoped>
.product__wrapper {
max-width: 980px;
margin: 20px auto;
display: block;
padding-left: 1rem;
padding-right: 1rem;
box-sizing: border-box;
}
.time {
font-size: 13px;
color: #999;
}
.bottom {
margin-top: 13px;
line-height: 12px;
}
.button {
padding: 0;
float: right;
margin-left: 10px;
}
.image {
width: 100%;
display: block;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both
}
</style>

View File

@ -2,8 +2,8 @@
<el-row> <el-row>
<el-col :xs="24" :xl="24"> <el-col :xs="24" :xl="24">
<div class="card card-profile"> <div class="card card-profile">
<div v-if="user.userHomeBImgURL" class="card-header" <div v-if="user.bgImgUrl" class="card-header"
:style="{backgroundImage:'url('+user.userHomeBImgURL+')', backgroundSize:'percentage', backgroundPosition:'50%'}"></div> :style="{backgroundImage:'url('+user.bgImgUrl+')', backgroundSize:'cover', backgroundPosition:'50%'}"></div>
<div v-else class="card-header" <div v-else class="card-header"
:style="{backgroundImage:'url(' + backgroundImage + ')', backgroundSize:'800px auto', backgroundPosition:'50%'}"></div> :style="{backgroundImage:'url(' + backgroundImage + ')', backgroundSize:'800px auto', backgroundPosition:'50%'}"></div>
<div class="card-body text-center"> <div class="card-body text-center">

View File

@ -21,6 +21,12 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-col> </el-col>
<el-col>
<h1>双重验证</h1>
</el-col>
<el-col>
<el-button type="primary" round plain @click="open2FA">开启</el-button>
</el-col>
<el-dialog <el-dialog
title="更换邮箱" title="更换邮箱"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
@ -48,12 +54,27 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-dialog> </el-dialog>
<el-dialog
title="双重验证"
:visible.sync="secretKeyDialogVisible"
width="475px"
:before-close="hideSecretKeyDialog"
center>
<el-row style="text-align: center;">
<el-col>
<qrcode :value="secretKey" :options="{ width: 20 }"></qrcode>
</el-col>
</el-row>
</el-dialog>
</el-row> </el-row>
</template> </template>
<script> <script>
import Vue from 'vue';
import {mapState} from 'vuex'; import {mapState} from 'vuex';
import VueQrCode from '@chenfengyuan/vue-qrcode';
Vue.component(VueQrCode.name, VueQrCode);
export default { export default {
name: "security", name: "security",
computed: { computed: {
@ -74,7 +95,9 @@ export default {
dialogVisible: false, dialogVisible: false,
loading: false, loading: false,
loadText: '发送验证码', loadText: '发送验证码',
btnLoading: false btnLoading: false,
secretKeyDialogVisible: false,
secretKey: ''
} }
}, },
methods: { methods: {
@ -183,6 +206,18 @@ export default {
} }
} }
}) })
},
open2FA () {
let _ts = this;
_ts.$axios.$get('/api/auth/tow-factor/gen-key').then(function (res) {
if (res) {
_ts.secretKey = res.secretKey
_ts.$set(_ts, 'secretKeyDialogVisible', true);
}
})
},
hideSecretKeyDialog () {
this.$set(this, 'secretKeyDialogVisible', false);
} }
}, },
mounted() { mounted() {

View File

@ -88,6 +88,9 @@ export const mutations = {
export const actions = { export const actions = {
fetchUsers({commit}, params = {}) { fetchUsers({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateUsersData', getDefaultUsersData()) commit('updateUsersData', getDefaultUsersData())
commit('updateFetching', true) commit('updateFetching', true)
@ -111,6 +114,9 @@ export const actions = {
}); });
}, },
fetchRoles({commit}, params = {}) { fetchRoles({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateRolesData', getDefaultRolesData()) commit('updateRolesData', getDefaultRolesData())
commit('updateFetching', true) commit('updateFetching', true)
@ -134,6 +140,9 @@ export const actions = {
}); });
}, },
fetchArticles({commit}, params = {}) { fetchArticles({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateArticlesData', getDefaultArticlesData()) commit('updateArticlesData', getDefaultArticlesData())
commit('updateFetching', true) commit('updateFetching', true)
@ -158,6 +167,9 @@ export const actions = {
}); });
}, },
fetchComments({commit}, params = {}) { fetchComments({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateCommentsData', getDefaultArticlesData()) commit('updateCommentsData', getDefaultArticlesData())
commit('updateFetching', true) commit('updateFetching', true)

View File

@ -44,6 +44,9 @@ export const mutations = {
export const actions = { export const actions = {
fetchList({commit}, params = {}) { fetchList({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateListData', getDefaultListData()) commit('updateListData', getDefaultListData())
commit('updateListFetching', true) commit('updateListFetching', true)

View File

@ -27,6 +27,9 @@ export const mutations = {
export const actions = { export const actions = {
fetchList({commit}, params = {}) { fetchList({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateListData', getDefaultListData()) commit('updateListData', getDefaultListData())
commit('updateListFetching', true) commit('updateListFetching', true)

48
store/currency-rule.js Normal file
View File

@ -0,0 +1,48 @@
export const RULE_API_PATH = '/api/admin/rule/currency'
const getDefaultListData = () => {
return {
rules: [],
pagination: {}
}
}
export const state = () => {
return {
list: {
fetching: false,
data: getDefaultListData()
}
}
}
export const mutations = {
updateListFetching(state, action) {
state.list.fetching = action
},
updateListData(state, action) {
state.list.data = action
}
}
export const actions = {
fetchList({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据
commit('updateListData', [])
commit('updateListFetching', true)
return this.$axios
.$get(`${RULE_API_PATH}/list`)
.then(response => {
commit('updateListFetching', false);
commit('updateListData', response);
})
.catch(error => {
console.log(error);
commit('updateListFetching', false);
});
}
}

View File

@ -75,6 +75,9 @@ export const mutations = {
export const actions = { export const actions = {
fetchDashboard({commit}, params = {}) { fetchDashboard({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateDashboardData', getDefaultDashboardData()) commit('updateDashboardData', getDefaultDashboardData())
commit('updateDashboardFetching', true) commit('updateDashboardFetching', true)
@ -91,6 +94,9 @@ export const actions = {
}); });
}, },
fetchLastThirtyDays({commit}, params = {}) { fetchLastThirtyDays({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateLastThirtyDaysData', getDefaultLastThirtyDaysData()) commit('updateLastThirtyDaysData', getDefaultLastThirtyDaysData())
commit('updateDashboardFetching', true) commit('updateDashboardFetching', true)
@ -107,6 +113,9 @@ export const actions = {
}); });
}, },
fetchHistory({commit}, params = {}) { fetchHistory({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateHistoryData', getDefaultLastThirtyDaysData()) commit('updateHistoryData', getDefaultLastThirtyDaysData())
commit('updateDashboardFetching', true) commit('updateDashboardFetching', true)
@ -123,6 +132,9 @@ export const actions = {
}); });
}, },
fetchNewUsers({commit}, params = {}) { fetchNewUsers({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateNewUsersData', getDefaultNewUserData()) commit('updateNewUsersData', getDefaultNewUserData())
commit('updateDashboardFetching', true) commit('updateDashboardFetching', true)
@ -139,6 +151,9 @@ export const actions = {
}); });
}, },
fetchNewBankAccounts({commit}, params = {}) { fetchNewBankAccounts({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateNewBankAccountsData', getDefaultNewBankAccountData()) commit('updateNewBankAccountsData', getDefaultNewBankAccountData())
commit('updateDashboardFetching', true) commit('updateDashboardFetching', true)
@ -155,6 +170,9 @@ export const actions = {
}); });
}, },
fetchNewArticles({commit}, params = {}) { fetchNewArticles({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateNewArticlesData', getDefaultNewBankAccountData()) commit('updateNewArticlesData', getDefaultNewBankAccountData())
commit('updateDashboardFetching', true) commit('updateDashboardFetching', true)

0
store/product.js Normal file
View File

View File

@ -68,6 +68,9 @@ export const mutations = {
export const actions = { export const actions = {
fetchList({commit}, params = {}) { fetchList({commit}, params = {}) {
if (params && params.reset === '0') {
return true;
}
// 清空已有数据 // 清空已有数据
commit('updateListData', getDefaultListData()) commit('updateListData', getDefaultListData())
commit('updateListFetching', true) commit('updateListFetching', true)

View File

@ -2670,7 +2670,7 @@ cookie-signature@1.0.6:
cookie@0.5.0: cookie@0.5.0:
version "0.5.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" resolved "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
cookie@^0.3.1: cookie@^0.3.1:
@ -3114,7 +3114,7 @@ defu@^5.0.0:
depd@2.0.0: depd@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" resolved "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
depd@~1.1.2: depd@~1.1.2:
@ -3137,7 +3137,7 @@ destr@^1.0.0, destr@^1.1.0:
destroy@1.2.0: destroy@1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" resolved "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
destroy@^1.0.4, destroy@~1.0.4: destroy@^1.0.4, destroy@~1.0.4:
@ -3561,7 +3561,7 @@ expand-brackets@^2.1.4:
express@^4.18.1: express@^4.18.1:
version "4.18.1" version "4.18.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" resolved "https://registry.npmmirror.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf"
integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==
dependencies: dependencies:
accepts "~1.3.8" accepts "~1.3.8"
@ -3748,7 +3748,7 @@ finalhandler@1.1.2:
finalhandler@1.2.0: finalhandler@1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" resolved "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
dependencies: dependencies:
debug "2.6.9" debug "2.6.9"
@ -4241,7 +4241,7 @@ htmlparser2@^6.1.0:
http-errors@2.0.0: http-errors@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" resolved "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
dependencies: dependencies:
depd "2.0.0" depd "2.0.0"
@ -4857,9 +4857,9 @@ kind-of@^6.0.0, kind-of@^6.0.2:
integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=
klona@^2.0.4: klona@^2.0.4:
version "2.0.5" version "2.0.4"
resolved "https://registry.npmmirror.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" resolved "https://registry.npm.taobao.org/klona/download/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== integrity sha1-e7Hjr/sMuGJFR+9+j2cI6i4538A=
last-call-webpack-plugin@^3.0.0: last-call-webpack-plugin@^3.0.0:
version "3.0.0" version "3.0.0"
@ -5680,7 +5680,7 @@ object.values@^1.1.0:
on-finished@2.4.1: on-finished@2.4.1:
version "2.4.1" version "2.4.1"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" resolved "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
dependencies: dependencies:
ee-first "1.1.1" ee-first "1.1.1"
@ -6789,7 +6789,7 @@ qrcode@^1.4.4:
qs@6.10.3: qs@6.10.3:
version "6.10.3" version "6.10.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" resolved "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==
dependencies: dependencies:
side-channel "^1.0.4" side-channel "^1.0.4"
@ -6866,7 +6866,7 @@ range-parser@^1.2.1, range-parser@~1.2.1:
raw-body@2.5.1: raw-body@2.5.1:
version "2.5.1" version "2.5.1"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" resolved "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
dependencies: dependencies:
bytes "3.1.2" bytes "3.1.2"
@ -7259,7 +7259,7 @@ send@0.17.1:
send@0.18.0: send@0.18.0:
version "0.18.0" version "0.18.0"
resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" resolved "https://registry.npmmirror.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
dependencies: dependencies:
debug "2.6.9" debug "2.6.9"
@ -7306,7 +7306,7 @@ serve-placeholder@^1.2.3:
serve-static@1.15.0: serve-static@1.15.0:
version "1.15.0" version "1.15.0"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" resolved "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
dependencies: dependencies:
encodeurl "~1.0.2" encodeurl "~1.0.2"
@ -7400,7 +7400,7 @@ signal-exit@^3.0.2, signal-exit@^3.0.3:
simple-icons@^6.23.0: simple-icons@^6.23.0:
version "6.23.0" version "6.23.0"
resolved "https://registry.yarnpkg.com/simple-icons/-/simple-icons-6.23.0.tgz#6e3bcec7537b0765d245f3ec9be3115fcd48c429" resolved "https://registry.npmmirror.com/simple-icons/-/simple-icons-6.23.0.tgz#6e3bcec7537b0765d245f3ec9be3115fcd48c429"
integrity sha512-9ql+6OdW5Dnfx1/z5z8MYO2y+OM4Oj4XBvQY5Nlye4eW+Nf5igHzHIKKtTmFkvCmR0lrddZpe1F/89chgoUXhg== integrity sha512-9ql+6OdW5Dnfx1/z5z8MYO2y+OM4Oj4XBvQY5Nlye4eW+Nf5igHzHIKKtTmFkvCmR0lrddZpe1F/89chgoUXhg==
simple-swizzle@^0.2.2: simple-swizzle@^0.2.2:
@ -7584,7 +7584,7 @@ static-extend@^0.1.1:
statuses@2.0.1: statuses@2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
"statuses@>= 1.5.0 < 2", statuses@~1.5.0: "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
@ -8287,9 +8287,9 @@ vary@^1.1.2, vary@~1.1.2:
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
vditor@^3.8.14: vditor@^3.8.14:
version "3.8.14" version "3.8.15"
resolved "https://registry.yarnpkg.com/vditor/-/vditor-3.8.14.tgz#634c43d5c0c994e80d0dfe555b284d6dd78780c2" resolved "https://registry.npmmirror.com/vditor/-/vditor-3.8.15.tgz#de340bdaa33264e7a5c303d9e97dd99fd043fec9"
integrity sha512-vJ6Fb89bgp5s2mbLwAOSVH4tXC+bmhd1XUWgO/s91KR3vqBn5mr6mJkMJeqM1/9IEUC1I4H6+d/Bd4yphqFhwA== integrity sha512-BYSBNUuhtvOfu1OU+NhS7R6TcrNP0UmQ8Vtbzq9BnLoG1uIHPZaTjtJIv00OPqHEcZa4KpR7mU+n9P+i+9SHuA==
dependencies: dependencies:
diff-match-patch "^1.0.5" diff-match-patch "^1.0.5"