@ -1,23 +0,0 @@ |
|||
.DS_Store |
|||
node_modules/ |
|||
unpackage/ |
|||
dist/ |
|||
|
|||
# local env files |
|||
.env.local |
|||
.env.*.local |
|||
|
|||
# Log files |
|||
npm-debug.log* |
|||
yarn-debug.log* |
|||
yarn-error.log* |
|||
|
|||
# Editor directories and files |
|||
.project |
|||
.idea |
|||
.vscode |
|||
*.suo |
|||
*.ntvs* |
|||
*.njsproj |
|||
*.sln |
|||
*.sw* |
@ -1,23 +0,0 @@ |
|||
{ |
|||
// launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ |
|||
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 |
|||
"version" : "0.0", |
|||
"configurations" : [ |
|||
{ |
|||
"app-plus" : { |
|||
"launchtype" : "local" |
|||
}, |
|||
"default" : { |
|||
"launchtype" : "local" |
|||
}, |
|||
"mp-weixin" : { |
|||
"launchtype" : "local" |
|||
}, |
|||
"type" : "uniCloud" |
|||
}, |
|||
{ |
|||
"playground" : "custom", |
|||
"type" : "uni-app:app-android" |
|||
} |
|||
] |
|||
} |
@ -1,7 +0,0 @@ |
|||
# 设置基础镜像 |
|||
FROM win-nginx |
|||
|
|||
WORKDIR /opt/eam-uniapp |
|||
COPY nginx.conf /usr/local/nginx/conf/nginx.conf |
|||
# 将dist/build/h5/文件中的内容复制到 /opt/eam-uniapp 这个目录下面 |
|||
COPY dist/build/h5/ /opt/eam-uniapp |
@ -1,19 +0,0 @@ |
|||
# my-project |
|||
|
|||
## Project setup |
|||
``` |
|||
yarn install |
|||
``` |
|||
|
|||
### Compiles and hot-reloads for development |
|||
``` |
|||
yarn serve |
|||
``` |
|||
|
|||
### Compiles and minifies for production |
|||
``` |
|||
yarn build |
|||
``` |
|||
|
|||
### Customize configuration |
|||
See [Configuration Reference](https://cli.vuejs.org/config/). |
@ -1,81 +0,0 @@ |
|||
const webpack = require('webpack') |
|||
const plugins = [] |
|||
|
|||
if (process.env.UNI_OPT_TREESHAKINGNG) { |
|||
plugins.push(require('@dcloudio/vue-cli-plugin-uni-optimize/packages/babel-plugin-uni-api/index.js')) |
|||
} |
|||
|
|||
if ( |
|||
( |
|||
process.env.UNI_PLATFORM === 'app-plus' && |
|||
process.env.UNI_USING_V8 |
|||
) || |
|||
( |
|||
process.env.UNI_PLATFORM === 'h5' && |
|||
process.env.UNI_H5_BROWSER === 'builtin' |
|||
) |
|||
) { |
|||
const path = require('path') |
|||
|
|||
const isWin = /^win/.test(process.platform) |
|||
|
|||
const normalizePath = path => (isWin ? path.replace(/\\/g, '/') : path) |
|||
|
|||
const input = normalizePath(process.env.UNI_INPUT_DIR) |
|||
try { |
|||
plugins.push([ |
|||
require('@dcloudio/vue-cli-plugin-hbuilderx/packages/babel-plugin-console'), |
|||
{ |
|||
file (file) { |
|||
file = normalizePath(file) |
|||
if (file.indexOf(input) === 0) { |
|||
return path.relative(input, file) |
|||
} |
|||
return false |
|||
} |
|||
} |
|||
]) |
|||
} catch (e) { } |
|||
} |
|||
|
|||
process.UNI_LIBRARIES = process.UNI_LIBRARIES || ['@dcloudio/uni-ui'] |
|||
process.UNI_LIBRARIES.forEach(libraryName => { |
|||
plugins.push([ |
|||
'import', |
|||
{ |
|||
'libraryName': libraryName, |
|||
'customName': (name) => { |
|||
return `${libraryName}/lib/${name}/${name}` |
|||
} |
|||
} |
|||
]) |
|||
}) |
|||
|
|||
if (process.env.UNI_PLATFORM !== 'h5') { |
|||
plugins.push('@babel/plugin-transform-runtime') |
|||
} |
|||
|
|||
const config = { |
|||
presets: [ |
|||
[ |
|||
'@vue/app', |
|||
{ |
|||
modules: webpack.version[0] > 4 ? 'auto' : 'commonjs', |
|||
useBuiltIns: process.env.UNI_PLATFORM === 'h5' ? 'usage' : 'entry' |
|||
} |
|||
] |
|||
], |
|||
plugins |
|||
} |
|||
|
|||
const UNI_H5_TEST = '**/@dcloudio/uni-h5/dist/index.umd.min.js' |
|||
if (process.env.NODE_ENV === 'production') { |
|||
config.overrides = [{ |
|||
test: UNI_H5_TEST, |
|||
compact: true, |
|||
}] |
|||
} else { |
|||
config.ignore = [UNI_H5_TEST] |
|||
} |
|||
|
|||
module.exports = config |
@ -1,53 +0,0 @@ |
|||
user root; |
|||
worker_processes 2; |
|||
|
|||
events { |
|||
worker_connections 1024; |
|||
} |
|||
|
|||
http { |
|||
include mime.types; |
|||
charset utf-8,gbk; |
|||
default_type application/octet-stream; |
|||
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
|||
'$status $body_bytes_sent "$http_referer" ' |
|||
'"$http_user_agent" "$http_x_forwarded_for" "$request_time $upstream_response_time"'; |
|||
|
|||
proxy_cache_path /opt/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g; |
|||
access_log logs/access.log main; |
|||
sendfile on; |
|||
#tcp_nopush on; |
|||
keepalive_timeout 600s; |
|||
client_max_body_size 200m; |
|||
gzip on; |
|||
gzip_min_length 10k; |
|||
gzip_comp_level 9; |
|||
gzip_buffers 4 16k; |
|||
gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; |
|||
gzip_vary on; |
|||
gzip_disable "MSIE [1-6]\."; |
|||
upstream eam { |
|||
server localhost:25210 weight=10 max_fails=3 fail_timeout=10s; |
|||
} |
|||
server { |
|||
listen 25202; |
|||
server_name_in_redirect off; |
|||
server_name dev.ccwin-in.com; |
|||
location /api/ { |
|||
proxy_pass http://eam/; |
|||
proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; |
|||
proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; |
|||
proxy_set_header Host $http_host; |
|||
proxy_set_header X-Real-IP $remote_addr; |
|||
proxy_set_header X-Forwarded-For $http_x_forwarded_for; |
|||
} |
|||
location / { |
|||
proxy_cache my_zone; |
|||
proxy_cache_valid 200 304 12h; |
|||
proxy_cache_key $host$uri$is_args$args; |
|||
try_files $uri $uri/ /index.html; |
|||
root /opt/eam-uniapp; |
|||
index index.html index.htm; |
|||
} |
|||
} |
|||
} |
@ -1,64 +0,0 @@ |
|||
{ |
|||
"name": "eam_uni-app", |
|||
"version": "0.1.0", |
|||
"private": true, |
|||
"scripts": { |
|||
"dev": "npm run dev:h5", |
|||
"test": "npm run build:h5", |
|||
"build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build", |
|||
"build:custom": "cross-env NODE_ENV=production uniapp-cli custom", |
|||
"build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build", |
|||
"build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build", |
|||
"dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch", |
|||
"dev:custom": "cross-env NODE_ENV=development uniapp-cli custom", |
|||
"dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve", |
|||
"dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch", |
|||
"info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js" |
|||
}, |
|||
"dependencies": { |
|||
"@dcloudio/uni-app": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-app-plus": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-h5": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-mp-weixin": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-stacktracey": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-stat": "^2.0.2-3090920231225001", |
|||
"@vue/shared": "^3.0.0", |
|||
"core-js": "^3.8.3", |
|||
"crypto-js": "^4.0.0", |
|||
"flyio": "^0.6.2", |
|||
"vue": ">= 2.6.14 < 2.7", |
|||
"vuex": "^3.2.0" |
|||
}, |
|||
"devDependencies": { |
|||
"@dcloudio/types": "^3.3.2", |
|||
"@dcloudio/uni-automator": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-cli-i18n": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-cli-shared": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-helper-json": "*", |
|||
"@dcloudio/uni-i18n": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-migration": "^2.0.2-3090920231225001", |
|||
"@dcloudio/uni-template-compiler": "^2.0.2-3090920231225001", |
|||
"@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.2-3090920231225001", |
|||
"@dcloudio/vue-cli-plugin-uni": "^2.0.2-3090920231225001", |
|||
"@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.2-3090920231225001", |
|||
"@dcloudio/webpack-uni-mp-loader": "^2.0.2-3090920231225001", |
|||
"@dcloudio/webpack-uni-pages-loader": "^2.0.2-3090920231225001", |
|||
"@vue/cli-plugin-babel": "~5.0.0", |
|||
"@vue/cli-service": "~5.0.0", |
|||
"babel-plugin-import": "^1.11.0", |
|||
"cross-env": "^7.0.2", |
|||
"jest": "^25.4.0", |
|||
"postcss-comment": "^2.0.0", |
|||
"sass": "^1.69.7", |
|||
"sass-loader": "^13.3.3", |
|||
"vite": "4.0.3", |
|||
"vue-template-compiler": ">= 2.6.14 < 2.7" |
|||
}, |
|||
"browserslist": [ |
|||
"Android >= 4.4", |
|||
"ios >= 9" |
|||
], |
|||
"uni-app": { |
|||
"scripts": {} |
|||
} |
|||
} |
@ -1,27 +0,0 @@ |
|||
const path = require('path') |
|||
const webpack = require('webpack') |
|||
const config = { |
|||
parser: require('postcss-comment'), |
|||
plugins: [ |
|||
require('postcss-import')({ |
|||
resolve (id, basedir, importOptions) { |
|||
if (id.startsWith('~@/')) { |
|||
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3)) |
|||
} else if (id.startsWith('@/')) { |
|||
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2)) |
|||
} else if (id.startsWith('/') && !id.startsWith('//')) { |
|||
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1)) |
|||
} |
|||
return id |
|||
} |
|||
}), |
|||
require('autoprefixer')({ |
|||
remove: process.env.UNI_PLATFORM !== 'h5' |
|||
}), |
|||
require('@dcloudio/vue-cli-plugin-uni/packages/postcss') |
|||
] |
|||
} |
|||
if (webpack.version[0] > 4) { |
|||
delete config.parser |
|||
} |
|||
module.exports = config |
@ -1,25 +0,0 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="zh-CN"> |
|||
|
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|||
<title> |
|||
<%= htmlWebpackPlugin.options.title %> |
|||
</title> |
|||
<script> |
|||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)')) |
|||
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />') |
|||
</script> |
|||
<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" /> |
|||
</head> |
|||
|
|||
<body> |
|||
<noscript> |
|||
<strong>Please enable JavaScript to continue.</strong> |
|||
</noscript> |
|||
<div id="app"></div> |
|||
<!-- built files will be auto injected --> |
|||
</body> |
|||
|
|||
</html> |
@ -1,11 +0,0 @@ |
|||
/// <reference types='@dcloudio/types' />
|
|||
import Vue from 'vue' |
|||
declare module "vue/types/options" { |
|||
type Hooks = App.AppInstance & Page.PageInstance; |
|||
interface ComponentOptions<V extends Vue> extends Hooks { |
|||
/** |
|||
* 组件类型 |
|||
*/ |
|||
mpType?: string; |
|||
} |
|||
} |
@ -1,4 +0,0 @@ |
|||
declare module "*.vue" { |
|||
import Vue from 'vue' |
|||
export default Vue |
|||
} |
@ -1,16 +0,0 @@ |
|||
###################################################################### |
|||
# Build Tools |
|||
|
|||
/unpackage/* |
|||
/node_modules/* |
|||
|
|||
###################################################################### |
|||
# Development Tools |
|||
|
|||
/.idea/* |
|||
/.vscode/* |
|||
/.hbuilderx/* |
|||
|
|||
package-lock.json |
|||
yarn.lock |
|||
|
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 238 KiB |
Before Width: | Height: | Size: 139 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 201 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 150 KiB |
Before Width: | Height: | Size: 124 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 126 KiB |
Before Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 208 KiB |
Before Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 173 KiB |
Before Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 125 KiB |
Before Width: | Height: | Size: 148 KiB |
Before Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 248 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 115 KiB |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 129 KiB |
Before Width: | Height: | Size: 102 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 109 KiB |
Before Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 131 KiB |
Before Width: | Height: | Size: 62 KiB |
@ -1,35 +0,0 @@ |
|||
<script> |
|||
import config from './config' |
|||
import store from '@/store' |
|||
import { getAccessToken } from '@/utils/auth' |
|||
|
|||
export default { |
|||
onLaunch: function() { |
|||
this.initApp() |
|||
}, |
|||
methods: { |
|||
// 初始化应用 |
|||
initApp() { |
|||
// 初始化应用配置 |
|||
this.initConfig() |
|||
// 检查用户登录状态 |
|||
//#ifdef H5 |
|||
this.checkLogin() |
|||
//#endif |
|||
}, |
|||
initConfig() { |
|||
this.globalData.config = config |
|||
}, |
|||
checkLogin() { |
|||
// if (!getAccessToken()) { |
|||
// this.$tab.reLaunch('/pages/login') |
|||
// } |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
@import '@/static/scss/index.scss'; |
|||
@import "./uni_modules/vk-uview-ui/index.scss"; |
|||
</style> |
@ -1,21 +0,0 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2022 芋道 |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -1,52 +0,0 @@ |
|||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!** |
|||
|
|||
**「我喜欢写代码,乐此不疲」** |
|||
**「我喜欢做开源,以此为乐」** |
|||
|
|||
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。 |
|||
|
|||
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 |
|||
|
|||
## 🐶 新手必读 |
|||
|
|||
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn> |
|||
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn> |
|||
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn> |
|||
* 启动文档:<https://doc.iocoder.cn/quick-start/> |
|||
* 视频教程:<https://doc.iocoder.cn/video/> |
|||
|
|||
## 🐯 平台简介 |
|||
|
|||
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 |
|||
|
|||
![](/.image/admin-uniapp/02.png) |
|||
|
|||
* 采用 uni-app 框架,一套代码多端适配,支持 App、小程序、H5! |
|||
* 已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。 |
|||
|
|||
## 技术栈 |
|||
|
|||
| 框架 | 说明 | 版本 | |
|||
|-------------------------------------------------|--------------------|--------| |
|||
| [uni-app](hhttps://github.com/dcloudio/uni-app) | 跨平台框架 | 2.0.0 | |
|||
| [uni-ui](https://github.com/dcloudio/uni-ui) | 基于 uni-app 的 UI 框架 | 1.4.20 | |
|||
|
|||
## 🔥 后端架构 |
|||
|
|||
支持 Spring Boot、Spring Cloud 两种架构: |
|||
|
|||
① Spring Boot 单体架构:<https://github.com/YunaiV/ruoyi-vue-pro> |
|||
|
|||
![架构图](/.image/common/ruoyi-vue-pro-architecture.png) |
|||
|
|||
② Spring Cloud 微服务架构:<https://github.com/YunaiV/yudao-cloud> |
|||
|
|||
![架构图](/.image/common/yudao-cloud-architecture.png) |
|||
|
|||
## 🐷 演示图 |
|||
|
|||
| biu | biu | biu | |
|||
|----------------------------------|----------------------------------|----------------------------------| |
|||
| ![](/.image/admin-uniapp/01.png) | ![](/.image/admin-uniapp/02.png) | ![](/.image/admin-uniapp/03.png) | |
|||
| ![](/.image/admin-uniapp/04.png) | ![](/.image/admin-uniapp/05.png) | ![](/.image/admin-uniapp/06.png) | |
|||
| ![](/.image/admin-uniapp/07.png) | ![](/.image/admin-uniapp/08.png) | ![](/.image/admin-uniapp/09.png) | |