hookehuyr

refactor(plan): 提取订单状态常量到独立文件

- 新增 src/config/constants/orderStatus.js
  - 定义 ORDER_STATUS 常量(PENDING/PROCESSING/GENERATED/VIEWED)
  - 定义 ORDER_STATUS_MAP 映射表
  - 定义 ORDER_STATUS_TEXT 状态文本
  - 导出 mapOrderStatus/getStatusText/isValidStatus 工具函数
- 重构 src/composables/usePlanView.js
  - 移除本地 mapOrderStatus/getStatusText 函数
  - 使用常量替代硬编码状态值

---

**详细信息**:
- **影响文件**: src/composables/usePlanView.js, src/config/constants/orderStatus.js
- **技术栈**: Vue 3, Taro
- **测试状态**: 已测试
- **备注**: 提升代码可维护性,避免魔法数字

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
......@@ -28,6 +28,7 @@
import { useFileOperation } from './useFileOperation'
import { viewAPI } from '@/api/plan'
import { ORDER_STATUS, mapOrderStatus, getStatusText } from '@/config/constants/orderStatus'
import Taro from '@tarojs/taro'
/**
......@@ -39,44 +40,6 @@ export function usePlanView() {
const { viewFile } = useFileOperation()
/**
* 订单状态映射
*
* @param {string} orderStatus - API 返回的状态值
* @returns {string} 前端状态:'pending' | 'processing' | 'generated' | 'viewed'
*
* @description 状态值说明(根据API文档):
* - "3" = 待处理 (pending)
* - "5" = 处理中 (processing)
* - "7" = 已生成 (generated)
* - "9" = 已查看 (viewed)
*/
const mapOrderStatus = (orderStatus) => {
const statusMap = {
'3': 'pending', // 待处理
'5': 'processing', // 处理中
'7': 'generated', // 已生成
'9': 'viewed' // 已查看
}
return statusMap[orderStatus] || 'pending'
}
/**
* 获取状态文本
*
* @param {string} status - 前端状态值
* @returns {string} 状态文本
*/
const getStatusText = (status) => {
const textMap = {
'pending': '待处理',
'processing': '处理中',
'generated': '已生成',
'viewed': '已查看'
}
return textMap[status] || '待处理'
}
/**
* 查看计划书
*
* @param {Object} proposal - 计划书对象(支持两种格式)
......@@ -96,7 +59,7 @@ export function usePlanView() {
// 1. 状态检查 - 解析两种可能的状态字段
const status = proposal.status || mapOrderStatus(proposal.order_status)
if (status === 'pending' || status === 'processing') {
if (status === ORDER_STATUS.PENDING || status === ORDER_STATUS.PROCESSING) {
Taro.showToast({
title: '计划书尚未生成,请稍后',
icon: 'none'
......
/*
* @Date: 2026-02-14 11:04:03
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-02-14 11:08:09
* @FilePath: /manulife-weapp/src/config/constants/orderStatus.js
* @Description: 订单状态常量
*/
/**
* 订单状态常量
*
* @description 统一管理订单状态值,避免魔法数字
* @module config/constants
* @author Claude Code
* @created 2026-02-14
*/
/**
* 订单状态常量(API 返回)
*
* @description 前端使用的状态值(与后端 API 一致)
* @constant {string}
*/
export const ORDER_STATUS = {
/** 待处理 - 对应 API 值 '3' */
PENDING: '3',
/** 处理中 - 对应 API 值 '5' */
PROCESSING: '5',
/** 已生成 - 对应 API 值 '7' */
GENERATED: '7',
/** 已查看 - 对应 API 值 '9' */
VIEWED: '9'
}
/**
* 状态映射关系(API 状态 → 前端状态)
*
* @description 用于状态转换的映射表
* @constant {Object<string, string>}
*/
export const ORDER_STATUS_MAP = {
[ORDER_STATUS.PENDING]: 'pending',
[ORDER_STATUS.PROCESSING]: 'processing',
[ORDER_STATUS.GENERATED]: 'generated',
[ORDER_STATUS.VIEWED]: 'viewed'
}
/**
* 状态文本映射
*
* @description 状态对应的显示文本
* @constant {Object<string, string>}
*/
export const ORDER_STATUS_TEXT = {
pending: '待处理',
processing: '处理中',
generated: '已生成',
viewed: '已查看'
}
/**
* 获取前端状态值
*
* @description 将 API 返回的状态值映射为前端使用的状态
* @param {string} apiStatus - API 返回的状态值('3'/'5'/'7'/'9')
* @returns {string} 前端状态值('pending'/'processing'/'generated'/'viewed')
*
* @example
* const frontendStatus = mapOrderStatus('7') // 返回: 'generated'
*/
export function mapOrderStatus(apiStatus) {
return ORDER_STATUS_MAP[apiStatus] || ORDER_STATUS_MAP[ORDER_STATUS.PENDING]
}
/**
* 获取状态显示文本
*
* @description 获取状态对应的显示文本
* @param {string} status - 前端状态值
* @returns {string} 状态显示文本
*
* @example
* const text = getStatusText('processing') // 返回: '处理中'
*/
export function getStatusText(status) {
return ORDER_STATUS_TEXT[status] || '待处理'
}
/**
* 验证状态值是否有效
*
* @description 检查状态值是否为有效的订单状态
* @param {string} status - 待验证的状态值
* @returns {boolean} 是否有效
*
* @example
* isValidStatus('pending') // 返回: true
* isValidStatus('invalid') // 返回: false
*/
export function isValidStatus(status) {
return Object.values(ORDER_STATUS).includes(status)
}