mirror of
https://github.com/adams549659584/go-proxy-bingai.git
synced 2025-06-03 15:02:30 +08:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
76d44c7d0a | ||
|
e6b8dec171 | ||
|
5aaa77f183 | ||
|
4c05bc508c | ||
|
538d8a4791 | ||
|
da33467128 | ||
|
d39376c8cc | ||
|
db188a6da2 | ||
|
90df9416f9 |
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
!.vscode/launch.json
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
.DS_Store
|
||||
|
||||
release
|
5
.vscode/extensions.json
vendored
Normal file
5
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"golang.go"
|
||||
]
|
||||
}
|
@ -22,7 +22,7 @@
|
||||
- [网页展示](#网页展示)
|
||||
- [侧边栏](#侧边栏)
|
||||
- [演示站点](#演示站点)
|
||||
- [获取 Cookie](#获取Cookie)
|
||||
- [设置用户](#设置用户)
|
||||
- [环境变量](#环境变量)
|
||||
- [部署](#部署)
|
||||
- [Docker](#Docker)
|
||||
@ -90,13 +90,13 @@
|
||||
|
||||
- https://go-proxy-bingai.onrender.com
|
||||
|
||||
## 获取 Cookie
|
||||
## 设置用户
|
||||
|
||||
- 访问 https://www.bing.com/ 或 https://cn.bing.com/ ,登录
|
||||
|
||||
- F12 或 Ctrl + Shift + I 打开控制台
|
||||
|
||||
- 拿到 Cookie 后,在网站设置用户 Cookie 弹窗填入即可。
|
||||
- 拿到 Cookie 中 _U 的值 后,在网站设置 => 设置用户 中填入即可。
|
||||
|
||||

|
||||
|
||||
|
@ -12,7 +12,7 @@ func Index(w http.ResponseWriter, r *http.Request) {
|
||||
http.Redirect(w, r, common.PROXY_WEB_PAGE_PATH, http.StatusFound)
|
||||
return
|
||||
}
|
||||
if strings.HasPrefix("/turing", r.URL.Path) {
|
||||
if strings.HasPrefix(r.URL.Path, "/turing") {
|
||||
if !helper.CheckAuth(r) {
|
||||
helper.UnauthorizedResult(w)
|
||||
return
|
||||
|
@ -3,9 +3,9 @@
|
||||
|
||||
<head>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
|
||||
<link rel="icon" type="image/svg+xml" href="https://bing.vcanbb.top/web/img/logo.svg" />
|
||||
<link rel="icon" type="image/svg+xml" href="/github/frontend/public/img/logo.svg" />
|
||||
<meta content="yes" name="apple-mobile-web-app-capable" />
|
||||
<link rel="apple-touch-icon" href="https://bing.vcanbb.top/web/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="/github/frontend/public/img/pwa/logo-192.png">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
|
||||
<meta name="referrer" content="origin-when-cross-origin" />
|
||||
@ -41,7 +41,7 @@
|
||||
class="relative bg-white px-6 pb-8 pt-10 shadow-xl ring-1 ring-gray-900/5 sm:mx-auto sm:max-w-lg sm:rounded-lg sm:px-10 lg:max-w-3xl">
|
||||
<div class="mx-auto max-w-3xl">
|
||||
<div class="flex justify-center">
|
||||
<img src="https://bing.vcanbb.top/web/img/logo.svg" class="h-24" alt="BingAI" />
|
||||
<img src="/github/frontend/public/img/logo.svg" class="h-24" alt="BingAI" />
|
||||
</div>
|
||||
<div class="mt-6 text-center text-3xl text-gray-600">聊天服务器已部署完成</div>
|
||||
<div class="divide-y divide-gray-300/50">
|
||||
|
@ -70,10 +70,26 @@ const getRandomIP = () => {
|
||||
return randomIP;
|
||||
};
|
||||
|
||||
const home = async () => {
|
||||
const res = await fetch('https://raw.githubusercontent.com/adams549659584/go-proxy-bingai/master/cloudflare/index.html');
|
||||
/**
|
||||
* home
|
||||
* @param {string} pathname
|
||||
* @returns
|
||||
*/
|
||||
const home = async (pathname) => {
|
||||
const baseUrl = 'https://raw.githubusercontent.com/adams549659584/go-proxy-bingai/master/';
|
||||
let url;
|
||||
// if (pathname.startsWith('/github/')) {
|
||||
if (pathname.indexOf('/github/') === 0) {
|
||||
url = pathname.replace('/github/', baseUrl);
|
||||
} else {
|
||||
url = baseUrl + 'cloudflare/index.html';
|
||||
}
|
||||
const res = await fetch(url);
|
||||
const newRes = new Response(res.body, res);
|
||||
newRes.headers.set('content-type', 'text/html; charset=utf-8');
|
||||
if (pathname === '/') {
|
||||
newRes.headers.delete('content-security-policy');
|
||||
newRes.headers.set('content-type', 'text/html; charset=utf-8');
|
||||
}
|
||||
return newRes;
|
||||
};
|
||||
|
||||
@ -87,8 +103,9 @@ export default {
|
||||
*/
|
||||
async fetch(request, env, ctx) {
|
||||
const currentUrl = new URL(request.url);
|
||||
if (currentUrl.pathname === '/') {
|
||||
return home();
|
||||
// if (currentUrl.pathname === '/' || currentUrl.pathname.startsWith('/github/')) {
|
||||
if (currentUrl.pathname === '/' || currentUrl.pathname.indexOf('/github/') === 0) {
|
||||
return home(currentUrl.pathname);
|
||||
}
|
||||
const targetUrl = new URL(SYDNEY_ORIGIN + currentUrl.pathname + currentUrl.search);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "go-proxy-bingai",
|
||||
"version": "1.8.3",
|
||||
"version": "1.8.7",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@ -12,6 +12,7 @@
|
||||
"format": "prettier --write src/"
|
||||
},
|
||||
"dependencies": {
|
||||
"naive-ui": "^2.34.4",
|
||||
"pinia": "^2.0.36",
|
||||
"pinia-plugin-persistedstate": "^3.1.0",
|
||||
"vue": "^3.3.2",
|
||||
@ -29,7 +30,6 @@
|
||||
"autoprefixer": "^10.4.14",
|
||||
"eslint": "^8.39.0",
|
||||
"eslint-plugin-vue": "^9.11.0",
|
||||
"naive-ui": "^2.34.3",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss": "^8.4.23",
|
||||
"prettier": "^2.8.8",
|
||||
|
63
frontend/pnpm-lock.yaml
generated
63
frontend/pnpm-lock.yaml
generated
@ -1,6 +1,9 @@
|
||||
lockfileVersion: '6.0'
|
||||
|
||||
dependencies:
|
||||
naive-ui:
|
||||
specifier: ^2.34.4
|
||||
version: 2.34.4(vue@3.3.2)
|
||||
pinia:
|
||||
specifier: ^2.0.36
|
||||
version: 2.0.36(typescript@5.0.4)(vue@3.3.2)
|
||||
@ -48,9 +51,6 @@ devDependencies:
|
||||
eslint-plugin-vue:
|
||||
specifier: ^9.11.0
|
||||
version: 9.13.0(eslint@8.40.0)
|
||||
naive-ui:
|
||||
specifier: ^2.34.3
|
||||
version: 2.34.3(vue@3.3.2)
|
||||
npm-run-all:
|
||||
specifier: ^4.1.5
|
||||
version: 4.1.5
|
||||
@ -1233,7 +1233,6 @@ packages:
|
||||
engines: {node: '>=6.9.0'}
|
||||
dependencies:
|
||||
regenerator-runtime: 0.13.11
|
||||
dev: true
|
||||
|
||||
/@babel/template@7.20.7:
|
||||
resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==}
|
||||
@ -1276,7 +1275,7 @@ packages:
|
||||
css-render: ~0.15.12
|
||||
dependencies:
|
||||
css-render: 0.15.12
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/@css-render/vue3-ssr@0.15.12(vue@3.3.2):
|
||||
resolution: {integrity: sha512-AQLGhhaE0F+rwybRCkKUdzBdTEM/5PZBYy+fSYe1T9z9+yxMuV/k7ZRqa4M69X+EI1W8pa4kc9Iq2VjQkZx4rg==}
|
||||
@ -1284,11 +1283,11 @@ packages:
|
||||
vue: ^3.0.11
|
||||
dependencies:
|
||||
vue: 3.3.2
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/@emotion/hash@0.8.0:
|
||||
resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/@esbuild/android-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
|
||||
@ -1587,7 +1586,7 @@ packages:
|
||||
|
||||
/@juggle/resize-observer@3.4.0:
|
||||
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/@nodelib/fs.scandir@2.1.5:
|
||||
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
||||
@ -1724,17 +1723,17 @@ packages:
|
||||
|
||||
/@types/katex@0.14.0:
|
||||
resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/@types/lodash-es@4.17.7:
|
||||
resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==}
|
||||
dependencies:
|
||||
'@types/lodash': 4.14.194
|
||||
dev: true
|
||||
'@types/lodash': 4.14.195
|
||||
dev: false
|
||||
|
||||
/@types/lodash@4.14.194:
|
||||
resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==}
|
||||
dev: true
|
||||
/@types/lodash@4.14.195:
|
||||
resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==}
|
||||
dev: false
|
||||
|
||||
/@types/node@18.16.10:
|
||||
resolution: {integrity: sha512-sMo3EngB6QkMBlB9rBe1lFdKSLqljyWPPWv6/FzSxh/IDlyVWSzE9RiF4eAuerQHybrWdqBgAGb03PM89qOasA==}
|
||||
@ -2139,7 +2138,7 @@ packages:
|
||||
|
||||
/async-validator@4.2.5:
|
||||
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/async@3.2.4:
|
||||
resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
|
||||
@ -2392,7 +2391,7 @@ packages:
|
||||
dependencies:
|
||||
'@emotion/hash': 0.8.0
|
||||
csstype: 3.0.11
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/cssesc@3.0.0:
|
||||
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
|
||||
@ -2402,7 +2401,7 @@ packages:
|
||||
|
||||
/csstype@3.0.11:
|
||||
resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/csstype@3.1.2:
|
||||
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
|
||||
@ -2413,14 +2412,14 @@ packages:
|
||||
date-fns: '>=2.0.0'
|
||||
dependencies:
|
||||
date-fns: 2.30.0
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/date-fns@2.30.0:
|
||||
resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
|
||||
engines: {node: '>=0.11'}
|
||||
dependencies:
|
||||
'@babel/runtime': 7.21.5
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/de-indent@1.0.2:
|
||||
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
|
||||
@ -2759,7 +2758,7 @@ packages:
|
||||
|
||||
/evtd@0.2.4:
|
||||
resolution: {integrity: sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/fast-deep-equal@3.1.3:
|
||||
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
||||
@ -3043,7 +3042,7 @@ packages:
|
||||
/highlight.js@11.8.0:
|
||||
resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==}
|
||||
engines: {node: '>=12.0.0'}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/hosted-git-info@2.8.9:
|
||||
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
|
||||
@ -3375,7 +3374,7 @@ packages:
|
||||
|
||||
/lodash-es@4.17.21:
|
||||
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/lodash.debounce@4.0.8:
|
||||
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
|
||||
@ -3391,7 +3390,6 @@ packages:
|
||||
|
||||
/lodash@4.17.21:
|
||||
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
||||
dev: true
|
||||
|
||||
/lru-cache@5.1.1:
|
||||
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
|
||||
@ -3483,15 +3481,15 @@ packages:
|
||||
thenify-all: 1.6.0
|
||||
dev: true
|
||||
|
||||
/naive-ui@2.34.3(vue@3.3.2):
|
||||
resolution: {integrity: sha512-fUMr0dzb/iGsOTWgoblPVobY5X5dihQ1eam5dA+H74oyLYAvgX4pL96xQFPBLIYqvyRFBAsN85kHN5pLqdtpxA==}
|
||||
/naive-ui@2.34.4(vue@3.3.2):
|
||||
resolution: {integrity: sha512-aPG8PDfhSzIzn/jSC9y3Jb3Pe2wHJ7F0cFV1EWlbImSrZECeUmoc+fIcOSWbizoztkKfaUAeKwYdMl09MKkj1g==}
|
||||
peerDependencies:
|
||||
vue: ^3.0.0
|
||||
dependencies:
|
||||
'@css-render/plugin-bem': 0.15.12(css-render@0.15.12)
|
||||
'@css-render/vue3-ssr': 0.15.12(vue@3.3.2)
|
||||
'@types/katex': 0.14.0
|
||||
'@types/lodash': 4.14.194
|
||||
'@types/lodash': 4.14.195
|
||||
'@types/lodash-es': 4.17.7
|
||||
async-validator: 4.2.5
|
||||
css-render: 0.15.12
|
||||
@ -3507,7 +3505,7 @@ packages:
|
||||
vooks: 0.2.12(vue@3.3.2)
|
||||
vue: 3.3.2
|
||||
vueuc: 0.4.51(vue@3.3.2)
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/nanoid@3.3.6:
|
||||
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
|
||||
@ -3937,7 +3935,6 @@ packages:
|
||||
|
||||
/regenerator-runtime@0.13.11:
|
||||
resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
|
||||
dev: true
|
||||
|
||||
/regenerator-transform@0.15.1:
|
||||
resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==}
|
||||
@ -4053,7 +4050,7 @@ packages:
|
||||
|
||||
/seemly@0.3.6:
|
||||
resolution: {integrity: sha512-lEV5VB8BUKTo/AfktXJcy+JeXns26ylbMkIUco8CYREsQijuz4mrXres2Q+vMLdwkuLxJdIPQ8IlCIxLYm71Yw==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/semver@5.7.1:
|
||||
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
|
||||
@ -4375,7 +4372,7 @@ packages:
|
||||
|
||||
/treemate@0.3.11:
|
||||
resolution: {integrity: sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/ts-interface-checker@0.1.13:
|
||||
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
||||
@ -4509,7 +4506,7 @@ packages:
|
||||
dependencies:
|
||||
evtd: 0.2.4
|
||||
vue: 3.3.2
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/vite-plugin-pwa@0.14.7(vite@4.3.6)(workbox-build@6.5.4)(workbox-window@6.6.0):
|
||||
resolution: {integrity: sha512-dNJaf0fYOWncmjxv9HiSa2xrSjipjff7IkYE5oIUJ2x5HKu3cXgA8LRgzOwTc5MhwyFYRSU0xyN0Phbx3NsQYw==}
|
||||
@ -4570,7 +4567,7 @@ packages:
|
||||
dependencies:
|
||||
evtd: 0.2.4
|
||||
vue: 3.3.2
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/vue-demi@0.14.1(vue@3.3.2):
|
||||
resolution: {integrity: sha512-rt+yuCtXvscYot9SQQj3WKZJVSriPNqVkpVBNEHPzSgBv7QIYzsS410VqVgvx8f9AAPgjg+XPKvmV3vOqqkJQQ==}
|
||||
@ -4663,7 +4660,7 @@ packages:
|
||||
vdirs: 0.1.8(vue@3.3.2)
|
||||
vooks: 0.2.12(vue@3.3.2)
|
||||
vue: 3.3.2
|
||||
dev: true
|
||||
dev: false
|
||||
|
||||
/webidl-conversions@4.0.2:
|
||||
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
|
||||
|
@ -1,7 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import { NMessageProvider, NConfigProvider, type GlobalThemeOverrides, NDialogProvider } from 'naive-ui';
|
||||
import { RouterView } from 'vue-router';
|
||||
import ReloadPWA from '@/components/ReloadPWA/ReloadPWA.vue';
|
||||
|
||||
const themeOverrides: GlobalThemeOverrides = {
|
||||
common: {
|
||||
@ -17,7 +16,6 @@ const themeOverrides: GlobalThemeOverrides = {
|
||||
<NConfigProvider :theme-overrides="themeOverrides">
|
||||
<NDialogProvider>
|
||||
<NMessageProvider>
|
||||
<ReloadPWA />
|
||||
<RouterView />
|
||||
</NMessageProvider>
|
||||
</NDialogProvider>
|
||||
|
@ -134,10 +134,10 @@ const saveUserToken = () => {
|
||||
|
||||
<template>
|
||||
<NDropdown v-if="isMobile()" class="select-none" :show="isShowMore" :options="navConfigs" :render-label="renderDropdownLabel" @select="handleSelect">
|
||||
<NImage class="fixed top-6 right-4 cursor-pointer" :src="settingSvgUrl" alt="设置菜单" :preview-disabled="true" @click="isShowMore = !isShowMore"></NImage>
|
||||
<NImage class="fixed top-6 right-4 cursor-pointer z-50" :src="settingSvgUrl" alt="设置菜单" :preview-disabled="true" @click="isShowMore = !isShowMore"></NImage>
|
||||
</NDropdown>
|
||||
<NDropdown v-else class="select-none" trigger="hover" :options="navConfigs" :render-label="renderDropdownLabel" @select="handleSelect">
|
||||
<NImage class="fixed top-6 right-6 cursor-pointer" :src="settingSvgUrl" alt="设置菜单" :preview-disabled="true"></NImage>
|
||||
<NImage class="fixed top-6 right-6 cursor-pointer z-50" :src="settingSvgUrl" alt="设置菜单" :preview-disabled="true"></NImage>
|
||||
</NDropdown>
|
||||
<NModal v-model:show="isShowSetTokenModal" preset="dialog" :show-icon="false">
|
||||
<template #header>
|
||||
|
@ -1,44 +1,35 @@
|
||||
<script setup lang="ts">
|
||||
import { onMounted } from 'vue';
|
||||
import { ref } from 'vue';
|
||||
|
||||
defineProps<{
|
||||
isShow: boolean;
|
||||
}>();
|
||||
|
||||
const isRemoveLoading = ref(false);
|
||||
|
||||
const loadingRef = ref<HTMLDivElement>();
|
||||
|
||||
onMounted(() => {
|
||||
if (loadingRef.value) {
|
||||
loadingRef.value.addEventListener('transitionend', () => {
|
||||
isRemoveLoading.value = true;
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div v-if="!isRemoveLoading" ref="loadingRef" class="loading-spinner" :class="{ hidden: !isShow }">
|
||||
<div class="bounce1"></div>
|
||||
<div class="bounce2"></div>
|
||||
<div class="bounce3"></div>
|
||||
</div>
|
||||
<Transition name="fade">
|
||||
<div v-if="isShow" class="loading-spinner">
|
||||
<div class="bounce1"></div>
|
||||
<div class="bounce2"></div>
|
||||
<div class="bounce3"></div>
|
||||
</div>
|
||||
</Transition>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.fade-enter-active,
|
||||
.fade-leave-active {
|
||||
transition: opacity 2.5s ease;
|
||||
}
|
||||
|
||||
.fade-enter-from,
|
||||
.fade-leave-to {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.loading-spinner {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100vh;
|
||||
opacity: 1;
|
||||
transition: opacity 2s ease-out;
|
||||
}
|
||||
|
||||
.loading-spinner.hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.loading-spinner > div {
|
||||
|
@ -1,9 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import { NModal, NButton } from 'naive-ui';
|
||||
import { NModal, NButton, useMessage } from 'naive-ui';
|
||||
import { useRegisterSW } from 'virtual:pwa-register/vue';
|
||||
|
||||
const message = useMessage();
|
||||
const isShowModal = ref(false);
|
||||
const isUpdateLoading = ref(false);
|
||||
|
||||
const { offlineReady, needRefresh, updateServiceWorker } = useRegisterSW({
|
||||
immediate: true,
|
||||
@ -17,6 +19,7 @@ const { offlineReady, needRefresh, updateServiceWorker } = useRegisterSW({
|
||||
},
|
||||
onNeedRefresh() {
|
||||
isShowModal.value = true;
|
||||
// updateServiceWorker();
|
||||
},
|
||||
});
|
||||
|
||||
@ -25,13 +28,21 @@ const close = async () => {
|
||||
needRefresh.value = false;
|
||||
isShowModal.value = false;
|
||||
};
|
||||
|
||||
const update = async () => {
|
||||
isUpdateLoading.value = true;
|
||||
await updateServiceWorker();
|
||||
message.success('已切换新版');
|
||||
isUpdateLoading.value = false;
|
||||
isShowModal.value = false;
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<NModal v-model:show="isShowModal" preset="dialog" title="更新提示" content="新版本已经更新完毕,是否切换?">
|
||||
<template #action>
|
||||
<NButton size="large" @click="close">下次再说</NButton>
|
||||
<NButton ghost size="large" type="info" @click="updateServiceWorker()">立即切换</NButton>
|
||||
<NButton ghost size="large" type="info" @click="update" :loading="isUpdateLoading">立即切换</NButton>
|
||||
</template>
|
||||
</NModal>
|
||||
</template>
|
||||
|
@ -8,7 +8,9 @@ declare let self: ServiceWorkerGlobalScope;
|
||||
const CACHE_NAME_PREFIX = 'BingAI';
|
||||
|
||||
self.addEventListener('message', (event) => {
|
||||
if (event.data && event.data.type === 'SKIP_WAITING') self.skipWaiting();
|
||||
if (event.data && event.data.type === 'SKIP_WAITING') {
|
||||
self.skipWaiting();
|
||||
}
|
||||
});
|
||||
|
||||
// self.__WB_MANIFEST is default injection point
|
||||
@ -21,7 +23,9 @@ cleanupOutdatedCaches();
|
||||
registerRoute(new NavigationRoute(createHandlerBoundToURL('./index.html')));
|
||||
|
||||
registerRoute(
|
||||
({ request }) => request.destination === 'style' || request.destination === 'manifest' || request.destination === 'script' || request.destination === 'worker',
|
||||
({ request, url }) => {
|
||||
return request.destination === 'style' || request.destination === 'manifest' || request.destination === 'script' || request.destination === 'worker';
|
||||
},
|
||||
new StaleWhileRevalidate({
|
||||
cacheName: `${CACHE_NAME_PREFIX}-assets`,
|
||||
plugins: [new CacheableResponsePlugin({ statuses: [200] })],
|
||||
@ -44,3 +48,7 @@ registerRoute(
|
||||
],
|
||||
})
|
||||
);
|
||||
|
||||
self.addEventListener('install', (ev) => {
|
||||
self.skipWaiting();
|
||||
});
|
||||
|
@ -4,3 +4,31 @@ export const isMobile = () => {
|
||||
};
|
||||
|
||||
export const sleep = (timeout: number) => new Promise((resolve, reject) => setTimeout(resolve, timeout));
|
||||
|
||||
export const copy = async (text: string) => {
|
||||
if (navigator.clipboard && navigator.clipboard.writeText) {
|
||||
// 使用Clipboard API复制文本到剪贴板
|
||||
try {
|
||||
await navigator.clipboard.writeText(text);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('error : ', error);
|
||||
}
|
||||
}
|
||||
// 使用备用方案
|
||||
try {
|
||||
const ele = document.createElement('textarea');
|
||||
ele.value = text;
|
||||
ele.setAttribute('readonly', '');
|
||||
ele.style.position = 'absolute';
|
||||
ele.style.left = '-9999px';
|
||||
document.body.appendChild(ele);
|
||||
ele.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(ele);
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
@ -46,13 +46,14 @@ const initPwaOptions = (env: Record<string, string>) => {
|
||||
// type: 'module',
|
||||
// },
|
||||
strategies: 'injectManifest',
|
||||
workbox: {
|
||||
cleanupOutdatedCaches: true,
|
||||
clientsClaim: true,
|
||||
skipWaiting: true,
|
||||
},
|
||||
// workbox: {
|
||||
// cleanupOutdatedCaches: true,
|
||||
// clientsClaim: true,
|
||||
// skipWaiting: true,
|
||||
// },
|
||||
// 取消注册服务工作进程
|
||||
// selfDestroying: true,
|
||||
registerType: 'autoUpdate',
|
||||
};
|
||||
return pwaOptions;
|
||||
};
|
||||
|
@ -1 +0,0 @@
|
||||
.loading-spinner[data-v-aff729bc]{display:flex;justify-content:center;align-items:center;height:100vh;opacity:1;transition:opacity 2s ease-out}.loading-spinner.hidden[data-v-aff729bc]{opacity:0}.loading-spinner>div[data-v-aff729bc]{width:30px;height:30px;background:linear-gradient(90deg,#2870ea 10.79%,#1b4aef 87.08%);border-radius:100%;display:inline-block;animation:sk-bouncedelay-aff729bc 1.4s infinite ease-in-out both}.loading-spinner .bounce1[data-v-aff729bc]{animation-delay:-.32s}.loading-spinner .bounce2[data-v-aff729bc]{animation-delay:-.16s}@keyframes sk-bouncedelay-aff729bc{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}
|
1
web/assets/index-1dc749ba.css
Normal file
1
web/assets/index-1dc749ba.css
Normal file
@ -0,0 +1 @@
|
||||
.fade-enter-active[data-v-4813a901],.fade-leave-active[data-v-4813a901]{transition:opacity 2.5s ease}.fade-enter-from[data-v-4813a901],.fade-leave-to[data-v-4813a901]{opacity:0}.loading-spinner[data-v-4813a901]{display:flex;justify-content:center;align-items:center;height:100vh}.loading-spinner>div[data-v-4813a901]{width:30px;height:30px;background:linear-gradient(90deg,#2870ea 10.79%,#1b4aef 87.08%);border-radius:100%;display:inline-block;animation:sk-bouncedelay-4813a901 1.4s infinite ease-in-out both}.loading-spinner .bounce1[data-v-4813a901]{animation-delay:-.32s}.loading-spinner .bounce2[data-v-4813a901]{animation-delay:-.16s}@keyframes sk-bouncedelay-4813a901{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}
|
1
web/assets/index-29dab197.css
Normal file
1
web/assets/index-29dab197.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
651
web/assets/index-63d32cbb.js
Normal file
651
web/assets/index-63d32cbb.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,2 +0,0 @@
|
||||
try{self["workbox:window:6.5.4"]&&_()}catch{}function S(t,r){return new Promise(function(e){var i=new MessageChannel;i.port1.onmessage=function(f){e(f.data)},t.postMessage(r,[i.port2])})}function W(t,r){for(var e=0;e<r.length;e++){var i=r[e];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function E(t,r){(r==null||r>t.length)&&(r=t.length);for(var e=0,i=new Array(r);e<r;e++)i[e]=t[e];return i}function k(t,r){var e;if(typeof Symbol>"u"||t[Symbol.iterator]==null){if(Array.isArray(t)||(e=function(f,d){if(f){if(typeof f=="string")return E(f,d);var h=Object.prototype.toString.call(f).slice(8,-1);return h==="Object"&&f.constructor&&(h=f.constructor.name),h==="Map"||h==="Set"?Array.from(f):h==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(h)?E(f,d):void 0}}(t))||r&&t&&typeof t.length=="number"){e&&(t=e);var i=0;return function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.
|
||||
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}return(e=t[Symbol.iterator]()).next.bind(e)}try{self["workbox:core:6.5.4"]&&_()}catch{}var y=function(){var t=this;this.promise=new Promise(function(r,e){t.resolve=r,t.reject=e})};function b(t,r){var e=location.href;return new URL(t,e).href===new URL(r,e).href}var g=function(t,r){this.type=t,Object.assign(this,r)};function p(t,r,e){return e?r?r(t):t:(t&&t.then||(t=Promise.resolve(t)),r?t.then(r):t)}function L(){}var j={type:"SKIP_WAITING"};function P(t,r){if(!r)return t&&t.then?t.then(L):Promise.resolve()}var x=function(t){var r,e;function i(v,c){var n,o;return c===void 0&&(c={}),(n=t.call(this)||this).nn={},n.tn=0,n.rn=new y,n.en=new y,n.on=new y,n.un=0,n.an=new Set,n.cn=function(){var s=n.fn,a=s.installing;n.tn>0||!b(a.scriptURL,n.sn.toString())||performance.now()>n.un+6e4?(n.vn=a,s.removeEventListener("updatefound",n.cn)):(n.hn=a,n.an.add(a),n.rn.resolve(a)),++n.tn,a.addEventListener("statechange",n.ln)},n.ln=function(s){var a=n.fn,u=s.target,l=u.state,m=u===n.vn,w={sw:u,isExternal:m,originalEvent:s};!m&&n.mn&&(w.isUpdate=!0),n.dispatchEvent(new g(l,w)),l==="installed"?n.wn=self.setTimeout(function(){l==="installed"&&a.waiting===u&&n.dispatchEvent(new g("waiting",w))},200):l==="activating"&&(clearTimeout(n.wn),m||n.en.resolve(u))},n.dn=function(s){var a=n.hn,u=a!==navigator.serviceWorker.controller;n.dispatchEvent(new g("controlling",{isExternal:u,originalEvent:s,sw:a,isUpdate:n.mn})),u||n.on.resolve(a)},n.gn=(o=function(s){var a=s.data,u=s.ports,l=s.source;return p(n.getSW(),function(){n.an.has(l)&&n.dispatchEvent(new g("message",{data:a,originalEvent:s,ports:u,sw:l}))})},function(){for(var s=[],a=0;a<arguments.length;a++)s[a]=arguments[a];try{return Promise.resolve(o.apply(this,s))}catch(u){return Promise.reject(u)}}),n.sn=v,n.nn=c,navigator.serviceWorker.addEventListener("message",n.gn),n}e=t,(r=i).prototype=Object.create(e.prototype),r.prototype.constructor=r,r.__proto__=e;var f,d,h=i.prototype;return h.register=function(v){var c=(v===void 0?{}:v).immediate,n=c!==void 0&&c;try{var o=this;return function(s,a){var u=s();return u&&u.then?u.then(a):a(u)}(function(){if(!n&&document.readyState!=="complete")return P(new Promise(function(s){return window.addEventListener("load",s)}))},function(){return o.mn=!!navigator.serviceWorker.controller,o.yn=o.pn(),p(o.bn(),function(s){o.fn=s,o.yn&&(o.hn=o.yn,o.en.resolve(o.yn),o.on.resolve(o.yn),o.yn.addEventListener("statechange",o.ln,{once:!0}));var a=o.fn.waiting;return a&&b(a.scriptURL,o.sn.toString())&&(o.hn=a,Promise.resolve().then(function(){o.dispatchEvent(new g("waiting",{sw:a,wasWaitingBeforeRegister:!0}))}).then(function(){})),o.hn&&(o.rn.resolve(o.hn),o.an.add(o.hn)),o.fn.addEventListener("updatefound",o.cn),navigator.serviceWorker.addEventListener("controllerchange",o.dn),o.fn})})}catch(s){return Promise.reject(s)}},h.update=function(){try{return this.fn?P(this.fn.update()):void 0}catch(v){return Promise.reject(v)}},h.getSW=function(){return this.hn!==void 0?Promise.resolve(this.hn):this.rn.promise},h.messageSW=function(v){try{return p(this.getSW(),function(c){return S(c,v)})}catch(c){return Promise.reject(c)}},h.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&S(this.fn.waiting,j)},h.pn=function(){var v=navigator.serviceWorker.controller;return v&&b(v.scriptURL,this.sn.toString())?v:void 0},h.bn=function(){try{var v=this;return function(c,n){try{var o=c()}catch(s){return n(s)}return o&&o.then?o.then(void 0,n):o}(function(){return p(navigator.serviceWorker.register(v.sn,v.nn),function(c){return v.un=performance.now(),c})},function(c){throw c})}catch(c){return Promise.reject(c)}},f=i,(d=[{key:"active",get:function(){return this.en.promise}},{key:"controlling",get:function(){return this.on.promise}}])&&W(f.prototype,d),i}(function(){function t(){this.Pn=new Map}var r=t.prototype;return r.addEventListener=function(e,i){this.Sn(e).add(i)},r.removeEventListener=function(e,i){this.Sn(e).delete(i)},r.dispatchEvent=function(e){e.target=this;for(var i,f=k(this.Sn(e.type));!(i=f()).done;)(0,i.value)(e)},r.Sn=function(e){return this.Pn.has(e)||this.Pn.set(e,new Set),this.Pn.get(e)},t}());export{x as Workbox,g as WorkboxEvent,S as messageSW};
|
@ -40,9 +40,9 @@
|
||||
<script src="/web/js/bing/chat/global.js"></script>
|
||||
<script src="/web/js/bing/chat/amd.js"></script>
|
||||
<script src="/web/js/bing/chat/config.js"></script>
|
||||
<script type="module" crossorigin src="/web/assets/index-8a670f2e.js"></script>
|
||||
<link rel="stylesheet" href="/web/assets/index-2c05b5de.css">
|
||||
<link rel="manifest" href="/web/manifest.webmanifest"></head>
|
||||
<script type="module" crossorigin src="/web/assets/index-63d32cbb.js"></script>
|
||||
<link rel="stylesheet" href="/web/assets/index-29dab197.css">
|
||||
<link rel="manifest" href="/web/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/web/registerSW.js"></script></head>
|
||||
|
||||
<body>
|
||||
<div id="b_sydHeadBg"></div>
|
||||
|
1
web/registerSW.js
Normal file
1
web/registerSW.js
Normal file
@ -0,0 +1 @@
|
||||
if('serviceWorker' in navigator) {window.addEventListener('load', () => {navigator.serviceWorker.register('/web/sw.js', { scope: '/web/' })})}
|
Loading…
x
Reference in New Issue
Block a user