README更新;删除frontend项目
This commit is contained in:
parent
de9ca02689
commit
8952bfc271
60
README.md
60
README.md
@ -73,30 +73,42 @@ TODO
|
||||
|
||||
项目运行需要如下环境。[检查环境是否安装成功及国内镜像源配置](./docs/EnvCheck.md)
|
||||
|
||||
| 类型 | 项目 | 名称及版本 | 部署环境 | 说明 |
|
||||
| ---------- | ----------- | ------------------------------------------------------------ | --------- | ------------------------------------------------------------ |
|
||||
| 系统 | | Windows 10/11 或<br />Ubuntu Desktop 22.04 LTS | 开发 | |
|
||||
| 系统 | | Ubuntu Server 22.04 LTS | 生产 | |
|
||||
| 环境 | 代码管理 | [Git](https://git-scm.com/download) | 开发 | 代码管理 |
|
||||
| 环境 | 前端 门禁端 | [**Node.js 14.18.0**](https://nodejs.org/zh-cn/) | 开发 生产 | 一个开源、跨平台的 JavaScript 运行时环境 |
|
||||
| 依赖管理 | 前端 门禁端 | **npm 9.5.1** | 开发 | 安装 node 时会自带 npm |
|
||||
| 环境 | 前端 | [Vue 3](https://cn.vuejs.org/guide/quick-start.html) | 开发 | 渐进式 JavaScript 框架 |
|
||||
| UI 组件库 | 前端 | [Element Plus](https://element-plus.gitee.io/zh-CN/) | 开发 | 一个Vue 3 UI 框架 |
|
||||
| 环境 | 门禁端 | [**cnpm**](https://npmmirror.com/) | 开发 | |
|
||||
| 环境 | 门禁端 | [**Electron**](https://www.electronjs.org/) | 开发 | 跨平台桌面 GUI 应用开发 |
|
||||
| 环境 | 后端 | [**OpenJDK 11**](https://jdk.java.net/java-se-ri/11) | 开发 生产 | **需要配置 JDK 环境变量**;Java 11 |
|
||||
| 依赖管理 | 后端 | [**Maven 3.6.3**](https://maven.apache.org/download.cgi) | 开发 生产 | **需要配置 Maven 环境变量、国内镜像源** |
|
||||
| 微服务框架 | 后端 | SpringCloud | 开发 生产 | 微服务 |
|
||||
| 环境 | 后端 | [**nacos server 2.2.0**](https://github.com/alibaba/nacos/releases/tag/2.2.0) | 开发 生产 | 微服务注册中心(服务注册与发现) |
|
||||
| 环境 | 服务端 | Nginx | 开发 生产 | 可选 |
|
||||
| 环境 | 数据库 | [**MySQL 8.0.x**](https://downloads.mysql.com/archives/community/) | 开发 生产 | 数据存储 |
|
||||
| 管理工具 | 数据库 | [Navicat](http://www.navicat.com.cn/products/navicat-premium) | 开发 | 可选;需要激活,可使用其他数据库管理工具代替 |
|
||||
| 开发工具 | 小程序端 | [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) | 开发 | 微信小程序打包工具(小程序端为原生开发) |
|
||||
| 开发工具 | 前端 后端 | [VSCode](https://code.visualstudio.com/#alt-downloads) | 开发 | 代码编辑器。建议安装扩展:<br />[EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig);<br />[Vue Language Features (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) |
|
||||
| 开发工具 | 后端 | [Intellij IDEA Ultimate](https://www.jetbrains.com/zh-cn/idea/download/) | 开发 | 集成开发环境。需要激活 |
|
||||
| 小程序测试 | 手机应用 | [微信](https://weixin.qq.com/) | 开发 | 用于测试微信小程序 |
|
||||
| 接口测试 | 接口测试 | [Postman](https://www.postman.com/downloads/) | 开发 | 接口测试工具 |
|
||||
| | 后端 | Redis | | 缓存(待定) |
|
||||
| 类型 | 项目 | 名称及版本 | 部署环境 | 说明 |
|
||||
| -------------- | ----------- | ------------------------------------------------------------ | --------- | ------------------------------------------------------------ |
|
||||
| 系统 | | Windows 10/11 或<br />Ubuntu Desktop 22.04 LTS | 开发 | |
|
||||
| 系统 | | Ubuntu Server 22.04 LTS | 生产 | |
|
||||
| 环境 | 代码管理 | [Git](https://git-scm.com/download) | 开发 | 代码管理 |
|
||||
| 环境 | 前端 门禁端 | [**Node.js 14.18.0**](https://nodejs.org/zh-cn/) | 开发 生产 | 开源、跨平台的 JavaScript 运行时环境 |
|
||||
| 依赖管理 | 前端 门禁端 | **npm 9.5.1** | 开发 | 安装 node 时会自带 npm |
|
||||
| 环境 | 前端 | [Vue 3](https://cn.vuejs.org/guide/quick-start.html) | 开发 | 渐进式 JavaScript 框架 |
|
||||
| UI 组件库 | 前端 | [Element Plus](https://element-plus.gitee.io/zh-CN/) | 开发 | 一个 Vue 3 UI 框架 |
|
||||
| 环境 | 门禁端 | [**cnpm**](https://npmmirror.com/) | 开发 | |
|
||||
| 环境 | 门禁端 | [**Electron**](https://www.electronjs.org/) | 开发 | 跨平台桌面 GUI 应用开发 |
|
||||
| 开发语言 | 后端 | Java 11 | 开发 生产 | |
|
||||
| 环境 | 后端 | [**OpenJDK 11**](https://jdk.java.net/java-se-ri/11) | 开发 生产 | **需要配置 JDK 环境变量**; |
|
||||
| 依赖管理 | 后端 | [**Maven 3.6.3**](https://maven.apache.org/download.cgi) | 开发 生产 | **需要配置 Maven 环境变量、国内镜像源** |
|
||||
| 微服务框架 | 后端 | SpringCloud | 开发 生产 | 微服务 |
|
||||
| 持久层框架 | 后端 | MyBatis | 开发 生产 | 持久层框架 |
|
||||
| 数据库连接池 | 后端 | Druid | 开发 生产 | 数据库连接池 |
|
||||
| RPC远程调用 | 后端 | Spring Cloud OpenFeign | 开发 生产 | 声明式、模板化的HTTP客户端 |
|
||||
| 网关 | 后端 | Spring Cloud Gateway | 开发 生产 | Spring Cloud API 网关 |
|
||||
| 负载均衡 | 后端 | Spring Cloud Load Balancer | 开发 生产 | 负载均衡 |
|
||||
| 请求 | 后端 | OkHttp | 开发 生产 | HTTP 网络请求(用于调用微信Api) |
|
||||
| JSON 解析 | 后端 | Fastjson | 开发 生产 | JSON 解析器和生成器 |
|
||||
| 环境 | 后端 | [**nacos server 2.2.0**](https://github.com/alibaba/nacos/releases/tag/2.2.0) | 开发 生产 | 微服务注册中心(服务注册与发现) |
|
||||
| 环境 | 服务端 | Nginx | 开发 生产 | 可选;Server端反向代理,SSL证书配置 |
|
||||
| 内网穿透 | —— | rathole | 开发 | 可选,本地调试使用;内网穿透 |
|
||||
| 环境 | 数据库 | [**MySQL 8.0.x**](https://downloads.mysql.com/archives/community/) | 开发 生产 | 数据存储 |
|
||||
| 数据库管理工具 | 数据库 | [Navicat](http://www.navicat.com.cn/products/navicat-premium) | 开发 | 可选;需要激活,可使用其他数据库管理工具代替 |
|
||||
| 开发工具 | 小程序端 | [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) | 开发 | 微信小程序打包工具(小程序端为原生开发) |
|
||||
| 开发工具 | 前端 后端 | [VSCode](https://code.visualstudio.com/#alt-downloads) | 开发 | 代码编辑器。建议安装扩展:<br />[EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig);<br />[Vue Language Features (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) |
|
||||
| 开发工具 | 后端 | [Intellij IDEA Ultimate](https://www.jetbrains.com/zh-cn/idea/download/) | 开发 | 集成开发环境。需要激活 |
|
||||
| 小程序测试 | 手机应用 | [微信](https://weixin.qq.com/) | 开发 | 用于测试微信小程序 |
|
||||
| 接口测试 | 接口测试 | [Postman](https://www.postman.com/downloads/) | 开发 | 可选;接口测试工具 |
|
||||
| 👇不再使用 | | | | |
|
||||
| 缓存 | 后端 | <del>Redis</del> | | 缓存(待定) |
|
||||
| 小程序跨端 | 小程序端 | <del>Taro 3.x</del> | | 小程序跨端解决方案(小程序已经重构,不再使用) |
|
||||
| | 小程序端 | <del>小程序开发工具</del> | | 支付宝小程序打包工具(小程序已经重构,不再使用) |
|
||||
|
||||
|
||||
|
||||
|
@ -1,4 +0,0 @@
|
||||
> 1%
|
||||
last 2 versions
|
||||
not dead
|
||||
not ie 11
|
@ -1,5 +0,0 @@
|
||||
[*.{js,jsx,ts,tsx,vue}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
@ -1,17 +0,0 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true
|
||||
},
|
||||
extends: [
|
||||
'plugin:vue/vue3-essential',
|
||||
'@vue/standard'
|
||||
],
|
||||
parserOptions: {
|
||||
parser: '@babel/eslint-parser'
|
||||
},
|
||||
rules: {
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
|
||||
}
|
||||
}
|
23
frontend/.gitignore
vendored
23
frontend/.gitignore
vendored
@ -1,23 +0,0 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
@ -1,24 +0,0 @@
|
||||
# frontend
|
||||
|
||||
## Project setup
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Lints and fixes files
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es5",
|
||||
"module": "esnext",
|
||||
"baseUrl": "./",
|
||||
"moduleResolution": "node",
|
||||
"paths": {
|
||||
"@/*": [
|
||||
"src/*"
|
||||
]
|
||||
},
|
||||
"lib": [
|
||||
"esnext",
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"scripthost"
|
||||
]
|
||||
}
|
||||
}
|
21416
frontend/package-lock.json
generated
21416
frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,38 +0,0 @@
|
||||
{
|
||||
"name": "frontend",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.1.3",
|
||||
"core-js": "^3.8.3",
|
||||
"css-loader": "^6.7.1",
|
||||
"element-plus": "^2.2.18",
|
||||
"normalize.css": "^8.0.1",
|
||||
"style-loader": "^3.3.1",
|
||||
"vue": "^3.2.13",
|
||||
"vue-router": "^4.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.16",
|
||||
"@babel/eslint-parser": "^7.12.16",
|
||||
"@vue/cli-plugin-babel": "~5.0.0",
|
||||
"@vue/cli-plugin-eslint": "~5.0.0",
|
||||
"@vue/cli-plugin-router": "~5.0.0",
|
||||
"@vue/cli-service": "~5.0.0",
|
||||
"@vue/eslint-config-standard": "^6.1.0",
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-plugin-import": "^2.25.3",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^5.1.0",
|
||||
"eslint-plugin-vue": "^8.0.3",
|
||||
"unplugin-auto-import": "^0.11.2",
|
||||
"unplugin-vue-components": "^0.22.8",
|
||||
"vue-cli-plugin-element-plus": "^0.0.13"
|
||||
}
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 4.2 KiB |
@ -1,17 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
@ -1,60 +0,0 @@
|
||||
<template>
|
||||
<el-container class="container">
|
||||
<el-header style="box-shadow: var(--el-box-shadow);">
|
||||
<TopBar />
|
||||
</el-header>
|
||||
<el-container>
|
||||
<el-aside width="200px">
|
||||
<SideBar class="sidebar" />
|
||||
</el-aside>
|
||||
<el-main>
|
||||
<el-radio-group v-model="isCollapse" style="margin-bottom: 20px">
|
||||
<el-radio-button @click="toggleSideBar">expand</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
|
||||
<!--
|
||||
<img src="./assets/logo.png">
|
||||
<nav>
|
||||
<router-link to="/">Home</router-link> |
|
||||
<router-link to="/about">About</router-link>
|
||||
</nav>
|
||||
<router-view />
|
||||
-->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// @ is an alias to /src
|
||||
import SideBar from '@/components/SideBar.vue'
|
||||
import TopBar from './components/TopBar.vue'
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {
|
||||
SideBar,
|
||||
TopBar
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
@import 'normalize.css/normalize.css';
|
||||
|
||||
html,
|
||||
body,
|
||||
#app,
|
||||
.container {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#app {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.el-header {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
</style>
|
@ -1,21 +0,0 @@
|
||||
<template>
|
||||
<div class="hello">
|
||||
<h1>{{ msg }}</h1>
|
||||
<p>
|
||||
some message ...
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'HelloWorld',
|
||||
props: {
|
||||
msg: String
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
<style scoped>
|
||||
</style>
|
@ -1,63 +0,0 @@
|
||||
<template>
|
||||
<el-menu active-text-color="#ffd04b" background-color="#151513" class="el-menu-vertical" default-active="2"
|
||||
text-color="#fff" :collapse="isCollapse" @open="handleOpen" @close="handleClose">
|
||||
<el-sub-menu index="1">
|
||||
<template #title>
|
||||
<el-icon>
|
||||
<Location />
|
||||
</el-icon>
|
||||
<span>Navigator One</span>
|
||||
</template>
|
||||
<el-menu-item-group title="Group One">
|
||||
<el-menu-item index="1-1">item one</el-menu-item>
|
||||
<el-menu-item index="1-2">item two</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-menu-item-group title="Group Two">
|
||||
<el-menu-item index="1-3">item three</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-sub-menu index="1-4">
|
||||
<template #title>item four</template>
|
||||
<el-menu-item index="1-4-1">item one</el-menu-item>
|
||||
</el-sub-menu>
|
||||
</el-sub-menu>
|
||||
<el-menu-item index="2">
|
||||
<el-icon>
|
||||
<IconMenu />
|
||||
</el-icon>
|
||||
<span>Navigator Two</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="3" disabled>
|
||||
<el-icon>
|
||||
<Document />
|
||||
</el-icon>
|
||||
<span>Navigator Three</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="4">
|
||||
<el-icon>
|
||||
<setting />
|
||||
</el-icon>
|
||||
<span>Navigator Four</span>
|
||||
</el-menu-item>
|
||||
</el-menu>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Location, Menu as IconMenu, Document, Setting } from '@element-plus/icons-vue'
|
||||
// import { ref } from 'vue'
|
||||
|
||||
const isCollapse = false
|
||||
// const isCollapse = ref(true)
|
||||
const handleOpen = (key, keyPath) => {
|
||||
console.log(key, keyPath)
|
||||
}
|
||||
const handleClose = (key, keyPath) => {
|
||||
console.log(key, keyPath)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.el-menu-vertical {
|
||||
height: 100%;
|
||||
border: 0;
|
||||
}
|
||||
</style>
|
@ -1,30 +0,0 @@
|
||||
<template>
|
||||
<el-menu class="el-menu" mode="horizontal" background-color="#f49e00" text-color="#fff" active-text-color="#ffd04b">
|
||||
<el-menu-item index="1">Processing Center</el-menu-item>
|
||||
<el-sub-menu index="2">
|
||||
<template #title>Workspace</template>
|
||||
<el-menu-item index="2-1">item one</el-menu-item>
|
||||
<el-menu-item index="2-2">item two</el-menu-item>
|
||||
<el-menu-item index="2-3">item three</el-menu-item>
|
||||
<el-sub-menu index="2-4">
|
||||
<template #title>item four</template>
|
||||
<el-menu-item index="2-4-1">item one</el-menu-item>
|
||||
<el-menu-item index="2-4-2">item two</el-menu-item>
|
||||
<el-menu-item index="2-4-3">item three</el-menu-item>
|
||||
</el-sub-menu>
|
||||
</el-sub-menu>
|
||||
<el-menu-item index="3" disabled>Info</el-menu-item>
|
||||
<el-menu-item index="4">Orders</el-menu-item>
|
||||
</el-menu>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.el-menu {
|
||||
width: 100%;
|
||||
border: 0;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
@ -1,6 +0,0 @@
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
|
||||
const app = createApp(App)
|
||||
app.use(router).mount('#app')
|
@ -1,31 +0,0 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
import HomeView from '../views/HomeView.vue'
|
||||
|
||||
const routes = [
|
||||
{
|
||||
path: '/',
|
||||
name: 'home',
|
||||
component: HomeView
|
||||
},
|
||||
{
|
||||
path: '/about',
|
||||
name: 'about',
|
||||
// route level code-splitting
|
||||
// this generates a separate chunk (about.[hash].js) for this route
|
||||
// which is lazy-loaded when the route is visited.
|
||||
component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
|
||||
},
|
||||
{
|
||||
path: '/:catchAll(.*)',
|
||||
name: 'Not Found',
|
||||
component: () => import('../views/NotFound.vue')
|
||||
}
|
||||
]
|
||||
|
||||
const router = createRouter({
|
||||
mode: 'abstract',
|
||||
history: createWebHistory(), // createWebHashHistory(),
|
||||
routes
|
||||
})
|
||||
|
||||
export default router
|
@ -1,5 +0,0 @@
|
||||
<template>
|
||||
<div class="about">
|
||||
<h1>This is an about page</h1>
|
||||
</div>
|
||||
</template>
|
@ -1,21 +0,0 @@
|
||||
<template>
|
||||
<div class="home">
|
||||
<div>
|
||||
<el-button type="primary">el-button</el-button>
|
||||
<el-badge value="99" type="primary"></el-badge>
|
||||
</div>
|
||||
<HelloWorld msg="Welcome to Your Vue.js App" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// @ is an alias to /src
|
||||
import HelloWorld from '@/components/HelloWorld.vue'
|
||||
|
||||
export default {
|
||||
name: 'HomeView',
|
||||
components: {
|
||||
HelloWorld
|
||||
}
|
||||
}
|
||||
</script>
|
@ -1,16 +0,0 @@
|
||||
<template>
|
||||
<div class="not-found">
|
||||
404 Not Found
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'NotFound',
|
||||
components: {}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
@ -1,18 +0,0 @@
|
||||
const { defineConfig } = require('@vue/cli-service')
|
||||
const AutoImport = require('unplugin-auto-import/webpack')
|
||||
const Components = require('unplugin-vue-components/webpack')
|
||||
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
|
||||
|
||||
module.exports = defineConfig({
|
||||
transpileDependencies: true,
|
||||
configureWebpack: {
|
||||
plugins: [
|
||||
AutoImport({
|
||||
resolvers: [ElementPlusResolver()],
|
||||
}),
|
||||
Components({
|
||||
resolvers: [ElementPlusResolver()],
|
||||
}),
|
||||
],
|
||||
},
|
||||
})
|
Loading…
Reference in New Issue
Block a user