Skip to content

FormatData 配置项

应用场景

在前端开发中,我们经常会遇到数值转换问题。

比如: 性别(女/男)以及各种枚举等,数据库中一般以 int 类型进行存储。

而数据回写时,需要前端将 int 类型转换成对应的汉字。


优秀的写法当然是将转换函数写到统一的工具类中,再通过 export 进行导出:

@/utils/format.ts

ts
/**
 * 格式化性别
 * @param val
 * @returns string
 */
export const formatSex = (val: number | undefined): string => {
  switch (val) {
    case 1:
      return '男'
    case 0:
      return '女'
  }
  return '--'
}
/**
 * 格式化性别
 * @param val
 * @returns string
 */
export const formatSex = (val: number | undefined): string => {
  switch (val) {
    case 1:
      return '男'
    case 0:
      return '女'
  }
  return '--'
}

然后在需要使用的地方进行引入

@/views/xxxxx.vue

vue
<div>
  <span>用户性别:</span>
  <span>{{ formatSex(1) }}</span>
</div>

<script setup lang="ts">
import { formatSex } from '@/utils/format.ts'
</script>
<div>
  <span>用户性别:</span>
  <span>{{ formatSex(1) }}</span>
</div>

<script setup lang="ts">
import { formatSex } from '@/utils/format.ts'
</script>

优化 & 使用

尽管上面的写法已经趋于完美,但我依然觉得在使用的时候还是不太方便,每次使用都要 import 引入。再考虑到项目时间紧,任务重(外包/小项目一般 1-2 周一个,时间非常紧),我就在想能否再简化些?能否我在配置中只需要写一个 format: 'formatSex' , 组件就能自动的格式化?


由此 formatData 配置项应运而生...

注册时传入 formatData

ts
//...
// 引用上文定义的函数
import * as formatData from '@/utils/format'

app.use(ElPlusCrud, {}, readonly(formatData))
//...
// 引用上文定义的函数
import * as formatData from '@/utils/format'

app.use(ElPlusCrud, {}, readonly(formatData))

在页面中的使用

html
<div>
  <span>用户性别:</span>
  <ElPlusFormText :modelValue="1" :desc="{ format: 'formatSex' }" />
</div>
<div>
  <span>用户性别:</span>
  <ElPlusFormText :modelValue="1" :desc="{ format: 'formatSex' }" />
</div>

*以上仅展示了组件独立使用的情况,结合表单效果更佳~