让凭证数组与套餐作废任务进入可联调状态
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 7m52s

Constraint: 后端订单套餐作废接口使用 /api/admin/order-package-invalidate-tasks,上传
  purpose 只能使用 attachment。
  Rejected: 继续提交逗号拼接凭证字符串 | 新提交路径必须使用 string[],历史字符串只做读取归一化。
  Confidence: high
  Scope-risk: broad
  Directive: 新增订单套餐作废权限时需同时配置菜单 URL 与
  order_package_invalidate_task:create/detail 按钮权限。
  Tested: bun run build;development 真实后端联调上传、创建、列表、详情通过;复机接口未触发。
  Not-tested: 未逐一手工覆盖所有历史凭证数据、全部角色权限组合和所有文件扩展名预览
This commit is contained in:
2026-06-23 09:50:12 +08:00
parent ebf9739f06
commit 0c3065f970
71 changed files with 4264 additions and 240 deletions

View File

@@ -31,7 +31,8 @@ export interface AgentRecharge {
payment_channel: AgentRechargePaymentChannel
payment_config_id: number | null
payment_transaction_id: string
payment_voucher_key?: string // 凭证 file_key仅 offline 支付时有值)
payment_voucher_key?: string[] | string // 凭证附件列表;历史数据可能为单字符串或逗号字符串
remark?: string // 运营备注
created_at: string
paid_at: string | null
completed_at: string | null
@@ -63,7 +64,8 @@ export interface CreateAgentRechargeRequest {
amount: number // 充值金额(单位:分),最小 1即 ¥0.01
payment_method: AgentRechargePaymentMethod
shop_id: number
payment_voucher_key?: string // 线下支付凭证payment_method=offline 时必填)
payment_voucher_key?: string[] // 线下支付凭证附件列表payment_method=offline 时必填)
remark?: string // 运营备注,最多 1000 字
}
// 确认线下充值请求

View File

@@ -39,6 +39,8 @@ export interface UserInfo {
enterprise_name?: string // 企业名称(可选)
shop_id?: number // 店铺ID可选
shop_name?: string // 店铺名称(可选)
roles?: string[]
permissions?: string[]
}
// 获取用户信息响应数据 (GET /api/admin/me)

View File

@@ -296,6 +296,7 @@ export interface IotCardImportTask {
carrier_name: string // 运营商名称
file_name: string // 文件名
file_key?: string // 原始导入文件存储键
creator_name?: string // 创建人姓名
card_category?: CardCategory // 卡业务类型
status: IotCardImportTaskStatus // 任务状态
status_text: string // 任务状态文本
@@ -343,6 +344,7 @@ export enum StandaloneCardStatus {
// 单卡查询参数
export interface StandaloneCardQueryParams extends PaginationParams {
keyword?: string // 通用关键字搜索
has_active_package?: boolean // has active package filter
carrier_name?: string // carrier name filter
is_standalone?: boolean // standalone filter

View File

@@ -14,6 +14,8 @@ export interface BaseResponse<T = any> {
export interface PaginationParams {
page?: number
page_size?: number
current?: number
size?: number
}
// 分页响应数据

View File

@@ -217,6 +217,7 @@ export interface DeviceImportTask {
batch_no: string // 批次号
file_name: string // 文件名
file_key?: string // 原始导入文件存储键
creator_name?: string // 创建人姓名
status: DeviceImportTaskStatus // 任务状态
status_text: string // 任务状态文本
total_count: number // 总数
@@ -309,6 +310,7 @@ export interface SwitchCardRequest {
// 设置WiFi请求参数
export interface SetWiFiRequest {
card_no?: string // 设备资产标识
enabled: boolean // 启用状态
ssid: string // WiFi 名称1-32字符
password: string // WiFi 密码8-63字符

View File

@@ -33,6 +33,7 @@ export interface EnterprisePageResult {
// 查询企业客户列表参数
export interface EnterpriseQueryParams {
id?: number
page?: number
page_size?: number
enterprise_name?: string

View File

@@ -4,6 +4,7 @@
// 通用类型
export * from './common'
export * from './request'
// 认证相关
export * from './auth'
@@ -90,7 +91,16 @@ export * from './alert'
export * from './pollingConcurrency'
// 轮询配置管理相关
export * from './pollingConfig'
export type {
CardCategory as PollingCardCategory,
CardCondition,
PollingConfig,
PollingConfigQueryParams,
PollingConfigListResponse,
CreatePollingConfigRequest,
UpdatePollingConfigRequest,
UpdatePollingConfigStatusRequest
} from './pollingConfig'
// 手动触发相关
export * from './manualTrigger'
@@ -100,3 +110,6 @@ export * from './pollingMonitor'
// 导出任务相关
export * from './exportTask'
// 订单套餐批量作废任务相关
export * from './orderPackageInvalidateTask'

View File

@@ -83,7 +83,7 @@ export interface Order {
seller_shop_id?: number | null // 销售店铺ID
seller_shop_name?: string // 销售店铺名称
items: OrderItem[] | null
payment_voucher_key?: string // 支付凭证(线下支付时才有值)
payment_voucher_key?: string[] | string // 支付凭证附件列表;历史数据可能为单字符串或逗号字符串
created_at: string
updated_at: string
}
@@ -123,7 +123,7 @@ export interface CreateOrderRequest {
identifier?: string // 资产标识符ICCID 或 VirtualNo
package_ids: number[] // 套餐ID列表前端限制单选,后端支持1-10个
payment_method: OrderPaymentMethod // 支付方式
payment_voucher_key?: string // 线下支付凭证(仅 offline 必填)
payment_voucher_key?: string[] // 线下支付凭证附件列表(仅 offline 必填)
}
// 创建订单响应 (返回订单详情)

View File

@@ -0,0 +1,64 @@
import type { BaseResponse, PaginationParams } from './common'
export enum OrderPackageInvalidateTaskStatus {
PENDING = 1,
PROCESSING = 2,
COMPLETED = 3,
FAILED = 4
}
export interface OrderPackageInvalidateTaskQueryParams extends PaginationParams {
status?: OrderPackageInvalidateTaskStatus
}
export interface OrderPackageInvalidateFailedItem {
line: number
order_no: string
reason: string
}
export interface OrderPackageInvalidateTask {
id: number
task_no: string
status: OrderPackageInvalidateTaskStatus
status_text?: string
status_name?: string
total_count: number
success_count: number
fail_count: number
skip_count?: number
file_name: string
file_key?: string
voucher_keys?: string[]
remark?: string
creator_name?: string
error_message?: string
created_at: string
started_at?: string | null
completed_at?: string | null
}
export interface OrderPackageInvalidateTaskDetail extends OrderPackageInvalidateTask {
failed_items?: OrderPackageInvalidateFailedItem[] | null
}
export interface OrderPackageInvalidateTaskListResponse {
items: OrderPackageInvalidateTask[]
page: number
page_size: number
total: number
total_pages?: number
}
export interface CreateOrderPackageInvalidateTaskRequest {
file_key: string
file_name: string
voucher_keys?: string[]
remark?: string
}
export type OrderPackageInvalidateTaskListApiResponse =
BaseResponse<OrderPackageInvalidateTaskListResponse>
export type OrderPackageInvalidateTaskDetailApiResponse =
BaseResponse<OrderPackageInvalidateTaskDetail>
export type CreateOrderPackageInvalidateTaskApiResponse = BaseResponse<OrderPackageInvalidateTask>

View File

@@ -26,7 +26,7 @@ export interface Refund {
actual_received_amount?: number | null // 实收金额(分)
status: RefundStatus
refund_reason: string
refund_voucher_key?: string // 退款凭证 file_key多个以英文逗号分隔
refund_voucher_key?: string[] | string // 退款凭证附件列表;历史数据可能为单字符串或逗号字符串
reject_reason: string
remark: string
asset_reset: boolean
@@ -64,7 +64,7 @@ export interface CreateRefundRequest {
order_id: number
requested_refund_amount: number // 申请退款金额(分)
actual_received_amount: number // 实收金额(分)
refund_voucher_key: string // 退款凭证对象存储 file_key多个以英文逗号分隔
refund_voucher_key: string[] // 退款凭证附件列表
refund_reason?: string
}
@@ -83,6 +83,7 @@ export interface RejectRefundRequest {
export interface ResubmitRefundRequest {
requested_refund_amount?: number
actual_received_amount?: number
refund_voucher_key?: string[]
refund_reason?: string
}

View File

@@ -25,6 +25,7 @@ export interface ShopResponse {
// 店铺列表查询参数
export interface ShopQueryParams extends PaginationParams {
id?: number // 店铺ID
shop_name?: string // 店铺名称模糊查询
shop_code?: string // 店铺编号模糊查询
parent_shop_name?: string // 上级店铺名称模糊查询

View File

@@ -2,6 +2,18 @@
export * from './api'
export * from './common'
export * from './component'
export * from './store'
export type {
UserInfo as StoreUserInfo,
SystemThemeType,
SystemThemeTypes,
MenuThemeType,
SettingState,
WorkTab,
UserState,
SettingStoreState,
WorkTabState,
MenuState,
RootState
} from './store'
export * from './router'
export * from './config'