This commit is contained in:
朱小炯 2025-06-28 10:15:55 +08:00
commit ae7a79d670
45 changed files with 2818 additions and 0 deletions

3
.env Normal file
View File

@ -0,0 +1,3 @@
NODE_ENV=production
VUE_APP_PREVIEW=false
VUE_APP_API_BASE_URL=/api

4
.env.development Normal file
View File

@ -0,0 +1,4 @@
NODE_ENV=development
VUE_APP_PREVIEW=true
VUE_APP_API_BASE_URL=/api
GIT_TEST_DEBUG_UNSAFE_DIRECTORIES=true

3
.env.production Normal file
View File

@ -0,0 +1,3 @@
NODE_ENV=production
VUE_APP_PREVIEW=true
VUE_APP_API_BASE_URL=/api

11
.gitattributes vendored Normal file
View File

@ -0,0 +1,11 @@
public/* linguist-vendored
# Automatically normalize line endings (to LF) for all text-based files.
* text=auto eol=lf
# Declare files that will always have CRLF line endings on checkout.
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.{ico,png,jpg,jpeg,gif,webp,svg,woff,woff2} binary

22
.gitignore vendored Normal file
View File

@ -0,0 +1,22 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
package-lock.json

6
Dockerfile Normal file
View File

@ -0,0 +1,6 @@
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
ADD deploy/nginx.conf /etc/nginx/conf.d/default.conf
COPY dist/ /usr/share/nginx/html/

6
Dockerfile_Test Normal file
View File

@ -0,0 +1,6 @@
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
ADD deploy/nginx_test.conf /etc/nginx/conf.d/default.conf
COPY dist/ /usr/share/nginx/html/

1
README.md Normal file
View File

@ -0,0 +1 @@
企微侧边栏

9
deploy/caddy.conf Normal file
View File

@ -0,0 +1,9 @@
0.0.0.0:80 {
gzip
root /usr/share/nginx/html
rewrite {
r .*
to {path} /
}
}

39
deploy/nginx.conf Normal file
View File

@ -0,0 +1,39 @@
server {
listen 80;
server_name _;
# gzip config
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
root /usr/share/nginx/html/dist;
include /etc/nginx/mime.types;
index index.html index.htm;
try_files $uri $uri/ @router;
location @router {
rewrite ^.*$ /index.html last;
}
# location /api {
# proxy_pass https://preview.pro.antdv.com/api;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header X-Real-IP $remote_addr;
# }
location /api/live {
proxy_pass http://120.77.165.155:8100;
}
location /api/Complaint {
proxy_pass http://120.77.165.155:8095;
}
location /api/Wework {
proxy_pass http://cmsext.soft.dn8188.com;
}
location /api {
proxy_pass http://120.77.165.155:8089;
}
}

36
deploy/nginx_test.conf Normal file
View File

@ -0,0 +1,36 @@
server {
listen 80;
server_name _;
# gzip config
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
root /usr/share/nginx/html/dist;
include /etc/nginx/mime.types;
index index.html index.htm;
try_files $uri $uri/ @router;
location @router {
rewrite ^.*$ /index.html last;
}
# location /api {
# proxy_pass https://preview.pro.antdv.com/api;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_set_header X-Real-IP $remote_addr;
# }
location /api/live {
proxy_pass http://120.77.165.155:8100;
}
location /api/Complaint {
proxy_pass http://192.168.11.81:8095;
}
location /api {
proxy_pass http://192.168.11.81:8089;
}
}

14
index.html Normal file
View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>重要线索</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
<script src="//res.wx.qq.com/open/js/jweixin-1.2.0.js" referrerpolicy="origin"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js" referrerpolicy="origin"></script>
</body>
</html>

25
package.json Normal file
View File

@ -0,0 +1,25 @@
{
"name": "vite",
"version": "0.0.0",
"scripts": {
"dev": "vite",
"build": "vite build"
},
"dependencies": {
"axios": "^1.4.0",
"jweixin-1.6.0": "^1.0.0",
"jwxwork": "^0.1.12",
"store": "^2.0.12",
"vant": "^4.0.0",
"vue": "^3.2.45",
"vue-router": "^4.0.13",
"vuex": "^4.1.0",
"weixin-js-sdk": "^1.6.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^3.2.0",
"less": "^4.2.0",
"unplugin-vue-components": "^0.22.11",
"vite": "^4.4.7"
}
}

1
public/WW_verify_0IfsovoUayKyAZbU.txt vendored Normal file
View File

@ -0,0 +1 @@
0IfsovoUayKyAZbU

1
public/WW_verify_QvdKsO1xv8R5wTeJ.txt vendored Normal file
View File

@ -0,0 +1 @@
QvdKsO1xv8R5wTeJ

44
src/App.vue Normal file
View File

@ -0,0 +1,44 @@
<link rel="stylesheet" href="@/assets/style/common.less">
<template>
<div id="main">
<router-view />
</div>
</template>
<style>
@import url("@/assets/style/common.less");
</style>
<script>
export default {
name: 'App',
components: {
},
created() {
this.initWindows()
},
methods: {
setViewHeight() {
let windowVH = window.innerHeight / 100
document.documentElement.style.setProperty('--vh', windowVH + 'px')
},
initWindows() {
let i = 'orientationchange' in window ? 'orientationchange' : 'resize'
window.addEventListener('DOMContentLoaded', this.setViewHeight())
document.addEventListener(i, this.setViewHeight())
let fontSize = 100
let docEl = document.documentElement
let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
let recalc = function () {
let clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if (clientWidth > 750) clientWidth = 750;
docEl.style.fontSize = (50 * (clientWidth / 375)).toFixed(1) + 'px'; fontSize = 50 * (clientWidth / 375);
};
if (!document.addEventListener) return;
window.addEventListener(resizeEvt, recalc, false);
document.addEventListener('DOMContentLoaded', recalc, false);
}
}
}
</script>

22
src/api/complaint.js Normal file
View File

@ -0,0 +1,22 @@
import request from '@/utils/request'
const api = {
DetailByAppid: '/api/Complaint/DetailByAppid',
Status: '/api/Complaint/Status',
}
export function detailByAppid (parameter) {
return request({
url: api.DetailByAppid,
method: 'get',
params: parameter
})
}
export function changeStatus (data) {
return request({
url: api.Status,
method: 'post',
data: data
})
}

22
src/api/importanceItem.js Normal file
View File

@ -0,0 +1,22 @@
import request from '@/utils/request'
const api = {
List: '/api/ImportanceItem/list',
Statistics: '/api/ImportanceItem/statistics'
}
export function list (parameter) {
return request({
url: api.List,
method: 'get',
params: parameter
})
}
export function statistics (parameter) {
return request({
url: api.Statistics,
method: 'get',
params: parameter
})
}

29
src/api/live.js Normal file
View File

@ -0,0 +1,29 @@
import request from '@/utils/request'
const api = {
Details: '/api/live/Details',
Schedules: '/api/live/Schedules',
Rooms: '/api/live/Rooms',
}
export function getRooms () {
return request({
url: api.Rooms,
method: 'get',
})
}
export function getSchedules () {
return request({
url: api.Schedules,
method: 'get',
})
}
export function getDetails (parameter) {
return request({
url: api.Details,
method: 'get',
params: parameter
})
}

13
src/api/wxwork.js Normal file
View File

@ -0,0 +1,13 @@
import request from '@/utils/request'
const api = {
AgentConfig: '/api/Wework/AgentConfig',
}
export function getAgentConfig (parameter) {
return request({
url: api.AgentConfig,
method: 'get',
params: parameter
})
}

BIN
src/assets/images/cr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

BIN
src/assets/images/cr2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

View File

@ -0,0 +1,229 @@
html {
font-size: 14px;
}
@media (min-width: 768px) {
html {
font-size: 16px;
}
}
html {
position: relative;
height: 100vh;
}
body {
margin-bottom: 60px;
width: 100%;
max-width: 750px;
margin: 0 auto;
}
#app {
position: relative;
height: calc(var(--vh) * 100);
font-size: 0;
}
[v-cloak] {
display: none
}
:root {
--vh: 1vh;
}
.hide {
display: none !important;
}
p {
margin: 0;
padding: 0;
}
.head {
display: flex;
align-items: center;
height: 1.28rem;
padding: 0 .3rem;
box-sizing: border-box;
background: #F8F8F8;
}
.head span:first-child {
color: #999;
font-size: .32rem;
font-weight: 500;
margin-right: .7rem;
}
.head span:last-child {
color: #333;
font-size: .36rem;
font-weight: 500;
}
.tabs {
display: flex;
align-items: center;
height: 1.18rem;
padding: 0 .38rem;
font-size: .36rem;
color: #999;
font-weight: 500;
}
.tab {
display: inline-block;
height: .66rem;
cursor: pointer;
}
.tab:first-child {
margin-right: .3rem;
}
.active {
position: relative;
color: #333;
}
.active::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
display: inline-block;
width: .7rem;
height: .08rem;
background: #1890FF;
border-radius: 4px;
}
.amount {
font-weight: 400;
color: #EC2F37;
}
.details {
display: inline-block;
margin-bottom: 10px;
}
.details > p {
flex: 1;
font-size: .28rem;
color: #EC2F37;
}
.content {
margin: .2rem .38rem 0;
font-weight: 500;
}
.item-title {
margin-bottom: 10px;
}
.item-title > span {
font-size: 0.28rem;
margin-right: .2rem;
}
.title-time {
display: inline-block;
font-size: 0.32rem;
margin-right: .2rem;
}
.item-head {
margin-bottom: .1rem;
display: flex;
}
.item-head > span > img {
width: 0.28rem;
}
.item-head > span {
margin: 0.2rem;
font-size: .28rem;
color: #EC2F37;
}
.item-head > .time {
display: inline-block;
font-size: .28rem;
color: #EC2F37;
margin: auto 0;
font-weight: bold;
}
.item-head > .contentIcon {
display: flex;
margin: auto 0.2rem auto 0.05rem;
font-weight: bold;
}
.info-box {
position: relative;
padding: 0 0 .1rem .4rem;
margin-bottom: .4rem;
}
.info-box::before {
content: '';
position: absolute;
top: 0;
left: .18rem;
display: inline-block;
width: .01rem;
height: 100%;
background-color: #d9d6d6;
}
.remarks {
font-size: .20rem;
color: #333;
text-align: justify;
word-break: break-all;
}
.remarks > p {
margin-top: 5px;
}
.sign-way {
font-size: .16rem;
color: #999;
margin-top: 5px;
font-weight: normal;
}
.keyword {
color: #ff0000 !important;
text-decoration: underline
}
.tag {
margin-right: 10px;
margin-top: 7px;
background-color: #f4f7ff;
color: #999 !important;
border: aliceblue;
cursor: pointer !important;
}
.tag-click {
margin-right: 10px;
margin-top: 7px;
background-color: #1890FF !important;
color: white !important;
border: aliceblue;
cursor: pointer !important;
}
.wrapper {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
}
.block {
width: 120px;
height: 120px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
background-color: #fff;
}

6
src/main.js Normal file
View File

@ -0,0 +1,6 @@
import { createApp } from 'vue';
import App from './App.vue';
import router from './router/index'
import { Toast } from 'vant';
createApp(App).use(router).use(Toast).mount('#app');

44
src/router/index.js Normal file
View File

@ -0,0 +1,44 @@
import {createRouter, createWebHistory} from 'vue-router'
const routes = [
{
path: '/',
name: 'Home',
component: () => import('@/views/Index.vue'),
meta: {
title: '重要线索'
}
},
{
path: '/customer/risk',
name: 'Risk',
component: () => import('@/views/customer/risk.vue'),
meta: {
title: '潜在风险'
}
},
{
path: '/wx/openchat',
name: 'openchat',
component: () => import('@/views/wx/openchat.vue'),
meta: {
title: '打开聊天'
}
},
{
path: '/customer/liveStreamsDetail',
name: 'liveStreamsDetail',
component: () => import('@/views/customer/liveStreamsDetail.vue'),
meta: {
title: '直播间互动详情'
}
},
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router

32
src/store/app-mixin.js Normal file
View File

@ -0,0 +1,32 @@
import { mapState } from 'vuex'
const baseMixin = {
computed: {
...mapState({
layout: state => state.app.layout,
navTheme: state => state.app.theme,
primaryColor: state => state.app.color,
colorWeak: state => state.app.weak,
fixedHeader: state => state.app.fixedHeader,
fixedSidebar: state => state.app.fixedSidebar,
contentWidth: state => state.app.contentWidth,
autoHideHeader: state => state.app.autoHideHeader,
isMobile: state => state.app.isMobile,
sideCollapsed: state => state.app.sideCollapsed,
multiTab: state => state.app.multiTab
}),
isTopMenu () {
return this.layout === 'topmenu'
}
},
methods: {
isSideMenu () {
return !this.isTopMenu
}
}
}
export {
baseMixin
}

11
src/store/device-mixin.js Normal file
View File

@ -0,0 +1,11 @@
import { mapState } from 'vuex'
const deviceMixin = {
computed: {
...mapState({
isMobile: state => state.app.isMobile
})
}
}
export { deviceMixin }

16
src/store/getters.js Normal file
View File

@ -0,0 +1,16 @@
const getters = {
isMobile: state => state.app.isMobile,
lang: state => state.app.lang,
theme: state => state.app.theme,
color: state => state.app.color,
token: state => state.user.token,
avatar: state => state.user.avatar,
nickname: state => state.user.name,
welcome: state => state.user.welcome,
roles: state => state.user.roles,
userInfo: state => state.user.info,
addRouters: state => state.permission.addRouters,
multiTab: state => state.app.multiTab
}
export default getters

16
src/store/i18n-mixin.js Normal file
View File

@ -0,0 +1,16 @@
import { mapState } from 'vuex'
const i18nMixin = {
computed: {
...mapState({
currentLang: state => state.app.lang
})
},
methods: {
setLang (lang) {
this.$store.dispatch('setLang', lang)
}
}
}
export default i18nMixin

26
src/store/index.js Normal file
View File

@ -0,0 +1,26 @@
import Vue from 'vue'
import Vuex from 'vuex'
//import app from './modules/app'
//import user from './modules/user'
// default router permission control
// 默认路由模式为静态路由 (router.config.js)
// import permission from './modules/static-router'
// dynamic router permission control (Experimental)
// 动态路由模式api请求后端生成
// import permission from './modules/async-router'
import getters from './getters'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
},
state: {},
mutations: {},
actions: {},
getters
})

99
src/store/modules/app.js Normal file
View File

@ -0,0 +1,99 @@
import storage from 'store'
import {
SIDEBAR_TYPE,
TOGGLE_MOBILE_TYPE,
TOGGLE_NAV_THEME,
TOGGLE_LAYOUT,
TOGGLE_FIXED_HEADER,
TOGGLE_FIXED_SIDEBAR,
TOGGLE_CONTENT_WIDTH,
TOGGLE_HIDE_HEADER,
TOGGLE_COLOR,
TOGGLE_WEAK,
TOGGLE_MULTI_TAB,
// i18n
APP_LANGUAGE
} from '@/store/mutation-types'
import { loadLanguageAsync } from '@/locales'
const app = {
state: {
sideCollapsed: false,
isMobile: false,
theme: 'dark',
layout: '',
contentWidth: '',
fixedHeader: false,
fixedSidebar: false,
autoHideHeader: false,
color: '',
weak: false,
multiTab: true,
lang: 'zh-CN',
_antLocale: {}
},
mutations: {
[SIDEBAR_TYPE]: (state, type) => {
state.sideCollapsed = type
storage.set(SIDEBAR_TYPE, type)
},
[TOGGLE_MOBILE_TYPE]: (state, isMobile) => {
state.isMobile = isMobile
},
[TOGGLE_NAV_THEME]: (state, theme) => {
state.theme = theme
storage.set(TOGGLE_NAV_THEME, theme)
},
[TOGGLE_LAYOUT]: (state, mode) => {
state.layout = mode
storage.set(TOGGLE_LAYOUT, mode)
},
[TOGGLE_FIXED_HEADER]: (state, mode) => {
state.fixedHeader = mode
storage.set(TOGGLE_FIXED_HEADER, mode)
},
[TOGGLE_FIXED_SIDEBAR]: (state, mode) => {
state.fixedSidebar = mode
storage.set(TOGGLE_FIXED_SIDEBAR, mode)
},
[TOGGLE_CONTENT_WIDTH]: (state, type) => {
state.contentWidth = type
storage.set(TOGGLE_CONTENT_WIDTH, type)
},
[TOGGLE_HIDE_HEADER]: (state, type) => {
state.autoHideHeader = type
storage.set(TOGGLE_HIDE_HEADER, type)
},
[TOGGLE_COLOR]: (state, color) => {
state.color = color
storage.set(TOGGLE_COLOR, color)
},
[TOGGLE_WEAK]: (state, mode) => {
state.weak = mode
storage.set(TOGGLE_WEAK, mode)
},
[APP_LANGUAGE]: (state, lang, antd = {}) => {
state.lang = lang
state._antLocale = antd
storage.set(APP_LANGUAGE, lang)
},
[TOGGLE_MULTI_TAB]: (state, bool) => {
storage.set(TOGGLE_MULTI_TAB, bool)
state.multiTab = bool
}
},
actions: {
setLang ({ commit }, lang) {
return new Promise((resolve, reject) => {
commit(APP_LANGUAGE, lang)
loadLanguageAsync(lang).then(() => {
resolve()
}).catch((e) => {
reject(e)
})
})
}
}
}
export default app

View File

@ -0,0 +1,33 @@
/**
* 向后端请求用户的菜单动态生成路由
*/
import { constantRouterMap } from '@/config/router.config'
import { generatorDynamicRouter } from '@/router/generator-routers'
const permission = {
state: {
routers: constantRouterMap,
addRouters: []
},
mutations: {
SET_ROUTERS: (state, routers) => {
state.addRouters = routers
state.routers = constantRouterMap.concat(routers)
}
},
actions: {
GenerateRoutes ({ commit }, data) {
return new Promise((resolve, reject) => {
const { token } = data
generatorDynamicRouter(token).then(routers => {
commit('SET_ROUTERS', routers)
resolve()
}).catch(e => {
reject(e)
})
})
}
}
}
export default permission

View File

@ -0,0 +1,84 @@
import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
import cloneDeep from 'lodash.clonedeep'
/**
* 过滤账户是否拥有某一个权限并将菜单从加载列表移除
*
* @param permission
* @param route
* @returns {boolean}
*/
function hasPermission (permission, route) {
if (route.meta && route.meta.permission) {
if (permission === undefined) {
return false
}
for (let i = 0, len = permission.length; i < len; i++) {
for (let j = 0, len2 = route.meta.permission.length; j < len2; j++) {
var p = permission[i]
var p2 = route.meta.permission[j]
if (p.toLowerCase() === p2.toLowerCase()) {
return true
}
}
}
return false
}
return true
}
/**
* 单账户多角色时使用该方法可过滤角色不存在的菜单
*
* @param roles
* @param route
* @returns {*}
*/
// eslint-disable-next-line
function hasRole(roles, route) {
if (route.meta && route.meta.roles) {
return route.meta.roles.includes(roles.id)
} else {
return true
}
}
function filterAsyncRouter (routerMap, role) {
const accessedRouters = routerMap.filter(route => {
var yes = hasPermission(role.permissionList, route)
if (yes) {
if (route.children && route.children.length) {
route.children = filterAsyncRouter(route.children, role)
}
return true
}
return false
})
return accessedRouters
}
const permission = {
state: {
routers: constantRouterMap,
addRouters: []
},
mutations: {
SET_ROUTERS: (state, routers) => {
state.addRouters = routers
state.routers = constantRouterMap.concat(routers)
}
},
actions: {
GenerateRoutes ({ commit }, data) {
return new Promise(resolve => {
const { role } = data
const routerMap = cloneDeep(asyncRouterMap)
const accessedRouters = filterAsyncRouter(routerMap, role)
commit('SET_ROUTERS', accessedRouters)
resolve()
})
}
}
}
export default permission

106
src/store/modules/user.js Normal file
View File

@ -0,0 +1,106 @@
import storage from 'store'
import expirePlugin from 'store/plugins/expire'
import { login, getInfo, logout } from '@/api/login'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { welcome } from '@/utils/util'
storage.addPlugin(expirePlugin)
const user = {
state: {
token: '',
name: '',
welcome: '',
avatar: '',
roles: [],
info: {}
},
mutations: {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_NAME: (state, { name, welcome }) => {
state.name = name
state.welcome = welcome
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
},
SET_ROLES: (state, roles) => {
state.roles = roles
},
SET_INFO: (state, info) => {
state.info = info
}
},
actions: {
// 登录
Login ({ commit }, userInfo) {
return new Promise((resolve, reject) => {
login(userInfo).then(response => {
if (response.data) {
storage.set(ACCESS_TOKEN, response.data, new Date().getTime() + 7 * 24 * 60 * 60 * 1000)
commit('SET_TOKEN', response.data)
}
resolve(response)
}).catch(error => {
reject(error)
})
})
},
// 获取用户信息
GetInfo ({ commit }) {
return new Promise((resolve, reject) => {
// 请求后端获取用户信息 /api/user/info
getInfo().then(response => {
const result = response
if (result.data && result.data.Permissions.length > 0) {
var parts = result.data.Permissions.split(',')
for (var i = parts.length - 1; i >= 0; i--) {
if (parts[i].length === 0) {
parts.slice(i, 1)
}
}
const role = { }
role.permissions = parts
role.permissionList = parts
// 覆盖响应体的 role, 供下游使用
result.role = role
commit('SET_ROLES', role)
commit('SET_INFO', result)
commit('SET_NAME', { name: result.name, welcome: welcome() })
commit('SET_AVATAR', result.avatar)
// 下游
resolve(result)
} else {
reject(new Error('getInfo: roles must be a non-null array !'))
}
}).catch(error => {
reject(error)
})
})
},
// 登出
Logout ({ commit, state }) {
return new Promise((resolve) => {
logout(state.token).then(() => {
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
storage.remove(ACCESS_TOKEN)
resolve()
}).catch((err) => {
console.log('logout fail:', err)
// resolve()
}).finally(() => {
})
})
}
}
}
export default user

View File

@ -0,0 +1,24 @@
export const ACCESS_TOKEN = '__admin_token__'
export const SIDEBAR_TYPE = 'sidebar_type'
export const TOGGLE_MOBILE_TYPE = 'is_mobile'
export const TOGGLE_NAV_THEME = 'nav_theme'
export const TOGGLE_LAYOUT = 'layout'
export const TOGGLE_FIXED_HEADER = 'fixed_header'
export const TOGGLE_FIXED_SIDEBAR = 'fixed_sidebar'
export const TOGGLE_CONTENT_WIDTH = 'content_width'
export const TOGGLE_HIDE_HEADER = 'auto_hide_header'
export const TOGGLE_COLOR = 'color'
export const TOGGLE_WEAK = 'weak'
export const TOGGLE_MULTI_TAB = 'multi_tab'
export const APP_LANGUAGE = 'app_language'
export const CONTENT_WIDTH_TYPE = {
Fluid: 'Fluid',
Fixed: 'Fixed'
}
export const NAV_THEME = {
LIGHT: 'light',
DARK: 'dark'
}

35
src/utils/axios.js Normal file
View File

@ -0,0 +1,35 @@
const VueAxios = {
vm: {},
// eslint-disable-next-line no-unused-vars
install (Vue, instance) {
if (this.installed) {
return
}
this.installed = true
if (!instance) {
// eslint-disable-next-line no-console
console.error('You have to install axios')
return
}
Vue.axios = instance
Object.defineProperties(Vue.prototype, {
axios: {
get: function get () {
return instance
}
},
$http: {
get: function get () {
return instance
}
}
})
}
}
export {
VueAxios
}

64
src/utils/request.js Normal file
View File

@ -0,0 +1,64 @@
import axios from 'axios'
import storage from 'store'
import { VueAxios } from './axios'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { Toast } from 'vant';
// 创建 axios 实例
const request = axios.create({
// API 请求的默认前缀
baseURL: import.meta.env.VUE_APP_API_BASE_URL,
timeout: 60000 // 请求超时时间
})
// 异常拦截处理器
const errorHandler = (error) => {
console.log(error)
if (error.response) {
const data = error.response.data
// 从 localstorage 获取 token
const token = storage.get(ACCESS_TOKEN)
if (error.response.status === 403) {
Toast.fail(data.message)
}
if (error.response.status === 401 && !(data.result)) {
Toast.fail('Authorization verification failed')
if (token) {
setTimeout(() => {
window.location.reload()
}, 1500)
}
}
}
return Promise.reject(error)
}
// request interceptor
request.interceptors.request.use(config => {
const token = storage.get(ACCESS_TOKEN)
// 如果 token 存在
// 让每个请求携带自定义 token 请根据实际情况自行修改
if (token) {
config.headers['Authorization'] = token
}
return config
}, errorHandler)
// response interceptor
request.interceptors.response.use((response) => {
return response.data
}, errorHandler)
const installer = {
vm: {},
install (Vue) {
Vue.use(VueAxios, request)
}
}
export default request
export {
installer as VueAxios,
request as axios
}

95
src/utils/util.js Normal file
View File

@ -0,0 +1,95 @@
export function timeFix () {
const time = new Date()
const hour = time.getHours()
return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好'
}
export function welcome () {
const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了']
const index = Math.floor(Math.random() * arr.length)
return arr[index]
}
/**
* 触发 window.resize
*/
export function triggerWindowResizeEvent () {
const event = document.createEvent('HTMLEvents')
event.initEvent('resize', true, true)
event.eventType = 'message'
window.dispatchEvent(event)
}
export function handleScrollHeader (callback) {
let timer = 0
let beforeScrollTop = window.pageYOffset
callback = callback || function () {}
window.addEventListener(
'scroll',
event => {
clearTimeout(timer)
timer = setTimeout(() => {
let direction = 'up'
const afterScrollTop = window.pageYOffset
const delta = afterScrollTop - beforeScrollTop
if (delta === 0) {
return false
}
direction = delta > 0 ? 'down' : 'up'
callback(direction)
beforeScrollTop = afterScrollTop
}, 50)
},
false
)
}
export function isIE () {
const bw = window.navigator.userAgent
const compare = (s) => bw.indexOf(s) >= 0
const ie11 = (() => 'ActiveXObject' in window)()
return compare('MSIE') || ie11
}
/**
* Remove loading animate
* @param id parent element id or class
* @param timeout
*/
export function removeLoadingAnimate (id = '', timeout = 1500) {
if (id === '') {
return
}
setTimeout(() => {
document.body.removeChild(document.getElementById(id))
}, timeout)
}
export function scorePassword (pass) {
let score = 0
if (!pass) {
return score
}
// award every unique letter until 5 repetitions
const letters = {}
for (let i = 0; i < pass.length; i++) {
letters[pass[i]] = (letters[pass[i]] || 0) + 1
score += 5.0 / letters[pass[i]]
}
// bonus points for mixing it up
const variations = {
digits: /\d/.test(pass),
lower: /[a-z]/.test(pass),
upper: /[A-Z]/.test(pass),
nonWords: /\W/.test(pass)
}
let variationCount = 0
for (var check in variations) {
variationCount += (variations[check] === true) ? 1 : 0
}
score += (variationCount - 1) * 10
return parseInt(score)
}

11
src/utils/wechatPlugin.js Normal file
View File

@ -0,0 +1,11 @@
import wx from 'weixin-js-sdk'
const plugin = {
install(Vue) {
Vue.wechat = wx
},
$wechat: wx
}
export default plugin
export const install = plugin.install

114
src/views/Index.vue Normal file
View File

@ -0,0 +1,114 @@
<link rel="stylesheet" href="@/assets/style/common.less">
<template>
<div class="main">
<div class="content">
<van-pull-refresh :v-mode="refreshing" @refresh="onRefresh">
<div class="details">
<van-tag v-for="detail in details" :round="false" type="primary" @click="onDetailClick(detail)" plain size="large" :class="detail.click? 'tag-click': 'tag'">{{ detail.count + ' ' + detail.eventName }}</van-tag>
</div>
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
:disabled="true"
loading-text="加载中..."
>
<van-skeleton title avatar :row="3" :loading="loading">
<div class="item" v-for="(sidebar, index) in sidebars">
<div class="item-head">
<span class="contentIcon"><img :src="iconImage" alt=""> </span>
<span class="time">{{ sidebar.content }}</span>
</div>
<div class="info-box">
<div class="remarks">
<p>{{ sidebar.eventname }} {{ sidebar.scenetypename }} {{ sidebar.sceneidname }}</p>
<p>{{ sidebar.deptname }}</p>
</div>
<div class="remarks sign-way">{{ sidebar.actTime }}</div>
</div>
</div>
</van-skeleton>
</van-list>
</van-pull-refresh>
<van-back-top right="8vw" bottom="3vh" />
</div>
</div>
</template>
<style>
@import url("@/assets/style/common.less");
</style>
<script>
import iconImage from '@/assets/images/cr2.png'
import { list, statistics } from '@/api/importanceItem'
export default {
data() {
return {
iconImage,
loading: false,
finished: false,
refreshing: false,
request: {
},
sidebars: [],
details: []
};
},
created() {
this.initRequest()
this.onLoad()
this.onLoadStatistics()
},
methods: {
initRequest(){
let geturl = window.location.href
let getqyinfo = geturl.split('?')[1]
let getqys = new URLSearchParams('?'+getqyinfo)
this.request.resid = getqys.get('resid')
this.request.uid = getqys.get('uid')
this.request.appid = getqys.get('appid')
this.request.appuserid = getqys.get('appuserid')
},
onDetailClick(detail){
if(!detail.click) {
this.details.forEach(x => x.click = false)
detail.click = true
this.request.eventid = detail.eventid;
this.onLoad();
} else {
this.details.forEach(x => x.click = false)
detail.click = false
this.request.eventid = null;
this.onLoad();
}
},
onRefresh(){
this.onLoad();
},
onLoad() {
this.loading = true;
this.finished = false;
//
list(this.request).then(res => {
if (res.code === 0) {
this.sidebars = res.data;
this.refreshing = false;
this.loading = false;
this.finished = true;
}
})
},
onLoadStatistics(){
statistics(this.request).then(res => {
if (res.code === 0) {
this.details = res.data;
}
})
}
},
};
</script>

View File

@ -0,0 +1,147 @@
<script>
import iconImage from '@/assets/images/cr2.png'
import { showToast, showSuccessToast, showFailToast } from "vant";
import { ref } from 'vue';
import 'vant/es/toast/style';
import { getRooms, getDetails, getSchedules } from '@/api/live'
export default {
setup() {
const onClickLeft = () => history.back();
const refreshing = ref(false);
const loading = ref(false);
const finished = ref(false);
const rooms = ref([]);
const schedules = ref([]);
const list = ref([]);
const from = ref({
roomid: null,
scheduleid: null,
appid: '',
appuserid: '',
msg: ''
});
const onLoad = () => {
loading.value = true
let url = window.location.href
let info = url.split('?')[1]
let parameter = new URLSearchParams('?'+info)
from.value.appid = parameter.get('appid')
from.value.appuserid = parameter.get('appuserid')
from.value.roomid = parameter.get('roomid')
from.value.scheduleid = parameter.get('scheduleid')
getDetails(from.value).then(res => {
list.value = res.data
loading.value = false
})
}
const onRefresh = () => {
onLoad();
}
onRefresh();
const onClickButton = () => showToast(from.value.content);
return {
from,
iconImage,
loading,
refreshing,
finished,
onRefresh,
onLoad,
onClickButton,
list,
rooms,
schedules,
onClickLeft,
};
},
};
</script>
<link rel="stylesheet" href="@/assets/style/common.less">
<template>
<div class="main">
<van-overlay :show="loading">
<div class="wrapper" @click.stop>
<div class="block">
<van-loading color="#0094ff" vertical>加载中...</van-loading>
</div>
</div>
</van-overlay>
<van-nav-bar
title="直播间互动详情"
left-text="返回"
left-arrow
@click-left="onClickLeft"
/>
<van-pull-refresh :v-mode="refreshing" @refresh="onRefresh">
<div>
<van-search
v-model:model-value="from.msg"
show-action
placeholder="请输入用户发送内容进行检索"
@search="onLoad"
:clearable="false"
>
<template #action>
<div class="searchButton" @click="onLoad">搜索</div>
</template>
</van-search>
</div>
<div class="content">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
:disabled="true"
loading-text="加载中..."
>
<van-skeleton title avatar :row="3" :loading="loading">
<div class="item" v-for="(item, index) in list">
<div class="item-head">
<span class="contentIcon"><img :src="iconImage" alt=""> {{ item.msg }}</span>
<span class="time">{{ item.msgtime }}</span>
</div>
<div class="info-box">
<div class="remarks">
<p>信息类型: {{item.msgtypeStr}}</p>
<p>课程: {{item.schedulesTitle}}</p>
<p>营销类型: {{item.marketingtypeStr}}</p>
<p>直播间: {{item.liveTitle}}</p>
</div>
</div>
</div>
</van-skeleton>
</van-list>
<van-back-top right="8vw" bottom="3vh" />
</div>
</van-pull-refresh>
</div>
</template>
<style scoped>
.searchButton {
width: 4em;
text-align: center;
border: 1px solid var(--van-cell-right-icon-color);
border-radius: 8px;
line-height: 2.3em;
}
.fromSelect {
width: 100%;
border: 1px solid var(--van-cell-right-icon-color);
border-radius: 4px;
height: 2em;
line-height: 2em;
}
.time {
color: var(--van-cell-right-icon-color);
font-weight: 100;
width: 100%;
text-align: right;
}
.contentIcon {
width: 100%;
}
</style>

300
src/views/customer/risk.vue Normal file
View File

@ -0,0 +1,300 @@
<link rel="stylesheet" href="@/assets/style/common.less">
<template>
<div v-if="error">
页面加载错误
</div>
<div v-else class="main">
<div class="content">
<van-overlay :show="loading">
<div class="wrapper" @click.stop>
<div class="block">
<van-loading color="#0094ff" vertical>加载中...</van-loading>
</div>
</div>
</van-overlay>
<van-pull-refresh :v-mode="refreshing" @refresh="init">
<van-skeleton title avatar :row="3" :loading="loading">
<input type="hidden" :value="model.id">
<div class="infoRecord">
<div style="width: 100%;">状态{{model.statusStr}}</div>
<div style="display:flex;width: 75px;">
<van-button icon="plus" type="primary" plain size="mini" @click="addComplaintDetail" >修改</van-button>
</div>
</div>
<van-tabs v-model:active="tabs">
<van-tab title="风险记录" name="1" style="padding: 15px 0;">
<div v-if="model.complaintLogDetails.length === 0">暂无记录</div>
<div v-else class="item" v-for="log in model.complaintLogDetails">
<div class="item-head">
<span class="contentIcon"><img src="@/assets/images/cr.png" alt=""></span>
<div class="time">
<span style="color: #000; font-weight: normal; margin-right: 10px;">{{ log.signTypeStr }}</span>
<span style="color: green; margin-right: 10px;">{{log.sourceStr}}</span>
<span style="color: #999; font-weight: normal;">{{ log.ctime }}</span>
</div>
</div>
<div class="info-box">
<div class="remarks">
{{ getFullContent(log) }}
</div>
<div v-if="log.internalNickname && log.deptname" class="remarks sign-way">{{ log.signWayStr }}: {{ log.deptname +", "+ log.internalNickname }}</div>
<div v-else class="remarks sign-way">{{ log.signWayStr }}</div>
</div>
</div>
</van-tab>
<van-tab title="跟进情况" name="2" style="padding: 15px 0;">
<div v-if="model.complaintFollowDetails.length === 0">暂无记录</div>
<div v-else class="item" v-for="follow in model.complaintFollowDetails">
<div class="item-head">
<span class="contentIcon"><img src="@/assets/images/cr.png" alt=""></span>
<div class="time">
<span style="color: #000; font-weight: normal; margin-right: 10px;">{{ follow.title }}</span>
<span style="color: #999; font-weight: normal;">{{ follow.ctime }}</span>
</div>
</div>
<div class="info-box">
<div class="remarks">
{{ getFullContent(follow)}}
</div>
<div v-if="follow.eid && follow.deptname !== null" class="remarks sign-way">{{follow.deptname}}, {{ follow.ename }} ({{follow.eid}})</div>
<div v-else-if="follow.eid" class="remarks sign-way">{{ follow.ename }} ({{follow.eid}})</div>
<div v-else-if="follow.deptname === null" class="remarks sign-way">{{ follow.ename }}</div>
<div v-else class="remarks sign-way">{{follow.deptname}}, {{follow.ename}}</div>
</div>
</div>
</van-tab>
</van-tabs>
</van-skeleton>
</van-pull-refresh>
<van-back-top right="8vw" bottom="3vh" />
<van-dialog v-model:show="complaintShow" :before-close="beforeClose" title="跟进记录" show-cancel-button>
<div class="complaintShow">
<div class="radio">
<div style="margin: 0 10px; display: flex;" v-for="status in statusEnum">
<van-tag v-if="model.status<=status.key" :id="status.key" type="primary" plain size="large" @click="clickstatus(status.key)">
{{ status.title }}
</van-tag>
</div>
</div>
<textarea style="margin-bottom: 10px;" cols="30" rows="10" maxlength="2000" @keyup="checkMsg()" v-model="form.content" placeholder="备注内容"></textarea>
<p style="font-size: 14px;margin-bottom: 10px;"><span id="text-count">0</span>/2000</p>
</div>
</van-dialog>
</div>
</div>
</template>
<style>
@import url("@/assets/style/common.less");
.sign-way {
margin-top: 20px;
}
.keyword {
color: #ff0000 !important;
text-decoration: underline
}
.infoRecord {
display: flex;
align-items: center;
height: 50px;
background: #fafafa;
border-radius: 2px;
font-size: 14px;
box-sizing: border-box;
padding: 0 .38rem;
}
.amount {
font-weight: 400;
color: #EC2F37;
}
.complaintShow {
display: flex;
flex-direction: column;
align-items: center;
}
.radio {
margin: 15px 0;
display: flex;
}
</style>
<script>
import iconImage from '@/assets/images/cr2.png'
import { detailByAppid, changeStatus } from '@/api/complaint'
import { showSuccessToast, showFailToast } from "vant";
import 'vant/es/toast/style';
export default {
data() {
return {
iconImage,
error: false,
loading: false,
refreshing: false,
tabs: '1',
request: {
id: 0,
resid: '',
deptid: 0,
},
complaintShow: false,
form:{
status: null,
content: '',
},
statusEnum:[
{ key:0, title: '待跟进'},
{ key:1, title: '跟进中'},
{ key:2, title: '已完结'},
],
model: {
id: 0,
statusStr: '',
status: 0,
complaintLogDetails: [
{
fullContent: '',
signTypeStr: '',
sourceStr: '',
deptname: null,
signWayStr: '',
internalNickname: null,
ctime: '',
keywords: ''
}
],
complaintFollowDetails: [
{
eid: null,
ename: '',
keywords: ''
}
]
}
}
},
created() {
this.initWindows()
this.init()
},
methods: {
init(){
try {
this.loading = true;
let geturl = window.location.href
let getqyinfo = geturl.split('?')[1]
let getqys = new URLSearchParams('?'+getqyinfo)
this.request.appid = getqys.get('appid')
this.request.appuserid = getqys.get('appuserid')
this.request.deptid = getqys.get('deptid')
this.request.eid = getqys.get('eid')
this.request.ename = getqys.get('ename')
if(!this.request.appid || !this.request.appuserid || !this.request.deptid){
this.error = true;
}
detailByAppid(this.request).then(res => {
if (res.code === 0) {
this.model = res.data;
} else {
showFailToast(res.message);
}
this.loading = false;
}).catch(err=>{
console.error(err);
this.error = true;
this.loading = false;
})
} catch (err) {
console.error(err);
this.error = true;
this.loading = false;
}
},
clickstatus(id) {
const tags = document.getElementsByClassName('van-tag');
for (let i = 0; i < tags.length; i++) {
tags[i].setAttribute("class", "van-tag van-tag--plain van-tag--large van-tag--primary");
}
document.getElementById(id).setAttribute("class", "van-tag van-tag--large van-tag--primary");
this.form.status = id;
},
getFullContent(log){
let fullContent = log.content;
if(!log.keywords) {
return fullContent;
}
log.keywords.split(';').forEach(x =>
{
fullContent = fullContent?.replace(x, "<a class='keyword'>" + x + "</a>");
});
return fullContent;
},
addComplaintDetail() {
this.form.eid = this.request.eid;
this.form.ename = this.request.ename;
this.form.status = null;
this.form.content = '';
this.complaintShow = true;
},
checkMsg() {
if (this.form.content.length > 2000) {
showFailToast('备注内容请在2000字以内。');
}
document.getElementById('text-count').innerText = this.form.content.length.toString();
},
beforeClose (action) {
return new Promise((resolve) => {
this.form.id = this.model.id;
if (action === 'confirm') {
if (this.form.status === null) {
showFailToast('请选择更变的状态。');
resolve(false);
}
if (!this.form.content || this.form.content === '') {
showFailToast('请输入备注。');
resolve(false);
}
changeStatus(this.form).then(res => {
if (res.code === 0) {
showSuccessToast('提交成功!');
this.init();
this.tabs = '2';
resolve(true);
} else {
showFailToast(res.message);
resolve(false);
}
})
} else {
//
resolve(true);
}
});
},
confirm() {
alert('test');
},
setViewHeight() {
let windowVH = window.innerHeight / 100
document.documentElement.style.setProperty('--vh', windowVH + 'px')
},
initWindows() {
let i = 'orientationchange' in window ? 'orientationchange' : 'resize'
window.addEventListener('DOMContentLoaded', this.setViewHeight())
document.addEventListener(i, this.setViewHeight())
let fontSize = 100
let docEl = document.documentElement
let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
let recalc = function () {
let clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if (clientWidth > 750) clientWidth = 750;
docEl.style.fontSize = (50 * (clientWidth / 375)).toFixed(1) + 'px'; fontSize = 50 * (clientWidth / 375);
};
if (!document.addEventListener) return;
window.addEventListener(resizeEvt, recalc, false);
document.addEventListener('DOMContentLoaded', recalc, false);
}
}
}
</script>

93
src/views/wx/openchat.vue Normal file
View File

@ -0,0 +1,93 @@
<script>
import { getAgentConfig } from '@/api/wxwork';
export default {
data() {
return {
agentConfig: {
errcode: 0,
config: {}
},
request: {
appid: 'ww89347c2378b6e050', //
userid: 'cairongzhi',
agentid: 1000018,
deptid: 23,
eid: 4025,
url: ''
}
}
},
created() {
this.openExternalUser('wm9jNKCAAA86ZW5s2uklVtYxih-6lIEA');
},
methods:{
openExternalUser(appuserid) {
console.log(appuserid, 'appuserid')
this.request.url = window.location.href;
//this.request.url = 'https://sys.hc.dn8188.com';
getAgentConfig(this.request).then(res =>{
if(res.code!==0){
alert(res.message);
return;
}
this.agentConfig = JSON.parse(res.data);
const agentConfig = this.agentConfig;
if (agentConfig != null && agentConfig.result && agentConfig.errcode === 0) {
const configInfo = agentConfig.config;
const agentConfigInfo = agentConfig.agentconfig;
const appid = this.request.appid;
const agentid = this.request.agentid;
try {
wx.config({
beta: true,
debug: true,
appId: appid,
timestamp: configInfo.timestamp,
nonceStr: configInfo.noncestr,
signature: configInfo.signature,
jsApiList: ["openEnterpriseChat"],
})
} catch (e) {
console.log(e)
}
wx.error(function (res) {
console.log(res, 'error')
// configerrorconfigdebugresSPA
});
wx.ready(function () {
wx.agentConfig({
corpid: appid,
agentid: agentid,
timestamp: agentConfigInfo.timestamp,
nonceStr: agentConfigInfo.noncestr,
signature: agentConfigInfo.signature,
jsApiList: ["openEnterpriseChat"],
success: function (result) {
wx.invoke("openEnterpriseChat", {externalUserIds: appuserid}, function (res) {
console.log(res)
})
},
fail: function (res) {
console.log(res, 'error')
if (res.errMsg.indexOf('function not exist') > -1) {
alert('版本过低请升级')
}
}
})
})
}
});
}
}
}
</script>
<template>
</template>
<style scoped>
</style>

52
vite.config.js Normal file
View File

@ -0,0 +1,52 @@
import vue from "@vitejs/plugin-vue";
import Components from "unplugin-vue-components/vite";
import { VantResolver } from "unplugin-vue-components/resolvers";
import { defineConfig } from 'vite'
import path from 'path';
export default defineConfig({
plugins: [
vue(),
Components({
resolvers: [VantResolver()],
}),
],
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
"comps": path.resolve(__dirname, "src/components"),
},
},
server: {
proxy: {
// 接口地址代理
'/api/Wework': {
target: 'http://localhost:5015', // 接口的域名
secure: false, // 如果是https接口需要配置这个参数
changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
rewrite: path => path.replace(/^\/api/, '/api')
},
// 接口地址代理
'/api/Complaint': {
target: 'http://192.168.11.81:8095', // 接口的域名
secure: false, // 如果是https接口需要配置这个参数
changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
rewrite: path => path.replace(/^\/api/, '/api')
},
// 接口地址代理
'/api/live': {
target: 'http://120.77.165.155:8100', // 接口的域名
secure: false, // 如果是https接口需要配置这个参数
changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
rewrite: path => path.replace(/^\/api/, '/api')
},
// 接口地址代理
'/api': {
target: 'http://localhost:5244', // 接口的域名
secure: false, // 如果是https接口需要配置这个参数
changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
rewrite: path => path.replace(/^\/api/, '/api')
},
}
},
})

870
yarn.lock Normal file
View File

@ -0,0 +1,870 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@antfu/utils@^0.7.2":
version "0.7.5"
resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.5.tgz#c36f37add92a7de57b9c29ae0c1f399706bff345"
integrity sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==
"@babel/parser@^7.20.15", "@babel/parser@^7.21.3":
version "7.22.7"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae"
integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==
"@esbuild/android-arm64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz#9e00eb6865ed5f2dbe71a1e96f2c52254cd92903"
integrity sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==
"@esbuild/android-arm@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.17.tgz#1aa013b65524f4e9f794946b415b32ae963a4618"
integrity sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==
"@esbuild/android-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.17.tgz#c2bd0469b04ded352de011fae34a7a1d4dcecb79"
integrity sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==
"@esbuild/darwin-arm64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz#0c21a59cb5bd7a2cec66c7a42431dca42aefeddd"
integrity sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==
"@esbuild/darwin-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz#92f8763ff6f97dff1c28a584da7b51b585e87a7b"
integrity sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==
"@esbuild/freebsd-arm64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz#934f74bdf4022e143ba2f21d421b50fd0fead8f8"
integrity sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==
"@esbuild/freebsd-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz#16b6e90ba26ecc865eab71c56696258ec7f5d8bf"
integrity sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==
"@esbuild/linux-arm64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz#179a58e8d4c72116eb068563629349f8f4b48072"
integrity sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==
"@esbuild/linux-arm@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz#9d78cf87a310ae9ed985c3915d5126578665c7b5"
integrity sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==
"@esbuild/linux-ia32@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz#6fed202602d37361bca376c9d113266a722a908c"
integrity sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==
"@esbuild/linux-loong64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz#cdc60304830be1e74560c704bfd72cab8a02fa06"
integrity sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==
"@esbuild/linux-mips64el@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz#c367b2855bb0902f5576291a2049812af2088086"
integrity sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==
"@esbuild/linux-ppc64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz#7fdc0083d42d64a4651711ee0a7964f489242f45"
integrity sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==
"@esbuild/linux-riscv64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz#5198a417f3f5b86b10c95647b8bc032e5b6b2b1c"
integrity sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==
"@esbuild/linux-s390x@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz#7459c2fecdee2d582f0697fb76a4041f4ad1dd1e"
integrity sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==
"@esbuild/linux-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz#948cdbf46d81c81ebd7225a7633009bc56a4488c"
integrity sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==
"@esbuild/netbsd-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz#6bb89668c0e093c5a575ded08e1d308bd7fd63e7"
integrity sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==
"@esbuild/openbsd-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz#abac2ae75fef820ef6c2c48da4666d092584c79d"
integrity sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==
"@esbuild/sunos-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz#74a45fe1db8ea96898f1a9bb401dcf1dadfc8371"
integrity sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==
"@esbuild/win32-arm64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz#fd95ffd217995589058a4ed8ac17ee72a3d7f615"
integrity sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==
"@esbuild/win32-ia32@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz#9b7ef5d0df97593a80f946b482e34fcba3fa4aaf"
integrity sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==
"@esbuild/win32-x64@0.18.17":
version "0.18.17"
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz#bcb2e042631b3c15792058e189ed879a22b2968b"
integrity sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==
"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.15":
version "1.4.15"
resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
dependencies:
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
version "2.0.5"
resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
"@nodelib/fs.walk@^1.2.3":
version "1.2.8"
resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
dependencies:
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@rollup/pluginutils@^5.0.2":
version "5.0.2"
resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33"
integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==
dependencies:
"@types/estree" "^1.0.0"
estree-walker "^2.0.2"
picomatch "^2.3.1"
"@types/estree@^1.0.0":
version "1.0.1"
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194"
integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
"@vant/popperjs@^1.3.0":
version "1.3.0"
resolved "https://registry.npmmirror.com/@vant/popperjs/-/popperjs-1.3.0.tgz#e0eff017124b5b2352ef3b36a6df06277f4400f2"
integrity sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==
"@vant/use@^1.5.1":
version "1.5.2"
resolved "https://registry.npmmirror.com/@vant/use/-/use-1.5.2.tgz#d1877f293e6d1a0a8428d3d3f4b587a3f745324d"
integrity sha512-CBK61iT568dCHUwFFsErGbW6/5tmrPnZJKGtcSy7Tjcrmws8Ku+YZo7IUFD9Xkj9MfSJ4pfhQ7pU2KouP5Cojg==
"@vitejs/plugin-vue@^3.2.0":
version "3.2.0"
resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz#a1484089dd85d6528f435743f84cdd0d215bbb54"
integrity sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==
"@vue/compiler-core@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz#7fbf591c1c19e1acd28ffd284526e98b4f581128"
integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==
dependencies:
"@babel/parser" "^7.21.3"
"@vue/shared" "3.3.4"
estree-walker "^2.0.2"
source-map-js "^1.0.2"
"@vue/compiler-dom@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz#f56e09b5f4d7dc350f981784de9713d823341151"
integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==
dependencies:
"@vue/compiler-core" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/compiler-sfc@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz#b19d942c71938893535b46226d602720593001df"
integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==
dependencies:
"@babel/parser" "^7.20.15"
"@vue/compiler-core" "3.3.4"
"@vue/compiler-dom" "3.3.4"
"@vue/compiler-ssr" "3.3.4"
"@vue/reactivity-transform" "3.3.4"
"@vue/shared" "3.3.4"
estree-walker "^2.0.2"
magic-string "^0.30.0"
postcss "^8.1.10"
source-map-js "^1.0.2"
"@vue/compiler-ssr@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz#9d1379abffa4f2b0cd844174ceec4a9721138777"
integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==
dependencies:
"@vue/compiler-dom" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/devtools-api@^6.0.0", "@vue/devtools-api@^6.0.0-beta.11":
version "6.5.0"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07"
integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
"@vue/reactivity-transform@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz#52908476e34d6a65c6c21cd2722d41ed8ae51929"
integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==
dependencies:
"@babel/parser" "^7.20.15"
"@vue/compiler-core" "3.3.4"
"@vue/shared" "3.3.4"
estree-walker "^2.0.2"
magic-string "^0.30.0"
"@vue/reactivity@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.3.4.tgz#a27a29c6cd17faba5a0e99fbb86ee951653e2253"
integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==
dependencies:
"@vue/shared" "3.3.4"
"@vue/runtime-core@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.3.4.tgz#4bb33872bbb583721b340f3088888394195967d1"
integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==
dependencies:
"@vue/reactivity" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/runtime-dom@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz#992f2579d0ed6ce961f47bbe9bfe4b6791251566"
integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==
dependencies:
"@vue/runtime-core" "3.3.4"
"@vue/shared" "3.3.4"
csstype "^3.1.1"
"@vue/server-renderer@3.3.4":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.3.4.tgz#ea46594b795d1536f29bc592dd0f6655f7ea4c4c"
integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==
dependencies:
"@vue/compiler-ssr" "3.3.4"
"@vue/shared" "3.3.4"
"@vue/shared@3.3.4", "@vue/shared@^3.0.0":
version "3.3.4"
resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz#06e83c5027f464eef861c329be81454bc8b70780"
integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
acorn@^8.9.0:
version "8.10.0"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
dependencies:
normalize-path "^3.0.0"
picomatch "^2.0.4"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
axios@^1.4.0:
version "1.4.0"
resolved "https://registry.npmmirror.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
dependencies:
balanced-match "^1.0.0"
braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
dependencies:
delayed-stream "~1.0.0"
copy-anything@^2.0.1:
version "2.0.6"
resolved "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480"
integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==
dependencies:
is-what "^3.14.1"
csstype@^3.1.1:
version "3.1.2"
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
debug@^3.2.6:
version "3.2.7"
resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
debug@^4.3.4:
version "4.3.4"
resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
errno@^0.1.1:
version "0.1.8"
resolved "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
dependencies:
prr "~1.0.1"
esbuild@^0.18.10:
version "0.18.17"
resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.17.tgz#2aaf6bc6759b0c605777fdc435fea3969e091cad"
integrity sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==
optionalDependencies:
"@esbuild/android-arm" "0.18.17"
"@esbuild/android-arm64" "0.18.17"
"@esbuild/android-x64" "0.18.17"
"@esbuild/darwin-arm64" "0.18.17"
"@esbuild/darwin-x64" "0.18.17"
"@esbuild/freebsd-arm64" "0.18.17"
"@esbuild/freebsd-x64" "0.18.17"
"@esbuild/linux-arm" "0.18.17"
"@esbuild/linux-arm64" "0.18.17"
"@esbuild/linux-ia32" "0.18.17"
"@esbuild/linux-loong64" "0.18.17"
"@esbuild/linux-mips64el" "0.18.17"
"@esbuild/linux-ppc64" "0.18.17"
"@esbuild/linux-riscv64" "0.18.17"
"@esbuild/linux-s390x" "0.18.17"
"@esbuild/linux-x64" "0.18.17"
"@esbuild/netbsd-x64" "0.18.17"
"@esbuild/openbsd-x64" "0.18.17"
"@esbuild/sunos-x64" "0.18.17"
"@esbuild/win32-arm64" "0.18.17"
"@esbuild/win32-ia32" "0.18.17"
"@esbuild/win32-x64" "0.18.17"
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
fast-glob@^3.2.12:
version "3.3.1"
resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
glob-parent "^5.1.2"
merge2 "^1.3.0"
micromatch "^4.0.4"
fastq@^1.6.0:
version "1.15.0"
resolved "https://registry.npmmirror.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
dependencies:
reusify "^1.0.4"
fill-range@^7.0.1:
version "7.0.1"
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
dependencies:
to-regex-range "^5.0.1"
follow-redirects@^1.15.0:
version "1.15.2"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
form-data@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
mime-types "^2.1.12"
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
glob-parent@^5.1.2, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
dependencies:
is-glob "^4.0.1"
graceful-fs@^4.1.2:
version "4.2.11"
resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
has@^1.0.3:
version "1.0.3"
resolved "https://registry.npmmirror.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
iconv-lite@^0.6.3:
version "0.6.3"
resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
image-size@~0.5.0:
version "0.5.5"
resolved "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
dependencies:
binary-extensions "^2.0.0"
is-core-module@^2.11.0:
version "2.12.1"
resolved "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
dependencies:
has "^1.0.3"
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
is-what@^3.14.1:
version "3.14.1"
resolved "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1"
integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==
jweixin-1.6.0@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/jweixin-1.6.0/-/jweixin-1.6.0-1.0.0.tgz#d65ec53e738a95b5c54cd5f42a3f34f0e82e29d5"
integrity sha512-QH69Y/j4h8p9dy6wqIplXmhjLy67AGJswvrjwWUD84HUdB22QyHaX1PmV7oJFbsYL+Vn9Qe1uIx/2NFKkD51Bg==
jwxwork@^0.1.12:
version "0.1.12"
resolved "https://registry.npmmirror.com/jwxwork/-/jwxwork-0.1.12.tgz#a845ee4c563822eeb9d192b2892879d1c8051f67"
integrity sha512-/+MBOWCHqbTgSMg43TugYy7d6aSHkIC+L4uvfScZFA1i+rMTRNQobyf+vSSlmCArIlKk4i5aoW0ToeaJCmMJNQ==
less@^4.2.0:
version "4.2.0"
resolved "https://registry.npmmirror.com/less/-/less-4.2.0.tgz#cbefbfaa14a4cd388e2099b2b51f956e1465c450"
integrity sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==
dependencies:
copy-anything "^2.0.1"
parse-node-version "^1.0.1"
tslib "^2.3.0"
optionalDependencies:
errno "^0.1.1"
graceful-fs "^4.1.2"
image-size "~0.5.0"
make-dir "^2.1.0"
mime "^1.4.1"
needle "^3.1.0"
source-map "~0.6.0"
local-pkg@^0.4.2:
version "0.4.3"
resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963"
integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
magic-string@^0.27.0:
version "0.27.0"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3"
integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.13"
magic-string@^0.30.0:
version "0.30.2"
resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.2.tgz#dcf04aad3d0d1314bc743d076c50feb29b3c7aca"
integrity sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==
dependencies:
"@jridgewell/sourcemap-codec" "^1.4.15"
make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
dependencies:
pify "^4.0.1"
semver "^5.6.0"
merge2@^1.3.0:
version "1.4.1"
resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
dependencies:
braces "^3.0.2"
picomatch "^2.3.1"
mime-db@1.52.0:
version "1.52.0"
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.12:
version "2.1.35"
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
dependencies:
mime-db "1.52.0"
mime@^1.4.1:
version "1.6.0"
resolved "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
minimatch@^5.1.1:
version "5.1.6"
resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
dependencies:
brace-expansion "^2.0.1"
ms@2.1.2:
version "2.1.2"
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.3.6:
version "3.3.6"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
needle@^3.1.0:
version "3.2.0"
resolved "https://registry.npmmirror.com/needle/-/needle-3.2.0.tgz#07d240ebcabfd65c76c03afae7f6defe6469df44"
integrity sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==
dependencies:
debug "^3.2.6"
iconv-lite "^0.6.3"
sax "^1.2.4"
normalize-path@^3.0.0, normalize-path@~3.0.0:
version "3.0.0"
resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
parse-node-version@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
version "2.3.1"
resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pify@^4.0.1:
version "4.0.1"
resolved "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
postcss@^8.1.10, postcss@^8.4.26:
version "8.4.27"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057"
integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==
dependencies:
nanoid "^3.3.6"
picocolors "^1.0.0"
source-map-js "^1.0.2"
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
readdirp@~3.6.0:
version "3.6.0"
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
dependencies:
picomatch "^2.2.1"
resolve@^1.22.1:
version "1.22.2"
resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
dependencies:
is-core-module "^2.11.0"
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
reusify@^1.0.4:
version "1.0.4"
resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rollup@^3.25.2:
version "3.27.0"
resolved "https://registry.npmmirror.com/rollup/-/rollup-3.27.0.tgz#15bd07e2e1cbfa9255bf6a3f04a432621c2f3550"
integrity sha512-aOltLCrYZ0FhJDm7fCqwTjIUEVjWjcydKBV/Zeid6Mn8BWgDCUBBWT5beM5ieForYNo/1ZHuGJdka26kvQ3Gzg==
optionalDependencies:
fsevents "~2.3.2"
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
dependencies:
queue-microtask "^1.2.2"
"safer-buffer@>= 2.1.2 < 3.0.0":
version "2.1.2"
resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
semver@^5.6.0:
version "5.7.2"
resolved "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
source-map@~0.6.0:
version "0.6.1"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
store@^2.0.12:
version "2.0.12"
resolved "https://registry.npmmirror.com/store/-/store-2.0.12.tgz#8c534e2a0b831f72b75fc5f1119857c44ef5d593"
integrity sha512-eO9xlzDpXLiMr9W1nQ3Nfp9EzZieIQc10zPPMP5jsVV7bLOziSFFBP0XoDXACEIFtdI+rIz0NwWVA/QVJ8zJtw==
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
dependencies:
is-number "^7.0.0"
tslib@^2.3.0:
version "2.6.1"
resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
unplugin-vue-components@^0.22.11:
version "0.22.12"
resolved "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.22.12.tgz#39013f77be72d32df9d6ca1599e592a484015612"
integrity sha512-FxyzsuBvMCYPIk+8cgscGBQ345tvwVu+qY5IhE++eorkyvA4Z1TiD/HCiim+Kbqozl10i4K+z+NCa2WO2jexRA==
dependencies:
"@antfu/utils" "^0.7.2"
"@rollup/pluginutils" "^5.0.2"
chokidar "^3.5.3"
debug "^4.3.4"
fast-glob "^3.2.12"
local-pkg "^0.4.2"
magic-string "^0.27.0"
minimatch "^5.1.1"
resolve "^1.22.1"
unplugin "^1.0.1"
unplugin@^1.0.1:
version "1.4.0"
resolved "https://registry.npmmirror.com/unplugin/-/unplugin-1.4.0.tgz#b771373aa1bc664f50a044ee8009bd3a7aa04d85"
integrity sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==
dependencies:
acorn "^8.9.0"
chokidar "^3.5.3"
webpack-sources "^3.2.3"
webpack-virtual-modules "^0.5.0"
vant@^4.0.0:
version "4.6.3"
resolved "https://registry.npmmirror.com/vant/-/vant-4.6.3.tgz#e36a2dc2fa94253b8218094d88e9b0cd62b3437d"
integrity sha512-hkiBzM1dhEj9EWSjRnyB7gd6SiVa3/+qthNZtlJdj42C+pXIN+oq0UhKz5PRHWi8fHyPfycnqRzyvEJxouT+zw==
dependencies:
"@vant/popperjs" "^1.3.0"
"@vant/use" "^1.5.1"
"@vue/shared" "^3.0.0"
vite@^4.4.7:
version "4.4.7"
resolved "https://registry.npmmirror.com/vite/-/vite-4.4.7.tgz#71b8a37abaf8d50561aca084dbb77fa342824154"
integrity sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==
dependencies:
esbuild "^0.18.10"
postcss "^8.4.26"
rollup "^3.25.2"
optionalDependencies:
fsevents "~2.3.2"
vue-router@^4.0.13:
version "4.0.13"
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.0.13.tgz#47f06e2f8ff6120bfff3c27ade1356cc9de7d870"
integrity sha512-LmXrC+BkDRLak+d5xTMgUYraT3Nj0H/vCbP+7usGvIl9Viqd1UP6AsP0i69pSbn9O0dXK/xCdp4yPw21HqV9Jw==
dependencies:
"@vue/devtools-api" "^6.0.0"
vue@^3.2.45:
version "3.3.4"
resolved "https://registry.npmmirror.com/vue/-/vue-3.3.4.tgz#8ed945d3873667df1d0fcf3b2463ada028f88bd6"
integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
dependencies:
"@vue/compiler-dom" "3.3.4"
"@vue/compiler-sfc" "3.3.4"
"@vue/runtime-dom" "3.3.4"
"@vue/server-renderer" "3.3.4"
"@vue/shared" "3.3.4"
vuex@^4.1.0:
version "4.1.0"
resolved "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz#aa1b3ea5c7385812b074c86faeeec2217872e36c"
integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==
dependencies:
"@vue/devtools-api" "^6.0.0-beta.11"
webpack-sources@^3.2.3:
version "3.2.3"
resolved "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack-virtual-modules@^0.5.0:
version "0.5.0"
resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c"
integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
weixin-js-sdk@^1.6.0:
version "1.6.0"
resolved "https://registry.npmmirror.com/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz#ff50484d8118ce1208f11248cf4a1c0831577514"
integrity sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ==