main
parent
0058b74ddf
commit
d984ac4e23
@ -0,0 +1,17 @@ |
||||
import request from '@/config/axios' |
||||
|
||||
// 查询
|
||||
export const searchConfig = async (params) => { |
||||
return await request.get({ |
||||
url: 'admin-api/applet/wrj/sysConfig/page', |
||||
params |
||||
}) |
||||
} |
||||
|
||||
// 修改
|
||||
export const updateConfig = async (data) => { |
||||
return await request.post({ |
||||
url: 'admin-api/applet/wrj/sysConfig/update', |
||||
data |
||||
}) |
||||
} |
@ -1,181 +0,0 @@ |
||||
<template> |
||||
<Dialog v-model="dialogVisible" :title="dialogTitle"> |
||||
<el-form |
||||
ref="formRef" |
||||
v-loading="formLoading" |
||||
:model="formData" |
||||
:rules="formRules" |
||||
label-width="80px" |
||||
> |
||||
<el-form-item label="字典类型" prop="type"> |
||||
<el-input |
||||
v-model="formData.dictType" |
||||
:disabled="typeof formData.id !== 'undefined'" |
||||
placeholder="请输入参数名称" |
||||
/> |
||||
</el-form-item> |
||||
<el-form-item label="数据标签" prop="label"> |
||||
<el-input v-model="formData.label" placeholder="请输入数据标签" /> |
||||
</el-form-item> |
||||
<el-form-item label="数据键值" prop="value"> |
||||
<el-input v-model="formData.value" placeholder="请输入数据键值" /> |
||||
</el-form-item> |
||||
<el-form-item label="显示排序" prop="sort"> |
||||
<el-input-number v-model="formData.sort" :min="0" controls-position="right" /> |
||||
</el-form-item> |
||||
<el-form-item label="状态" prop="status"> |
||||
<el-radio-group v-model="formData.status"> |
||||
<el-radio |
||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" |
||||
:key="dict.value" |
||||
:label="dict.value" |
||||
> |
||||
{{ dict.label }} |
||||
</el-radio> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
<el-form-item label="颜色类型" prop="colorType"> |
||||
<el-select v-model="formData.colorType"> |
||||
<el-option |
||||
v-for="item in colorTypeOptions" |
||||
:key="item.value" |
||||
:label="item.label + '(' + item.value + ')'" |
||||
:value="item.value" |
||||
/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="CSS Class" prop="cssClass"> |
||||
<el-input v-model="formData.cssClass" placeholder="请输入 CSS Class" /> |
||||
</el-form-item> |
||||
<el-form-item label="备注" prop="remark"> |
||||
<el-input v-model="formData.remark" placeholder="请输入内容" type="textarea" /> |
||||
</el-form-item> |
||||
</el-form> |
||||
<template #footer> |
||||
<el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button> |
||||
<el-button @click="dialogVisible = false">取 消</el-button> |
||||
</template> |
||||
</Dialog> |
||||
</template> |
||||
<script lang="ts" name="SystemDictDataForm" setup> |
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
||||
import * as DictDataApi from '@/api/system/dict/dict.data' |
||||
import { CommonStatusEnum } from '@/utils/constants' |
||||
|
||||
const { t } = useI18n() // 国际化 |
||||
const message = useMessage() // 消息弹窗 |
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示 |
||||
const dialogTitle = ref('') // 弹窗的标题 |
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
||||
const formData = ref({ |
||||
id: undefined, |
||||
sort: undefined, |
||||
label: '', |
||||
value: '', |
||||
dictType: '', |
||||
status: CommonStatusEnum.ENABLE, |
||||
colorType: '', |
||||
cssClass: '', |
||||
remark: '' |
||||
}) |
||||
const formRules = reactive({ |
||||
label: [{ required: true, message: '数据标签不能为空', trigger: 'blur' }], |
||||
value: [{ required: true, message: '数据键值不能为空', trigger: 'blur' }], |
||||
sort: [{ required: true, message: '数据顺序不能为空', trigger: 'blur' }], |
||||
status: [{ required: true, message: '状态不能为空', trigger: 'change' }] |
||||
}) |
||||
const formRef = ref() // 表单 Ref |
||||
|
||||
// 数据标签回显样式 |
||||
const colorTypeOptions = readonly([ |
||||
{ |
||||
value: 'default', |
||||
label: '默认' |
||||
}, |
||||
{ |
||||
value: 'primary', |
||||
label: '主要' |
||||
}, |
||||
{ |
||||
value: 'success', |
||||
label: '成功' |
||||
}, |
||||
{ |
||||
value: 'info', |
||||
label: '信息' |
||||
}, |
||||
{ |
||||
value: 'warning', |
||||
label: '警告' |
||||
}, |
||||
{ |
||||
value: 'danger', |
||||
label: '危险' |
||||
} |
||||
]) |
||||
|
||||
/** 打开弹窗 */ |
||||
const open = async (type: string, id?: number, dictType?: string) => { |
||||
dialogVisible.value = true |
||||
dialogTitle.value = t('action.' + type) |
||||
formType.value = type |
||||
resetForm() |
||||
if (dictType) { |
||||
formData.value.dictType = dictType |
||||
} |
||||
// 修改时,设置数据 |
||||
if (id) { |
||||
formLoading.value = true |
||||
try { |
||||
formData.value = await DictDataApi.getDictData(id) |
||||
} finally { |
||||
formLoading.value = false |
||||
} |
||||
} |
||||
} |
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
||||
|
||||
/** 提交表单 */ |
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
||||
const submitForm = async () => { |
||||
// 校验表单 |
||||
if (!formRef.value) return |
||||
const valid = await formRef.value.validate() |
||||
if (!valid) return |
||||
// 提交请求 |
||||
formLoading.value = true |
||||
try { |
||||
const data = formData.value as DictDataApi.DictDataVO |
||||
if (formType.value === 'create') { |
||||
await DictDataApi.createDictData(data) |
||||
message.success(t('common.createSuccess')) |
||||
} else { |
||||
await DictDataApi.updateDictData(data) |
||||
message.success(t('common.updateSuccess')) |
||||
} |
||||
dialogVisible.value = false |
||||
// 发送操作成功的事件 |
||||
emit('success') |
||||
} finally { |
||||
formLoading.value = false |
||||
} |
||||
} |
||||
|
||||
/** 重置表单 */ |
||||
const resetForm = () => { |
||||
formData.value = { |
||||
id: undefined, |
||||
sort: undefined, |
||||
label: '', |
||||
value: '', |
||||
dictType: '', |
||||
status: CommonStatusEnum.ENABLE, |
||||
colorType: '', |
||||
cssClass: '', |
||||
remark: '' |
||||
} |
||||
formRef.value?.resetFields() |
||||
} |
||||
</script> |
@ -1,207 +0,0 @@ |
||||
<template> |
||||
<ContentWrap> |
||||
<el-form |
||||
class="-mb-15px" |
||||
:model="queryParams" |
||||
ref="queryFormRef" |
||||
:inline="true" |
||||
label-width="68px" |
||||
> |
||||
<el-form-item label="字典名称" prop="dictType"> |
||||
<el-select v-model="queryParams.dictType" class="!w-240px"> |
||||
<el-option |
||||
v-for="item in dictTypeList" |
||||
:key="item.type" |
||||
:label="item.name" |
||||
:value="item.type" |
||||
/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item label="字典标签" prop="label"> |
||||
<el-input |
||||
v-model="queryParams.label" |
||||
placeholder="请输入字典标签" |
||||
clearable |
||||
@keyup.enter="handleQuery" |
||||
class="!w-240px" |
||||
/> |
||||
</el-form-item> |
||||
<el-form-item label="状态" prop="status"> |
||||
<el-select v-model="queryParams.status" placeholder="数据状态" clearable class="!w-240px"> |
||||
<el-option |
||||
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)" |
||||
:key="dict.value" |
||||
:label="dict.label" |
||||
:value="dict.value" |
||||
/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
||||
<el-button |
||||
type="primary" |
||||
plain |
||||
@click="openForm('create')" |
||||
v-hasPermi="['system:dict:create']" |
||||
> |
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
||||
</el-button> |
||||
<el-button |
||||
type="success" |
||||
plain |
||||
@click="handleExport" |
||||
:loading="exportLoading" |
||||
v-hasPermi="['system:dict:export']" |
||||
> |
||||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
||||
</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</ContentWrap> |
||||
|
||||
<!-- 列表 --> |
||||
<ContentWrap> |
||||
<el-table v-loading="loading" :data="list"> |
||||
<el-table-column label="字典编码" align="center" prop="id" /> |
||||
<el-table-column label="字典标签" align="center" prop="label" /> |
||||
<el-table-column label="字典键值" align="center" prop="value" /> |
||||
<el-table-column label="字典排序" align="center" prop="sort" /> |
||||
<el-table-column label="状态" align="center" prop="status"> |
||||
<template #default="scope"> |
||||
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="颜色类型" align="center" prop="colorType" /> |
||||
<el-table-column label="CSS Class" align="center" prop="cssClass" /> |
||||
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip /> |
||||
<el-table-column |
||||
label="创建时间" |
||||
align="center" |
||||
prop="createTime" |
||||
width="180" |
||||
:formatter="dateFormatter" |
||||
/> |
||||
<el-table-column label="操作" align="center"> |
||||
<template #default="scope"> |
||||
<el-button |
||||
link |
||||
type="primary" |
||||
@click="openForm('update', scope.row.id)" |
||||
v-hasPermi="['system:dict:update']" |
||||
> |
||||
修改 |
||||
</el-button> |
||||
<el-button |
||||
link |
||||
type="danger" |
||||
@click="handleDelete(scope.row.id)" |
||||
v-hasPermi="['system:dict:delete']" |
||||
> |
||||
删除 |
||||
</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<!-- 分页 --> |
||||
<Pagination |
||||
:total="total" |
||||
v-model:page="queryParams.pageNo" |
||||
v-model:limit="queryParams.pageSize" |
||||
@pagination="getList" |
||||
/> |
||||
</ContentWrap> |
||||
|
||||
<!-- 表单弹窗:添加/修改 --> |
||||
<DictDataForm ref="formRef" @success="getList" /> |
||||
</template> |
||||
<script setup lang="ts" name="SystemDictData"> |
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' |
||||
import { dateFormatter } from '@/utils/formatTime' |
||||
import download from '@/utils/download' |
||||
import * as DictDataApi from '@/api/system/dict/dict.data' |
||||
import * as DictTypeApi from '@/api/system/dict/dict.type' |
||||
import DictDataForm from './DictDataForm.vue' |
||||
const message = useMessage() // 消息弹窗 |
||||
const { t } = useI18n() // 国际化 |
||||
const route = useRoute() // 路由 |
||||
|
||||
const loading = ref(true) // 列表的加载中 |
||||
const total = ref(0) // 列表的总页数 |
||||
const list = ref([]) // 列表的数据 |
||||
const queryParams = reactive({ |
||||
pageNo: 1, |
||||
pageSize: 10, |
||||
label: '', |
||||
status: undefined, |
||||
dictType: route.params.dictType |
||||
}) |
||||
const queryFormRef = ref() // 搜索的表单 |
||||
const exportLoading = ref(false) // 导出的加载中 |
||||
const dictTypeList = ref<DictTypeApi.DictTypeVO[]>() // 字典类型的列表 |
||||
|
||||
/** 查询列表 */ |
||||
const getList = async () => { |
||||
loading.value = true |
||||
try { |
||||
const data = await DictDataApi.getDictDataPage(queryParams) |
||||
list.value = data.list |
||||
total.value = data.total |
||||
} finally { |
||||
loading.value = false |
||||
} |
||||
} |
||||
|
||||
/** 搜索按钮操作 */ |
||||
const handleQuery = () => { |
||||
queryParams.pageNo = 1 |
||||
getList() |
||||
} |
||||
|
||||
/** 重置按钮操作 */ |
||||
const resetQuery = () => { |
||||
queryFormRef.value.resetFields() |
||||
handleQuery() |
||||
} |
||||
|
||||
/** 添加/修改操作 */ |
||||
const formRef = ref() |
||||
const openForm = (type: string, id?: number) => { |
||||
formRef.value.open(type, id, queryParams.dictType) |
||||
} |
||||
|
||||
/** 删除按钮操作 */ |
||||
const handleDelete = async (id: number) => { |
||||
try { |
||||
// 删除的二次确认 |
||||
await message.delConfirm() |
||||
// 发起删除 |
||||
await DictDataApi.deleteDictData(id) |
||||
message.success(t('common.delSuccess')) |
||||
// 刷新列表 |
||||
await getList() |
||||
} catch {} |
||||
} |
||||
|
||||
/** 导出按钮操作 */ |
||||
const handleExport = async () => { |
||||
try { |
||||
// 导出的二次确认 |
||||
await message.exportConfirm() |
||||
// 发起导出 |
||||
exportLoading.value = true |
||||
const data = await DictDataApi.exportDictData(queryParams) |
||||
download.excel(data, '字典数据.xls') |
||||
} catch { |
||||
} finally { |
||||
exportLoading.value = false |
||||
} |
||||
} |
||||
|
||||
/** 初始化 **/ |
||||
onMounted(async () => { |
||||
await getList() |
||||
// 查询字典(精简)列表 |
||||
dictTypeList.value = await DictTypeApi.getSimpleDictTypeList() |
||||
}) |
||||
</script> |
Loading…
Reference in new issue