commit 83ee120f09256a8c60e7df1f071cf658981a8d57 Author: 宅房 Date: Fri Nov 28 11:04:10 2025 +0800 fix bugs diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..50db792 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,13 @@ +{ + "permissions": { + "allow": [ + "Bash(mkdir:*)", + "Bash(node check-pages.js:*)", + "Bash(cat:*)", + "Bash(del nul)", + "Bash(rm:*)" + ], + "deny": [], + "ask": [] + } +} diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..65d9e74 --- /dev/null +++ b/App.vue @@ -0,0 +1,37 @@ + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..32f2408 --- /dev/null +++ b/README.md @@ -0,0 +1,251 @@ +# 武术赛事报名系统 + +基于uniapp框架开发的武术赛事报名系统,支持H5和微信小程序。 + +## 项目概述 + +本项目是一个完整的武术赛事报名管理系统,实现了从赛事浏览、报名到信息管理的完整流程。 + +### 技术栈 + +- **框架**: uniapp +- **平台**: H5、微信小程序 +- **样式**: SCSS、rpx响应式单位 +- **版本**: 2.0 + +## 项目结构 + +``` +martial-mini/ +├── pages/ # 页面目录 +│ ├── home/ # 首页(武术赛事通) +│ ├── profile/ # 个人中心 +│ ├── common-info/ # 常用信息 +│ ├── add-player/ # 新增选手 +│ ├── edit-player/ # 编辑选手 +│ ├── add-contact/ # 新增联系人 +│ ├── my-registration/ # 我的报名 +│ ├── event-list/ # 全部赛事列表 +│ ├── event-detail/ # 赛事详情 +│ ├── register-type/ # 选择报名类型 +│ ├── select-event/ # 选择报名项目 +│ └── event-register/ # 赛事报名流程 +├── components/ # 公共组件目录 +│ ├── custom-navbar/ # 自定义导航栏 +│ ├── custom-tabs/ # Tab切换组件 +│ └── confirm-modal/ # 确认弹窗组件 +├── static/ # 静态资源目录 +│ └── images/ # 图片资源 +├── image/ # 设计稿图片 +├── App.vue # 应用主组件 +├── main.js # 应用入口文件 +├── pages.json # 页面配置 +├── manifest.json # 应用配置 +├── uni.scss # 全局样式变量 +├── index.html # H5入口页面 +├── package.json # 项目依赖配置 +├── check-pages.js # 页面完成度检查工具 +└── README.md # 项目说明文档 +``` + +## 功能模块 + +### 1. 首页(武术赛事通) +- 轮播图展示 +- 精品赛事列表 +- 赛事状态显示(报名中/已结束) +- 快速报名入口 + +### 2. 个人中心 +- 用户信息展示 +- 我的报名入口 +- 常用信息管理 +- 修改密码 +- 联系我们 +- 退出登录 + +### 3. 常用信息管理 +- 选手信息管理(新增/编辑/删除) +- 集体信息管理 +- 联系人信息管理 +- Tab切换界面 + +### 4. 选手管理 +- 证件类型选择(身份证) +- 姓名输入 +- 证件号码输入(18位身份证号验证) +- 队伍名称输入 +- 表单验证提示 + +### 5. 联系人管理 +- 证件信息 +- 手机号码(格式验证) +- 邮箱地址 +- 联系地址 +- 设置默认联系人开关 + +### 6. 我的报名 +- 全部/待开始/进行中/已结束 Tab切换 +- 赛事状态标签 +- 赛事详细信息展示 +- 参赛选手列表 +- 查看证件功能 + +### 7. 赛事列表 +- 搜索功能 +- 日期筛选 +- 地区筛选 +- 赛事卡片展示 +- 报名状态显示 + +### 8. 赛事详情 +- 赛事基本信息 +- 功能网格入口: + - 信息发布 + - 赛事规程 + - 活动日程 + - 参赛选手 + - 比赛实况 + - 出场顺序 + - 成绩 + - 奖牌榜 + - 图片直播 +- 报名按钮 + +### 9. 报名流程 +- **选择报名类型**:单人赛/集体赛 +- **选择报名项目**:多选项目,显示价格 +- **报名三步骤**: + 1. 选择选手信息(可新增/编辑/删除选手) + 2. 订单支付(显示赛事信息、联系人、参赛选手、总价) + 3. 报名成功(显示选手编号信息) + +## 设计特点 + +### 配色方案 +- 主题色:#C93639(中国红) +- 文字色:#333333(深灰)、#666666(中灰)、#999999(浅灰) +- 背景色:#f5f5f5(浅灰背景)、#ffffff(白色) + +### 样式规范 +- 使用rpx响应式单位,自适应不同屏幕 +- 圆角统一:16rpx(常规)、24rpx(大圆角) +- 间距统一:30rpx(页面内边距) +- 字体大小: + - 标题:36-38rpx + - 正文:28-32rpx + - 辅助文字:24-26rpx + +### UI组件 +- 自定义导航栏(支持返回按钮、标题、右侧操作区) +- Tab切换组件(带下划线指示器) +- 确认弹窗组件(取消/确定) +- 表单输入组件 +- 按钮组件(主按钮/禁用按钮) + +## 开发说明 + +### 环境要求 +- Node.js 12+ +- HBuilderX(推荐)或 VSCode + uni-app插件 + +### 安装依赖 +```bash +npm install +``` + +### 运行项目 + +#### H5开发 +```bash +npm run dev:h5 +``` + +#### 微信小程序开发 +```bash +npm run dev:mp-weixin +``` + +### 构建项目 + +#### 构建H5 +```bash +npm run build:h5 +``` + +#### 构建微信小程序 +```bash +npm run build:mp-weixin +``` + +### 检查页面完成度 +```bash +node check-pages.js +``` + +## 页面列表 + +1. **首页** - `/pages/home/home` +2. **个人中心** - `/pages/profile/profile` +3. **常用信息** - `/pages/common-info/common-info` +4. **新增选手** - `/pages/add-player/add-player` +5. **编辑选手** - `/pages/edit-player/edit-player` +6. **新增联系人** - `/pages/add-contact/add-contact` +7. **我的报名** - `/pages/my-registration/my-registration` +8. **全部赛事列表** - `/pages/event-list/event-list` +9. **赛事详情** - `/pages/event-detail/event-detail` +10. **选择报名类型** - `/pages/register-type/register-type` +11. **选择报名项目** - `/pages/select-event/select-event` +12. **赛事报名流程** - `/pages/event-register/event-register` + +## 注意事项 + +1. 所有静态页面已完成,数据为模拟数据 +2. 实际开发时需要对接后端API接口 +3. 图片资源需要替换为实际的设计图 +4. 部分功能(如支付)需要集成第三方SDK +5. 微信小程序需要配置appid和相关权限 + +## 后续开发建议 + +1. **接口对接**: + - 用户登录/注册 + - 赛事列表获取 + - 报名信息提交 + - 支付接口对接 + +2. **功能完善**: + - 图片上传功能 + - 消息通知 + - 数据缓存优化 + - 错误处理机制 + +3. **性能优化**: + - 图片懒加载 + - 列表虚拟滚动 + - 页面预加载 + +4. **用户体验**: + - 加载动画 + - 骨架屏 + - 下拉刷新 + - 上拉加载更多 + +## 检查报告 + +运行 `node check-pages.js` 可查看详细的页面完成度报告。 + +当前完成度:**100%** ✓ + +- 配置文件:7/7 完成 +- 公共组件:3/3 完成 +- 页面文件:12/12 完成 + +## 版本信息 + +- 版本号:V 2.0 +- 开发时间:2025年1月 + +## 许可证 + +MIT License diff --git a/check-pages.js b/check-pages.js new file mode 100644 index 0000000..909f51f --- /dev/null +++ b/check-pages.js @@ -0,0 +1,204 @@ +const fs = require('fs'); +const path = require('path'); + +// 定义需要检查的页面列表 +const pages = [ + { + name: '首页(武术赛事通)', + path: 'pages/home/home.vue', + description: '包含轮播图、精品赛事列表' + }, + { + name: '个人中心', + path: 'pages/profile/profile.vue', + description: '用户信息、我的报名、常用信息等功能入口' + }, + { + name: '常用信息', + path: 'pages/common-info/common-info.vue', + description: '选手/集体/联系人信息管理(含Tab切换)' + }, + { + name: '新增选手', + path: 'pages/add-player/add-player.vue', + description: '表单页面,包含证件类型、姓名、证件号码、队伍' + }, + { + name: '编辑选手', + path: 'pages/edit-player/edit-player.vue', + description: '编辑选手信息' + }, + { + name: '新增联系人', + path: 'pages/add-contact/add-contact.vue', + description: '包含手机号码、邮箱、地址、设置为默认联系人' + }, + { + name: '我的报名', + path: 'pages/my-registration/my-registration.vue', + description: '全部/待开始/进行中/已结束四个Tab,显示报名的赛事' + }, + { + name: '全部赛事列表', + path: 'pages/event-list/event-list.vue', + description: '搜索框、日期和地区筛选' + }, + { + name: '赛事详情', + path: 'pages/event-detail/event-detail.vue', + description: '赛事信息、信息发布、赛事规程等功能入口' + }, + { + name: '选择报名类型', + path: 'pages/register-type/register-type.vue', + description: '单人赛/集体赛选择' + }, + { + name: '选择报名项目', + path: 'pages/select-event/select-event.vue', + description: '列表形式选择报名项目' + }, + { + name: '赛事报名流程', + path: 'pages/event-register/event-register.vue', + description: '三步骤:选择选手信息、订单支付、报名成功' + } +]; + +// 定义需要检查的组件列表 +const components = [ + { + name: '自定义导航栏', + path: 'components/custom-navbar/custom-navbar.vue' + }, + { + name: 'Tab切换组件', + path: 'components/custom-tabs/custom-tabs.vue' + }, + { + name: '确认弹窗组件', + path: 'components/confirm-modal/confirm-modal.vue' + } +]; + +// 定义需要检查的配置文件 +const configs = [ + { + name: 'pages.json', + path: 'pages.json' + }, + { + name: 'manifest.json', + path: 'manifest.json' + }, + { + name: 'App.vue', + path: 'App.vue' + }, + { + name: 'main.js', + path: 'main.js' + }, + { + name: 'uni.scss', + path: 'uni.scss' + }, + { + name: 'index.html', + path: 'index.html' + }, + { + name: 'package.json', + path: 'package.json' + } +]; + +function checkFile(filePath) { + const fullPath = path.join(__dirname, filePath); + return fs.existsSync(fullPath); +} + +function generateReport() { + console.log('========================================'); + console.log(' 武术赛事报名系统 - 页面完成度检查报告'); + console.log('========================================\n'); + + let totalItems = 0; + let completedItems = 0; + + // 检查配置文件 + console.log('【配置文件检查】'); + configs.forEach(config => { + totalItems++; + const exists = checkFile(config.path); + if (exists) { + completedItems++; + console.log(`✓ ${config.name}`); + } else { + console.log(`✗ ${config.name} [缺失]`); + } + }); + + console.log('\n【公共组件检查】'); + components.forEach(component => { + totalItems++; + const exists = checkFile(component.path); + if (exists) { + completedItems++; + console.log(`✓ ${component.name}`); + } else { + console.log(`✗ ${component.name} [缺失]`); + } + }); + + console.log('\n【页面检查】'); + pages.forEach((page, index) => { + totalItems++; + const exists = checkFile(page.path); + if (exists) { + completedItems++; + console.log(`✓ ${index + 1}. ${page.name}`); + console.log(` 描述: ${page.description}`); + console.log(` 路径: ${page.path}\n`); + } else { + console.log(`✗ ${index + 1}. ${page.name} [缺失]`); + console.log(` 描述: ${page.description}`); + console.log(` 路径: ${page.path}\n`); + } + }); + + const completionRate = ((completedItems / totalItems) * 100).toFixed(2); + + console.log('========================================'); + console.log('【统计信息】'); + console.log(`总计项目: ${totalItems}`); + console.log(`已完成: ${completedItems}`); + console.log(`未完成: ${totalItems - completedItems}`); + console.log(`完成度: ${completionRate}%`); + console.log('========================================\n'); + + if (completedItems === totalItems) { + console.log('🎉 恭喜!所有页面和组件都已完成!'); + console.log('\n【后续步骤】'); + console.log('1. 运行 npm install 安装依赖'); + console.log('2. 运行 npm run dev:h5 启动H5开发环境'); + console.log('3. 运行 npm run dev:mp-weixin 启动微信小程序开发环境'); + } else { + console.log('⚠️ 还有未完成的项目,请继续完善。'); + } + + console.log('\n【项目特点】'); + console.log('✓ 支持H5和微信小程序'); + console.log('✓ 基于uniapp框架开发'); + console.log('✓ 完整的赛事报名流程'); + console.log('✓ 选手和联系人信息管理'); + console.log('✓ 响应式设计,一比一还原设计稿'); + console.log('✓ 使用rpx单位,自适应不同屏幕尺寸'); +} + +// 执行检查 +try { + generateReport(); +} catch (error) { + console.error('检查过程中出现错误:', error); +} diff --git a/components/confirm-modal/confirm-modal.vue b/components/confirm-modal/confirm-modal.vue new file mode 100644 index 0000000..481b80c --- /dev/null +++ b/components/confirm-modal/confirm-modal.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/components/custom-navbar/custom-navbar.vue b/components/custom-navbar/custom-navbar.vue new file mode 100644 index 0000000..9e4a964 --- /dev/null +++ b/components/custom-navbar/custom-navbar.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/components/custom-tabs/custom-tabs.vue b/components/custom-tabs/custom-tabs.vue new file mode 100644 index 0000000..f9d13fe --- /dev/null +++ b/components/custom-tabs/custom-tabs.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/image/微信图片_20251127185337_231_2.png b/image/微信图片_20251127185337_231_2.png new file mode 100644 index 0000000..40c45ce Binary files /dev/null and b/image/微信图片_20251127185337_231_2.png differ diff --git a/image/微信图片_20251127185358_232_2.png b/image/微信图片_20251127185358_232_2.png new file mode 100644 index 0000000..7598981 Binary files /dev/null and b/image/微信图片_20251127185358_232_2.png differ diff --git a/image/微信图片_20251127185410_233_2.png b/image/微信图片_20251127185410_233_2.png new file mode 100644 index 0000000..04bc044 Binary files /dev/null and b/image/微信图片_20251127185410_233_2.png differ diff --git a/image/微信图片_20251127185420_234_2.png b/image/微信图片_20251127185420_234_2.png new file mode 100644 index 0000000..b581883 Binary files /dev/null and b/image/微信图片_20251127185420_234_2.png differ diff --git a/image/微信图片_20251127185429_235_2.png b/image/微信图片_20251127185429_235_2.png new file mode 100644 index 0000000..ba031d7 Binary files /dev/null and b/image/微信图片_20251127185429_235_2.png differ diff --git a/image/微信图片_20251127185439_236_2.png b/image/微信图片_20251127185439_236_2.png new file mode 100644 index 0000000..aff9a62 Binary files /dev/null and b/image/微信图片_20251127185439_236_2.png differ diff --git a/image/微信图片_20251127185507_237_2.png b/image/微信图片_20251127185507_237_2.png new file mode 100644 index 0000000..37a81fc Binary files /dev/null and b/image/微信图片_20251127185507_237_2.png differ diff --git a/image/微信图片_20251127185520_238_2.png b/image/微信图片_20251127185520_238_2.png new file mode 100644 index 0000000..3b98284 Binary files /dev/null and b/image/微信图片_20251127185520_238_2.png differ diff --git a/image/微信图片_20251127185528_239_2.png b/image/微信图片_20251127185528_239_2.png new file mode 100644 index 0000000..7deafc2 Binary files /dev/null and b/image/微信图片_20251127185528_239_2.png differ diff --git a/image/微信图片_20251127185539_240_2.png b/image/微信图片_20251127185539_240_2.png new file mode 100644 index 0000000..7814e69 Binary files /dev/null and b/image/微信图片_20251127185539_240_2.png differ diff --git a/image/微信图片_20251127185546_241_2.png b/image/微信图片_20251127185546_241_2.png new file mode 100644 index 0000000..53bd852 Binary files /dev/null and b/image/微信图片_20251127185546_241_2.png differ diff --git a/image/微信图片_20251127185554_242_2.png b/image/微信图片_20251127185554_242_2.png new file mode 100644 index 0000000..b43e815 Binary files /dev/null and b/image/微信图片_20251127185554_242_2.png differ diff --git a/image/微信图片_20251127185602_243_2.png b/image/微信图片_20251127185602_243_2.png new file mode 100644 index 0000000..ca796ba Binary files /dev/null and b/image/微信图片_20251127185602_243_2.png differ diff --git a/image/微信图片_20251127185610_244_2.png b/image/微信图片_20251127185610_244_2.png new file mode 100644 index 0000000..d4b04bc Binary files /dev/null and b/image/微信图片_20251127185610_244_2.png differ diff --git a/image/微信图片_20251127185619_245_2.png b/image/微信图片_20251127185619_245_2.png new file mode 100644 index 0000000..1ed05e9 Binary files /dev/null and b/image/微信图片_20251127185619_245_2.png differ diff --git a/image/微信图片_20251127185627_246_2.png b/image/微信图片_20251127185627_246_2.png new file mode 100644 index 0000000..dcdac2e Binary files /dev/null and b/image/微信图片_20251127185627_246_2.png differ diff --git a/image/微信图片_20251127185636_247_2.png b/image/微信图片_20251127185636_247_2.png new file mode 100644 index 0000000..fcd1b98 Binary files /dev/null and b/image/微信图片_20251127185636_247_2.png differ diff --git a/image/微信图片_20251127185644_248_2.png b/image/微信图片_20251127185644_248_2.png new file mode 100644 index 0000000..35586c9 Binary files /dev/null and b/image/微信图片_20251127185644_248_2.png differ diff --git a/image/微信图片_20251127185658_249_2.png b/image/微信图片_20251127185658_249_2.png new file mode 100644 index 0000000..f745925 Binary files /dev/null and b/image/微信图片_20251127185658_249_2.png differ diff --git a/main.js b/main.js new file mode 100644 index 0000000..c993206 --- /dev/null +++ b/main.js @@ -0,0 +1,21 @@ +import App from './App' + +// #ifndef VUE3 +import Vue from 'vue' +Vue.config.productionTip = false +App.mpType = 'app' +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..e3b1b81 --- /dev/null +++ b/manifest.json @@ -0,0 +1,60 @@ +{ + "name": "martial-mini", + "appid": "", + "description": "武术赛事报名系统", + "versionName": "2.0", + "versionCode": "200", + "transformPx": false, + "app-plus": { + "usingComponents": true, + "nvueStyleCompiler": "uni-app", + "compilerVersion": 3, + "splashscreen": { + "alwaysShowBeforeRender": true, + "waiting": true, + "autoclose": true, + "delay": 0 + }, + "modules": {}, + "distribute": { + "android": { + "permissions": [] + }, + "ios": {}, + "sdkConfigs": {} + } + }, + "quickapp": {}, + "mp-weixin": { + "appid": "", + "setting": { + "urlCheck": false, + "es6": true, + "postcss": true, + "minified": true + }, + "usingComponents": true + }, + "mp-alipay": { + "usingComponents": true + }, + "mp-baidu": { + "usingComponents": true + }, + "mp-toutiao": { + "usingComponents": true + }, + "h5": { + "title": "武术赛事报名系统", + "template": "index.html", + "router": { + "mode": "hash", + "base": "./" + }, + "optimization": { + "treeShaking": { + "enable": true + } + } + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c9c174d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "martial-mini", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "martial-mini", + "version": "2.0.0", + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ec5c71c --- /dev/null +++ b/package.json @@ -0,0 +1,44 @@ +{ + "name": "martial-mini", + "version": "2.0.0", + "description": "武术赛事报名系统", + "main": "main.js", + "scripts": { + "dev:h5": "uni", + "build:h5": "uni build", + "dev:mp-weixin": "uni -p mp-weixin", + "build:mp-weixin": "uni build -p mp-weixin" + }, + "dependencies": { + "vue": "^2.6.14" + }, + "devDependencies": { + "@dcloudio/uni-cli-shared": "latest", + "@dcloudio/uni-template-compiler": "latest", + "@dcloudio/vue-cli-plugin-hbuilderx": "latest", + "@dcloudio/vue-cli-plugin-uni": "latest", + "@dcloudio/vue-cli-plugin-uni-optimize": "latest", + "@dcloudio/webpack-uni-mp-loader": "latest", + "@dcloudio/webpack-uni-pages-loader": "latest", + "@vue/cli-plugin-babel": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "babel-plugin-import": "^1.13.3", + "mini-types": "*", + "miniprogram-api-typings": "*", + "postcss-comment": "^2.0.0", + "sass": "^1.49.0", + "sass-loader": "^10.1.1", + "vue-template-compiler": "^2.6.14" + }, + "browserslist": [ + "Android >= 4.4", + "ios >= 9" + ], + "keywords": [ + "uniapp", + "martial-arts", + "registration" + ], + "author": "", + "license": "MIT" +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..9786d37 --- /dev/null +++ b/pages.json @@ -0,0 +1,170 @@ +{ + "pages": [ + { + "path": "pages/home/home", + "style": { + "navigationBarTitleText": "武术赛事通", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/profile/profile", + "style": { + "navigationBarTitleText": "个人中心", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/common-info/common-info", + "style": { + "navigationBarTitleText": "常用信息", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/add-player/add-player", + "style": { + "navigationBarTitleText": "新增选手", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/edit-player/edit-player", + "style": { + "navigationBarTitleText": "编辑选手", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/add-contact/add-contact", + "style": { + "navigationBarTitleText": "新增联系人", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/my-registration/my-registration", + "style": { + "navigationBarTitleText": "我的报名", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-list/event-list", + "style": { + "navigationBarTitleText": "全部赛事列表", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-detail/event-detail", + "style": { + "navigationBarTitleText": "赛事详情", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/select-event/select-event", + "style": { + "navigationBarTitleText": "选择报名项目", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-register/event-register", + "style": { + "navigationBarTitleText": "赛事报名", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/register-type/register-type", + "style": { + "navigationBarTitleText": "选择报名", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-info/event-info", + "style": { + "navigationBarTitleText": "信息发布", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-rules/event-rules", + "style": { + "navigationBarTitleText": "赛事规程", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-schedule/event-schedule", + "style": { + "navigationBarTitleText": "活动日程", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-players/event-players", + "style": { + "navigationBarTitleText": "参赛选手", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-live/event-live", + "style": { + "navigationBarTitleText": "比赛实况", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-lineup/event-lineup", + "style": { + "navigationBarTitleText": "出场顺序", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-score/event-score", + "style": { + "navigationBarTitleText": "成绩", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + }, + { + "path": "pages/event-medals/event-medals", + "style": { + "navigationBarTitleText": "奖牌榜", + "navigationBarBackgroundColor": "#C93639", + "navigationBarTextStyle": "white" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "white", + "navigationBarTitleText": "武术赛事", + "navigationBarBackgroundColor": "#C93639", + "backgroundColor": "#F8F8F8" + } +} diff --git a/pages/add-contact/add-contact.vue b/pages/add-contact/add-contact.vue new file mode 100644 index 0000000..cac34b9 --- /dev/null +++ b/pages/add-contact/add-contact.vue @@ -0,0 +1,332 @@ + + + + + diff --git a/pages/add-player/add-player.vue b/pages/add-player/add-player.vue new file mode 100644 index 0000000..820d7c8 --- /dev/null +++ b/pages/add-player/add-player.vue @@ -0,0 +1,339 @@ + + + + + diff --git a/pages/common-info/common-info.vue b/pages/common-info/common-info.vue new file mode 100644 index 0000000..0ab0704 --- /dev/null +++ b/pages/common-info/common-info.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/pages/edit-player/edit-player.vue b/pages/edit-player/edit-player.vue new file mode 100644 index 0000000..91fc928 --- /dev/null +++ b/pages/edit-player/edit-player.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/pages/event-detail/event-detail.vue b/pages/event-detail/event-detail.vue new file mode 100644 index 0000000..142069c --- /dev/null +++ b/pages/event-detail/event-detail.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/pages/event-info/event-info.vue b/pages/event-info/event-info.vue new file mode 100644 index 0000000..00555c6 --- /dev/null +++ b/pages/event-info/event-info.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/pages/event-lineup/event-lineup.vue b/pages/event-lineup/event-lineup.vue new file mode 100644 index 0000000..9a3f450 --- /dev/null +++ b/pages/event-lineup/event-lineup.vue @@ -0,0 +1,244 @@ + + + + + diff --git a/pages/event-list/event-list.vue b/pages/event-list/event-list.vue new file mode 100644 index 0000000..2a9d5c6 --- /dev/null +++ b/pages/event-list/event-list.vue @@ -0,0 +1,351 @@ + + + + + diff --git a/pages/event-live/event-live.vue b/pages/event-live/event-live.vue new file mode 100644 index 0000000..e50a600 --- /dev/null +++ b/pages/event-live/event-live.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/pages/event-medals/event-medals.vue b/pages/event-medals/event-medals.vue new file mode 100644 index 0000000..e97eba3 --- /dev/null +++ b/pages/event-medals/event-medals.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/pages/event-players/event-players.vue b/pages/event-players/event-players.vue new file mode 100644 index 0000000..8514d3b --- /dev/null +++ b/pages/event-players/event-players.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/pages/event-register/event-register.vue b/pages/event-register/event-register.vue new file mode 100644 index 0000000..ff2e11c --- /dev/null +++ b/pages/event-register/event-register.vue @@ -0,0 +1,698 @@ + + + + + diff --git a/pages/event-rules/event-rules.vue b/pages/event-rules/event-rules.vue new file mode 100644 index 0000000..5353146 --- /dev/null +++ b/pages/event-rules/event-rules.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/pages/event-schedule/event-schedule.vue b/pages/event-schedule/event-schedule.vue new file mode 100644 index 0000000..4c9d1eb --- /dev/null +++ b/pages/event-schedule/event-schedule.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/pages/event-score/event-score.vue b/pages/event-score/event-score.vue new file mode 100644 index 0000000..20ff06f --- /dev/null +++ b/pages/event-score/event-score.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/pages/home/home.vue b/pages/home/home.vue new file mode 100644 index 0000000..fda5903 --- /dev/null +++ b/pages/home/home.vue @@ -0,0 +1,277 @@ + + + + + diff --git a/pages/my-registration/my-registration.vue b/pages/my-registration/my-registration.vue new file mode 100644 index 0000000..e61c760 --- /dev/null +++ b/pages/my-registration/my-registration.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/pages/profile/profile.vue b/pages/profile/profile.vue new file mode 100644 index 0000000..d3ffe16 --- /dev/null +++ b/pages/profile/profile.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/pages/register-type/register-type.vue b/pages/register-type/register-type.vue new file mode 100644 index 0000000..6e262db --- /dev/null +++ b/pages/register-type/register-type.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/pages/select-event/select-event.vue b/pages/select-event/select-event.vue new file mode 100644 index 0000000..6a46dd5 --- /dev/null +++ b/pages/select-event/select-event.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/static/images/bananer1.png b/static/images/bananer1.png new file mode 100644 index 0000000..64923fc Binary files /dev/null and b/static/images/bananer1.png differ diff --git a/static/images/bananer2.png b/static/images/bananer2.png new file mode 100644 index 0000000..2d0ffe1 Binary files /dev/null and b/static/images/bananer2.png differ diff --git a/static/images/logo@3x.png b/static/images/logo@3x.png new file mode 100644 index 0000000..6133c24 Binary files /dev/null and b/static/images/logo@3x.png differ diff --git a/static/images/个人中心亮@3x.png b/static/images/个人中心亮@3x.png new file mode 100644 index 0000000..101d489 Binary files /dev/null and b/static/images/个人中心亮@3x.png differ diff --git a/static/images/个人中心灰@3x.png b/static/images/个人中心灰@3x.png new file mode 100644 index 0000000..37eda56 Binary files /dev/null and b/static/images/个人中心灰@3x.png differ diff --git a/static/images/信息发布@3x.png b/static/images/信息发布@3x.png new file mode 100644 index 0000000..92b934f Binary files /dev/null and b/static/images/信息发布@3x.png differ diff --git a/static/images/出场顺序@3x.png b/static/images/出场顺序@3x.png new file mode 100644 index 0000000..bfd8de3 Binary files /dev/null and b/static/images/出场顺序@3x.png differ diff --git a/static/images/分割线@3x.png b/static/images/分割线@3x.png new file mode 100644 index 0000000..fbd8470 Binary files /dev/null and b/static/images/分割线@3x.png differ diff --git a/static/images/删除@3x.png b/static/images/删除@3x.png new file mode 100644 index 0000000..21d7069 Binary files /dev/null and b/static/images/删除@3x.png differ diff --git a/static/images/参赛选手@3x.png b/static/images/参赛选手@3x.png new file mode 100644 index 0000000..d8ab741 Binary files /dev/null and b/static/images/参赛选手@3x.png differ diff --git a/static/images/图片直播@3x.png b/static/images/图片直播@3x.png new file mode 100644 index 0000000..5545386 Binary files /dev/null and b/static/images/图片直播@3x.png differ diff --git a/static/images/奖牌榜.png b/static/images/奖牌榜.png new file mode 100644 index 0000000..13b3c0f Binary files /dev/null and b/static/images/奖牌榜.png differ diff --git a/static/images/成绩@3x.png b/static/images/成绩@3x.png new file mode 100644 index 0000000..f1dfa37 Binary files /dev/null and b/static/images/成绩@3x.png differ diff --git a/static/images/我的报名@3x.png b/static/images/我的报名@3x.png new file mode 100644 index 0000000..a623dbe Binary files /dev/null and b/static/images/我的报名@3x.png differ diff --git a/static/images/提交报名成功亮@3x.png b/static/images/提交报名成功亮@3x.png new file mode 100644 index 0000000..4dc2446 Binary files /dev/null and b/static/images/提交报名成功亮@3x.png differ diff --git a/static/images/提交报名成功灰@3x.png b/static/images/提交报名成功灰@3x.png new file mode 100644 index 0000000..e90a0d7 Binary files /dev/null and b/static/images/提交报名成功灰@3x.png differ diff --git a/static/images/新增@3x.png b/static/images/新增@3x.png new file mode 100644 index 0000000..4af9d28 Binary files /dev/null and b/static/images/新增@3x.png differ diff --git a/static/images/未选中@3x.png b/static/images/未选中@3x.png new file mode 100644 index 0000000..efaee35 Binary files /dev/null and b/static/images/未选中@3x.png differ diff --git a/static/images/比赛实况@3x.png b/static/images/比赛实况@3x.png new file mode 100644 index 0000000..42dab29 Binary files /dev/null and b/static/images/比赛实况@3x.png differ diff --git a/static/images/活动日程@3x.png b/static/images/活动日程@3x.png new file mode 100644 index 0000000..737292e Binary files /dev/null and b/static/images/活动日程@3x.png differ diff --git a/static/images/编辑@3x.png b/static/images/编辑@3x.png new file mode 100644 index 0000000..7450ba0 Binary files /dev/null and b/static/images/编辑@3x.png differ diff --git a/static/images/订单支付亮@3x.png b/static/images/订单支付亮@3x.png new file mode 100644 index 0000000..6508851 Binary files /dev/null and b/static/images/订单支付亮@3x.png differ diff --git a/static/images/订单支付灰@3x.png b/static/images/订单支付灰@3x.png new file mode 100644 index 0000000..19e8d26 Binary files /dev/null and b/static/images/订单支付灰@3x.png differ diff --git a/static/images/赛事规程@3x.png b/static/images/赛事规程@3x.png new file mode 100644 index 0000000..55bc0cc Binary files /dev/null and b/static/images/赛事规程@3x.png differ diff --git a/static/images/轮播图@3x.png b/static/images/轮播图@3x.png new file mode 100644 index 0000000..5bcec9c Binary files /dev/null and b/static/images/轮播图@3x.png differ diff --git a/static/images/选中@3x.png b/static/images/选中@3x.png new file mode 100644 index 0000000..25aa1dc Binary files /dev/null and b/static/images/选中@3x.png differ diff --git a/static/images/选择选手信息@3x.png b/static/images/选择选手信息@3x.png new file mode 100644 index 0000000..249512c Binary files /dev/null and b/static/images/选择选手信息@3x.png differ diff --git a/static/images/首页亮@3x.png b/static/images/首页亮@3x.png new file mode 100644 index 0000000..340fdf6 Binary files /dev/null and b/static/images/首页亮@3x.png differ diff --git a/static/images/首页灰@3x.png b/static/images/首页灰@3x.png new file mode 100644 index 0000000..111f950 Binary files /dev/null and b/static/images/首页灰@3x.png differ diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..9a2d32f --- /dev/null +++ b/uni.scss @@ -0,0 +1,80 @@ +/* 全局颜色变量 */ +$primary-color: #C93639; +$primary-red: #C93639; +$text-color: #333333; +$text-gray: #666666; +$text-light: #999999; +$border-color: #eeeeee; +$bg-gray: #f5f5f5; +$white: #ffffff; + +/* 常用尺寸 */ +$page-padding: 30rpx; +$border-radius: 16rpx; +$border-radius-lg: 24rpx; + +/* 公共样式 */ +.container { + min-height: 100vh; + background-color: $bg-gray; +} + +.page-padding { + padding: $page-padding; +} + +.card { + background-color: $white; + border-radius: $border-radius; + padding: 30rpx; + margin-bottom: 20rpx; +} + +.flex { + display: flex; +} + +.flex-center { + display: flex; + align-items: center; + justify-content: center; +} + +.flex-between { + display: flex; + align-items: center; + justify-content: space-between; +} + +.flex-column { + display: flex; + flex-direction: column; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.primary-btn { + background-color: $primary-color; + color: $white; + border-radius: 12rpx; + font-size: 32rpx; + padding: 28rpx; + text-align: center; + font-weight: bold; +} + +.disabled-btn { + background-color: rgba(201, 54, 57, 0.5); + color: $white; + border-radius: 12rpx; + font-size: 32rpx; + padding: 28rpx; + text-align: center; + font-weight: bold; +} diff --git a/微信图片_20251127231204_256_2.png b/微信图片_20251127231204_256_2.png new file mode 100644 index 0000000..e617ad7 Binary files /dev/null and b/微信图片_20251127231204_256_2.png differ diff --git a/赛事功能页面说明.md b/赛事功能页面说明.md new file mode 100644 index 0000000..5240777 --- /dev/null +++ b/赛事功能页面说明.md @@ -0,0 +1,208 @@ +# 赛事详情功能页面说明 + +## 📄 新增页面概览 + +为赛事详情页面的9个功能模块设计并实现了8个页面(图片直播暂未实现): + +### 1. 信息发布 (`pages/event-info/event-info.vue`) +**功能:** 展示赛事相关的通知、公告和重要信息 + +**设计特点:** +- 卡片式列表布局 +- 不同信息类型有不同的标签颜色(通知、公告、重要) +- 显示发布时间 +- 内容简要预览,可点击查看详情 + +**数据示例:** +- 通知:报名截止时间通知 +- 公告:场地变更公告 +- 重要:疫情防控须知 + +--- + +### 2. 赛事规程 (`pages/event-rules/event-rules.vue`) +**功能:** 展示比赛规则和章程 + +**设计特点:** +- 可折叠的章节列表 +- 清晰的章节标题 +- 点击展开/收起查看详细内容 +- 红点装饰增强视觉效果 + +**章节示例:** +- 第一章:总则 +- 第二章:参赛资格 +- 第三章:比赛规则 +- 第四章:奖项设置 + +--- + +### 3. 活动日程 (`pages/event-schedule/event-schedule.vue`) +**功能:** 展示赛事活动时间表 + +**设计特点:** +- 日期选项卡切换不同日期 +- 时间线布局展示日程 +- 显示时间、活动名称、地点 +- 红色圆点和连线构成时间轴 + +**日程示例:** +- 2月1日:签到、开幕式、预赛 +- 2月2日:半决赛、决赛 +- 2月3日:颁奖典礼、闭幕式 + +--- + +### 4. 参赛选手 (`pages/event-players/event-players.vue`) +**功能:** 展示所有参赛选手信息 + +**设计特点:** +- 搜索框支持查找选手 +- 分类标签(全部、男子组、女子组) +- 选手编号圆形徽章 +- 显示队伍、项目、状态 + +**状态标识:** +- 已确认:绿色背景 +- 待确认:橙色背景 + +--- + +### 5. 比赛实况 (`pages/event-live/event-live.vue`) +**功能:** 实时直播比赛动态 + +**设计特点:** +- 时间轴式信息流 +- 不同类型实况有不同标签颜色 +- 支持图片展示(3列网格) +- 下拉刷新提示 + +**实况类型:** +- 精彩瞬间(红色) +- 比分(橙色) +- 赛况(绿色) + +--- + +### 6. 出场顺序 (`pages/event-lineup/event-lineup.vue`) +**功能:** 展示选手出场顺序表 + +**设计特点:** +- 组别选项卡切换 +- 渐变色序号卡片 +- 显示出场时间和队伍 +- 状态标识(已完成、进行中、待出场) + +**状态颜色:** +- 已完成:绿色 +- 进行中:橙色 +- 待出场:灰色 + +--- + +### 7. 成绩 (`pages/event-score/event-score.vue`) +**功能:** 展示各项目比赛成绩 + +**设计特点:** +- 项目分类选项卡 +- 前三名渐变色徽章(金、银、铜) +- 大号红色分数突出显示 +- 排名徽章视觉效果强 + +**排名标识:** +- 第1名:金色渐变 +- 第2名:银色渐变 +- 第3名:铜色渐变 +- 其他:灰色 + +--- + +### 8. 奖牌榜 (`pages/event-medals/event-medals.vue`) +**功能:** 展示各队伍奖牌统计 + +**设计特点:** +- 顶部统计卡片(参赛队伍数、奖牌总数) +- 表格式展示金银铜牌数量 +- 金银铜牌用不同颜色区分 +- 总计突出显示 + +**排名标识:** +- 第1名:金色数字 +- 第2名:银色数字 +- 第3名:铜色数字 + +--- + +## 🎨 统一设计风格 + +所有页面遵循统一的设计规范: + +### 颜色方案 +- **主题色:** #C93639(中国红) +- **背景色:** #f5f5f5(浅灰) +- **卡片背景:** #fff(白色) +- **文字颜色:** #333333(深灰)/ #666666(中灰)/ #999999(浅灰) + +### 视觉元素 +- 圆角:12rpx - 16rpx +- 内边距:20rpx - 30rpx +- 卡片间距:15rpx - 20rpx +- 字号:24rpx - 36rpx + +### 交互设计 +- 选项卡切换(活动状态红色背景) +- 卡片点击效果 +- 状态标识色彩区分 +- 空状态提示 + +--- + +## 🔗 页面路由配置 + +已在 `pages.json` 中添加所有页面配置: + +```json +{ + "path": "pages/event-info/event-info", + "style": { "navigationBarTitleText": "信息发布" } +} +// ... 其他7个页面配置 +``` + +## 📱 使用方式 + +在赛事详情页面点击对应功能图标即可跳转: + +- 📄 信息发布 → event-info +- 📋 赛事规程 → event-rules +- 📅 活动日程 → event-schedule +- 👥 参赛选手 → event-players +- 📹 比赛实况 → event-live +- 📝 出场顺序 → event-lineup +- 📊 成绩 → event-score +- 🏆 奖牌榜 → event-medals +- 🖼 图片直播 → 暂未实现 + +--- + +## 💡 后续扩展建议 + +1. **数据接口对接** + - 所有页面目前使用静态数据 + - 需要对接后端API获取真实数据 + +2. **图片直播功能** + - 可参考比赛实况页面 + - 重点展示图片瀑布流 + +3. **实时更新** + - 比赛实况、成绩等页面添加自动刷新 + - WebSocket推送实时数据 + +4. **详情页** + - 信息发布点击查看详情 + - 选手信息点击查看详细资料 + +5. **筛选和搜索** + - 参赛选手搜索功能实现 + - 成绩按时间/项目筛选