longz
2026-05-28 23fe797f9dded6d7ec9ecbcf760f764374dea8e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
 * @Author: weisheng
 * @Date: 2023-05-20 10:00:00
 * @LastEditTime: 2025-05-21 15:46:14
 * @LastEditors: weisheng
 * @Description: Mock数据生成工具
 * @FilePath: /lsym-cx-mini/src/api/mock/utils/generators.ts
 */
 
// 模拟数据生成工具函数
export const generateMockData = {
  // 生成随机ID
  id: (): number => Math.floor(Math.random() * 10000),
 
  // 生成随机名称
  name: (prefix = '名称'): string => `${prefix}_${Math.floor(Math.random() * 1000)}`,
 
  // 生成随机代码
  code: (prefix = 'CODE'): string => `${prefix}_${Math.floor(Math.random() * 1000)}`,
 
  // 生成随机日期
  // 可以传入天数偏移,负数表示过去的日期,正数表示未来的日期
  date: (dayOffset = 0): string => {
    const date = new Date()
    if (dayOffset !== 0) {
      date.setDate(date.getDate() + dayOffset)
    }
    return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`
  },
 
  // 生成随机时间
  // 可以传入天数偏移,负数表示过去的日期,正数表示未来的日期
  datetime: (dayOffset = 0): string => {
    const date = new Date()
    if (dayOffset !== 0) {
      date.setDate(date.getDate() + dayOffset)
    }
    return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`
  },
 
  // 生成随机布尔值
  boolean: (): boolean => Math.random() > 0.5,
 
  // 生成随机数字
  number: (min = 0, max = 100): number => Math.floor(Math.random() * (max - min)) + min,
 
  // 生成随机数组
  array: <T>(generator: (index: number) => T, length = 10): T[] => {
    const result: T[] = []
    for (let i = 0; i < length; i++) {
      result.push(generator(i))
    }
    return result
  },
 
  // 生成基础响应对象
  baseResponse: <T>(data: T = null as unknown as T, code = 2000, msg = '操作成功') => ({
    code,
    data,
    msg,
  }),
 
  // 生成列表响应对象
  listResponse: <T>(data: T[] = [], total = data.length, more = false, code = 2000, msg = '操作成功') => ({
    code,
    data,
    total,
    more,
    msg,
  }),
 
  // 生成GCN对象
  gcn: (_index?: number) => ({
    gid: generateMockData.id(),
    code: generateMockData.code('ORG'),
    name: generateMockData.name('组织'),
  }),
 
  // 生成员工对象
  faEmp: (index: number) => ({
    gid: generateMockData.id(),
    code: generateMockData.code('EMP'),
    name: generateMockData.name('员工'),
    org: generateMockData.gcn(index),
  }),
 
  // 生成车销业务员对象
  vehSaleEmp: (index: number) => ({
    gid: generateMockData.id(),
    code: generateMockData.code('VSE'),
    name: generateMockData.name('车销业务员'),
    faEmp: generateMockData.faEmp(index),
    org: generateMockData.gcn(index),
    wms: generateMockData.gcn(index),
  }),
 
  // 生成权限对象
  permission: (index: number) => ({
    module: `module_${index}`,
    moduleName: `模块${index}`,
    roleId: `role_${index}`,
    state: 1,
  }),
 
  // 生成代码名称对象
  codeName: (index: number, prefix = '线路') => ({
    code: generateMockData.code(`LINE_${index}`),
    name: `${prefix}${index}`,
  }),
 
  // 生成用户对象
  user: (roleCode = '01') => ({
    permissions: generateMockData.array(generateMockData.permission, 5),
    sortLines: generateMockData.array(generateMockData.codeName, 3),
    token: `mock_token_${Date.now()}`,
    roleCode, // 添加roleCode字段:01-车销业务员,02-仓管
    vehSaleEmp: generateMockData.vehSaleEmp(0),
  }),
 
  // 生成商品对象
  goods: (index: number) => ({
    gid: generateMockData.id(),
    code: generateMockData.code('GOODS'),
    name: generateMockData.name('商品'),
    gdCode: generateMockData.code('GDCODE'),
    spec: `规格${index}`,
    munit: '个',
    price: generateMockData.number(1, 1000) / 100,
    qpc: generateMockData.number(1, 10),
    qpcStr: `${generateMockData.number(1, 10)}个/箱`,
    qty: generateMockData.number(1, 100),
    qtyStr: `${generateMockData.number(1, 100)}个`,
    busInvQty: generateMockData.number(1, 100),
    advUseSignQty: generateMockData.number(1, 100),
    version: 1,
  }),
  // 单据状态,可选值为:0 | 100 | 1300 | 300 | 110 | 1310
  stat: (): number => {
    const stats = [100, 1300, 300, 110, 1310]
    return stats[generateMockData.number(0, stats.length - 1)]
  },
}