Compare commits
3 Commits
main
...
base-eslin
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0837679315 | ||
![]() |
6ce0f55227 | ||
![]() |
b8db37f82c |
@ -1,3 +1,106 @@
|
|||||||
|
const { execSync } = require('node:child_process')
|
||||||
|
const fs = require('node:fs')
|
||||||
|
const path = require('node:path')
|
||||||
|
|
||||||
|
const scopes = fs
|
||||||
|
.readdirSync(path.resolve(__dirname, 'src'), { withFileTypes: true })
|
||||||
|
.filter(dirent => dirent.isDirectory())
|
||||||
|
.map(dirent => dirent.name.replace(/s$/, ''))
|
||||||
|
|
||||||
|
// precomputed scope
|
||||||
|
const scopeComplete = execSync('git status --porcelain || true')
|
||||||
|
.toString()
|
||||||
|
.trim()
|
||||||
|
.split('\n')
|
||||||
|
.find(r => ~r.indexOf('M src'))
|
||||||
|
?.replace(/\//g, '%%')
|
||||||
|
?.match(/src%%([\w-]*)/)?.[1]
|
||||||
|
?.replace(/s$/, '')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
ignores: [commit => commit.includes('init')],
|
||||||
extends: ['@commitlint/config-conventional'],
|
extends: ['@commitlint/config-conventional'],
|
||||||
|
rules: {
|
||||||
|
'body-leading-blank': [2, 'always'],
|
||||||
|
'footer-leading-blank': [1, 'always'],
|
||||||
|
'header-max-length': [2, 'always', 108],
|
||||||
|
'subject-empty': [2, 'never'],
|
||||||
|
'type-empty': [2, 'never'],
|
||||||
|
'subject-case': [0],
|
||||||
|
'type-enum': [
|
||||||
|
2,
|
||||||
|
'always',
|
||||||
|
[
|
||||||
|
'feat',
|
||||||
|
'fix',
|
||||||
|
'perf',
|
||||||
|
'style',
|
||||||
|
'docs',
|
||||||
|
'test',
|
||||||
|
'refactor',
|
||||||
|
'build',
|
||||||
|
'ci',
|
||||||
|
'chore',
|
||||||
|
'revert',
|
||||||
|
'wip',
|
||||||
|
'workflow',
|
||||||
|
'types',
|
||||||
|
'release',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
prompt: {
|
||||||
|
/** @use `pnpm commit :f` */
|
||||||
|
alias: {
|
||||||
|
f: 'docs: fix typos',
|
||||||
|
r: 'docs: update README',
|
||||||
|
s: 'style: update code format',
|
||||||
|
b: 'build: bump dependencies',
|
||||||
|
c: 'chore: update config',
|
||||||
|
},
|
||||||
|
customScopesAlign: !scopeComplete ? 'top' : 'bottom',
|
||||||
|
defaultScope: scopeComplete,
|
||||||
|
scopes: [...scopes, 'mock'],
|
||||||
|
allowEmptyIssuePrefixs: false,
|
||||||
|
allowCustomIssuePrefixs: false,
|
||||||
|
|
||||||
|
// English
|
||||||
|
typesAppend: [
|
||||||
|
{ value: 'wip', name: 'wip: work in process' },
|
||||||
|
{ value: 'workflow', name: 'workflow: workflow improvements' },
|
||||||
|
{ value: 'types', name: 'types: type definition file changes' },
|
||||||
|
],
|
||||||
|
|
||||||
|
// 中英文对照版
|
||||||
|
// messages: {
|
||||||
|
// type: '选择你要提交的类型 :',
|
||||||
|
// scope: '选择一个提交范围 (可选):',
|
||||||
|
// customScope: '请输入自定义的提交范围 :',
|
||||||
|
// subject: '填写简短精炼的变更描述 :\n',
|
||||||
|
// body: '填写更加详细的变更描述 (可选)。使用 "|" 换行 :\n',
|
||||||
|
// breaking: '列举非兼容性重大的变更 (可选)。使用 "|" 换行 :\n',
|
||||||
|
// footerPrefixsSelect: '选择关联issue前缀 (可选):',
|
||||||
|
// customFooterPrefixs: '输入自定义issue前缀 :',
|
||||||
|
// footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',
|
||||||
|
// confirmCommit: '是否提交或修改commit ?',
|
||||||
|
// },
|
||||||
|
// types: [
|
||||||
|
// { value: 'feat', name: 'feat: 新增功能' },
|
||||||
|
// { value: 'fix', name: 'fix: 修复缺陷' },
|
||||||
|
// { value: 'docs', name: 'docs: 文档变更' },
|
||||||
|
// { value: 'style', name: 'style: 代码格式' },
|
||||||
|
// { value: 'refactor', name: 'refactor: 代码重构' },
|
||||||
|
// { value: 'perf', name: 'perf: 性能优化' },
|
||||||
|
// { value: 'test', name: 'test: 添加疏漏测试或已有测试改动' },
|
||||||
|
// { value: 'build', name: 'build: 构建流程、外部依赖变更 (如升级 npm 包、修改打包配置等)' },
|
||||||
|
// { value: 'ci', name: 'ci: 修改 CI 配置、脚本' },
|
||||||
|
// { value: 'revert', name: 'revert: 回滚 commit' },
|
||||||
|
// { value: 'chore', name: 'chore: 对构建过程或辅助工具和库的更改 (不影响源文件、测试用例)' },
|
||||||
|
// { value: 'wip', name: 'wip: 正在开发中' },
|
||||||
|
// { value: 'workflow', name: 'workflow: 工作流程改进' },
|
||||||
|
// { value: 'types', name: 'types: 类型定义文件修改' },
|
||||||
|
// ],
|
||||||
|
// emptyScopesAlias: 'empty: 不填写',
|
||||||
|
// customScopesAlias: 'custom: 自定义',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
52
.github/workflows/auto-merge.yml
vendored
52
.github/workflows/auto-merge.yml
vendored
@ -1,14 +1,14 @@
|
|||||||
name: Auto Merge Main to Other Branches
|
name: Auto Merge Base to Other Branches
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- base
|
||||||
workflow_dispatch: # 手动触发
|
workflow_dispatch: # 手动触发
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
merge-to-i18n:
|
merge-to-i18n:
|
||||||
name: Merge main into i18n
|
name: Merge base into i18n
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
@ -17,16 +17,16 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
|
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
|
||||||
|
|
||||||
- name: Merge main into i18n
|
- name: Merge base into i18n
|
||||||
run: |
|
run: |
|
||||||
git config user.name "GitHub Actions"
|
git config user.name "GitHub Actions"
|
||||||
git config user.email "actions@github.com"
|
git config user.email "actions@github.com"
|
||||||
git checkout i18n
|
git checkout i18n
|
||||||
git merge main --no-ff -m "Auto merge main into i18n"
|
git merge base --no-ff -m "Auto merge base into i18n"
|
||||||
git push origin i18n
|
git push origin i18n
|
||||||
|
|
||||||
merge-to-base-sard-ui:
|
merge-to-tabbar:
|
||||||
name: Merge main into base-sard-ui
|
name: Merge base into tabbar
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
@ -35,16 +35,16 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
|
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
|
||||||
|
|
||||||
- name: Merge main into base-sard-ui
|
- name: Merge base into tabbar
|
||||||
run: |
|
run: |
|
||||||
git config user.name "GitHub Actions"
|
git config user.name "GitHub Actions"
|
||||||
git config user.email "actions@github.com"
|
git config user.email "actions@github.com"
|
||||||
git checkout base-sard-ui
|
git checkout tabbar
|
||||||
git merge main --no-ff -m "Auto merge main into base-sard-ui"
|
git merge base --no-ff -m "Auto merge base into tabbar"
|
||||||
git push origin base-sard-ui
|
git push origin tabbar
|
||||||
|
|
||||||
merge-to-base-uv-ui:
|
merge-to-spa:
|
||||||
name: Merge main into base-uv-ui
|
name: Merge base into spa
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
@ -53,28 +53,10 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
|
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
|
||||||
|
|
||||||
- name: Merge main into base-uv-ui
|
- name: Merge base into spa
|
||||||
run: |
|
run: |
|
||||||
git config user.name "GitHub Actions"
|
git config user.name "GitHub Actions"
|
||||||
git config user.email "actions@github.com"
|
git config user.email "actions@github.com"
|
||||||
git checkout base-uv-ui
|
git checkout spa
|
||||||
git merge main --no-ff -m "Auto merge main into base-uv-ui"
|
git merge base --no-ff -m "Auto merge base into spa"
|
||||||
git push origin base-uv-ui
|
git push origin spa
|
||||||
|
|
||||||
merge-to-base-uview-plus:
|
|
||||||
name: Merge main into base-uview-plus
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
token: ${{ secrets.GH_TOKEN_AUTO_MERGE }}
|
|
||||||
|
|
||||||
- name: Merge main into base-uview-plus
|
|
||||||
run: |
|
|
||||||
git config user.name "GitHub Actions"
|
|
||||||
git config user.email "actions@github.com"
|
|
||||||
git checkout base-uview-plus
|
|
||||||
git merge main --no-ff -m "Auto merge main into base-uview-plus"
|
|
||||||
git push origin base-uview-plus
|
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -27,7 +27,7 @@ dist
|
|||||||
docs/.vitepress/dist
|
docs/.vitepress/dist
|
||||||
docs/.vitepress/cache
|
docs/.vitepress/cache
|
||||||
|
|
||||||
src/types
|
types
|
||||||
|
|
||||||
# lock 文件还是不要了,我主要的版本写死就好了
|
# lock 文件还是不要了,我主要的版本写死就好了
|
||||||
# pnpm-lock.yaml
|
# pnpm-lock.yaml
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
node_modules
|
|
||||||
|
|
||||||
# unplugin-auto-import 生成的类型文件,每次提交都改变,所以加入这里吧,与 .gitignore 配合使用
|
# unplugin-auto-import 生成的类型文件,每次提交都改变,所以加入这里吧,与 .gitignore 配合使用
|
||||||
auto-import.d.ts
|
auto-import.d.ts
|
||||||
|
|
||||||
|
35
.vscode/settings.json
vendored
35
.vscode/settings.json
vendored
@ -1,13 +1,4 @@
|
|||||||
{
|
{
|
||||||
// 默认格式化工具选择prettier
|
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
||||||
|
|
||||||
// 配置stylelint检查的文件类型范围
|
|
||||||
"stylelint.validate": ["css", "scss", "vue", "html"], // 与package.json的scripts对应
|
|
||||||
"stylelint.enable": true,
|
|
||||||
"css.validate": false,
|
|
||||||
"less.validate": false,
|
|
||||||
"scss.validate": false,
|
|
||||||
"[shellscript]": {
|
"[shellscript]": {
|
||||||
"editor.defaultFormatter": "foxundermoon.shell-format"
|
"editor.defaultFormatter": "foxundermoon.shell-format"
|
||||||
},
|
},
|
||||||
@ -29,6 +20,7 @@
|
|||||||
"manifest.json": "jsonc" // manifest.json 可以写注释
|
"manifest.json": "jsonc" // manifest.json 可以写注释
|
||||||
},
|
},
|
||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
|
"aliyun",
|
||||||
"Aplipay",
|
"Aplipay",
|
||||||
"climblee",
|
"climblee",
|
||||||
"commitlint",
|
"commitlint",
|
||||||
@ -41,8 +33,8 @@
|
|||||||
"tabbar",
|
"tabbar",
|
||||||
"Toutiao",
|
"Toutiao",
|
||||||
"unibest",
|
"unibest",
|
||||||
"uview",
|
|
||||||
"uvui",
|
"uvui",
|
||||||
|
"vitepress",
|
||||||
"Wechat",
|
"Wechat",
|
||||||
"WechatMiniprogram",
|
"WechatMiniprogram",
|
||||||
"Weixin"
|
"Weixin"
|
||||||
@ -53,31 +45,19 @@
|
|||||||
"explorer.fileNesting.patterns": {
|
"explorer.fileNesting.patterns": {
|
||||||
"README.md": "index.html,favicon.ico,robots.txt,CHANGELOG.md",
|
"README.md": "index.html,favicon.ico,robots.txt,CHANGELOG.md",
|
||||||
"pages.config.ts": "manifest.config.ts,openapi-ts-request.config.ts",
|
"pages.config.ts": "manifest.config.ts,openapi-ts-request.config.ts",
|
||||||
"package.json": "tsconfig.json,pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,.gitattributes,.gitignore,.gitpod.yml,CNAME,.npmrc,.browserslistrc",
|
"package.json": "pnpm-lock.yaml,pnpm-workspace.yaml,LICENSE,.gitattributes,.gitignore,.gitpod.yml,CNAME,.npmrc,.browserslistrc",
|
||||||
"eslint.config.mjs": ".commitlintrc.*,.prettier*,.editorconfig,.commitlint.cjs,.eslint*"
|
"eslint.config.mjs": "tsconfig.json,.commitlintrc.*,.editorconfig,.commitlint.cjs,.eslint*,.prettier*"
|
||||||
},
|
},
|
||||||
|
// 禁用默认格式化程序,改用ESLint
|
||||||
// // 保存的时候自动格式化
|
|
||||||
// "prettier.enable": true,
|
|
||||||
// "editor.formatOnSave": true,
|
|
||||||
// // 开启自动修复
|
|
||||||
// "editor.codeActionsOnSave": {
|
|
||||||
// "source.fixAll": "explicit",
|
|
||||||
// "source.fixAll.eslint": "explicit",
|
|
||||||
// "source.fixAll.stylelint": "explicit"
|
|
||||||
// },
|
|
||||||
|
|
||||||
// Disable the default formatter, use eslint instead
|
|
||||||
"prettier.enable": false,
|
"prettier.enable": false,
|
||||||
"editor.formatOnSave": false,
|
"editor.formatOnSave": false,
|
||||||
|
|
||||||
// Auto fix
|
// 自动修复
|
||||||
"editor.codeActionsOnSave": {
|
"editor.codeActionsOnSave": {
|
||||||
"source.fixAll.eslint": "explicit",
|
"source.fixAll.eslint": "explicit",
|
||||||
"source.organizeImports": "never"
|
"source.organizeImports": "never"
|
||||||
},
|
},
|
||||||
|
|
||||||
// Silent the stylistic rules in you IDE, but still auto fix them
|
|
||||||
"eslint.rules.customizations": [
|
"eslint.rules.customizations": [
|
||||||
{ "rule": "style/*", "severity": "off", "fixable": true },
|
{ "rule": "style/*", "severity": "off", "fixable": true },
|
||||||
{ "rule": "format/*", "severity": "off", "fixable": true },
|
{ "rule": "format/*", "severity": "off", "fixable": true },
|
||||||
@ -91,7 +71,7 @@
|
|||||||
{ "rule": "*semi", "severity": "off", "fixable": true }
|
{ "rule": "*semi", "severity": "off", "fixable": true }
|
||||||
],
|
],
|
||||||
|
|
||||||
// Enable eslint for all supported languages
|
// 为所有支持的语言启用ESLint
|
||||||
"eslint.validate": [
|
"eslint.validate": [
|
||||||
"javascript",
|
"javascript",
|
||||||
"javascriptreact",
|
"javascriptreact",
|
||||||
@ -101,7 +81,6 @@
|
|||||||
"html",
|
"html",
|
||||||
"markdown",
|
"markdown",
|
||||||
"json",
|
"json",
|
||||||
"json5",
|
|
||||||
"jsonc",
|
"jsonc",
|
||||||
"yaml",
|
"yaml",
|
||||||
"toml",
|
"toml",
|
||||||
|
26
.vscode/vue3.code-snippets
vendored
26
.vscode/vue3.code-snippets
vendored
@ -27,12 +27,12 @@
|
|||||||
" },",
|
" },",
|
||||||
"}",
|
"}",
|
||||||
"</route>\n",
|
"</route>\n",
|
||||||
"<script lang=\"ts\" setup>",
|
|
||||||
"//$3",
|
|
||||||
"</script>\n",
|
|
||||||
"<template>",
|
"<template>",
|
||||||
" <view class=\"\">$2</view>",
|
" <view class=\"\">$2</view>",
|
||||||
"</template>\n",
|
"</template>\n",
|
||||||
|
"<script lang=\"ts\" setup>",
|
||||||
|
"//$3",
|
||||||
|
"</script>\n",
|
||||||
"<style lang=\"scss\" scoped>",
|
"<style lang=\"scss\" scoped>",
|
||||||
"//$4",
|
"//$4",
|
||||||
"</style>\n",
|
"</style>\n",
|
||||||
@ -41,28 +41,16 @@
|
|||||||
"Print unibest style": {
|
"Print unibest style": {
|
||||||
"scope": "vue",
|
"scope": "vue",
|
||||||
"prefix": "st",
|
"prefix": "st",
|
||||||
"body": [
|
"body": ["<style lang=\"scss\" scoped>", "//", "</style>\n"],
|
||||||
"<style lang=\"scss\" scoped>",
|
|
||||||
"//",
|
|
||||||
"</style>\n"
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
"Print unibest script": {
|
"Print unibest script": {
|
||||||
"scope": "vue",
|
"scope": "vue",
|
||||||
"prefix": "sc",
|
"prefix": "sc",
|
||||||
"body": [
|
"body": ["<script lang=\"ts\" setup>", "//$3", "</script>\n"],
|
||||||
"<script lang=\"ts\" setup>",
|
|
||||||
"//$3",
|
|
||||||
"</script>\n"
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
"Print unibest template": {
|
"Print unibest template": {
|
||||||
"scope": "vue",
|
"scope": "vue",
|
||||||
"prefix": "te",
|
"prefix": "te",
|
||||||
"body": [
|
"body": ["<template>", " <view class=\"\">$1</view>", "</template>\n"],
|
||||||
"<template>",
|
|
||||||
" <view class=\"\">$1</view>",
|
|
||||||
"</template>\n"
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -70,13 +70,13 @@
|
|||||||
## 📦 运行(支持热更新)
|
## 📦 运行(支持热更新)
|
||||||
|
|
||||||
- web平台: `pnpm dev:h5`, 然后打开 [http://localhost:9000/](http://localhost:9000/)。
|
- web平台: `pnpm dev:h5`, 然后打开 [http://localhost:9000/](http://localhost:9000/)。
|
||||||
- weixin平台:`pnpm dev:mp` 然后打开微信开发者工具,导入本地文件夹,选择本项目的`dist/dev/mp-weixin` 文件。
|
- weixin平台:`pnpm dev:mp-weixin` 然后打开微信开发者工具,导入本地文件夹,选择本项目的`dist/dev/mp-weixin` 文件。
|
||||||
- APP平台:`pnpm dev:app`, 然后打开 `HBuilderX`,导入刚刚生成的`dist/dev/app` 文件夹,选择运行到模拟器(开发时优先使用),或者运行的安卓/ios基座。
|
- APP平台:`pnpm dev:app`, 然后打开 `HBuilderX`,导入刚刚生成的`dist/dev/app` 文件夹,选择运行到模拟器(开发时优先使用),或者运行的安卓/ios基座。
|
||||||
|
|
||||||
## 🔗 发布
|
## 🔗 发布
|
||||||
|
|
||||||
- web平台: `pnpm build:h5`,打包后的文件在 `dist/build/h5`,可以放到web服务器,如nginx运行。如果最终不是放在根目录,可以在 `manifest.config.ts` 文件的 `h5.router.base` 属性进行修改。
|
- web平台: `pnpm build:h5`,打包后的文件在 `dist/build/h5`,可以放到web服务器,如nginx运行。如果最终不是放在根目录,可以在 `manifest.config.ts` 文件的 `h5.router.base` 属性进行修改。
|
||||||
- weixin平台:`pnpm build:mp`, 打包后的文件在 `dist/build/mp-weixin`,然后通过微信开发者工具导入,并点击右上角的“上传”按钮进行上传。
|
- weixin平台:`pnpm build:mp-weixin`, 打包后的文件在 `dist/build/mp-weixin`,然后通过微信开发者工具导入,并点击右上角的“上传”按钮进行上传。
|
||||||
- APP平台:`pnpm build:app`, 然后打开 `HBuilderX`,导入刚刚生成的`dist/build/app` 文件夹,选择发行 - APP云打包。
|
- APP平台:`pnpm build:app`, 然后打开 `HBuilderX`,导入刚刚生成的`dist/build/app` 文件夹,选择发行 - APP云打包。
|
||||||
|
|
||||||
## 📄 License
|
## 📄 License
|
||||||
|
@ -1,22 +1,21 @@
|
|||||||
import uniHelper from '@uni-helper/eslint-config'
|
// eslint.config.mjs
|
||||||
|
import uniHelper from '@uni-helper/eslint-config'
|
||||||
export default uniHelper({
|
|
||||||
unocss: true,
|
export default uniHelper({
|
||||||
vue: true,
|
unocss: true,
|
||||||
markdown: false,
|
markdown: false,
|
||||||
ignores: [
|
ignores: [
|
||||||
'src/uni_modules/',
|
'src/uni_modules/',
|
||||||
'dist',
|
'dist',
|
||||||
],
|
],
|
||||||
rules: {
|
rules: {
|
||||||
'no-console': 'off',
|
'no-console': 'off',
|
||||||
'no-unused-vars': 'off',
|
'no-unused-vars': 'off',
|
||||||
'vue/no-unused-refs': 'off',
|
'vue/no-unused-refs': 'off',
|
||||||
'unused-imports/no-unused-vars': 'off',
|
'unused-imports/no-unused-vars': 'off',
|
||||||
'eslint-comments/no-unlimited-disable': 'off',
|
'eslint-comments/no-unlimited-disable': 'off',
|
||||||
'jsdoc/check-param-names': 'off',
|
'jsdoc/check-param-names': 'off',
|
||||||
'jsdoc/require-returns-description': 'off',
|
'jsdoc/require-returns-description': 'off',
|
||||||
'ts/no-empty-object-type': 'off',
|
'ts/no-empty-object-type': 'off',
|
||||||
'no-extend-native': 'off',
|
},
|
||||||
},
|
})
|
||||||
})
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import process from 'node:process'
|
import process from 'node:process'
|
||||||
|
|
||||||
// manifest.config.ts
|
// manifest.config.ts
|
||||||
import { defineManifestConfig } from '@uni-helper/vite-plugin-uni-manifest'
|
import { defineManifestConfig } from '@uni-helper/vite-plugin-uni-manifest'
|
||||||
import { loadEnv } from 'vite'
|
import { loadEnv } from 'vite'
|
||||||
|
20
package.json
20
package.json
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "unibest",
|
"name": "unibest",
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"version": "3.1.0",
|
"version": "2.13.1",
|
||||||
"description": "unibest - 最好的 uniapp 开发模板",
|
"description": "unibest - 最好的 uniapp 开发模板",
|
||||||
"update-time": "2025-06-21",
|
"update-time": "2025-06-17",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "feige996",
|
"name": "feige996",
|
||||||
"zhName": "菲鸽",
|
"zhName": "菲鸽",
|
||||||
@ -72,8 +72,9 @@
|
|||||||
"type-check": "vue-tsc --noEmit",
|
"type-check": "vue-tsc --noEmit",
|
||||||
"openapi-ts-request": "openapi-ts",
|
"openapi-ts-request": "openapi-ts",
|
||||||
"prepare": "git init && husky",
|
"prepare": "git init && husky",
|
||||||
"lint": "eslint",
|
"lint": "eslint .",
|
||||||
"lint:fix": "eslint --fix"
|
"lint:fix": "eslint . --fix"
|
||||||
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@dcloudio/uni-app": "3.0.0-4060620250520001",
|
"@dcloudio/uni-app": "3.0.0-4060620250520001",
|
||||||
@ -98,6 +99,7 @@
|
|||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"pinia": "2.0.36",
|
"pinia": "2.0.36",
|
||||||
"pinia-plugin-persistedstate": "3.2.1",
|
"pinia-plugin-persistedstate": "3.2.1",
|
||||||
|
"qs": "6.5.3",
|
||||||
"vue": "^3.4.21",
|
"vue": "^3.4.21",
|
||||||
"wot-design-uni": "^1.9.1",
|
"wot-design-uni": "^1.9.1",
|
||||||
"z-paging": "2.8.7"
|
"z-paging": "2.8.7"
|
||||||
@ -111,8 +113,8 @@
|
|||||||
"@dcloudio/uni-cli-shared": "3.0.0-4060620250520001",
|
"@dcloudio/uni-cli-shared": "3.0.0-4060620250520001",
|
||||||
"@dcloudio/uni-stacktracey": "3.0.0-4060620250520001",
|
"@dcloudio/uni-stacktracey": "3.0.0-4060620250520001",
|
||||||
"@dcloudio/vite-plugin-uni": "3.0.0-4060620250520001",
|
"@dcloudio/vite-plugin-uni": "3.0.0-4060620250520001",
|
||||||
"@esbuild/darwin-arm64": "0.20.2",
|
"@esbuild/darwin-arm64": "0.25.5",
|
||||||
"@esbuild/darwin-x64": "0.20.2",
|
"@esbuild/darwin-x64": "0.25.5",
|
||||||
"@iconify-json/carbon": "^1.2.4",
|
"@iconify-json/carbon": "^1.2.4",
|
||||||
"@rollup/rollup-darwin-x64": "^4.28.0",
|
"@rollup/rollup-darwin-x64": "^4.28.0",
|
||||||
"@types/node": "^20.17.9",
|
"@types/node": "^20.17.9",
|
||||||
@ -138,7 +140,6 @@
|
|||||||
"postcss": "^8.4.49",
|
"postcss": "^8.4.49",
|
||||||
"postcss-html": "^1.7.0",
|
"postcss-html": "^1.7.0",
|
||||||
"postcss-scss": "^4.0.9",
|
"postcss-scss": "^4.0.9",
|
||||||
"prettier": "^3.5.3",
|
|
||||||
"rollup-plugin-visualizer": "^5.12.0",
|
"rollup-plugin-visualizer": "^5.12.0",
|
||||||
"sass": "1.77.8",
|
"sass": "1.77.8",
|
||||||
"terser": "^5.36.0",
|
"terser": "^5.36.0",
|
||||||
@ -153,6 +154,9 @@
|
|||||||
"bin-wrapper": "npm:bin-wrapper-china"
|
"bin-wrapper": "npm:bin-wrapper-china"
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"*": "eslint --fix"
|
"**/*.{html,js,jsx,ts,tsx,vue,mjs,cjs,mts,cts,json,scss,css,txt}": [
|
||||||
|
"eslint --fix"
|
||||||
|
],
|
||||||
|
"!**/{node_modules,dist}/**": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { defineUniPages } from '@uni-helper/vite-plugin-uni-pages'
|
import { defineUniPages } from '@uni-helper/vite-plugin-uni-pages'
|
||||||
import { tabBar } from './src/layouts/fg-tabbar/tabbarList'
|
|
||||||
|
|
||||||
export default defineUniPages({
|
export default defineUniPages({
|
||||||
globalStyle: {
|
globalStyle: {
|
||||||
@ -18,6 +17,29 @@ export default defineUniPages({
|
|||||||
'z-paging/components/z-paging$1/z-paging$1.vue',
|
'z-paging/components/z-paging$1/z-paging$1.vue',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// tabbar 的配置统一在 “./src/layouts/fg-tabbar/tabbarList.ts” 文件中
|
// 如果不需要tabBar,推荐使用 spa 模板。(pnpm create xxx -t spa)
|
||||||
tabBar: tabBar as any,
|
tabBar: {
|
||||||
|
color: '#999999',
|
||||||
|
selectedColor: '#018d71',
|
||||||
|
backgroundColor: '#F8F8F8',
|
||||||
|
borderStyle: 'black',
|
||||||
|
height: '50px',
|
||||||
|
fontSize: '10px',
|
||||||
|
iconWidth: '24px',
|
||||||
|
spacing: '3px',
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
iconPath: 'static/tabbar/home.png',
|
||||||
|
selectedIconPath: 'static/tabbar/homeHL.png',
|
||||||
|
pagePath: 'pages/index/index',
|
||||||
|
text: '首页',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
iconPath: 'static/tabbar/example.png',
|
||||||
|
selectedIconPath: 'static/tabbar/exampleHL.png',
|
||||||
|
pagePath: 'pages/about/about',
|
||||||
|
text: '关于',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
diff --git a/dist/uni-h5.es.js b/dist/uni-h5.es.js
|
|
||||||
index 7421bad97d94ad34a3d4d94292a9ee9071430662..19c6071ee4036ceb8d1cfa09030e471c002d2cda 100644
|
|
||||||
--- a/dist/uni-h5.es.js
|
|
||||||
+++ b/dist/uni-h5.es.js
|
|
||||||
@@ -23410,7 +23410,7 @@ function useShowTabBar(emit2) {
|
|
||||||
const tabBar2 = useTabBar();
|
|
||||||
const showTabBar2 = computed(() => route.meta.isTabBar && tabBar2.shown);
|
|
||||||
updateCssVar({
|
|
||||||
- "--tab-bar-height": tabBar2.height
|
|
||||||
+ "--tab-bar-height": tabBar2?.height || 0
|
|
||||||
});
|
|
||||||
return showTabBar2;
|
|
||||||
}
|
|
87
pnpm-lock.yaml
generated
87
pnpm-lock.yaml
generated
@ -7,11 +7,6 @@ settings:
|
|||||||
overrides:
|
overrides:
|
||||||
bin-wrapper: npm:bin-wrapper-china
|
bin-wrapper: npm:bin-wrapper-china
|
||||||
|
|
||||||
patchedDependencies:
|
|
||||||
'@dcloudio/uni-h5':
|
|
||||||
hash: 5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d
|
|
||||||
path: patches/@dcloudio__uni-h5.patch
|
|
||||||
|
|
||||||
importers:
|
importers:
|
||||||
|
|
||||||
.:
|
.:
|
||||||
@ -30,7 +25,7 @@ importers:
|
|||||||
version: 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
version: 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
||||||
'@dcloudio/uni-h5':
|
'@dcloudio/uni-h5':
|
||||||
specifier: 3.0.0-4060620250520001
|
specifier: 3.0.0-4060620250520001
|
||||||
version: 3.0.0-4060620250520001(patch_hash=5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d)(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
version: 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
||||||
'@dcloudio/uni-mp-alipay':
|
'@dcloudio/uni-mp-alipay':
|
||||||
specifier: 3.0.0-4060620250520001
|
specifier: 3.0.0-4060620250520001
|
||||||
version: 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
version: 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
||||||
@ -82,6 +77,9 @@ importers:
|
|||||||
pinia-plugin-persistedstate:
|
pinia-plugin-persistedstate:
|
||||||
specifier: 3.2.1
|
specifier: 3.2.1
|
||||||
version: 3.2.1(pinia@2.0.36(typescript@5.7.2)(vue@3.5.15(typescript@5.7.2)))
|
version: 3.2.1(pinia@2.0.36(typescript@5.7.2)(vue@3.5.15(typescript@5.7.2)))
|
||||||
|
qs:
|
||||||
|
specifier: 6.5.3
|
||||||
|
version: 6.5.3
|
||||||
vue:
|
vue:
|
||||||
specifier: ^3.4.21
|
specifier: ^3.4.21
|
||||||
version: 3.5.15(typescript@5.7.2)
|
version: 3.5.15(typescript@5.7.2)
|
||||||
@ -117,11 +115,11 @@ importers:
|
|||||||
specifier: 3.0.0-4060620250520001
|
specifier: 3.0.0-4060620250520001
|
||||||
version: 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.5.15(typescript@5.7.2))
|
version: 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vite@5.2.8(@types/node@20.17.9)(sass@1.77.8)(terser@5.36.0))(vue@3.5.15(typescript@5.7.2))
|
||||||
'@esbuild/darwin-arm64':
|
'@esbuild/darwin-arm64':
|
||||||
specifier: 0.20.2
|
specifier: 0.25.5
|
||||||
version: 0.20.2
|
version: 0.25.5
|
||||||
'@esbuild/darwin-x64':
|
'@esbuild/darwin-x64':
|
||||||
specifier: 0.20.2
|
specifier: 0.25.5
|
||||||
version: 0.20.2
|
version: 0.25.5
|
||||||
'@iconify-json/carbon':
|
'@iconify-json/carbon':
|
||||||
specifier: ^1.2.4
|
specifier: ^1.2.4
|
||||||
version: 1.2.4
|
version: 1.2.4
|
||||||
@ -197,9 +195,6 @@ importers:
|
|||||||
postcss-scss:
|
postcss-scss:
|
||||||
specifier: ^4.0.9
|
specifier: ^4.0.9
|
||||||
version: 4.0.9(postcss@8.4.49)
|
version: 4.0.9(postcss@8.4.49)
|
||||||
prettier:
|
|
||||||
specifier: ^3.5.3
|
|
||||||
version: 3.5.3
|
|
||||||
rollup-plugin-visualizer:
|
rollup-plugin-visualizer:
|
||||||
specifier: ^5.12.0
|
specifier: ^5.12.0
|
||||||
version: 5.12.0(rollup@4.41.1)
|
version: 5.12.0(rollup@4.41.1)
|
||||||
@ -1145,10 +1140,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==}
|
resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
'@es-joy/jsdoccomment@0.51.1':
|
|
||||||
resolution: {integrity: sha512-fPn7AW/unCg3JRLt8Wg44HLRVkAEfkFIXiGRJbeOIrd7Hgl4iOFwVHpvVR8I5hJYpn5mNFWwIXR6A16ZRA/M9w==}
|
|
||||||
engines: {node: '>=18'}
|
|
||||||
|
|
||||||
'@esbuild/aix-ppc64@0.20.2':
|
'@esbuild/aix-ppc64@0.20.2':
|
||||||
resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
|
resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
@ -1206,7 +1197,6 @@ packages:
|
|||||||
'@esbuild/darwin-arm64@0.25.5':
|
'@esbuild/darwin-arm64@0.25.5':
|
||||||
resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
|
resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
cpu: [arm64]
|
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@esbuild/darwin-x64@0.20.2':
|
'@esbuild/darwin-x64@0.20.2':
|
||||||
@ -1218,7 +1208,6 @@ packages:
|
|||||||
'@esbuild/darwin-x64@0.25.5':
|
'@esbuild/darwin-x64@0.25.5':
|
||||||
resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
|
resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
cpu: [x64]
|
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@esbuild/freebsd-arm64@0.20.2':
|
'@esbuild/freebsd-arm64@0.20.2':
|
||||||
@ -1490,8 +1479,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
|
resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@eslint/markdown@6.6.0':
|
'@eslint/markdown@6.5.0':
|
||||||
resolution: {integrity: sha512-IsWPy2jU3gaQDlioDC4sT4I4kG1hX1OMWs/q2sWwJrPoMASHW/Z4SDw+6Aql6EsHejGbagYuJbFq9Zvx+Y1b1Q==}
|
resolution: {integrity: sha512-oSkF0p8X21vKEEAGTZASi7q3tbdTvlGduQ02Xz2A1AFncUP4RLVcNz27XurxVW4fs1JXuh0xBtvokXdtp/nN+Q==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@eslint/object-schema@2.1.6':
|
'@eslint/object-schema@2.1.6':
|
||||||
@ -1979,7 +1968,6 @@ packages:
|
|||||||
|
|
||||||
'@rollup/rollup-darwin-x64@4.28.0':
|
'@rollup/rollup-darwin-x64@4.28.0':
|
||||||
resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==}
|
resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==}
|
||||||
cpu: [x64]
|
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@rollup/rollup-darwin-x64@4.41.1':
|
'@rollup/rollup-darwin-x64@4.41.1':
|
||||||
@ -2164,9 +2152,6 @@ packages:
|
|||||||
'@types/estree@1.0.7':
|
'@types/estree@1.0.7':
|
||||||
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
|
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
|
||||||
|
|
||||||
'@types/estree@1.0.8':
|
|
||||||
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
|
|
||||||
|
|
||||||
'@types/graceful-fs@4.1.9':
|
'@types/graceful-fs@4.1.9':
|
||||||
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
|
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
|
||||||
|
|
||||||
@ -3575,8 +3560,8 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
eslint-plugin-jsdoc@51.1.0:
|
eslint-plugin-jsdoc@51.0.3:
|
||||||
resolution: {integrity: sha512-dWyjRvQcAuFHZUTUaJEw7OQ6XziNlbz2wZNt6QuLUHwYMnOWzs6vGSikR/ZSeh+IFHjdH+91AKf+CwYjlJ4kVA==}
|
resolution: {integrity: sha512-9BRR+b5nKwp6LGTffnrxKxduhzO/DzyBmRNqyt1wIlBFP+q9mq+sq1hIQCVetZAn1PaOl0Evo4PUOlT+xbtctQ==}
|
||||||
engines: {node: '>=20.11.0'}
|
engines: {node: '>=20.11.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
|
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
|
||||||
@ -3947,9 +3932,6 @@ packages:
|
|||||||
engines: {node: '>=16'}
|
engines: {node: '>=16'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
github-slugger@2.0.0:
|
|
||||||
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
|
|
||||||
|
|
||||||
glob-parent@5.1.2:
|
glob-parent@5.1.2:
|
||||||
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
@ -5437,6 +5419,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
|
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
|
||||||
engines: {node: '>=0.6'}
|
engines: {node: '>=0.6'}
|
||||||
|
|
||||||
|
qs@6.5.3:
|
||||||
|
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
|
||||||
|
engines: {node: '>=0.6'}
|
||||||
|
|
||||||
quansync@0.2.10:
|
quansync@0.2.10:
|
||||||
resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
|
resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
|
||||||
|
|
||||||
@ -6436,7 +6422,7 @@ snapshots:
|
|||||||
'@antfu/install-pkg': 1.1.0
|
'@antfu/install-pkg': 1.1.0
|
||||||
'@clack/prompts': 0.11.0
|
'@clack/prompts': 0.11.0
|
||||||
'@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.29.0(jiti@2.4.2))
|
'@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.29.0(jiti@2.4.2))
|
||||||
'@eslint/markdown': 6.6.0
|
'@eslint/markdown': 6.5.0
|
||||||
'@stylistic/eslint-plugin': 5.0.0-beta.5(eslint@9.29.0(jiti@2.4.2))
|
'@stylistic/eslint-plugin': 5.0.0-beta.5(eslint@9.29.0(jiti@2.4.2))
|
||||||
'@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
'@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2))(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
||||||
'@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
'@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
||||||
@ -6450,7 +6436,7 @@ snapshots:
|
|||||||
eslint-plugin-antfu: 3.1.1(eslint@9.29.0(jiti@2.4.2))
|
eslint-plugin-antfu: 3.1.1(eslint@9.29.0(jiti@2.4.2))
|
||||||
eslint-plugin-command: 3.3.0(eslint@9.29.0(jiti@2.4.2))
|
eslint-plugin-command: 3.3.0(eslint@9.29.0(jiti@2.4.2))
|
||||||
eslint-plugin-import-lite: 0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
eslint-plugin-import-lite: 0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
||||||
eslint-plugin-jsdoc: 51.1.0(eslint@9.29.0(jiti@2.4.2))
|
eslint-plugin-jsdoc: 51.0.3(eslint@9.29.0(jiti@2.4.2))
|
||||||
eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2))
|
eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2))
|
||||||
eslint-plugin-n: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
eslint-plugin-n: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.7.2)
|
||||||
eslint-plugin-no-only-tests: 3.3.0
|
eslint-plugin-no-only-tests: 3.3.0
|
||||||
@ -7714,7 +7700,7 @@ snapshots:
|
|||||||
'@dcloudio/uni-components@3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))':
|
'@dcloudio/uni-components@3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@dcloudio/uni-cloud': 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
'@dcloudio/uni-cloud': 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
||||||
'@dcloudio/uni-h5': 3.0.0-4060620250520001(patch_hash=5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d)(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
'@dcloudio/uni-h5': 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
||||||
'@dcloudio/uni-i18n': 3.0.0-4060620250520001
|
'@dcloudio/uni-i18n': 3.0.0-4060620250520001
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@nuxt/kit'
|
- '@nuxt/kit'
|
||||||
@ -7767,7 +7753,7 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- vue
|
- vue
|
||||||
|
|
||||||
'@dcloudio/uni-h5@3.0.0-4060620250520001(patch_hash=5763725268e9a493075be3c82d91b590b9ae30e997a04a418494dd7d6d327b9d)(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))':
|
'@dcloudio/uni-h5@3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@dcloudio/uni-h5-vite': 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
'@dcloudio/uni-h5-vite': 3.0.0-4060620250520001(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
|
||||||
'@dcloudio/uni-h5-vue': 3.0.0-4060620250520001(vue@3.5.15(typescript@5.7.2))
|
'@dcloudio/uni-h5-vue': 3.0.0-4060620250520001(vue@3.5.15(typescript@5.7.2))
|
||||||
@ -8155,14 +8141,6 @@ snapshots:
|
|||||||
esquery: 1.6.0
|
esquery: 1.6.0
|
||||||
jsdoc-type-pratt-parser: 4.1.0
|
jsdoc-type-pratt-parser: 4.1.0
|
||||||
|
|
||||||
'@es-joy/jsdoccomment@0.51.1':
|
|
||||||
dependencies:
|
|
||||||
'@types/estree': 1.0.8
|
|
||||||
'@typescript-eslint/types': 8.34.1
|
|
||||||
comment-parser: 1.4.1
|
|
||||||
esquery: 1.6.0
|
|
||||||
jsdoc-type-pratt-parser: 4.1.0
|
|
||||||
|
|
||||||
'@esbuild/aix-ppc64@0.20.2':
|
'@esbuild/aix-ppc64@0.20.2':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@ -8187,16 +8165,16 @@ snapshots:
|
|||||||
'@esbuild/android-x64@0.25.5':
|
'@esbuild/android-x64@0.25.5':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@esbuild/darwin-arm64@0.20.2': {}
|
'@esbuild/darwin-arm64@0.20.2':
|
||||||
|
|
||||||
'@esbuild/darwin-arm64@0.25.5':
|
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@esbuild/darwin-x64@0.20.2': {}
|
'@esbuild/darwin-arm64@0.25.5': {}
|
||||||
|
|
||||||
'@esbuild/darwin-x64@0.25.5':
|
'@esbuild/darwin-x64@0.20.2':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@esbuild/darwin-x64@0.25.5': {}
|
||||||
|
|
||||||
'@esbuild/freebsd-arm64@0.20.2':
|
'@esbuild/freebsd-arm64@0.20.2':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@ -8360,11 +8338,10 @@ snapshots:
|
|||||||
|
|
||||||
'@eslint/js@9.29.0': {}
|
'@eslint/js@9.29.0': {}
|
||||||
|
|
||||||
'@eslint/markdown@6.6.0':
|
'@eslint/markdown@6.5.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/core': 0.14.0
|
'@eslint/core': 0.14.0
|
||||||
'@eslint/plugin-kit': 0.3.2
|
'@eslint/plugin-kit': 0.3.2
|
||||||
github-slugger: 2.0.0
|
|
||||||
mdast-util-from-markdown: 2.0.2
|
mdast-util-from-markdown: 2.0.2
|
||||||
mdast-util-frontmatter: 2.0.1
|
mdast-util-frontmatter: 2.0.1
|
||||||
mdast-util-gfm: 3.1.0
|
mdast-util-gfm: 3.1.0
|
||||||
@ -9198,8 +9175,6 @@ snapshots:
|
|||||||
|
|
||||||
'@types/estree@1.0.7': {}
|
'@types/estree@1.0.7': {}
|
||||||
|
|
||||||
'@types/estree@1.0.8': {}
|
|
||||||
|
|
||||||
'@types/graceful-fs@4.1.9':
|
'@types/graceful-fs@4.1.9':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 20.19.0
|
'@types/node': 20.19.0
|
||||||
@ -9694,7 +9669,7 @@ snapshots:
|
|||||||
|
|
||||||
'@unocss/rule-utils@66.2.0':
|
'@unocss/rule-utils@66.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@unocss/core': 66.2.3
|
'@unocss/core': 66.2.0
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
|
|
||||||
'@unocss/rule-utils@66.2.3':
|
'@unocss/rule-utils@66.2.3':
|
||||||
@ -10877,9 +10852,9 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.7.2
|
typescript: 5.7.2
|
||||||
|
|
||||||
eslint-plugin-jsdoc@51.1.0(eslint@9.29.0(jiti@2.4.2)):
|
eslint-plugin-jsdoc@51.0.3(eslint@9.29.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@es-joy/jsdoccomment': 0.51.1
|
'@es-joy/jsdoccomment': 0.50.2
|
||||||
are-docs-informative: 0.0.2
|
are-docs-informative: 0.0.2
|
||||||
comment-parser: 1.4.1
|
comment-parser: 1.4.1
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
@ -11393,8 +11368,6 @@ snapshots:
|
|||||||
meow: 12.1.1
|
meow: 12.1.1
|
||||||
split2: 4.2.0
|
split2: 4.2.0
|
||||||
|
|
||||||
github-slugger@2.0.0: {}
|
|
||||||
|
|
||||||
glob-parent@5.1.2:
|
glob-parent@5.1.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
@ -13250,6 +13223,8 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
side-channel: 1.0.6
|
side-channel: 1.0.6
|
||||||
|
|
||||||
|
qs@6.5.3: {}
|
||||||
|
|
||||||
quansync@0.2.10: {}
|
quansync@0.2.10: {}
|
||||||
|
|
||||||
querystringify@2.2.0: {}
|
querystringify@2.2.0: {}
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
patchedDependencies:
|
|
||||||
'@dcloudio/uni-h5': patches/@dcloudio__uni-h5.patch
|
|
@ -1,4 +1,4 @@
|
|||||||
import type { ICaptcha, IUpdateInfo, IUpdatePassword, IUserInfoVo, IUserLogin } from './types/login'
|
import type { ICaptcha, IUpdateInfo, IUpdatePassword, IUserInfoVo, IUserLogin } from './login.typings'
|
||||||
import { http } from '@/utils/http'
|
import { http } from '@/utils/http'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
3
src/env.d.ts
vendored
3
src/env.d.ts
vendored
@ -29,6 +29,3 @@ interface ImportMetaEnv {
|
|||||||
interface ImportMeta {
|
interface ImportMeta {
|
||||||
readonly env: ImportMetaEnv
|
readonly env: ImportMetaEnv
|
||||||
}
|
}
|
||||||
|
|
||||||
declare const __VITE_APP_PROXY__: 'true' | 'false'
|
|
||||||
declare const __UNI_PLATFORM__: 'app' | 'h5' | 'mp-alipay' | 'mp-baidu' | 'mp-kuaishou' | 'mp-lark' | 'mp-qq' | 'mp-tiktok' | 'mp-weixin' | 'mp-xiaochengxu'
|
|
||||||
|
@ -30,66 +30,64 @@ export default function useUpload<T extends TfileType>(options: TOptions<T> = {}
|
|||||||
const error = ref<Error | null>(null)
|
const error = ref<Error | null>(null)
|
||||||
const data = ref<any>(null)
|
const data = ref<any>(null)
|
||||||
|
|
||||||
const handleFileChoose = ({ tempFilePath, size }: { tempFilePath: string, size: number }) => {
|
const run = () => {
|
||||||
if (size > maxSize) {
|
const handleFileChoose = ({ tempFilePath, size }: { tempFilePath: string, size: number }) => {
|
||||||
uni.showToast({
|
if (size > maxSize) {
|
||||||
title: `文件大小不能超过 ${maxSize / 1024 / 1024}MB`,
|
uni.showToast({
|
||||||
icon: 'none',
|
title: `文件大小不能超过 ${maxSize / 1024 / 1024}MB`,
|
||||||
|
icon: 'none',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// const fileExtension = file?.tempFiles?.name?.split('.').pop()?.toLowerCase()
|
||||||
|
// const isTypeValid = accept.some((type) => type === '*' || type.toLowerCase() === fileExtension)
|
||||||
|
|
||||||
|
// if (!isTypeValid) {
|
||||||
|
// uni.showToast({
|
||||||
|
// title: `仅支持 ${accept.join(', ')} 格式的文件`,
|
||||||
|
// icon: 'none',
|
||||||
|
// })
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
|
||||||
|
loading.value = true
|
||||||
|
uploadFile({
|
||||||
|
tempFilePath,
|
||||||
|
formData,
|
||||||
|
onSuccess: (res) => {
|
||||||
|
const { data: _data } = JSON.parse(res)
|
||||||
|
data.value = _data
|
||||||
|
// console.log('上传成功', res)
|
||||||
|
success?.(_data)
|
||||||
|
},
|
||||||
|
onError: (err) => {
|
||||||
|
error.value = err
|
||||||
|
onError?.(err)
|
||||||
|
},
|
||||||
|
onComplete: () => {
|
||||||
|
loading.value = false
|
||||||
|
},
|
||||||
})
|
})
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// const fileExtension = file?.tempFiles?.name?.split('.').pop()?.toLowerCase()
|
|
||||||
// const isTypeValid = accept.some((type) => type === '*' || type.toLowerCase() === fileExtension)
|
|
||||||
|
|
||||||
// if (!isTypeValid) {
|
|
||||||
// uni.showToast({
|
|
||||||
// title: `仅支持 ${accept.join(', ')} 格式的文件`,
|
|
||||||
// icon: 'none',
|
|
||||||
// })
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
|
|
||||||
loading.value = true
|
|
||||||
uploadFile({
|
|
||||||
tempFilePath,
|
|
||||||
formData,
|
|
||||||
onSuccess: (res) => {
|
|
||||||
const { data: _data } = JSON.parse(res)
|
|
||||||
data.value = _data
|
|
||||||
// console.log('上传成功', res)
|
|
||||||
success?.(_data)
|
|
||||||
},
|
|
||||||
onError: (err) => {
|
|
||||||
error.value = err
|
|
||||||
onError?.(err)
|
|
||||||
},
|
|
||||||
onComplete: () => {
|
|
||||||
loading.value = false
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const run = () => {
|
|
||||||
// 微信小程序从基础库 2.21.0 开始, wx.chooseImage 停止维护,请使用 uni.chooseMedia 代替。
|
// 微信小程序从基础库 2.21.0 开始, wx.chooseImage 停止维护,请使用 uni.chooseMedia 代替。
|
||||||
// 微信小程序在2023年10月17日之后,使用本API需要配置隐私协议
|
// 微信小程序在2023年10月17日之后,使用本API需要配置隐私协议
|
||||||
const chooseFileOptions = {
|
const chooseFileOptions = {
|
||||||
count: 1,
|
count: 1,
|
||||||
success: (res: any) => {
|
success: (res: any) => {
|
||||||
console.log('File selected successfully:', res)
|
console.log('File selected successfully:', res)
|
||||||
// 小程序中res:{errMsg: "chooseImage:ok", tempFiles: [{fileType: "image", size: 48976, tempFilePath: "http://tmp/5iG1WpIxTaJf3ece38692a337dc06df7eb69ecb49c6b.jpeg"}]}
|
|
||||||
// h5中res:{errMsg: "chooseImage:ok", tempFilePaths: "blob:http://localhost:9000/f74ab6b8-a14d-4cb6-a10d-fcf4511a0de5", tempFiles: [File]}
|
// h5中res:{errMsg: "chooseImage:ok", tempFilePaths: "blob:http://localhost:9000/f74ab6b8-a14d-4cb6-a10d-fcf4511a0de5", tempFiles: [File]}
|
||||||
// h5的File有以下字段:{name: "girl.jpeg", size: 48976, type: "image/jpeg"}
|
// h5的File有一下字段:{name: "girl.jpeg", size: 48976, type: "image/jpeg"}
|
||||||
// App中res:{errMsg: "chooseImage:ok", tempFilePaths: "file:///Users/feige/xxx/gallery/1522437259-compressed-IMG_0006.jpg", tempFiles: [File]}
|
// 小程序中res:{errMsg: "chooseImage:ok", tempFiles: [{fileType: "image", size: 48976, tempFilePath: "http://tmp/5iG1WpIxTaJf3ece38692a337dc06df7eb69ecb49c6b.jpeg"}]}
|
||||||
// App的File有以下字段:{path: "file:///Users/feige/xxx/gallery/1522437259-compressed-IMG_0006.jpg", size: 48976}
|
|
||||||
let tempFilePath = ''
|
let tempFilePath = ''
|
||||||
let size = 0
|
let size = 0
|
||||||
// #ifdef MP-WEIXIN
|
// #ifdef H5
|
||||||
tempFilePath = res.tempFiles[0].tempFilePath
|
tempFilePath = res.tempFilePaths[0]
|
||||||
size = res.tempFiles[0].size
|
size = res.tempFiles[0].size
|
||||||
// #endif
|
// #endif
|
||||||
// #ifndef MP-WEIXIN
|
// #ifdef MP-WEIXIN
|
||||||
tempFilePath = res.tempFilePaths[0]
|
tempFilePath = res.tempFiles[0].tempFilePath
|
||||||
size = res.tempFiles[0].size
|
size = res.tempFiles[0].size
|
||||||
// #endif
|
// #endif
|
||||||
handleFileChoose({ tempFilePath, size })
|
handleFileChoose({ tempFilePath, size })
|
||||||
|
@ -2,6 +2,7 @@ export const prototypeInterceptor = {
|
|||||||
install() {
|
install() {
|
||||||
// 解决低版本手机不识别 array.at() 导致运行报错的问题
|
// 解决低版本手机不识别 array.at() 导致运行报错的问题
|
||||||
if (typeof Array.prototype.at !== 'function') {
|
if (typeof Array.prototype.at !== 'function') {
|
||||||
|
// eslint-disable-next-line no-extend-native
|
||||||
Array.prototype.at = function (index: number) {
|
Array.prototype.at = function (index: number) {
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
return this[this.length + index]
|
return this[this.length + index]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
import qs from 'qs'
|
||||||
import { useUserStore } from '@/store'
|
import { useUserStore } from '@/store'
|
||||||
import { getEnvBaseUrl } from '@/utils'
|
import { getEnvBaseUrl } from '@/utils'
|
||||||
import { platform } from '@/utils/platform'
|
import { platform } from '@/utils/platform'
|
||||||
import { stringifyQuery } from '@/utils/queryString'
|
|
||||||
|
|
||||||
export type CustomRequestOptions = UniApp.RequestOptions & {
|
export type CustomRequestOptions = UniApp.RequestOptions & {
|
||||||
query?: Record<string, any>
|
query?: Record<string, any>
|
||||||
@ -18,7 +18,7 @@ const httpInterceptor = {
|
|||||||
invoke(options: CustomRequestOptions) {
|
invoke(options: CustomRequestOptions) {
|
||||||
// 接口请求支持通过 query 参数配置 queryString
|
// 接口请求支持通过 query 参数配置 queryString
|
||||||
if (options.query) {
|
if (options.query) {
|
||||||
const queryStr = stringifyQuery(options.query)
|
const queryStr = qs.stringify(options.query)
|
||||||
if (options.url.includes('?')) {
|
if (options.url.includes('?')) {
|
||||||
options.url += `&${queryStr}`
|
options.url += `&${queryStr}`
|
||||||
}
|
}
|
||||||
|
@ -13,5 +13,6 @@ const themeVars: ConfigProviderThemeVars = {
|
|||||||
<slot />
|
<slot />
|
||||||
<wd-toast />
|
<wd-toast />
|
||||||
<wd-message-box />
|
<wd-message-box />
|
||||||
|
<privacy-popup />
|
||||||
</wd-config-provider>
|
</wd-config-provider>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
import { tabbarStore } from './tabbar'
|
|
||||||
// 'i-carbon-code',
|
|
||||||
import { tabbarList as _tabBarList, cacheTabbarEnable, selectedTabbarStrategy } from './tabbarList'
|
|
||||||
|
|
||||||
// @ts-expect-error 预知的判断
|
|
||||||
const customTabbarEnable = selectedTabbarStrategy === 1 || selectedTabbarStrategy === 2
|
|
||||||
/** tabbarList 里面的 path 从 pages.config.ts 得到 */
|
|
||||||
const tabbarList = _tabBarList.map(item => ({ ...item, path: `/${item.pagePath}` }))
|
|
||||||
function selectTabBar({ value: index }: { value: number }) {
|
|
||||||
const url = tabbarList[index].path
|
|
||||||
tabbarStore.setCurIdx(index)
|
|
||||||
if (cacheTabbarEnable) {
|
|
||||||
uni.switchTab({ url })
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
uni.navigateTo({ url })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onLoad(() => {
|
|
||||||
// 解决原生 tabBar 未隐藏导致有2个 tabBar 的问题
|
|
||||||
// @ts-expect-error 预知的判断
|
|
||||||
const hideRedundantTabbarEnable = selectedTabbarStrategy === 1
|
|
||||||
hideRedundantTabbarEnable
|
|
||||||
&& uni.hideTabBar({
|
|
||||||
fail(err) {
|
|
||||||
console.log('hideTabBar fail: ', err)
|
|
||||||
},
|
|
||||||
success(res) {
|
|
||||||
console.log('hideTabBar success: ', res)
|
|
||||||
},
|
|
||||||
})
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<wd-tabbar
|
|
||||||
v-if="customTabbarEnable"
|
|
||||||
v-model="tabbarStore.curIdx"
|
|
||||||
bordered
|
|
||||||
safeareainsetbottom
|
|
||||||
placeholder
|
|
||||||
fixed
|
|
||||||
@change="selectTabBar"
|
|
||||||
>
|
|
||||||
<block v-for="(item, idx) in tabbarList" :key="item.path">
|
|
||||||
<wd-tabbar-item v-if="item.iconType === 'uiLib'" :title="item.text" :icon="item.icon" />
|
|
||||||
<wd-tabbar-item
|
|
||||||
v-else-if="item.iconType === 'unocss' || item.iconType === 'iconfont'"
|
|
||||||
:title="item.text"
|
|
||||||
>
|
|
||||||
<template #icon>
|
|
||||||
<view
|
|
||||||
h-40rpx
|
|
||||||
w-40rpx
|
|
||||||
:class="[item.icon, idx === tabbarStore.curIdx ? 'is-active' : 'is-inactive']"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</wd-tabbar-item>
|
|
||||||
<wd-tabbar-item v-else-if="item.iconType === 'local'" :title="item.text">
|
|
||||||
<template #icon>
|
|
||||||
<image :src="item.icon" h-40rpx w-40rpx />
|
|
||||||
</template>
|
|
||||||
</wd-tabbar-item>
|
|
||||||
</block>
|
|
||||||
</wd-tabbar>
|
|
||||||
</template>
|
|
@ -1,16 +0,0 @@
|
|||||||
# tabbar 说明
|
|
||||||
|
|
||||||
`tabbar` 分为 `4 种` 情况:
|
|
||||||
|
|
||||||
- `完全原生 tabbar`,使用 `switchTab` 切换 tabbar,`tabbar` 页面有缓存。
|
|
||||||
- 优势:原生自带的 tabbar,最先渲染,有缓存。
|
|
||||||
- 劣势:只能使用 2 组图片来切换选中和非选中状态,修改颜色只能重新换图片(或者用 iconfont)。
|
|
||||||
- `半自定义 tabbar`,使用 `switchTab` 切换 tabbar,`tabbar` 页面有缓存。使用了第三方 UI 库的 `tabbar` 组件,并隐藏了原生 `tabbar` 的显示。
|
|
||||||
- 优势:可以随意配置自己想要的 `svg icon`,切换字体颜色方便。有缓存。可以实现各种花里胡哨的动效等。
|
|
||||||
- 劣势:首次点击 tababr 会闪烁。
|
|
||||||
- `全自定义 tabbar`,使用 `navigateTo` 切换 `tabbar`,`tabbar` 页面无缓存。使用了第三方 UI 库的 `tabbar` 组件。
|
|
||||||
- 优势:可以随意配置自己想要的 svg icon,切换字体颜色方便。可以实现各种花里胡哨的动效等。
|
|
||||||
- 劣势:首次点击 `tababr` 会闪烁,无缓存。
|
|
||||||
- `无 tabbar`,只有一个页面入口,底部无 `tabbar` 显示;常用语临时活动页。
|
|
||||||
|
|
||||||
> 注意:花里胡哨的效果需要自己实现,本模版不提供。
|
|
@ -1,11 +0,0 @@
|
|||||||
/**
|
|
||||||
* tabbar 状态,增加 storageSync 保证刷新浏览器时在正确的 tabbar 页面
|
|
||||||
* 使用reactive简单状态,而不是 pinia 全局状态
|
|
||||||
*/
|
|
||||||
export const tabbarStore = reactive({
|
|
||||||
curIdx: uni.getStorageSync('app-tabbar-index') || 0,
|
|
||||||
setCurIdx(idx: number) {
|
|
||||||
this.curIdx = idx
|
|
||||||
uni.setStorageSync('app-tabbar-index', idx)
|
|
||||||
},
|
|
||||||
})
|
|
@ -1,65 +0,0 @@
|
|||||||
/**
|
|
||||||
* tabbar 选择的策略,更详细的介绍见 tabbar.md 文件
|
|
||||||
* 0: 'NATIVE_TABBAR' `完全原生 tabbar`
|
|
||||||
* 2: 'FULL_CUSTOM_TABBAR' `全自定义 tabbar`
|
|
||||||
* 1: 'HALF_CUSTOM_TABBAR' `半自定义 tabbar`
|
|
||||||
* 3: 'NO_TABBAR' `无 tabbar`
|
|
||||||
*
|
|
||||||
* 温馨提示:本文件的任何代码更改了之后,都需要重新运行,否则 pages.json 不会更新导致错误
|
|
||||||
*/
|
|
||||||
|
|
||||||
// TODO:通过这里切换使用tabbar的策略
|
|
||||||
export const selectedTabbarStrategy = 0
|
|
||||||
|
|
||||||
// 0 和 1 时,需要tabbar缓存
|
|
||||||
export const cacheTabbarEnable = selectedTabbarStrategy < 2
|
|
||||||
|
|
||||||
// selectedTabbarStrategy==0 时,需要填 iconPath 和 selectedIconPath
|
|
||||||
// selectedTabbarStrategy==1 or 2 时,需要填 icon 和 iconType
|
|
||||||
// selectedTabbarStrategy==3 时,tabbarList 不生效
|
|
||||||
export const tabbarList = [
|
|
||||||
{
|
|
||||||
iconPath: 'static/tabbar/home.png',
|
|
||||||
selectedIconPath: 'static/tabbar/homeHL.png',
|
|
||||||
pagePath: 'pages/index/index',
|
|
||||||
text: '首页',
|
|
||||||
icon: 'home',
|
|
||||||
iconType: 'uiLib',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
iconPath: 'static/tabbar/example.png',
|
|
||||||
selectedIconPath: 'static/tabbar/exampleHL.png',
|
|
||||||
pagePath: 'pages/about/about',
|
|
||||||
text: '关于',
|
|
||||||
icon: 'i-carbon-code',
|
|
||||||
// 注意 unocss 的图标需要在 页面上引入一下,或者配置到 unocss.config.ts 的 safelist 中
|
|
||||||
iconType: 'unocss',
|
|
||||||
},
|
|
||||||
// {
|
|
||||||
// pagePath: 'pages/my/index',
|
|
||||||
// text: '我的',
|
|
||||||
// icon: '/static/logo.svg',
|
|
||||||
// iconType: 'local',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// pagePath: 'pages/mine/index',
|
|
||||||
// text: '我的',
|
|
||||||
// icon: 'iconfont icon-my',
|
|
||||||
// iconType: 'iconfont',
|
|
||||||
// },
|
|
||||||
]
|
|
||||||
|
|
||||||
const _tabbar = {
|
|
||||||
color: '#999999',
|
|
||||||
selectedColor: '#018d71',
|
|
||||||
backgroundColor: '#F8F8F8',
|
|
||||||
borderStyle: 'black',
|
|
||||||
height: '50px',
|
|
||||||
fontSize: '10px',
|
|
||||||
iconWidth: '24px',
|
|
||||||
spacing: '3px',
|
|
||||||
list: tabbarList,
|
|
||||||
}
|
|
||||||
|
|
||||||
// 0和1 需要显示底部的tabbar的各种配置,以利用缓存
|
|
||||||
export const tabBar = cacheTabbarEnable ? _tabbar : undefined
|
|
@ -1,19 +0,0 @@
|
|||||||
<script lang="ts" setup>
|
|
||||||
import type { ConfigProviderThemeVars } from 'wot-design-uni'
|
|
||||||
import FgTabbar from './fg-tabbar/fg-tabbar.vue'
|
|
||||||
|
|
||||||
const themeVars: ConfigProviderThemeVars = {
|
|
||||||
// colorTheme: 'red',
|
|
||||||
// buttonPrimaryBgColor: '#07c160',
|
|
||||||
// buttonPrimaryColor: '#07c160',
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<wd-config-provider :theme-vars="themeVars">
|
|
||||||
<slot />
|
|
||||||
<FgTabbar />
|
|
||||||
<wd-toast />
|
|
||||||
<wd-message-box />
|
|
||||||
</wd-config-provider>
|
|
||||||
</template>
|
|
@ -5,7 +5,7 @@ import { prototypeInterceptor, requestInterceptor, routeInterceptor } from './in
|
|||||||
|
|
||||||
import store from './store'
|
import store from './store'
|
||||||
import '@/style/index.scss'
|
import '@/style/index.scss'
|
||||||
import 'virtual:uno.css'
|
import 'uno.css'
|
||||||
|
|
||||||
export function createApp() {
|
export function createApp() {
|
||||||
const app = createSSRApp(App)
|
const app = createSSRApp(App)
|
||||||
|
@ -28,25 +28,21 @@
|
|||||||
"iconPath": "static/tabbar/home.png",
|
"iconPath": "static/tabbar/home.png",
|
||||||
"selectedIconPath": "static/tabbar/homeHL.png",
|
"selectedIconPath": "static/tabbar/homeHL.png",
|
||||||
"pagePath": "pages/index/index",
|
"pagePath": "pages/index/index",
|
||||||
"text": "首页",
|
"text": "首页"
|
||||||
"icon": "home",
|
|
||||||
"iconType": "uiLib"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"iconPath": "static/tabbar/example.png",
|
"iconPath": "static/tabbar/example.png",
|
||||||
"selectedIconPath": "static/tabbar/exampleHL.png",
|
"selectedIconPath": "static/tabbar/exampleHL.png",
|
||||||
"pagePath": "pages/about/about",
|
"pagePath": "pages/about/about",
|
||||||
"text": "关于",
|
"text": "关于"
|
||||||
"icon": "i-carbon-code",
|
|
||||||
"iconType": "unocss"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"__esModule": true,
|
||||||
"pages": [
|
"pages": [
|
||||||
{
|
{
|
||||||
"path": "pages/index/index",
|
"path": "pages/index/index",
|
||||||
"type": "home",
|
"type": "home",
|
||||||
"layout": "tabbar",
|
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom",
|
"navigationStyle": "custom",
|
||||||
"navigationBarTitleText": "首页"
|
"navigationBarTitleText": "首页"
|
||||||
@ -55,11 +51,11 @@
|
|||||||
{
|
{
|
||||||
"path": "pages/about/about",
|
"path": "pages/about/about",
|
||||||
"type": "page",
|
"type": "page",
|
||||||
"layout": "tabbar",
|
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "关于"
|
"navigationBarTitleText": "关于",
|
||||||
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"subPackages": []
|
"subPackages": []
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
<route lang="json5">
|
<route lang="json5">
|
||||||
{
|
{
|
||||||
layout: 'tabbar',
|
|
||||||
style: {
|
style: {
|
||||||
navigationBarTitleText: '关于',
|
navigationBarTitleText: '关于',
|
||||||
|
navigationStyle: 'custom', // 开启自定义导航栏
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</route>
|
</route>
|
||||||
@ -13,25 +13,39 @@ import UploadComp from './components/upload.vue'
|
|||||||
|
|
||||||
// 获取屏幕边界到安全区域距离
|
// 获取屏幕边界到安全区域距离
|
||||||
const { safeAreaInsets } = uni.getSystemInfoSync()
|
const { safeAreaInsets } = uni.getSystemInfoSync()
|
||||||
|
function toSubPage() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages-sub/demo/index',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 奇怪:同样的代码放在 vue 里面不会校验到错误,放在 .ts 文件里面会校验到错误
|
// 奇怪:同样的代码放在 vue 里面不会校验到错误,放在 .ts 文件里面会校验到错误
|
||||||
// const testOxlint = (name: string) => {
|
// const testOxlint = (name: string) => {
|
||||||
// console.log('oxlint')
|
// console.log('oxlint')
|
||||||
// }
|
// }
|
||||||
// testOxlint('oxlint')
|
// testOxlint('oxlint')
|
||||||
console.log('about')
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view>
|
<view>
|
||||||
<view class="mt-8 text-center text-3xl">
|
<fg-navbar>关于</fg-navbar>
|
||||||
鸽友们好,我是
|
<view
|
||||||
<text class="text-red-500">
|
class="overflow-hidden bg-white px-4 pt-2"
|
||||||
菲鸽
|
:style="{ marginTop: `${safeAreaInsets?.top}px` }"
|
||||||
</text>
|
>
|
||||||
|
<view class="mt-8 text-center text-3xl">
|
||||||
|
鸽友们好,我是
|
||||||
|
<text class="text-red-500">
|
||||||
|
菲鸽
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
<!-- <button @click="toSubPage()">去分包</button> -->
|
||||||
|
<view class="test-css">
|
||||||
|
测试 scss 样式
|
||||||
|
</view>
|
||||||
|
<RequestComp />
|
||||||
|
<UploadComp />
|
||||||
</view>
|
</view>
|
||||||
<RequestComp />
|
|
||||||
<UploadComp />
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -26,8 +26,8 @@ const { loading, data, run } = useUpload()
|
|||||||
<view class="m-2">
|
<view class="m-2">
|
||||||
{{ data }}
|
{{ data }}
|
||||||
</view>
|
</view>
|
||||||
<view v-if="data" class="h-80 w-full">
|
<view class="h-80 w-full">
|
||||||
<image :src="data.url" mode="scaleToFill" />
|
<image v-if="data" :src="data.url" mode="scaleToFill" />
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
</view>
|
</view>
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
<!-- 使用 type="home" 属性设置首页,其他页面不需要设置,默认为page;推荐使用json5,更强大,且允许注释 -->
|
<!-- 使用 type="home" 属性设置首页,其他页面不需要设置,默认为page;推荐使用json5,更强大,且允许注释 -->
|
||||||
<route lang="json5" type="home">
|
<route lang="json5" type="home">
|
||||||
{
|
{
|
||||||
layout: 'tabbar',
|
|
||||||
style: {
|
style: {
|
||||||
// 'custom' 表示开启自定义导航栏,默认 'default'
|
|
||||||
navigationStyle: 'custom',
|
navigationStyle: 'custom',
|
||||||
navigationBarTitleText: '首页',
|
navigationBarTitleText: '首页',
|
||||||
},
|
},
|
||||||
@ -41,19 +39,20 @@ safeAreaInsets = systemInfo.safeAreaInsets
|
|||||||
// #endif
|
// #endif
|
||||||
const author = ref('菲鸽')
|
const author = ref('菲鸽')
|
||||||
const description = ref(
|
const description = ref(
|
||||||
'unibest 是一个集成了多种工具和技术的 uniapp 开发模板,由 uniapp + Vue3 + Ts + Vite5 + UnoCss + VSCode 构建,模板具有代码提示、自动格式化、统一配置、代码片段等功能,并内置了许多常用的基本组件和基本功能,让你编写 uniapp 拥有 best 体验。',
|
'unibest 是一个集成了多种工具和技术的 uniapp 开发模板,由 uniapp + Vue3 + Ts + Vite6 + UnoCss + VSCode 构建,模板具有代码提示、自动格式化、统一配置、代码片段等功能,并内置了许多常用的基本组件和基本功能,让你编写 uniapp 拥有 best 体验。',
|
||||||
)
|
)
|
||||||
// 测试 uni API 自动引入
|
// 测试 uni API 自动引入
|
||||||
onLoad(() => {
|
onLoad(() => {
|
||||||
console.log('项目作者:', author.value)
|
console.log('项目作者:', author.value)
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log('index')
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="bg-white px-4 pt-2" :style="{ marginTop: `${safeAreaInsets?.top}px` }">
|
<view
|
||||||
<view class="mt-10">
|
class="overflow-hidden bg-white px-4 pt-2"
|
||||||
|
:style="{ marginTop: `${safeAreaInsets?.top}px` }"
|
||||||
|
>
|
||||||
|
<view class="mt-12">
|
||||||
<image src="/static/logo.svg" alt="" class="mx-auto block h-28 w-28" />
|
<image src="/static/logo.svg" alt="" class="mx-auto block h-28 w-28" />
|
||||||
</view>
|
</view>
|
||||||
<view class="mt-4 text-center text-4xl text-[#d14328]">
|
<view class="mt-4 text-center text-4xl text-[#d14328]">
|
||||||
@ -66,19 +65,6 @@ console.log('index')
|
|||||||
<view class="m-auto mb-2 max-w-100 text-justify indent text-4">
|
<view class="m-auto mb-2 max-w-100 text-justify indent text-4">
|
||||||
{{ description }}
|
{{ description }}
|
||||||
</view>
|
</view>
|
||||||
<view class="mt-4 text-center">
|
|
||||||
作者:
|
|
||||||
<text class="text-green-500">
|
|
||||||
菲鸽
|
|
||||||
</text>
|
|
||||||
</view>
|
|
||||||
<view class="mt-4 text-center">
|
|
||||||
官网地址:
|
|
||||||
<text class="text-green-500">
|
|
||||||
https://unibest.tech
|
|
||||||
</text>
|
|
||||||
</view>
|
|
||||||
<view class="mt-6 h-1px bg-#eee" />
|
|
||||||
<view class="mt-8 text-center">
|
<view class="mt-8 text-center">
|
||||||
当前平台是:
|
当前平台是:
|
||||||
<text class="text-green-500">
|
<text class="text-green-500">
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import type { IUserInfoVo } from '@/api/types/login'
|
import type { IUserInfoVo } from '@/api/login.typings'
|
||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import {
|
import {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
@import './iconfont.css';
|
// @import './iconfont.css';
|
||||||
|
|
||||||
.test {
|
.test {
|
||||||
// 可以通过 @apply 多个样式封装整体样式
|
// 可以通过 @apply 多个样式封装整体样式
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import { pages, subPackages } from '@/pages.json'
|
import pagesConfig from '@/pages.json'
|
||||||
import { isMpWeixin } from './platform'
|
import { isMpWeixin } from './platform'
|
||||||
|
|
||||||
|
const { pages, subPackages, tabBar = { list: [] } } = { ...pagesConfig }
|
||||||
|
|
||||||
export function getLastPage() {
|
export function getLastPage() {
|
||||||
// getCurrentPages() 至少有1个元素,所以不再额外判断
|
// getCurrentPages() 至少有1个元素,所以不再额外判断
|
||||||
// const lastPage = getCurrentPages().at(-1)
|
// const lastPage = getCurrentPages().at(-1)
|
||||||
@ -9,6 +11,41 @@ export function getLastPage() {
|
|||||||
return pages[pages.length - 1]
|
return pages[pages.length - 1]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const tabBarList = tabBar?.list || []
|
||||||
|
|
||||||
|
/** 判断当前页面是否是 tabbar 页 */
|
||||||
|
export function getIsTabbar() {
|
||||||
|
try {
|
||||||
|
const lastPage = getLastPage()
|
||||||
|
const currPath = lastPage?.route
|
||||||
|
|
||||||
|
return Boolean(tabBar?.list?.some(item => item.pagePath === currPath))
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断指定页面是否是 tabbar 页
|
||||||
|
* @param path 页面路径
|
||||||
|
* @returns true: 是 tabbar 页 false: 不是 tabbar 页
|
||||||
|
*/
|
||||||
|
export function isTableBar(path: string) {
|
||||||
|
if (!tabBar) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (!tabBar.list.length) {
|
||||||
|
// 通常有 tabBar 的话,list 不能有空,且至少有2个元素,这里其实不用处理
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// 这里需要处理一下 path,因为 tabBar 中的 pagePath 是不带 /pages 前缀的
|
||||||
|
if (path.startsWith('/')) {
|
||||||
|
path = path.substring(1)
|
||||||
|
}
|
||||||
|
return !!tabBar.list.find(e => e.pagePath === path)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前页面路由的 path 路径和 redirectPath 路径
|
* 获取当前页面路由的 path 路径和 redirectPath 路径
|
||||||
* path 如 '/pages/login/index'
|
* path 如 '/pages/login/index'
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
/**
|
|
||||||
* 将对象序列化为URL查询字符串,用于替代第三方的 qs 库,节省宝贵的体积
|
|
||||||
* 支持基本类型值和数组,不支持嵌套对象
|
|
||||||
* @param obj 要序列化的对象
|
|
||||||
* @returns 序列化后的查询字符串
|
|
||||||
*/
|
|
||||||
export function stringifyQuery(obj: Record<string, any>): string {
|
|
||||||
if (!obj || typeof obj !== 'object' || Array.isArray(obj))
|
|
||||||
return ''
|
|
||||||
|
|
||||||
return Object.entries(obj)
|
|
||||||
.filter(([_, value]) => value !== undefined && value !== null)
|
|
||||||
.map(([key, value]) => {
|
|
||||||
// 对键进行编码
|
|
||||||
const encodedKey = encodeURIComponent(key)
|
|
||||||
|
|
||||||
// 处理数组类型
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
return value
|
|
||||||
.filter(item => item !== undefined && item !== null)
|
|
||||||
.map(item => `${encodedKey}=${encodeURIComponent(item)}`)
|
|
||||||
.join('&')
|
|
||||||
}
|
|
||||||
|
|
||||||
// 处理基本类型
|
|
||||||
return `${encodedKey}=${encodeURIComponent(value)}`
|
|
||||||
})
|
|
||||||
.join('&')
|
|
||||||
}
|
|
@ -39,7 +39,6 @@ export default defineConfig({
|
|||||||
center: 'flex justify-center items-center',
|
center: 'flex justify-center items-center',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
safelist: [],
|
|
||||||
rules: [
|
rules: [
|
||||||
[
|
[
|
||||||
'p-safe',
|
'p-safe',
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import process from 'node:process'
|
import process from 'node:process'
|
||||||
|
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
|
|
||||||
export function copyNativeRes() {
|
export function copyNativeRes() {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import process from 'node:process'
|
import process from 'node:process'
|
||||||
|
|
||||||
import Uni from '@dcloudio/vite-plugin-uni'
|
import Uni from '@dcloudio/vite-plugin-uni'
|
||||||
import Components from '@uni-helper/vite-plugin-uni-components'
|
import Components from '@uni-helper/vite-plugin-uni-components'
|
||||||
// @see https://uni-helper.js.org/vite-plugin-uni-layouts
|
// @see https://uni-helper.js.org/vite-plugin-uni-layouts
|
||||||
|
Loading…
x
Reference in New Issue
Block a user