From 7e05f5e76f8fe19f79825a5d3ce92e9c63128ce9 Mon Sep 17 00:00:00 2001 From: molong Date: Sun, 18 Jan 2026 19:00:13 +0800 Subject: [PATCH] =?UTF-8?q?ui=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/Account/app/Controllers/.gitkeep | 0 .../app/Controllers/AccountController.php | 73 ++ modules/Account/app/Models/.gitkeep | 0 modules/Account/app/Providers/.gitkeep | 0 .../app/Providers/AccountServiceProvider.php | 120 ++++ .../app/Providers/EventServiceProvider.php | 38 + .../app/Providers/RouteServiceProvider.php | 67 ++ modules/Account/app/Services/.gitkeep | 0 modules/Account/composer.json | 30 + modules/Account/config/.gitkeep | 0 modules/Account/config/config.php | 5 + modules/Account/database/factories/.gitkeep | 0 modules/Account/database/migrations/.gitkeep | 0 modules/Account/database/seeders/.gitkeep | 0 .../seeders/AccountDatabaseSeeder.php | 22 + modules/Account/module.json | 11 + modules/Account/routes/.gitkeep | 0 modules/Account/routes/admin.php | 14 + modules/Account/routes/api.php | 14 + modules/Account/routes/web.php | 14 + resources/mobile/README.md | 205 ++++++ resources/mobile/api/modules/bill.js | 44 ++ resources/mobile/api/modules/family.js | 76 ++ resources/mobile/api/modules/statistics.js | 44 ++ resources/mobile/pages.json | 12 + resources/mobile/pages/account/bill/add.vue | 378 ++++++++++ resources/mobile/pages/account/bill/index.vue | 378 +++++++++- .../mobile/pages/account/statistics/index.vue | 534 +++++++++++++- resources/mobile/pages/family/create.vue | 182 +++++ resources/mobile/pages/family/index.vue | 588 ++++++++++++++++ resources/mobile/pages/family/join.vue | 180 +++++ resources/mobile/pages/index/index.vue | 658 ++++++++++++++++-- .../mobile/pages/ucenter/index/index.vue | 563 +++++++++++++-- resources/mobile/store/modules/family.js | 95 +++ 34 files changed, 4200 insertions(+), 145 deletions(-) create mode 100644 modules/Account/app/Controllers/.gitkeep create mode 100644 modules/Account/app/Controllers/AccountController.php create mode 100644 modules/Account/app/Models/.gitkeep create mode 100644 modules/Account/app/Providers/.gitkeep create mode 100644 modules/Account/app/Providers/AccountServiceProvider.php create mode 100644 modules/Account/app/Providers/EventServiceProvider.php create mode 100644 modules/Account/app/Providers/RouteServiceProvider.php create mode 100644 modules/Account/app/Services/.gitkeep create mode 100644 modules/Account/composer.json create mode 100644 modules/Account/config/.gitkeep create mode 100644 modules/Account/config/config.php create mode 100644 modules/Account/database/factories/.gitkeep create mode 100644 modules/Account/database/migrations/.gitkeep create mode 100644 modules/Account/database/seeders/.gitkeep create mode 100644 modules/Account/database/seeders/AccountDatabaseSeeder.php create mode 100644 modules/Account/module.json create mode 100644 modules/Account/routes/.gitkeep create mode 100644 modules/Account/routes/admin.php create mode 100644 modules/Account/routes/api.php create mode 100644 modules/Account/routes/web.php create mode 100644 resources/mobile/README.md create mode 100644 resources/mobile/api/modules/bill.js create mode 100644 resources/mobile/api/modules/family.js create mode 100644 resources/mobile/api/modules/statistics.js create mode 100644 resources/mobile/pages/account/bill/add.vue create mode 100644 resources/mobile/pages/family/create.vue create mode 100644 resources/mobile/pages/family/index.vue create mode 100644 resources/mobile/pages/family/join.vue create mode 100644 resources/mobile/store/modules/family.js diff --git a/modules/Account/app/Controllers/.gitkeep b/modules/Account/app/Controllers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/app/Controllers/AccountController.php b/modules/Account/app/Controllers/AccountController.php new file mode 100644 index 0000000..a5d3ebc --- /dev/null +++ b/modules/Account/app/Controllers/AccountController.php @@ -0,0 +1,73 @@ + +// +---------------------------------------------------------------------- +namespace Modules\Account\Controllers; + +use App\Http\Controllers\Controller; +use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Http\Response; + +class AccountController extends Controller +{ + /** + * Display a listing of the resource. + */ + public function index() + { + return view('account::index'); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + return view('account::create'); + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request): RedirectResponse + { + // + } + + /** + * Show the specified resource. + */ + public function show($id) + { + return view('account::show'); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit($id) + { + return view('account::edit'); + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, $id): RedirectResponse + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy($id) + { + // + } +} diff --git a/modules/Account/app/Models/.gitkeep b/modules/Account/app/Models/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/app/Providers/.gitkeep b/modules/Account/app/Providers/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/app/Providers/AccountServiceProvider.php b/modules/Account/app/Providers/AccountServiceProvider.php new file mode 100644 index 0000000..60712e1 --- /dev/null +++ b/modules/Account/app/Providers/AccountServiceProvider.php @@ -0,0 +1,120 @@ +registerCommands(); + $this->registerCommandSchedules(); + $this->registerTranslations(); + $this->registerConfig(); + $this->registerViews(); + $this->loadMigrationsFrom(module_path($this->moduleName, 'database/migrations')); + } + + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + $this->app->register(RouteServiceProvider::class); + } + + /** + * Register commands in the format of Command::class + */ + protected function registerCommands(): void + { + // $this->commands([]); + } + + /** + * Register command Schedules. + */ + protected function registerCommandSchedules(): void + { + // $this->app->booted(function () { + // $schedule = $this->app->make(Schedule::class); + // $schedule->command('inspire')->hourly(); + // }); + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->moduleNameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->moduleNameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(module_path($this->moduleName, 'lang'), $this->moduleNameLower); + $this->loadJsonTranslationsFrom(module_path($this->moduleName, 'lang')); + } + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $this->publishes([module_path($this->moduleName, 'config/config.php') => config_path($this->moduleNameLower.'.php')], 'config'); + $this->mergeConfigFrom(module_path($this->moduleName, 'config/config.php'), $this->moduleNameLower); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/modules/'.$this->moduleNameLower); + $sourcePath = module_path($this->moduleName, 'resources/views'); + + $this->publishes([$sourcePath => $viewPath], ['views', $this->moduleNameLower.'-module-views']); + + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); + + $componentNamespace = str_replace('/', '\\', config('modules.namespace').'\\'.$this->moduleName.'\\'.ltrim(config('modules.paths.generator.component-class.path'), config('modules.paths.app_folder', ''))); + Blade::componentNamespace($componentNamespace, $this->moduleNameLower); + } + + /** + * Get the services provided by the provider. + * + * @return array + */ + public function provides(): array + { + return []; + } + + /** + * @return array + */ + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/modules/'.$this->moduleNameLower)) { + $paths[] = $path.'/modules/'.$this->moduleNameLower; + } + } + + return $paths; + } +} diff --git a/modules/Account/app/Providers/EventServiceProvider.php b/modules/Account/app/Providers/EventServiceProvider.php new file mode 100644 index 0000000..16d26c8 --- /dev/null +++ b/modules/Account/app/Providers/EventServiceProvider.php @@ -0,0 +1,38 @@ + +// +---------------------------------------------------------------------- +namespace Modules\Account\Providers; + +use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; + +class EventServiceProvider extends ServiceProvider +{ + /** + * The event handler mappings for the application. + * + * @var array> + */ + protected $listen = []; + + /** + * Indicates if events should be discovered. + * + * @var bool + */ + protected static $shouldDiscoverEvents = true; + + /** + * Configure the proper event listeners for email verification. + * + * @return void + */ + protected function configureEmailVerification(): void + { + + } +} diff --git a/modules/Account/app/Providers/RouteServiceProvider.php b/modules/Account/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..1a7ce5d --- /dev/null +++ b/modules/Account/app/Providers/RouteServiceProvider.php @@ -0,0 +1,67 @@ + +// +---------------------------------------------------------------------- +namespace Modules\Account\Providers; + +use Illuminate\Support\Facades\Route; +use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; + +class RouteServiceProvider extends ServiceProvider +{ + /** + * Called before routes are registered. + * + * Register any model bindings or pattern based filters. + */ + public function boot(): void + { + parent::boot(); + } + + /** + * Define the routes for the application. + */ + public function map(): void + { + $this->mapApiRoutes(); + + $this->mapWebRoutes(); + + $this->mapAdminRoutes(); + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + */ + protected function mapWebRoutes(): void + { + Route::middleware('web')->group(module_path('Account', '/routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapApiRoutes(): void + { + Route::middleware('api')->prefix('api')->name('api.')->group(module_path('Account', '/routes/api.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + */ + protected function mapAdminRoutes(): void + { + Route::middleware('api')->prefix('admin')->name('admin.')->group(module_path('Account', '/routes/admin.php')); + } +} diff --git a/modules/Account/app/Services/.gitkeep b/modules/Account/app/Services/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/composer.json b/modules/Account/composer.json new file mode 100644 index 0000000..266a64f --- /dev/null +++ b/modules/Account/composer.json @@ -0,0 +1,30 @@ +{ + "name": "tensent/account", + "description": "", + "authors": [ + { + "name": "molong", + "email": "molong@tensent.cn" + } + ], + "extra": { + "laravel": { + "providers": [], + "aliases": { + + } + } + }, + "autoload": { + "psr-4": { + "Modules\\Account\\": "app/", + "Modules\\Account\\Database\\Factories\\": "database/factories/", + "Modules\\Account\\Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Modules\\Account\\Tests\\": "tests/" + } + } +} diff --git a/modules/Account/config/.gitkeep b/modules/Account/config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/config/config.php b/modules/Account/config/config.php new file mode 100644 index 0000000..e1c2a58 --- /dev/null +++ b/modules/Account/config/config.php @@ -0,0 +1,5 @@ + 'Account', +]; diff --git a/modules/Account/database/factories/.gitkeep b/modules/Account/database/factories/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/database/migrations/.gitkeep b/modules/Account/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/database/seeders/.gitkeep b/modules/Account/database/seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/database/seeders/AccountDatabaseSeeder.php b/modules/Account/database/seeders/AccountDatabaseSeeder.php new file mode 100644 index 0000000..3f04079 --- /dev/null +++ b/modules/Account/database/seeders/AccountDatabaseSeeder.php @@ -0,0 +1,22 @@ + +// +---------------------------------------------------------------------- +namespace Modules\Account\Database\Seeders; + +use Illuminate\Database\Seeder; + +class AccountDatabaseSeeder extends Seeder +{ + /** + * Run the database seeds. + */ + public function run(): void + { + // $this->call([]); + } +} diff --git a/modules/Account/module.json b/modules/Account/module.json new file mode 100644 index 0000000..a26d58b --- /dev/null +++ b/modules/Account/module.json @@ -0,0 +1,11 @@ +{ + "name": "Account", + "alias": "account", + "description": "", + "keywords": [], + "priority": 0, + "providers": [ + "Modules\\Account\\Providers\\AccountServiceProvider" + ], + "files": [] +} diff --git a/modules/Account/routes/.gitkeep b/modules/Account/routes/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/modules/Account/routes/admin.php b/modules/Account/routes/admin.php new file mode 100644 index 0000000..45b19aa --- /dev/null +++ b/modules/Account/routes/admin.php @@ -0,0 +1,14 @@ + +// +---------------------------------------------------------------------- +use Illuminate\Support\Facades\Route; +use Modules\Account\Controllers\AccountController; + +Route::middleware(['auth.check:admin'])->group(function () { + Route::apiResource('account', AccountController::class)->names('account'); +}); diff --git a/modules/Account/routes/api.php b/modules/Account/routes/api.php new file mode 100644 index 0000000..3ef7ea3 --- /dev/null +++ b/modules/Account/routes/api.php @@ -0,0 +1,14 @@ + +// +---------------------------------------------------------------------- +use Illuminate\Support\Facades\Route; +use Modules\Account\Controllers\AccountController; + +Route::middleware(['auth.check:api'])->group(function () { + Route::apiResource('account', AccountController::class)->names('account'); +}); diff --git a/modules/Account/routes/web.php b/modules/Account/routes/web.php new file mode 100644 index 0000000..8235d04 --- /dev/null +++ b/modules/Account/routes/web.php @@ -0,0 +1,14 @@ + +// +---------------------------------------------------------------------- +use Illuminate\Support\Facades\Route; +use Modules\Account\Controllers\AccountController; + +Route::group([], function () { + Route::resource('account', AccountController::class)->names('account'); +}); diff --git a/resources/mobile/README.md b/resources/mobile/README.md new file mode 100644 index 0000000..775a1f2 --- /dev/null +++ b/resources/mobile/README.md @@ -0,0 +1,205 @@ +# 家庭记账APP - 前端开发文档 + +## 项目概述 + +这是一个基于 uni-app 框架开发的跨平台家庭记账应用前端,支持个人记账和家庭共享记账功能。 + +## 已实现功能 + +### 1. 账单管理 +- ✅ 添加账单(收入/支出) +- ✅ 账单列表(按日期分组显示) +- ✅ 月份切换查看 +- ✅ 本月收支统计 +- ✅ 多种分类(餐饮、交通、购物、娱乐等) +- ✅ 支持备注和日期选择 + +### 2. 家庭管理 +- ✅ 创建家庭 +- ✅ 加入家庭(通过邀请码) +- ✅ 查看家庭信息 +- ✅ 查看家庭成员列表 +- ✅ 家主功能: + - 生成/重新生成邀请码 + - 复制邀请码 + - 移除家庭成员 +- ✅ 退出家庭 +- ⏳ 转让家主(待实现) + +### 3. 统计分析 +- ✅ 收支概览(收入、支出、结余) +- ✅ 月份切换 +- ✅ 支出分类统计(带进度条和百分比) +- ✅ 收支趋势图(最近7天) +- ✅ 可视化图表展示 + +### 4. 用户中心 +- ✅ 登录/注册 +- ✅ 个人信息管理 +- ✅ 用户协议和隐私政策 + +## 技术栈 + +- **框架**: uni-app (Vue 3) +- **状态管理**: Vuex +- **UI组件**: uni-ui +- **HTTP请求**: luch-request +- **样式**: SCSS + +## 项目结构 + +``` +resources/mobile/ +├── api/ # API接口模块 +│ ├── index.js # API自动导入 +│ └── modules/ +│ ├── auth.js # 认证相关API +│ ├── bill.js # 账单相关API +│ ├── family.js # 家庭管理API +│ ├── sms.js # 短信相关API +│ └── statistics.js # 统计分析API +├── components/ # 公共组件 +│ ├── pages/ # 页面组件 +│ └── tab-bar/ # 底部导航栏 +├── config/ # 配置文件 +├── mixins/ # 混入 +│ └── auth.js # 登录验证混入 +├── pages/ # 页面 +│ ├── index/ # 首页 +│ ├── account/ # 账单管理 +│ │ ├── bill/ # 账单页面 +│ │ │ ├── add.vue # 添加账单 +│ │ │ └── index.vue # 账单列表 +│ │ └── statistics/ # 统计分析 +│ │ └── index.vue # 统计页面 +│ ├── family/ # 家庭管理 +│ │ ├── index.vue # 家庭主页 +│ │ ├── create.vue # 创建家庭 +│ │ └── join.vue # 加入家庭 +│ └── ucenter/ # 用户中心 +│ ├── index.vue # 个人中心 +│ ├── login/ # 登录 +│ └── register/ # 注册 +├── static/ # 静态资源 +├── store/ # Vuex状态管理 +│ ├── index.js # Store自动导入 +│ └── modules/ +│ ├── user.js # 用户状态 +│ └── family.js # 家庭状态 +└── utils/ # 工具函数 + ├── auth.js # 认证工具 + ├── request.js # HTTP请求封装 + └── tool.js # 通用工具 +``` + +## API接口说明 + +### 账单API (`/api/bill/*`) +- `GET /api/bill/list` - 获取账单列表 +- `POST /api/bill/add` - 添加账单 +- `POST /api/bill/edit` - 编辑账单 +- `POST /api/bill/delete` - 删除账单 +- `GET /api/bill/detail` - 获取账单详情 + +### 家庭API (`/api/family/*`) +- `GET /api/family/info` - 获取家庭信息 +- `POST /api/family/create` - 创建家庭 +- `POST /api/family/join` - 加入家庭 +- `POST /api/family/leave` - 退出家庭 +- `GET /api/family/invite-code` - 获取邀请码 +- `POST /api/family/regenerate-invite-code` - 重新生成邀请码 +- `POST /api/family/remove-member` - 移除家庭成员 +- `GET /api/family/members` - 获取家庭成员列表 +- `POST /api/family/transfer-owner` - 转让家主 + +### 统计API (`/api/statistics/*`) +- `GET /api/statistics/overview` - 获取统计概览 +- `GET /api/statistics/trend` - 获取收支趋势 +- `GET /api/statistics/category` - 获取分类统计 +- `GET /api/statistics/monthly` - 获取月度报表 +- `GET /api/statistics/yearly` - 获取年度报表 + +## 功能特点 + +### 1. 家庭管理 +- 一个人只能创建或加入一个家庭 +- 家主可以管理家庭成员(添加、移除) +- 家主可以生成邀请码邀请成员 +- 支持转让家主功能 + +### 2. 账单分类 +- 支出分类:餐饮、交通、购物、娱乐、医疗、教育、居住、其他 +- 收入分类:工资、奖金、投资、兼职、其他 +- 每个分类都有独立的图标和颜色 + +### 3. 数据可视化 +- 支出分类统计使用进度条展示占比 +- 收支趋势使用柱状图展示最近7天数据 +- 支持月份切换查看不同时间段的数据 + +### 4. 用户体验 +- 渐变色主题设计 +- 流畅的动画效果 +- 下拉刷新支持 +- 加载状态提示 +- 空数据友好提示 + +## 开发说明 + +### 环境要求 +- Node.js >= 14 +- HBuilderX 或 VS Code +- uni-app CLI + +### 安装依赖 +```bash +cd resources/mobile +yarn install +``` + +### 运行项目 +- 使用 HBuilderX 运行到不同平台 +- 或使用 CLI 命令:`npm run dev:mp-weixin` (微信小程序) + +### 构建项目 +```bash +npm run build:mp-weixin +``` + +## 注意事项 + +1. **API接口**: 需要后端提供对应的接口支持,返回格式统一为: +```json +{ + "code": 200, + "message": "success", + "data": {} +} +``` + +2. **Token认证**: 所有需要登录的接口都需要在请求头中携带Token: +``` +Authorization: Bearer {token} +``` + +3. **家庭限制**: 用户只能加入一个家庭,后端需要验证此限制 + +4. **邀请码**: 邀请码建议使用10位随机字符串,确保唯一性 + +5. **日期格式**: 统一使用 `YYYY-MM-DD` 格式 + +## 待优化功能 + +1. 账单编辑功能 +2. 转让家主功能 +3. 账单搜索和筛选 +4. 导出数据功能 +5. 预算管理 +6. 账单提醒功能 +7. 更多的统计图表(饼图、折线图等) + +## 作者 +molong + +## 许可证 +MIT diff --git a/resources/mobile/api/modules/bill.js b/resources/mobile/api/modules/bill.js new file mode 100644 index 0000000..12b92ef --- /dev/null +++ b/resources/mobile/api/modules/bill.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +export default { + // 账单列表 + list: { + url: '/api/account/bill/list', + name: '账单列表', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 添加账单 + add: { + url: '/api/account/bill/add', + name: '添加账单', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 编辑账单 + edit: { + url: '/api/account/bill/edit', + name: '编辑账单', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 删除账单 + delete: { + url: '/api/account/bill/delete', + name: '删除账单', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 账单详情 + detail: { + url: '/api/account/bill/detail', + name: '账单详情', + get: async function(params) { + return request.get(this.url, {params: params}) + } + } +} diff --git a/resources/mobile/api/modules/family.js b/resources/mobile/api/modules/family.js new file mode 100644 index 0000000..d0576c9 --- /dev/null +++ b/resources/mobile/api/modules/family.js @@ -0,0 +1,76 @@ +import request from '@/utils/request' + +export default { + // 获取家庭信息 + info: { + url: '/api/account/family/info', + name: '家庭信息', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 创建家庭 + create: { + url: '/api/account/family/create', + name: '创建家庭', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 加入家庭 + join: { + url: '/api/account/family/join', + name: '加入家庭', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 退出家庭 + leave: { + url: '/api/account/family/leave', + name: '退出家庭', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 获取家庭邀请码 + inviteCode: { + url: '/api/account/family/invite-code', + name: '家庭邀请码', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 重新生成邀请码 + regenerateInviteCode: { + url: '/api/account/family/regenerate-invite-code', + name: '重新生成邀请码', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 移除家庭成员 + removeMember: { + url: '/api/account/family/remove-member', + name: '移除家庭成员', + post: async function(params) { + return request.post(this.url, params) + } + }, + // 获取家庭成员列表 + members: { + url: '/api/account/family/members', + name: '家庭成员列表', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 转让家主 + transferOwner: { + url: '/api/account/family/transfer-owner', + name: '转让家主', + post: async function(params) { + return request.post(this.url, params) + } + } +} diff --git a/resources/mobile/api/modules/statistics.js b/resources/mobile/api/modules/statistics.js new file mode 100644 index 0000000..d6bf267 --- /dev/null +++ b/resources/mobile/api/modules/statistics.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +export default { + // 获取统计概览 + overview: { + url: '/api/account/statistics/overview', + name: '统计概览', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 获取收支趋势 + trend: { + url: '/api/account/statistics/trend', + name: '收支趋势', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 获取分类统计 + category: { + url: '/api/account/statistics/category', + name: '分类统计', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 获取月度报表 + monthly: { + url: '/api/account/statistics/monthly', + name: '月度报表', + get: async function(params) { + return request.get(this.url, {params: params}) + } + }, + // 获取年度报表 + yearly: { + url: '/api/account/statistics/yearly', + name: '年度报表', + get: async function(params) { + return request.get(this.url, {params: params}) + } + } +} diff --git a/resources/mobile/pages.json b/resources/mobile/pages.json index 62c863f..b11b97c 100644 --- a/resources/mobile/pages.json +++ b/resources/mobile/pages.json @@ -6,9 +6,21 @@ { "path": "pages/account/bill/index" }, + { + "path": "pages/account/bill/add" + }, { "path": "pages/account/statistics/index" }, + { + "path": "pages/family/index" + }, + { + "path": "pages/family/create" + }, + { + "path": "pages/family/join" + }, { "path": "pages/ucenter/index/index" }, diff --git a/resources/mobile/pages/account/bill/add.vue b/resources/mobile/pages/account/bill/add.vue new file mode 100644 index 0000000..31d2de2 --- /dev/null +++ b/resources/mobile/pages/account/bill/add.vue @@ -0,0 +1,378 @@ +