liujie
8 小时以前 fddf3d913d47f391f84f9e460cb76d427ef02c44
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
// 会员模块的枚举与格式化。
//
// 这些枚举与后端「直接存值」的约定一一对应(见 hugray-server/sql/hugray_account_user_ext_20261012.sql
// 与 hugray_account_city_20261012.sql),刻意不建 sys_dict_type。
// 列表页与详情页共用此处定义,避免两处各写一份后改一处漏一处。
 
// 系统等级,从低到高
export const LEVELS = ['C', 'L1', 'L2', 'L3', 'L4']
 
// 主体类型
export const SUBJECT_TYPES = [
  { value: '1', label: '个人' },
  { value: '2', label: '个体工商户' },
  { value: '3', label: '企业' }
]
 
// 有效期类型(营业执照有效期与法人身份证有效期共用一套取值)
export const VALID_TYPES = [
  { value: '1', label: '长期' },
  { value: '2', label: '短期' }
]
 
// 认证状态
export const AUTH_STATUS = [
  { value: '0', label: '未认证' },
  { value: '1', label: '审核中' },
  { value: '2', label: '已认证' },
  { value: '3', label: '认证失败' }
]
 
// 认证申请审核状态(account_certification_apply.audit_status)
// 注意与上面的 AUTH_STATUS 区分:那个是会员的整体认证状态,这个是单次申请的审核结果。
export const AUDIT_STATUS = [
  { value: '0', label: '待审核' },
  { value: '1', label: '已通过' },
  { value: '2', label: '已驳回' }
]
 
// 账户状态(沿用 account_user.status,已由 2 值扩为 4 值,
// 故不能复用只有 0/1 的 sys_normal_disable 字典)
export const ACCOUNT_STATUS = [
  { value: '0', label: '正常' },
  { value: '1', label: '禁用' },
  { value: '2', label: '注销中' },
  { value: '3', label: '已注销' }
]
 
// 启用状态(0正常 1禁用)。
// 城市 account_city 与城市公司档案 account_city_company 的 status 用的就是这一对。
// 与 ACCOUNT_STATUS 的前两项取值相同但不从它切片派生:两者语义独立,
// 账户状态将来再扩值时不该顺带改动城市/档案的选项。
export const ENABLE_STATUS = [
  { value: '0', label: '正常' },
  { value: '1', label: '禁用' }
]
 
// 资格/条件的开关(0开启 1关闭),对应 account_level_config 的各开关列。
// 取值与 ENABLE_STATUS 同为 0/1,但文案与语义都不同(那边说「正常/禁用」是账户或主数据的状态,
// 这边说「开启/关闭」是某个等级有没有某项资格),因此不从它派生 —— 与 ACCOUNT_STATUS/ENABLE_STATUS
// 之间「语义独立就不切片」的取舍一致。
export const QUALIFY_STATUS = [
  { value: '0', label: '开启' },
  { value: '1', label: '关闭' }
]
 
// 性别沿用原生字典 sys_user_sex
export const SEX = [
  { value: '0', label: '男' },
  { value: '1', label: '女' },
  { value: '2', label: '未知' }
]
 
// 从 [{value,label}] 取展示文案,取不到统一显示 -
export function labelOf(options, value) {
  const hit = options.find(item => item.value === value)
  return hit ? hit.label : '-'
}
 
export function levelTagType(level) {
  return { C: 'info', L1: 'info', L2: 'success', L3: 'warning', L4: 'danger' }[level] || 'info'
}
 
export function authTagType(status) {
  return { 0: 'info', 1: 'warning', 2: 'success', 3: 'danger' }[status] || 'info'
}
 
export function statusTagType(status) {
  return { 0: 'success', 1: 'danger', 2: 'warning', 3: 'info' }[status] || 'info'
}
 
export function auditTagType(status) {
  return { 0: 'warning', 1: 'success', 2: 'danger' }[status] || 'info'
}
 
// 仅「正常」视为可用,注销中/已注销也走禁用方向
export function isEnabled(status) {
  return status === '0'
}
 
// 只有「正常」与「禁用」两态能互相切换。注销中/已注销由注销审核流程驱动,
// 列表页不给入口——否则随手一点就能把已注销的会员放回可用状态,等于绕过审核。
export function canToggleStatus(status) {
  return status === '0' || status === '1'
}
 
// 金额千分位,保留两位小数;后端返回的是字符串形式的 decimal
export function formatAmount(value) {
  if (value === null || value === undefined || value === '') {
    return '0.00'
  }
  const num = Number(value)
  if (Number.isNaN(num)) {
    return String(value)
  }
  return num.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })
}
 
export function isNegative(value) {
  return Number(value) < 0
}