├── .editorconfig ├── .env.dev ├── .env.pro ├── .eslintrc.js ├── .github └── workflows │ ├── build.yml │ └── doc.yml ├── .gitignore ├── LICENSE ├── README.md ├── deploys ├── README.md ├── other │ ├── Dockerfile │ ├── Procfile │ ├── README.md │ ├── docker-compose.yml │ ├── gun.conf │ ├── index.py │ ├── requirements.txt │ ├── scf_bootstrap │ └── static │ │ ├── css │ │ ├── ImgManage-77057876.css │ │ ├── index-020a9439.css │ │ └── index-020a9439.css.gz │ │ ├── favicon.ico │ │ ├── img │ │ ├── icons │ │ │ ├── android-chrome-192x192.png │ │ │ ├── android-chrome-512x512.png │ │ │ ├── android-chrome-maskable-192x192.png │ │ │ ├── android-chrome-maskable-512x512.png │ │ │ ├── apple-touch-icon-120x120.png │ │ │ ├── apple-touch-icon-152x152.png │ │ │ ├── apple-touch-icon-180x180.png │ │ │ ├── apple-touch-icon-60x60.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon.png │ │ │ ├── favicon-32x32.png │ │ │ ├── logo-128x128.png │ │ │ ├── logo-16x16.png │ │ │ ├── logo-256x256.png │ │ │ ├── logo-64x64.png │ │ │ ├── logo.svg │ │ │ ├── logo.svg.gz │ │ │ ├── msapplication-icon-144x144.png │ │ │ ├── mstile-150x150.png │ │ │ └── safari-pinned-tab.svg │ │ ├── loading.gif │ │ ├── loading1.gif │ │ └── logo.svg │ │ ├── index.html │ │ ├── js │ │ ├── ImgManage-51787f1b.js │ │ ├── ImgManage-51787f1b.js.gz │ │ ├── ImgManage-legacy-122a9e28.js │ │ ├── ImgManage-legacy-122a9e28.js.gz │ │ ├── index-6fefb80f.js │ │ ├── index-6fefb80f.js.gz │ │ ├── index-legacy-f9e9823f.js │ │ ├── index-legacy-f9e9823f.js.gz │ │ ├── polyfills-legacy-69e47d67.js │ │ └── polyfills-legacy-69e47d67.js.gz │ │ ├── manifest.json │ │ ├── robots.txt │ │ ├── sw.js │ │ └── workbox-97c586e7.js └── vercel-api │ ├── api │ ├── index.py │ └── static │ │ ├── css │ │ ├── ImgManage-77057876.css │ │ ├── index-020a9439.css │ │ └── index-020a9439.css.gz │ │ ├── favicon.ico │ │ ├── img │ │ ├── icons │ │ │ ├── android-chrome-192x192.png │ │ │ ├── android-chrome-512x512.png │ │ │ ├── android-chrome-maskable-192x192.png │ │ │ ├── android-chrome-maskable-512x512.png │ │ │ ├── apple-touch-icon-120x120.png │ │ │ ├── apple-touch-icon-152x152.png │ │ │ ├── apple-touch-icon-180x180.png │ │ │ ├── apple-touch-icon-60x60.png │ │ │ ├── apple-touch-icon-76x76.png │ │ │ ├── apple-touch-icon.png │ │ │ ├── favicon-32x32.png │ │ │ ├── logo-128x128.png │ │ │ ├── logo-16x16.png │ │ │ ├── logo-256x256.png │ │ │ ├── logo-64x64.png │ │ │ ├── logo.svg │ │ │ ├── logo.svg.gz │ │ │ ├── msapplication-icon-144x144.png │ │ │ ├── mstile-150x150.png │ │ │ └── safari-pinned-tab.svg │ │ ├── loading.gif │ │ ├── loading1.gif │ │ └── logo.svg │ │ ├── index.html │ │ ├── js │ │ ├── ImgManage-51787f1b.js │ │ ├── ImgManage-51787f1b.js.gz │ │ ├── ImgManage-legacy-122a9e28.js │ │ ├── ImgManage-legacy-122a9e28.js.gz │ │ ├── index-6fefb80f.js │ │ ├── index-6fefb80f.js.gz │ │ ├── index-legacy-f9e9823f.js │ │ ├── index-legacy-f9e9823f.js.gz │ │ ├── polyfills-legacy-69e47d67.js │ │ └── polyfills-legacy-69e47d67.js.gz │ │ ├── manifest.json │ │ ├── robots.txt │ │ ├── sw.js │ │ └── workbox-97c586e7.js │ ├── package.json │ ├── requirements.txt │ └── vercel.json ├── docs ├── .vitepress │ ├── config.js │ ├── configs │ │ ├── head.js │ │ ├── index.js │ │ ├── markdown.js │ │ ├── nav.js │ │ └── sidebar.js │ ├── dist │ │ ├── 404.html │ │ ├── CNAME │ │ ├── favicon.ico │ │ ├── guide │ │ │ ├── config.html │ │ │ ├── contribution │ │ │ │ ├── issue.html │ │ │ │ ├── start.html │ │ │ │ └── update.html │ │ │ ├── deploy │ │ │ │ ├── docker.html │ │ │ │ ├── heroku.html │ │ │ │ ├── serverless.html │ │ │ │ └── vercel.html │ │ │ ├── environment.html │ │ │ ├── prepare.html │ │ │ └── summary.html │ │ ├── hashmap.json │ │ ├── img │ │ │ ├── logo.svg │ │ │ └── txy.svg │ │ └── index.html │ ├── theme-default │ │ ├── Comment.vue │ │ ├── Layout.vue │ │ ├── NotFound.vue │ │ ├── components │ │ │ ├── VPAlgoliaSearchBox.vue │ │ │ ├── VPBackdrop.vue │ │ │ ├── VPButton.vue │ │ │ ├── VPCarbonAds.vue │ │ │ ├── VPContent.vue │ │ │ ├── VPDoc.vue │ │ │ ├── VPDocAside.vue │ │ │ ├── VPDocAsideCarbonAds.vue │ │ │ ├── VPDocAsideOutline.vue │ │ │ ├── VPDocAsideSponsors.vue │ │ │ ├── VPDocFooter.vue │ │ │ ├── VPDocFooterLastUpdated.vue │ │ │ ├── VPFeature.vue │ │ │ ├── VPFeatures.vue │ │ │ ├── VPFlyout.vue │ │ │ ├── VPFooter.vue │ │ │ ├── VPHero.vue │ │ │ ├── VPHome.vue │ │ │ ├── VPHomeFeatures.vue │ │ │ ├── VPHomeHero.vue │ │ │ ├── VPHomeSponsors.vue │ │ │ ├── VPImage.vue │ │ │ ├── VPLink.vue │ │ │ ├── VPLocalNav.vue │ │ │ ├── VPMenu.vue │ │ │ ├── VPMenuGroup.vue │ │ │ ├── VPMenuLink.vue │ │ │ ├── VPNav.vue │ │ │ ├── VPNavBar.vue │ │ │ ├── VPNavBarAppearance.vue │ │ │ ├── VPNavBarExtra.vue │ │ │ ├── VPNavBarHamburger.vue │ │ │ ├── VPNavBarMenu.vue │ │ │ ├── VPNavBarMenuGroup.vue │ │ │ ├── VPNavBarMenuLink.vue │ │ │ ├── VPNavBarSearch.vue │ │ │ ├── VPNavBarSocialLinks.vue │ │ │ ├── VPNavBarTitle.vue │ │ │ ├── VPNavBarTranslations.vue │ │ │ ├── VPNavScreen.vue │ │ │ ├── VPNavScreenAppearance.vue │ │ │ ├── VPNavScreenMenu.vue │ │ │ ├── VPNavScreenMenuGroup.vue │ │ │ ├── VPNavScreenMenuGroupLink.vue │ │ │ ├── VPNavScreenMenuGroupSection.vue │ │ │ ├── VPNavScreenMenuLink.vue │ │ │ ├── VPNavScreenSocialLinks.vue │ │ │ ├── VPNavScreenTranslations.vue │ │ │ ├── VPPage.vue │ │ │ ├── VPSidebar.vue │ │ │ ├── VPSidebarGroup.vue │ │ │ ├── VPSidebarLink.vue │ │ │ ├── VPSkipLink.vue │ │ │ ├── VPSocialLink.vue │ │ │ ├── VPSocialLinks.vue │ │ │ ├── VPSponsors.vue │ │ │ ├── VPSponsorsGrid.vue │ │ │ ├── VPSwitch.vue │ │ │ ├── VPSwitchAppearance.vue │ │ │ ├── VPTeamMembers.vue │ │ │ ├── VPTeamMembersItem.vue │ │ │ ├── VPTeamPage.vue │ │ │ ├── VPTeamPageSection.vue │ │ │ ├── VPTeamPageTitle.vue │ │ │ └── icons │ │ │ │ ├── VPIconAlignJustify.vue │ │ │ │ ├── VPIconAlignLeft.vue │ │ │ │ ├── VPIconAlignRight.vue │ │ │ │ ├── VPIconArrowLeft.vue │ │ │ │ ├── VPIconArrowRight.vue │ │ │ │ ├── VPIconChevronDown.vue │ │ │ │ ├── VPIconChevronLeft.vue │ │ │ │ ├── VPIconChevronRight.vue │ │ │ │ ├── VPIconChevronUp.vue │ │ │ │ ├── VPIconDiscord.vue │ │ │ │ ├── VPIconEdit.vue │ │ │ │ ├── VPIconExternalLink.vue │ │ │ │ ├── VPIconFacebook.vue │ │ │ │ ├── VPIconGitHub.vue │ │ │ │ ├── VPIconHeart.vue │ │ │ │ ├── VPIconInstagram.vue │ │ │ │ ├── VPIconLanguages.vue │ │ │ │ ├── VPIconLinkedIn.vue │ │ │ │ ├── VPIconMinus.vue │ │ │ │ ├── VPIconMinusSquare.vue │ │ │ │ ├── VPIconMoon.vue │ │ │ │ ├── VPIconMoreHorizontal.vue │ │ │ │ ├── VPIconPlus.vue │ │ │ │ ├── VPIconPlusSquare.vue │ │ │ │ ├── VPIconSlack.vue │ │ │ │ ├── VPIconSun.vue │ │ │ │ ├── VPIconTwitter.vue │ │ │ │ └── VPIconYouTube.vue │ │ ├── composables │ │ │ ├── aside.js │ │ │ ├── copy-code.js │ │ │ ├── edit-link.js │ │ │ ├── flyout.js │ │ │ ├── nav.js │ │ │ ├── outline.js │ │ │ ├── prev-next.js │ │ │ ├── sidebar.js │ │ │ └── sponsor-grid.js │ │ ├── fonts │ │ │ ├── inter-cyrillic-ext.woff2 │ │ │ ├── inter-cyrillic.woff2 │ │ │ ├── inter-greek-ext.woff2 │ │ │ ├── inter-greek.woff2 │ │ │ ├── inter-italic-cyrillic-ext.woff2 │ │ │ ├── inter-italic-cyrillic.woff2 │ │ │ ├── inter-italic-greek-ext.woff2 │ │ │ ├── inter-italic-greek.woff2 │ │ │ ├── inter-italic-latin-ext.woff2 │ │ │ ├── inter-italic-latin.woff2 │ │ │ ├── inter-italic-vietnamese.woff2 │ │ │ ├── inter-latin-ext.woff2 │ │ │ ├── inter-latin.woff2 │ │ │ ├── inter-roman-cyrillic-ext.woff2 │ │ │ ├── inter-roman-cyrillic.woff2 │ │ │ ├── inter-roman-greek-ext.woff2 │ │ │ ├── inter-roman-greek.woff2 │ │ │ ├── inter-roman-latin-ext.woff2 │ │ │ ├── inter-roman-latin.woff2 │ │ │ ├── inter-roman-vietnamese.woff2 │ │ │ └── inter-vietnamese.woff2 │ │ ├── index.js │ │ ├── shared.js │ │ ├── styles │ │ │ ├── base.css │ │ │ ├── components │ │ │ │ ├── custom-block.css │ │ │ │ ├── vp-code.css │ │ │ │ ├── vp-doc.css │ │ │ │ └── vp-sponsor.css │ │ │ ├── fonts.css │ │ │ ├── utils.css │ │ │ └── vars.css │ │ └── support │ │ │ ├── sidebar.js │ │ │ └── utils.js │ └── theme │ │ ├── components │ │ └── Comment.vue │ │ ├── css │ │ └── index.css │ │ └── index.js ├── guide │ ├── config.md │ ├── contribution │ │ ├── issue.md │ │ ├── start.md │ │ └── update.md │ ├── deploy │ │ ├── docker.md │ │ ├── heroku.md │ │ ├── netlify.md │ │ ├── serverless.md │ │ └── vercel.md │ ├── environment.md │ ├── prepare.md │ └── summary.md ├── index.md ├── package.json ├── pnpm-lock.yaml └── public │ ├── CNAME │ ├── favicon.ico │ └── img │ ├── logo.svg │ └── txy.svg ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public ├── favicon.ico ├── img │ ├── icons │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── android-chrome-maskable-192x192.png │ │ ├── android-chrome-maskable-512x512.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── apple-touch-icon-60x60.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-32x32.png │ │ ├── logo-128x128.png │ │ ├── logo-16x16.png │ │ ├── logo-256x256.png │ │ ├── logo-64x64.png │ │ ├── logo.svg │ │ ├── logo.svg.gz │ │ ├── msapplication-icon-144x144.png │ │ ├── mstile-150x150.png │ │ └── safari-pinned-tab.svg │ ├── loading.gif │ ├── loading1.gif │ └── logo.svg ├── manifest.json └── robots.txt ├── src ├── App.vue ├── assets │ └── css │ │ ├── comm.less │ │ ├── element-variables.scss │ │ ├── global.less │ │ └── themeSet.less ├── components │ ├── loading │ │ └── MarkLoad.vue │ ├── picprew │ │ └── PicPreview.vue │ ├── setting │ │ ├── SettingView.vue │ │ └── Settingview.module.less │ └── switchtheme │ │ └── SwitchTheme.vue ├── config │ ├── build-vite.js │ ├── cdn.js │ ├── css-vite.js │ ├── index.js │ ├── plugin-vite.js │ ├── resolve-vite.js │ ├── server-vite.js │ └── vue.config.js ├── main.js ├── main.prod.js ├── package │ └── checkbox │ │ ├── index.js │ │ └── src │ │ ├── checkbox-group.vue │ │ └── checkbox.vue ├── plugin │ ├── elements.js │ ├── filter.js │ └── htmlcav.js ├── router │ └── index.js ├── store │ └── index.js ├── utils │ ├── api │ │ └── index.js │ ├── common │ │ ├── compress.js │ │ ├── loading.js │ │ ├── login.js │ │ └── paste.js │ └── http.js └── views │ ├── About │ ├── About.vue │ └── about.module.less │ ├── ImgManage │ ├── ImageItem │ │ ├── ImageItem.vue │ │ ├── imageitem.module.less │ │ └── moremsg │ │ │ └── MoreMsg.vue │ ├── ImgManage.vue │ ├── contextMenu │ │ ├── ContextMenu.vue │ │ └── contextmenu.module.less │ └── imgmanage.module.less │ ├── Setting │ ├── Setting.vue │ ├── setDefault │ │ ├── SetDefault.vue │ │ └── setdefault.module.less │ ├── setMain │ │ ├── SetCompress.vue │ │ └── setcom.module.less │ ├── setUploadFile │ │ ├── SetUpload.vue │ │ └── setupload.module.less │ ├── setcopy │ │ └── SetCopy.vue │ ├── setdefaultCopy │ │ └── SetDefaultCopy.vue │ ├── setprefix │ │ ├── SetPrefix.vue │ │ └── setpre.module.less │ ├── setting.module.less │ └── setwatermark │ │ ├── SetWatermark.vue │ │ ├── setwate.module.less │ │ └── watermark │ │ ├── watermark.module.less │ │ └── watermarkview.vue │ ├── TabNav │ ├── TabNav.vue │ └── tannav.module.less │ ├── formview │ ├── FormView.vue │ └── formview.module.less │ ├── home │ ├── Home.vue │ ├── components │ │ ├── UploadList.vue │ │ ├── upload.module.less │ │ └── wm │ │ │ ├── wmarkview.module.less │ │ │ └── wmarkview.vue │ └── home.module.less │ └── svg │ ├── CloseSvg.vue │ ├── CopyAll.vue │ ├── CopyView.vue │ ├── DeleteSelect.vue │ ├── LargeList.vue │ ├── LayOut.vue │ ├── MarkDown.vue │ ├── Refresh.vue │ ├── SettingSvg.vue │ ├── SignSvg.vue │ ├── TextSet.vue │ ├── TogChecked.vue │ ├── VPIconGitHub.vue │ ├── VPIconMoon.vue │ ├── VPIconSun.vue │ ├── sortView.vue │ └── uploadTaggle.vue ├── vite.config.js └── workbox-config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /.env.dev: -------------------------------------------------------------------------------- 1 | NODE_ENV=dev 2 | VITE_ENV=dev 3 | VUE_APP_URL= '/v1' 4 | VUE_APP_PUBLICPATH = '/' -------------------------------------------------------------------------------- /.env.pro: -------------------------------------------------------------------------------- 1 | NODE_ENV=pro 2 | VITE_ENV=pro 3 | VUE_APP_URL= '/' 4 | VUE_APP_PUBLICPATH = '/' -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-24 11:17:52 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-24 20:48:54 7 | * @FilePath: \vite\.eslintrc.js 8 | */ 9 | module.exports = { 10 | root: true, 11 | env: { 12 | node: true 13 | }, 14 | extends: [ 15 | 'plugin:vue/essential', 16 | '@vue/standard' 17 | ], 18 | parserOptions: { 19 | parser: 'babel-eslint' 20 | }, 21 | rules: { 22 | // 'no-console': process.env.NODE_ENV === 'pro' ? 'warn' : 'off', 23 | // 'no-debugger': process.env.NODE_ENV === 'pro' ? 'warn' : 'off', 24 | 'space-before-function-paren': 0 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build-and-deploy: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v3 15 | 16 | - name: Set up Node.js 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: 18 20 | 21 | - name: Install pnpm 22 | run: npm install -g pnpm 23 | 24 | - name: Configure pnpm global bin directory 25 | run: | 26 | mkdir -p ~/.pnpm-global 27 | pnpm config set global-bin-dir ~/.pnpm-global 28 | 29 | - name: Add pnpm global bin to PATH 30 | run: echo "$HOME/.pnpm-global" >> $GITHUB_PATH 31 | 32 | - name: Install dependencies 33 | run: pnpm install 34 | 35 | - name: Build project 36 | run: pnpm run build 37 | 38 | - name: Remove old static files 39 | run: | 40 | rm -rf deploys/vercel-api/api/static 41 | rm -rf deploys/other/static 42 | 43 | - name: Copy dist files 44 | run: | 45 | mkdir -p deploys/vercel-api/api/static 46 | mkdir -p deploys/other/static 47 | cp -r dist/* deploys/vercel-api/api/static 48 | cp -r dist/* deploys/other/static 49 | 50 | - name: Commit and Push Changes 51 | run: | 52 | git config --global user.email "1577791638@qq.com" 53 | git config --global user.name "ryanuo" 54 | git add . 55 | git diff-index --quiet HEAD || git commit -m "chore: auto update deploy static files;" 56 | git push -------------------------------------------------------------------------------- /.github/workflows/doc.yml: -------------------------------------------------------------------------------- 1 | name: Build and Deploy Docs 2 | 3 | on: 4 | push: 5 | branches: 6 | - master # 当在main分支上有代码推送时触发 7 | 8 | jobs: 9 | docs-build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout code 14 | uses: actions/checkout@v3 # 检出代码 15 | 16 | - name: Setup Node.js 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: '18' 20 | 21 | - name: Install pnpm & build 22 | run: | 23 | cd docs 24 | npm install -g pnpm 25 | mkdir -p ~/.pnpm-global 26 | pnpm config set global-bin-dir ~/.pnpm-global 27 | echo "$HOME/.pnpm-global" >> $GITHUB_PATH 28 | pnpm install 29 | pnpm run docs:b 30 | 31 | - name: Deploy to gh-pages 32 | uses: JamesIves/github-pages-deploy-action@v4.6.1 # 使用部署到gh-pages的Action 33 | with: 34 | token: ${{ secrets.ACCESS_TOKEN }} # GitHub Token,需要在仓库Secrets中设置 35 | branch: master # 要部署到的分支 36 | repository-name: blazeb2/blazeb2.github.io 37 | folder: ./docs/.vitepress/dist 38 | 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | # dist 4 | *.map 5 | # local env files 6 | #.env.local 7 | #.env.*.local 8 | *.bat 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | pnpm-debug.log* 14 | package-lock.json 15 | # docs 16 | thd 17 | # Editor directories and files 18 | .idea 19 | .vscode 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | dist 26 | cache/ -------------------------------------------------------------------------------- /deploys/README.md: -------------------------------------------------------------------------------- 1 | ## 文件介绍 2 | 3 | 1. **vercel-api** 为vercel部署文件 4 | 2. **thd** 为腾讯云函数,Heroku,docker部署 文件 -------------------------------------------------------------------------------- /deploys/other/Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/Dockerfile -------------------------------------------------------------------------------- /deploys/other/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn index:app -------------------------------------------------------------------------------- /deploys/other/README.md: -------------------------------------------------------------------------------- 1 | ## 部署项目 2 | 3 | 1. 腾讯云函数 4 | 2. vercel部署 5 | 3. Heroku 部署 -------------------------------------------------------------------------------- /deploys/other/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | flask_test: 4 | image: flask-test:1.0 # 生成的镜像的名称 和 tag 5 | build: . # 一键构建镜像 ================= 以上为构建命令,以下为运行命令 6 | restart: always # 总是重启 7 | container_name: flask_v1 # 运行后的容器的名称 8 | ports: 9 | - "7008:9000" # 端口映射, 这里是将 docker 容器内的 80 端口映射到云服务器的 7008 端口 -------------------------------------------------------------------------------- /deploys/other/gun.conf: -------------------------------------------------------------------------------- 1 | # 并行工作进程数 2 | workers = 1 3 | # 指定每个工作者的线程数 4 | threads = 2 5 | # 监听内网端口80 6 | bind = '0.0.0.0:9000' 7 | # 工作模式协程 8 | worker_class = 'gevent' 9 | # 设置最大并发量 10 | worker_connections = 2000 11 | # 设置进程文件目录 12 | pidfile = 'gunicorn.pid' 13 | # 设置访问日志和错误信息日志路径 14 | accesslog = 'gunicorn_acess.log' 15 | errorlog = 'gunicorn_error.log' 16 | # 设置日志记录水平 17 | loglevel = 'info' 18 | # 代码发生变化是否自动重启 19 | reload=True -------------------------------------------------------------------------------- /deploys/other/requirements.txt: -------------------------------------------------------------------------------- 1 | click 2 | colorama==0.4.4 3 | Flask==2.0.1 4 | gunicorn==20.1.0 5 | gevent 6 | itsdangerous==2.0.1 7 | Jinja2==3.0.1 8 | MarkupSafe==2.0.1 9 | Werkzeug==2.0.1 10 | requests 11 | serverless-wsgi==1.7.8 -------------------------------------------------------------------------------- /deploys/other/scf_bootstrap: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | /var/lang/python37/bin/python3 -u index.py -------------------------------------------------------------------------------- /deploys/other/static/css/index-020a9439.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/css/index-020a9439.css.gz -------------------------------------------------------------------------------- /deploys/other/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/favicon.ico -------------------------------------------------------------------------------- /deploys/other/static/img/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/android-chrome-maskable-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/android-chrome-maskable-192x192.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/android-chrome-maskable-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/android-chrome-maskable-512x512.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/favicon-32x32.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/logo-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/logo-128x128.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/logo-16x16.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/logo-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/logo-256x256.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/logo-64x64.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/logo.svg.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/logo.svg.gz -------------------------------------------------------------------------------- /deploys/other/static/img/icons/msapplication-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/msapplication-icon-144x144.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/icons/mstile-150x150.png -------------------------------------------------------------------------------- /deploys/other/static/img/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /deploys/other/static/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/loading.gif -------------------------------------------------------------------------------- /deploys/other/static/img/loading1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/img/loading1.gif -------------------------------------------------------------------------------- /deploys/other/static/js/ImgManage-51787f1b.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/js/ImgManage-51787f1b.js.gz -------------------------------------------------------------------------------- /deploys/other/static/js/ImgManage-legacy-122a9e28.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/js/ImgManage-legacy-122a9e28.js.gz -------------------------------------------------------------------------------- /deploys/other/static/js/index-6fefb80f.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/js/index-6fefb80f.js.gz -------------------------------------------------------------------------------- /deploys/other/static/js/index-legacy-f9e9823f.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/js/index-legacy-f9e9823f.js.gz -------------------------------------------------------------------------------- /deploys/other/static/js/polyfills-legacy-69e47d67.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/other/static/js/polyfills-legacy-69e47d67.js.gz -------------------------------------------------------------------------------- /deploys/other/static/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BlazeB2 图床", 3 | "short_name": "📷基于 backBlazeb2 API & ⚡ cloudflare 开发的具有 CDN 加速功能的图床工具", 4 | "theme_color": "#e3dbd7", 5 | "icons": [ 6 | { 7 | "src": "./img/icons/android-chrome-192x192.png", 8 | "sizes": "192x192", 9 | "type": "image/png" 10 | }, 11 | { 12 | "src": "./img/icons/android-chrome-512x512.png", 13 | "sizes": "512x512", 14 | "type": "image/png" 15 | }, 16 | { 17 | "src": "./img/icons/android-chrome-maskable-192x192.png", 18 | "sizes": "192x192", 19 | "type": "image/png", 20 | "purpose": "maskable" 21 | }, 22 | { 23 | "src": "./img/icons/android-chrome-maskable-512x512.png", 24 | "sizes": "512x512", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | } 28 | ], 29 | "start_url": ".", 30 | "display": "standalone", 31 | "background_color": "#000000" 32 | } -------------------------------------------------------------------------------- /deploys/other/static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /deploys/other/static/sw.js: -------------------------------------------------------------------------------- 1 | if(!self.define){let e,s={};const i=(i,c)=>(i=new URL(i+".js",c).href,s[i]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()})).then((()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e})));self.define=(c,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(s[f])return;let n={};const o=e=>i(e,f),d={module:{uri:f},exports:n,require:o};s[f]=Promise.all(c.map((e=>d[e]||o(e)))).then((e=>(r(...e),n)))}}define(["./workbox-97c586e7"],(function(e){"use strict";e.setCacheNameDetails({prefix:"1719115489594"}),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"css/ImgManage-77057876.css",revision:"32e213d1b244844e16700192b25a8c44"},{url:"css/index-020a9439.css",revision:"fc8de9c3a734debf72ad09906412b45a"},{url:"index.html",revision:"3dcc57d8975cfa19fe4d60f14eb28f8a"},{url:"js/ImgManage-51787f1b.js",revision:"59ff29763ac97d5c3bda2b3de7feeac4"},{url:"js/ImgManage-legacy-122a9e28.js",revision:"7fdbf15a5f6c81976fc437f29b1005fe"},{url:"js/index-6fefb80f.js",revision:"3b7f64307c4f772ddc79ebeb057979f4"},{url:"js/index-legacy-f9e9823f.js",revision:"e0c328ce92625a323d2a8cb947c1fde0"},{url:"js/polyfills-legacy-69e47d67.js",revision:"1eeb950467ecee546564ea11406088e4"}],{ignoreURLParametersMatching:[/^utm_/,/^fbclid$/]}),e.cleanupOutdatedCaches()})); 2 | -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/css/index-020a9439.css.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/css/index-020a9439.css.gz -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/favicon.ico -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/android-chrome-maskable-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/android-chrome-maskable-192x192.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/android-chrome-maskable-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/android-chrome-maskable-512x512.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/favicon-32x32.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/logo-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/logo-128x128.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/logo-16x16.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/logo-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/logo-256x256.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/logo-64x64.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/logo.svg.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/logo.svg.gz -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/msapplication-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/msapplication-icon-144x144.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/icons/mstile-150x150.png -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/loading.gif -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/img/loading1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/img/loading1.gif -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/js/ImgManage-51787f1b.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/js/ImgManage-51787f1b.js.gz -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/js/ImgManage-legacy-122a9e28.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/js/ImgManage-legacy-122a9e28.js.gz -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/js/index-6fefb80f.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/js/index-6fefb80f.js.gz -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/js/index-legacy-f9e9823f.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/js/index-legacy-f9e9823f.js.gz -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/js/polyfills-legacy-69e47d67.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/deploys/vercel-api/api/static/js/polyfills-legacy-69e47d67.js.gz -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BlazeB2 图床", 3 | "short_name": "📷基于 backBlazeb2 API & ⚡ cloudflare 开发的具有 CDN 加速功能的图床工具", 4 | "theme_color": "#e3dbd7", 5 | "icons": [ 6 | { 7 | "src": "./img/icons/android-chrome-192x192.png", 8 | "sizes": "192x192", 9 | "type": "image/png" 10 | }, 11 | { 12 | "src": "./img/icons/android-chrome-512x512.png", 13 | "sizes": "512x512", 14 | "type": "image/png" 15 | }, 16 | { 17 | "src": "./img/icons/android-chrome-maskable-192x192.png", 18 | "sizes": "192x192", 19 | "type": "image/png", 20 | "purpose": "maskable" 21 | }, 22 | { 23 | "src": "./img/icons/android-chrome-maskable-512x512.png", 24 | "sizes": "512x512", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | } 28 | ], 29 | "start_url": ".", 30 | "display": "standalone", 31 | "background_color": "#000000" 32 | } -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /deploys/vercel-api/api/static/sw.js: -------------------------------------------------------------------------------- 1 | if(!self.define){let e,s={};const i=(i,c)=>(i=new URL(i+".js",c).href,s[i]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()})).then((()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e})));self.define=(c,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(s[f])return;let n={};const o=e=>i(e,f),d={module:{uri:f},exports:n,require:o};s[f]=Promise.all(c.map((e=>d[e]||o(e)))).then((e=>(r(...e),n)))}}define(["./workbox-97c586e7"],(function(e){"use strict";e.setCacheNameDetails({prefix:"1719115489594"}),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"css/ImgManage-77057876.css",revision:"32e213d1b244844e16700192b25a8c44"},{url:"css/index-020a9439.css",revision:"fc8de9c3a734debf72ad09906412b45a"},{url:"index.html",revision:"3dcc57d8975cfa19fe4d60f14eb28f8a"},{url:"js/ImgManage-51787f1b.js",revision:"59ff29763ac97d5c3bda2b3de7feeac4"},{url:"js/ImgManage-legacy-122a9e28.js",revision:"7fdbf15a5f6c81976fc437f29b1005fe"},{url:"js/index-6fefb80f.js",revision:"3b7f64307c4f772ddc79ebeb057979f4"},{url:"js/index-legacy-f9e9823f.js",revision:"e0c328ce92625a323d2a8cb947c1fde0"},{url:"js/polyfills-legacy-69e47d67.js",revision:"1eeb950467ecee546564ea11406088e4"}],{ignoreURLParametersMatching:[/^utm_/,/^fbclid$/]}),e.cleanupOutdatedCaches()})); 2 | -------------------------------------------------------------------------------- /deploys/vercel-api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blazeb2-vercel", 3 | "version": "1.5.2", 4 | "description": "📷基于 backBlazeb2 API & ⚡ cloudflare 开发的具有 CDN 加速功能的图床工具", 5 | "author": "ryanuo (https://github.com/ryanuo)", 6 | "license": "GPL-3.0", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/ryanuo/blazeB2.git" 10 | }, 11 | "homepage": "https://blazeb2.js.org" 12 | } -------------------------------------------------------------------------------- /deploys/vercel-api/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask 2 | requests -------------------------------------------------------------------------------- /deploys/vercel-api/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "rewrites": [ 3 | { "source": "/(.*)", "destination": "/api/index" } 4 | ] 5 | } -------------------------------------------------------------------------------- /docs/.vitepress/config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 21:56:16 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-10-01 21:45:47 7 | * @FilePath: \dev\docs\.vitepress\config.js 8 | */ 9 | import { sidebar, nav, head, markdown } from './configs/index' 10 | export default { 11 | // 网站标题 12 | title: 'Blazeb2 图床', 13 | // 网站描述 14 | description: '📷基于 backBlazeb2 API & ⚡ cloudflare 开发的具有 CDN 加速功能的图床工具', 15 | head, 16 | markdown, 17 | themeConfig: { 18 | // 顶部右上角导航 19 | nav, 20 | // 左侧导航 21 | sidebar, 22 | logo: '/img/logo.svg', 23 | socialLinks: [ 24 | { icon: 'github', link: 'https://github.com/ryanuo/blazeb2' } 25 | ], 26 | algolia: { 27 | apiKey: '96df3907aa74556f4746511deee28203', 28 | indexName: 'BlazeB2', 29 | }, 30 | //丝滑滚动 31 | smoothScroll: true, 32 | // 启用时间线 33 | editLinks: true, 34 | //在git上编辑提示文字 35 | editLinkText: '在 GitHub 上编辑此页', 36 | // 获取每个文件最后一次 git 提交的 UNIX 时间戳(ms),同时它将以合适的日期格式显示在每一页的底部 37 | lastUpdated: '上次更新', 38 | footer: { 39 | message: 'Released under the Apache License 2.0.', 40 | copyright: 'Copyright © 2021-present Ryanuo' 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /docs/.vitepress/configs/head.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-31 10:31:30 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-31 21:12:07 7 | * @FilePath: \dev\docs\docs\.vitepress\configs\head.js 8 | */ 9 | export const head = [ 10 | ['link', { rel: 'icon', href: '/favicon.ico' }], 11 | ["meta", { name: "keywords", content: "BlazeB2图床" }], 12 | [ 13 | "link", 14 | { rel: "stylesheet", href: "https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" }, 15 | ], 16 | ["script", { src: "https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js" }] 17 | ] 18 | -------------------------------------------------------------------------------- /docs/.vitepress/configs/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-31 10:32:34 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-31 11:35:17 7 | * @FilePath: \dev\docs\docs\.vitepress\configs\index.js 8 | */ 9 | import { sidebar } from './sidebar' 10 | import { nav } from './nav' 11 | import { head } from './head' 12 | import { markdown } from './markdown' 13 | 14 | export { 15 | sidebar, nav, head, markdown 16 | } 17 | -------------------------------------------------------------------------------- /docs/.vitepress/configs/markdown.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-31 11:12:10 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-31 12:37:11 7 | * @FilePath: \dev\docs\docs\.vitepress\configs\markdown.js 8 | */ 9 | import mdItCustomAttrs from 'markdown-it-custom-attrs' 10 | export const markdown = { 11 | // options for markdown-it-toc-done-right 12 | toc: { level: [1, 2, 3] }, 13 | 14 | config: (md) => { 15 | // use more markdown-it plugins! 16 | md.use(mdItCustomAttrs, 'image', { 17 | 'data-fancybox': "gallery" 18 | }) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /docs/.vitepress/configs/nav.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 21:56:58 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-31 14:13:40 7 | * @FilePath: \dev\docs\docs\.vitepress\configs\nav.js 8 | */ 9 | 10 | export const nav = [ 11 | { 12 | text: '在线使用', items: [ 13 | { text: "推荐较快", link: 'https://b2.ryanuo.cc/' }, 14 | // { text: "镜像站点", link: 'https://b2.ryanuo.cc/' }, 15 | ] 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /docs/.vitepress/configs/sidebar.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 21:57:08 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-31 14:11:58 7 | * @FilePath: \dev\docs\docs\.vitepress\configs\sidebar.js 8 | */ 9 | // const { getPath } = require('./utils') 10 | 11 | export const sidebar = { 12 | '/guide/': getGuideSidebar() 13 | } 14 | function getGuideSidebar() { 15 | return [ 16 | { 17 | text: '文档指南', 18 | collapsible: true, 19 | // collapsed: true, 20 | items: [ 21 | { text: '概述', link: '/guide/summary' }, 22 | { text: '开始使用', link: '/guide/prepare' }, 23 | { text: '环境配置', link: '/guide/environment' }, 24 | { text: '图床配置', link: '/guide/config' } 25 | ] 26 | }, 27 | { 28 | text: '项目部署', 29 | collapsible: true, 30 | // collapsed: true, 31 | items: [ 32 | { text: 'Vercel部署', link: '/guide/deploy/vercel' }, 33 | { text: 'Docker部署', link: '/guide/deploy/docker' }, 34 | { text: 'Heroku部署', link: '/guide/deploy/heroku' }, 35 | { text: 'Serverless部署', link: '/guide/deploy/serverless' }, 36 | { text: 'Netlify部署', link: '/guide/deploy/netlify' } 37 | ] 38 | }, 39 | { 40 | text: '贡献指南', 41 | collapsible: true, 42 | // collapsed: true, 43 | items: [ 44 | { text: '开始贡献', link: '/guide/contribution/start' }, 45 | { text: '常见问题', link: '/guide/contribution/issue' }, 46 | { text: '关于更新', link: '/guide/contribution/update' } 47 | ] 48 | } 49 | ] 50 | } 51 | 52 | -------------------------------------------------------------------------------- /docs/.vitepress/dist/CNAME: -------------------------------------------------------------------------------- 1 | blazeb2.js.org -------------------------------------------------------------------------------- /docs/.vitepress/dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/dist/favicon.ico -------------------------------------------------------------------------------- /docs/.vitepress/dist/hashmap.json: -------------------------------------------------------------------------------- 1 | {"guide_config.md":"D5RPcopF","guide_contribution_start.md":"orOGzpDX","guide_contribution_issue.md":"L0TNZSdL","guide_deploy_vercel.md":"BVwHogXA","guide_environment.md":"BT9GzjG-","guide_deploy_heroku.md":"BwmcQjnq","guide_prepare.md":"C2ali6dD","guide_contribution_update.md":"Br_4gu5a","guide_deploy_serverless.md":"QfM29-fT","index.md":"CT_8EYq2","guide_deploy_docker.md":"bQ7NXzLB","guide_summary.md":"BPWlTqi1"} 2 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/Comment.vue: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | 40 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/NotFound.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 23 | 24 | 85 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPBackdrop.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 40 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPDocAside.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 26 | 27 | 47 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPDocAsideCarbonAds.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPDocAsideSponsors.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 33 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPDocFooterLastUpdated.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 27 | 28 | 44 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPFeature.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 16 | 17 | 56 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPFooter.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 17 | 18 | 54 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPHome.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 19 | 20 | 36 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPHomeFeatures.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPHomeHero.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 19 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPHomeSponsors.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 48 | 49 | 94 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPImage.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | 16 | 30 | 31 | 39 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPLink.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 27 | 28 | 39 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPMenu.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 22 | 23 | 75 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPMenuGroup.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 19 | 20 | 47 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPMenuLink.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 23 | 24 | 56 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNav.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 20 | 21 | 56 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarAppearance.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 26 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarExtra.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 37 | 38 | 83 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarMenu.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 18 | 19 | 30 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarMenuGroup.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 28 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarMenuLink.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 30 | 31 | 57 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarSocialLinks.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | 16 | 28 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarTitle.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 19 | 20 | 61 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavBarTranslations.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 25 | 26 | 46 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavScreenAppearance.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 34 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavScreenMenu.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 25 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavScreenMenuGroupLink.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 18 | 19 | 34 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavScreenMenuGroupSection.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 22 | 23 | 36 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavScreenMenuLink.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 18 | 19 | 35 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavScreenSocialLinks.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPNavScreenTranslations.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 31 | 32 | 74 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPPage.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPSidebarLink.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 26 | 27 | 55 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPSkipLink.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 39 | 40 | 73 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPSocialLink.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 41 | 42 | 64 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPSocialLinks.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 20 | 21 | 28 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPSponsors.vue: -------------------------------------------------------------------------------- 1 | 40 | 41 | 53 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPSponsorsGrid.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 33 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPSwitch.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 67 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPTeamMembers.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 26 | 27 | 56 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPTeamPage.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 54 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPTeamPageSection.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 78 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/VPTeamPageTitle.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 64 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconAlignJustify.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconAlignLeft.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconAlignRight.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconArrowLeft.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconArrowRight.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconChevronDown.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconChevronLeft.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconChevronRight.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconChevronUp.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconDiscord.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconEdit.vue: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconExternalLink.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconFacebook.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconGitHub.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconHeart.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconInstagram.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconLanguages.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconLinkedIn.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconMinus.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconMinusSquare.vue: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconMoon.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconMoreHorizontal.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconPlus.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconPlusSquare.vue: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconSlack.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconSun.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconTwitter.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/components/icons/VPIconYouTube.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/composables/aside.js: -------------------------------------------------------------------------------- 1 | import { computed } from 'vue'; 2 | import { useMediaQuery } from '@vueuse/core'; 3 | import { useSidebar } from './sidebar'; 4 | export function useAside() { 5 | const { hasSidebar } = useSidebar(); 6 | const is960 = useMediaQuery('(min-width: 960px)'); 7 | const is1280 = useMediaQuery('(min-width: 1280px)'); 8 | const isAsideEnabled = computed(() => { 9 | if (!is1280.value && !is960.value) { 10 | return false; 11 | } 12 | return hasSidebar.value ? is1280.value : is960.value; 13 | }); 14 | return { 15 | isAsideEnabled 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/composables/edit-link.js: -------------------------------------------------------------------------------- 1 | import { computed } from 'vue'; 2 | import { useData } from 'vitepress'; 3 | export function useEditLink() { 4 | const { theme, page } = useData(); 5 | return computed(() => { 6 | const { text = 'Edit this page', pattern } = theme.value.editLink || {}; 7 | const { relativePath } = page.value; 8 | const url = pattern.replace(/:path/g, relativePath); 9 | return { url, text }; 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/composables/flyout.js: -------------------------------------------------------------------------------- 1 | import { ref, watch, readonly, onUnmounted } from 'vue'; 2 | export const focusedElement = ref(); 3 | let active = false; 4 | let listeners = 0; 5 | export function useFlyout(options) { 6 | const focus = ref(false); 7 | if (typeof window !== 'undefined') { 8 | !active && activateFocusTracking(); 9 | listeners++; 10 | const unwatch = watch(focusedElement, (el) => { 11 | if (el === options.el.value || options.el.value?.contains(el)) { 12 | focus.value = true; 13 | options.onFocus?.(); 14 | } 15 | else { 16 | focus.value = false; 17 | options.onBlur?.(); 18 | } 19 | }); 20 | onUnmounted(() => { 21 | unwatch(); 22 | listeners--; 23 | if (!listeners) { 24 | deactivateFocusTracking(); 25 | } 26 | }); 27 | } 28 | return readonly(focus); 29 | } 30 | function activateFocusTracking() { 31 | document.addEventListener('focusin', handleFocusIn); 32 | active = true; 33 | focusedElement.value = document.activeElement; 34 | } 35 | function deactivateFocusTracking() { 36 | document.removeEventListener('focusin', handleFocusIn); 37 | } 38 | function handleFocusIn() { 39 | focusedElement.value = document.activeElement; 40 | } 41 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/composables/nav.js: -------------------------------------------------------------------------------- 1 | import { ref, computed } from 'vue'; 2 | import { useData, useRoute } from 'vitepress'; 3 | export function useNav() { 4 | const isScreenOpen = ref(false); 5 | function openScreen() { 6 | isScreenOpen.value = true; 7 | window.addEventListener('resize', closeScreenOnTabletWindow); 8 | } 9 | function closeScreen() { 10 | isScreenOpen.value = false; 11 | window.removeEventListener('resize', closeScreenOnTabletWindow); 12 | } 13 | function toggleScreen() { 14 | isScreenOpen.value ? closeScreen() : openScreen(); 15 | } 16 | /** 17 | * Close screen when the user resizes the window wider than tablet size. 18 | */ 19 | function closeScreenOnTabletWindow() { 20 | window.outerWidth >= 768 && closeScreen(); 21 | } 22 | return { 23 | isScreenOpen, 24 | openScreen, 25 | closeScreen, 26 | toggleScreen 27 | }; 28 | } 29 | export function useLanguageLinks() { 30 | const { site, localePath, theme } = useData(); 31 | return computed(() => { 32 | const langs = site.value.langs; 33 | const localePaths = Object.keys(langs); 34 | // one language 35 | if (localePaths.length < 2) { 36 | return null; 37 | } 38 | const route = useRoute(); 39 | // intentionally remove the leading slash because each locale has one 40 | const currentPath = route.path.replace(localePath.value, ''); 41 | const candidates = localePaths.map((localePath) => ({ 42 | text: langs[localePath].label, 43 | link: `${localePath}${currentPath}` 44 | })); 45 | const selectText = theme.value.selectText || 'Languages'; 46 | return { 47 | text: selectText, 48 | items: candidates 49 | }; 50 | }); 51 | } 52 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/composables/prev-next.js: -------------------------------------------------------------------------------- 1 | import { computed } from 'vue'; 2 | import { useData } from 'vitepress'; 3 | import { isActive } from '../support/utils'; 4 | import { getSidebar, getFlatSideBarLinks } from '../support/sidebar'; 5 | export function usePrevNext() { 6 | const { page, theme } = useData(); 7 | return computed(() => { 8 | const sidebar = getSidebar(theme.value.sidebar, page.value.relativePath); 9 | const candidates = getFlatSideBarLinks(sidebar); 10 | const index = candidates.findIndex((link) => { 11 | return isActive(page.value.relativePath, link.link); 12 | }); 13 | return { 14 | prev: candidates[index - 1], 15 | next: candidates[index + 1] 16 | }; 17 | }); 18 | } 19 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/composables/sidebar.js: -------------------------------------------------------------------------------- 1 | import { ref, computed, watchEffect, onMounted, onUnmounted } from 'vue'; 2 | import { useRoute, useData } from 'vitepress'; 3 | import { getSidebar } from '../support/sidebar'; 4 | export function useSidebar() { 5 | const route = useRoute(); 6 | const { theme, frontmatter } = useData(); 7 | const isOpen = ref(false); 8 | const sidebar = computed(() => { 9 | const sidebarConfig = theme.value.sidebar; 10 | const relativePath = route.data.relativePath; 11 | return sidebarConfig ? getSidebar(sidebarConfig, relativePath) : []; 12 | }); 13 | const hasSidebar = computed(() => { 14 | return (frontmatter.value.sidebar !== false && 15 | sidebar.value.length > 0 && 16 | frontmatter.value.layout !== 'home'); 17 | }); 18 | function open() { 19 | isOpen.value = true; 20 | } 21 | function close() { 22 | isOpen.value = false; 23 | } 24 | function toggle() { 25 | isOpen.value ? close() : open(); 26 | } 27 | return { 28 | isOpen, 29 | sidebar, 30 | hasSidebar, 31 | open, 32 | close, 33 | toggle 34 | }; 35 | } 36 | /** 37 | * a11y: cache the element that opened the Sidebar (the menu button) then 38 | * focus that button again when Menu is closed with Escape key. 39 | */ 40 | export function useCloseSidebarOnEscape(isOpen, close) { 41 | let triggerElement; 42 | watchEffect(() => { 43 | triggerElement = isOpen.value 44 | ? document.activeElement 45 | : undefined; 46 | }); 47 | onMounted(() => { 48 | window.addEventListener('keyup', onEscape); 49 | }); 50 | onUnmounted(() => { 51 | window.removeEventListener('keyup', onEscape); 52 | }); 53 | function onEscape(e) { 54 | if (e.key === 'Escape' && isOpen.value) { 55 | close(); 56 | triggerElement?.focus(); 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-cyrillic-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-cyrillic-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-cyrillic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-cyrillic.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-greek-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-greek-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-greek.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-greek.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-italic-cyrillic-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-italic-cyrillic-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-italic-cyrillic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-italic-cyrillic.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-italic-greek-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-italic-greek-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-italic-greek.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-italic-greek.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-italic-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-italic-latin-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-italic-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-italic-latin.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-italic-vietnamese.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-italic-vietnamese.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-latin-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-latin.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-roman-cyrillic-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-roman-cyrillic-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-roman-cyrillic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-roman-cyrillic.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-roman-greek-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-roman-greek-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-roman-greek.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-roman-greek.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-roman-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-roman-latin-ext.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-roman-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-roman-latin.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-roman-vietnamese.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-roman-vietnamese.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/fonts/inter-vietnamese.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/.vitepress/theme-default/fonts/inter-vietnamese.woff2 -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/index.js: -------------------------------------------------------------------------------- 1 | import './styles/fonts.css'; 2 | import './styles/vars.css'; 3 | import './styles/base.css'; 4 | import './styles/utils.css'; 5 | import './styles/components/custom-block.css'; 6 | import './styles/components/vp-code.css'; 7 | import './styles/components/vp-doc.css'; 8 | import './styles/components/vp-sponsor.css'; 9 | import Layout from './Layout.vue'; 10 | import NotFound from './NotFound.vue'; 11 | export { default as VPHomeHero } from './components/VPHomeHero.vue'; 12 | export { default as VPHomeFeatures } from './components/VPHomeFeatures.vue'; 13 | export { default as VPHomeSponsors } from './components/VPHomeSponsors.vue'; 14 | export { default as VPDocAsideSponsors } from './components/VPDocAsideSponsors.vue'; 15 | export { default as VPTeamPage } from './components/VPTeamPage.vue'; 16 | export { default as VPTeamPageTitle } from './components/VPTeamPageTitle.vue'; 17 | export { default as VPTeamPageSection } from './components/VPTeamPageSection.vue'; 18 | export { default as VPTeamMembers } from './components/VPTeamMembers.vue'; 19 | const theme = { 20 | Layout, 21 | NotFound 22 | }; 23 | export default theme; 24 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/styles/components/vp-code.css: -------------------------------------------------------------------------------- 1 | .dark .vp-code-light { 2 | display: none; 3 | } 4 | 5 | html:not(.dark) .vp-code-dark { 6 | display: none; 7 | } 8 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/styles/utils.css: -------------------------------------------------------------------------------- 1 | .visually-hidden { 2 | position: absolute; 3 | width: 1px; 4 | height: 1px; 5 | white-space: nowrap; 6 | clip: rect(0 0 0 0); 7 | clip-path: inset(50%); 8 | overflow: hidden; 9 | } 10 | -------------------------------------------------------------------------------- /docs/.vitepress/theme-default/support/sidebar.js: -------------------------------------------------------------------------------- 1 | import { ensureStartingSlash } from './utils'; 2 | /** 3 | * Get the `Sidebar` from sidebar option. This method will ensure to get correct 4 | * sidebar config from `MultiSideBarConfig` with various path combinations such 5 | * as matching `guide/` and `/guide/`. If no matching config was found, it will 6 | * return empty array. 7 | */ 8 | export function getSidebar(sidebar, path) { 9 | if (Array.isArray(sidebar)) { 10 | return sidebar; 11 | } 12 | path = ensureStartingSlash(path); 13 | for (const dir in sidebar) { 14 | // make sure the multi sidebar key starts with slash too 15 | if (path.startsWith(ensureStartingSlash(dir))) { 16 | return sidebar[dir]; 17 | } 18 | } 19 | return []; 20 | } 21 | export function getFlatSideBarLinks(sidebar) { 22 | const links = []; 23 | for (const group of sidebar) { 24 | for (const link of group.items) { 25 | links.push(link); 26 | } 27 | } 28 | return links; 29 | } 30 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/components/Comment.vue: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | 40 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/css/index.css: -------------------------------------------------------------------------------- 1 | /* .vitepress/theme/custom.css */ 2 | :root { 3 | --vp-c-brand: #379ae8; 4 | --vp-c-brand-light: #4ea3e4; 5 | --vp-c-brand-dark: #a1d2f7; 6 | } 7 | 8 | html.dark{ 9 | --vp-c-brand: #f7c099; 10 | --vp-c-brand-lighter: #d8a682; 11 | --vp-c-brand-dark: #d8a682; 12 | --vp-c-brand-light: #d8a682; 13 | } 14 | 15 | img{ 16 | display: inline-block; 17 | cursor: pointer; 18 | } -------------------------------------------------------------------------------- /docs/.vitepress/theme/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-31 09:02:02 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-31 21:24:17 7 | * @FilePath: \dev\docs\docs\.vitepress\theme\index.js 8 | */ 9 | import DefaultTheme from '../theme-default' 10 | import Comment from './components/Comment.vue'; 11 | import './css/index.css' 12 | export default { 13 | ...DefaultTheme, 14 | enhanceApp({ app, router, siteData }) { 15 | // 注册组件 16 | app.component("Comment", Comment); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /docs/guide/config.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-cn 3 | title: 图床设置 4 | description: 待定 5 | --- 6 | # 图床设置 7 | 8 | 打开项目地址,如我的[传送](https://blazeb2.mr90.cf/#/setting?id=1) 9 | 10 | ## Step. 1: 密钥配置管理 11 | 12 | - 按照图片填写,保存至本地即可 13 | 14 | ![](https://cloud.ryanuo.cc/hexo/api/b78be59a-7608-4601-976e-7abe8c27e52c.png) 15 | 16 | 这里需要注意的是 **图床地址** 与 **项目地址** 不是一个东西。 17 | 18 | ## Step. 2: 上传图片配置 19 | 20 | - 完成密钥配置后,开始配置首页的上传图片的设置 21 | - 压缩默认关闭,打开后默认压缩比为80% 22 | - 第一个上传路径 **必须填写** 按照如图流程填写,几级目录都可以,如果在 B2 桶中的不存在该文件夹,那么在上传时,会自动创建文件夹。 23 | 24 | ![](https://cloud.ryanuo.cc/hexo/api/49d81a6b-ea0e-4987-b50d-2db41d4586c4.png) 25 | 26 | ## Step. 3: 图床管理配置 27 | 28 | - 图片文件夹目录为图床管理界面下的默认检索地址。 29 | 30 | ![](https://cloud.ryanuo.cc/hexo/api/dc8a54e2-d757-41a3-8e3c-1f3316c7c5cf.png) -------------------------------------------------------------------------------- /docs/guide/contribution/issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-CN 3 | title: 贡献指南 | 常见问题 4 | description: 欢迎BlazeB2各种形式的贡献,包括但不限于:美化界面、增加功能、改进代码、 修复 Bug 等 5 | --- 6 | 7 | # 常见问题 8 | 9 | ## Issues. 1: 关于vercel部署问题 10 | 11 | - 解决方法:[详情](https://github.com/ryanuo/blazeB2/issues/3) 12 | 13 | - 文档详细介绍: [传送](https://blazeb2.js.org/guide/deploy/vercel.html) 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/guide/contribution/start.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-CN 3 | title: 贡献指南 4 | description: 欢迎BlazeB2各种形式的贡献,包括但不限于:美化界面、增加功能、改进代码、 修复 Bug 等 5 | --- 6 | 7 | 8 | ## 贡献指南 9 | 10 | - [传送](https://git-scm.com/book/zh/v2/GitHub-%E5%AF%B9%E9%A1%B9%E7%9B%AE%E5%81%9A%E5%87%BA%E8%B4%A1%E7%8C%AE) 11 | 12 | ## 贡献须知 13 | waiting 14 | 15 | ## 代码规范 16 | waiting 17 | 18 | ## 提交规范 19 | -------------------------------------------------------------------------------- /docs/guide/contribution/update.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-CN 3 | title: 贡献指南 | 关于更新 4 | description: 欢迎BlazeB2各种形式的贡献,包括但不限于:美化界面、增加功能、改进代码、 修复 Bug 等 5 | --- 6 | 7 | # 关于更新 8 | ## 2022-08(v1.6) 9 | 10 | ### 2022-08-04 09:24:04 11 | 12 | - 🦄refactor: 13 | - 首页去除左侧临时管理界面 14 | - 去除顶部nav栏; 15 | - 去除配置界面 加到顶部状态栏 16 | - 🎨style: 17 | - 修改顶部nav栏;加入昼夜模式; 18 | - 管理界面去除时间节点; 19 | - 配置界面去除主题设置; 20 | - ✨feat: 21 | - 加入双击预览图片; 22 | - 支持批量图片下载,使用jszip 批量压缩; 23 | - 右键功能增加(复制,打开,下载,删除,分享等) 24 | - 管理界面快捷键提示(待加入) 25 | 26 | ## 2022-07(v1.5) 27 | 28 | ### 2022-07-28 09:24:04 29 | 30 | - 🦄refactor: 31 | - 重构代码,使用vite代替webpack 32 | - ✨feat: 33 | - 增加右键功能 34 | - 增加快捷键选中,支持通用选择模式ctrl、shift 点击选择 ctrl+a 全选 35 | - 🎨style: 36 | - 重构图床管理界面去除鼠标触动效果 37 | - 页面标题随路由动态变化 38 | - 图床管理增加table展示效果 39 | - 👨‍🔧fix: 40 | - 修复加载页面时 pinia加载问题(router) 41 | 42 | ### 2022-07-26 20:36:13 43 | 44 | - 👨‍🔧fix: 45 | - 图床管理加入图片重复判断,如果该文件夹下没有多余文件 不在重复的显示;有阈值提示 46 | - 修复图床管理界面删除按钮触发选择操作 47 | - 修复vercel部署问题 48 | - 修复更改登录配置host_url后,页面管理地址不更新问题 49 | - 去除默认图片地址s3API和downloadApI 50 | - ✨feat: 51 | - 更改图床加载顺序默认为降序排列 52 | - 新增上传图片后的默认复制的链接模式 53 | - 批量复制链接 支持多种模式复制模式(可自定义) 54 | 55 | 56 | ### 2022-07-16 11:36:13 57 | 58 | - 👨‍🔧fix: 59 | - 修复上传页面,取消水印界面,图片列表消失问题 60 | - 修复水印上传时报错问题; 61 | - ✨feat: 62 | - 加入文件验证,目前仅支持几种图片格式 63 | - 加入占位图,图片未加载 64 | - 支持批量上传,批量删除,批量复制链接 65 | - 加入临时上传管理,使用sessionStorage,关闭页面重新打开后消失 66 | - 🎨style: 67 | - 部分样式重构; 68 | 69 | 70 | ## 2022-06(v1.4) 71 | 72 | ### 2022-06-28 11:32:49 73 | 74 | - 👨‍🔧fix: 75 | - 修复管理图片界面 加载失败问题; 76 | - 修复管理界面 图片复制链接问题; 77 | - 🎨style: 78 | - 增加管理界面占位图 加载动画等等; 79 | - 修改移动端图片占比样式; 80 | - ✨feat: 81 | - 管理图片界面加入时间排序 顺序or倒序(默认升序); 82 | - 图片上方加入上传日期提示; 83 | - 支持自定义复制链接内容; -------------------------------------------------------------------------------- /docs/guide/deploy/heroku.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-cn 3 | title: 项目部署 | Heroku部署 4 | description: 使用Heroku一键部署balzeb2图床项目 5 | --- 6 | 7 | 8 | # Heroku 部署 9 | 10 | ## 项目文件结构 11 | 12 | ```js 13 | └─static // 存放静态文件 14 | ├─css 15 | ├─fonts 16 | ├─img 17 | │ └─icons 18 | └─js 19 | └─index.py // 项目启动文件 20 | └─Procfile // Heroku启动文件 21 | └─requirements.txt //项目依赖库 22 | └─scf_bootstrap // 腾讯云部署启动文件 23 | └─docker-compose.yml // Docker启动文件 24 | └─Dockerfile // docker相关配置 25 | └─gun.conf // 保障程序运行 26 | ``` 27 | 28 | ## 方式一 29 | 30 | 1. 如果 您还没有 `Heroku` 帐户,可前往 [Heroku](https://dashboard.heroku.com/login) 注册一个免费帐户。 31 | 2. 注册邮箱建议使用`谷歌邮箱`(qq,163无法注册) 32 | 3. 创建新的 `Heroku App` 33 | 4. 拉取代码部署(或者直接[fork](https://github.com/ryanuo/blazeB2)本仓库) 34 | 35 | ```bash 36 | git clone https://github.com/ryanuo/blazeB2.git 37 | cd deploys/other 38 | ``` 39 | - fork无需拉取上传 40 | - 将代码创建并保存到自己的`github`仓库 41 | 42 | 5. 开始部署 43 | 44 | - 选择`github`方式部署,绑定自己的仓库 45 | 46 | ![](https://cloud.ryanuo.cc/hexo/4/abf21307-628b-4b03-80d1-202a3a83a605.png) 47 | 48 | - 选择下面手动部署 选择分支build 如果是fork项目,根据情况选择 49 | 50 | ![](https://cloud.ryanuo.cc/hexo/4/56144394-87f5-43ca-b149-855b7251f273.png) 51 | 52 | ## 方式二 53 | 54 | - [使用Herku cli](https://www.jianshu.com/p/b3478aaa82d3) 55 | 56 | ![](https://cloud.ryanuo.cc/hexo/4/182df770-6256-4589-8b54-50593c7bd7e0.png) 57 | 58 | -------------------------------------------------------------------------------- /docs/guide/deploy/netlify.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-cn 3 | title: 项目部署 | netlify部署 4 | description: 使用netlify一键部署balzeb2图床项目 5 | --- 6 | 7 | waiting -------------------------------------------------------------------------------- /docs/guide/deploy/serverless.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-cn 3 | title: 项目部署 | 腾讯云serverless部署 4 | description: 使用serverless一键部署balzeb2图床项目 5 | --- 6 | 7 | # 腾讯云部署 8 | 9 | ## 项目文件结构 10 | 11 | ```js 12 | └─static // 存放静态文件 13 | ├─css 14 | ├─fonts 15 | ├─img 16 | │ └─icons 17 | └─js 18 | └─index.py // 项目启动文件 19 | └─Procfile // Heroku启动文件 20 | └─requirements.txt //项目依赖库 21 | └─scf_bootstrap // 腾讯云部署启动文件 22 | └─docker-compose.yml // Docker启动文件 23 | └─Dockerfile // docker相关配置 24 | └─gun.conf // 保障程序运行 25 | ``` 26 | 27 | [![](/img/txy.svg)](https://console.cloud.tencent.com/scf/list-create?rid=1&ns=default&createType=empty) 28 | 29 | ## Step. 1: 创建web函数 30 | 31 | ![](https://cloud.ryanuo.cc/hexo/4/bfdb068c-a2c1-472c-990a-6f4420ee7cf7.png) 32 | 33 | ## Step. 2: 将原有的文件删除,新建一个空的src文件 34 | 35 | ![](https://cloud.ryanuo.cc/hexo/4/5a0fb26f-b137-4dda-a4f0-704cc23ad279.png) 36 | 37 | ## Step. 3: 然后将[api](https://github.com/ryanuo/blazeB2/tree/master/deploys/vercel-api)文件上传到src文件中 38 | 39 | ![](https://cloud.ryanuo.cc/hexo/4/bf923231-d1cd-4312-ada0-fa786c775b76.png) 40 | 41 | ## Step. 4: 点击终端安装依赖 42 | 43 | - 必须执行 修改文件权限 44 | 45 | ```python 46 | cd src/ 47 | pip3 install Flask requests -t . 48 | chmod 755 scf_bootstrap 49 | ``` 50 | - 注意: 启动文件可能存在权限不足问题 51 | 52 | ![](https://cloud.ryanuo.cc/hexo/4/23b26647-97b8-4e64-aa05-2bee84666277.png) 53 | ![](https://cloud.ryanuo.cc/hexo/4/d89e5329-bd8b-4100-956b-1cf1b38965ad.png) 54 | 55 | ## Step. 5: 点击依赖完成部署,下滑找到部署地址访问 56 | 57 | ![](https://cloud.ryanuo.cc/hexo/4/55fc7bf3-c8fe-45af-ace3-da9e7d582452.png) 58 | 59 | -------------------------------------------------------------------------------- /docs/guide/deploy/vercel.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-cn 3 | title: 项目部署 | vercel部署 4 | description: 使用vercel一键部署balzeb2图床项目 5 | --- 6 | 7 | # vercel部署 8 | 9 | 注:若 **一键部署** 失效,请使用手动部署 10 | 11 | ## 项目文件结构 12 | 13 | ```js 14 | api 15 | └─static // 静态文件 16 | └─index.py // 启动文件 17 | requirements.txt // 文件依赖 18 | package.json // 必须存在 项目依赖 19 | vercel.json // vercel 相关配置 20 | ``` 21 | 22 | ## 一键部署 23 | 24 | - 点击一键部署 [![Vercel](https://img.shields.io/badge/vercel-%23000000.svg?style=for-the-badge&logo=vercel&logoColor=white)](https://vercel.com/new/clone?s=https://github.com/ryanuo/blazeB2/tree/master/deploys/vercel-api) 25 | ![](https://cloud.ryanuo.cc/hexo/4/38c9dcba-97bc-413d-a6a7-c8681937fa59.png) 26 | 27 | ## 手动部署 28 | 29 | - 【[仓库地址](https://github.com/ryanuo/blazeB2)】 30 | 31 | 1. 第一步:[fork](https://github.com/ryanuo/blazeB2) `blazeb2` 仓库 32 | 2. 第二步:在 `https://vercel.com/dashboard` 中点击 `New Project` 33 | 3. 第三步:在左侧选择刚刚 `fork` 的 `blazeb2` 仓库,点击 `Import` 34 | 4. 第四步:点击 `FRAMEWORK PRESET` 选择 `Other` 35 | 5. 第五步:点击 `ROOT DIRECTORY` 右侧的 `Edit`,选择 `deploys/vercel-api` 36 | 6. 第六步:点击 `Deploy` 37 | 38 | ![](https://cloud.ryanuo.cc/hexo/api/8d4bfe1b-db6a-437c-9186-b8d7948bd451.png) 39 | 40 | ## 自定义域名 41 | 42 | 按如图所示操作 43 | 44 | ![](https://cloud.ryanuo.cc/hexo/api/e362938e-6415-4389-8e12-86058f4c94a7.png) 45 | 46 | 在DNS中添加一条CNAME记录 47 | 48 | ![](https://cloud.ryanuo.cc/hexo/api/465d6266-a5a7-4e03-b01a-88bb0db4c267.png) 49 | 50 | 域名即可访问 51 | 52 | ![](https://cloud.ryanuo.cc/hexo/api/7d6035c8-7a9a-4da9-8cc6-9a1c93b5fe8d.png) 53 | >参考文章:[使用Cloudflare加速vercel](https://hin.cool/posts/cfvercel.html) -------------------------------------------------------------------------------- /docs/guide/environment.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-cn 3 | title: 配置环境 4 | description: Cloudflare配置 将你的图床地址进行重写 5 | --- 6 | 7 | # Cloudflare配置 8 | 9 | - 域名:域名需要使用 Cloudflare 的 NS服务器 10 | 11 | ## Step. 1: DNS配置 12 | 13 | 如:我将 `imgcdn.admirelight.com` 作为我的图床链接。那么我就要在DNS中添加一条CNAME记录,并指向[文件地址](/guide/prepare.html#step-4-查看桶域名)中的域名。 14 | 15 | ![](https://cloud.ryanuo.cc/hexo/api/0c69f9ba-b516-4799-9dba-1353e6d9e5df.png) 16 | 17 | ## Step. 2: 重定向&&缓冲处理 18 | 19 | - 在 **规则** --> **页面规则** 中,添加以下内容。 20 | 21 | ``` 22 | imgcdn.admirelight.com/file/你的桶名称/* 23 | 24 | https://f004.backblazeb2.com/file/你的桶名称/$1 25 | ``` 26 | 27 | ![](https://cloud.ryanuo.cc/hexo/api/68091800-449a-4daa-848b-e6c59d8d77b7.png) 28 | 29 | 30 | ## Step. 3: 重写URL 31 | 32 | - 将 **/file/bucket/** 名称隐藏 隐藏桶名称 33 | 34 | ``` 35 | concat("/file/bucket", http.request.uri.path) 36 | ``` 37 | 38 | ![](https://cloud.ryanuo.cc/hexo/api/53b05dc8-180d-48d0-8460-e91dd2933de8.png) 39 | 40 | - 优化前访问路径为:https://imgcdn.admirelight.com/file/桶名字/xxx.txt 41 | - 优化后访问路径为:https://imgcdn.admirelight.comm/xxx.txt 42 | - 去除了:file/bucket/ 43 | 44 | ## Step. 3: 重写响应头 45 | 46 | - 去除不必要的响应Header 47 | - Backblaze B2会在请求的响应头中添加以下几个header参数: 48 | 49 | ```js 50 | x-bz-content-sha1 51 | x-bz-file-id 52 | x-bz-file-name 53 | x-bz-upload-timestamp 54 | ``` 55 | 56 | - 虽然影响不大,但是一看这些参数就知道你用的B2,并且这些参数头一般拿来也没啥用,可以通过CloudFlare的重写规则将其去掉。 57 | - 转换规则 --> 创建转换规则 --> 修改响应头 58 | 59 | ![](https://cloud.ryanuo.cc/hexo/4/e0b95f22-0aae-40d0-a6c9-30071bfa8035.png) 60 | ![](https://cloud.ryanuo.cc/hexo/api/759fa15d-d7b2-414b-bc30-f44af6c61ef9.png) 61 | -------------------------------------------------------------------------------- /docs/guide/prepare.md: -------------------------------------------------------------------------------- 1 | --- 2 | lang: zh-cn 3 | title: 使用前准备 4 | description: 待补充 5 | navbar: true 6 | --- 7 | 8 | # 准备需要 9 | 10 | - 一个域名 11 | - 一个 BackBlaze 的桶 12 | 13 | ## Step. 1: 注册BackBlaze 14 | 15 | [传送门](https://www.backblaze.com/b2/sign-up.html?referrer=nopref) 16 | 17 | ## Step. 2: 创作一个桶 18 | 19 | 1. 打开[此链接](https://secure.backblaze.com/b2_buckets.htm) 20 | 21 | 2. 按照此图流程操作 22 | 23 | 24 | ![](https://cloud.ryanuo.cc/hexo/4/e615dd65-19af-42a6-826f-cf62f53f751c.png) 25 | 26 | - 创建完成后如图所示 27 | 28 | ![](https://cloud.ryanuo.cc/hexo/4/2ccb3d00-0ccf-48a1-bceb-c92d4861ad06.png) 29 | 30 | ## Step. 3: 桶设定 31 | 32 | - 设置缓冲,点击桶设定,将桶信息设置为 {"cache-control":"max-age=43200"} 表示默认不会进行缓冲。 33 | 34 | ```js 35 | {"cache-control":"max-age=43200"} 36 | ``` 37 | 38 | ![](https://cloud.ryanuo.cc/hexo/4/30cfef4b-3111-48b4-ac88-762e600aa618.png) 39 | 40 | - CORS 规则跨域配置可根据需要进行配置 41 | 42 | ## Step. 4: 查看桶域名 43 | 44 | - 配置完成,点击 **上传/下载(Upload/Download)**,将一个临时的测试文件上传到存储桶中,找到你上传的文件,点击右边的信息。这是为了获取下一步所需要的信息,即你的桶位于哪一台服务器上。 45 | 46 | - 记住 **友好 URL** 的链接,我们接下来会用的到 47 | 48 | ![](https://cloud.ryanuo.cc/hexo/4/a30a1d56-54fa-4d29-bddb-a4c860755e14.png) 49 | ![](https://cloud.ryanuo.cc/hexo/5/6e6ceacd-194e-4c7b-978b-40c2acfa417d.png) 50 | 51 | ## Step. 5: 生成应用密钥 52 | 53 | - [申请地址](https://secure.backblaze.com/app_keys.htm) 54 | 55 | - 点击 **添加新的应用程序密钥** 56 | 57 | 密钥的名称:随便填 58 | 59 | 允许访问 bucket:你刚刚创建的桶 60 | 61 | 访问类型:读和写 62 | 63 | 允许列出所有储存桶名称:允许列出所有存储桶名称,包括存储桶创建日期(S3列表存储桶API必需) 64 | 65 | ![](https://cloud.ryanuo.cc/hexo/4/c85aceb4-475c-450d-8f9b-b26ced99e563.png) 66 | 67 | - 将 **keyID** 和 **applicationKey** 保存好,我们接下来用得到 68 | 69 | ![](https://cloud.ryanuo.cc/hexo/api/4958eea4-be2e-429d-a614-4f74e1d3a3cf.png) -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | 4 | title: BlazeB2 5 | titleTemplate: 基于 BackBlazeB2 和 Cloudflare 开发的图床工具 6 | 7 | hero: 8 | name: BlazeB2 9 | text: 基于 BackBlazeB2 和 Cloudflare 的图床工具 10 | tagline: 操作简单,免费使用, 支持一键部署(Vercel,Serverless,Heroku,Docker) 11 | actions: 12 | - theme: brand 13 | text: 开始使用 14 | link: /guide/summary 15 | - theme: alt 16 | text: 在 GitHub 上查看 17 | link: https://github.com/ryanuo/blazeB2 18 | 19 | features: 20 | 21 | - icon: 🛠️ 22 | title: 简洁至上 23 | details: 无需下载,无需安装,浏览器打开官网进行简单配置即可使用。 24 | - icon: 🍩 25 | title: 稳定可靠 26 | details: 依托于巨头大厂成熟技术,完全免费,稳定可靠,随时可用。 27 | - icon: ⚡️ 28 | title: 极速高效 29 | details: BackBlazeB2 & Cloudflare CDN 加速功能,极速高效。 30 | - icon: 🍥 31 | title: 快速部署 32 | details: 支持一键快速部署(Vercel,Serverless,Heroku,Docker) 33 | --- -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "docs:d": "vitepress dev", 8 | "docs:b": "vitepress build", 9 | "docs:p": "vitepress preview" 10 | }, 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "@docsearch/css": "^3.6.0", 15 | "@docsearch/js": "^3.6.0", 16 | "body-scroll-lock": "4.0.0-beta.0", 17 | "vitepress": "^1.2.3" 18 | }, 19 | "dependencies": { 20 | "@vueuse/core": "^10.11.0", 21 | "gitalk": "^1.8.0", 22 | "markdown-it-custom-attrs": "^1.0.2" 23 | } 24 | } -------------------------------------------------------------------------------- /docs/public/CNAME: -------------------------------------------------------------------------------- 1 | blazeb2.js.org -------------------------------------------------------------------------------- /docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/docs/public/favicon.ico -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | Welcome To BlazeB2-图床 25 | 26 | 27 | 28 | 29 | 35 |
36 | 37 | 38 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/favicon.ico -------------------------------------------------------------------------------- /public/img/icons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-maskable-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/android-chrome-maskable-192x192.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-maskable-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/android-chrome-maskable-512x512.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/apple-touch-icon-60x60.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /public/img/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/favicon-32x32.png -------------------------------------------------------------------------------- /public/img/icons/logo-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/logo-128x128.png -------------------------------------------------------------------------------- /public/img/icons/logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/logo-16x16.png -------------------------------------------------------------------------------- /public/img/icons/logo-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/logo-256x256.png -------------------------------------------------------------------------------- /public/img/icons/logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/logo-64x64.png -------------------------------------------------------------------------------- /public/img/icons/logo.svg.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/logo.svg.gz -------------------------------------------------------------------------------- /public/img/icons/msapplication-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/msapplication-icon-144x144.png -------------------------------------------------------------------------------- /public/img/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/icons/mstile-150x150.png -------------------------------------------------------------------------------- /public/img/icons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/loading.gif -------------------------------------------------------------------------------- /public/img/loading1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanuo/blazeB2/0cfd588c8498b8df43d5ebb77f5c88335e159f83/public/img/loading1.gif -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BlazeB2 图床", 3 | "short_name": "📷基于 backBlazeb2 API & ⚡ cloudflare 开发的具有 CDN 加速功能的图床工具", 4 | "theme_color": "#e3dbd7", 5 | "icons": [ 6 | { 7 | "src": "./img/icons/android-chrome-192x192.png", 8 | "sizes": "192x192", 9 | "type": "image/png" 10 | }, 11 | { 12 | "src": "./img/icons/android-chrome-512x512.png", 13 | "sizes": "512x512", 14 | "type": "image/png" 15 | }, 16 | { 17 | "src": "./img/icons/android-chrome-maskable-192x192.png", 18 | "sizes": "192x192", 19 | "type": "image/png", 20 | "purpose": "maskable" 21 | }, 22 | { 23 | "src": "./img/icons/android-chrome-maskable-512x512.png", 24 | "sizes": "512x512", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | } 28 | ], 29 | "start_url": ".", 30 | "display": "standalone", 31 | "background_color": "#000000" 32 | } -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 9 | 14 | 15 | 20 | -------------------------------------------------------------------------------- /src/assets/css/comm.less: -------------------------------------------------------------------------------- 1 | .mark-w { 2 | display: flex; 3 | justify-content: flex-end; 4 | // padding: 0 10px; 5 | } 6 | 7 | .more-w { 8 | position: absolute; 9 | top: 2%; 10 | right: 2%; 11 | width: 30px; 12 | height: 30px; 13 | background-color: var(--b2-bg); 14 | border-radius: 20px; 15 | box-shadow: 0 0 5px #ccc; 16 | z-index: 200; 17 | opacity: 0; 18 | } 19 | 20 | .icon-more { 21 | width: 30px; 22 | } -------------------------------------------------------------------------------- /src/assets/css/element-variables.scss: -------------------------------------------------------------------------------- 1 | /* 改变主题色变量 */ 2 | $--color-primary: #379ae8; 3 | 4 | /* 改变 icon 字体路径变量,必需 */ 5 | $--font-path: '~element-ui/lib/theme-chalk/fonts'; 6 | 7 | @import "~element-ui/packages/theme-chalk/src/index"; -------------------------------------------------------------------------------- /src/components/loading/MarkLoad.vue: -------------------------------------------------------------------------------- 1 | 9 | 18 | 19 | 44 | 45 | 47 | -------------------------------------------------------------------------------- /src/components/setting/Settingview.module.less: -------------------------------------------------------------------------------- 1 | .setting-view-wrap { 2 | position: absolute; 3 | top: 0; 4 | left: 0; 5 | bottom: 0; 6 | right: 0; 7 | z-index: 999; 8 | backdrop-filter: blur(8px); 9 | background-color: var(--b2-mark-bg); 10 | display: flex; 11 | justify-content: center; 12 | align-items: center; 13 | 14 | .setting-item-wrap { 15 | padding: 17px 14px 17px 20px; 16 | border-radius: 10px; 17 | box-shadow: 0 0 10px #f2f2f2; 18 | width: 40vw; 19 | height: 70vh; 20 | background-color: #fff; 21 | .close-setting{ 22 | float: right; 23 | } 24 | .setting-hd { 25 | padding-bottom: 15px; 26 | font-weight: 550; 27 | font-size: 15.5px; 28 | border-bottom: 2px solid #f1f1f1; 29 | } 30 | 31 | .setting-content { 32 | max-height: max-content; 33 | overflow: auto; 34 | max-height: 63vh; 35 | padding: 5px; 36 | } 37 | p{ 38 | margin-top: 10px; 39 | text-align: right; 40 | } 41 | } 42 | } 43 | .separate-line{ 44 | border-bottom: 2px dashed #f2f2f2; 45 | padding-bottom:15px; 46 | padding-top:15px; 47 | } 48 | @media only screen and (max-width: 1300px) { 49 | .setting-view-wrap { 50 | .setting-item-wrap { 51 | width: 60vw; 52 | } 53 | } 54 | } 55 | @media only screen and (max-width: 537px) { 56 | .setting-view-wrap { 57 | .setting-item-wrap { 58 | width: 78vw; 59 | } 60 | } 61 | } 62 | 63 | -------------------------------------------------------------------------------- /src/config/build-vite.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 12:53:09 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-31 15:08:41 7 | * @FilePath: \dev\src\config\build-vite.js 8 | */ 9 | // const isPro = import.meta.env.VITE_ENV === 'pro' 10 | // console.log(isPro) 11 | const build = { 12 | sourcemap: false, 13 | assetsDir: 'dist', 14 | minify: 'terser', 15 | assetsInlineLimit: 4096, 16 | rollupOptions: { 17 | // input: pageEntry, // 入口配置 18 | output: { 19 | chunkFileNames: 'js/[name]-[hash].js', 20 | entryFileNames: 'js/[name]-[hash].js', 21 | assetFileNames: '[ext]/[name]-[hash].[ext]', 22 | } 23 | }, 24 | terserOptions: { 25 | compress: { 26 | // 生产环境时移除console.log() 27 | drop_console: true, 28 | drop_debugger: true 29 | } 30 | } 31 | } 32 | export default build 33 | -------------------------------------------------------------------------------- /src/config/cdn.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-24 17:45:05 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-24 18:38:50 7 | * @FilePath: \vite\src\config\cdn.js 8 | */ 9 | const cdn = [ 10 | { 11 | name: 'vue', 12 | var: 'Vue', 13 | path: 'https://cdn.staticfile.org/vue/2.6.11/vue.min.js' 14 | }, 15 | { 16 | name: 'vuex', 17 | var: 'Vuex', 18 | path: 'https://cdnjs.cloudflare.com/ajax/libs/vuex/4.0.2/vuex.global.prod.min.js' 19 | }, 20 | { 21 | name: 'vue-router', 22 | var: 'VueRouter', 23 | path: 'https://cdn.staticfile.org/vue-router/3.2.0/vue-router.min.js' 24 | }, 25 | { 26 | name: 'axios', 27 | var: 'axios', 28 | path: 'https://cdn.staticfile.org/axios/0.27.2/axios.min.js' 29 | }, 30 | { 31 | name: 'element-ui', 32 | var: 'ELEMENT', 33 | path: 'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/index.min.js', 34 | css: 'https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.6/theme-chalk/index.min.css' 35 | }, 36 | { 37 | name: 'nprogress', 38 | var: 'NProgress', 39 | path: 'https://cdn.bootcdn.net/ajax/libs/nprogress/0.2.0/nprogress.min.js', 40 | css: 'https://cdn.bootcdn.net/ajax/libs/nprogress/0.2.0/nprogress.min.css' 41 | }, 42 | { 43 | name: 'vue-clipboard2', 44 | var: 'VueClipboard', 45 | path: 'https://cdn.bootcdn.net/ajax/libs/vue-clipboard2/0.3.3/vue-clipboard.min.js' 46 | } 47 | ] 48 | 49 | export { 50 | cdn 51 | } 52 | -------------------------------------------------------------------------------- /src/config/css-vite.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 13:36:45 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-30 13:36:52 7 | * @FilePath: \dev\src\config\css-vite.js 8 | */ 9 | const cssStyl = { 10 | preprocessorOptions: { 11 | scss: { 12 | additionalData: '@import "./assets/css/element-variables.scss";' // 全局公共样式 13 | } 14 | } 15 | } 16 | 17 | export default cssStyl 18 | -------------------------------------------------------------------------------- /src/config/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-24 17:46:00 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-30 13:37:32 7 | * @FilePath: \dev\src\config\index.js 8 | */ 9 | import { cdn } from './cdn' 10 | import plugins from './plugin-vite' 11 | import build from './build-vite' 12 | import server from './server-vite' 13 | import resolveC from './resolve-vite' 14 | import cssStyl from './css-vite' 15 | export { 16 | cdn, plugins, build, server, resolveC, cssStyl 17 | } 18 | -------------------------------------------------------------------------------- /src/config/resolve-vite.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 13:09:17 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-30 13:09:27 7 | * @FilePath: \dev\src\config\resolve-vite.js 8 | */ 9 | import { resolve } from 'path' 10 | const resolveC = { 11 | alias: [ 12 | { find: /^~@/, replacement: resolve('src') }, 13 | { find: 'vue$', replacement: 'vue/dist/vue.esm.js' }, 14 | { find: '@', replacement: resolve('src') }, 15 | { find: '_PUBLIC_', replacement: resolve('src/public') }, 16 | { find: '_PAGES_', replacement: resolve('src/page') }, 17 | { find: '_COMP_', replacement: resolve('src/public/components') } 18 | ], 19 | extensions: ['.js', '.json', '.scss', '.less'] 20 | } 21 | 22 | export default resolveC 23 | -------------------------------------------------------------------------------- /src/config/server-vite.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 13:07:29 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-30 13:07:37 7 | * @FilePath: \dev\src\config\server-vite.js 8 | */ 9 | const server = { 10 | host: true, 11 | proxy: { 12 | '/v1': { 13 | target: 'http://127.0.0.1:501/', // 对应自己的接口,代理地址修改后必须重启项目 14 | changeOrigin: true, // 是否允许跨域 15 | rewrite: (path) => path.replace(/^\/v1/, '') 16 | } 17 | } 18 | } 19 | 20 | export default server 21 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | 2 | import Vue from 'vue' 3 | import { createPersistedState } from 'pinia-persistedstate-plugin' 4 | import { createPinia, PiniaVuePlugin } from 'pinia' 5 | import App from './App.vue' 6 | import router from './router' 7 | import element from 'element-ui' 8 | import 'element-ui/lib/theme-chalk/index.css' 9 | import './assets/css/global.less' 10 | import 'nprogress/nprogress.css' 11 | import VueClipboard from 'vue-clipboard2' 12 | const pinia = createPinia() 13 | pinia.use(createPersistedState()) 14 | VueClipboard.config.autoSetContainer = true 15 | Vue.config.productionTip = process.env.NODE_ENV === 'dev' 16 | Vue.config.devtools = process.env.NODE_ENV === 'dev' 17 | Vue.use(element) 18 | Vue.use(VueClipboard) 19 | Vue.use(PiniaVuePlugin) 20 | new Vue({ 21 | pinia, 22 | router, 23 | render: h => h(App) 24 | }).$mount('#app') 25 | -------------------------------------------------------------------------------- /src/main.prod.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-04-20 20:40:43 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2023-07-01 10:17:24 7 | * @FilePath: \blazeB2\src\main.prod.js 8 | */ 9 | 10 | /* eslint-disable */ 11 | import Vue from 'vue' 12 | import { createPersistedState } from 'pinia-persistedstate-plugin' 13 | import { createPinia, PiniaVuePlugin } from 'pinia' 14 | import App from './App.vue' 15 | import router from './router' 16 | import ELEMENT from 'element-ui' 17 | import VueClipboard from 'vue-clipboard2' 18 | import './assets/css/global.less' 19 | const pinia = createPinia() 20 | pinia.use(createPersistedState()) 21 | VueClipboard.config.autoSetContainer = true 22 | Vue.config.productionTip = process.env.NODE_ENV === 'dev' 23 | Vue.config.devtools = process.env.NODE_ENV === 'dev' 24 | Vue.use(ELEMENT) 25 | Vue.use(VueClipboard) 26 | Vue.use(PiniaVuePlugin) 27 | console.log(window); 28 | new Vue({ 29 | pinia, 30 | router, 31 | render: h => h(App) 32 | }).$mount('#app') 33 | -------------------------------------------------------------------------------- /src/package/checkbox/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-30 21:08:08 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-30 21:16:47 7 | * @FilePath: \dev\src\package\checkbox\index.js 8 | */ 9 | import B2Checkbox from './src/checkbox.vue' 10 | import B2CheckboxGroup from './src/checkbox-group.vue' 11 | export { B2Checkbox, B2CheckboxGroup } 12 | -------------------------------------------------------------------------------- /src/package/checkbox/src/checkbox-group.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 49 | -------------------------------------------------------------------------------- /src/plugin/elements.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-06-24 16:09:24 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-07 10:55:28 7 | * @FilePath: \web\src\plugin\elements.js 8 | */ 9 | /*** 10 | * @Description: 11 | * @Author: Ryanuo 12 | * @Date: 2021-09-22 21:36:25 13 | * @Url: https://u.ryanuo.cc 14 | * @github: https://github.com/ryanuo 15 | * @LastEditTime: 2021-11-03 16:56:48 16 | * @LastEditors: Ryanuo 17 | */ 18 | // 导入自己需要的组件 19 | import { 20 | Dialog, 21 | Upload, 22 | Tag, 23 | Pagination, 24 | Input, 25 | Cascader, 26 | Button, 27 | Form, 28 | Select, 29 | Switch, 30 | Option, 31 | Collapse, 32 | Dropdown, 33 | DropdownMenu, 34 | DropdownItem, 35 | CollapseItem, 36 | Menu, 37 | Slider, 38 | MenuItem, 39 | Submenu, 40 | Radio, 41 | RadioGroup, 42 | Tooltip, 43 | FormItem, 44 | RadioButton 45 | } from 'element-ui' 46 | 47 | const element = { 48 | install: function (Vue) { 49 | Vue.use(Slider) 50 | Vue.use(Radio) 51 | Vue.use(Tag) 52 | Vue.use(Dialog) 53 | Vue.use(Cascader) 54 | Vue.use(Upload) 55 | Vue.use(Select) 56 | Vue.use(Switch) 57 | Vue.use(Tooltip) 58 | Vue.use(Dropdown) 59 | Vue.use(DropdownItem) 60 | Vue.use(DropdownMenu) 61 | Vue.use(Option) 62 | Vue.use(Menu) 63 | Vue.use(Collapse) 64 | Vue.use(CollapseItem) 65 | Vue.use(MenuItem) 66 | Vue.use(Submenu) 67 | Vue.use(Pagination) 68 | Vue.use(Input) 69 | Vue.use(RadioGroup) 70 | Vue.use(RadioButton) 71 | Vue.use(Form) 72 | Vue.use(Button) 73 | Vue.use(FormItem) 74 | }, 75 | other: {} 76 | } 77 | export default element 78 | -------------------------------------------------------------------------------- /src/plugin/htmlcav.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-16 20:35:30 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-29 20:24:43 7 | * @FilePath: \dev\src\plugin\htmlcav.js 8 | */ 9 | import html2canvas from 'html2canvas' 10 | export const doCut = function (shareDom, state) { 11 | console.log(shareDom.offsetHeight) 12 | return new Promise((resolve, reject) => { 13 | html2canvas(shareDom, { 14 | dpi: window.devicePixelRatio * 2, 15 | scale: 1, 16 | allowTaint: true, 17 | useCORS: true, 18 | height: shareDom.offsetHeight - 2, 19 | width: shareDom.offsetWidth, 20 | scrollY: 0, 21 | scrollX: 0 22 | }).then((canvas) => { 23 | const img = new Image() 24 | img.src = canvas.toDataURL('png') 25 | img.setAttribute('crossOrigin', 'anonymous') 26 | img.onload = function () { 27 | const imgUrl = canvas.toDataURL('image/png') 28 | // console.log(imgUrl) 29 | state.imageUrl = imgUrl 30 | // console.log(imgUrl) 31 | const blob = base64ToBlob(imgUrl) 32 | resolve(blob) 33 | // saveFile(imgUrl, 'test.png') 34 | // 根据生成的图片地址imgUrl(base64)进行后续保存操作 35 | } 36 | }) 37 | }) 38 | } 39 | 40 | function base64ToBlob(base64) { 41 | const arr = base64.split(',') 42 | const mime = arr[0].match(/:(.*?);/)[1] 43 | const bstr = atob(arr[1]) 44 | let n = bstr.length 45 | const u8arr = new Uint8Array(n) 46 | while (n--) { 47 | u8arr[n] = bstr.charCodeAt(n) 48 | } 49 | return new Blob([u8arr], { type: mime }) 50 | } 51 | -------------------------------------------------------------------------------- /src/utils/api/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-01 09:21:31 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-07 12:05:53 7 | * @FilePath: \web\src\utils\api\index.js 8 | */ 9 | import axios from '../http' 10 | 11 | const AUTH_URL = '/auth' 12 | const UPLOAD_URL = '/upload' 13 | const LIST_URL = '/list' 14 | const IMG_ITEM_URL = '/img' 15 | // 登录授权接口 16 | const auth = function (data) { 17 | return axios.post(AUTH_URL, data) 18 | } 19 | // 上传文件的接口 20 | const uploadServer = function (data) { 21 | const headers = { 22 | 'Content-Type': 'multipart/form-data' 23 | } 24 | return axios.post(UPLOAD_URL, data, { headers }) 25 | } 26 | /** 27 | * 图床列表 28 | */ 29 | const picList = function (params) { 30 | return axios.get(LIST_URL, params) 31 | } 32 | 33 | /** 34 | * 图片的删除操作 35 | */ 36 | const deleteitemImg = function (params) { 37 | return axios.delete(IMG_ITEM_URL, params) 38 | } 39 | /** 40 | * 41 | * @param {} prefix 42 | * 请求图床文件夹 43 | */ 44 | const dataTitleGet = async function (prefix) { 45 | // const _list = [] 46 | const auth = localStorage.getItem('authmsg') 47 | const reqParams = { 48 | startFileName: '', // 获得下一个文件名称,从该名称开始 49 | maxFileCount: 50, // 获取的数量 50 | prefix, // 指定文件夹前缀 51 | delimiter: '/' 52 | } 53 | // console.log(prefix) 54 | const prm = Object.assign(reqParams, JSON.parse(auth)) 55 | const { data: res } = await picList({ params: prm }) 56 | const mz = res.files.filter(v => v.fileName[v.fileName.length - 1] === '/') 57 | const n = prefix !== '' ? prefix.split('/').slice(-2, 1)[0] : null 58 | // console.log(n) 59 | if (mz.length > 0) { 60 | const a_ = mz.map(v => { 61 | const val = v.fileName.split('/') 62 | return { value: val[val.length - 2], label: val[val.length - 2], parentId: n, children: [] } 63 | }) 64 | return a_ 65 | } else { 66 | return [] 67 | } 68 | } 69 | 70 | export { 71 | auth, uploadServer, picList, deleteitemImg, dataTitleGet 72 | } 73 | -------------------------------------------------------------------------------- /src/utils/common/compress.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-05 12:33:10 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-16 14:10:01 7 | * @FilePath: \dev\src\utils\common\compress.js 8 | */ 9 | import Compressor from 'compressorjs' 10 | const HandleCompressor = function (file, quality, params, func = null) { 11 | /** 12 | * file:图片文件 13 | * quality: 图片质量 14 | * func:执行上传方法 15 | * params: 传递的信息消息体 16 | */ 17 | const res = new Compressor(file, { 18 | quality, 19 | success(result) { 20 | console.log(result) 21 | if (func) func(result, params) 22 | }, 23 | error(err) { 24 | console.log(err.message) 25 | } 26 | }) 27 | return res 28 | } 29 | 30 | const NewHandleCompressor = function (file, quality, params, func = null) { 31 | /** 32 | * file:图片文件 33 | * quality: 图片质量 34 | * func:执行上传方法 35 | * params: 传递的信息消息体 36 | */ 37 | return new Promise((resolve, reject) => { 38 | const res = new Compressor(file, { 39 | quality, 40 | success(result) { 41 | console.log(result) 42 | resolve(res) 43 | if (func) func(result, params) 44 | }, 45 | error(err) { 46 | console.log(err.message) 47 | } 48 | }) 49 | // resolve(res) 50 | }) 51 | } 52 | 53 | export { 54 | HandleCompressor, NewHandleCompressor 55 | } 56 | -------------------------------------------------------------------------------- /src/utils/common/loading.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-05 12:19:29 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-05 16:21:15 7 | * @FilePath: \web\src\utils\common\loading.js 8 | */ 9 | import { Loading } from 'element-ui' 10 | import Vue from 'vue' 11 | Vue.use(Loading.directive) 12 | let loading 13 | function startLoading(target, text) { 14 | loading = Loading.service({ 15 | target, 16 | lock: true, // 是否锁定 17 | text, // 显示在加载图标下方的加载文案 18 | spinner: 'el-icon-loading', 19 | background: 'rgba(0,0,0,.7)' // 遮罩背景色 20 | }) 21 | } 22 | 23 | function endLoading() { 24 | loading.close() 25 | } 26 | 27 | export { 28 | startLoading, endLoading 29 | } 30 | -------------------------------------------------------------------------------- /src/utils/http.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-04-20 21:07:44 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-08 12:25:57 7 | * @FilePath: \web\src\utils\http.js 8 | */ 9 | import axios from 'axios' 10 | import NProgress from 'nprogress' 11 | axios.defaults.baseURL = process.env.VUE_APP_URL 12 | const startLoading = () => { 13 | NProgress.start() 14 | } 15 | const endLoading = () => { 16 | NProgress.done() 17 | } 18 | // 请求拦截 19 | // axios.defaults.withCredentials = true # 如果开启前后端需要同时配置 20 | axios.interceptors.request.use((config) => { 21 | // 加载 22 | startLoading() 23 | return config 24 | }) 25 | 26 | // 响应拦截 27 | axios.interceptors.response.use((response) => { 28 | // 结束loading 29 | endLoading() 30 | return response 31 | }, error => { 32 | // 结束loading 33 | endLoading() 34 | // 错误提醒 35 | return Promise.reject(error) 36 | }) 37 | 38 | export default axios 39 | -------------------------------------------------------------------------------- /src/views/About/About.vue: -------------------------------------------------------------------------------- 1 | 9 | 24 | 25 | 41 | 42 | 45 | -------------------------------------------------------------------------------- /src/views/About/about.module.less: -------------------------------------------------------------------------------- 1 | .main-title { 2 | margin: 1.8rem auto; 3 | font-size: 3rem; 4 | } 5 | 6 | .p-shield { 7 | a { 8 | padding: 5px; 9 | 10 | img { 11 | margin: 7px 0; 12 | } 13 | } 14 | } 15 | 16 | .p-statement { 17 | margin: 10px 0; 18 | } 19 | 20 | .p-simple { 21 | font-size: 20px; 22 | margin: 20px 0; 23 | line-height: 30px; 24 | border-bottom: 1px solid #f2f2f2; 25 | padding: 5px 0; 26 | } -------------------------------------------------------------------------------- /src/views/ImgManage/ImageItem/ImageItem.vue: -------------------------------------------------------------------------------- 1 | 9 | 29 | 30 | 67 | 68 | 71 | -------------------------------------------------------------------------------- /src/views/ImgManage/ImageItem/imageitem.module.less: -------------------------------------------------------------------------------- 1 | .el-image { 2 | width: 100%; 3 | 4 | /deep/ img.el-image__inner { 5 | width: 98%; 6 | height: 100px; 7 | border-radius: 10px; 8 | object-fit: cover; 9 | } 10 | 11 | } 12 | 13 | .pic-tit { 14 | padding: 3px 10px; 15 | display: flex; 16 | border-bottom: 1px dashed #f2f2f2; 17 | align-items: center; 18 | 19 | span { 20 | flex: auto; 21 | // padding-left: 15px; 22 | overflow: hidden; //超出的文本隐藏 23 | text-overflow: ellipsis; //溢出用省略号显示 24 | white-space: nowrap; //溢出不换行 25 | // border-bottom: 1px dashed #f2f2f2; 26 | } 27 | } 28 | 29 | .pic-tit-checked { 30 | background-color: var(--b2-btn-time); 31 | border-radius: 6px; 32 | } 33 | 34 | .time-span { 35 | position: absolute; 36 | padding: 1px 3px; 37 | background: var(--b2-btn-time); 38 | border-radius: 8px; 39 | margin-left: 0; 40 | font-size: .5rem; 41 | font-weight: 700; 42 | color: var(--bg-text);; 43 | bottom: 3%; 44 | left: 3%; 45 | z-index: 2; 46 | display: none; 47 | } 48 | 49 | .img-item-t1 { 50 | &:hover { 51 | 52 | // .moremsg, 53 | /deep/ .el-checkbox__inner { 54 | box-shadow: 0 0 5px 0 #ccc; 55 | transition: all .4s ease-in; 56 | opacity: 1; 57 | } 58 | } 59 | } 60 | .link-copy-w{ 61 | display: none; 62 | } 63 | /deep/.image-slot { 64 | width: 98%; 65 | height: 100px; 66 | background: url(/img/loading1.gif) no-repeat; 67 | background-position: center center; 68 | } -------------------------------------------------------------------------------- /src/views/ImgManage/contextMenu/ContextMenu.vue: -------------------------------------------------------------------------------- 1 | 9 | 16 | 17 | 79 | 80 | 83 | -------------------------------------------------------------------------------- /src/views/ImgManage/contextMenu/contextmenu.module.less: -------------------------------------------------------------------------------- 1 | .context-menu-container { 2 | position: absolute; 3 | outline: 0; 4 | max-width: calc(100% - 32px); 5 | min-width: 16px; 6 | max-height: calc(100% - 32px); 7 | min-height: 16px; 8 | overflow-x: hidden; 9 | overflow-y: auto; 10 | padding: 10px; 11 | border-radius: 10px; 12 | opacity: 1; 13 | background-color: var(--b2-active); 14 | color: var(--bg-text); 15 | box-shadow: 0px 5px 5px -3px rgba(0, 0, 0, 20%), 0px 8px 10px 1px rgba(0, 0, 0, 14%), 0px 3px 14px 2px rgba(0, 0, 0, 12%); 16 | z-index: 4; 17 | 18 | >li { 19 | font-size: 16px; 20 | min-height: auto; 21 | font-family: "Roboto", "Helvetica", "Arial", sans-serif; 22 | font-weight: 400; 23 | line-height: 1.43; 24 | letter-spacing: 0.01071em; 25 | border-bottom: 1px dashed #f2f2f2; 26 | cursor: pointer; 27 | padding: 2px 10px; 28 | 29 | &:hover { 30 | background-color: rgba(0, 0, 0, .4); 31 | color: #fff; 32 | border-radius: 5px; 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /src/views/Setting/setDefault/setdefault.module.less: -------------------------------------------------------------------------------- 1 | .set-defalut { 2 | 3 | .el-cascader, 4 | .el-input { 5 | width: 249px; 6 | margin-top: 20px; 7 | margin-right: 10px; 8 | } 9 | } -------------------------------------------------------------------------------- /src/views/Setting/setMain/SetCompress.vue: -------------------------------------------------------------------------------- 1 | 9 | 28 | 29 | 65 | 66 | 69 | -------------------------------------------------------------------------------- /src/views/Setting/setMain/setcom.module.less: -------------------------------------------------------------------------------- 1 | .set-commpress { 2 | padding: 10px 0; 3 | } 4 | 5 | .block-compress { 6 | padding: 20px 0; 7 | } 8 | 9 | .slide-w { 10 | padding: 0 20px; 11 | // width: 50%; 12 | } 13 | 14 | .set-commpress-hd { 15 | display: flex; 16 | justify-content: space-between; 17 | align-items: center; 18 | } 19 | 20 | @media only screen and (max-width: 537px) { 21 | .slide-w { 22 | padding: 0 5px; 23 | width: 100%; 24 | box-sizing: border-box; 25 | } 26 | } -------------------------------------------------------------------------------- /src/views/Setting/setUploadFile/SetUpload.vue: -------------------------------------------------------------------------------- 1 | 9 | 17 | 18 | 53 | 54 | 57 | -------------------------------------------------------------------------------- /src/views/Setting/setUploadFile/setupload.module.less: -------------------------------------------------------------------------------- 1 | .set-upload { 2 | .el-input { 3 | width: 249px; 4 | margin-right: 10px; 5 | } 6 | } -------------------------------------------------------------------------------- /src/views/Setting/setdefaultCopy/SetDefaultCopy.vue: -------------------------------------------------------------------------------- 1 | 9 | 17 | 18 | 45 | 46 | 53 | -------------------------------------------------------------------------------- /src/views/Setting/setprefix/SetPrefix.vue: -------------------------------------------------------------------------------- 1 | 9 | 22 | 23 | 71 | 72 | 75 | -------------------------------------------------------------------------------- /src/views/Setting/setprefix/setpre.module.less: -------------------------------------------------------------------------------- 1 | .set-prefix { 2 | .el-input { 3 | width: 217px; 4 | margin-top: 10px; 5 | margin-right: 10px; 6 | } 7 | } -------------------------------------------------------------------------------- /src/views/Setting/setting.module.less: -------------------------------------------------------------------------------- 1 | .el-collapse-item { 2 | color: var(--b2-text); 3 | 4 | /deep/ .el-collapse-item__header { 5 | font-size: 16px; 6 | font-weight: bold; 7 | height: 68px; 8 | line-height: 68px; 9 | padding-left: 20px; 10 | background-color: var(--b2-bg); 11 | color: var(--b2-text); 12 | border-bottom: 1px solid var(--b2-border); 13 | } 14 | 15 | /deep/ .el-form-item__label { 16 | color: var(--b2-text); 17 | } 18 | 19 | /deep/ .el-collapse-item__content { 20 | padding-left: 5px; 21 | color: var(--b2-text); 22 | } 23 | 24 | /deep/ .el-collapse-item__wrap { 25 | background-color: var(--b2-pre-bg); 26 | } 27 | } 28 | 29 | .el-collapse { 30 | margin: 0 20px; 31 | height: 70vh; 32 | max-height: 70vh; 33 | overflow: auto; 34 | border-top: 1px solid var(--b2-border); 35 | border-bottom: 1px solid var(--b2-border); 36 | 37 | /deep/ .el-select { 38 | margin-right: 10px; 39 | } 40 | 41 | h2 { 42 | margin-top: 10px; 43 | margin-bottom: 20px; 44 | padding-left: 10px; 45 | font-size: 15px; 46 | font-weight: bold; 47 | border-left: 5px solid var(--b2-theme-c); 48 | } 49 | } 50 | 51 | .set-tit { 52 | font-size: 3rem; 53 | font-weight: bold; 54 | font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 55 | text-align: center; 56 | margin: 20px 0; 57 | } -------------------------------------------------------------------------------- /src/views/Setting/setwatermark/SetWatermark.vue: -------------------------------------------------------------------------------- 1 | 9 | 20 | 21 | 47 | 48 | 51 | -------------------------------------------------------------------------------- /src/views/Setting/setwatermark/setwate.module.less: -------------------------------------------------------------------------------- 1 | .set-water-mask{ 2 | .el-switch{ 3 | margin-bottom: 20px; 4 | } 5 | } -------------------------------------------------------------------------------- /src/views/formview/formview.module.less: -------------------------------------------------------------------------------- 1 | .set-tit { 2 | font-size: 3rem; 3 | font-weight: bold; 4 | font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 5 | text-align: center; 6 | margin: 20px 0; 7 | } 8 | 9 | 10 | .form-w { 11 | p { 12 | padding: 5px; 13 | } 14 | } 15 | 16 | .btn-wrap-form{ 17 | float: right; 18 | margin-top: 10px; 19 | overflow: hidden; 20 | } -------------------------------------------------------------------------------- /src/views/svg/CloseSvg.vue: -------------------------------------------------------------------------------- 1 | 9 | 17 | 18 | 23 | 24 | 26 | -------------------------------------------------------------------------------- /src/views/svg/CopyAll.vue: -------------------------------------------------------------------------------- 1 | 9 | 22 | 23 | 28 | -------------------------------------------------------------------------------- /src/views/svg/CopyView.vue: -------------------------------------------------------------------------------- 1 | 9 | 23 | -------------------------------------------------------------------------------- /src/views/svg/DeleteSelect.vue: -------------------------------------------------------------------------------- 1 | 9 | 25 | 26 | 31 | -------------------------------------------------------------------------------- /src/views/svg/LayOut.vue: -------------------------------------------------------------------------------- 1 | 9 | 20 | 21 | 26 | 27 | 32 | -------------------------------------------------------------------------------- /src/views/svg/Refresh.vue: -------------------------------------------------------------------------------- 1 | 9 | 20 | -------------------------------------------------------------------------------- /src/views/svg/SignSvg.vue: -------------------------------------------------------------------------------- 1 | 9 | 23 | 24 | 29 | 30 | 32 | -------------------------------------------------------------------------------- /src/views/svg/TogChecked.vue: -------------------------------------------------------------------------------- 1 | 9 | 24 | 25 | 40 | 41 | 46 | -------------------------------------------------------------------------------- /src/views/svg/VPIconGitHub.vue: -------------------------------------------------------------------------------- 1 | 9 | 15 | -------------------------------------------------------------------------------- /src/views/svg/VPIconMoon.vue: -------------------------------------------------------------------------------- 1 | 9 | 15 | -------------------------------------------------------------------------------- /src/views/svg/VPIconSun.vue: -------------------------------------------------------------------------------- 1 | 9 | 27 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-24 11:20:59 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2023-07-01 10:28:58 7 | * @FilePath: \blazeB2\vite.config.js 8 | */ 9 | import { defineConfig, loadEnv } from 'vite' 10 | import { plugins, build, server, resolveC, cssStyl } from './src/config' 11 | export default ({ mode }) => { 12 | function getEnv(key) { // 定义获取环境变量的方法 13 | return loadEnv(mode, process.cwd(), '')[key] // 第三个参数非常重要,下面有详解 14 | } 15 | return defineConfig({ 16 | base: getEnv('VUE_APP_PUBLICPATH'), // 读取环境变量 17 | publicDir: 'public', 18 | css: cssStyl, 19 | optimizeDeps: { 20 | exclude: ['__INDEX__'] // 排除 __INDEX__ 21 | }, 22 | plugins: plugins(mode), 23 | build, 24 | envPrefix: ['VUE_APP_'], // 很重要 25 | resolve: resolveC, 26 | server 27 | }) 28 | } 29 | -------------------------------------------------------------------------------- /workbox-config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Ryanuo 3 | * @Date: 2022-07-19 10:38:01 4 | * @LastEditors: ryanuo 5 | * @Github: https://github.com/ryanuo 6 | * @LastEditTime: 2022-07-19 10:50:42 7 | * @FilePath: \dev\workbox-config.js 8 | */ 9 | const dataId = Date.now() 10 | module.exports = { 11 | globDirectory: 'dist', 12 | globPatterns: [ 13 | '**/*.{css,html,js}' 14 | ], 15 | cacheId: dataId + '', 16 | cleanupOutdatedCaches: true, 17 | swDest: 'dist/sw.js', 18 | ignoreURLParametersMatching: [ 19 | /^utm_/, 20 | /^fbclid$/ 21 | ], 22 | skipWaiting: true, 23 | clientsClaim: true, 24 | sourcemap: false 25 | } 26 | --------------------------------------------------------------------------------