# utils

## 介绍

包含常量、工具函数、request 等。

## constant

常量文件，按照业务进行拆分，包含正则或者与后端约定的常量值。在业务代码中使用常量时必须从常量文件中取值，不允许直接使用常量值进行赋值、判断等操作。命名规则为`camelCase`，结构使用对象，value 代表常量值，label 代表常量值翻译。

### 代码示例

```typescript
export default {
	role: {
		hr: {
			label: '人力',
			value: 'ehr',
		},
		employees: {
			label: '员工',
			value: 'ehr_staff',
		},
	},
}

// 在下拉框中使用常量值
const selectData = Object.values(role)
// 在判断或者赋值中使用常量值
if (value == role.hr.value) {
}
const roleValue = role.employees.value
```

## core

包含组件库按需加载，并已经在 vite 中进行配置，业务代码中没有使用的组件不要全局注册，减少打包体积。

## i18n

原则上在业务代码中不直接写汉字，而是通过词条来进行定义。entrys 中按照业务进行划分，在业务代码中进行复用。common 中存放不具有任何业务意义的词条，system 中存放与业务相关的词条，命名规则为首字母大写下划线连接，注意唯一性。

### 使用

通过 getI18n 函数来获取词条。systemName 参数代表对应的 entry，data 代表词条 key 值，params 代表动态词条。

```typescript
// 静态词条
{
	Common_Save: '保存'
}
// 使用
const label = getI18n('common', 'Common_Save')

// 动态词条，{0}为占位符，从0开始可以含有多个动态占位符
{
	Common_Enter_Max: '最多输入{0}字'
}
// 使用，第三个参数是一个数组，占位符中的数字对应数组的index，进行逐个替换，
const label = getI18n('common', 'Common_Enter_Max', ['200'])
// label的值是"最多输入200字"
```

## request

对 axios 的封装，导出 request 对象，在 api 中使用，通过 new JAxios 并且传入参数来创建 request 对象，可以创建多个。

### Axios

axios 对象，向外暴露`get`、`post`、`download`方法进行请求。请求时将 token 添加到 header 中，并且可选是否为 get 请求增加时间戳。返回时及时更新 token 值到本地缓存，处理异常状态码。

### index.ts

```typescript
import type { CreateAxiosOptions } from './model'

import { JAxios } from './Axios'
const env = import.meta.env
// 默认的request，如果存在多个后端，分别new JAxios即可
const defOptions: CreateAxiosOptions = {
	baseURL: '/test-api', // 统一前缀
	timeout: 100000, // 响应时间
	isGetTimeStamp: false, // 是否为get请求增加时间戳
	tokenName: env.VITE_TOKEN_NAME as string, // 后端服务要求的代表token的名称，从env中获取
}
export const defRequest = new JAxios(defOptions)
```

## tool

工具函数相关，translateValue 默认包含俩个工具函数，来代替过滤器。getViewText 适用于字典翻翻译值。getDayText 适用于日期格式化。
