tansci-boot/tansci-boot-ui/src/views/system/Dict.vue

215 lines
6.8 KiB
Vue

<script setup lang="ts">
import {onMounted, reactive, ref, getCurrentInstance} from 'vue'
import {ElMessage, ElMessageBox} from 'element-plus'
import type {FormInstance} from 'element-plus'
import common from '@/utils/common'
import Table from '@/components/Table.vue'
import {tree,save,update,del} from '@/api/system/dict'
const { proxy } = getCurrentInstance()
const table = reactive({
loading: false,
operation:{
isShow: true,
width: '200'
},
tableTitle: [
{prop:'dicLabel',label:'字典标签',align:'left'},
{prop:'groupName',label:'分组名称'},
{prop:'type',label:'字典类型',type:'dict',dictType:'business_type'},
{prop:'dicValue',label:'字典值'},
{prop:'sort',label:'排序'},
{prop:'createTime',label:'创建时间'},
{prop:'remarks',label:'描述'}
],
tableData: []
})
onMounted(()=>{
onDictList()
})
function onDictList(){
table.loading = true;
tree({}).then((res:any)=>{
if(res){
table.loading = false;
table.tableData = res.result;
}
})
}
const formRef = ref<FormInstance>()
const form = reactive({
operate: 0,
dictVisible: false,
dictForm:{
id: '',
groupName: '',
parentId: '0',
type: '',
dicValue: '',
dicLabel: '',
sort: 0,
remarks: ''
}
})
function onAdd(val:any){
if(val){
form.dictForm = {
id: '',
groupName: '',
parentId: val.column.row.id,
type: '',
dicValue: '',
dicLabel: '',
sort: 0,
remarks: ''
}
} else {
form.dictForm = {
id: '',
groupName: '',
parentId: '0',
type: '',
dicValue: '',
dicLabel: '',
sort: 0,
remarks: ''
}
}
form.operate = 0
form.dictVisible = true
}
function onEdit(val:any){
form.dictForm = {
id: val.column.row.id,
groupName: val.column.row.groupName,
parentId: val.column.row.parentId,
type: val.column.row.type,
dicValue: val.column.row.dicValue,
dicLabel: val.column.row.dicLabel,
sort: val.column.row.sort,
remarks: val.column.row.remarks
}
form.operate = 1
form.dictVisible = true
}
function onDelete(val:any){
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
del(val.column.row.id).then(res=>{
if(res){
ElMessage.success('删除成功!');
onDictList();
common.getDictData()
}
})
}).catch(e=>{
console.log(e)
})
}
const onSubmit = async (formEl: FormInstance | undefined) => {
if (!formEl) return;
await formEl.validate((valid)=>{
if(valid){
if(form.operate == 0){
save(form.dictForm).then(res=>{
if(res){
ElMessage.success("添加成功!");
onDictList()
common.getDictData()
}
})
} else {
update(form.dictForm).then(res=>{
if(res){
ElMessage.success("更新成功!");
onDictList()
common.getDictData()
}
})
}
form.operate = 0
form.dictVisible = false
}
})
}
</script>
<template>
<el-card class="dict-container" :shadow="proxy.$global.cardShadow">
<Table :data="table.tableData" :column="table.tableTitle" :operation="table.operation" :page="false" :loading="table.loading">
<template #search>
<div><el-button @click="onAdd(null)" type="primary">添加</el-button></div>
</template>
<template #column="scope">
<el-button @click="onAdd(scope)" type="text" style="color:var(--add)">添加下级</el-button>
<el-button @click="onEdit(scope)" type="text" style="color:var(--edit)">编辑</el-button>
<el-button @click="onDelete(scope)" type="text" style="color:var(--delete)">删除</el-button>
</template>
</Table>
<el-dialog title="字典信息" v-model="form.dictVisible" :show-close="false" width="40%">
<el-form :model="form.dictForm" ref="formRef" :rules="rules" label-width="80px" status-icon>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="分组名称" prop="groupName" :rules="[{required: true,message:'请输入分组名称',trigger: 'blur'}]">
<el-input v-model="form.dictForm.groupName" placeholder="请输入分组名称" style="width: 100%"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="type" :rules="[{required: true,message:'请选择类型',trigger: 'blur'}]">
<el-radio-group v-model="form.dictForm.type">
<el-radio :label="0">系统</el-radio>
<el-radio :label="1">业务</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="字典名称" prop="dicLabel" :rules="[{required: true,message:'请输入字典名称',trigger: 'blur'}]">
<el-input v-model="form.dictForm.dicLabel" placeholder="请输入字典名称" style="width: 100%"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="字典值" prop="dicValue" :rules="[{required: true,message:'请输入字典值',trigger: 'blur'}]">
<el-input v-model="form.dictForm.dicValue" placeholder="请输入字典值" style="width: 100%"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="排序" prop="sort">
<el-input-number v-model="form.dictForm.sort" :min="0" :max="999" controls-position="right" style="width: 100%"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="描述" prop="remarks">
<el-input v-model="form.dictForm.remarks" type="textarea" placeholder="请输入描述" style="width: 100%"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="form.dictVisible = false">取消</el-button>
<el-button type="primary" @click="onSubmit(formRef)"></el-button>
</span>
</template>
</el-dialog>
</el-card>
</template>
<style lang="scss" scoped>
.dict-container{
}
</style>