Browse Source

2024-1-4 数据字典

master
zelian_wu 2 years ago
parent
commit
2794f6266c
  1. 70
      src/api/dict.js
  2. 364
      src/views/modules/sys/dict-data.vue
  3. 318
      src/views/modules/sys/dict.vue

70
src/api/dict.js

@ -0,0 +1,70 @@
import {createAPI} from "../utils/httpRequest";
/**
* 查询字典类型
* @param no
* @param size
* @param data
* @returns {*}
*/
export const selectDictTypePage = (no,size,data) =>createAPI(`/sys/dictType/${no}/${size}`,'get',data)
export const selectDictTypeList = (data) =>createAPI(`/sys/dictType/list`,'get',data)
/**
* 新增字典类型
* @param data
* @returns {*}
*/
export const saveDictType = (data) => createAPI(`/sys/dictType/save`,'post',data);
/**
* 删除字典类型
* @param data
* @returns {*}
*/
export const removeDictType = (data) => createAPI(`/sys/dictType/remove`,'post',data);
/**
* 删除字典类型
* @param data
* @returns {*}
*/
export const delDictType = (data) => createAPI(`/sys/dictType/del`,'post',data);
export const delBatchDictType = (data) => createAPI(`/sys/dictType/delBatch`,'post',data);
/**
* 修改字典类型
* @param data
* @returns {*}
*/
export const updateDictType = (data) => createAPI(`/sys/dictType/update`,'post',data);
/**
* 查询字典数据
* @param no
* @param size
* @param data
* @returns {*}
*/
export const selectDictDataPage = (no,size,data) =>createAPI(`/sys/dictData/${no}/${size}`,'get',data)
export const selectDictDataList = (data) =>createAPI(`/sys/dictData/list`,'get',data)
/**
* 新增字典数据
* @param data
* @returns {*}
*/
export const saveDictData = (data) => createAPI(`/sys/dictData/save`,'post',data);
/**
* 删除字典数据
* @param data
* @returns {*}
*/
export const removeDictData = (data) => createAPI(`/sys/dictData/remove`,'post',data);
/**
* 删除字典数据
* @param data
* @returns {*}
*/
export const delDictData = (data) => createAPI(`/sys/dictData/del`,'post',data);
export const delBatchDictData = (data) => createAPI(`/sys/dictData/delBatch`,'post',data);
/**
* 修改字典数据
* @param data
* @returns {*}
*/
export const updateDictData = (data) => createAPI(`/sys/dictData/update`,'post',data);

364
src/views/modules/sys/dict-data.vue

@ -0,0 +1,364 @@
<script>
import {updateDictData,selectDictTypeList,saveDictData,selectDictDataPage,delDictData,delBatchDictData} from "../../../api/dict";
export default {
name: "dictData",
data(){
return{
//
searchData:{
site:this.$store.state.user.site,
dictLabel:undefined,
dictType:undefined,
status:undefined,
},
//
no:1,
size:50,
total:0,
//
saveData:{
dictId:undefined,
dictLabel:undefined,
dictType: undefined,
dictValue: undefined,
dictSort: 1,
isDefault: 'N',
status:'Y',
createBy:this.$store.state.user.name,
createDate:undefined,
updateBy:this.$store.state.user.name,
updateDate:undefined,
remark:undefined,
site:this.$store.state.user.site,
},
//
dataLabelValue:[
{label:'字典标签',value:'dictLabel'},
{label:'字典类型',value:'dictType'},
{label:'字典键值',value:'dictValue'},
{label:'字典排序',value:'dictSort'},
{label:'状态',value:'status'},
],
//
dictDataList:[],
dictTypeList:[],
//
saveDataDialogFlag:false,
// (0,1)
insertOrUpdate:0,
//
dictDataRules: {
dictLabel:[{required:true,message:' ',tagger:['blur','change']}],
dictType:[{required:true,message:' ',tagger:['blur','change']}],
dictValue:[{required:true,message:' ',tagger:['blur','change']}],
dictSort:[{required:true,type:'number',message:' ',tagger:['blur','change']}],
status:[{required:true,message:' ',tagger:['blur','change']}],
},
//
selectionDictTypeList:[],
//
activeTabs:'dictData',
}
},
methods:{
initDictData(){
selectDictDataPage(this.no,this.size,this.searchData).then(({data})=>{
if (data && data.code === 0){
this.dictDataList = data.rows;
this.total = data.total;
this.$refs.dictDataTable.clearSelection();
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
})
},
openDictTypeDialog(val,row){
this.insertOrUpdate = val;
if (row){
this.saveData = {...row}
}
this.saveDataDialogFlag = true
},
closeSaveDataDialog(){
this.$refs.saveDataForm.resetFields();
this.saveData.remark = undefined;
},
openSaveDataDialog(){
this.saveData.dictType = this.searchData.dictType;
},
saveOrUpdate(){
this.$refs.saveDataForm.validate((validate,objects)=> {
if (validate) {
if (this.insertOrUpdate === 0){
this.saveDictData();
}else {
this.updateDictData();
}
} else {
this.rulesValidateLabel(objects,this.dataLabelValue)
}
})
},
saveDictData(){
saveDictData(this.saveData).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictData();
this.saveDataDialogFlag = false;
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
updateDictData(){
updateDictData(this.saveData).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictData();
this.saveDataDialogFlag = false;
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
delDictData(row){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delDictData(row).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictData();
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
delBatchDictData(){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delBatchDictData(this.selectionDictTypeList).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictData();
this.$refs.dictDataTable.clearSelection();
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
handleSelectionChange(val){
this.selectionDictTypeList = val;
},
dictTypeSizeChange(val){
this.no = 1
this.size = val
this.initDictData();
},
dictTypeNoChange(val){
this.no = val
this.initDictData();
},
selectDictTypeList(){
let params = {
site:this.$store.state.user.site,
}
selectDictTypeList(params).then(({data})=>{
if (data && data.code === 0){
this.dictTypeList = data.rows;
if (this.$route.params.dictType){
this.searchData.dictType = this.$route.params.dictType
}else {
if (this.dictTypeList.length > 0){
this.searchData.dictType = this.dictTypeList[0].dictType;
}
}
this.initDictData();
}
}).catch((error)=>{
})
},
//
rulesValidateLabel(objects, labels) {
for (let filed in objects) {
for (let i = 0; i < labels.length; i++) {
let quotationToolColumn = labels[i];
if (quotationToolColumn.value === filed) {
this.$message.warning(quotationToolColumn.label+"为空或填写不正确");
return
}
}
}
},
},
created() {
},
activated() {
this.selectDictTypeList()
}
}
</script>
<template>
<div>
<el-form ref="form" label-position="top" :model="searchData" label-width="80px">
<el-row :gutter="20">
<el-col :span="3">
<el-form-item label="字典名称">
<el-select v-model="searchData.dictType" style="width: 100%" placeholder="请选择">
<el-option
v-for="item in dictTypeList"
:key="item.dictType"
:label="item.dictName"
:value="item.dictType">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="字典标签">
<el-input v-model="searchData.dictLabel" clearable/>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label="状态">
<el-select v-model="searchData.status" clearable style="width: 100%" placeholder="请选择">
<el-option
key="Y"
label="启用"
value="Y">
</el-option>
<el-option
key="N"
label="停用"
value="N">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label=" ">
<el-button type="primary" @click="initDictData" icon="el-icon-search"> </el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="margin-bottom: 8px;margin-top: 8px">
<el-button type="primary" icon="el-icon-plus" @click="openDictTypeDialog(0)"> </el-button>
<el-button type="primary" icon="el-icon-delete" @click="delBatchDictData"> </el-button>
</div>
<el-table
border height="75vh" row-key="dictCode"
:data="dictDataList"
ref="dictDataTable"
@selection-change="handleSelectionChange"
style="width: 100%">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
<el-table-column type="index" width="80" header-align="center" label="字典序号" align="right"/>
<el-table-column prop="dictLabel" header-align="center" align="center" label="字典标签"/>
<el-table-column prop="dictValue" header-align="center" label="字典键值"/>
<el-table-column prop="dictSort" header-align="center" label="字典排序"/>
<el-table-column prop="status" header-align="center" align="center" label="字典状态">
<template slot-scope="{row,$index}">
<span>{{row.status === 'Y'?'启用':'停用'}}</span>
</template>
</el-table-column>
<el-table-column prop="remark" header-align="center" align="left" label="备注"/>
<el-table-column prop="createBy" header-align="center" label="创建者"/>
<el-table-column prop="createDate" header-align="center" align="center" label="创建时间"/>
<el-table-column header-align="center" align="center" label="操作" width="160">
<template slot-scope="{row,$index}">
<el-button type="text" :disabled="row.isSystem === 'Y'" @click="openDictTypeDialog(1,row)" icon="el-icon-edit">修改</el-button>
<el-button type="text" :disabled="row.isSystem === 'Y'" @click="delDictData(row)" icon="el-icon-delete">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="dictTypeSizeChange"
@current-change="dictTypeNoChange"
:current-page="no"
:page-sizes="[20, 50, 100, 200, 500]"
:page-size="size"
:total="total"
layout="total,sizes, prev, pager, next, jumper">
</el-pagination>
<el-dialog :visible.sync="saveDataDialogFlag" @open="openSaveDataDialog" @close="closeSaveDataDialog" width="30%" :title="insertOrUpdate === 0?'新增-字典数据':'修改-字典数据'">
<el-form ref="saveDataForm" label-position="top" :rules="dictDataRules" :model="saveData" label-width="80px">
<el-form-item label="字典类型" prop="dictType">
<el-input disabled v-model="saveData.dictType" clearable/>
</el-form-item>
<el-form-item label="字典标签" prop="dictLabel">
<el-input v-model="saveData.dictLabel" clearable/>
</el-form-item>
<el-form-item label="数据键值" prop="dictValue">
<el-input v-model="saveData.dictValue" clearable/>
</el-form-item>
<el-form-item label="数据排序" prop="dictSort">
<el-input-number v-model="saveData.dictSort" :min="0" :controls="false"/>
</el-form-item>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="状态" prop="status">
<el-radio-group v-model="saveData.status">
<el-radio :label="'Y'">启用</el-radio>
<el-radio :label="'N'">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label=" " >
<el-checkbox v-model="saveData.isDefault" :true-label="'Y'" :false-label="'N'">默认</el-checkbox>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" style="height: 90px">
<el-input type="textarea" :autosize="{minRows: 3, maxRows: 3}" resize='none' v-model="saveData.remark"/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="saveDataDialogFlag = false"> </el-button>
<el-button type="primary" @click="saveOrUpdate"> </el-button>
</span>
</el-dialog>
</div>
</template>
<style scoped>
/deep/ .el-table .cell {
line-height: 14px;
font-size: 12px;
height: auto;
}
/deep/ .el-textarea .el-textarea__inner {
padding: 0px 5px;
}
</style>

318
src/views/modules/sys/dict.vue

@ -0,0 +1,318 @@
<script>
import {saveDictType,selectDictTypePage,delDictType,delBatchDictType,updateDictType} from "../../../api/dict";
import DictData from "./dict-data.vue";
export default {
name: "dict",
components: {DictData},
data(){
return{
//
searchData:{
site:this.$store.state.user.site,
dictName:undefined,
dictType:undefined,
status:undefined,
},
//
no:1,
size:50,
total:0,
//
saveData:{
dictId:undefined,
dictName:undefined,
dictType: undefined,
status:'Y',
createBy:this.$store.state.user.name,
createDate:undefined,
updateBy:this.$store.state.user.name,
updateDate:undefined,
remark:undefined,
site:this.$store.state.user.site,
},
//
dataLabelValue:[
{label:'字典名称',value:'dictName'},
{label:'字典类型',value:'dictType'},
{label:'状态',value:'status'},
],
//
dictTypeList:[],
//
saveDataDialogFlag:false,
// (0,1)
insertOrUpdate:0,
//
dictTypeRules: {
dictName:[{required:true,message:' ',tagger:['blur','change']}],
dictType:[{required:true,message:' ',tagger:['blur','change']}],
status:[{required:true,message:' ',tagger:['blur','change']}],
},
//
selectionDictTypeList:[],
//
activeTabs:'dictData',
}
},
methods:{
initDictTypeData(){
selectDictTypePage(this.no,this.size,this.searchData).then(({data})=>{
if (data && data.code === 0){
this.dictTypeList = data.rows;
this.total = data.total;
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
})
},
removeDictType(row){
this.$message.success(row)
},
openDictTypeDialog(val,row){
this.insertOrUpdate = val;
if (row){
this.saveData = {...row}
}
this.saveDataDialogFlag = true
},
closeSaveDataDialog(){
this.$refs.saveDataForm.resetFields();
this.saveData.remark = undefined;
},
saveOrUpdate(){
this.$refs.saveDataForm.validate((validate,objects)=>{
if (validate){
if (this.insertOrUpdate === 0){
this.saveDictType();
}else {
this.updateDictType();
}
}else {
this.rulesValidateLabel(objects,this.dataLabelValue);
}
})
},
saveDictType(){
saveDictType(this.saveData).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictTypeData();
this.saveDataDialogFlag = false;
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
updateDictType(){
updateDictType(this.saveData).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictTypeData();
this.saveDataDialogFlag = false;
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
},
delDictType(row){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delDictType(row).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictTypeData();
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
delBatchDictType(){
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delBatchDictType(this.selectionDictTypeList).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg);
this.initDictTypeData();
this.$refs.dictTypeTable.clearSelection();
}else {
this.$message.error(data.msg)
}
}).catch((error)=>{
this.$message.error(error)
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
handleSelectionChange(val){
this.selectionDictTypeList = val;
},
dictTypeSizeChange(val){
this.no = 1
this.size = val
this.initDictTypeData();
},
dictTypeNoChange(val){
this.no = val
this.initDictTypeData();
},
clickDictType(dictType){
this.$router.push({name:"sys-dict-data",params:{dictType:dictType},})
},
//
rulesValidateLabel(objects, labels) {
for (let filed in objects) {
for (let i = 0; i < labels.length; i++) {
let quotationToolColumn = labels[i];
if (quotationToolColumn.value === filed) {
this.$message.warning(quotationToolColumn.label+"为空或填写不正确");
return
}
}
}
},
},
created() {
this.initDictTypeData();
}
}
</script>
<template>
<div>
<el-form ref="form" label-position="top" :model="searchData" label-width="80px">
<el-row :gutter="20">
<el-col :span="3">
<el-form-item label="字典名称">
<el-input v-model="searchData.dictName" clearable/>
</el-form-item>
</el-col>
<el-col :span="3">
<el-form-item label="字典类型">
<el-input v-model="searchData.dictType" clearable/>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label="状态">
<el-select v-model="searchData.status" clearable style="width: 100%" placeholder="请选择">
<el-option
key="Y"
label="启用"
value="Y">
</el-option>
<el-option
key="N"
label="停用"
value="N">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label=" ">
<el-button type="primary" @click="initDictTypeData" icon="el-icon-search"> </el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="margin-bottom: 8px;margin-top: 8px">
<el-button type="primary" icon="el-icon-plus" @click="openDictTypeDialog(0)"> </el-button>
<el-button type="primary" icon="el-icon-delete" @click="delBatchDictType"> </el-button>
</div>
<el-table
border height="75vh" row-key="dictId"
:data="dictTypeList"
ref="dictTypeTable"
@selection-change="handleSelectionChange"
style="width: 100%">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"/>
<el-table-column type="index" width="80" header-align="center" label="字典序号" align="right"/>
<el-table-column prop="dictName" header-align="center" label="字典名称"/>
<el-table-column prop="dictType" header-align="center" align="center" label="字典类型">
<template slot-scope="{row,$index}">
<el-link style="cursor: pointer" @click="clickDictType(row.dictType)">{{row.dictType}}</el-link>
</template>
</el-table-column>
<el-table-column prop="status" header-align="center" align="center" label="字典状态">
<template slot-scope="{row,$index}">
<span>{{row.status === 'Y'?'启用':'停用'}}</span>
</template>
</el-table-column>
<el-table-column prop="remark" header-align="center" align="left" label="备注"/>
<el-table-column prop="createBy" header-align="center" label="创建者"/>
<el-table-column prop="createDate" header-align="center" align="center" label="创建时间"/>
<el-table-column header-align="center" align="center" label="操作" width="160">
<template slot-scope="{row,$index}">
<el-button type="text" @click="openDictTypeDialog(1,row)" icon="el-icon-edit">修改</el-button>
<el-button type="text" @click="delDictType(row)" icon="el-icon-delete">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="dictTypeSizeChange"
@current-change="dictTypeNoChange"
:current-page="no"
:page-sizes="[20, 50, 100, 200, 500]"
:page-size="size"
:total="total"
layout="total,sizes, prev, pager, next, jumper">
</el-pagination>
<el-dialog :visible.sync="saveDataDialogFlag" @close="closeSaveDataDialog" width="30%" :title="insertOrUpdate === 0?'新增-字典类型':'修改-字典类型'">
<el-form ref="saveDataForm" label-position="top" :rules="dictTypeRules" :model="saveData" label-width="80px">
<el-form-item label="字典名称" prop="dictName">
<el-input v-model="saveData.dictName" clearable/>
</el-form-item>
<el-form-item label="字典类型" prop="dictType">
<el-input v-model="saveData.dictType" clearable/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="saveData.status">
<el-radio :label="'Y'">启用</el-radio>
<el-radio :label="'N'">停用</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" style="height: 90px">
<el-input type="textarea" :autosize="{minRows: 3, maxRows: 3}" resize='none' v-model="saveData.remark"/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="saveDataDialogFlag = false"> </el-button>
<el-button type="primary" @click="saveOrUpdate"> </el-button>
</span>
</el-dialog>
</div>
</template>
<style scoped>
/deep/ .el-table .cell {
line-height: 14px;
font-size: 12px;
height: auto;
}
/deep/ .el-textarea .el-textarea__inner {
padding: 0px 5px;
}
</style>
Loading…
Cancel
Save