feat: docker部署方案
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
dist
|
||||
.env.development
|
||||
.env.production
|
||||
+1
-3
@@ -6,12 +6,10 @@ VITE_APP_TITLE = 'Tools-Web'
|
||||
VITE_APP_DESC = '一个轻量的工具集合站'
|
||||
# base api
|
||||
VITE_APP_BASE_API = '/v1'
|
||||
# 服务端地址: https://xxx.xxx.com; 使用mock时不需要填写
|
||||
# 服务端地址: https://xxx.xxx.com;
|
||||
VITE_SERVE = ''
|
||||
# 自定义启动host
|
||||
VITE_HOST = '127.0.0.1'
|
||||
# 是否使用mock: bool
|
||||
VITE_IS_MOCK = 'true'
|
||||
# 第三方反馈互动地址
|
||||
VITE_FEEDBACK_URL = ''
|
||||
# 广告位开关
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
# build stage
|
||||
FROM node:18-alpine3.19 AS build-stage
|
||||
# Set environment variables for non-interactive npm installs
|
||||
ENV NPM_CONFIG_LOGLEVEL warn
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
COPY .env.example .env.development
|
||||
RUN npm install -g pnpm && pnpm i
|
||||
RUN pnpm build
|
||||
|
||||
# production stage
|
||||
FROM nginx:stable-alpine AS production-stage
|
||||
COPY --from=build-stage /app/dist /usr/share/nginx/html
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
EXPOSE 80
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
@@ -1,18 +1,35 @@
|
||||
# 基于Vite4.x + Vue3.x + ElementPlus + Typescript + Tailwind的工具站
|
||||
<div align="center">
|
||||
<h1 align="center">Tools-Web</h1>
|
||||
<p> 只需简单几步,即可快速搭建属于自己的综合工具站。</p>
|
||||
|
||||
<p>基于Vite4.x + Vue3.x + ElementPlus + Typescript + Tailwind的工具站</p>
|
||||
|
||||
|
||||
[](node)
|
||||
[](vue)
|
||||
[](tailwindcss)
|
||||
[](elementplus)
|
||||
[](LICENSE)
|
||||
|
||||
> 演示站点:https://tools.ranblogs.com
|
||||
</div>
|
||||
|
||||
# 介绍
|
||||
|
||||
免费开源的工具站,目前已开发数十种工具,对平板和手机适配进行了响应式设计,同时为了让seo更为友好做了ssr处理,搭建简单使用方便
|
||||
## 功能展览
|
||||
|
||||

|
||||
|
||||
# 快速使用
|
||||
## 开始使用
|
||||
|
||||
安装`pnpm`, 为避免因为不同包管理器工具下载同一个依赖,可能版本不一样的问题,本项目强制使用`pnpm`
|
||||
### Docker方式(推荐)
|
||||
|
||||
```
|
||||
docker run -d --name tools-web --restart unless-stopped -p 8080:80 docker0796/tools-web:latest
|
||||
```
|
||||
|
||||
访问:
|
||||
|
||||
### 手动
|
||||
|
||||
安装`pnpm`
|
||||
```
|
||||
npm install pnpm -g
|
||||
```
|
||||
@@ -41,17 +58,5 @@ pnpm dev
|
||||
|
||||
打包
|
||||
```
|
||||
pnpm build:dev
|
||||
```
|
||||
|
||||
# 后端功能(非必须)
|
||||
|
||||
主要包含登录后的收藏功能,若只用工具可以忽略该部分
|
||||
|
||||
项目地址:https://github.com/taoran1401/tools-web-api
|
||||
|
||||
使用方法见内`README`
|
||||
|
||||
# 其他
|
||||
|
||||
有问题或建议请提`issue`
|
||||
pnpm build
|
||||
```
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
}
|
||||
+2
-5
@@ -5,10 +5,9 @@
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build:dev": "vue-tsc && vite build --mode development",
|
||||
"build": "vue-tsc --noEmit && node --max_old_space_size=8192 node_modules/vite/bin/vite.js build --mode development",
|
||||
"build:pro": "vue-tsc && vite build --mode production",
|
||||
"preview": "vite preview",
|
||||
"preinstall": "node ./scripts/preinstall.js"
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@codemirror/commands": "^6.3.0",
|
||||
@@ -54,14 +53,12 @@
|
||||
"autoprefixer": "^10.4.16",
|
||||
"fast-glob": "^3.3.2",
|
||||
"less": "^4.2.0",
|
||||
"mockjs": "^1.1.0",
|
||||
"path": "^0.12.7",
|
||||
"pinia": "^2.1.7",
|
||||
"tailwindcss": "^3.3.5",
|
||||
"typescript": "^5.0.2",
|
||||
"vite": "^4.4.5",
|
||||
"vite-plugin-html": "^3.2.0",
|
||||
"vite-plugin-mock": "2.9.6",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vue-router": "^4.2.5",
|
||||
"vue-tsc": "^1.8.5"
|
||||
|
||||
Generated
+1
-188
@@ -130,9 +130,6 @@ devDependencies:
|
||||
less:
|
||||
specifier: ^4.2.0
|
||||
version: 4.2.0
|
||||
mockjs:
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0
|
||||
path:
|
||||
specifier: ^0.12.7
|
||||
version: 0.12.7
|
||||
@@ -151,9 +148,6 @@ devDependencies:
|
||||
vite-plugin-html:
|
||||
specifier: ^3.2.0
|
||||
version: 3.2.0([email protected])
|
||||
vite-plugin-mock:
|
||||
specifier: 2.9.6
|
||||
version: 2.9.6([email protected])([email protected])([email protected])
|
||||
vite-plugin-svg-icons:
|
||||
specifier: ^2.0.1
|
||||
version: 2.0.1([email protected])
|
||||
@@ -726,33 +720,6 @@ packages:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@rollup/[email protected]([email protected]):
|
||||
resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
peerDependencies:
|
||||
rollup: ^2.42.0
|
||||
dependencies:
|
||||
'@rollup/pluginutils': 3.1.0([email protected])
|
||||
'@types/resolve': 1.17.1
|
||||
deepmerge: 4.3.1
|
||||
is-builtin-module: 3.2.1
|
||||
is-module: 1.0.0
|
||||
resolve: 1.22.8
|
||||
rollup: 2.79.1
|
||||
dev: true
|
||||
|
||||
/@rollup/[email protected]([email protected]):
|
||||
resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
|
||||
engines: {node: '>= 8.0.0'}
|
||||
peerDependencies:
|
||||
rollup: ^1.20.0||^2.0.0
|
||||
dependencies:
|
||||
'@types/estree': 0.0.39
|
||||
estree-walker: 1.0.1
|
||||
picomatch: 2.3.1
|
||||
rollup: 2.79.1
|
||||
dev: true
|
||||
|
||||
/@rollup/[email protected]:
|
||||
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
|
||||
engines: {node: '>= 8.0.0'}
|
||||
@@ -825,10 +792,6 @@ packages:
|
||||
'@types/json-schema': 7.0.15
|
||||
dev: false
|
||||
|
||||
/@types/[email protected]:
|
||||
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
|
||||
dev: true
|
||||
|
||||
/@types/[email protected]:
|
||||
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
|
||||
dev: false
|
||||
@@ -868,10 +831,6 @@ packages:
|
||||
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
|
||||
dev: false
|
||||
|
||||
/@types/[email protected]:
|
||||
resolution: {integrity: sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g==}
|
||||
dev: true
|
||||
|
||||
/@types/[email protected]:
|
||||
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
|
||||
dev: false
|
||||
@@ -888,12 +847,6 @@ packages:
|
||||
undici-types: 5.26.5
|
||||
dev: false
|
||||
|
||||
/@types/[email protected]:
|
||||
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
|
||||
dependencies:
|
||||
'@types/node': 20.10.3
|
||||
dev: true
|
||||
|
||||
/@types/[email protected]:
|
||||
resolution: {integrity: sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==}
|
||||
dependencies:
|
||||
@@ -1915,11 +1868,6 @@ packages:
|
||||
ieee754: 1.2.1
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -2172,11 +2120,6 @@ packages:
|
||||
delayed-stream: 1.0.0
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
|
||||
engines: {node: '>=16'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
|
||||
|
||||
@@ -2212,18 +2155,6 @@ packages:
|
||||
engines: {node: '>=0.8'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
|
||||
engines: {node: '>= 0.10.0'}
|
||||
dependencies:
|
||||
debug: 2.6.9
|
||||
finalhandler: 1.1.2
|
||||
parseurl: 1.3.3
|
||||
utils-merge: 1.0.1
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==}
|
||||
dev: true
|
||||
@@ -2774,11 +2705,6 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ==}
|
||||
dev: false
|
||||
@@ -2979,10 +2905,6 @@ packages:
|
||||
zrender: 5.5.0
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -3032,11 +2954,6 @@ packages:
|
||||
engines: {node: '>= 4'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
|
||||
dependencies:
|
||||
@@ -3112,12 +3029,6 @@ packages:
|
||||
ext: 1.7.0
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-BzVRHcCtFepjS9WcqRjqoIxLqgpK21a8J4Zi4msSGxDxiXVO1IbcqT1KjhdDDnJxKfe7bvzZrvMEX+bVO0Elcw==}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
|
||||
engines: {node: '>=12'}
|
||||
@@ -3154,6 +3065,7 @@ packages:
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
|
||||
@@ -3218,10 +3130,6 @@ packages:
|
||||
engines: {node: '>=4.0'}
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
|
||||
|
||||
@@ -3429,21 +3337,6 @@ packages:
|
||||
dependencies:
|
||||
to-regex-range: 5.0.1
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dependencies:
|
||||
debug: 2.6.9
|
||||
encodeurl: 1.0.2
|
||||
escape-html: 1.0.3
|
||||
on-finished: 2.3.0
|
||||
parseurl: 1.3.3
|
||||
statuses: 1.5.0
|
||||
unpipe: 1.0.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==}
|
||||
engines: {node: '>=4.0'}
|
||||
@@ -4005,13 +3898,6 @@ packages:
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
|
||||
engines: {node: '>=6'}
|
||||
dependencies:
|
||||
builtin-modules: 3.3.0
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
|
||||
dependencies:
|
||||
@@ -4079,10 +3965,6 @@ packages:
|
||||
resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -5004,13 +4886,6 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
commander: 11.1.0
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -5216,13 +5091,6 @@ packages:
|
||||
dependencies:
|
||||
isobject: 3.0.1
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dependencies:
|
||||
ee-first: 1.1.1
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
||||
dependencies:
|
||||
@@ -5343,11 +5211,6 @@ packages:
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
|
||||
dependencies:
|
||||
@@ -5375,10 +5238,6 @@ packages:
|
||||
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -5973,14 +5832,6 @@ packages:
|
||||
resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
|
||||
dev: false
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
hasBin: true
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==}
|
||||
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
|
||||
@@ -6329,11 +6180,6 @@ packages:
|
||||
define-property: 0.2.5
|
||||
object-copy: 0.1.0
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -6844,11 +6690,6 @@ packages:
|
||||
engines: {node: '>= 10.0.0'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -6895,11 +6736,6 @@ packages:
|
||||
inherits: 2.0.3
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
|
||||
engines: {node: '>= 0.4.0'}
|
||||
dev: true
|
||||
|
||||
/[email protected]:
|
||||
resolution: {integrity: sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==}
|
||||
dependencies:
|
||||
@@ -6994,29 +6830,6 @@ packages:
|
||||
vite: 4.5.1([email protected])([email protected])
|
||||
dev: true
|
||||
|
||||
/[email protected]([email protected])([email protected])([email protected]):
|
||||
resolution: {integrity: sha512-/Rm59oPppe/ncbkSrUuAxIQihlI2YcBmnbR4ST1RA2VzM1C0tEQc1KlbQvnUGhXECAGTaQN2JyasiwXP6EtKgg==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
peerDependencies:
|
||||
mockjs: '>=1.1.0'
|
||||
vite: '>=2.0.0'
|
||||
dependencies:
|
||||
'@rollup/plugin-node-resolve': 13.3.0([email protected])
|
||||
'@types/mockjs': 1.0.10
|
||||
chalk: 4.1.2
|
||||
chokidar: 3.5.3
|
||||
connect: 3.7.0
|
||||
debug: 4.3.4
|
||||
esbuild: 0.11.3
|
||||
fast-glob: 3.3.2
|
||||
mockjs: 1.1.0
|
||||
path-to-regexp: 6.2.1
|
||||
vite: 4.5.1([email protected])([email protected])
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/[email protected]([email protected]):
|
||||
resolution: {integrity: sha512-qzhnu6Vl3Bw484OOBJkTdjhWvCXFgvGe4ysFf3BI3AsdtO6qxDtX7nMeJNe7dQTSsaGWgTpk9WEjMDPKngPZxg==}
|
||||
dependencies:
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 987 KiB After Width: | Height: | Size: 795 KiB |
@@ -1,27 +0,0 @@
|
||||
//统一管理咱们项目用户相关的接口
|
||||
import request from '@/utils/request'
|
||||
|
||||
import type {
|
||||
ToolsReqData,
|
||||
ToolsResponseData,
|
||||
ToolCateResponseData,
|
||||
ToolRecommendResponseData,
|
||||
} from './type'
|
||||
|
||||
//项目用户相关的请求地址
|
||||
enum API {
|
||||
//获取tools
|
||||
GET_TOOLS = '/tools',
|
||||
//获取tool cate
|
||||
GET_TOOL_CATES = '/tool/cates',
|
||||
//获取推荐
|
||||
GET_TOOL_RECOMMEND = '/tool/recommends',
|
||||
}
|
||||
//获取tools
|
||||
export const getTools = (data: ToolsReqData) => request.get<any, ToolsResponseData>(API.GET_TOOLS, {
|
||||
params: data
|
||||
})
|
||||
//获取tool cate
|
||||
export const getToolCate = () => request.get<any, ToolCateResponseData>(API.GET_TOOL_CATES)
|
||||
//获取推荐
|
||||
export const getToolRecommend = () => request.get<any, ToolRecommendResponseData>(API.GET_TOOL_RECOMMEND)
|
||||
@@ -4,7 +4,7 @@ import { Search } from '@element-plus/icons-vue';
|
||||
import { useToolsStore } from '@/store/modules/tools'
|
||||
import { useComponentStore } from '@/store/modules/component'
|
||||
import 'element-plus/theme-chalk/display.css'
|
||||
import { ToolsInfo } from '@/api/tools/type';
|
||||
import { ToolsInfo } from '@/components/Tools/tools.type.ts';
|
||||
|
||||
import router from '@/router';
|
||||
// const isNavDrawer = ref(false)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { Tools } from '@element-plus/icons-vue'
|
||||
import { Message } from '@element-plus/icons-vue'
|
||||
import { reactive, onMounted } from 'vue';
|
||||
import { useToolsStore } from '@/store/modules/tools'
|
||||
const info = reactive({
|
||||
@@ -21,42 +20,18 @@ const info = reactive({
|
||||
//store
|
||||
const toolsStore = useToolsStore()
|
||||
|
||||
//获取随机推荐
|
||||
const getToolRecommend = async () => {
|
||||
try {
|
||||
await toolsStore.getToolRecommend()
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
|
||||
//点击走马灯
|
||||
const clickCarousel = (url: string) => {
|
||||
let w = window.open('')
|
||||
w?.document.write(`<!DOCTYPE html><html><body ><img src='${url}'/></body></html>`)
|
||||
}
|
||||
|
||||
//反馈
|
||||
const feedback = () => {
|
||||
window.open(info.feedbackUrl)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getToolRecommend()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<!-- feedback -->
|
||||
<div class="flex flex-col text-center mt-3 border-solid rounded border-gray border p-3 c-xs:mr-3 c-xs:ml-3">
|
||||
<div @click="feedback()" class="text-2xl flex items-center justify-center cursor-pointer">
|
||||
<el-icon><Message /></el-icon>
|
||||
<div class="ml-2">
|
||||
建议反馈
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- adv -->
|
||||
<div class="mt-3" v-if="info.advShow == 'true'">
|
||||
<el-carousel
|
||||
|
||||
@@ -1,17 +1,7 @@
|
||||
//获取tools
|
||||
function getTools() {
|
||||
let tools = [] as any[]
|
||||
let toolsCate = getToolsCate()
|
||||
for (let item in toolsCate) {
|
||||
for (let _item in toolsCate[item].list) {
|
||||
tools.push(toolsCate[item].list[_item])
|
||||
}
|
||||
}
|
||||
return tools
|
||||
}
|
||||
import type { ToolsReqData } from '@/components/Tools/tools.type.ts'
|
||||
|
||||
//获取tools分类与对应的工具
|
||||
function getToolsCate() {
|
||||
export function getToolsCate() {
|
||||
return [
|
||||
{
|
||||
id: 2,
|
||||
@@ -306,31 +296,31 @@ function getToolsCate() {
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
title: '查询相关',
|
||||
icon: '',
|
||||
list: [
|
||||
// {
|
||||
// id: 1,
|
||||
// title: 'IP查询',
|
||||
// logo: '/images/logo/IP.png',
|
||||
// desc: '在线查询ip地址、ip归属地',
|
||||
// url: '/ip',
|
||||
// cateId: 6,
|
||||
// cate: '查询相关',
|
||||
// },
|
||||
{
|
||||
id: 1,
|
||||
title: '网站favicon获取',
|
||||
logo: '/images/logo/text_to_img.png',
|
||||
desc: '获取网站logo、icon、favicon、标题、关键词、描述等信息',
|
||||
url: '/webInfo',
|
||||
cateId: 6,
|
||||
cate: '查询相关',
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// id: 6,
|
||||
// title: '查询相关',
|
||||
// icon: '',
|
||||
// list: [
|
||||
// {
|
||||
// id: 1,
|
||||
// title: 'IP查询',
|
||||
// logo: '/images/logo/IP.png',
|
||||
// desc: '在线查询ip地址、ip归属地',
|
||||
// url: '/ip',
|
||||
// cateId: 6,
|
||||
// cate: '查询相关',
|
||||
// },
|
||||
// {
|
||||
// id: 1,
|
||||
// title: '网站favicon获取',
|
||||
// logo: '/images/logo/text_to_img.png',
|
||||
// desc: '获取网站logo、icon、favicon、标题、关键词、描述等信息',
|
||||
// url: '/webInfo',
|
||||
// cateId: 6,
|
||||
// cate: '查询相关',
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
id: 7,
|
||||
title: '其他工具',
|
||||
@@ -368,61 +358,37 @@ function getToolsCate() {
|
||||
]
|
||||
}
|
||||
|
||||
export default [
|
||||
{
|
||||
url: '/v1/tools',
|
||||
method: 'get',//请求方式
|
||||
response: (request) => {
|
||||
//接收参数
|
||||
const { cateId, title } = request.query
|
||||
//调用获取用户信息函数,用于判断是否有此用户
|
||||
let list = getTools()
|
||||
//标题筛选
|
||||
if (title != '') {
|
||||
list = list.filter(item => {
|
||||
let tmpValue = item.title.toLowerCase()
|
||||
let tmpDesc = item.desc.toLowerCase()
|
||||
return tmpValue.indexOf(title.toLowerCase()) !== -1 || tmpDesc.indexOf(title.toLowerCase()) !== -1;
|
||||
});
|
||||
}
|
||||
//分类筛选
|
||||
if (cateId > 0) {
|
||||
list = list.filter(item => {
|
||||
return item.cateId == cateId;
|
||||
});
|
||||
}
|
||||
return { code: 200, message: 'ok', data: list }
|
||||
},
|
||||
},
|
||||
{
|
||||
url: '/v1/tool/cates',
|
||||
method: 'get',//请求方式
|
||||
response: ({ body }) => {
|
||||
const list = getToolsCate()
|
||||
return { code: 200, message: 'ok', data: list }
|
||||
},
|
||||
},
|
||||
{
|
||||
url: '/v1/tool/recommends',
|
||||
method: 'get',//请求方式
|
||||
response: () => {
|
||||
let list = [] as any
|
||||
//获取推荐数量
|
||||
let num = 10
|
||||
const toolList = getTools()
|
||||
//使用Set数据结构来存储已经生成的随机数
|
||||
const set = new Set();
|
||||
|
||||
while (set.size < num) {
|
||||
// 生成随机数
|
||||
const randomNum = Math.floor(Math.random() * toolList.length);
|
||||
// 如果随机数不在Set中,则添加到Set中并赋值给randomNumber变量
|
||||
if (!set.has(randomNum)) {
|
||||
set.add(randomNum);
|
||||
list.push(toolList[randomNum])
|
||||
}
|
||||
}
|
||||
return { code: 200, message: 'ok', data: list }
|
||||
},
|
||||
//获取工具
|
||||
export function getTools(data: ToolsReqData) {
|
||||
//接收参数
|
||||
const { cateId, title } = data
|
||||
//获取工具
|
||||
let list = [] as any[]
|
||||
let toolsCate = getToolsCate()
|
||||
for (let item in toolsCate) {
|
||||
for (let _item in toolsCate[item].list) {
|
||||
list.push(toolsCate[item].list[_item])
|
||||
}
|
||||
}
|
||||
]
|
||||
//标题筛选
|
||||
if (title != '') {
|
||||
list = list.filter(item => {
|
||||
let tmpValue = item.title.toLowerCase()
|
||||
let tmpDesc = item.desc.toLowerCase()
|
||||
return tmpValue.indexOf(title.toLowerCase()) !== -1 || tmpDesc.indexOf(title.toLowerCase()) !== -1;
|
||||
});
|
||||
}
|
||||
//分类筛选
|
||||
if (cateId > 0) {
|
||||
list = list.filter(item => {
|
||||
return item.cateId == cateId;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const ToolsExport = {
|
||||
getTools,
|
||||
getToolsCate,
|
||||
};
|
||||
|
||||
export default ToolsExport;
|
||||
@@ -1,5 +1,3 @@
|
||||
import { ResponseData } from "../common"
|
||||
|
||||
export interface ToolsReqData {
|
||||
cateId: number,
|
||||
title: string,
|
||||
@@ -32,16 +30,16 @@ export interface CollectReqData {
|
||||
}
|
||||
|
||||
//tools list response
|
||||
export interface ToolsResponseData extends ResponseData {
|
||||
export interface ToolsResponseData {
|
||||
data: ToolsInfo[]
|
||||
}
|
||||
|
||||
//tools cate response
|
||||
export interface ToolCateResponseData extends ResponseData {
|
||||
export interface ToolCateResponseData{
|
||||
data: ToolCate[]
|
||||
}
|
||||
|
||||
//tools recommend response
|
||||
export interface ToolRecommendResponseData extends ResponseData {
|
||||
export interface ToolRecommendResponseData{
|
||||
data: ToolsInfo[]
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
//创建tools相关的小工具
|
||||
import { defineStore } from 'pinia'
|
||||
import { getTools, getToolCate, getToolRecommend } from '@/api/tools'
|
||||
import { getTools, getToolsCate } from '@/components/Tools/tools.ts'
|
||||
import { getIp } from '@/api/ip'
|
||||
import type { ToolsReqData, ToolsInfo, ToolCate } from '@/api/tools/type'
|
||||
import type { ToolsReqData, ToolsInfo } from '@/components/Tools/tools.type.ts'
|
||||
import type { IpReqData, IpInfo } from '@/api/ip/type'
|
||||
import type { WebInfo, WebInfoReqData } from '@/api/webinfo/type'
|
||||
import { fetchWebInfo } from '@/api/webinfo'
|
||||
@@ -12,7 +12,7 @@ export const useToolsStore = defineStore('tools', {
|
||||
state: () => ({
|
||||
list: [] as ToolsInfo[],
|
||||
toolInfo: {} as ToolsInfo,
|
||||
cates: [] as ToolCate[],
|
||||
cates: [] as any[],
|
||||
recommends: [] as ToolsInfo[],
|
||||
ipData: {} as IpInfo,
|
||||
webInfo: {} as WebInfo,
|
||||
@@ -46,23 +46,7 @@ export const useToolsStore = defineStore('tools', {
|
||||
//获取tools cate
|
||||
async getToolCate() {
|
||||
//发送请求
|
||||
const result: any = await getToolCate()
|
||||
if (result.code == 200) {
|
||||
this.cates = result.data
|
||||
return result.message
|
||||
} else {
|
||||
return Promise.reject(new Error(result.message))
|
||||
}
|
||||
},
|
||||
//获取推荐
|
||||
async getToolRecommend() {
|
||||
const result: any = await getToolRecommend()
|
||||
if (result.code == 200) {
|
||||
this.recommends = result.data
|
||||
return result.message
|
||||
} else {
|
||||
return Promise.reject(new Error(result.message))
|
||||
}
|
||||
this.cates = await getToolsCate()
|
||||
},
|
||||
//获取ip
|
||||
async getIp(data: IpReqData) {
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
import { defineConfig, loadEnv } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
||||
import {viteMockServe} from 'vite-plugin-mock'
|
||||
import path from 'path'
|
||||
import { createHtmlPlugin } from 'vite-plugin-html'
|
||||
import {seoperender} from "./ssr.config";
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
@@ -21,10 +19,6 @@ export default defineConfig(({command, mode}) => {
|
||||
// Specify symbolId format
|
||||
symbolId: 'icon-[dir]-[name]',
|
||||
}),
|
||||
//mock
|
||||
viteMockServe({
|
||||
localEnabled: env.VITE_IS_MOCK == 'true' ? command === 'serve' : false,
|
||||
}),
|
||||
seoperender()
|
||||
],
|
||||
resolve: {
|
||||
|
||||
Reference in New Issue
Block a user