# 收银系统后台管理功能完善实施计划
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers-subagent-driven-development (recommended) or superpowers-executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** 完善收银系统后台管理的前端页面功能,为所有列表页面添加新增/编辑表单弹窗,完善订单开台功能,优化营业报表展示
**Architecture:** 基于现有 admin-ui 框架和 RuiTable 组件,为每个收银模块创建 FormDialog 组件,遵循项目已有的组件模式和编码规范
**Tech Stack:** Vue 3 + TypeScript + Element Plus + Vite
---
## 文件结构
### 新增文件
- `src/views/cashier/store/StoreFormDialog.vue` - 门店表单弹窗
- `src/views/cashier/room/RoomFormDialog.vue` - 包间表单弹窗
- `src/views/cashier/product/ProductFormDialog.vue` - 商品表单弹窗
- `src/views/cashier/pricing/PricingStrategyFormDialog.vue` - 定价策略表单弹窗
- `src/views/cashier/pricing/PricingPackageDialog.vue` - 套餐管理弹窗
- `src/views/cashier/order/OpenRoomDialog.vue` - 开台弹窗
### 修改文件
- `src/views/cashier/store/Index.vue` - 集成门店表单弹窗
- `src/views/cashier/room/Index.vue` - 集成包间表单弹窗
- `src/views/cashier/product/Index.vue` - 集成商品表单弹窗
- `src/views/cashier/pricing/Index.vue` - 集成定价策略表单弹窗和套餐管理
- `src/views/cashier/order/Index.vue` - 集成开台弹窗
- `src/service/cashier/*Service.ts` - 补充缺失的方法
---
## 模块优先级
按业务依赖关系,实施顺序为:
1. 门店管理(最基础,其他模块依赖门店)
2. 商品管理
3. 包间管理(依赖门店和包间类型)
4. 定价策略(依赖包间类型)
5. 订单管理(依赖门店和包间)
6. 营业报表优化
---
## Task 1: 完善门店管理
**Files:**
- Create: `src/views/cashier/store/StoreFormDialog.vue`
- Modify: `src/views/cashier/store/Index.vue`
**Context:** 门店实体字段:name, address, phone, contactName, status, remark
### Step 1: 创建门店表单弹窗
Create `src/views/cashier/store/StoreFormDialog.vue`:
```vue
启用
禁用
取消
确定
```
### Step 2: 修改门店管理页面集成弹窗
Modify `src/views/cashier/store/Index.vue`:
Add imports:
```typescript
import StoreFormDialog from './StoreFormDialog.vue'
```
Add state:
```typescript
const dialogVisible = ref(false)
const currentRow = ref()
```
Replace handleAdd:
```typescript
function handleAdd() {
currentRow.value = undefined
dialogVisible.value = true
}
```
Replace handleEdit:
```typescript
function handleEdit(row: any) {
currentRow.value = row
dialogVisible.value = true
}
```
Add dialog component in template:
```vue
```
### Step 3: 验证
Run:
```bash
cd /Users/zhangsheng/rhkj/spring-ai/admin-ui
pnpm dev:cashier
```
Expected: 门店管理页面可以正常打开新增/编辑弹窗
### Step 4: Commit
```bash
git add src/views/cashier/store/
git commit -m "feat(cashier): 完善门店管理新增编辑功能"
```
---
## Task 2: 完善商品管理
**Files:**
- Create: `src/views/cashier/product/ProductFormDialog.vue`
- Modify: `src/views/cashier/product/Index.vue`
- Modify: `src/service/cashier/productService.ts`
**Context:** 商品实体字段:name, price, productType(1实物/2服务/3虚拟), category, unit, stock, status, description, storeId
### Step 1: 补充商品 Service 方法
Verify `src/service/cashier/productService.ts` has:
```typescript
import { BaseService } from '../BaseService'
class ProductService extends BaseService {
constructor() {
super('/cashier/admin/product')
}
}
export const productService = new ProductService()
```
### Step 2: 创建商品表单弹窗
Create `src/views/cashier/product/ProductFormDialog.vue`:
```vue
实物商品
服务商品
虚拟商品
启用
禁用
取消
确定
```
### Step 3: 修改商品管理页面
Similar to Task 1 Step 2, integrate ProductFormDialog into product/Index.vue
### Step 4: Commit
```bash
git add src/views/cashier/product/ src/service/cashier/productService.ts
git commit -m "feat(cashier): 完善商品管理新增编辑功能"
```
---
## Task 3: 完善包间管理
**Files:**
- Create: `src/views/cashier/room/RoomFormDialog.vue`
- Modify: `src/views/cashier/room/Index.vue`
**Context:** 包间实体字段:storeId, roomTypeId, name, roomNo, roomStatus, enabled, sort
需要获取门店列表和包间类型列表
### Step 1: 创建包间表单弹窗
Create `src/views/cashier/room/RoomFormDialog.vue`:
```vue
启用
禁用
取消
确定
```
### Step 2: 修改包间管理页面
Integrate RoomFormDialog into room/Index.vue (similar pattern)
### Step 3: Commit
```bash
git add src/views/cashier/room/
git commit -m "feat(cashier): 完善包间管理新增编辑功能"
```
---
## Task 4: 完善定价策略
**Files:**
- Create: `src/views/cashier/pricing/PricingStrategyFormDialog.vue`
- Create: `src/views/cashier/pricing/PricingPackageDialog.vue`
- Modify: `src/views/cashier/pricing/Index.vue`
**Context:** 定价策略实体:strategyName, roomTypeId, status
套餐实体:name, price, duration, durationUnit, description, strategyId, billingType, minDuration, restrictions, isDefault, sort, status
### Step 1: 创建定价策略表单弹窗
Create `src/views/cashier/pricing/PricingStrategyFormDialog.vue`:
```vue
启用
禁用
取消
确定
```
### Step 2: 创建套餐管理弹窗
Create `src/views/cashier/pricing/PricingPackageDialog.vue`:
```vue
新增套餐
¥{{ (row.price || 0).toFixed(2) }}
{{ row.duration }}{{ row.durationUnit === 'hour' ? '小时' : '天' }}
按时
按局
包时段
{{ row.status === 1 ? '启用' : '禁用' }}
编辑
删除
小时
天
按时计费
按局计费
包时段
是
否
启用
禁用
取消
确定
```
### Step 3: 补充 pricingService 方法
Modify `src/service/cashier/pricingService.ts`:
```typescript
import { BaseService } from '../BaseService'
import { request } from '@/utils/request'
class PricingService extends BaseService {
constructor() {
super('/cashier/admin/pricing-strategy')
}
async getPackages(strategyId: number) {
const res: any = await request({
url: '/cashier/admin/pricing-package/list',
method: 'get',
params: { strategyId },
})
return res.data || []
}
async addPackage(data: any) {
const res: any = await request({
url: '/cashier/admin/pricing-package',
method: 'post',
data,
})
return res.data
}
async updatePackage(data: any) {
const res: any = await request({
url: '/cashier/admin/pricing-package',
method: 'put',
data,
})
return res.data
}
async deletePackage(id: number) {
const res: any = await request({
url: `/cashier/admin/pricing-package/${id}`,
method: 'delete',
})
return res.data
}
}
export const pricingService = new PricingService()
```
### Step 4: 修改定价策略页面
Integrate both dialogs into pricing/Index.vue
### Step 5: Commit
```bash
git add src/views/cashier/pricing/ src/service/cashier/pricingService.ts
git commit -m "feat(cashier): 完善定价策略和套餐管理功能"
```
---
## Task 5: 完善订单管理(开台功能)
**Files:**
- Create: `src/views/cashier/order/OpenRoomDialog.vue`
- Modify: `src/views/cashier/order/Index.vue`
- Modify: `src/service/cashier/orderService.ts`
**Context:** 开台需要:门店ID、包间ID、顾客姓名、顾客电话、订单类型、备注
### Step 1: 补充 orderService 方法
Modify `src/service/cashier/orderService.ts`:
```typescript
import { BaseService } from '../BaseService'
import { request } from '@/utils/request'
class OrderService extends BaseService {
constructor() {
super('/cashier/admin/order')
}
async checkout(id: number) {
const res: any = await request({
url: `${this.baseUrl}/${id}/checkout`,
method: 'post',
})
return res.data
}
async refund(id: number, data: { amount: number; reason: string }) {
const res: any = await request({
url: `${this.baseUrl}/${id}/refund`,
method: 'post',
data,
})
return res.data
}
async openRoom(data: {
storeId: number
roomId: number
customerName?: string
customerPhone?: string
orderType?: number
remark?: string
}) {
const res: any = await request({
url: `${this.baseUrl}/open`,
method: 'post',
data,
})
return res.data
}
}
export const orderService = new OrderService()
```
### Step 2: 创建开台弹窗
Create `src/views/cashier/order/OpenRoomDialog.vue`:
```vue
正常订单
预订订单
取消
确认开台
```
### Step 3: 修改订单管理页面
Integrate OpenRoomDialog into order/Index.vue
### Step 4: Commit
```bash
git add src/views/cashier/order/ src/service/cashier/orderService.ts
git commit -m "feat(cashier): 完善订单管理开台功能"
```
---
## Task 6: 营业报表优化
**Files:**
- Modify: `src/views/cashier/report/Index.vue`
**Context:** 当前报表已展示日报数据和包间利用率,可以优化图表展示
### Step 1: 添加图表展示
Install echarts if not already installed:
```bash
cd /Users/zhangsheng/rhkj/spring-ai/admin-ui
pnpm add echarts vue-echarts
```
### Step 2: 优化报表页面
Add chart components for:
- 营业趋势图(折线图)
- 支付方式饼图
- 包间利用率柱状图
### Step 3: Commit
```bash
git add src/views/cashier/report/ package.json pnpm-lock.yaml
git commit -m "feat(cashier): 优化营业报表图表展示"
```
---
## Task 7: 验证和文档更新
**Files:**
- Modify: `docs/admin-ui-status.md`
### Step 1: 验证所有功能
Run:
```bash
cd /Users/zhangsheng/rhkj/spring-ai/admin-ui
pnpm build:cashier
```
Expected: 构建成功,无错误
### Step 2: 更新状态文档
Update `docs/admin-ui-status.md`:
```markdown
### 8. 收银系统模块
| 功能 | 页面 | 状态 | 说明 |
|------|------|------|------|
| 门店管理 | cashier/store/Index.vue | ✅ 完成 | 增删改查、状态切换 |
| 包间管理 | cashier/room/Index.vue | ✅ 完成 | 增删改查、状态切换 |
| 商品管理 | cashier/product/Index.vue | ✅ 完成 | 增删改查、状态切换 |
| 定价策略 | cashier/pricing/Index.vue | ✅ 完成 | 增删改查、套餐管理 |
| 订单管理 | cashier/order/Index.vue | ✅ 完成 | 开台、结账、退款、查询 |
| 营业报表 | cashier/report/Index.vue | ✅ 完成 | 日报、包间利用率、图表 |
```
### Step 3: Commit
```bash
git add docs/admin-ui-status.md
git commit -m "docs: 更新收银系统功能状态"
```
---
## 验证清单
- [ ] 门店管理:新增、编辑、删除、查询、状态切换正常
- [ ] 包间管理:新增、编辑、删除、查询、状态切换正常
- [ ] 商品管理:新增、编辑、删除、查询、状态切换正常
- [ ] 定价策略:新增、编辑、删除、查询、套餐管理正常
- [ ] 订单管理:开台、结账、退款、查询正常
- [ ] 营业报表:数据展示、图表正常
- [ ] 所有页面无编译错误
- [ ] 构建产物正常
---
## 风险与依赖
| 风险 | 影响 | 缓解措施 |
|------|------|---------|
| 后端 API 字段与前端不一致 | 高 | 开发时对比后端实体字段,确保一致 |
| 包间类型数据未对接 | 中 | 先使用 ID 输入,后续优化为下拉选择 |
| 图表库引入增加包体积 | 低 | 按需引入 echarts 组件 |
| 开台功能需要实时状态更新 | 中 | 开台成功后刷新列表 |
---
## 后续扩展
1. **包间类型管理** - 添加包间类型 CRUD 页面
2. **设备管理** - 添加门店设备管理页面
3. **会员管理** - 完善会员等级、积分管理
4. **库存管理** - 添加商品库存预警功能
5. **数据导出** - 为所有列表添加导出功能