Compare commits
2 Commits
base-uview
...
main
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0dd0cab15d | ||
![]() |
02d8fb1268 |
31
.github/release.yml
vendored
Normal file
31
.github/release.yml
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
categories:
|
||||||
|
- title: 🚀 新功能
|
||||||
|
labels: [feat, feature]
|
||||||
|
- title: 🛠️ 修复
|
||||||
|
labels: [fix, bugfix]
|
||||||
|
- title: 💅 样式
|
||||||
|
labels: [style]
|
||||||
|
- title: 📄 文档
|
||||||
|
labels: [docs]
|
||||||
|
- title: ⚡️ 性能
|
||||||
|
labels: [perf]
|
||||||
|
- title: 🧪 测试
|
||||||
|
labels: [test]
|
||||||
|
- title: ♻️ 重构
|
||||||
|
labels: [refactor]
|
||||||
|
- title: 📦 构建
|
||||||
|
labels: [build]
|
||||||
|
- title: 🚨 补丁
|
||||||
|
labels: [patch, hotfix]
|
||||||
|
- title: 🌐 发布
|
||||||
|
labels: [release, publish]
|
||||||
|
- title: 🔧 流程
|
||||||
|
labels: [ci, cd, workflow]
|
||||||
|
- title: ⚙️ 配置
|
||||||
|
labels: [config, chore]
|
||||||
|
- title: 📁 文件
|
||||||
|
labels: [file]
|
||||||
|
- title: 🎨 格式化
|
||||||
|
labels: [format]
|
||||||
|
- title: 🔀 其他
|
||||||
|
labels: [other, misc]
|
80
.github/workflows/auto-merge.yml
vendored
Normal file
80
.github/workflows/auto-merge.yml
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
name: Auto Merge Main to Other Branches
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch: # 手动触发
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
merge-to-i18n:
|
||||||
|
name: Merge main into i18n
|
||||||
|
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 i18n
|
||||||
|
run: |
|
||||||
|
git config user.name "GitHub Actions"
|
||||||
|
git config user.email "actions@github.com"
|
||||||
|
git checkout i18n
|
||||||
|
git merge main --no-ff -m "Auto merge main into i18n"
|
||||||
|
git push origin i18n
|
||||||
|
|
||||||
|
merge-to-base-sard-ui:
|
||||||
|
name: Merge main into base-sard-ui
|
||||||
|
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-sard-ui
|
||||||
|
run: |
|
||||||
|
git config user.name "GitHub Actions"
|
||||||
|
git config user.email "actions@github.com"
|
||||||
|
git checkout base-sard-ui
|
||||||
|
git merge main --no-ff -m "Auto merge main into base-sard-ui"
|
||||||
|
git push origin base-sard-ui
|
||||||
|
|
||||||
|
merge-to-base-uv-ui:
|
||||||
|
name: Merge main into base-uv-ui
|
||||||
|
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-uv-ui
|
||||||
|
run: |
|
||||||
|
git config user.name "GitHub Actions"
|
||||||
|
git config user.email "actions@github.com"
|
||||||
|
git checkout base-uv-ui
|
||||||
|
git merge main --no-ff -m "Auto merge main into base-uv-ui"
|
||||||
|
git push origin base-uv-ui
|
||||||
|
|
||||||
|
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
|
119
.github/workflows/release-log.yml
vendored
Normal file
119
.github/workflows/release-log.yml
vendored
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
name: Auto Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
pull-requests: read
|
||||||
|
issues: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Install yq
|
||||||
|
run: sudo snap install yq
|
||||||
|
|
||||||
|
- name: Generate changelog
|
||||||
|
id: changelog
|
||||||
|
env:
|
||||||
|
CONFIG_FILE: .github/release.yml
|
||||||
|
run: |
|
||||||
|
# 解析配置文件
|
||||||
|
declare -A category_map
|
||||||
|
while IFS=";" read -r title labels; do
|
||||||
|
for label in $labels; do
|
||||||
|
category_map[$label]="$title"
|
||||||
|
done
|
||||||
|
done < <(yq -o=tsv '.categories[] | [.title, (.labels | join(" "))] | join(";")' $CONFIG_FILE)
|
||||||
|
# 获取版本范围
|
||||||
|
mapfile -t tags < <(git tag -l --sort=-version:refname)
|
||||||
|
current_tag=${tags[0]}
|
||||||
|
previous_tag=${tags[1]:-}
|
||||||
|
if [[ -z "$previous_tag" ]]; then
|
||||||
|
commit_range="$current_tag"
|
||||||
|
echo "首次发布版本: $current_tag"
|
||||||
|
else
|
||||||
|
commit_range="$previous_tag..$current_tag"
|
||||||
|
echo "版本范围: $commit_range"
|
||||||
|
fi
|
||||||
|
# 获取所有符合规范的提交
|
||||||
|
commits=$(git log --pretty=format:"%s|%h" "$commit_range")
|
||||||
|
# 生成分类日志
|
||||||
|
declare -A log_entries
|
||||||
|
while IFS="|" read -r subject hash; do
|
||||||
|
# type=$(echo "$subject" | cut -d':' -f1 | tr -d ' ')
|
||||||
|
type=$(echo "$subject" | sed -E 's/^([[:alnum:]]+)(\(.*\))?:.*/\1/' | tr -d ' ')
|
||||||
|
found=0
|
||||||
|
for label in "${!category_map[@]}"; do
|
||||||
|
if [[ "$type" == "$label" ]]; then
|
||||||
|
entry="- ${subject} (${hash:0:7})"
|
||||||
|
log_entries[${category_map[$label]}]+="$entry"$'\n'
|
||||||
|
found=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ $found -eq 0 ]]; then
|
||||||
|
entry="- ${subject} (${hash:0:7})"
|
||||||
|
log_entries["其他"]+="$entry"$'\n'
|
||||||
|
fi
|
||||||
|
done <<< "$commits"
|
||||||
|
|
||||||
|
# 统计提交数量
|
||||||
|
commit_count=$(git log --oneline "$commit_range" | wc -l)
|
||||||
|
# 统计受影响的文件数量
|
||||||
|
file_count=$(git diff --name-only "$commit_range" | wc -l)
|
||||||
|
# 统计贡献者信息
|
||||||
|
contributor_stats=$(git shortlog -sn "$commit_range")
|
||||||
|
contributor_notes=""
|
||||||
|
while IFS= read -r line; do
|
||||||
|
commits=$(echo "$line" | awk '{print $1}')
|
||||||
|
name=$(echo "$line" | awk '{$1=""; print $0}' | sed 's/^ //')
|
||||||
|
contributor_notes+="- @${name} (${commits} commits)\n"
|
||||||
|
done <<< "$contributor_stats"
|
||||||
|
# 构建输出内容
|
||||||
|
release_notes="## 版本更新日志 ($current_tag)\n\n"
|
||||||
|
while IFS= read -r category; do
|
||||||
|
if [[ -n "${log_entries[$category]}" ]]; then
|
||||||
|
release_notes+="### $category\n${log_entries[$category]}\n"
|
||||||
|
fi
|
||||||
|
done < <(yq '.categories[].title' $CONFIG_FILE)
|
||||||
|
# 构建输出内容
|
||||||
|
release_notes="## 版本更新日志 ($current_tag)\n\n"
|
||||||
|
current_date=$(date +"%Y-%m-%d")
|
||||||
|
# 添加发布日期和下载统计信息
|
||||||
|
release_notes+=" ### 📅 发布日期: ${current_date}\n"
|
||||||
|
while IFS= read -r category; do
|
||||||
|
if [[ -n "${log_entries[$category]}" ]]; then
|
||||||
|
release_notes+="### $category\n${log_entries[$category]}\n"
|
||||||
|
fi
|
||||||
|
done < <(yq '.categories[].title' $CONFIG_FILE)
|
||||||
|
|
||||||
|
# 添加统计信息
|
||||||
|
release_notes+="### 📊 统计信息\n"
|
||||||
|
release_notes+="- 本次发布包含 ${commit_count} 个提交\n"
|
||||||
|
release_notes+="- 影响 ${file_count} 个文件\n\n"
|
||||||
|
# 添加贡献者信息
|
||||||
|
release_notes+="### 👥 贡献者\n"
|
||||||
|
release_notes+="感谢这些优秀的贡献者(按提交次数排序):\n"
|
||||||
|
release_notes+="${contributor_notes}\n"
|
||||||
|
release_notes+="---\n"
|
||||||
|
# 写入文件
|
||||||
|
echo -e "$release_notes" > changelog.md
|
||||||
|
echo "生成日志内容:"
|
||||||
|
cat changelog.md
|
||||||
|
- name: Create Release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
generateReleaseNotes: false
|
||||||
|
bodyFile: changelog.md
|
||||||
|
tag: ${{ github.ref_name }}
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "unibest",
|
"name": "unibest",
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"version": "3.0.0",
|
"version": "3.1.0",
|
||||||
"description": "unibest - 最好的 uniapp 开发模板",
|
"description": "unibest - 最好的 uniapp 开发模板",
|
||||||
"update-time": "2025-06-21",
|
"update-time": "2025-06-21",
|
||||||
"author": {
|
"author": {
|
||||||
@ -98,9 +98,8 @@
|
|||||||
"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",
|
|
||||||
"uview-plus": "^3.4.41",
|
|
||||||
"vue": "^3.4.21",
|
"vue": "^3.4.21",
|
||||||
|
"wot-design-uni": "^1.9.1",
|
||||||
"z-paging": "2.8.7"
|
"z-paging": "2.8.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -13,11 +13,7 @@ export default defineUniPages({
|
|||||||
autoscan: true,
|
autoscan: true,
|
||||||
custom: {
|
custom: {
|
||||||
'^fg-(.*)': '@/components/fg-$1/fg-$1.vue',
|
'^fg-(.*)': '@/components/fg-$1/fg-$1.vue',
|
||||||
// 下面的是 uview-plus 的配置
|
'^wd-(.*)': 'wot-design-uni/components/wd-$1/wd-$1.vue',
|
||||||
'^u--(.*)': 'uview-plus/components/u-$1/u-$1.vue',
|
|
||||||
'^up-(.*)': 'uview-plus/components/u-$1/u-$1.vue',
|
|
||||||
'^u-([^-].*)': 'uview-plus/components/u-$1/u-$1.vue',
|
|
||||||
// 下面是z-paging 的配置
|
|
||||||
'^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)':
|
'^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)':
|
||||||
'z-paging/components/z-paging$1/z-paging$1.vue',
|
'z-paging/components/z-paging$1/z-paging$1.vue',
|
||||||
},
|
},
|
||||||
|
65
pnpm-lock.yaml
generated
65
pnpm-lock.yaml
generated
@ -82,15 +82,12 @@ 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
|
|
||||||
uview-plus:
|
|
||||||
specifier: ^3.4.41
|
|
||||||
version: 3.4.41
|
|
||||||
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)
|
||||||
|
wot-design-uni:
|
||||||
|
specifier: ^1.9.1
|
||||||
|
version: 1.9.1(vue@3.5.15(typescript@5.7.2))
|
||||||
z-paging:
|
z-paging:
|
||||||
specifier: 2.8.7
|
specifier: 2.8.7
|
||||||
version: 2.8.7
|
version: 2.8.7
|
||||||
@ -3060,9 +3057,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
|
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
clipboard@2.0.11:
|
|
||||||
resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==}
|
|
||||||
|
|
||||||
cliui@7.0.4:
|
cliui@7.0.4:
|
||||||
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
|
resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
|
||||||
|
|
||||||
@ -3324,9 +3318,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
||||||
engines: {node: '>=0.4.0'}
|
engines: {node: '>=0.4.0'}
|
||||||
|
|
||||||
delegate@3.2.0:
|
|
||||||
resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==}
|
|
||||||
|
|
||||||
depd@2.0.0:
|
depd@2.0.0:
|
||||||
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
|
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
@ -3999,9 +3990,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==}
|
resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
good-listener@1.2.2:
|
|
||||||
resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==}
|
|
||||||
|
|
||||||
gopd@1.2.0:
|
gopd@1.2.0:
|
||||||
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
|
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@ -5449,10 +5437,6 @@ 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==}
|
||||||
|
|
||||||
@ -5647,9 +5631,6 @@ packages:
|
|||||||
scule@1.3.0:
|
scule@1.3.0:
|
||||||
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
|
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
|
||||||
|
|
||||||
select@1.1.2:
|
|
||||||
resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==}
|
|
||||||
|
|
||||||
semver@6.3.1:
|
semver@6.3.1:
|
||||||
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
|
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@ -5900,9 +5881,6 @@ packages:
|
|||||||
timm@1.7.1:
|
timm@1.7.1:
|
||||||
resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==}
|
resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==}
|
||||||
|
|
||||||
tiny-emitter@2.1.0:
|
|
||||||
resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
|
|
||||||
|
|
||||||
tiny-pinyin@1.3.2:
|
tiny-pinyin@1.3.2:
|
||||||
resolution: {integrity: sha512-uHNGu4evFt/8eNLldazeAM1M8JrMc1jshhJJfVRARTN3yT8HEEibofeQ7QETWQ5ISBjd6fKtTVBCC/+mGS6FpA==}
|
resolution: {integrity: sha512-uHNGu4evFt/8eNLldazeAM1M8JrMc1jshhJJfVRARTN3yT8HEEibofeQ7QETWQ5ISBjd6fKtTVBCC/+mGS6FpA==}
|
||||||
|
|
||||||
@ -6167,10 +6145,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
|
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
|
||||||
engines: {node: '>= 0.4.0'}
|
engines: {node: '>= 0.4.0'}
|
||||||
|
|
||||||
uview-plus@3.4.41:
|
|
||||||
resolution: {integrity: sha512-0c2KeJmXO4Rez2nERb4yi2fwydRT2pzBcjDlh9DkLaQ39VJD9zpv8NSN0mWAFEgc8U+hykXHt0DDr8yqaXAxbg==}
|
|
||||||
engines: {HBuilderX: ^3.1.0}
|
|
||||||
|
|
||||||
v8-to-istanbul@8.1.1:
|
v8-to-istanbul@8.1.1:
|
||||||
resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==}
|
resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==}
|
||||||
engines: {node: '>=10.12.0'}
|
engines: {node: '>=10.12.0'}
|
||||||
@ -6303,6 +6277,12 @@ packages:
|
|||||||
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
|
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
wot-design-uni@1.9.1:
|
||||||
|
resolution: {integrity: sha512-bZBt6xt5HfvmHBm76BZWBrvthHKeK7cbR//bbmv2ICjPRLXvD9KKHGZDZrq6C/j+DXHzA4UbcGer3iE8XcuVkw==}
|
||||||
|
engines: {HBuilderX: ^3.8.7}
|
||||||
|
peerDependencies:
|
||||||
|
vue: '>=3.2.47'
|
||||||
|
|
||||||
wrap-ansi@7.0.0:
|
wrap-ansi@7.0.0:
|
||||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@ -10419,12 +10399,6 @@ snapshots:
|
|||||||
slice-ansi: 5.0.0
|
slice-ansi: 5.0.0
|
||||||
string-width: 7.2.0
|
string-width: 7.2.0
|
||||||
|
|
||||||
clipboard@2.0.11:
|
|
||||||
dependencies:
|
|
||||||
good-listener: 1.2.2
|
|
||||||
select: 1.1.2
|
|
||||||
tiny-emitter: 2.1.0
|
|
||||||
|
|
||||||
cliui@7.0.4:
|
cliui@7.0.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width: 4.2.3
|
string-width: 4.2.3
|
||||||
@ -10637,8 +10611,6 @@ snapshots:
|
|||||||
|
|
||||||
delayed-stream@1.0.0: {}
|
delayed-stream@1.0.0: {}
|
||||||
|
|
||||||
delegate@3.2.0: {}
|
|
||||||
|
|
||||||
depd@2.0.0: {}
|
depd@2.0.0: {}
|
||||||
|
|
||||||
dequal@2.0.3: {}
|
dequal@2.0.3: {}
|
||||||
@ -11466,10 +11438,6 @@ snapshots:
|
|||||||
|
|
||||||
globals@16.2.0: {}
|
globals@16.2.0: {}
|
||||||
|
|
||||||
good-listener@1.2.2:
|
|
||||||
dependencies:
|
|
||||||
delegate: 3.2.0
|
|
||||||
|
|
||||||
gopd@1.2.0: {}
|
gopd@1.2.0: {}
|
||||||
|
|
||||||
got@11.8.6:
|
got@11.8.6:
|
||||||
@ -13282,8 +13250,6 @@ 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: {}
|
||||||
@ -13477,8 +13443,6 @@ snapshots:
|
|||||||
|
|
||||||
scule@1.3.0: {}
|
scule@1.3.0: {}
|
||||||
|
|
||||||
select@1.1.2: {}
|
|
||||||
|
|
||||||
semver@6.3.1: {}
|
semver@6.3.1: {}
|
||||||
|
|
||||||
semver@7.7.2: {}
|
semver@7.7.2: {}
|
||||||
@ -13754,8 +13718,6 @@ snapshots:
|
|||||||
|
|
||||||
timm@1.7.1: {}
|
timm@1.7.1: {}
|
||||||
|
|
||||||
tiny-emitter@2.1.0: {}
|
|
||||||
|
|
||||||
tiny-pinyin@1.3.2: {}
|
tiny-pinyin@1.3.2: {}
|
||||||
|
|
||||||
tinycolor2@1.6.0: {}
|
tinycolor2@1.6.0: {}
|
||||||
@ -14065,11 +14027,6 @@ snapshots:
|
|||||||
|
|
||||||
utils-merge@1.0.1: {}
|
utils-merge@1.0.1: {}
|
||||||
|
|
||||||
uview-plus@3.4.41:
|
|
||||||
dependencies:
|
|
||||||
clipboard: 2.0.11
|
|
||||||
dayjs: 1.11.10
|
|
||||||
|
|
||||||
v8-to-istanbul@8.1.1:
|
v8-to-istanbul@8.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/istanbul-lib-coverage': 2.0.6
|
'@types/istanbul-lib-coverage': 2.0.6
|
||||||
@ -14181,6 +14138,10 @@ snapshots:
|
|||||||
|
|
||||||
word-wrap@1.2.5: {}
|
word-wrap@1.2.5: {}
|
||||||
|
|
||||||
|
wot-design-uni@1.9.1(vue@3.5.15(typescript@5.7.2)):
|
||||||
|
dependencies:
|
||||||
|
vue: 3.5.15(typescript@5.7.2)
|
||||||
|
|
||||||
wrap-ansi@7.0.0:
|
wrap-ansi@7.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-styles: 4.3.0
|
ansi-styles: 4.3.0
|
||||||
|
@ -17,7 +17,6 @@ onHide(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
/* stylelint-disable selector-type-no-unknown */
|
|
||||||
button::after {
|
button::after {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
58
src/components/fg-navbar/fg-navbar.vue
Normal file
58
src/components/fg-navbar/fg-navbar.vue
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
withDefaults(
|
||||||
|
defineProps<{
|
||||||
|
leftText?: string
|
||||||
|
rightText?: string
|
||||||
|
leftArrow?: boolean
|
||||||
|
bordered?: boolean
|
||||||
|
fixed?: boolean
|
||||||
|
placeholder?: boolean
|
||||||
|
zIndex?: number
|
||||||
|
safeAreaInsetTop?: boolean
|
||||||
|
leftDisabled?: boolean
|
||||||
|
rightDisabled?: boolean
|
||||||
|
}>(),
|
||||||
|
{
|
||||||
|
leftText: '返回',
|
||||||
|
rightText: '',
|
||||||
|
leftArrow: true,
|
||||||
|
bordered: true,
|
||||||
|
fixed: false,
|
||||||
|
placeholder: true,
|
||||||
|
zIndex: 1,
|
||||||
|
safeAreaInsetTop: true,
|
||||||
|
leftDisabled: false,
|
||||||
|
rightDisabled: false,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
function handleClickLeft() {
|
||||||
|
uni.navigateBack({
|
||||||
|
fail() {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/index/index',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<wd-navbar
|
||||||
|
:left-text="leftText"
|
||||||
|
:right-text="rightText"
|
||||||
|
:left-arrow="leftArrow"
|
||||||
|
:bordered="bordered"
|
||||||
|
:fixed="fixed"
|
||||||
|
:placeholder="placeholder"
|
||||||
|
:z-index="zIndex"
|
||||||
|
:safe-area-inset-top="safeAreaInsetTop"
|
||||||
|
:left-disabled="leftDisabled"
|
||||||
|
:right-disabled="rightDisabled"
|
||||||
|
@click-left="handleClickLeft"
|
||||||
|
>
|
||||||
|
<template #title>
|
||||||
|
<slot />
|
||||||
|
</template>
|
||||||
|
</wd-navbar>
|
||||||
|
</template>
|
@ -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 = qs.stringify(options.query)
|
const queryStr = stringifyQuery(options.query)
|
||||||
if (options.url.includes('?')) {
|
if (options.url.includes('?')) {
|
||||||
options.url += `&${queryStr}`
|
options.url += `&${queryStr}`
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,17 @@
|
|||||||
<script lang="ts" setup></script>
|
<script lang="ts" setup>
|
||||||
|
import type { ConfigProviderThemeVars } from 'wot-design-uni'
|
||||||
|
|
||||||
|
const themeVars: ConfigProviderThemeVars = {
|
||||||
|
// colorTheme: 'red',
|
||||||
|
// buttonPrimaryBgColor: '#07c160',
|
||||||
|
// buttonPrimaryColor: '#07c160',
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<wd-config-provider :theme-vars="themeVars">
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
<wd-toast />
|
||||||
|
<wd-message-box />
|
||||||
|
</wd-config-provider>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,7 +1,17 @@
|
|||||||
<script lang="ts" setup></script>
|
<script lang="ts" setup>
|
||||||
|
import type { ConfigProviderThemeVars } from 'wot-design-uni'
|
||||||
|
|
||||||
|
const themeVars: ConfigProviderThemeVars = {
|
||||||
|
// colorTheme: 'red',
|
||||||
|
// buttonPrimaryBgColor: '#07c160',
|
||||||
|
// buttonPrimaryColor: '#07c160',
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<wd-config-provider :theme-vars="themeVars">
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
<wd-toast />
|
||||||
|
<wd-message-box />
|
||||||
|
</wd-config-provider>
|
||||||
</template>
|
</template>
|
||||||
|
@ -7,9 +7,9 @@ import { tabbarList as _tabBarList, cacheTabbarEnable, selectedTabbarStrategy }
|
|||||||
const customTabbarEnable = selectedTabbarStrategy === 1 || selectedTabbarStrategy === 2
|
const customTabbarEnable = selectedTabbarStrategy === 1 || selectedTabbarStrategy === 2
|
||||||
/** tabbarList 里面的 path 从 pages.config.ts 得到 */
|
/** tabbarList 里面的 path 从 pages.config.ts 得到 */
|
||||||
const tabbarList = _tabBarList.map(item => ({ ...item, path: `/${item.pagePath}` }))
|
const tabbarList = _tabBarList.map(item => ({ ...item, path: `/${item.pagePath}` }))
|
||||||
function selectTabBar(name: number) {
|
function selectTabBar({ value: index }: { value: number }) {
|
||||||
const url = tabbarList[name].path
|
const url = tabbarList[index].path
|
||||||
tabbarStore.setCurIdx(name)
|
tabbarStore.setCurIdx(index)
|
||||||
if (cacheTabbarEnable) {
|
if (cacheTabbarEnable) {
|
||||||
uni.switchTab({ url })
|
uni.switchTab({ url })
|
||||||
}
|
}
|
||||||
@ -34,11 +34,9 @@ onLoad(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<up-tabbar
|
<wd-tabbar
|
||||||
v-if="customTabbarEnable"
|
v-if="customTabbarEnable"
|
||||||
:value="tabbarStore.curIdx"
|
v-model="tabbarStore.curIdx"
|
||||||
active-color="#d81e06"
|
|
||||||
inactive-color="#7d7e80"
|
|
||||||
bordered
|
bordered
|
||||||
safeareainsetbottom
|
safeareainsetbottom
|
||||||
placeholder
|
placeholder
|
||||||
@ -46,40 +44,24 @@ onLoad(() => {
|
|||||||
@change="selectTabBar"
|
@change="selectTabBar"
|
||||||
>
|
>
|
||||||
<block v-for="(item, idx) in tabbarList" :key="item.path">
|
<block v-for="(item, idx) in tabbarList" :key="item.path">
|
||||||
<up-tabbar-item
|
<wd-tabbar-item v-if="item.iconType === 'uiLib'" :title="item.text" :icon="item.icon" />
|
||||||
v-if="item.iconType === 'uiLib'"
|
<wd-tabbar-item
|
||||||
:text="item.text"
|
|
||||||
:icon="item.icon"
|
|
||||||
:name="idx"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<up-tabbar-item
|
|
||||||
v-else-if="item.iconType === 'unocss' || item.iconType === 'iconfont'"
|
v-else-if="item.iconType === 'unocss' || item.iconType === 'iconfont'"
|
||||||
:text="item.text"
|
:title="item.text"
|
||||||
:name="idx"
|
|
||||||
>
|
>
|
||||||
<template #active-icon>
|
<template #icon>
|
||||||
<view
|
<view
|
||||||
h-40rpx
|
h-40rpx
|
||||||
w-40rpx
|
w-40rpx
|
||||||
class="text-[#d81e06]"
|
|
||||||
:class="[item.icon, idx === tabbarStore.curIdx ? 'is-active' : 'is-inactive']"
|
:class="[item.icon, idx === tabbarStore.curIdx ? 'is-active' : 'is-inactive']"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template #inactive-icon>
|
</wd-tabbar-item>
|
||||||
<view
|
<wd-tabbar-item v-else-if="item.iconType === 'local'" :title="item.text">
|
||||||
h-40rpx
|
|
||||||
w-40rpx
|
|
||||||
class="text-[#7d7e80]"
|
|
||||||
:class="[item.icon, idx === tabbarStore.curIdx ? 'is-active' : 'is-inactive']"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</up-tabbar-item>
|
|
||||||
<up-tabbar-item v-else-if="item.iconType === 'local'" :text="item.text" :name="idx">
|
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<image :src="item.icon" h-40rpx w-40rpx />
|
<image :src="item.icon" h-40rpx w-40rpx />
|
||||||
</template>
|
</template>
|
||||||
</up-tabbar-item>
|
</wd-tabbar-item>
|
||||||
</block>
|
</block>
|
||||||
</up-tabbar>
|
</wd-tabbar>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,10 +1,19 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import type { ConfigProviderThemeVars } from 'wot-design-uni'
|
||||||
import FgTabbar from './fg-tabbar/fg-tabbar.vue'
|
import FgTabbar from './fg-tabbar/fg-tabbar.vue'
|
||||||
|
|
||||||
|
const themeVars: ConfigProviderThemeVars = {
|
||||||
|
// colorTheme: 'red',
|
||||||
|
// buttonPrimaryBgColor: '#07c160',
|
||||||
|
// buttonPrimaryColor: '#07c160',
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view>
|
<wd-config-provider :theme-vars="themeVars">
|
||||||
<slot />
|
<slot />
|
||||||
<FgTabbar />
|
<FgTabbar />
|
||||||
</view>
|
<wd-toast />
|
||||||
|
<wd-message-box />
|
||||||
|
</wd-config-provider>
|
||||||
</template>
|
</template>
|
||||||
|
@ -10,9 +10,7 @@
|
|||||||
"autoscan": true,
|
"autoscan": true,
|
||||||
"custom": {
|
"custom": {
|
||||||
"^fg-(.*)": "@/components/fg-$1/fg-$1.vue",
|
"^fg-(.*)": "@/components/fg-$1/fg-$1.vue",
|
||||||
"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
|
"^wd-(.*)": "wot-design-uni/components/wd-$1/wd-$1.vue",
|
||||||
"^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
|
|
||||||
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue",
|
|
||||||
"^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)": "z-paging/components/z-paging$1/z-paging$1.vue"
|
"^(?!z-paging-refresh|z-paging-load-more)z-paging(.*)": "z-paging/components/z-paging$1/z-paging$1.vue"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -61,9 +61,9 @@ function reset() {
|
|||||||
<!-- #endif -->
|
<!-- #endif -->
|
||||||
|
|
||||||
<!-- http://localhost:9000/#/pages/index/request -->
|
<!-- http://localhost:9000/#/pages/index/request -->
|
||||||
<up-button class="my-6" type="primary" @click="run">
|
<wd-button class="my-6" @click="run">
|
||||||
发送请求
|
发送请求
|
||||||
</up-button>
|
</wd-button>
|
||||||
<view class="h-16">
|
<view class="h-16">
|
||||||
<view v-if="loading">
|
<view v-if="loading">
|
||||||
loading...
|
loading...
|
||||||
@ -77,8 +77,8 @@ function reset() {
|
|||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
<up-button type="warning" class="my-6" :disabled="!data" @click="reset">
|
<wd-button type="error" class="my-6" :disabled="!data" @click="reset">
|
||||||
重置数据
|
重置数据
|
||||||
</up-button>
|
</wd-button>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
@ -13,9 +13,9 @@ const { loading, data, run } = useUpload()
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<view class="p-4 text-center">
|
<view class="p-4 text-center">
|
||||||
<up-button type="primary" @click="run">
|
<wd-button @click="run">
|
||||||
选择图片并上传
|
选择图片并上传
|
||||||
</up-button>
|
</wd-button>
|
||||||
<view v-if="loading" class="h-10 text-blue">
|
<view v-if="loading" class="h-10 text-blue">
|
||||||
上传...
|
上传...
|
||||||
</view>
|
</view>
|
||||||
|
@ -56,7 +56,7 @@ console.log('index')
|
|||||||
<view class="mt-10">
|
<view class="mt-10">
|
||||||
<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="main-title-color mt-4 text-center text-4xl">
|
<view class="mt-4 text-center text-4xl text-[#d14328]">
|
||||||
unibest
|
unibest
|
||||||
</view>
|
</view>
|
||||||
<view class="mb-8 mt-2 text-center text-2xl">
|
<view class="mb-8 mt-2 text-center text-2xl">
|
||||||
@ -88,7 +88,7 @@ console.log('index')
|
|||||||
<view class="mt-4 text-center">
|
<view class="mt-4 text-center">
|
||||||
模板分支是:
|
模板分支是:
|
||||||
<text class="text-green-500">
|
<text class="text-green-500">
|
||||||
base-uview-plus
|
base
|
||||||
</text>
|
</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
@ -75,5 +75,3 @@ $uni-color-subtitle: #555; // 二级标题颜色
|
|||||||
$uni-font-size-subtitle: 18px;
|
$uni-font-size-subtitle: 18px;
|
||||||
$uni-color-paragraph: #3f536e; // 文章段落颜色
|
$uni-color-paragraph: #3f536e; // 文章段落颜色
|
||||||
$uni-font-size-paragraph: 15px;
|
$uni-font-size-paragraph: 15px;
|
||||||
|
|
||||||
@import "uview-plus/theme.scss"; // /* 行为相关颜色 */
|
|
29
src/utils/queryString.ts
Normal file
29
src/utils/queryString.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* 将对象序列化为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('&')
|
||||||
|
}
|
@ -14,7 +14,7 @@
|
|||||||
"@dcloudio/types",
|
"@dcloudio/types",
|
||||||
"@uni-helper/uni-types",
|
"@uni-helper/uni-types",
|
||||||
"@types/wechat-miniprogram",
|
"@types/wechat-miniprogram",
|
||||||
"uview-plus/types",
|
"wot-design-uni/global.d.ts",
|
||||||
"z-paging/types",
|
"z-paging/types",
|
||||||
"./src/typings.d.ts"
|
"./src/typings.d.ts"
|
||||||
],
|
],
|
||||||
|
@ -182,8 +182,5 @@ export default async ({ command, mode }) => {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
optimizeDeps: {
|
|
||||||
exclude: ['sard-uniapp'],
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user