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