旧代码:
<script>
export default {
dicts: ['case_status', 'matter_type', 'notice_reason']
}
</script>
新代码:
<script setup>
import DictSelect from '@/components/DictSelect.vue'
import DictTag from '@/components/DictTag.vue'
import { useDict } from '@/composables/useDict'
const { dict } = useDict('case_status', 'matter_type', 'notice_reason')
</script>
旧代码:
<template>
<dict-tag :options="dict.type.matter_type" :value="scope.row.matterType" />
</template>
新代码:
<template>
<DictTag :options="dict.matter_type" :value="row.matterType" />
</template>
旧代码:
<el-select v-model="form.status">
<el-option
v-for="item in dict.type.case_status"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
新代码:
<DictSelect v-model:value="form.status" dict-type="case_status" />
旧代码:
<el-table-column label="状态" prop="status">
<template #default="scope">
<dict-tag :options="dict.type.case_status" :value="scope.row.status"/>
</template>
</el-table-column>
新代码(使用 render 函数):
<script setup>
import { h } from 'vue'
const columns = [
{
prop: 'status',
label: '状态',
render: row => h(DictTag, { options: dict.value.case_status, value: row.status })
}
]
</script>
<template>
<div>
<el-form :model="form">
<el-form-item label="状态">
<el-select v-model="form.status">
<el-option
v-for="item in dict.type.case_status"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="类型">
<el-select v-model="form.matterType">
<el-option
v-for="item in dict.type.matter_type"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-form>
<el-table :data="tableData">
<el-table-column label="状态" prop="status">
<template #default="scope">
<dict-tag :options="dict.type.case_status" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="类型" prop="matterType">
<template #default="scope">
<dict-tag :options="dict.type.matter_type" :value="scope.row.matterType" />
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
dicts: ['case_status', 'matter_type', 'notice_reason'],
data() {
return {
form: {
status: '',
matterType: ''
},
tableData: []
}
}
}
</script>
<template>
<AiCrudPage
api="/api/cases"
:search-schema="searchSchema"
:columns="columns"
:edit-schema="editSchema"
>
<!-- 搜索表单插槽 -->
<template #search-status="{ value, updateValue }">
<DictSelect :value="value" dict-type="case_status" @update:value="updateValue" />
</template>
<template #search-matterType="{ value, updateValue }">
<DictSelect :value="value" dict-type="matter_type" @update:value="updateValue" />
</template>
<!-- 编辑表单插槽 -->
<template #form-status="{ value, updateValue }">
<DictSelect :value="value" dict-type="case_status" @update:value="updateValue" />
</template>
<template #form-matterType="{ value, updateValue }">
<DictSelect :value="value" dict-type="matter_type" @update:value="updateValue" />
</template>
</AiCrudPage>
</template>
<script setup>
import { h } from 'vue'
import { AiCrudPage } from '@/components/ai-form'
import DictSelect from '@/components/DictSelect.vue'
import DictTag from '@/components/DictTag.vue'
import { useDict } from '@/composables/useDict'
const { dict } = useDict('case_status', 'matter_type', 'notice_reason')
// 搜索表单
const searchSchema = [
{
field: 'status',
label: '状态',
type: 'slot',
slotName: 'status'
},
{
field: 'matterType',
label: '类型',
type: 'slot',
slotName: 'matterType'
}
]
// 表格列
const columns = [
{
prop: 'status',
label: '状态',
width: 100,
render: row => h(DictTag, { options: dict.value.case_status, value: row.status })
},
{
prop: 'matterType',
label: '类型',
width: 120,
render: row => h(DictTag, { options: dict.value.matter_type, value: row.matterType })
}
]
// 编辑表单
const editSchema = [
{
field: 'status',
label: '状态',
type: 'slot',
slotName: 'status',
rules: [{ required: true, message: '请选择状态' }]
},
{
field: 'matterType',
label: '类型',
type: 'slot',
slotName: 'matterType',
rules: [{ required: true, message: '请选择类型' }]
}
]
</script>
可以使用以下正则表达式进行批量替换:
查找: dict\.type\.(\w+)
替换: dict.$1
查找: <dict-tag
替换: <DictTag
查找: </dict-tag>
替换: </DictTag>
查找: scope\.row
替换: row
useDict、DictTag 和 DictSelectdict.value.xxx 而不是 dict.xxx迁移完成后,请测试以下功能:
A: 检查后端接口 /system/dict/data/list 是否正常,参数 dictType 是否正确。
A: 检查 options 或 dictType 是否正确传递,value 是否与字典值匹配。
A: 检查 dictType 是否正确,字典数据是否已加载。
A: 在 render 函数中使用 dict.value.xxx 而不是 dict.xxx。
A: 使用 reload() 函数重新加载字典,或使用 clearDictCache() 清除缓存。
如有问题,请查看: